ETH Price: $2,307.55 (-0.48%)

Token

Baby Origin (BOG)
 

Overview

Max Total Supply

1,000,000,000,000 BOG

Holders

81

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Filtered by Token Holder
the-quaalude.eth
Balance
46,550,000 BOG

Value
$0.00
0x8FFdD83b2C1541e661c2437B1887844654E050c9
Loading...
Loading
Loading...
Loading
Loading...
Loading

Click here to update the token information / general information
# Exchange Pair Price  24H Volume % Volume
This contract may be a proxy contract. Click on More Options and select Is this a proxy? to confirm and enable the "Read as Proxy" & "Write as Proxy" tabs.

Contract Source Code Verified (Exact Match)

Contract Name:
BabyOrigin

Compiler Version
v0.8.13+commit.abaa5c0e

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

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

/* Buys back and burns Origin automatically

https://t.me/BabyOriginEntry

**/

// SPDX-License-Identifier: MIT                                                                               

pragma solidity 0.8.13;

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

    function _msgData() internal view virtual returns (bytes calldata) {
        this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691
        return msg.data;
    }
}

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

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

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

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

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

    /**
     * @dev Sets `amount` as the allowance of `spender` over the cal ler's tokens.
     *
     * Returns a boolean value indicating whether the op eration succeeded.
     *
     * IMPORTANT: Beware that changing an allowan ce 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 spe nder's allowance to 0 and set the
     * desired valu  afterwards:
     * https://github.co m/ethereum/EIPs/issues/20#issuecomment-263524729
     *
     * Emits an {Approval} event.
     */
    function approve(address spender, uint256 amount) external returns (bool);

    /**
     * @dev Moves `amount` toke ns from `sender` to `recipient` using the
     * allowance mechanism. `am ount` 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 `v alue` tokens are moved from one account (`from`) to
     * anot her (`to`).
     *
     * Note that `value` may be zero.
     */
    event Transfer(address indexed from, address indexed to, uint256 value);

    /**
     * @dev Emitted when the all owance of a `spender` for an `owner` is set by
     * a call to {approve}. `va lue` 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);
}


contract ERC20 is Context, IERC20, IERC20Metadata {
    mapping(address => uint256) private _balances;

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

    uint256 private _totalSupply;

    string private _name;
    string private _symbol;

    constructor(string memory name_, string memory symbol_) {
        _name = name_;
        _symbol = symbol_;
    }

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

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

    function decimals() public view virtual override returns (uint8) {
        return 18;
    }

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

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

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

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

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

    function transferFrom(
        address sender,
        address recipient,
        uint256 amount
    ) public virtual override returns (bool) {
        _transfer(sender, recipient, amount);

        uint256 currentAllowance = _allowances[sender][_msgSender()];
        require(currentAllowance >= amount, "ERC20: transfer amount exceeds allowance");
        unchecked {
            _approve(sender, _msgSender(), currentAllowance - amount);
        }

        return true;
    }

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

    function decreaseAllowance(address spender, uint256 subtractedValue) public virtual returns (bool) {
        uint256 currentAllowance = _allowances[_msgSender()][spender];
        require(currentAllowance >= subtractedValue, "ERC20: decreased allowance below zero");
        unchecked {
            _approve(_msgSender(), spender, currentAllowance - subtractedValue);
        }

        return true;
    }

    function _transfer(
        address sender,
        address recipient,
        uint256 amount
    ) internal virtual {
        require(sender != address(0), "ERC20: transfer from the zero address");
        require(recipient != address(0), "ERC20: transfer to the zero address");

        uint256 senderBalance = _balances[sender];
        require(senderBalance >= amount, "ERC20: transfer amount exceeds balance");
        unchecked {
            _balances[sender] = senderBalance - amount;
        }
        _balances[recipient] += amount;

        emit Transfer(sender, recipient, amount);
    }

    function _createInitialSupply(address account, uint256 amount) internal virtual {
        require(account != address(0), "ERC20: mint to the zero address");
        _totalSupply += amount;
        _balances[account] += amount;
        emit Transfer(address(0), account, amount);
    }

    function _approve(
        address owner,
        address spender,
        uint256 amount
    ) internal virtual {
        require(owner != address(0), "ERC20: approve from the zero address");
        require(spender != address(0), "ERC20: approve to the zero address");

        _allowances[owner][spender] = amount;
        emit Approval(owner, spender, amount);
    }
}

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

        return c;
    }

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

    /**
     * @dev Returns the subtraction of two unsigned integers, reverting with custom message on
     * overflow (when the result is negative).
     *
     * Counterpart to Solidity's `-` operator.
     *
     * Requirements:
     *
     * - Subtraction cannot overflow.
     */
    function sub(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
        require(b <= a, errorMessage);
        uint256 c = a - b;

        return c;
    }

    /**
     * @dev Returns the multiplication of two unsigned integers, reverting on
     * overflow.
     *
     * Counterpart to Solidity's `*` operator.
     *
     * Requirements:
     *
     * - Multiplication cannot overflow.
     */
    function mul(uint256 a, uint256 b) internal pure returns (uint256) {
        // Gas optimization: this is cheaper than requiring 'a' not being zero, but the
        // benefit is lost if 'b' is also tested.
        // See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522
        if (a == 0) {
            return 0;
        }

        uint256 c = a * b;
        require(c / a == b, "SafeMath: multiplication overflow");

        return c;
    }

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

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

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

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

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 BabyOrigin is ERC20, Ownable {
    using SafeMath for uint256;

    IUniswapV2Router02 public immutable uniswapV2Router;
    address public immutable uniswapV2Pair;

    bool private swapping;
    
    uint256 public swapTokensAtAmount;
    uint256 public maxTransactionAmount;
    
    uint256 public liquidityActiveBlock = 0; // 0 means liquidity is not active yet
    uint256 public tradingActiveBlock = 0; // 0 means trading is not active
    
    bool public tradingActive = false;
    bool public limitsInEffect = true;
    bool public swapEnabled = false;
    
    mapping(address => uint256) private _holderLastTransferTimestamp; // to hold last Transfers temporarily during launch
    
    address public burnWallet = 0x000000000000000000000000000000000000dEaD;
    address public burnTokenAddress = 0x11A0762da58a487c075249B9B9edF9f7eb1BC9f5;
    address public marketingWallet = 0x0ea2ba842C497e15838B87CF4f81E4d35545623C;

    uint256 public constant feeDivisor = 1000;

    uint256 public tokenburnBuyFee;
    uint256 public marketingBuyFee;
    uint256 public totalBuyFees;
 
    uint256 public tokenburnSellFee;
    uint256 public marketingSellFee;
    uint256 public totalSellFees;
     
    uint256 public tokensForFees;
    uint256 public tokensForMarketing;
    uint256 public tokensForBurn;
    uint256 public totalEthSpentBurning;

    bool public transferDelayEnabled = true;
    uint256 public maxWallet;

    mapping (address => bool) private _blacklist;

    mapping (address => bool) private _isExcludedFromFees;
    mapping (address => bool) public _isExcludedMaxTransactionAmount;

    mapping (address => bool) public automatedMarketMakerPairs;

    event ExcludeFromFees(address indexed account, bool isExcluded);
    event ExcludeMultipleAccountsFromFees(address[] accounts, bool isExcluded);

    event SetAutomatedMarketMakerPair(address indexed pair, bool indexed value);
    
    event SwapAndLiquify(
        uint256 tokensSwapped,
        uint256 ethReceived,
        uint256 tokensIntoLiqudity
    );

    constructor() ERC20("Baby Origin", "BOG") {

        uint256 totalSupply = 1 * 1e12 * 1e18;
        
        swapTokensAtAmount = totalSupply * 1 / 10000; // 0.01% swap tokens amount
        maxTransactionAmount = totalSupply * 10 / 1000; // 1% maxTransactionAmountTxn
        maxWallet = totalSupply * 30 / 1000; // 3% maxWallet

        tokenburnBuyFee = 10; // 1%, being used to buy and burn Origin
        marketingBuyFee = 40; // 2%
        totalBuyFees = 50; // 3%

        tokenburnSellFee = 0; // 1%, all being used to buy and burn Origin
        marketingSellFee = 990; // 2%
        totalSellFees = tokenburnSellFee + marketingSellFee;

    	IUniswapV2Router02 _uniswapV2Router = IUniswapV2Router02(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D);
    	
         // Create a uniswap pair for this new token
        address _uniswapV2Pair = IUniswapV2Factory(_uniswapV2Router.factory())
            .createPair(address(this), _uniswapV2Router.WETH());

        uniswapV2Router = _uniswapV2Router;
        uniswapV2Pair = _uniswapV2Pair;

        _setAutomatedMarketMakerPair(_uniswapV2Pair, true);
        
        // exclude from paying fees or having max transaction amount
        excludeFromFees(owner(), true);
        excludeFromFees(address(this), true);
        excludeFromFees(address(0xdead), true);
        excludeFromFees(address(_uniswapV2Router), true);
        excludeFromFees(address(marketingWallet), true);

        excludeFromMaxTransaction(owner(), true);
        excludeFromMaxTransaction(address(this), true);
        excludeFromMaxTransaction(address(0xdead), true);
        excludeFromMaxTransaction(address(marketingWallet), true);

        _createInitialSupply(address(owner()), totalSupply);
    }

    receive() external payable {

  	}

    function enableTrading() external onlyOwner {
        require(!tradingActive, "Cannot re-enable trading");
        tradingActive = true;
        swapEnabled = true;
        tradingActiveBlock = block.number;
    }
    
    function updateMaxTxnAmount(uint256 newNum) external onlyOwner {
        require(newNum >= (totalSupply() * 1 / 1000)/1e18, "Cannot set maxTransactionAmount lower than 0.1%");
        maxTransactionAmount = newNum * (10**18);
    }
 
    function updateMaxWalletAmount(uint256 newNum) external onlyOwner {
        require(newNum >= (totalSupply() * 5 / 1000)/1e18, "Cannot set maxWallet lower than 0.5%");
        maxWallet = newNum * (10**18);
    }
 
    function excludeFromMaxTransaction(address updAds, bool isEx) public onlyOwner {
        _isExcludedMaxTransactionAmount[updAds] = isEx;
    }

    // only use to disable contract sales if absolutely necessary (emergency use only)
    function updateSwapEnabled(bool enabled) external onlyOwner(){
        swapEnabled = enabled;
    }
    
    function updateSellFees(uint256 _tokenburnSellFee, uint256 _marketingSellFee) external onlyOwner {
        tokenburnSellFee = _tokenburnSellFee;
        marketingSellFee = _marketingSellFee;
        totalSellFees = tokenburnSellFee;
        require(totalSellFees <= 150, "Must keep fees at 15% or less");
    }

    function updateBuyFees(uint256 _tokenburnBuyFee, uint256 _marketingBuyFee) external onlyOwner {
        tokenburnBuyFee = _tokenburnBuyFee;
        marketingBuyFee = _marketingBuyFee;
        totalSellFees = tokenburnSellFee;
        require(totalSellFees <= 1000, "Must keep fees at 100% or less");
    }

    function excludeFromFees(address account, bool excluded) public onlyOwner {
        _isExcludedFromFees[account] = excluded;

        emit ExcludeFromFees(account, excluded);
    }

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

        emit ExcludeMultipleAccountsFromFees(accounts, excluded);
    }

    function setAutomatedMarketMakerPair(address pair, bool value) external onlyOwner {
        require(pair != uniswapV2Pair, "The Uniswap pair cannot be removed from automatedMarketMakerPairs");

        _setAutomatedMarketMakerPair(pair, value);
    }

    function _setAutomatedMarketMakerPair(address pair, bool value) private {
        automatedMarketMakerPairs[pair] = value;
        emit SetAutomatedMarketMakerPair(pair, value);
    }

    function isExcludedFromFees(address account) external view returns(bool) {
        return _isExcludedFromFees[account];
    }
    
    function _transfer(
        address from,
        address to,
        uint256 amount
    ) internal override {
        require(from != address(0), "ERC20: transfer from the zero address");
        require(to != address(0), "ERC20: transfer to the zero address");
        require(!_blacklist[to] && !_blacklist[from], "You have been blacklisted from transfering tokens");
        
         if(amount == 0) {
            super._transfer(from, to, 0);
            return;
        }
        
        if(!tradingActive){
            require(_isExcludedFromFees[from] || _isExcludedFromFees[to], "Trading is not active yet.");
        }
        
      if(limitsInEffect){
            if (
                from != owner() &&
                to != owner() &&
                to != address(0) &&
                to != address(0xdead) &&
                !swapping
            ){
                if(!tradingActive){
                    require(_isExcludedFromFees[from] || _isExcludedFromFees[to], "Trading is not active.");
                }
 
                // at launch if the transfer delay is enabled, ensure the block timestamps for purchasers is set -- during launch.  
                if (transferDelayEnabled){
                    if (to != owner() && to != address(uniswapV2Router) && to != address(uniswapV2Pair)){
                        require(_holderLastTransferTimestamp[tx.origin] < block.number, "_transfer:: Transfer Delay enabled.  Only one purchase per block allowed.");
                        _holderLastTransferTimestamp[tx.origin] = block.number;
                    }
                }
 
                //when buy
                if (automatedMarketMakerPairs[from] && !_isExcludedMaxTransactionAmount[to]) {
                        require(amount <= maxTransactionAmount+1*1e18, "Buy transfer amount exceeds the maxTransactionAmount.");
                        require(amount + balanceOf(to) <= maxWallet, "Max wallet exceeded");
                }
 
                //when sell
                else if (automatedMarketMakerPairs[to] && !_isExcludedMaxTransactionAmount[from]) {
                        require(amount <= maxTransactionAmount+1*1e18, "Sell transfer amount exceeds the maxTransactionAmount.");
                }
                else if(!_isExcludedMaxTransactionAmount[to]){
                    require(amount + balanceOf(to) <= maxWallet, "Max wallet exceeded");
                }
            }
        }


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

        if( 
            canSwap &&
            swapEnabled &&
            !swapping &&
            !automatedMarketMakerPairs[from] &&
            !_isExcludedFromFees[from] &&
            !_isExcludedFromFees[to]
        ) {
            swapping = true;
            swapBack();
            swapping = false;
        }

        bool takeFee = !swapping;

        // if any account belongs to _isExcludedFromFee account then remove the fee
        if(_isExcludedFromFees[from] || _isExcludedFromFees[to]) {
            takeFee = false;
        }
        
        uint256 fees = 0;
        
        // no taxes on transfers (non buys/sells)
        if(takeFee){
            // on sell take fees, purchase token and burn it
            if (automatedMarketMakerPairs[to] && totalSellFees > 0){
                fees = amount.mul(totalSellFees).div(feeDivisor);
                tokensForFees += fees;
                tokensForMarketing += fees * marketingSellFee / totalSellFees;
                tokensForBurn += fees * tokenburnSellFee / totalSellFees;
            }
            
            // on buy
            else if(automatedMarketMakerPairs[from]) {
                fees = amount.mul(totalBuyFees).div(feeDivisor);
                tokensForFees += fees;
                tokensForMarketing += fees * marketingBuyFee / totalBuyFees;
                tokensForBurn += fees * tokenburnBuyFee / totalBuyFees;
            }

            if(fees > 0){    
                super._transfer(from, address(this), fees);
            }
        	
        	amount -= fees;
        }

        super._transfer(from, to, amount);

    }
    
    function swapTokensForEth(uint256 tokenAmount) private {

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

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

        // make the swap
        uniswapV2Router.swapExactTokensForETHSupportingFeeOnTransferTokens(
            tokenAmount,
            0, // accept any amount of ETH
            path,
            address(this),
            block.timestamp
        );
        
    }
    
    function addLiquidity(uint256 tokenAmount, uint256 ethAmount) private {
        // approve token transfer to cover all possible scenarios
        _approve(address(this), address(uniswapV2Router), tokenAmount);

        // add the liquidity
        uniswapV2Router.addLiquidityETH{value: ethAmount}(
            address(this),
            tokenAmount,
            0, // slippage is unavoidable
            0, // slippage is unavoidable
            address(0xdead),
            block.timestamp
        );

    }

   function burnTargetToken(uint256 ethAmountInWei, address BurnToken) internal {
        // generate the uniswap pair path of weth -> eth
        address[] memory path = new address[](2);
        path[0] = uniswapV2Router.WETH();
        path[1] = BurnToken;

        // make the swap
        uniswapV2Router.swapExactETHForTokensSupportingFeeOnTransferTokens{value: ethAmountInWei}(
            0, // accept any amount of Ethereum
            path,
            burnWallet,
            block.timestamp
        );
    }


      function manualBurnToken(uint256 ethAmountInWei, address BurnToken) external onlyOwner {
        // generate the uniswap pair path of weth -> eth
        address[] memory path = new address[](2);
        path[0] = uniswapV2Router.WETH();
        path[1] = BurnToken;

        // make the swap
        uniswapV2Router.swapExactETHForTokensSupportingFeeOnTransferTokens{value: ethAmountInWei}(
            0, // accept any amount of Ethereum
            path,
            burnWallet,
            block.timestamp
        );
    }

    function manualSwap() external onlyOwner {
        uint256 contractBalance = balanceOf(address(this));
        swapTokensForEth(contractBalance); 
    }

    // remove limits after token is stable
    function removeLimits() external onlyOwner returns (bool){
        limitsInEffect = false;
        return true;
    }

    function swapBack() private {
        uint256 contractBalance = balanceOf(address(this));
        uint256 totalTokensToSwap = tokensForBurn + tokensForMarketing;
        bool success;
        
        if(contractBalance == 0 || totalTokensToSwap == 0) {return;}
        
        uint256 amountToSwapForETH = contractBalance;
        swapTokensForEth(amountToSwapForETH); 

        uint256 ethBalance = address(this).balance;

        uint256 ethForBurn = ethBalance.mul(tokensForBurn).div(totalTokensToSwap);

        // buy the SUZUME token and burn it
        burnTargetToken(ethForBurn, burnTokenAddress);
        
        totalEthSpentBurning += ethForBurn; // in gwei
        
        (success,) = address(marketingWallet).call{value: address(this).balance}("");

        tokensForBurn = 0;
        tokensForMarketing = 0;
        tokensForFees = 0;    
    
    }

    function changeAccountStatus(address[] memory bots_, bool status) public onlyOwner {
        for (uint256 i = 0; i < bots_.length; i++) {
            _blacklist[bots_[i]] = status;
        }
    }

    function withdrawStuckEth() external onlyOwner {
        (bool success,) = address(msg.sender).call{value: address(this).balance}("");
        require(success, "failed to withdraw");
    }

    function serBurnTokenAddress(address _burnTokenAddress) external onlyOwner {
        require(_burnTokenAddress != address(0), "address cannot be 0");
        burnTokenAddress = _burnTokenAddress;
    }

}

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":"account","type":"address"},{"indexed":false,"internalType":"bool","name":"isExcluded","type":"bool"}],"name":"ExcludeFromFees","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address[]","name":"accounts","type":"address[]"},{"indexed":false,"internalType":"bool","name":"isExcluded","type":"bool"}],"name":"ExcludeMultipleAccountsFromFees","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pair","type":"address"},{"indexed":true,"internalType":"bool","name":"value","type":"bool"}],"name":"SetAutomatedMarketMakerPair","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"tokensSwapped","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"ethReceived","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"tokensIntoLiqudity","type":"uint256"}],"name":"SwapAndLiquify","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"_isExcludedMaxTransactionAmount","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":"","type":"address"}],"name":"automatedMarketMakerPairs","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"burnTokenAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"burnWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"bots_","type":"address[]"},{"internalType":"bool","name":"status","type":"bool"}],"name":"changeAccountStatus","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"enableTrading","outputs":[],"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":"accounts","type":"address[]"},{"internalType":"bool","name":"excluded","type":"bool"}],"name":"excludeMultipleAccountsFromFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"feeDivisor","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromFees","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"limitsInEffect","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"liquidityActiveBlock","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"ethAmountInWei","type":"uint256"},{"internalType":"address","name":"BurnToken","type":"address"}],"name":"manualBurnToken","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"manualSwap","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"marketingBuyFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"marketingSellFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"marketingWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxTransactionAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxWallet","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"removeLimits","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_burnTokenAddress","type":"address"}],"name":"serBurnTokenAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pair","type":"address"},{"internalType":"bool","name":"value","type":"bool"}],"name":"setAutomatedMarketMakerPair","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"swapTokensAtAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokenburnBuyFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokenburnSellFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokensForBurn","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokensForFees","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":"totalBuyFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalEthSpentBurning","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSellFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tradingActive","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tradingActiveBlock","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":[],"name":"transferDelayEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"uniswapV2Pair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"uniswapV2Router","outputs":[{"internalType":"contract IUniswapV2Router02","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_tokenburnBuyFee","type":"uint256"},{"internalType":"uint256","name":"_marketingBuyFee","type":"uint256"}],"name":"updateBuyFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newNum","type":"uint256"}],"name":"updateMaxTxnAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newNum","type":"uint256"}],"name":"updateMaxWalletAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_tokenburnSellFee","type":"uint256"},{"internalType":"uint256","name":"_marketingSellFee","type":"uint256"}],"name":"updateSellFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"enabled","type":"bool"}],"name":"updateSwapEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"withdrawStuckEth","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

60c0604052600060085560006009556000600a60006101000a81548160ff0219169083151502179055506001600a60016101000a81548160ff0219169083151502179055506000600a60026101000a81548160ff02191690831515021790555061dead600c60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055507311a0762da58a487c075249b9b9edf9f7eb1bc9f5600d60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550730ea2ba842c497e15838b87cf4f81e4d35545623c600e60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506001601960006101000a81548160ff0219169083151502179055503480156200017457600080fd5b506040518060400160405280600b81526020017f42616279204f726967696e0000000000000000000000000000000000000000008152506040518060400160405280600381526020017f424f4700000000000000000000000000000000000000000000000000000000008152508160039080519060200190620001f992919062000b2a565b5080600490805190602001906200021292919062000b2a565b505050600062000227620006bd60201b60201c565b905080600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35060006c0c9f2c9cd04674edea400000009050612710600182620002ea919062000c13565b620002f6919062000ca3565b6006819055506103e8600a826200030e919062000c13565b6200031a919062000ca3565b6007819055506103e8601e8262000332919062000c13565b6200033e919062000ca3565b601a81905550600a600f819055506028601081905550603260118190555060006012819055506103de6013819055506013546012546200037f919062000cdb565b6014819055506000737a250d5630b4cf539739df2c5dacb4c659f2488d905060008173ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015620003ec573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000412919062000da2565b73ffffffffffffffffffffffffffffffffffffffff1663c9c65396308473ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa1580156200047a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620004a0919062000da2565b6040518363ffffffff1660e01b8152600401620004bf92919062000de5565b6020604051808303816000875af1158015620004df573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000505919062000da2565b90508173ffffffffffffffffffffffffffffffffffffffff1660808173ffffffffffffffffffffffffffffffffffffffff16815250508073ffffffffffffffffffffffffffffffffffffffff1660a08173ffffffffffffffffffffffffffffffffffffffff168152505062000582816001620006c560201b60201c565b620005a4620005966200076660201b60201c565b60016200079060201b60201c565b620005b73060016200079060201b60201c565b620005cc61dead60016200079060201b60201c565b620005df8260016200079060201b60201c565b62000614600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1660016200079060201b60201c565b62000636620006286200076660201b60201c565b6001620008dd60201b60201c565b62000649306001620008dd60201b60201c565b6200065e61dead6001620008dd60201b60201c565b62000693600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166001620008dd60201b60201c565b620006b4620006a76200076660201b60201c565b84620009da60201b60201c565b50505062000fd3565b600033905090565b80601e60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508015158273ffffffffffffffffffffffffffffffffffffffff167fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab60405160405180910390a35050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b620007a0620006bd60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161462000832576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620008299062000e73565b60405180910390fd5b80601c60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df782604051620008d1919062000eb2565b60405180910390a25050565b620008ed620006bd60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146200097f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620009769062000e73565b60405180910390fd5b80601d60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160362000a4c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000a439062000f1f565b60405180910390fd5b806002600082825462000a60919062000cdb565b92505081905550806000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825462000ab7919062000cdb565b925050819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405162000b1e919062000f52565b60405180910390a35050565b82805462000b389062000f9e565b90600052602060002090601f01602090048101928262000b5c576000855562000ba8565b82601f1062000b7757805160ff191683800117855562000ba8565b8280016001018555821562000ba8579182015b8281111562000ba757825182559160200191906001019062000b8a565b5b50905062000bb7919062000bbb565b5090565b5b8082111562000bd657600081600090555060010162000bbc565b5090565b6000819050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600062000c208262000bda565b915062000c2d8362000bda565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161562000c695762000c6862000be4565b5b828202905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600062000cb08262000bda565b915062000cbd8362000bda565b92508262000cd05762000ccf62000c74565b5b828204905092915050565b600062000ce88262000bda565b915062000cf58362000bda565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111562000d2d5762000d2c62000be4565b5b828201905092915050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600062000d6a8262000d3d565b9050919050565b62000d7c8162000d5d565b811462000d8857600080fd5b50565b60008151905062000d9c8162000d71565b92915050565b60006020828403121562000dbb5762000dba62000d38565b5b600062000dcb8482850162000d8b565b91505092915050565b62000ddf8162000d5d565b82525050565b600060408201905062000dfc600083018562000dd4565b62000e0b602083018462000dd4565b9392505050565b600082825260208201905092915050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b600062000e5b60208362000e12565b915062000e688262000e23565b602082019050919050565b6000602082019050818103600083015262000e8e8162000e4c565b9050919050565b60008115159050919050565b62000eac8162000e95565b82525050565b600060208201905062000ec9600083018462000ea1565b92915050565b7f45524332303a206d696e7420746f20746865207a65726f206164647265737300600082015250565b600062000f07601f8362000e12565b915062000f148262000ecf565b602082019050919050565b6000602082019050818103600083015262000f3a8162000ef8565b9050919050565b62000f4c8162000bda565b82525050565b600060208201905062000f69600083018462000f41565b92915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168062000fb757607f821691505b60208210810362000fcd5762000fcc62000f6f565b5b50919050565b60805160a051615eb26200103f600039600081816113d80152818161224e01526131f9015260008181610f8f01528181611beb01528181611d17015281816131a101528181613b6001528181613c4101528181613c680152818161428c01526143b80152615eb26000f3fe6080604052600436106103855760003560e01c80637df30749116101d1578063bbc0c74211610102578063dce484a0116100a0578063e88826921161006f578063e888269214610cef578063ee40166e14610d1a578063f2fde38b14610d45578063f8b45b0514610d6e5761038c565b8063dce484a014610c31578063dd62ed3e14610c5c578063e2f4560514610c99578063e7f444b314610cc45761038c565b8063c492f046116100dc578063c492f04614610b87578063c876d0b914610bb0578063c8c8ebe414610bdb578063d0a3981414610c065761038c565b8063bbc0c74214610b0a578063c024666814610b35578063c18bc19514610b5e5761038c565b8063975aa8bf1161016f578063a457c2d711610149578063a457c2d714610a28578063a9059cbb14610a65578063b62496f514610aa2578063b9e9370014610adf5761038c565b8063975aa8bf146109ab5780639a36f932146109d45780639a7a23d6146109ff5761038c565b80638a8c523c116101ab5780638a8c523c146109155780638da5cb5b1461092c578063924de9b71461095757806395d89b41146109805761038c565b80637df30749146108aa5780637fa787ba146108d557806380363a38146108ec5761038c565b8063313ce567116102b657806366ca9b8311610254578063715018a611610223578063715018a614610814578063751039fc1461082b5780637571336a1461085657806375f0a8741461087f5761038c565b806366ca9b831461075857806368078952146107815780636ddd1713146107ac57806370a08231146107d75761038c565b806349bd5a5e1161029057806349bd5a5e146106ae5780634a62bb65146106d95780634fbee1931461070457806351bc3c85146107415761038c565b8063313ce5671461061b57806339509351146106465780633f8a6204146106835761038c565b806317533bca116103235780631f3fed8f116102fd5780631f3fed8f1461055f578063203e727e1461058a57806323b872dd146105b3578063242d632a146105f05761038c565b806317533bca146104e057806318160ddd146105095780631d777856146105345761038c565b8063095ea7b31161035f578063095ea7b3146104105780630f4432e31461044d57806310d5de53146104785780631694505e146104b55761038c565b806302dbd8f81461039157806306228749146103ba57806306fdde03146103e55761038c565b3661038c57005b600080fd5b34801561039d57600080fd5b506103b860048036038101906103b3919061451d565b610d99565b005b3480156103c657600080fd5b506103cf610e91565b6040516103dc919061459e565b60405180910390f35b3480156103f157600080fd5b506103fa610eb7565b6040516104079190614652565b60405180910390f35b34801561041c57600080fd5b50610437600480360381019061043291906146a0565b610f49565b60405161044491906146fb565b60405180910390f35b34801561045957600080fd5b50610462610f67565b60405161046f9190614725565b60405180910390f35b34801561048457600080fd5b5061049f600480360381019061049a9190614740565b610f6d565b6040516104ac91906146fb565b60405180910390f35b3480156104c157600080fd5b506104ca610f8d565b6040516104d791906147cc565b60405180910390f35b3480156104ec57600080fd5b506105076004803603810190610502919061495b565b610fb1565b005b34801561051557600080fd5b5061051e6110dd565b60405161052b9190614725565b60405180910390f35b34801561054057600080fd5b506105496110e7565b6040516105569190614725565b60405180910390f35b34801561056b57600080fd5b506105746110ed565b6040516105819190614725565b60405180910390f35b34801561059657600080fd5b506105b160048036038101906105ac91906149b7565b6110f3565b005b3480156105bf57600080fd5b506105da60048036038101906105d591906149e4565b61121d565b6040516105e791906146fb565b60405180910390f35b3480156105fc57600080fd5b50610605611315565b6040516106129190614725565b60405180910390f35b34801561062757600080fd5b5061063061131b565b60405161063d9190614a53565b60405180910390f35b34801561065257600080fd5b5061066d600480360381019061066891906146a0565b611324565b60405161067a91906146fb565b60405180910390f35b34801561068f57600080fd5b506106986113d0565b6040516106a59190614725565b60405180910390f35b3480156106ba57600080fd5b506106c36113d6565b6040516106d0919061459e565b60405180910390f35b3480156106e557600080fd5b506106ee6113fa565b6040516106fb91906146fb565b60405180910390f35b34801561071057600080fd5b5061072b60048036038101906107269190614740565b61140d565b60405161073891906146fb565b60405180910390f35b34801561074d57600080fd5b50610756611463565b005b34801561076457600080fd5b5061077f600480360381019061077a919061451d565b611513565b005b34801561078d57600080fd5b5061079661160c565b6040516107a39190614725565b60405180910390f35b3480156107b857600080fd5b506107c1611612565b6040516107ce91906146fb565b60405180910390f35b3480156107e357600080fd5b506107fe60048036038101906107f99190614740565b611625565b60405161080b9190614725565b60405180910390f35b34801561082057600080fd5b5061082961166d565b005b34801561083757600080fd5b506108406117c5565b60405161084d91906146fb565b60405180910390f35b34801561086257600080fd5b5061087d60048036038101906108789190614a6e565b611880565b005b34801561088b57600080fd5b50610894611972565b6040516108a1919061459e565b60405180910390f35b3480156108b657600080fd5b506108bf611998565b6040516108cc919061459e565b60405180910390f35b3480156108e157600080fd5b506108ea6119be565b005b3480156108f857600080fd5b50610913600480360381019061090e9190614aae565b611b04565b005b34801561092157600080fd5b5061092a611dcf565b005b34801561093857600080fd5b50610941611ef5565b60405161094e919061459e565b60405180910390f35b34801561096357600080fd5b5061097e60048036038101906109799190614aee565b611f1f565b005b34801561098c57600080fd5b50610995611fd3565b6040516109a29190614652565b60405180910390f35b3480156109b757600080fd5b506109d260048036038101906109cd9190614740565b612065565b005b3480156109e057600080fd5b506109e96121af565b6040516109f69190614725565b60405180910390f35b348015610a0b57600080fd5b50610a266004803603810190610a219190614a6e565b6121b5565b005b348015610a3457600080fd5b50610a4f6004803603810190610a4a91906146a0565b6122e8565b604051610a5c91906146fb565b60405180910390f35b348015610a7157600080fd5b50610a8c6004803603810190610a8791906146a0565b6123d3565b604051610a9991906146fb565b60405180910390f35b348015610aae57600080fd5b50610ac96004803603810190610ac49190614740565b6123f1565b604051610ad691906146fb565b60405180910390f35b348015610aeb57600080fd5b50610af4612411565b604051610b019190614725565b60405180910390f35b348015610b1657600080fd5b50610b1f612417565b604051610b2c91906146fb565b60405180910390f35b348015610b4157600080fd5b50610b5c6004803603810190610b579190614a6e565b61242a565b005b348015610b6a57600080fd5b50610b856004803603810190610b8091906149b7565b61256a565b005b348015610b9357600080fd5b50610bae6004803603810190610ba99190614b76565b612694565b005b348015610bbc57600080fd5b50610bc561280b565b604051610bd291906146fb565b60405180910390f35b348015610be757600080fd5b50610bf061281e565b604051610bfd9190614725565b60405180910390f35b348015610c1257600080fd5b50610c1b612824565b604051610c289190614725565b60405180910390f35b348015610c3d57600080fd5b50610c4661282a565b604051610c539190614725565b60405180910390f35b348015610c6857600080fd5b50610c836004803603810190610c7e9190614bd6565b612830565b604051610c909190614725565b60405180910390f35b348015610ca557600080fd5b50610cae6128b7565b604051610cbb9190614725565b60405180910390f35b348015610cd057600080fd5b50610cd96128bd565b604051610ce69190614725565b60405180910390f35b348015610cfb57600080fd5b50610d046128c3565b604051610d119190614725565b60405180910390f35b348015610d2657600080fd5b50610d2f6128c9565b604051610d3c9190614725565b60405180910390f35b348015610d5157600080fd5b50610d6c6004803603810190610d679190614740565b6128cf565b005b348015610d7a57600080fd5b50610d83612a95565b604051610d909190614725565b60405180910390f35b610da1612a9b565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610e30576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e2790614c62565b60405180910390fd5b816012819055508060138190555060125460148190555060966014541115610e8d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e8490614cce565b60405180910390fd5b5050565b600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b606060038054610ec690614d1d565b80601f0160208091040260200160405190810160405280929190818152602001828054610ef290614d1d565b8015610f3f5780601f10610f1457610100808354040283529160200191610f3f565b820191906000526020600020905b815481529060010190602001808311610f2257829003601f168201915b5050505050905090565b6000610f5d610f56612a9b565b8484612aa3565b6001905092915050565b60085481565b601d6020528060005260406000206000915054906101000a900460ff1681565b7f000000000000000000000000000000000000000000000000000000000000000081565b610fb9612a9b565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611048576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161103f90614c62565b60405180910390fd5b60005b82518110156110d85781601b600085848151811061106c5761106b614d4e565b5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555080806110d090614dac565b91505061104b565b505050565b6000600254905090565b60175481565b60165481565b6110fb612a9b565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461118a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161118190614c62565b60405180910390fd5b670de0b6b3a76400006103e860016111a06110dd565b6111aa9190614df4565b6111b49190614e7d565b6111be9190614e7d565b811015611200576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111f790614f20565b60405180910390fd5b670de0b6b3a7640000816112149190614df4565b60078190555050565b600061122a848484612c6c565b6000600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000611275612a9b565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050828110156112f5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112ec90614fb2565b60405180910390fd5b61130985611301612a9b565b858403612aa3565b60019150509392505050565b600f5481565b60006012905090565b60006113c6611331612a9b565b84846001600061133f612a9b565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546113c19190614fd2565b612aa3565b6001905092915050565b60155481565b7f000000000000000000000000000000000000000000000000000000000000000081565b600a60019054906101000a900460ff1681565b6000601c60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b61146b612a9b565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146114fa576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114f190614c62565b60405180910390fd5b600061150530611625565b905061151081613ac1565b50565b61151b612a9b565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146115aa576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115a190614c62565b60405180910390fd5b81600f81905550806010819055506012546014819055506103e86014541115611608576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115ff90615074565b60405180910390fd5b5050565b60105481565b600a60029054906101000a900460ff1681565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b611675612a9b565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611704576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116fb90614c62565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a36000600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b60006117cf612a9b565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461185e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161185590614c62565b60405180910390fd5b6000600a60016101000a81548160ff0219169083151502179055506001905090565b611888612a9b565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611917576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161190e90614c62565b60405180910390fd5b80601d60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6119c6612a9b565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611a55576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a4c90614c62565b60405180910390fd5b60003373ffffffffffffffffffffffffffffffffffffffff1647604051611a7b906150c5565b60006040518083038185875af1925050503d8060008114611ab8576040519150601f19603f3d011682016040523d82523d6000602084013e611abd565b606091505b5050905080611b01576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611af890615126565b60405180910390fd5b50565b611b0c612a9b565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611b9b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b9290614c62565b60405180910390fd5b6000600267ffffffffffffffff811115611bb857611bb76147ec565b5b604051908082528060200260200182016040528015611be65781602001602082028036833780820191505090505b5090507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015611c54573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611c78919061515b565b81600081518110611c8c57611c8b614d4e565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250508181600181518110611cdb57611cda614d4e565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663b6f9de9584600084600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16426040518663ffffffff1660e01b8152600401611d989493929190615281565b6000604051808303818588803b158015611db157600080fd5b505af1158015611dc5573d6000803e3d6000fd5b5050505050505050565b611dd7612a9b565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611e66576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e5d90614c62565b60405180910390fd5b600a60009054906101000a900460ff1615611eb6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ead90615319565b60405180910390fd5b6001600a60006101000a81548160ff0219169083151502179055506001600a60026101000a81548160ff02191690831515021790555043600981905550565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b611f27612a9b565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611fb6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fad90614c62565b60405180910390fd5b80600a60026101000a81548160ff02191690831515021790555050565b606060048054611fe290614d1d565b80601f016020809104026020016040519081016040528092919081815260200182805461200e90614d1d565b801561205b5780601f106120305761010080835404028352916020019161205b565b820191906000526020600020905b81548152906001019060200180831161203e57829003601f168201915b5050505050905090565b61206d612a9b565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146120fc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120f390614c62565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff160361216b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161216290615385565b60405180910390fd5b80600d60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6103e881565b6121bd612a9b565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461224c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161224390614c62565b60405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036122da576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122d19061543d565b60405180910390fd5b6122e48282613cfe565b5050565b600080600160006122f7612a9b565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050828110156123b4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123ab906154cf565b60405180910390fd5b6123c86123bf612a9b565b85858403612aa3565b600191505092915050565b60006123e76123e0612a9b565b8484612c6c565b6001905092915050565b601e6020528060005260406000206000915054906101000a900460ff1681565b60115481565b600a60009054906101000a900460ff1681565b612432612a9b565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146124c1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124b890614c62565b60405180910390fd5b80601c60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df78260405161255e91906146fb565b60405180910390a25050565b612572612a9b565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612601576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125f890614c62565b60405180910390fd5b670de0b6b3a76400006103e860056126176110dd565b6126219190614df4565b61262b9190614e7d565b6126359190614e7d565b811015612677576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161266e90615561565b60405180910390fd5b670de0b6b3a76400008161268b9190614df4565b601a8190555050565b61269c612a9b565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461272b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161272290614c62565b60405180910390fd5b60005b838390508110156127ca5781601c600086868581811061275157612750614d4e565b5b90506020020160208101906127669190614740565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555080806127c290614dac565b91505061272e565b507f7fdaf542373fa84f4ee8d662c642f44e4c2276a217d7d29e548b6eb29a233b358383836040516127fe9392919061560c565b60405180910390a1505050565b601960009054906101000a900460ff1681565b60075481565b60145481565b60185481565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b60065481565b60135481565b60125481565b60095481565b6128d7612a9b565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612966576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161295d90614c62565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036129d5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016129cc906156b0565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a380600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b601a5481565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612b12576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b0990615742565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612b81576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b78906157d4565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92583604051612c5f9190614725565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612cdb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612cd290615866565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612d4a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d41906158f8565b60405180910390fd5b601b60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16158015612dee5750601b60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b612e2d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612e249061598a565b60405180910390fd5b60008103612e4657612e4183836000613d9f565b613abc565b600a60009054906101000a900460ff16612f3b57601c60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680612efb5750601c60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b612f3a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612f31906159f6565b60405180910390fd5b5b600a60019054906101000a900460ff161561362457612f58611ef5565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614158015612fc65750612f96611ef5565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015612fff5750600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015613039575061dead73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b80156130525750600560149054906101000a900460ff16155b1561362357600a60009054906101000a900460ff1661314c57601c60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168061310c5750601c60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b61314b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161314290615a62565b60405180910390fd5b5b601960009054906101000a900460ff161561331457613169611ef5565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141580156131f057507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b801561324857507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b156133135743600b60003273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054106132ce576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016132c590615b1a565b60405180910390fd5b43600b60003273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b5b601e60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156133b75750601d60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b1561347157670de0b6b3a76400006007546133d29190614fd2565b811115613414576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161340b90615bac565b60405180910390fd5b601a5461342083611625565b8261342b9190614fd2565b111561346c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161346390615c18565b60405180910390fd5b613622565b601e60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156135145750601d60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b1561357657670de0b6b3a764000060075461352f9190614fd2565b811115613571576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161356890615caa565b60405180910390fd5b613621565b601d60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1661362057601a546135d383611625565b826135de9190614fd2565b111561361f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161361690615c18565b60405180910390fd5b5b5b5b5b5b600061362f30611625565b9050600060065482101590508080156136545750600a60029054906101000a900460ff165b801561366d5750600560149054906101000a900460ff16155b80156136c35750601e60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b80156137195750601c60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b801561376f5750601c60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b156137b3576001600560146101000a81548160ff021916908315150217905550613797614008565b6000600560146101000a81548160ff0219169083151502179055505b6000600560149054906101000a900460ff16159050601c60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16806138695750601c60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b1561387357600090505b60008115613aac57601e60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156138d657506000601454115b1561398a576139046103e86138f66014548861417890919063ffffffff16565b6141f290919063ffffffff16565b905080601560008282546139189190614fd2565b92505081905550601454601354826139309190614df4565b61393a9190614e7d565b6016600082825461394b9190614fd2565b92505081905550601454601254826139639190614df4565b61396d9190614e7d565b6017600082825461397e9190614fd2565b92505081905550613a88565b601e60008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615613a8757613a056103e86139f76011548861417890919063ffffffff16565b6141f290919063ffffffff16565b90508060156000828254613a199190614fd2565b9250508190555060115460105482613a319190614df4565b613a3b9190614e7d565b60166000828254613a4c9190614fd2565b92505081905550601154600f5482613a649190614df4565b613a6e9190614e7d565b60176000828254613a7f9190614fd2565b925050819055505b5b6000811115613a9d57613a9c873083613d9f565b5b8085613aa99190615cca565b94505b613ab7878787613d9f565b505050505b505050565b6000600267ffffffffffffffff811115613ade57613add6147ec565b5b604051908082528060200260200182016040528015613b0c5781602001602082028036833780820191505090505b5090503081600081518110613b2457613b23614d4e565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015613bc9573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613bed919061515b565b81600181518110613c0157613c00614d4e565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050613c66307f000000000000000000000000000000000000000000000000000000000000000084612aa3565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b8152600401613cc8959493929190615cfe565b600060405180830381600087803b158015613ce257600080fd5b505af1158015613cf6573d6000803e3d6000fd5b505050505050565b80601e60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508015158273ffffffffffffffffffffffffffffffffffffffff167fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab60405160405180910390a35050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603613e0e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613e0590615866565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603613e7d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613e74906158f8565b60405180910390fd5b60008060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015613f03576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613efa90615dca565b60405180910390fd5b8181036000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254613f969190614fd2565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051613ffa9190614725565b60405180910390a350505050565b600061401330611625565b905060006016546017546140279190614fd2565b90506000808314806140395750600082145b1561404657505050614176565b600083905061405481613ac1565b60004790506000614082856140746017548561417890919063ffffffff16565b6141f290919063ffffffff16565b90506140b081600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1661423c565b80601860008282546140c29190614fd2565b92505081905550600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff164760405161410f906150c5565b60006040518083038185875af1925050503d806000811461414c576040519150601f19603f3d011682016040523d82523d6000602084013e614151565b606091505b5050809450506000601781905550600060168190555060006015819055505050505050505b565b600080830361418a57600090506141ec565b600082846141989190614df4565b90508284826141a79190614e7d565b146141e7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016141de90615e5c565b60405180910390fd5b809150505b92915050565b600061423483836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250614470565b905092915050565b6000600267ffffffffffffffff811115614259576142586147ec565b5b6040519080825280602002602001820160405280156142875781602001602082028036833780820191505090505b5090507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa1580156142f5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190614319919061515b565b8160008151811061432d5761432c614d4e565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050818160018151811061437c5761437b614d4e565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663b6f9de9584600084600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16426040518663ffffffff1660e01b81526004016144399493929190615281565b6000604051808303818588803b15801561445257600080fd5b505af1158015614466573d6000803e3d6000fd5b5050505050505050565b600080831182906144b7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016144ae9190614652565b60405180910390fd5b50600083856144c69190614e7d565b9050809150509392505050565b6000604051905090565b600080fd5b600080fd5b6000819050919050565b6144fa816144e7565b811461450557600080fd5b50565b600081359050614517816144f1565b92915050565b60008060408385031215614534576145336144dd565b5b600061454285828601614508565b925050602061455385828601614508565b9150509250929050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006145888261455d565b9050919050565b6145988161457d565b82525050565b60006020820190506145b3600083018461458f565b92915050565b600081519050919050565b600082825260208201905092915050565b60005b838110156145f35780820151818401526020810190506145d8565b83811115614602576000848401525b50505050565b6000601f19601f8301169050919050565b6000614624826145b9565b61462e81856145c4565b935061463e8185602086016145d5565b61464781614608565b840191505092915050565b6000602082019050818103600083015261466c8184614619565b905092915050565b61467d8161457d565b811461468857600080fd5b50565b60008135905061469a81614674565b92915050565b600080604083850312156146b7576146b66144dd565b5b60006146c58582860161468b565b92505060206146d685828601614508565b9150509250929050565b60008115159050919050565b6146f5816146e0565b82525050565b600060208201905061471060008301846146ec565b92915050565b61471f816144e7565b82525050565b600060208201905061473a6000830184614716565b92915050565b600060208284031215614756576147556144dd565b5b60006147648482850161468b565b91505092915050565b6000819050919050565b600061479261478d6147888461455d565b61476d565b61455d565b9050919050565b60006147a482614777565b9050919050565b60006147b682614799565b9050919050565b6147c6816147ab565b82525050565b60006020820190506147e160008301846147bd565b92915050565b600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b61482482614608565b810181811067ffffffffffffffff82111715614843576148426147ec565b5b80604052505050565b60006148566144d3565b9050614862828261481b565b919050565b600067ffffffffffffffff821115614882576148816147ec565b5b602082029050602081019050919050565b600080fd5b60006148ab6148a684614867565b61484c565b905080838252602082019050602084028301858111156148ce576148cd614893565b5b835b818110156148f757806148e3888261468b565b8452602084019350506020810190506148d0565b5050509392505050565b600082601f830112614916576149156147e7565b5b8135614926848260208601614898565b91505092915050565b614938816146e0565b811461494357600080fd5b50565b6000813590506149558161492f565b92915050565b60008060408385031215614972576149716144dd565b5b600083013567ffffffffffffffff8111156149905761498f6144e2565b5b61499c85828601614901565b92505060206149ad85828601614946565b9150509250929050565b6000602082840312156149cd576149cc6144dd565b5b60006149db84828501614508565b91505092915050565b6000806000606084860312156149fd576149fc6144dd565b5b6000614a0b8682870161468b565b9350506020614a1c8682870161468b565b9250506040614a2d86828701614508565b9150509250925092565b600060ff82169050919050565b614a4d81614a37565b82525050565b6000602082019050614a686000830184614a44565b92915050565b60008060408385031215614a8557614a846144dd565b5b6000614a938582860161468b565b9250506020614aa485828601614946565b9150509250929050565b60008060408385031215614ac557614ac46144dd565b5b6000614ad385828601614508565b9250506020614ae48582860161468b565b9150509250929050565b600060208284031215614b0457614b036144dd565b5b6000614b1284828501614946565b91505092915050565b600080fd5b60008083601f840112614b3657614b356147e7565b5b8235905067ffffffffffffffff811115614b5357614b52614b1b565b5b602083019150836020820283011115614b6f57614b6e614893565b5b9250929050565b600080600060408486031215614b8f57614b8e6144dd565b5b600084013567ffffffffffffffff811115614bad57614bac6144e2565b5b614bb986828701614b20565b93509350506020614bcc86828701614946565b9150509250925092565b60008060408385031215614bed57614bec6144dd565b5b6000614bfb8582860161468b565b9250506020614c0c8582860161468b565b9150509250929050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000614c4c6020836145c4565b9150614c5782614c16565b602082019050919050565b60006020820190508181036000830152614c7b81614c3f565b9050919050565b7f4d757374206b656570206665657320617420313525206f72206c657373000000600082015250565b6000614cb8601d836145c4565b9150614cc382614c82565b602082019050919050565b60006020820190508181036000830152614ce781614cab565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680614d3557607f821691505b602082108103614d4857614d47614cee565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000614db7826144e7565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203614de957614de8614d7d565b5b600182019050919050565b6000614dff826144e7565b9150614e0a836144e7565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615614e4357614e42614d7d565b5b828202905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000614e88826144e7565b9150614e93836144e7565b925082614ea357614ea2614e4e565b5b828204905092915050565b7f43616e6e6f7420736574206d61785472616e73616374696f6e416d6f756e742060008201527f6c6f776572207468616e20302e31250000000000000000000000000000000000602082015250565b6000614f0a602f836145c4565b9150614f1582614eae565b604082019050919050565b60006020820190508181036000830152614f3981614efd565b9050919050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206160008201527f6c6c6f77616e6365000000000000000000000000000000000000000000000000602082015250565b6000614f9c6028836145c4565b9150614fa782614f40565b604082019050919050565b60006020820190508181036000830152614fcb81614f8f565b9050919050565b6000614fdd826144e7565b9150614fe8836144e7565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111561501d5761501c614d7d565b5b828201905092915050565b7f4d757374206b65657020666565732061742031303025206f72206c6573730000600082015250565b600061505e601e836145c4565b915061506982615028565b602082019050919050565b6000602082019050818103600083015261508d81615051565b9050919050565b600081905092915050565b50565b60006150af600083615094565b91506150ba8261509f565b600082019050919050565b60006150d0826150a2565b9150819050919050565b7f6661696c656420746f2077697468647261770000000000000000000000000000600082015250565b60006151106012836145c4565b915061511b826150da565b602082019050919050565b6000602082019050818103600083015261513f81615103565b9050919050565b60008151905061515581614674565b92915050565b600060208284031215615171576151706144dd565b5b600061517f84828501615146565b91505092915050565b6000819050919050565b60006151ad6151a86151a384615188565b61476d565b6144e7565b9050919050565b6151bd81615192565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b6151f88161457d565b82525050565b600061520a83836151ef565b60208301905092915050565b6000602082019050919050565b600061522e826151c3565b61523881856151ce565b9350615243836151df565b8060005b8381101561527457815161525b88826151fe565b975061526683615216565b925050600181019050615247565b5085935050505092915050565b600060808201905061529660008301876151b4565b81810360208301526152a88186615223565b90506152b7604083018561458f565b6152c46060830184614716565b95945050505050565b7f43616e6e6f742072652d656e61626c652074726164696e670000000000000000600082015250565b60006153036018836145c4565b915061530e826152cd565b602082019050919050565b60006020820190508181036000830152615332816152f6565b9050919050565b7f616464726573732063616e6e6f74206265203000000000000000000000000000600082015250565b600061536f6013836145c4565b915061537a82615339565b602082019050919050565b6000602082019050818103600083015261539e81615362565b9050919050565b7f54686520556e697377617020706169722063616e6e6f742062652072656d6f7660008201527f65642066726f6d206175746f6d617465644d61726b65744d616b65725061697260208201527f7300000000000000000000000000000000000000000000000000000000000000604082015250565b60006154276041836145c4565b9150615432826153a5565b606082019050919050565b600060208201905081810360008301526154568161541a565b9050919050565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760008201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b60006154b96025836145c4565b91506154c48261545d565b604082019050919050565b600060208201905081810360008301526154e8816154ac565b9050919050565b7f43616e6e6f7420736574206d617857616c6c6574206c6f776572207468616e2060008201527f302e352500000000000000000000000000000000000000000000000000000000602082015250565b600061554b6024836145c4565b9150615556826154ef565b604082019050919050565b6000602082019050818103600083015261557a8161553e565b9050919050565b6000819050919050565b600061559a602084018461468b565b905092915050565b6000602082019050919050565b60006155bb83856151ce565b93506155c682615581565b8060005b858110156155ff576155dc828461558b565b6155e688826151fe565b97506155f1836155a2565b9250506001810190506155ca565b5085925050509392505050565b600060408201905081810360008301526156278185876155af565b905061563660208301846146ec565b949350505050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b600061569a6026836145c4565b91506156a58261563e565b604082019050919050565b600060208201905081810360008301526156c98161568d565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b600061572c6024836145c4565b9150615737826156d0565b604082019050919050565b6000602082019050818103600083015261575b8161571f565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b60006157be6022836145c4565b91506157c982615762565b604082019050919050565b600060208201905081810360008301526157ed816157b1565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b60006158506025836145c4565b915061585b826157f4565b604082019050919050565b6000602082019050818103600083015261587f81615843565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b60006158e26023836145c4565b91506158ed82615886565b604082019050919050565b60006020820190508181036000830152615911816158d5565b9050919050565b7f596f752068617665206265656e20626c61636b6c69737465642066726f6d207460008201527f72616e73666572696e6720746f6b656e73000000000000000000000000000000602082015250565b60006159746031836145c4565b915061597f82615918565b604082019050919050565b600060208201905081810360008301526159a381615967565b9050919050565b7f54726164696e67206973206e6f7420616374697665207965742e000000000000600082015250565b60006159e0601a836145c4565b91506159eb826159aa565b602082019050919050565b60006020820190508181036000830152615a0f816159d3565b9050919050565b7f54726164696e67206973206e6f74206163746976652e00000000000000000000600082015250565b6000615a4c6016836145c4565b9150615a5782615a16565b602082019050919050565b60006020820190508181036000830152615a7b81615a3f565b9050919050565b7f5f7472616e736665723a3a205472616e736665722044656c617920656e61626c60008201527f65642e20204f6e6c79206f6e652070757263686173652070657220626c6f636b60208201527f20616c6c6f7765642e0000000000000000000000000000000000000000000000604082015250565b6000615b046049836145c4565b9150615b0f82615a82565b606082019050919050565b60006020820190508181036000830152615b3381615af7565b9050919050565b7f427579207472616e7366657220616d6f756e742065786365656473207468652060008201527f6d61785472616e73616374696f6e416d6f756e742e0000000000000000000000602082015250565b6000615b966035836145c4565b9150615ba182615b3a565b604082019050919050565b60006020820190508181036000830152615bc581615b89565b9050919050565b7f4d61782077616c6c657420657863656564656400000000000000000000000000600082015250565b6000615c026013836145c4565b9150615c0d82615bcc565b602082019050919050565b60006020820190508181036000830152615c3181615bf5565b9050919050565b7f53656c6c207472616e7366657220616d6f756e7420657863656564732074686560008201527f206d61785472616e73616374696f6e416d6f756e742e00000000000000000000602082015250565b6000615c946036836145c4565b9150615c9f82615c38565b604082019050919050565b60006020820190508181036000830152615cc381615c87565b9050919050565b6000615cd5826144e7565b9150615ce0836144e7565b925082821015615cf357615cf2614d7d565b5b828203905092915050565b600060a082019050615d136000830188614716565b615d2060208301876151b4565b8181036040830152615d328186615223565b9050615d41606083018561458f565b615d4e6080830184614716565b9695505050505050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206260008201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b6000615db46026836145c4565b9150615dbf82615d58565b604082019050919050565b60006020820190508181036000830152615de381615da7565b9050919050565b7f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f60008201527f7700000000000000000000000000000000000000000000000000000000000000602082015250565b6000615e466021836145c4565b9150615e5182615dea565b604082019050919050565b60006020820190508181036000830152615e7581615e39565b905091905056fea26469706673582212205e397e7cf9e77a082834432daa04d10ae5160f51bef0c3a35af487d8aceb6e2664736f6c634300080d0033

Deployed Bytecode

0x6080604052600436106103855760003560e01c80637df30749116101d1578063bbc0c74211610102578063dce484a0116100a0578063e88826921161006f578063e888269214610cef578063ee40166e14610d1a578063f2fde38b14610d45578063f8b45b0514610d6e5761038c565b8063dce484a014610c31578063dd62ed3e14610c5c578063e2f4560514610c99578063e7f444b314610cc45761038c565b8063c492f046116100dc578063c492f04614610b87578063c876d0b914610bb0578063c8c8ebe414610bdb578063d0a3981414610c065761038c565b8063bbc0c74214610b0a578063c024666814610b35578063c18bc19514610b5e5761038c565b8063975aa8bf1161016f578063a457c2d711610149578063a457c2d714610a28578063a9059cbb14610a65578063b62496f514610aa2578063b9e9370014610adf5761038c565b8063975aa8bf146109ab5780639a36f932146109d45780639a7a23d6146109ff5761038c565b80638a8c523c116101ab5780638a8c523c146109155780638da5cb5b1461092c578063924de9b71461095757806395d89b41146109805761038c565b80637df30749146108aa5780637fa787ba146108d557806380363a38146108ec5761038c565b8063313ce567116102b657806366ca9b8311610254578063715018a611610223578063715018a614610814578063751039fc1461082b5780637571336a1461085657806375f0a8741461087f5761038c565b806366ca9b831461075857806368078952146107815780636ddd1713146107ac57806370a08231146107d75761038c565b806349bd5a5e1161029057806349bd5a5e146106ae5780634a62bb65146106d95780634fbee1931461070457806351bc3c85146107415761038c565b8063313ce5671461061b57806339509351146106465780633f8a6204146106835761038c565b806317533bca116103235780631f3fed8f116102fd5780631f3fed8f1461055f578063203e727e1461058a57806323b872dd146105b3578063242d632a146105f05761038c565b806317533bca146104e057806318160ddd146105095780631d777856146105345761038c565b8063095ea7b31161035f578063095ea7b3146104105780630f4432e31461044d57806310d5de53146104785780631694505e146104b55761038c565b806302dbd8f81461039157806306228749146103ba57806306fdde03146103e55761038c565b3661038c57005b600080fd5b34801561039d57600080fd5b506103b860048036038101906103b3919061451d565b610d99565b005b3480156103c657600080fd5b506103cf610e91565b6040516103dc919061459e565b60405180910390f35b3480156103f157600080fd5b506103fa610eb7565b6040516104079190614652565b60405180910390f35b34801561041c57600080fd5b50610437600480360381019061043291906146a0565b610f49565b60405161044491906146fb565b60405180910390f35b34801561045957600080fd5b50610462610f67565b60405161046f9190614725565b60405180910390f35b34801561048457600080fd5b5061049f600480360381019061049a9190614740565b610f6d565b6040516104ac91906146fb565b60405180910390f35b3480156104c157600080fd5b506104ca610f8d565b6040516104d791906147cc565b60405180910390f35b3480156104ec57600080fd5b506105076004803603810190610502919061495b565b610fb1565b005b34801561051557600080fd5b5061051e6110dd565b60405161052b9190614725565b60405180910390f35b34801561054057600080fd5b506105496110e7565b6040516105569190614725565b60405180910390f35b34801561056b57600080fd5b506105746110ed565b6040516105819190614725565b60405180910390f35b34801561059657600080fd5b506105b160048036038101906105ac91906149b7565b6110f3565b005b3480156105bf57600080fd5b506105da60048036038101906105d591906149e4565b61121d565b6040516105e791906146fb565b60405180910390f35b3480156105fc57600080fd5b50610605611315565b6040516106129190614725565b60405180910390f35b34801561062757600080fd5b5061063061131b565b60405161063d9190614a53565b60405180910390f35b34801561065257600080fd5b5061066d600480360381019061066891906146a0565b611324565b60405161067a91906146fb565b60405180910390f35b34801561068f57600080fd5b506106986113d0565b6040516106a59190614725565b60405180910390f35b3480156106ba57600080fd5b506106c36113d6565b6040516106d0919061459e565b60405180910390f35b3480156106e557600080fd5b506106ee6113fa565b6040516106fb91906146fb565b60405180910390f35b34801561071057600080fd5b5061072b60048036038101906107269190614740565b61140d565b60405161073891906146fb565b60405180910390f35b34801561074d57600080fd5b50610756611463565b005b34801561076457600080fd5b5061077f600480360381019061077a919061451d565b611513565b005b34801561078d57600080fd5b5061079661160c565b6040516107a39190614725565b60405180910390f35b3480156107b857600080fd5b506107c1611612565b6040516107ce91906146fb565b60405180910390f35b3480156107e357600080fd5b506107fe60048036038101906107f99190614740565b611625565b60405161080b9190614725565b60405180910390f35b34801561082057600080fd5b5061082961166d565b005b34801561083757600080fd5b506108406117c5565b60405161084d91906146fb565b60405180910390f35b34801561086257600080fd5b5061087d60048036038101906108789190614a6e565b611880565b005b34801561088b57600080fd5b50610894611972565b6040516108a1919061459e565b60405180910390f35b3480156108b657600080fd5b506108bf611998565b6040516108cc919061459e565b60405180910390f35b3480156108e157600080fd5b506108ea6119be565b005b3480156108f857600080fd5b50610913600480360381019061090e9190614aae565b611b04565b005b34801561092157600080fd5b5061092a611dcf565b005b34801561093857600080fd5b50610941611ef5565b60405161094e919061459e565b60405180910390f35b34801561096357600080fd5b5061097e60048036038101906109799190614aee565b611f1f565b005b34801561098c57600080fd5b50610995611fd3565b6040516109a29190614652565b60405180910390f35b3480156109b757600080fd5b506109d260048036038101906109cd9190614740565b612065565b005b3480156109e057600080fd5b506109e96121af565b6040516109f69190614725565b60405180910390f35b348015610a0b57600080fd5b50610a266004803603810190610a219190614a6e565b6121b5565b005b348015610a3457600080fd5b50610a4f6004803603810190610a4a91906146a0565b6122e8565b604051610a5c91906146fb565b60405180910390f35b348015610a7157600080fd5b50610a8c6004803603810190610a8791906146a0565b6123d3565b604051610a9991906146fb565b60405180910390f35b348015610aae57600080fd5b50610ac96004803603810190610ac49190614740565b6123f1565b604051610ad691906146fb565b60405180910390f35b348015610aeb57600080fd5b50610af4612411565b604051610b019190614725565b60405180910390f35b348015610b1657600080fd5b50610b1f612417565b604051610b2c91906146fb565b60405180910390f35b348015610b4157600080fd5b50610b5c6004803603810190610b579190614a6e565b61242a565b005b348015610b6a57600080fd5b50610b856004803603810190610b8091906149b7565b61256a565b005b348015610b9357600080fd5b50610bae6004803603810190610ba99190614b76565b612694565b005b348015610bbc57600080fd5b50610bc561280b565b604051610bd291906146fb565b60405180910390f35b348015610be757600080fd5b50610bf061281e565b604051610bfd9190614725565b60405180910390f35b348015610c1257600080fd5b50610c1b612824565b604051610c289190614725565b60405180910390f35b348015610c3d57600080fd5b50610c4661282a565b604051610c539190614725565b60405180910390f35b348015610c6857600080fd5b50610c836004803603810190610c7e9190614bd6565b612830565b604051610c909190614725565b60405180910390f35b348015610ca557600080fd5b50610cae6128b7565b604051610cbb9190614725565b60405180910390f35b348015610cd057600080fd5b50610cd96128bd565b604051610ce69190614725565b60405180910390f35b348015610cfb57600080fd5b50610d046128c3565b604051610d119190614725565b60405180910390f35b348015610d2657600080fd5b50610d2f6128c9565b604051610d3c9190614725565b60405180910390f35b348015610d5157600080fd5b50610d6c6004803603810190610d679190614740565b6128cf565b005b348015610d7a57600080fd5b50610d83612a95565b604051610d909190614725565b60405180910390f35b610da1612a9b565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610e30576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e2790614c62565b60405180910390fd5b816012819055508060138190555060125460148190555060966014541115610e8d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e8490614cce565b60405180910390fd5b5050565b600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b606060038054610ec690614d1d565b80601f0160208091040260200160405190810160405280929190818152602001828054610ef290614d1d565b8015610f3f5780601f10610f1457610100808354040283529160200191610f3f565b820191906000526020600020905b815481529060010190602001808311610f2257829003601f168201915b5050505050905090565b6000610f5d610f56612a9b565b8484612aa3565b6001905092915050565b60085481565b601d6020528060005260406000206000915054906101000a900460ff1681565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d81565b610fb9612a9b565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611048576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161103f90614c62565b60405180910390fd5b60005b82518110156110d85781601b600085848151811061106c5761106b614d4e565b5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555080806110d090614dac565b91505061104b565b505050565b6000600254905090565b60175481565b60165481565b6110fb612a9b565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461118a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161118190614c62565b60405180910390fd5b670de0b6b3a76400006103e860016111a06110dd565b6111aa9190614df4565b6111b49190614e7d565b6111be9190614e7d565b811015611200576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111f790614f20565b60405180910390fd5b670de0b6b3a7640000816112149190614df4565b60078190555050565b600061122a848484612c6c565b6000600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000611275612a9b565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050828110156112f5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112ec90614fb2565b60405180910390fd5b61130985611301612a9b565b858403612aa3565b60019150509392505050565b600f5481565b60006012905090565b60006113c6611331612a9b565b84846001600061133f612a9b565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546113c19190614fd2565b612aa3565b6001905092915050565b60155481565b7f000000000000000000000000bf896c606987aee6f133cf90dc7f147bc171b38b81565b600a60019054906101000a900460ff1681565b6000601c60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b61146b612a9b565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146114fa576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114f190614c62565b60405180910390fd5b600061150530611625565b905061151081613ac1565b50565b61151b612a9b565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146115aa576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115a190614c62565b60405180910390fd5b81600f81905550806010819055506012546014819055506103e86014541115611608576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115ff90615074565b60405180910390fd5b5050565b60105481565b600a60029054906101000a900460ff1681565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b611675612a9b565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611704576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116fb90614c62565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a36000600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b60006117cf612a9b565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461185e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161185590614c62565b60405180910390fd5b6000600a60016101000a81548160ff0219169083151502179055506001905090565b611888612a9b565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611917576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161190e90614c62565b60405180910390fd5b80601d60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6119c6612a9b565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611a55576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a4c90614c62565b60405180910390fd5b60003373ffffffffffffffffffffffffffffffffffffffff1647604051611a7b906150c5565b60006040518083038185875af1925050503d8060008114611ab8576040519150601f19603f3d011682016040523d82523d6000602084013e611abd565b606091505b5050905080611b01576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611af890615126565b60405180910390fd5b50565b611b0c612a9b565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611b9b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b9290614c62565b60405180910390fd5b6000600267ffffffffffffffff811115611bb857611bb76147ec565b5b604051908082528060200260200182016040528015611be65781602001602082028036833780820191505090505b5090507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015611c54573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611c78919061515b565b81600081518110611c8c57611c8b614d4e565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250508181600181518110611cdb57611cda614d4e565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663b6f9de9584600084600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16426040518663ffffffff1660e01b8152600401611d989493929190615281565b6000604051808303818588803b158015611db157600080fd5b505af1158015611dc5573d6000803e3d6000fd5b5050505050505050565b611dd7612a9b565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611e66576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e5d90614c62565b60405180910390fd5b600a60009054906101000a900460ff1615611eb6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ead90615319565b60405180910390fd5b6001600a60006101000a81548160ff0219169083151502179055506001600a60026101000a81548160ff02191690831515021790555043600981905550565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b611f27612a9b565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611fb6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fad90614c62565b60405180910390fd5b80600a60026101000a81548160ff02191690831515021790555050565b606060048054611fe290614d1d565b80601f016020809104026020016040519081016040528092919081815260200182805461200e90614d1d565b801561205b5780601f106120305761010080835404028352916020019161205b565b820191906000526020600020905b81548152906001019060200180831161203e57829003601f168201915b5050505050905090565b61206d612a9b565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146120fc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120f390614c62565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff160361216b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161216290615385565b60405180910390fd5b80600d60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6103e881565b6121bd612a9b565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461224c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161224390614c62565b60405180910390fd5b7f000000000000000000000000bf896c606987aee6f133cf90dc7f147bc171b38b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036122da576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122d19061543d565b60405180910390fd5b6122e48282613cfe565b5050565b600080600160006122f7612a9b565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050828110156123b4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123ab906154cf565b60405180910390fd5b6123c86123bf612a9b565b85858403612aa3565b600191505092915050565b60006123e76123e0612a9b565b8484612c6c565b6001905092915050565b601e6020528060005260406000206000915054906101000a900460ff1681565b60115481565b600a60009054906101000a900460ff1681565b612432612a9b565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146124c1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124b890614c62565b60405180910390fd5b80601c60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df78260405161255e91906146fb565b60405180910390a25050565b612572612a9b565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612601576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125f890614c62565b60405180910390fd5b670de0b6b3a76400006103e860056126176110dd565b6126219190614df4565b61262b9190614e7d565b6126359190614e7d565b811015612677576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161266e90615561565b60405180910390fd5b670de0b6b3a76400008161268b9190614df4565b601a8190555050565b61269c612a9b565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461272b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161272290614c62565b60405180910390fd5b60005b838390508110156127ca5781601c600086868581811061275157612750614d4e565b5b90506020020160208101906127669190614740565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555080806127c290614dac565b91505061272e565b507f7fdaf542373fa84f4ee8d662c642f44e4c2276a217d7d29e548b6eb29a233b358383836040516127fe9392919061560c565b60405180910390a1505050565b601960009054906101000a900460ff1681565b60075481565b60145481565b60185481565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b60065481565b60135481565b60125481565b60095481565b6128d7612a9b565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612966576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161295d90614c62565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036129d5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016129cc906156b0565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a380600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b601a5481565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612b12576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b0990615742565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612b81576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b78906157d4565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92583604051612c5f9190614725565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612cdb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612cd290615866565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612d4a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d41906158f8565b60405180910390fd5b601b60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16158015612dee5750601b60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b612e2d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612e249061598a565b60405180910390fd5b60008103612e4657612e4183836000613d9f565b613abc565b600a60009054906101000a900460ff16612f3b57601c60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680612efb5750601c60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b612f3a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612f31906159f6565b60405180910390fd5b5b600a60019054906101000a900460ff161561362457612f58611ef5565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614158015612fc65750612f96611ef5565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015612fff5750600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015613039575061dead73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b80156130525750600560149054906101000a900460ff16155b1561362357600a60009054906101000a900460ff1661314c57601c60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168061310c5750601c60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b61314b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161314290615a62565b60405180910390fd5b5b601960009054906101000a900460ff161561331457613169611ef5565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141580156131f057507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b801561324857507f000000000000000000000000bf896c606987aee6f133cf90dc7f147bc171b38b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b156133135743600b60003273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054106132ce576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016132c590615b1a565b60405180910390fd5b43600b60003273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b5b601e60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156133b75750601d60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b1561347157670de0b6b3a76400006007546133d29190614fd2565b811115613414576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161340b90615bac565b60405180910390fd5b601a5461342083611625565b8261342b9190614fd2565b111561346c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161346390615c18565b60405180910390fd5b613622565b601e60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156135145750601d60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b1561357657670de0b6b3a764000060075461352f9190614fd2565b811115613571576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161356890615caa565b60405180910390fd5b613621565b601d60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1661362057601a546135d383611625565b826135de9190614fd2565b111561361f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161361690615c18565b60405180910390fd5b5b5b5b5b5b600061362f30611625565b9050600060065482101590508080156136545750600a60029054906101000a900460ff165b801561366d5750600560149054906101000a900460ff16155b80156136c35750601e60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b80156137195750601c60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b801561376f5750601c60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b156137b3576001600560146101000a81548160ff021916908315150217905550613797614008565b6000600560146101000a81548160ff0219169083151502179055505b6000600560149054906101000a900460ff16159050601c60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16806138695750601c60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b1561387357600090505b60008115613aac57601e60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156138d657506000601454115b1561398a576139046103e86138f66014548861417890919063ffffffff16565b6141f290919063ffffffff16565b905080601560008282546139189190614fd2565b92505081905550601454601354826139309190614df4565b61393a9190614e7d565b6016600082825461394b9190614fd2565b92505081905550601454601254826139639190614df4565b61396d9190614e7d565b6017600082825461397e9190614fd2565b92505081905550613a88565b601e60008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615613a8757613a056103e86139f76011548861417890919063ffffffff16565b6141f290919063ffffffff16565b90508060156000828254613a199190614fd2565b9250508190555060115460105482613a319190614df4565b613a3b9190614e7d565b60166000828254613a4c9190614fd2565b92505081905550601154600f5482613a649190614df4565b613a6e9190614e7d565b60176000828254613a7f9190614fd2565b925050819055505b5b6000811115613a9d57613a9c873083613d9f565b5b8085613aa99190615cca565b94505b613ab7878787613d9f565b505050505b505050565b6000600267ffffffffffffffff811115613ade57613add6147ec565b5b604051908082528060200260200182016040528015613b0c5781602001602082028036833780820191505090505b5090503081600081518110613b2457613b23614d4e565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015613bc9573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613bed919061515b565b81600181518110613c0157613c00614d4e565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050613c66307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d84612aa3565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b8152600401613cc8959493929190615cfe565b600060405180830381600087803b158015613ce257600080fd5b505af1158015613cf6573d6000803e3d6000fd5b505050505050565b80601e60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508015158273ffffffffffffffffffffffffffffffffffffffff167fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab60405160405180910390a35050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603613e0e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613e0590615866565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603613e7d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613e74906158f8565b60405180910390fd5b60008060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015613f03576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613efa90615dca565b60405180910390fd5b8181036000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254613f969190614fd2565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051613ffa9190614725565b60405180910390a350505050565b600061401330611625565b905060006016546017546140279190614fd2565b90506000808314806140395750600082145b1561404657505050614176565b600083905061405481613ac1565b60004790506000614082856140746017548561417890919063ffffffff16565b6141f290919063ffffffff16565b90506140b081600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1661423c565b80601860008282546140c29190614fd2565b92505081905550600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff164760405161410f906150c5565b60006040518083038185875af1925050503d806000811461414c576040519150601f19603f3d011682016040523d82523d6000602084013e614151565b606091505b5050809450506000601781905550600060168190555060006015819055505050505050505b565b600080830361418a57600090506141ec565b600082846141989190614df4565b90508284826141a79190614e7d565b146141e7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016141de90615e5c565b60405180910390fd5b809150505b92915050565b600061423483836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250614470565b905092915050565b6000600267ffffffffffffffff811115614259576142586147ec565b5b6040519080825280602002602001820160405280156142875781602001602082028036833780820191505090505b5090507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa1580156142f5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190614319919061515b565b8160008151811061432d5761432c614d4e565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050818160018151811061437c5761437b614d4e565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663b6f9de9584600084600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16426040518663ffffffff1660e01b81526004016144399493929190615281565b6000604051808303818588803b15801561445257600080fd5b505af1158015614466573d6000803e3d6000fd5b5050505050505050565b600080831182906144b7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016144ae9190614652565b60405180910390fd5b50600083856144c69190614e7d565b9050809150509392505050565b6000604051905090565b600080fd5b600080fd5b6000819050919050565b6144fa816144e7565b811461450557600080fd5b50565b600081359050614517816144f1565b92915050565b60008060408385031215614534576145336144dd565b5b600061454285828601614508565b925050602061455385828601614508565b9150509250929050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006145888261455d565b9050919050565b6145988161457d565b82525050565b60006020820190506145b3600083018461458f565b92915050565b600081519050919050565b600082825260208201905092915050565b60005b838110156145f35780820151818401526020810190506145d8565b83811115614602576000848401525b50505050565b6000601f19601f8301169050919050565b6000614624826145b9565b61462e81856145c4565b935061463e8185602086016145d5565b61464781614608565b840191505092915050565b6000602082019050818103600083015261466c8184614619565b905092915050565b61467d8161457d565b811461468857600080fd5b50565b60008135905061469a81614674565b92915050565b600080604083850312156146b7576146b66144dd565b5b60006146c58582860161468b565b92505060206146d685828601614508565b9150509250929050565b60008115159050919050565b6146f5816146e0565b82525050565b600060208201905061471060008301846146ec565b92915050565b61471f816144e7565b82525050565b600060208201905061473a6000830184614716565b92915050565b600060208284031215614756576147556144dd565b5b60006147648482850161468b565b91505092915050565b6000819050919050565b600061479261478d6147888461455d565b61476d565b61455d565b9050919050565b60006147a482614777565b9050919050565b60006147b682614799565b9050919050565b6147c6816147ab565b82525050565b60006020820190506147e160008301846147bd565b92915050565b600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b61482482614608565b810181811067ffffffffffffffff82111715614843576148426147ec565b5b80604052505050565b60006148566144d3565b9050614862828261481b565b919050565b600067ffffffffffffffff821115614882576148816147ec565b5b602082029050602081019050919050565b600080fd5b60006148ab6148a684614867565b61484c565b905080838252602082019050602084028301858111156148ce576148cd614893565b5b835b818110156148f757806148e3888261468b565b8452602084019350506020810190506148d0565b5050509392505050565b600082601f830112614916576149156147e7565b5b8135614926848260208601614898565b91505092915050565b614938816146e0565b811461494357600080fd5b50565b6000813590506149558161492f565b92915050565b60008060408385031215614972576149716144dd565b5b600083013567ffffffffffffffff8111156149905761498f6144e2565b5b61499c85828601614901565b92505060206149ad85828601614946565b9150509250929050565b6000602082840312156149cd576149cc6144dd565b5b60006149db84828501614508565b91505092915050565b6000806000606084860312156149fd576149fc6144dd565b5b6000614a0b8682870161468b565b9350506020614a1c8682870161468b565b9250506040614a2d86828701614508565b9150509250925092565b600060ff82169050919050565b614a4d81614a37565b82525050565b6000602082019050614a686000830184614a44565b92915050565b60008060408385031215614a8557614a846144dd565b5b6000614a938582860161468b565b9250506020614aa485828601614946565b9150509250929050565b60008060408385031215614ac557614ac46144dd565b5b6000614ad385828601614508565b9250506020614ae48582860161468b565b9150509250929050565b600060208284031215614b0457614b036144dd565b5b6000614b1284828501614946565b91505092915050565b600080fd5b60008083601f840112614b3657614b356147e7565b5b8235905067ffffffffffffffff811115614b5357614b52614b1b565b5b602083019150836020820283011115614b6f57614b6e614893565b5b9250929050565b600080600060408486031215614b8f57614b8e6144dd565b5b600084013567ffffffffffffffff811115614bad57614bac6144e2565b5b614bb986828701614b20565b93509350506020614bcc86828701614946565b9150509250925092565b60008060408385031215614bed57614bec6144dd565b5b6000614bfb8582860161468b565b9250506020614c0c8582860161468b565b9150509250929050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000614c4c6020836145c4565b9150614c5782614c16565b602082019050919050565b60006020820190508181036000830152614c7b81614c3f565b9050919050565b7f4d757374206b656570206665657320617420313525206f72206c657373000000600082015250565b6000614cb8601d836145c4565b9150614cc382614c82565b602082019050919050565b60006020820190508181036000830152614ce781614cab565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680614d3557607f821691505b602082108103614d4857614d47614cee565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000614db7826144e7565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203614de957614de8614d7d565b5b600182019050919050565b6000614dff826144e7565b9150614e0a836144e7565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615614e4357614e42614d7d565b5b828202905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000614e88826144e7565b9150614e93836144e7565b925082614ea357614ea2614e4e565b5b828204905092915050565b7f43616e6e6f7420736574206d61785472616e73616374696f6e416d6f756e742060008201527f6c6f776572207468616e20302e31250000000000000000000000000000000000602082015250565b6000614f0a602f836145c4565b9150614f1582614eae565b604082019050919050565b60006020820190508181036000830152614f3981614efd565b9050919050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206160008201527f6c6c6f77616e6365000000000000000000000000000000000000000000000000602082015250565b6000614f9c6028836145c4565b9150614fa782614f40565b604082019050919050565b60006020820190508181036000830152614fcb81614f8f565b9050919050565b6000614fdd826144e7565b9150614fe8836144e7565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111561501d5761501c614d7d565b5b828201905092915050565b7f4d757374206b65657020666565732061742031303025206f72206c6573730000600082015250565b600061505e601e836145c4565b915061506982615028565b602082019050919050565b6000602082019050818103600083015261508d81615051565b9050919050565b600081905092915050565b50565b60006150af600083615094565b91506150ba8261509f565b600082019050919050565b60006150d0826150a2565b9150819050919050565b7f6661696c656420746f2077697468647261770000000000000000000000000000600082015250565b60006151106012836145c4565b915061511b826150da565b602082019050919050565b6000602082019050818103600083015261513f81615103565b9050919050565b60008151905061515581614674565b92915050565b600060208284031215615171576151706144dd565b5b600061517f84828501615146565b91505092915050565b6000819050919050565b60006151ad6151a86151a384615188565b61476d565b6144e7565b9050919050565b6151bd81615192565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b6151f88161457d565b82525050565b600061520a83836151ef565b60208301905092915050565b6000602082019050919050565b600061522e826151c3565b61523881856151ce565b9350615243836151df565b8060005b8381101561527457815161525b88826151fe565b975061526683615216565b925050600181019050615247565b5085935050505092915050565b600060808201905061529660008301876151b4565b81810360208301526152a88186615223565b90506152b7604083018561458f565b6152c46060830184614716565b95945050505050565b7f43616e6e6f742072652d656e61626c652074726164696e670000000000000000600082015250565b60006153036018836145c4565b915061530e826152cd565b602082019050919050565b60006020820190508181036000830152615332816152f6565b9050919050565b7f616464726573732063616e6e6f74206265203000000000000000000000000000600082015250565b600061536f6013836145c4565b915061537a82615339565b602082019050919050565b6000602082019050818103600083015261539e81615362565b9050919050565b7f54686520556e697377617020706169722063616e6e6f742062652072656d6f7660008201527f65642066726f6d206175746f6d617465644d61726b65744d616b65725061697260208201527f7300000000000000000000000000000000000000000000000000000000000000604082015250565b60006154276041836145c4565b9150615432826153a5565b606082019050919050565b600060208201905081810360008301526154568161541a565b9050919050565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760008201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b60006154b96025836145c4565b91506154c48261545d565b604082019050919050565b600060208201905081810360008301526154e8816154ac565b9050919050565b7f43616e6e6f7420736574206d617857616c6c6574206c6f776572207468616e2060008201527f302e352500000000000000000000000000000000000000000000000000000000602082015250565b600061554b6024836145c4565b9150615556826154ef565b604082019050919050565b6000602082019050818103600083015261557a8161553e565b9050919050565b6000819050919050565b600061559a602084018461468b565b905092915050565b6000602082019050919050565b60006155bb83856151ce565b93506155c682615581565b8060005b858110156155ff576155dc828461558b565b6155e688826151fe565b97506155f1836155a2565b9250506001810190506155ca565b5085925050509392505050565b600060408201905081810360008301526156278185876155af565b905061563660208301846146ec565b949350505050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b600061569a6026836145c4565b91506156a58261563e565b604082019050919050565b600060208201905081810360008301526156c98161568d565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b600061572c6024836145c4565b9150615737826156d0565b604082019050919050565b6000602082019050818103600083015261575b8161571f565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b60006157be6022836145c4565b91506157c982615762565b604082019050919050565b600060208201905081810360008301526157ed816157b1565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b60006158506025836145c4565b915061585b826157f4565b604082019050919050565b6000602082019050818103600083015261587f81615843565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b60006158e26023836145c4565b91506158ed82615886565b604082019050919050565b60006020820190508181036000830152615911816158d5565b9050919050565b7f596f752068617665206265656e20626c61636b6c69737465642066726f6d207460008201527f72616e73666572696e6720746f6b656e73000000000000000000000000000000602082015250565b60006159746031836145c4565b915061597f82615918565b604082019050919050565b600060208201905081810360008301526159a381615967565b9050919050565b7f54726164696e67206973206e6f7420616374697665207965742e000000000000600082015250565b60006159e0601a836145c4565b91506159eb826159aa565b602082019050919050565b60006020820190508181036000830152615a0f816159d3565b9050919050565b7f54726164696e67206973206e6f74206163746976652e00000000000000000000600082015250565b6000615a4c6016836145c4565b9150615a5782615a16565b602082019050919050565b60006020820190508181036000830152615a7b81615a3f565b9050919050565b7f5f7472616e736665723a3a205472616e736665722044656c617920656e61626c60008201527f65642e20204f6e6c79206f6e652070757263686173652070657220626c6f636b60208201527f20616c6c6f7765642e0000000000000000000000000000000000000000000000604082015250565b6000615b046049836145c4565b9150615b0f82615a82565b606082019050919050565b60006020820190508181036000830152615b3381615af7565b9050919050565b7f427579207472616e7366657220616d6f756e742065786365656473207468652060008201527f6d61785472616e73616374696f6e416d6f756e742e0000000000000000000000602082015250565b6000615b966035836145c4565b9150615ba182615b3a565b604082019050919050565b60006020820190508181036000830152615bc581615b89565b9050919050565b7f4d61782077616c6c657420657863656564656400000000000000000000000000600082015250565b6000615c026013836145c4565b9150615c0d82615bcc565b602082019050919050565b60006020820190508181036000830152615c3181615bf5565b9050919050565b7f53656c6c207472616e7366657220616d6f756e7420657863656564732074686560008201527f206d61785472616e73616374696f6e416d6f756e742e00000000000000000000602082015250565b6000615c946036836145c4565b9150615c9f82615c38565b604082019050919050565b60006020820190508181036000830152615cc381615c87565b9050919050565b6000615cd5826144e7565b9150615ce0836144e7565b925082821015615cf357615cf2614d7d565b5b828203905092915050565b600060a082019050615d136000830188614716565b615d2060208301876151b4565b8181036040830152615d328186615223565b9050615d41606083018561458f565b615d4e6080830184614716565b9695505050505050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206260008201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b6000615db46026836145c4565b9150615dbf82615d58565b604082019050919050565b60006020820190508181036000830152615de381615da7565b9050919050565b7f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f60008201527f7700000000000000000000000000000000000000000000000000000000000000602082015250565b6000615e466021836145c4565b9150615e5182615dea565b604082019050919050565b60006020820190508181036000830152615e7581615e39565b905091905056fea26469706673582212205e397e7cf9e77a082834432daa04d10ae5160f51bef0c3a35af487d8aceb6e2664736f6c634300080d0033

Deployed Bytecode Sourcemap

21033:15116:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26017:315;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;21761:70;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4252:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5166:169;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21340:39;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22630:64;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21113:51;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;35533:200;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;4573:108;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22359:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22319:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25197:234;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;5343:492;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22055:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4472:93;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5843:215;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22284:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21171:38;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21548:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27620:127;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;34296:155;;;;;;;;;;;;;:::i;:::-;;26340:310;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;22092:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21588:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4689:127;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;13654:148;;;;;;;;;;;;;:::i;:::-;;34503:120;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25664:144;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;21921:75;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21838:76;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;35741:191;;;;;;;;;;;;;:::i;:::-;;33749:539;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;24967:218;;;;;;;;;;;;;:::i;:::-;;13012:79;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25904:101;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;4360:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;35940:204;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;22005:41;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27164:254;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;6066:413;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4824:175;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22703:58;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22129:27;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21508:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26658:184;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;25440:215;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;26850:306;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;22438:39;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21292:35;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22242:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22394:35;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5007:151;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21252:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22204:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22166;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21425:37;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;13957:244;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;22484:24;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26017:315;13234:12;:10;:12::i;:::-;13224:22;;:6;;;;;;;;;;;:22;;;13216:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;26144:17:::1;26125:16;:36;;;;26191:17;26172:16;:36;;;;26235:16;;26219:13;:32;;;;26287:3;26270:13;;:20;;26262:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;26017:315:::0;;:::o;21761:70::-;;;;;;;;;;;;;:::o;4252:100::-;4306:13;4339:5;4332:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4252:100;:::o;5166:169::-;5249:4;5266:39;5275:12;:10;:12::i;:::-;5289:7;5298:6;5266:8;:39::i;:::-;5323:4;5316:11;;5166:169;;;;:::o;21340:39::-;;;;:::o;22630:64::-;;;;;;;;;;;;;;;;;;;;;;:::o;21113:51::-;;;:::o;35533:200::-;13234:12;:10;:12::i;:::-;13224:22;;:6;;;;;;;;;;;:22;;;13216:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;35632:9:::1;35627:99;35651:5;:12;35647:1;:16;35627:99;;;35708:6;35685:10;:20;35696:5;35702:1;35696:8;;;;;;;;:::i;:::-;;;;;;;;35685:20;;;;;;;;;;;;;;;;:29;;;;;;;;;;;;;;;;;;35665:3;;;;;:::i;:::-;;;;35627:99;;;;35533:200:::0;;:::o;4573:108::-;4634:7;4661:12;;4654:19;;4573:108;:::o;22359:28::-;;;;:::o;22319:33::-;;;;:::o;25197:234::-;13234:12;:10;:12::i;:::-;13224:22;;:6;;;;;;;;;;;:22;;;13216:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;25316:4:::1;25310;25306:1;25290:13;:11;:13::i;:::-;:17;;;;:::i;:::-;:24;;;;:::i;:::-;25289:31;;;;:::i;:::-;25279:6;:41;;25271:101;;;;;;;;;;;;:::i;:::-;;;;;;;;;25416:6;25406;:17;;;;:::i;:::-;25383:20;:40;;;;25197:234:::0;:::o;5343:492::-;5483:4;5500:36;5510:6;5518:9;5529:6;5500:9;:36::i;:::-;5549:24;5576:11;:19;5588:6;5576:19;;;;;;;;;;;;;;;:33;5596:12;:10;:12::i;:::-;5576:33;;;;;;;;;;;;;;;;5549:60;;5648:6;5628:16;:26;;5620:79;;;;;;;;;;;;:::i;:::-;;;;;;;;;5735:57;5744:6;5752:12;:10;:12::i;:::-;5785:6;5766:16;:25;5735:8;:57::i;:::-;5823:4;5816:11;;;5343:492;;;;;:::o;22055:30::-;;;;:::o;4472:93::-;4530:5;4555:2;4548:9;;4472:93;:::o;5843:215::-;5931:4;5948:80;5957:12;:10;:12::i;:::-;5971:7;6017:10;5980:11;:25;5992:12;:10;:12::i;:::-;5980:25;;;;;;;;;;;;;;;:34;6006:7;5980:34;;;;;;;;;;;;;;;;:47;;;;:::i;:::-;5948:8;:80::i;:::-;6046:4;6039:11;;5843:215;;;;:::o;22284:28::-;;;;:::o;21171:38::-;;;:::o;21548:33::-;;;;;;;;;;;;;:::o;27620:127::-;27687:4;27711:19;:28;27731:7;27711:28;;;;;;;;;;;;;;;;;;;;;;;;;27704:35;;27620:127;;;:::o;34296:155::-;13234:12;:10;:12::i;:::-;13224:22;;:6;;;;;;;;;;;:22;;;13216:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;34348:23:::1;34374:24;34392:4;34374:9;:24::i;:::-;34348:50;;34409:33;34426:15;34409:16;:33::i;:::-;34337:114;34296:155::o:0;26340:310::-;13234:12;:10;:12::i;:::-;13224:22;;:6;;;;;;;;;;;:22;;;13216:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;26463:16:::1;26445:15;:34;;;;26508:16;26490:15;:34;;;;26551:16;;26535:13;:32;;;;26603:4;26586:13;;:21;;26578:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;26340:310:::0;;:::o;22092:30::-;;;;:::o;21588:31::-;;;;;;;;;;;;;:::o;4689:127::-;4763:7;4790:9;:18;4800:7;4790:18;;;;;;;;;;;;;;;;4783:25;;4689:127;;;:::o;13654:148::-;13234:12;:10;:12::i;:::-;13224:22;;:6;;;;;;;;;;;:22;;;13216:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;13761:1:::1;13724:40;;13745:6;;;;;;;;;;;13724:40;;;;;;;;;;;;13792:1;13775:6;;:19;;;;;;;;;;;;;;;;;;13654:148::o:0;34503:120::-;34555:4;13234:12;:10;:12::i;:::-;13224:22;;:6;;;;;;;;;;;:22;;;13216:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;34588:5:::1;34571:14;;:22;;;;;;;;;;;;;;;;;;34611:4;34604:11;;34503:120:::0;:::o;25664:144::-;13234:12;:10;:12::i;:::-;13224:22;;:6;;;;;;;;;;;:22;;;13216:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;25796:4:::1;25754:31;:39;25786:6;25754:39;;;;;;;;;;;;;;;;:46;;;;;;;;;;;;;;;;;;25664:144:::0;;:::o;21921:75::-;;;;;;;;;;;;;:::o;21838:76::-;;;;;;;;;;;;;:::o;35741:191::-;13234:12;:10;:12::i;:::-;13224:22;;:6;;;;;;;;;;;:22;;;13216:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;35800:12:::1;35825:10;35817:24;;35849:21;35817:58;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;35799:76;;;35894:7;35886:38;;;;;;;;;;;;:::i;:::-;;;;;;;;;35788:144;35741:191::o:0;33749:539::-;13234:12;:10;:12::i;:::-;13224:22;;:6;;;;;;;;;;;:22;;;13216:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;33905:21:::1;33943:1;33929:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;33905:40;;33966:15;:20;;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;33956:4;33961:1;33956:7;;;;;;;;:::i;:::-;;;;;;;:32;;;;;;;;;::::0;::::1;34009:9;33999:4;34004:1;33999:7;;;;;;;;:::i;:::-;;;;;;;:19;;;;;;;;;::::0;::::1;34057:15;:66;;;34131:14;34161:1;34210:4;34229:10;;;;;;;;;;;34254:15;34057:223;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;33836:452;33749:539:::0;;:::o;24967:218::-;13234:12;:10;:12::i;:::-;13224:22;;:6;;;;;;;;;;;:22;;;13216:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;25031:13:::1;;;;;;;;;;;25030:14;25022:51;;;;;;;;;;;;:::i;:::-;;;;;;;;;25100:4;25084:13;;:20;;;;;;;;;;;;;;;;;;25129:4;25115:11;;:18;;;;;;;;;;;;;;;;;;25165:12;25144:18;:33;;;;24967:218::o:0;13012:79::-;13050:7;13077:6;;;;;;;;;;;13070:13;;13012:79;:::o;25904:101::-;13234:12;:10;:12::i;:::-;13224:22;;:6;;;;;;;;;;;:22;;;13216:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;25990:7:::1;25976:11;;:21;;;;;;;;;;;;;;;;;;25904:101:::0;:::o;4360:104::-;4416:13;4449:7;4442:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4360:104;:::o;35940:204::-;13234:12;:10;:12::i;:::-;13224:22;;:6;;;;;;;;;;;:22;;;13216:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;36063:1:::1;36034:31;;:17;:31;;::::0;36026:63:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;36119:17;36100:16;;:36;;;;;;;;;;;;;;;;;;35940:204:::0;:::o;22005:41::-;22042:4;22005:41;:::o;27164:254::-;13234:12;:10;:12::i;:::-;13224:22;;:6;;;;;;;;;;;:22;;;13216:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;27273:13:::1;27265:21;;:4;:21;;::::0;27257:99:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;27369:41;27398:4;27404:5;27369:28;:41::i;:::-;27164:254:::0;;:::o;6066:413::-;6159:4;6176:24;6203:11;:25;6215:12;:10;:12::i;:::-;6203:25;;;;;;;;;;;;;;;:34;6229:7;6203:34;;;;;;;;;;;;;;;;6176:61;;6276:15;6256:16;:35;;6248:85;;;;;;;;;;;;:::i;:::-;;;;;;;;;6369:67;6378:12;:10;:12::i;:::-;6392:7;6420:15;6401:16;:34;6369:8;:67::i;:::-;6467:4;6460:11;;;6066:413;;;;:::o;4824:175::-;4910:4;4927:42;4937:12;:10;:12::i;:::-;4951:9;4962:6;4927:9;:42::i;:::-;4987:4;4980:11;;4824:175;;;;:::o;22703:58::-;;;;;;;;;;;;;;;;;;;;;;:::o;22129:27::-;;;;:::o;21508:33::-;;;;;;;;;;;;;:::o;26658:184::-;13234:12;:10;:12::i;:::-;13224:22;;:6;;;;;;;;;;;:22;;;13216:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;26774:8:::1;26743:19;:28;26763:7;26743:28;;;;;;;;;;;;;;;;:39;;;;;;;;;;;;;;;;;;26816:7;26800:34;;;26825:8;26800:34;;;;;;:::i;:::-;;;;;;;;26658:184:::0;;:::o;25440:215::-;13234:12;:10;:12::i;:::-;13224:22;;:6;;;;;;;;;;;:22;;;13216:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;25562:4:::1;25556;25552:1;25536:13;:11;:13::i;:::-;:17;;;;:::i;:::-;:24;;;;:::i;:::-;25535:31;;;;:::i;:::-;25525:6;:41;;25517:90;;;;;;;;;;;;:::i;:::-;;;;;;;;;25640:6;25630;:17;;;;:::i;:::-;25618:9;:29;;;;25440:215:::0;:::o;26850:306::-;13234:12;:10;:12::i;:::-;13224:22;;:6;;;;;;;;;;;:22;;;13216:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;26969:9:::1;26965:115;26988:8;;:15;;26984:1;:19;26965:115;;;27060:8;27025:19;:32;27045:8;;27054:1;27045:11;;;;;;;:::i;:::-;;;;;;;;;;;;;;;:::i;:::-;27025:32;;;;;;;;;;;;;;;;:43;;;;;;;;;;;;;;;;;;27005:3;;;;;:::i;:::-;;;;26965:115;;;;27097:51;27129:8;;27139;27097:51;;;;;;;;:::i;:::-;;;;;;;;26850:306:::0;;;:::o;22438:39::-;;;;;;;;;;;;;:::o;21292:35::-;;;;:::o;22242:28::-;;;;:::o;22394:35::-;;;;:::o;5007:151::-;5096:7;5123:11;:18;5135:5;5123:18;;;;;;;;;;;;;;;:27;5142:7;5123:27;;;;;;;;;;;;;;;;5116:34;;5007:151;;;;:::o;21252:33::-;;;;:::o;22204:31::-;;;;:::o;22166:::-;;;;:::o;21425:37::-;;;;:::o;13957:244::-;13234:12;:10;:12::i;:::-;13224:22;;:6;;;;;;;;;;;:22;;;13216:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;14066:1:::1;14046:22;;:8;:22;;::::0;14038:73:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;14156:8;14127:38;;14148:6;;;;;;;;;;;14127:38;;;;;;;;;;;;14185:8;14176:6;;:17;;;;;;;;;;;;;;;;;;13957:244:::0;:::o;22484:24::-;;;;:::o;260:98::-;313:7;340:10;333:17;;260:98;:::o;7406:380::-;7559:1;7542:19;;:5;:19;;;7534:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;7640:1;7621:21;;:7;:21;;;7613:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;7724:6;7694:11;:18;7706:5;7694:18;;;;;;;;;;;;;;;:27;7713:7;7694:27;;;;;;;;;;;;;;;:36;;;;7762:7;7746:32;;7755:5;7746:32;;;7771:6;7746:32;;;;;;:::i;:::-;;;;;;;;7406:380;;;:::o;27759:4294::-;27907:1;27891:18;;:4;:18;;;27883:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;27984:1;27970:16;;:2;:16;;;27962:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;28046:10;:14;28057:2;28046:14;;;;;;;;;;;;;;;;;;;;;;;;;28045:15;:36;;;;;28065:10;:16;28076:4;28065:16;;;;;;;;;;;;;;;;;;;;;;;;;28064:17;28045:36;28037:98;;;;;;;;;;;;:::i;:::-;;;;;;;;;28170:1;28160:6;:11;28157:92;;28188:28;28204:4;28210:2;28214:1;28188:15;:28::i;:::-;28231:7;;28157:92;28273:13;;;;;;;;;;;28269:136;;28310:19;:25;28330:4;28310:25;;;;;;;;;;;;;;;;;;;;;;;;;:52;;;;28339:19;:23;28359:2;28339:23;;;;;;;;;;;;;;;;;;;;;;;;;28310:52;28302:91;;;;;;;;;;;;:::i;:::-;;;;;;;;;28269:136;28426:14;;;;;;;;;;;28423:1825;;;28486:7;:5;:7::i;:::-;28478:15;;:4;:15;;;;:49;;;;;28520:7;:5;:7::i;:::-;28514:13;;:2;:13;;;;28478:49;:86;;;;;28562:1;28548:16;;:2;:16;;;;28478:86;:128;;;;;28599:6;28585:21;;:2;:21;;;;28478:128;:158;;;;;28628:8;;;;;;;;;;;28627:9;28478:158;28456:1781;;;28674:13;;;;;;;;;;;28670:148;;28719:19;:25;28739:4;28719:25;;;;;;;;;;;;;;;;;;;;;;;;;:52;;;;28748:19;:23;28768:2;28748:23;;;;;;;;;;;;;;;;;;;;;;;;;28719:52;28711:87;;;;;;;;;;;;:::i;:::-;;;;;;;;;28670:148;28977:20;;;;;;;;;;;28973:423;;;29031:7;:5;:7::i;:::-;29025:13;;:2;:13;;;;:47;;;;;29056:15;29042:30;;:2;:30;;;;29025:47;:79;;;;;29090:13;29076:28;;:2;:28;;;;29025:79;29021:356;;;29182:12;29140:28;:39;29169:9;29140:39;;;;;;;;;;;;;;;;:54;29132:140;;;;;;;;;;;;:::i;:::-;;;;;;;;;29341:12;29299:28;:39;29328:9;29299:39;;;;;;;;;;;;;;;:54;;;;29021:356;28973:423;29449:25;:31;29475:4;29449:31;;;;;;;;;;;;;;;;;;;;;;;;;:71;;;;;29485:31;:35;29517:2;29485:35;;;;;;;;;;;;;;;;;;;;;;;;;29484:36;29449:71;29445:777;;;29588:6;29567:20;;:27;;;;:::i;:::-;29557:6;:37;;29549:103;;;;;;;;;;;;:::i;:::-;;;;;;;;;29713:9;;29696:13;29706:2;29696:9;:13::i;:::-;29687:6;:22;;;;:::i;:::-;:35;;29679:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;29445:777;;;29825:25;:29;29851:2;29825:29;;;;;;;;;;;;;;;;;;;;;;;;;:71;;;;;29859:31;:37;29891:4;29859:37;;;;;;;;;;;;;;;;;;;;;;;;;29858:38;29825:71;29821:401;;;29964:6;29943:20;;:27;;;;:::i;:::-;29933:6;:37;;29925:104;;;;;;;;;;;;:::i;:::-;;;;;;;;;29821:401;;;30076:31;:35;30108:2;30076:35;;;;;;;;;;;;;;;;;;;;;;;;;30072:150;;30169:9;;30152:13;30162:2;30152:9;:13::i;:::-;30143:6;:22;;;;:::i;:::-;:35;;30135:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;30072:150;29821:401;29445:777;28456:1781;28423:1825;30256:28;30287:24;30305:4;30287:9;:24::i;:::-;30256:55;;30322:12;30361:18;;30337:20;:42;;30322:57;;30410:7;:35;;;;;30434:11;;;;;;;;;;;30410:35;:61;;;;;30463:8;;;;;;;;;;;30462:9;30410:61;:110;;;;;30489:25;:31;30515:4;30489:31;;;;;;;;;;;;;;;;;;;;;;;;;30488:32;30410:110;:153;;;;;30538:19;:25;30558:4;30538:25;;;;;;;;;;;;;;;;;;;;;;;;;30537:26;30410:153;:194;;;;;30581:19;:23;30601:2;30581:23;;;;;;;;;;;;;;;;;;;;;;;;;30580:24;30410:194;30392:322;;;30642:4;30631:8;;:15;;;;;;;;;;;;;;;;;;30661:10;:8;:10::i;:::-;30697:5;30686:8;;:16;;;;;;;;;;;;;;;;;;30392:322;30726:12;30742:8;;;;;;;;;;;30741:9;30726:24;;30851:19;:25;30871:4;30851:25;;;;;;;;;;;;;;;;;;;;;;;;;:52;;;;30880:19;:23;30900:2;30880:23;;;;;;;;;;;;;;;;;;;;;;;;;30851:52;30848:99;;;30930:5;30920:15;;30848:99;30967:12;31058:7;31055:943;;;31147:25;:29;31173:2;31147:29;;;;;;;;;;;;;;;;;;;;;;;;;:50;;;;;31196:1;31180:13;;:17;31147:50;31143:698;;;31224:41;22042:4;31224:25;31235:13;;31224:6;:10;;:25;;;;:::i;:::-;:29;;:41;;;;:::i;:::-;31217:48;;31301:4;31284:13;;:21;;;;;;;:::i;:::-;;;;;;;;31372:13;;31353:16;;31346:4;:23;;;;:::i;:::-;:39;;;;:::i;:::-;31324:18;;:61;;;;;;;:::i;:::-;;;;;;;;31447:13;;31428:16;;31421:4;:23;;;;:::i;:::-;:39;;;;:::i;:::-;31404:13;;:56;;;;;;;:::i;:::-;;;;;;;;31143:698;;;31535:25;:31;31561:4;31535:31;;;;;;;;;;;;;;;;;;;;;;;;;31532:309;;;31594:40;22042:4;31594:24;31605:12;;31594:6;:10;;:24;;;;:::i;:::-;:28;;:40;;;;:::i;:::-;31587:47;;31670:4;31653:13;;:21;;;;;;;:::i;:::-;;;;;;;;31740:12;;31722:15;;31715:4;:22;;;;:::i;:::-;:37;;;;:::i;:::-;31693:18;;:59;;;;;;;:::i;:::-;;;;;;;;31813:12;;31795:15;;31788:4;:22;;;;:::i;:::-;:37;;;;:::i;:::-;31771:13;;:54;;;;;;;:::i;:::-;;;;;;;;31532:309;31143:698;31867:1;31860:4;:8;31857:93;;;31892:42;31908:4;31922;31929;31892:15;:42::i;:::-;31857:93;31982:4;31972:14;;;;;:::i;:::-;;;31055:943;32010:33;32026:4;32032:2;32036:6;32010:15;:33::i;:::-;27872:4181;;;;27759:4294;;;;:::o;32065:601::-;32193:21;32231:1;32217:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;32193:40;;32262:4;32244;32249:1;32244:7;;;;;;;;:::i;:::-;;;;;;;:23;;;;;;;;;;;32288:15;:20;;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;32278:4;32283:1;32278:7;;;;;;;;:::i;:::-;;;;;;;:32;;;;;;;;;;;32323:62;32340:4;32355:15;32373:11;32323:8;:62::i;:::-;32424:15;:66;;;32505:11;32531:1;32575:4;32602;32622:15;32424:224;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;32120:546;32065:601;:::o;27426:186::-;27543:5;27509:25;:31;27535:4;27509:31;;;;;;;;;;;;;;;;:39;;;;;;;;;;;;;;;;;;27598:5;27564:40;;27592:4;27564:40;;;;;;;;;;;;27426:186;;:::o;6487:614::-;6645:1;6627:20;;:6;:20;;;6619:70;;;;;;;;;;;;:::i;:::-;;;;;;;;;6729:1;6708:23;;:9;:23;;;6700:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;6784:21;6808:9;:17;6818:6;6808:17;;;;;;;;;;;;;;;;6784:41;;6861:6;6844:13;:23;;6836:74;;;;;;;;;;;;:::i;:::-;;;;;;;;;6982:6;6966:13;:22;6946:9;:17;6956:6;6946:17;;;;;;;;;;;;;;;:42;;;;7034:6;7010:9;:20;7020:9;7010:20;;;;;;;;;;;;;;;;:30;;;;;;;:::i;:::-;;;;;;;;7075:9;7058:35;;7067:6;7058:35;;;7086:6;7058:35;;;;;;:::i;:::-;;;;;;;;6608:493;6487:614;;;:::o;34631:894::-;34670:23;34696:24;34714:4;34696:9;:24::i;:::-;34670:50;;34731:25;34775:18;;34759:13;;:34;;;;:::i;:::-;34731:62;;34804:12;34859:1;34840:15;:20;:46;;;;34885:1;34864:17;:22;34840:46;34837:60;;;34889:7;;;;;34837:60;34917:26;34946:15;34917:44;;34972:36;34989:18;34972:16;:36::i;:::-;35022:18;35043:21;35022:42;;35077:18;35098:52;35132:17;35098:29;35113:13;;35098:10;:14;;:29;;;;:::i;:::-;:33;;:52;;;;:::i;:::-;35077:73;;35208:45;35224:10;35236:16;;;;;;;;;;;35208:15;:45::i;:::-;35298:10;35274:20;;:34;;;;;;;:::i;:::-;;;;;;;;35361:15;;;;;;;;;;;35353:29;;35390:21;35353:63;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;35340:76;;;;;35445:1;35429:13;:17;;;;35478:1;35457:18;:22;;;;35506:1;35490:13;:17;;;;34659:866;;;;;;34631:894;:::o;9410:471::-;9468:7;9718:1;9713;:6;9709:47;;9743:1;9736:8;;;;9709:47;9768:9;9784:1;9780;:5;;;;:::i;:::-;9768:17;;9813:1;9808;9804;:5;;;;:::i;:::-;:10;9796:56;;;;;;;;;;;;:::i;:::-;;;;;;;;;9872:1;9865:8;;;9410:471;;;;;:::o;10357:132::-;10415:7;10442:39;10446:1;10449;10442:39;;;;;;;;;;;;;;;;;:3;:39::i;:::-;10435:46;;10357:132;;;;:::o;33208:529::-;33354:21;33392:1;33378:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;33354:40;;33415:15;:20;;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;33405:4;33410:1;33405:7;;;;;;;;:::i;:::-;;;;;;;:32;;;;;;;;;;;33458:9;33448:4;33453:1;33448:7;;;;;;;;:::i;:::-;;;;;;;:19;;;;;;;;;;;33506:15;:66;;;33580:14;33610:1;33659:4;33678:10;;;;;;;;;;;33703:15;33506:223;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;33285:452;33208:529;;:::o;10985:278::-;11071:7;11103:1;11099;:5;11106:12;11091:28;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;11130:9;11146:1;11142;:5;;;;:::i;:::-;11130:17;;11254:1;11247:8;;;10985:278;;;;;:::o;7:75:1:-;40:6;73:2;67:9;57:19;;7:75;:::o;88:117::-;197:1;194;187:12;211:117;320:1;317;310:12;334:77;371:7;400:5;389:16;;334:77;;;:::o;417:122::-;490:24;508:5;490:24;:::i;:::-;483:5;480:35;470:63;;529:1;526;519:12;470:63;417:122;:::o;545:139::-;591:5;629:6;616:20;607:29;;645:33;672:5;645:33;:::i;:::-;545:139;;;;:::o;690:474::-;758:6;766;815:2;803:9;794:7;790:23;786:32;783:119;;;821:79;;:::i;:::-;783:119;941:1;966:53;1011:7;1002:6;991:9;987:22;966:53;:::i;:::-;956:63;;912:117;1068:2;1094:53;1139:7;1130:6;1119:9;1115:22;1094:53;:::i;:::-;1084:63;;1039:118;690:474;;;;;:::o;1170:126::-;1207:7;1247:42;1240:5;1236:54;1225:65;;1170:126;;;:::o;1302:96::-;1339:7;1368:24;1386:5;1368:24;:::i;:::-;1357:35;;1302:96;;;:::o;1404:118::-;1491:24;1509:5;1491:24;:::i;:::-;1486:3;1479:37;1404:118;;:::o;1528:222::-;1621:4;1659:2;1648:9;1644:18;1636:26;;1672:71;1740:1;1729:9;1725:17;1716:6;1672:71;:::i;:::-;1528:222;;;;:::o;1756:99::-;1808:6;1842:5;1836:12;1826:22;;1756:99;;;:::o;1861:169::-;1945:11;1979:6;1974:3;1967:19;2019:4;2014:3;2010:14;1995:29;;1861:169;;;;:::o;2036:307::-;2104:1;2114:113;2128:6;2125:1;2122:13;2114:113;;;2213:1;2208:3;2204:11;2198:18;2194:1;2189:3;2185:11;2178:39;2150:2;2147:1;2143:10;2138:15;;2114:113;;;2245:6;2242:1;2239:13;2236:101;;;2325:1;2316:6;2311:3;2307:16;2300:27;2236:101;2085:258;2036:307;;;:::o;2349:102::-;2390:6;2441:2;2437:7;2432:2;2425:5;2421:14;2417:28;2407:38;;2349:102;;;:::o;2457:364::-;2545:3;2573:39;2606:5;2573:39;:::i;:::-;2628:71;2692:6;2687:3;2628:71;:::i;:::-;2621:78;;2708:52;2753:6;2748:3;2741:4;2734:5;2730:16;2708:52;:::i;:::-;2785:29;2807:6;2785:29;:::i;:::-;2780:3;2776:39;2769:46;;2549:272;2457:364;;;;:::o;2827:313::-;2940:4;2978:2;2967:9;2963:18;2955:26;;3027:9;3021:4;3017:20;3013:1;3002:9;2998:17;2991:47;3055:78;3128:4;3119:6;3055:78;:::i;:::-;3047:86;;2827:313;;;;:::o;3146:122::-;3219:24;3237:5;3219:24;:::i;:::-;3212:5;3209:35;3199:63;;3258:1;3255;3248:12;3199:63;3146:122;:::o;3274:139::-;3320:5;3358:6;3345:20;3336:29;;3374:33;3401:5;3374:33;:::i;:::-;3274:139;;;;:::o;3419:474::-;3487:6;3495;3544:2;3532:9;3523:7;3519:23;3515:32;3512:119;;;3550:79;;:::i;:::-;3512:119;3670:1;3695:53;3740:7;3731:6;3720:9;3716:22;3695:53;:::i;:::-;3685:63;;3641:117;3797:2;3823:53;3868:7;3859:6;3848:9;3844:22;3823:53;:::i;:::-;3813:63;;3768:118;3419:474;;;;;:::o;3899:90::-;3933:7;3976:5;3969:13;3962:21;3951:32;;3899:90;;;:::o;3995:109::-;4076:21;4091:5;4076:21;:::i;:::-;4071:3;4064:34;3995:109;;:::o;4110:210::-;4197:4;4235:2;4224:9;4220:18;4212:26;;4248:65;4310:1;4299:9;4295:17;4286:6;4248:65;:::i;:::-;4110:210;;;;:::o;4326:118::-;4413:24;4431:5;4413:24;:::i;:::-;4408:3;4401:37;4326:118;;:::o;4450:222::-;4543:4;4581:2;4570:9;4566:18;4558:26;;4594:71;4662:1;4651:9;4647:17;4638:6;4594:71;:::i;:::-;4450:222;;;;:::o;4678:329::-;4737:6;4786:2;4774:9;4765:7;4761:23;4757:32;4754:119;;;4792:79;;:::i;:::-;4754:119;4912:1;4937:53;4982:7;4973:6;4962:9;4958:22;4937:53;:::i;:::-;4927:63;;4883:117;4678:329;;;;:::o;5013:60::-;5041:3;5062:5;5055:12;;5013:60;;;:::o;5079:142::-;5129:9;5162:53;5180:34;5189:24;5207:5;5189:24;:::i;:::-;5180:34;:::i;:::-;5162:53;:::i;:::-;5149:66;;5079:142;;;:::o;5227:126::-;5277:9;5310:37;5341:5;5310:37;:::i;:::-;5297:50;;5227:126;;;:::o;5359:153::-;5436:9;5469:37;5500:5;5469:37;:::i;:::-;5456:50;;5359:153;;;:::o;5518:185::-;5632:64;5690:5;5632:64;:::i;:::-;5627:3;5620:77;5518:185;;:::o;5709:276::-;5829:4;5867:2;5856:9;5852:18;5844:26;;5880:98;5975:1;5964:9;5960:17;5951:6;5880:98;:::i;:::-;5709:276;;;;:::o;5991:117::-;6100:1;6097;6090:12;6114:180;6162:77;6159:1;6152:88;6259:4;6256:1;6249:15;6283:4;6280:1;6273:15;6300:281;6383:27;6405:4;6383:27;:::i;:::-;6375:6;6371:40;6513:6;6501:10;6498:22;6477:18;6465:10;6462:34;6459:62;6456:88;;;6524:18;;:::i;:::-;6456:88;6564:10;6560:2;6553:22;6343:238;6300:281;;:::o;6587:129::-;6621:6;6648:20;;:::i;:::-;6638:30;;6677:33;6705:4;6697:6;6677:33;:::i;:::-;6587:129;;;:::o;6722:311::-;6799:4;6889:18;6881:6;6878:30;6875:56;;;6911:18;;:::i;:::-;6875:56;6961:4;6953:6;6949:17;6941:25;;7021:4;7015;7011:15;7003:23;;6722:311;;;:::o;7039:117::-;7148:1;7145;7138:12;7179:710;7275:5;7300:81;7316:64;7373:6;7316:64;:::i;:::-;7300:81;:::i;:::-;7291:90;;7401:5;7430:6;7423:5;7416:21;7464:4;7457:5;7453:16;7446:23;;7517:4;7509:6;7505:17;7497:6;7493:30;7546:3;7538:6;7535:15;7532:122;;;7565:79;;:::i;:::-;7532:122;7680:6;7663:220;7697:6;7692:3;7689:15;7663:220;;;7772:3;7801:37;7834:3;7822:10;7801:37;:::i;:::-;7796:3;7789:50;7868:4;7863:3;7859:14;7852:21;;7739:144;7723:4;7718:3;7714:14;7707:21;;7663:220;;;7667:21;7281:608;;7179:710;;;;;:::o;7912:370::-;7983:5;8032:3;8025:4;8017:6;8013:17;8009:27;7999:122;;8040:79;;:::i;:::-;7999:122;8157:6;8144:20;8182:94;8272:3;8264:6;8257:4;8249:6;8245:17;8182:94;:::i;:::-;8173:103;;7989:293;7912:370;;;;:::o;8288:116::-;8358:21;8373:5;8358:21;:::i;:::-;8351:5;8348:32;8338:60;;8394:1;8391;8384:12;8338:60;8288:116;:::o;8410:133::-;8453:5;8491:6;8478:20;8469:29;;8507:30;8531:5;8507:30;:::i;:::-;8410:133;;;;:::o;8549:678::-;8639:6;8647;8696:2;8684:9;8675:7;8671:23;8667:32;8664:119;;;8702:79;;:::i;:::-;8664:119;8850:1;8839:9;8835:17;8822:31;8880:18;8872:6;8869:30;8866:117;;;8902:79;;:::i;:::-;8866:117;9007:78;9077:7;9068:6;9057:9;9053:22;9007:78;:::i;:::-;8997:88;;8793:302;9134:2;9160:50;9202:7;9193:6;9182:9;9178:22;9160:50;:::i;:::-;9150:60;;9105:115;8549:678;;;;;:::o;9233:329::-;9292:6;9341:2;9329:9;9320:7;9316:23;9312:32;9309:119;;;9347:79;;:::i;:::-;9309:119;9467:1;9492:53;9537:7;9528:6;9517:9;9513:22;9492:53;:::i;:::-;9482:63;;9438:117;9233:329;;;;:::o;9568:619::-;9645:6;9653;9661;9710:2;9698:9;9689:7;9685:23;9681:32;9678:119;;;9716:79;;:::i;:::-;9678:119;9836:1;9861:53;9906:7;9897:6;9886:9;9882:22;9861:53;:::i;:::-;9851:63;;9807:117;9963:2;9989:53;10034:7;10025:6;10014:9;10010:22;9989:53;:::i;:::-;9979:63;;9934:118;10091:2;10117:53;10162:7;10153:6;10142:9;10138:22;10117:53;:::i;:::-;10107:63;;10062:118;9568:619;;;;;:::o;10193:86::-;10228:7;10268:4;10261:5;10257:16;10246:27;;10193:86;;;:::o;10285:112::-;10368:22;10384:5;10368:22;:::i;:::-;10363:3;10356:35;10285:112;;:::o;10403:214::-;10492:4;10530:2;10519:9;10515:18;10507:26;;10543:67;10607:1;10596:9;10592:17;10583:6;10543:67;:::i;:::-;10403:214;;;;:::o;10623:468::-;10688:6;10696;10745:2;10733:9;10724:7;10720:23;10716:32;10713:119;;;10751:79;;:::i;:::-;10713:119;10871:1;10896:53;10941:7;10932:6;10921:9;10917:22;10896:53;:::i;:::-;10886:63;;10842:117;10998:2;11024:50;11066:7;11057:6;11046:9;11042:22;11024:50;:::i;:::-;11014:60;;10969:115;10623:468;;;;;:::o;11097:474::-;11165:6;11173;11222:2;11210:9;11201:7;11197:23;11193:32;11190:119;;;11228:79;;:::i;:::-;11190:119;11348:1;11373:53;11418:7;11409:6;11398:9;11394:22;11373:53;:::i;:::-;11363:63;;11319:117;11475:2;11501:53;11546:7;11537:6;11526:9;11522:22;11501:53;:::i;:::-;11491:63;;11446:118;11097:474;;;;;:::o;11577:323::-;11633:6;11682:2;11670:9;11661:7;11657:23;11653:32;11650:119;;;11688:79;;:::i;:::-;11650:119;11808:1;11833:50;11875:7;11866:6;11855:9;11851:22;11833:50;:::i;:::-;11823:60;;11779:114;11577:323;;;;:::o;11906:117::-;12015:1;12012;12005:12;12046:568;12119:8;12129:6;12179:3;12172:4;12164:6;12160:17;12156:27;12146:122;;12187:79;;:::i;:::-;12146:122;12300:6;12287:20;12277:30;;12330:18;12322:6;12319:30;12316:117;;;12352:79;;:::i;:::-;12316:117;12466:4;12458:6;12454:17;12442:29;;12520:3;12512:4;12504:6;12500:17;12490:8;12486:32;12483:41;12480:128;;;12527:79;;:::i;:::-;12480:128;12046:568;;;;;:::o;12620:698::-;12712:6;12720;12728;12777:2;12765:9;12756:7;12752:23;12748:32;12745:119;;;12783:79;;:::i;:::-;12745:119;12931:1;12920:9;12916:17;12903:31;12961:18;12953:6;12950:30;12947:117;;;12983:79;;:::i;:::-;12947:117;13096:80;13168:7;13159:6;13148:9;13144:22;13096:80;:::i;:::-;13078:98;;;;12874:312;13225:2;13251:50;13293:7;13284:6;13273:9;13269:22;13251:50;:::i;:::-;13241:60;;13196:115;12620:698;;;;;:::o;13324:474::-;13392:6;13400;13449:2;13437:9;13428:7;13424:23;13420:32;13417:119;;;13455:79;;:::i;:::-;13417:119;13575:1;13600:53;13645:7;13636:6;13625:9;13621:22;13600:53;:::i;:::-;13590:63;;13546:117;13702:2;13728:53;13773:7;13764:6;13753:9;13749:22;13728:53;:::i;:::-;13718:63;;13673:118;13324:474;;;;;:::o;13804:182::-;13944:34;13940:1;13932:6;13928:14;13921:58;13804:182;:::o;13992:366::-;14134:3;14155:67;14219:2;14214:3;14155:67;:::i;:::-;14148:74;;14231:93;14320:3;14231:93;:::i;:::-;14349:2;14344:3;14340:12;14333:19;;13992:366;;;:::o;14364:419::-;14530:4;14568:2;14557:9;14553:18;14545:26;;14617:9;14611:4;14607:20;14603:1;14592:9;14588:17;14581:47;14645:131;14771:4;14645:131;:::i;:::-;14637:139;;14364:419;;;:::o;14789:179::-;14929:31;14925:1;14917:6;14913:14;14906:55;14789:179;:::o;14974:366::-;15116:3;15137:67;15201:2;15196:3;15137:67;:::i;:::-;15130:74;;15213:93;15302:3;15213:93;:::i;:::-;15331:2;15326:3;15322:12;15315:19;;14974:366;;;:::o;15346:419::-;15512:4;15550:2;15539:9;15535:18;15527:26;;15599:9;15593:4;15589:20;15585:1;15574:9;15570:17;15563:47;15627:131;15753:4;15627:131;:::i;:::-;15619:139;;15346:419;;;:::o;15771:180::-;15819:77;15816:1;15809:88;15916:4;15913:1;15906:15;15940:4;15937:1;15930:15;15957:320;16001:6;16038:1;16032:4;16028:12;16018:22;;16085:1;16079:4;16075:12;16106:18;16096:81;;16162:4;16154:6;16150:17;16140:27;;16096:81;16224:2;16216:6;16213:14;16193:18;16190:38;16187:84;;16243:18;;:::i;:::-;16187:84;16008:269;15957:320;;;:::o;16283:180::-;16331:77;16328:1;16321:88;16428:4;16425:1;16418:15;16452:4;16449:1;16442:15;16469:180;16517:77;16514:1;16507:88;16614:4;16611:1;16604:15;16638:4;16635:1;16628:15;16655:233;16694:3;16717:24;16735:5;16717:24;:::i;:::-;16708:33;;16763:66;16756:5;16753:77;16750:103;;16833:18;;:::i;:::-;16750:103;16880:1;16873:5;16869:13;16862:20;;16655:233;;;:::o;16894:348::-;16934:7;16957:20;16975:1;16957:20;:::i;:::-;16952:25;;16991:20;17009:1;16991:20;:::i;:::-;16986:25;;17179:1;17111:66;17107:74;17104:1;17101:81;17096:1;17089:9;17082:17;17078:105;17075:131;;;17186:18;;:::i;:::-;17075:131;17234:1;17231;17227:9;17216:20;;16894:348;;;;:::o;17248:180::-;17296:77;17293:1;17286:88;17393:4;17390:1;17383:15;17417:4;17414:1;17407:15;17434:185;17474:1;17491:20;17509:1;17491:20;:::i;:::-;17486:25;;17525:20;17543:1;17525:20;:::i;:::-;17520:25;;17564:1;17554:35;;17569:18;;:::i;:::-;17554:35;17611:1;17608;17604:9;17599:14;;17434:185;;;;:::o;17625:234::-;17765:34;17761:1;17753:6;17749:14;17742:58;17834:17;17829:2;17821:6;17817:15;17810:42;17625:234;:::o;17865:366::-;18007:3;18028:67;18092:2;18087:3;18028:67;:::i;:::-;18021:74;;18104:93;18193:3;18104:93;:::i;:::-;18222:2;18217:3;18213:12;18206:19;;17865:366;;;:::o;18237:419::-;18403:4;18441:2;18430:9;18426:18;18418:26;;18490:9;18484:4;18480:20;18476:1;18465:9;18461:17;18454:47;18518:131;18644:4;18518:131;:::i;:::-;18510:139;;18237:419;;;:::o;18662:227::-;18802:34;18798:1;18790:6;18786:14;18779:58;18871:10;18866:2;18858:6;18854:15;18847:35;18662:227;:::o;18895:366::-;19037:3;19058:67;19122:2;19117:3;19058:67;:::i;:::-;19051:74;;19134:93;19223:3;19134:93;:::i;:::-;19252:2;19247:3;19243:12;19236:19;;18895:366;;;:::o;19267:419::-;19433:4;19471:2;19460:9;19456:18;19448:26;;19520:9;19514:4;19510:20;19506:1;19495:9;19491:17;19484:47;19548:131;19674:4;19548:131;:::i;:::-;19540:139;;19267:419;;;:::o;19692:305::-;19732:3;19751:20;19769:1;19751:20;:::i;:::-;19746:25;;19785:20;19803:1;19785:20;:::i;:::-;19780:25;;19939:1;19871:66;19867:74;19864:1;19861:81;19858:107;;;19945:18;;:::i;:::-;19858:107;19989:1;19986;19982:9;19975:16;;19692:305;;;;:::o;20003:180::-;20143:32;20139:1;20131:6;20127:14;20120:56;20003:180;:::o;20189:366::-;20331:3;20352:67;20416:2;20411:3;20352:67;:::i;:::-;20345:74;;20428:93;20517:3;20428:93;:::i;:::-;20546:2;20541:3;20537:12;20530:19;;20189:366;;;:::o;20561:419::-;20727:4;20765:2;20754:9;20750:18;20742:26;;20814:9;20808:4;20804:20;20800:1;20789:9;20785:17;20778:47;20842:131;20968:4;20842:131;:::i;:::-;20834:139;;20561:419;;;:::o;20986:147::-;21087:11;21124:3;21109:18;;20986:147;;;;:::o;21139:114::-;;:::o;21259:398::-;21418:3;21439:83;21520:1;21515:3;21439:83;:::i;:::-;21432:90;;21531:93;21620:3;21531:93;:::i;:::-;21649:1;21644:3;21640:11;21633:18;;21259:398;;;:::o;21663:379::-;21847:3;21869:147;22012:3;21869:147;:::i;:::-;21862:154;;22033:3;22026:10;;21663:379;;;:::o;22048:168::-;22188:20;22184:1;22176:6;22172:14;22165:44;22048:168;:::o;22222:366::-;22364:3;22385:67;22449:2;22444:3;22385:67;:::i;:::-;22378:74;;22461:93;22550:3;22461:93;:::i;:::-;22579:2;22574:3;22570:12;22563:19;;22222:366;;;:::o;22594:419::-;22760:4;22798:2;22787:9;22783:18;22775:26;;22847:9;22841:4;22837:20;22833:1;22822:9;22818:17;22811:47;22875:131;23001:4;22875:131;:::i;:::-;22867:139;;22594:419;;;:::o;23019:143::-;23076:5;23107:6;23101:13;23092:22;;23123:33;23150:5;23123:33;:::i;:::-;23019:143;;;;:::o;23168:351::-;23238:6;23287:2;23275:9;23266:7;23262:23;23258:32;23255:119;;;23293:79;;:::i;:::-;23255:119;23413:1;23438:64;23494:7;23485:6;23474:9;23470:22;23438:64;:::i;:::-;23428:74;;23384:128;23168:351;;;;:::o;23525:85::-;23570:7;23599:5;23588:16;;23525:85;;;:::o;23616:158::-;23674:9;23707:61;23725:42;23734:32;23760:5;23734:32;:::i;:::-;23725:42;:::i;:::-;23707:61;:::i;:::-;23694:74;;23616:158;;;:::o;23780:147::-;23875:45;23914:5;23875:45;:::i;:::-;23870:3;23863:58;23780:147;;:::o;23933:114::-;24000:6;24034:5;24028:12;24018:22;;23933:114;;;:::o;24053:184::-;24152:11;24186:6;24181:3;24174:19;24226:4;24221:3;24217:14;24202:29;;24053:184;;;;:::o;24243:132::-;24310:4;24333:3;24325:11;;24363:4;24358:3;24354:14;24346:22;;24243:132;;;:::o;24381:108::-;24458:24;24476:5;24458:24;:::i;:::-;24453:3;24446:37;24381:108;;:::o;24495:179::-;24564:10;24585:46;24627:3;24619:6;24585:46;:::i;:::-;24663:4;24658:3;24654:14;24640:28;;24495:179;;;;:::o;24680:113::-;24750:4;24782;24777:3;24773:14;24765:22;;24680:113;;;:::o;24829:732::-;24948:3;24977:54;25025:5;24977:54;:::i;:::-;25047:86;25126:6;25121:3;25047:86;:::i;:::-;25040:93;;25157:56;25207:5;25157:56;:::i;:::-;25236:7;25267:1;25252:284;25277:6;25274:1;25271:13;25252:284;;;25353:6;25347:13;25380:63;25439:3;25424:13;25380:63;:::i;:::-;25373:70;;25466:60;25519:6;25466:60;:::i;:::-;25456:70;;25312:224;25299:1;25296;25292:9;25287:14;;25252:284;;;25256:14;25552:3;25545:10;;24953:608;;;24829:732;;;;:::o;25567:720::-;25802:4;25840:3;25829:9;25825:19;25817:27;;25854:79;25930:1;25919:9;25915:17;25906:6;25854:79;:::i;:::-;25980:9;25974:4;25970:20;25965:2;25954:9;25950:18;25943:48;26008:108;26111:4;26102:6;26008:108;:::i;:::-;26000:116;;26126:72;26194:2;26183:9;26179:18;26170:6;26126:72;:::i;:::-;26208;26276:2;26265:9;26261:18;26252:6;26208:72;:::i;:::-;25567:720;;;;;;;:::o;26293:174::-;26433:26;26429:1;26421:6;26417:14;26410:50;26293:174;:::o;26473:366::-;26615:3;26636:67;26700:2;26695:3;26636:67;:::i;:::-;26629:74;;26712:93;26801:3;26712:93;:::i;:::-;26830:2;26825:3;26821:12;26814:19;;26473:366;;;:::o;26845:419::-;27011:4;27049:2;27038:9;27034:18;27026:26;;27098:9;27092:4;27088:20;27084:1;27073:9;27069:17;27062:47;27126:131;27252:4;27126:131;:::i;:::-;27118:139;;26845:419;;;:::o;27270:169::-;27410:21;27406:1;27398:6;27394:14;27387:45;27270:169;:::o;27445:366::-;27587:3;27608:67;27672:2;27667:3;27608:67;:::i;:::-;27601:74;;27684:93;27773:3;27684:93;:::i;:::-;27802:2;27797:3;27793:12;27786:19;;27445:366;;;:::o;27817:419::-;27983:4;28021:2;28010:9;28006:18;27998:26;;28070:9;28064:4;28060:20;28056:1;28045:9;28041:17;28034:47;28098:131;28224:4;28098:131;:::i;:::-;28090:139;;27817:419;;;:::o;28242:289::-;28382:34;28378:1;28370:6;28366:14;28359:58;28451:34;28446:2;28438:6;28434:15;28427:59;28520:3;28515:2;28507:6;28503:15;28496:28;28242:289;:::o;28537:366::-;28679:3;28700:67;28764:2;28759:3;28700:67;:::i;:::-;28693:74;;28776:93;28865:3;28776:93;:::i;:::-;28894:2;28889:3;28885:12;28878:19;;28537:366;;;:::o;28909:419::-;29075:4;29113:2;29102:9;29098:18;29090:26;;29162:9;29156:4;29152:20;29148:1;29137:9;29133:17;29126:47;29190:131;29316:4;29190:131;:::i;:::-;29182:139;;28909:419;;;:::o;29334:224::-;29474:34;29470:1;29462:6;29458:14;29451:58;29543:7;29538:2;29530:6;29526:15;29519:32;29334:224;:::o;29564:366::-;29706:3;29727:67;29791:2;29786:3;29727:67;:::i;:::-;29720:74;;29803:93;29892:3;29803:93;:::i;:::-;29921:2;29916:3;29912:12;29905:19;;29564:366;;;:::o;29936:419::-;30102:4;30140:2;30129:9;30125:18;30117:26;;30189:9;30183:4;30179:20;30175:1;30164:9;30160:17;30153:47;30217:131;30343:4;30217:131;:::i;:::-;30209:139;;29936:419;;;:::o;30361:223::-;30501:34;30497:1;30489:6;30485:14;30478:58;30570:6;30565:2;30557:6;30553:15;30546:31;30361:223;:::o;30590:366::-;30732:3;30753:67;30817:2;30812:3;30753:67;:::i;:::-;30746:74;;30829:93;30918:3;30829:93;:::i;:::-;30947:2;30942:3;30938:12;30931:19;;30590:366;;;:::o;30962:419::-;31128:4;31166:2;31155:9;31151:18;31143:26;;31215:9;31209:4;31205:20;31201:1;31190:9;31186:17;31179:47;31243:131;31369:4;31243:131;:::i;:::-;31235:139;;30962:419;;;:::o;31387:102::-;31456:4;31479:3;31471:11;;31387:102;;;:::o;31495:122::-;31547:5;31572:39;31607:2;31602:3;31598:12;31593:3;31572:39;:::i;:::-;31563:48;;31495:122;;;;:::o;31623:115::-;31695:4;31727;31722:3;31718:14;31710:22;;31623:115;;;:::o;31774:699::-;31903:3;31926:86;32005:6;32000:3;31926:86;:::i;:::-;31919:93;;32036:58;32088:5;32036:58;:::i;:::-;32117:7;32148:1;32133:315;32158:6;32155:1;32152:13;32133:315;;;32228:42;32263:6;32254:7;32228:42;:::i;:::-;32290:63;32349:3;32334:13;32290:63;:::i;:::-;32283:70;;32376:62;32431:6;32376:62;:::i;:::-;32366:72;;32193:255;32180:1;32177;32173:9;32168:14;;32133:315;;;32137:14;32464:3;32457:10;;31908:565;;31774:699;;;;;:::o;32479:491::-;32654:4;32692:2;32681:9;32677:18;32669:26;;32741:9;32735:4;32731:20;32727:1;32716:9;32712:17;32705:47;32769:118;32882:4;32873:6;32865;32769:118;:::i;:::-;32761:126;;32897:66;32959:2;32948:9;32944:18;32935:6;32897:66;:::i;:::-;32479:491;;;;;;:::o;32976:225::-;33116:34;33112:1;33104:6;33100:14;33093:58;33185:8;33180:2;33172:6;33168:15;33161:33;32976:225;:::o;33207:366::-;33349:3;33370:67;33434:2;33429:3;33370:67;:::i;:::-;33363:74;;33446:93;33535:3;33446:93;:::i;:::-;33564:2;33559:3;33555:12;33548:19;;33207:366;;;:::o;33579:419::-;33745:4;33783:2;33772:9;33768:18;33760:26;;33832:9;33826:4;33822:20;33818:1;33807:9;33803:17;33796:47;33860:131;33986:4;33860:131;:::i;:::-;33852:139;;33579:419;;;:::o;34004:223::-;34144:34;34140:1;34132:6;34128:14;34121:58;34213:6;34208:2;34200:6;34196:15;34189:31;34004:223;:::o;34233:366::-;34375:3;34396:67;34460:2;34455:3;34396:67;:::i;:::-;34389:74;;34472:93;34561:3;34472:93;:::i;:::-;34590:2;34585:3;34581:12;34574:19;;34233:366;;;:::o;34605:419::-;34771:4;34809:2;34798:9;34794:18;34786:26;;34858:9;34852:4;34848:20;34844:1;34833:9;34829:17;34822:47;34886:131;35012:4;34886:131;:::i;:::-;34878:139;;34605:419;;;:::o;35030:221::-;35170:34;35166:1;35158:6;35154:14;35147:58;35239:4;35234:2;35226:6;35222:15;35215:29;35030:221;:::o;35257:366::-;35399:3;35420:67;35484:2;35479:3;35420:67;:::i;:::-;35413:74;;35496:93;35585:3;35496:93;:::i;:::-;35614:2;35609:3;35605:12;35598:19;;35257:366;;;:::o;35629:419::-;35795:4;35833:2;35822:9;35818:18;35810:26;;35882:9;35876:4;35872:20;35868:1;35857:9;35853:17;35846:47;35910:131;36036:4;35910:131;:::i;:::-;35902:139;;35629:419;;;:::o;36054:224::-;36194:34;36190:1;36182:6;36178:14;36171:58;36263:7;36258:2;36250:6;36246:15;36239:32;36054:224;:::o;36284:366::-;36426:3;36447:67;36511:2;36506:3;36447:67;:::i;:::-;36440:74;;36523:93;36612:3;36523:93;:::i;:::-;36641:2;36636:3;36632:12;36625:19;;36284:366;;;:::o;36656:419::-;36822:4;36860:2;36849:9;36845:18;36837:26;;36909:9;36903:4;36899:20;36895:1;36884:9;36880:17;36873:47;36937:131;37063:4;36937:131;:::i;:::-;36929:139;;36656:419;;;:::o;37081:222::-;37221:34;37217:1;37209:6;37205:14;37198:58;37290:5;37285:2;37277:6;37273:15;37266:30;37081:222;:::o;37309:366::-;37451:3;37472:67;37536:2;37531:3;37472:67;:::i;:::-;37465:74;;37548:93;37637:3;37548:93;:::i;:::-;37666:2;37661:3;37657:12;37650:19;;37309:366;;;:::o;37681:419::-;37847:4;37885:2;37874:9;37870:18;37862:26;;37934:9;37928:4;37924:20;37920:1;37909:9;37905:17;37898:47;37962:131;38088:4;37962:131;:::i;:::-;37954:139;;37681:419;;;:::o;38106:236::-;38246:34;38242:1;38234:6;38230:14;38223:58;38315:19;38310:2;38302:6;38298:15;38291:44;38106:236;:::o;38348:366::-;38490:3;38511:67;38575:2;38570:3;38511:67;:::i;:::-;38504:74;;38587:93;38676:3;38587:93;:::i;:::-;38705:2;38700:3;38696:12;38689:19;;38348:366;;;:::o;38720:419::-;38886:4;38924:2;38913:9;38909:18;38901:26;;38973:9;38967:4;38963:20;38959:1;38948:9;38944:17;38937:47;39001:131;39127:4;39001:131;:::i;:::-;38993:139;;38720:419;;;:::o;39145:176::-;39285:28;39281:1;39273:6;39269:14;39262:52;39145:176;:::o;39327:366::-;39469:3;39490:67;39554:2;39549:3;39490:67;:::i;:::-;39483:74;;39566:93;39655:3;39566:93;:::i;:::-;39684:2;39679:3;39675:12;39668:19;;39327:366;;;:::o;39699:419::-;39865:4;39903:2;39892:9;39888:18;39880:26;;39952:9;39946:4;39942:20;39938:1;39927:9;39923:17;39916:47;39980:131;40106:4;39980:131;:::i;:::-;39972:139;;39699:419;;;:::o;40124:172::-;40264:24;40260:1;40252:6;40248:14;40241:48;40124:172;:::o;40302:366::-;40444:3;40465:67;40529:2;40524:3;40465:67;:::i;:::-;40458:74;;40541:93;40630:3;40541:93;:::i;:::-;40659:2;40654:3;40650:12;40643:19;;40302:366;;;:::o;40674:419::-;40840:4;40878:2;40867:9;40863:18;40855:26;;40927:9;40921:4;40917:20;40913:1;40902:9;40898:17;40891:47;40955:131;41081:4;40955:131;:::i;:::-;40947:139;;40674:419;;;:::o;41099:297::-;41239:34;41235:1;41227:6;41223:14;41216:58;41308:34;41303:2;41295:6;41291:15;41284:59;41377:11;41372:2;41364:6;41360:15;41353:36;41099:297;:::o;41402:366::-;41544:3;41565:67;41629:2;41624:3;41565:67;:::i;:::-;41558:74;;41641:93;41730:3;41641:93;:::i;:::-;41759:2;41754:3;41750:12;41743:19;;41402:366;;;:::o;41774:419::-;41940:4;41978:2;41967:9;41963:18;41955:26;;42027:9;42021:4;42017:20;42013:1;42002:9;41998:17;41991:47;42055:131;42181:4;42055:131;:::i;:::-;42047:139;;41774:419;;;:::o;42199:240::-;42339:34;42335:1;42327:6;42323:14;42316:58;42408:23;42403:2;42395:6;42391:15;42384:48;42199:240;:::o;42445:366::-;42587:3;42608:67;42672:2;42667:3;42608:67;:::i;:::-;42601:74;;42684:93;42773:3;42684:93;:::i;:::-;42802:2;42797:3;42793:12;42786:19;;42445:366;;;:::o;42817:419::-;42983:4;43021:2;43010:9;43006:18;42998:26;;43070:9;43064:4;43060:20;43056:1;43045:9;43041:17;43034:47;43098:131;43224:4;43098:131;:::i;:::-;43090:139;;42817:419;;;:::o;43242:169::-;43382:21;43378:1;43370:6;43366:14;43359:45;43242:169;:::o;43417:366::-;43559:3;43580:67;43644:2;43639:3;43580:67;:::i;:::-;43573:74;;43656:93;43745:3;43656:93;:::i;:::-;43774:2;43769:3;43765:12;43758:19;;43417:366;;;:::o;43789:419::-;43955:4;43993:2;43982:9;43978:18;43970:26;;44042:9;44036:4;44032:20;44028:1;44017:9;44013:17;44006:47;44070:131;44196:4;44070:131;:::i;:::-;44062:139;;43789:419;;;:::o;44214:241::-;44354:34;44350:1;44342:6;44338:14;44331:58;44423:24;44418:2;44410:6;44406:15;44399:49;44214:241;:::o;44461:366::-;44603:3;44624:67;44688:2;44683:3;44624:67;:::i;:::-;44617:74;;44700:93;44789:3;44700:93;:::i;:::-;44818:2;44813:3;44809:12;44802:19;;44461:366;;;:::o;44833:419::-;44999:4;45037:2;45026:9;45022:18;45014:26;;45086:9;45080:4;45076:20;45072:1;45061:9;45057:17;45050:47;45114:131;45240:4;45114:131;:::i;:::-;45106:139;;44833:419;;;:::o;45258:191::-;45298:4;45318:20;45336:1;45318:20;:::i;:::-;45313:25;;45352:20;45370:1;45352:20;:::i;:::-;45347:25;;45391:1;45388;45385:8;45382:34;;;45396:18;;:::i;:::-;45382:34;45441:1;45438;45434:9;45426:17;;45258:191;;;;:::o;45455:831::-;45718:4;45756:3;45745:9;45741:19;45733:27;;45770:71;45838:1;45827:9;45823:17;45814:6;45770:71;:::i;:::-;45851:80;45927:2;45916:9;45912:18;45903:6;45851:80;:::i;:::-;45978:9;45972:4;45968:20;45963:2;45952:9;45948:18;45941:48;46006:108;46109:4;46100:6;46006:108;:::i;:::-;45998:116;;46124:72;46192:2;46181:9;46177:18;46168:6;46124:72;:::i;:::-;46206:73;46274:3;46263:9;46259:19;46250:6;46206:73;:::i;:::-;45455:831;;;;;;;;:::o;46292:225::-;46432:34;46428:1;46420:6;46416:14;46409:58;46501:8;46496:2;46488:6;46484:15;46477:33;46292:225;:::o;46523:366::-;46665:3;46686:67;46750:2;46745:3;46686:67;:::i;:::-;46679:74;;46762:93;46851:3;46762:93;:::i;:::-;46880:2;46875:3;46871:12;46864:19;;46523:366;;;:::o;46895:419::-;47061:4;47099:2;47088:9;47084:18;47076:26;;47148:9;47142:4;47138:20;47134:1;47123:9;47119:17;47112:47;47176:131;47302:4;47176:131;:::i;:::-;47168:139;;46895:419;;;:::o;47320:220::-;47460:34;47456:1;47448:6;47444:14;47437:58;47529:3;47524:2;47516:6;47512:15;47505:28;47320:220;:::o;47546:366::-;47688:3;47709:67;47773:2;47768:3;47709:67;:::i;:::-;47702:74;;47785:93;47874:3;47785:93;:::i;:::-;47903:2;47898:3;47894:12;47887:19;;47546:366;;;:::o;47918:419::-;48084:4;48122:2;48111:9;48107:18;48099:26;;48171:9;48165:4;48161:20;48157:1;48146:9;48142:17;48135:47;48199:131;48325:4;48199:131;:::i;:::-;48191:139;;47918:419;;;:::o

Swarm Source

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