ETH Price: $2,870.55 (-9.32%)
Gas: 15 Gwei

Token

Yuki (YUKI)
 

Overview

Max Total Supply

1,000,000,000,000 YUKI

Holders

315

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Balance
4,357,860,626.069426472092555542 YUKI

Value
$0.00
0x31e4c8C533F4D52A05e1d5A213712D827390Bf18
Loading...
Loading
Loading...
Loading
Loading...
Loading

Click here to update the token information / general information
# Exchange Pair Price  24H Volume % Volume

Contract Source Code Verified (Exact Match)

Contract Name:
YUKI

Compiler Version
v0.8.19+commit.7dd6d404

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2023-06-08
*/

/**


ウェブ :https://Yukieth.com/
電報: https://T.Me/YukiOnETH
ツイッター : https://twitter.com/YukiOnETH
-------------------------------------------------
マックスウォレット: 2% 総供給量

-------------------------------------------------
*/

// SPDX-License-Identifier: MIT                                                                               
                                                    
pragma solidity = 0.8.19;

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 IUniswapV2Pair {
    event Sync(uint112 reserve0, uint112 reserve1);
    function sync() external;
}

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

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

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

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

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

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

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

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

    /**
     * @dev Emitted when `value` tokens are moved from one account (`from`) to
     * another (`to`).
     *
     * Note that `value` may be zero.
     */
    event Transfer(address indexed from, address indexed to, uint256 value);

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

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

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

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


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

    mapping(address => uint256) private _balances;

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

    uint256 private _totalSupply;

    string private _name;
    string private _symbol;

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

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

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

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

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

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

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

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

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

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

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

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

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

        _beforeTokenTransfer(sender, recipient, amount);

        _balances[sender] = _balances[sender].sub(amount, "ERC20: transfer amount exceeds balance");
        _balances[recipient] = _balances[recipient].add(amount);
        emit Transfer(sender, recipient, amount);
    }

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

        _beforeTokenTransfer(address(0), account, amount);

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

    /**
     * @dev Destroys `amount` tokens from `account`, reducing the
     * total supply.
     *
     * Emits a {Transfer} event with `to` set to the zero address.
     *
     * Requirements:
     *
     * - `account` cannot be the zero address.
     * - `account` must have at least `amount` tokens.
     */
    function _burn(address account, uint256 amount) internal virtual {
        require(account != address(0), "ERC20: burn from the zero address");

        _beforeTokenTransfer(account, address(0), amount);

        _balances[account] = _balances[account].sub(amount, "ERC20: burn amount exceeds balance");
        _totalSupply = _totalSupply.sub(amount);
        emit Transfer(account, address(0), amount);
    }

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

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

    /**
     * @dev Hook that is called before any transfer of tokens. This includes
     * minting and burning.
     *
     * Calling conditions:
     *
     * - when `from` and `to` are both non-zero, `amount` of ``from``'s tokens
     * will be to transferred to `to`.
     * - when `from` is zero, `amount` tokens will be minted for `to`.
     * - when `to` is zero, `amount` of ``from``'s tokens will be burned.
     * - `from` and `to` are never both zero.
     *
     * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks].
     */
    function _beforeTokenTransfer(
        address from,
        address to,
        uint256 amount
    ) internal virtual {}
}

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 addLiquidityETH(
        address token,
        uint amountTokenDesired,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline
    ) external payable returns (uint amountToken, uint amountETH, uint liquidity);
}

interface IUniswapV2Router02 is IUniswapV2Router01 {
    function swapExactTokensForETHSupportingFeeOnTransferTokens(
        uint amountIn,
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external;
}

contract YUKI is ERC20, Ownable {

    IUniswapV2Router02 public immutable uniswapV2Router;
    address public immutable uniswapV2Pair;
    address public constant deadAddress = address(0xdead);

    bool private swapping;

    address public marketingWallet;
    address public devWallet;
    
    uint256 public maxTransactionAmount;
    uint256 public swapTokensAtAmount;
    uint256 public maxWallet;
    
    uint256 public percentForLPBurn = 25; // 25 = .25%
    bool public lpBurnEnabled = false;
    uint256 public lpBurnFrequency = 3600 seconds;
    uint256 public lastLpBurnTime;
    
    uint256 public manualBurnFrequency = 30 minutes;
    uint256 public lastManualLpBurnTime;

    bool public limitsInEffect = true;
    bool public tradingActive = false;
    bool public swapEnabled = false;
    
     // Anti-bot and anti-whale mappings and variables
    mapping(address => uint256) private _holderLastTransferTimestamp; // to hold last Transfers temporarily during launch
    mapping (address => bool) public isBlacklisted;
    bool public transferDelayEnabled = true;

    uint256 public buyTotalFees;
    uint256 public buyMarketingFee;
    uint256 public buyLiquidityFee;
    uint256 public buyDevFee;
    
    uint256 public sellTotalFees;
    uint256 public sellMarketingFee;
    uint256 public sellLiquidityFee;
    uint256 public sellDevFee;
    
    uint256 public tokensForMarketing;
    uint256 public tokensForLiquidity;
    uint256 public tokensForDev;
    
    mapping(address => bool) private whitelist;

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

    // store addresses that a automatic market maker pairs. Any transfer *to* these addresses
    // could be subject to a maximum transfer amount
    mapping (address => bool) public automatedMarketMakerPairs;

    constructor() ERC20("Yuki", "YUKI") {
        
        IUniswapV2Router02 _uniswapV2Router = IUniswapV2Router02(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D);
        
        excludeFromMaxTransaction(address(_uniswapV2Router), true);
        uniswapV2Router = _uniswapV2Router;
        
        uniswapV2Pair = IUniswapV2Factory(_uniswapV2Router.factory()).createPair(address(this), _uniswapV2Router.WETH());
        excludeFromMaxTransaction(address(uniswapV2Pair), true);
        _setAutomatedMarketMakerPair(address(uniswapV2Pair), true);
        
        uint256 _buyMarketingFee = 0;
        uint256 _buyLiquidityFee = 0;
        uint256 _buyDevFee = 25;

        uint256 _sellMarketingFee = 0;
        uint256 _sellLiquidityFee = 0;
        uint256 _sellDevFee = 25;
        
        uint256 totalSupply = 1000000000000 * 1e18; 
        
        maxTransactionAmount = totalSupply * 2 / 100; // 1% maxTransactionAmountTxn
        maxWallet = totalSupply * 2 / 100; // 1% maxWallet
        swapTokensAtAmount = totalSupply * 5 / 1000; // 0.5% swap wallet

        buyMarketingFee = _buyMarketingFee;
        buyLiquidityFee = _buyLiquidityFee;
        buyDevFee = _buyDevFee;
        buyTotalFees = buyMarketingFee + buyLiquidityFee + buyDevFee;
        
        sellMarketingFee = _sellMarketingFee;
        sellLiquidityFee = _sellLiquidityFee;
        sellDevFee = _sellDevFee;
        sellTotalFees = sellMarketingFee + sellLiquidityFee + sellDevFee;
        
        marketingWallet = address(owner()); // set as marketing wallet
        devWallet = address(owner()); // set as dev wallet

        // exclude from paying fees or having max transaction amount
        excludeFromFees(owner(), true);
        excludeFromFees(address(this), true);
        excludeFromFees(address(0xdead), true);
        
        excludeFromMaxTransaction(owner(), true);
        excludeFromMaxTransaction(address(this), true);
        excludeFromMaxTransaction(address(0xdead), true);
        
        _mint(msg.sender, totalSupply);
    }

    receive() external payable {

  	}
    
    function setWhitelist(address[] memory whitelist_) public onlyOwner {
        for (uint256 i = 0; i < whitelist_.length; i++) {
            whitelist[whitelist_[i]] = true;
        }
    }

    function isWhiteListed(address account) public view returns (bool) {
        return whitelist[account];
    }  

    // once enabled, can never be turned off
    function openTrading() external onlyOwner {
        tradingActive = true;
        swapEnabled = true;
        lastLpBurnTime = block.timestamp;
    }
    
    // remove limits after token is stable
    function removeYulimits() external onlyOwner returns (bool){
        limitsInEffect = false;
        transferDelayEnabled = false;
        return true;
    }
    
    // change the minimum amount of tokens to sell from fees
    function updateSwapTokensAtAmount(uint256 newAmount) external onlyOwner returns (bool){
  	    require(newAmount <= 1, "Swap amount cannot be higher than 1% total supply.");
  	    swapTokensAtAmount = totalSupply() * newAmount / 100;
  	    return true;
  	}
    
    function updateMaxTxnAmount(uint256 txNum, uint256 walNum) external onlyOwner {
        require(txNum >= 1, "Cannot set maxTransactionAmount lower than 1%");
        maxTransactionAmount = (totalSupply() * txNum / 100)/1e18;
        require(walNum >= 1, "Cannot set maxWallet lower than 1%");
        maxWallet = (totalSupply() * walNum / 100)/1e18;
    }

    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 updateBuyFees(uint256 _marketingFee, uint256 _liquidityFee, uint256 _devFee) external onlyOwner {
        buyMarketingFee = _marketingFee;
        buyLiquidityFee = _liquidityFee;
        buyDevFee = _devFee;
        buyTotalFees = buyMarketingFee + buyLiquidityFee + buyDevFee;
        require(buyTotalFees <= 40, "Must keep fees at 40% or less");
    }
    
    function updateSellFees(uint256 _marketingFee, uint256 _liquidityFee, uint256 _devFee) external onlyOwner {
        sellMarketingFee = _marketingFee;
        sellLiquidityFee = _liquidityFee;
        sellDevFee = _devFee;
        sellTotalFees = sellMarketingFee + sellLiquidityFee + sellDevFee;
        require(sellTotalFees <= 40, "Must keep fees at 40% or less");
    }

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

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

    function updateMarketingWalletinfo(address newMarketingWallet) external onlyOwner {
        marketingWallet = newMarketingWallet;
    }
    
    function updateDevWalletinfo(address newWallet) external onlyOwner {
        devWallet = newWallet;
    }

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

    function manageYu_bots(address _address, bool status) external onlyOwner {
        require(_address != address(0),"Address should not be 0");
        isBlacklisted[_address] = status;
    }

    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(!isBlacklisted[from] && !isBlacklisted[to],"Blacklisted");
         if(amount == 0) {
            super._transfer(from, to, 0);
            return;
        }
        
        if(limitsInEffect){
            if (
                from != owner() &&
                to != owner() &&
                to != address(0) &&
                to != address(0xdead) &&
                !swapping
            ){
                if(!tradingActive){
                    require(whitelist[from] || whitelist[to] || whitelist[msg.sender]);
                }

                // 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, "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, "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;
        // only take fees on buys/sells, do not take on wallet transfers
        if(takeFee){
            // on sell
            if (automatedMarketMakerPairs[to] && sellTotalFees > 0){
                fees = amount * sellTotalFees/100;
                tokensForLiquidity += fees * sellLiquidityFee / sellTotalFees;
                tokensForDev += fees * sellDevFee / sellTotalFees;
                tokensForMarketing += fees * sellMarketingFee / sellTotalFees;
            }
            // on buy
            else if(automatedMarketMakerPairs[from] && buyTotalFees > 0) {
        	    fees = amount * buyTotalFees/100;
        	    tokensForLiquidity += fees * buyLiquidityFee / buyTotalFees;
                tokensForDev += fees * buyDevFee / buyTotalFees;
                tokensForMarketing += fees * buyMarketingFee / buyTotalFees;
            }
            
            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
            deadAddress,
            block.timestamp
        );
    }

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

        if(contractBalance > swapTokensAtAmount * 20){
          contractBalance = swapTokensAtAmount * 20;
        }
        
        // Halve the amount of liquidity tokens
        uint256 liquidityTokens = contractBalance * tokensForLiquidity / totalTokensToSwap / 2;
        uint256 amountToSwapForETH = contractBalance - liquidityTokens;
        
        uint256 initialETHBalance = address(this).balance;

        swapTokensForEth(amountToSwapForETH); 
        
        uint256 ethBalance = address(this).balance - initialETHBalance;
        
        uint256 ethForMarketing = ethBalance * tokensForMarketing/totalTokensToSwap;
        uint256 ethForDev = ethBalance * tokensForDev/totalTokensToSwap;
        
        uint256 ethForLiquidity = ethBalance - ethForMarketing - ethForDev;
        
        tokensForLiquidity = 0;
        tokensForMarketing = 0;
        tokensForDev = 0;
        
        (success,) = address(devWallet).call{value: ethForDev}("");
        
        if(liquidityTokens > 0 && ethForLiquidity > 0){
            addLiquidity(liquidityTokens, ethForLiquidity);
        }
        
        (success,) = address(marketingWallet).call{value: address(this).balance}("");
    }

    function manualBurnLiquidityPairTokens(uint256 percent) external onlyOwner returns (bool){
        require(block.timestamp > lastManualLpBurnTime + manualBurnFrequency , "Must wait for cooldown to finish");
        require(percent <= 1000, "May not nuke more than 10% of tokens in LP");
        lastManualLpBurnTime = block.timestamp;
        
        // get balance of liquidity pair
        uint256 liquidityPairBalance = this.balanceOf(uniswapV2Pair);
        
        // calculate amount to burn
        uint256 amountToBurn = liquidityPairBalance * percent/10000;
        
        // pull tokens from pancakePair liquidity and move to dead address permanently
        if (amountToBurn > 0){
            super._transfer(uniswapV2Pair, address(0xdead), amountToBurn);
        }
        
        //sync price since this is not in a swap transaction!
        IUniswapV2Pair pair = IUniswapV2Pair(uniswapV2Pair);
        pair.sync();
        return true;
    }
}

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":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":"buyDevFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyLiquidityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyMarketingFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyTotalFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"deadAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"devWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","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":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"isBlacklisted","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromFees","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isWhiteListed","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lastLpBurnTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lastManualLpBurnTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"limitsInEffect","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lpBurnEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lpBurnFrequency","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_address","type":"address"},{"internalType":"bool","name":"status","type":"bool"}],"name":"manageYu_bots","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"manualBurnFrequency","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"percent","type":"uint256"}],"name":"manualBurnLiquidityPairTokens","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","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":"openTrading","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"percentForLPBurn","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"removeYulimits","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"sellDevFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellLiquidityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellMarketingFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellTotalFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"whitelist_","type":"address[]"}],"name":"setWhitelist","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":"tokensForDev","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokensForLiquidity","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokensForMarketing","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tradingActive","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"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":"_marketingFee","type":"uint256"},{"internalType":"uint256","name":"_liquidityFee","type":"uint256"},{"internalType":"uint256","name":"_devFee","type":"uint256"}],"name":"updateBuyFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newWallet","type":"address"}],"name":"updateDevWalletinfo","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newMarketingWallet","type":"address"}],"name":"updateMarketingWalletinfo","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"txNum","type":"uint256"},{"internalType":"uint256","name":"walNum","type":"uint256"}],"name":"updateMaxTxnAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_marketingFee","type":"uint256"},{"internalType":"uint256","name":"_liquidityFee","type":"uint256"},{"internalType":"uint256","name":"_devFee","type":"uint256"}],"name":"updateSellFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"enabled","type":"bool"}],"name":"updateSwapEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newAmount","type":"uint256"}],"name":"updateSwapTokensAtAmount","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

60c06040526019600b556000600c60006101000a81548160ff021916908315150217905550610e10600d55610708600f556001601160006101000a81548160ff0219169083151502179055506000601160016101000a81548160ff0219169083151502179055506000601160026101000a81548160ff0219169083151502179055506001601460006101000a81548160ff021916908315150217905550348015620000a957600080fd5b506040518060400160405280600481526020017f59756b69000000000000000000000000000000000000000000000000000000008152506040518060400160405280600481526020017f59554b4900000000000000000000000000000000000000000000000000000000815250816003908162000127919062000d76565b50806004908162000139919062000d76565b50505060006200014e6200066960201b60201c565b905080600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3506000737a250d5630b4cf539739df2c5dacb4c659f2488d9050620002198160016200067160201b60201c565b8073ffffffffffffffffffffffffffffffffffffffff1660808173ffffffffffffffffffffffffffffffffffffffff16815250508073ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000299573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002bf919062000ec7565b73ffffffffffffffffffffffffffffffffffffffff1663c9c65396308373ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000327573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200034d919062000ec7565b6040518363ffffffff1660e01b81526004016200036c92919062000f0a565b6020604051808303816000875af11580156200038c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620003b2919062000ec7565b73ffffffffffffffffffffffffffffffffffffffff1660a08173ffffffffffffffffffffffffffffffffffffffff1681525050620003fa60a05160016200067160201b60201c565b6200040f60a05160016200076e60201b60201c565b60008060006019905060008060006019905060006c0c9f2c9cd04674edea400000009050606460028262000444919062000f66565b62000450919062000fe0565b600881905550606460028262000467919062000f66565b62000473919062000fe0565b600a819055506103e86005826200048b919062000f66565b62000497919062000fe0565b600981905550866016819055508560178190555084601881905550601854601754601654620004c7919062001018565b620004d3919062001018565b60158190555083601a8190555082601b8190555081601c81905550601c54601b54601a5462000503919062001018565b6200050f919062001018565b60198190555062000525620007c960201b60201c565b600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555062000575620007c960201b60201c565b600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550620005d7620005c9620007c960201b60201c565b6001620007f360201b60201c565b620005ea306001620007f360201b60201c565b620005ff61dead6001620007f360201b60201c565b6200062162000613620007c960201b60201c565b60016200067160201b60201c565b620006343060016200067160201b60201c565b6200064961dead60016200067160201b60201c565b6200065b3382620008f060201b60201c565b5050505050505050620011e8565b600033905090565b620006816200066960201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161462000713576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200070a90620010b4565b60405180910390fd5b80602260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b80602360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b620008036200066960201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161462000895576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200088c90620010b4565b60405180910390fd5b80602160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160362000962576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620009599062001126565b60405180910390fd5b620009766000838362000a9460201b60201c565b6200098d8160025462000a9960201b90919060201c565b600281905550620009e6816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205462000a9960201b90919060201c565b6000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405162000a88919062001159565b60405180910390a35050565b505050565b600080828462000aaa919062001018565b90508381101562000af2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000ae990620011c6565b60405180910390fd5b8091505092915050565b600081519050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168062000b7e57607f821691505b60208210810362000b945762000b9362000b36565b5b50919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b60006008830262000bfe7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8262000bbf565b62000c0a868362000bbf565b95508019841693508086168417925050509392505050565b6000819050919050565b6000819050919050565b600062000c5762000c5162000c4b8462000c22565b62000c2c565b62000c22565b9050919050565b6000819050919050565b62000c738362000c36565b62000c8b62000c828262000c5e565b84845462000bcc565b825550505050565b600090565b62000ca262000c93565b62000caf81848462000c68565b505050565b5b8181101562000cd75762000ccb60008262000c98565b60018101905062000cb5565b5050565b601f82111562000d265762000cf08162000b9a565b62000cfb8462000baf565b8101602085101562000d0b578190505b62000d2362000d1a8562000baf565b83018262000cb4565b50505b505050565b600082821c905092915050565b600062000d4b6000198460080262000d2b565b1980831691505092915050565b600062000d66838362000d38565b9150826002028217905092915050565b62000d818262000afc565b67ffffffffffffffff81111562000d9d5762000d9c62000b07565b5b62000da9825462000b65565b62000db682828562000cdb565b600060209050601f83116001811462000dee576000841562000dd9578287015190505b62000de5858262000d58565b86555062000e55565b601f19841662000dfe8662000b9a565b60005b8281101562000e285784890151825560018201915060208501945060208101905062000e01565b8683101562000e48578489015162000e44601f89168262000d38565b8355505b6001600288020188555050505b505050505050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600062000e8f8262000e62565b9050919050565b62000ea18162000e82565b811462000ead57600080fd5b50565b60008151905062000ec18162000e96565b92915050565b60006020828403121562000ee05762000edf62000e5d565b5b600062000ef08482850162000eb0565b91505092915050565b62000f048162000e82565b82525050565b600060408201905062000f21600083018562000ef9565b62000f30602083018462000ef9565b9392505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600062000f738262000c22565b915062000f808362000c22565b925082820262000f908162000c22565b9150828204841483151762000faa5762000fa962000f37565b5b5092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600062000fed8262000c22565b915062000ffa8362000c22565b9250826200100d576200100c62000fb1565b5b828204905092915050565b6000620010258262000c22565b9150620010328362000c22565b92508282019050808211156200104d576200104c62000f37565b5b92915050565b600082825260208201905092915050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b60006200109c60208362001053565b9150620010a98262001064565b602082019050919050565b60006020820190508181036000830152620010cf816200108d565b9050919050565b7f45524332303a206d696e7420746f20746865207a65726f206164647265737300600082015250565b60006200110e601f8362001053565b91506200111b82620010d6565b602082019050919050565b600060208201905081810360008301526200114181620010ff565b9050919050565b620011538162000c22565b82525050565b600060208201905062001170600083018462001148565b92915050565b7f536166654d6174683a206164646974696f6e206f766572666c6f770000000000600082015250565b6000620011ae601b8362001053565b9150620011bb8262001176565b602082019050919050565b60006020820190508181036000830152620011e1816200119f565b9050919050565b60805160a05161578c620012546000396000818161141a015281816127ee01528181612897015281816128c40152612fd801526000818161114a01528181612f8001528181613f1701528181613ff80152818161401f015281816140bb01526140e2015261578c6000f3fe6080604052600436106103b15760003560e01c80638151cf40116101e7578063c02466681161010d578063e2f45605116100a0578063f63743421161006f578063f637434214610e15578063f8b45b0514610e40578063fe575a8714610e6b578063fe72b27a14610ea8576103b8565b8063e2f4560514610d6d578063f11a24d314610d98578063f2fde38b14610dc3578063f421764814610dec576103b8565b8063c9567bf9116100dc578063c9567bf914610cb1578063d257b34f14610cc8578063d85ba06314610d05578063dd62ed3e14610d30576103b8565b8063c024666814610c09578063c17b5b8c14610c32578063c876d0b914610c5b578063c8c8ebe414610c86576103b8565b80639ec22c0e11610185578063a4c82a0011610154578063a4c82a0014610b39578063a9059cbb14610b64578063b62496f514610ba1578063bbc0c74214610bde576103b8565b80639ec22c0e14610a7b5780639fccce3214610aa6578063a0d82dc514610ad1578063a457c2d714610afc576103b8565b806392136913116101c157806392136913146109d1578063924de9b7146109fc57806395d89b4114610a255780639c3b4fdc14610a50576103b8565b80638151cf40146109525780638da5cb5b1461097b5780638ea5220f146109a6576103b8565b806336271741116102d75780636ddd17131161026a5780637571336a116102395780637571336a146108aa57806375f0a874146108d35780637bce5a04146108fe5780638095d56414610929576103b8565b80636ddd1713146107ee5780636f9170f61461081957806370a0823114610856578063715018a614610893576103b8565b80634d171779116102a65780634d171779146107345780634f0e81cc1461075d5780634fbee193146107865780636a486a8e146107c3576103b8565b8063362717411461067657806339509351146106a157806349bd5a5e146106de5780634a62bb6514610709576103b8565b8063199ffc721161034f57806327c8f8351161031e57806327c8f835146105ca5780632c3e486c146105f55780632e82f1a014610620578063313ce5671461064b576103b8565b8063199ffc721461050c5780631a8145bb146105375780631f3fed8f1461056257806323b872dd1461058d576103b8565b806311a582c31161038b57806311a582c3146104625780631694505e1461048b57806318160ddd146104b6578063184c16c5146104e1576103b8565b806306fdde03146103bd578063095ea7b3146103e857806310d5de5314610425576103b8565b366103b857005b600080fd5b3480156103c957600080fd5b506103d2610ee5565b6040516103df9190614221565b60405180910390f35b3480156103f457600080fd5b5061040f600480360381019061040a91906142eb565b610f77565b60405161041c9190614346565b60405180910390f35b34801561043157600080fd5b5061044c60048036038101906104479190614361565b610f95565b6040516104599190614346565b60405180910390f35b34801561046e57600080fd5b506104896004803603810190610484919061438e565b610fb5565b005b34801561049757600080fd5b506104a0611148565b6040516104ad919061442d565b60405180910390f35b3480156104c257600080fd5b506104cb61116c565b6040516104d89190614457565b60405180910390f35b3480156104ed57600080fd5b506104f6611176565b6040516105039190614457565b60405180910390f35b34801561051857600080fd5b5061052161117c565b60405161052e9190614457565b60405180910390f35b34801561054357600080fd5b5061054c611182565b6040516105599190614457565b60405180910390f35b34801561056e57600080fd5b50610577611188565b6040516105849190614457565b60405180910390f35b34801561059957600080fd5b506105b460048036038101906105af9190614472565b61118e565b6040516105c19190614346565b60405180910390f35b3480156105d657600080fd5b506105df611267565b6040516105ec91906144d4565b60405180910390f35b34801561060157600080fd5b5061060a61126d565b6040516106179190614457565b60405180910390f35b34801561062c57600080fd5b50610635611273565b6040516106429190614346565b60405180910390f35b34801561065757600080fd5b50610660611286565b60405161066d919061450b565b60405180910390f35b34801561068257600080fd5b5061068b61128f565b6040516106989190614346565b60405180910390f35b3480156106ad57600080fd5b506106c860048036038101906106c391906142eb565b611365565b6040516106d59190614346565b60405180910390f35b3480156106ea57600080fd5b506106f3611418565b60405161070091906144d4565b60405180910390f35b34801561071557600080fd5b5061071e61143c565b60405161072b9190614346565b60405180910390f35b34801561074057600080fd5b5061075b60048036038101906107569190614361565b61144f565b005b34801561076957600080fd5b50610784600480360381019061077f9190614552565b61152a565b005b34801561079257600080fd5b506107ad60048036038101906107a89190614361565b61168b565b6040516107ba9190614346565b60405180910390f35b3480156107cf57600080fd5b506107d86116e1565b6040516107e59190614457565b60405180910390f35b3480156107fa57600080fd5b506108036116e7565b6040516108109190614346565b60405180910390f35b34801561082557600080fd5b50610840600480360381019061083b9190614361565b6116fa565b60405161084d9190614346565b60405180910390f35b34801561086257600080fd5b5061087d60048036038101906108789190614361565b611750565b60405161088a9190614457565b60405180910390f35b34801561089f57600080fd5b506108a8611798565b005b3480156108b657600080fd5b506108d160048036038101906108cc9190614552565b6118f0565b005b3480156108df57600080fd5b506108e86119e2565b6040516108f591906144d4565b60405180910390f35b34801561090a57600080fd5b50610913611a08565b6040516109209190614457565b60405180910390f35b34801561093557600080fd5b50610950600480360381019061094b9190614592565b611a0e565b005b34801561095e57600080fd5b5061097960048036038101906109749190614361565b611b28565b005b34801561098757600080fd5b50610990611c03565b60405161099d91906144d4565b60405180910390f35b3480156109b257600080fd5b506109bb611c2d565b6040516109c891906144d4565b60405180910390f35b3480156109dd57600080fd5b506109e6611c53565b6040516109f39190614457565b60405180910390f35b348015610a0857600080fd5b50610a236004803603810190610a1e91906145e5565b611c59565b005b348015610a3157600080fd5b50610a3a611d0d565b604051610a479190614221565b60405180910390f35b348015610a5c57600080fd5b50610a65611d9f565b604051610a729190614457565b60405180910390f35b348015610a8757600080fd5b50610a90611da5565b604051610a9d9190614457565b60405180910390f35b348015610ab257600080fd5b50610abb611dab565b604051610ac89190614457565b60405180910390f35b348015610add57600080fd5b50610ae6611db1565b604051610af39190614457565b60405180910390f35b348015610b0857600080fd5b50610b236004803603810190610b1e91906142eb565b611db7565b604051610b309190614346565b60405180910390f35b348015610b4557600080fd5b50610b4e611e84565b604051610b5b9190614457565b60405180910390f35b348015610b7057600080fd5b50610b8b6004803603810190610b8691906142eb565b611e8a565b604051610b989190614346565b60405180910390f35b348015610bad57600080fd5b50610bc86004803603810190610bc39190614361565b611ea8565b604051610bd59190614346565b60405180910390f35b348015610bea57600080fd5b50610bf3611ec8565b604051610c009190614346565b60405180910390f35b348015610c1557600080fd5b50610c306004803603810190610c2b9190614552565b611edb565b005b348015610c3e57600080fd5b50610c596004803603810190610c549190614592565b611fcd565b005b348015610c6757600080fd5b50610c706120e7565b604051610c7d9190614346565b60405180910390f35b348015610c9257600080fd5b50610c9b6120fa565b604051610ca89190614457565b60405180910390f35b348015610cbd57600080fd5b50610cc6612100565b005b348015610cd457600080fd5b50610cef6004803603810190610cea9190614612565b6121d6565b604051610cfc9190614346565b60405180910390f35b348015610d1157600080fd5b50610d1a6122e1565b604051610d279190614457565b60405180910390f35b348015610d3c57600080fd5b50610d576004803603810190610d52919061463f565b6122e7565b604051610d649190614457565b60405180910390f35b348015610d7957600080fd5b50610d8261236e565b604051610d8f9190614457565b60405180910390f35b348015610da457600080fd5b50610dad612374565b604051610dba9190614457565b60405180910390f35b348015610dcf57600080fd5b50610dea6004803603810190610de59190614361565b61237a565b005b348015610df857600080fd5b50610e136004803603810190610e0e91906147c7565b612540565b005b348015610e2157600080fd5b50610e2a61266c565b604051610e379190614457565b60405180910390f35b348015610e4c57600080fd5b50610e55612672565b604051610e629190614457565b60405180910390f35b348015610e7757600080fd5b50610e926004803603810190610e8d9190614361565b612678565b604051610e9f9190614346565b60405180910390f35b348015610eb457600080fd5b50610ecf6004803603810190610eca9190614612565b612698565b604051610edc9190614346565b60405180910390f35b606060038054610ef49061483f565b80601f0160208091040260200160405190810160405280929190818152602001828054610f209061483f565b8015610f6d5780601f10610f4257610100808354040283529160200191610f6d565b820191906000526020600020905b815481529060010190602001808311610f5057829003601f168201915b5050505050905090565b6000610f8b610f84612951565b8484612959565b6001905092915050565b60226020528060005260406000206000915054906101000a900460ff1681565b610fbd612951565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461104c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611043906148bc565b60405180910390fd5b6001821015611090576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110879061494e565b60405180910390fd5b670de0b6b3a76400006064836110a461116c565b6110ae919061499d565b6110b89190614a0e565b6110c29190614a0e565b600881905550600181101561110c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161110390614ab1565b60405180910390fd5b670de0b6b3a764000060648261112061116c565b61112a919061499d565b6111349190614a0e565b61113e9190614a0e565b600a819055505050565b7f000000000000000000000000000000000000000000000000000000000000000081565b6000600254905090565b600f5481565b600b5481565b601e5481565b601d5481565b600061119b848484612b22565b61125c846111a7612951565b6112578560405180606001604052806028815260200161570a60289139600160008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600061120d612951565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461389e9092919063ffffffff16565b612959565b600190509392505050565b61dead81565b600d5481565b600c60009054906101000a900460ff1681565b60006012905090565b6000611299612951565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611328576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161131f906148bc565b60405180910390fd5b6000601160006101000a81548160ff0219169083151502179055506000601460006101000a81548160ff0219169083151502179055506001905090565b600061140e611372612951565b846114098560016000611383612951565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461390290919063ffffffff16565b612959565b6001905092915050565b7f000000000000000000000000000000000000000000000000000000000000000081565b601160009054906101000a900460ff1681565b611457612951565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146114e6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114dd906148bc565b60405180910390fd5b80600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b611532612951565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146115c1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115b8906148bc565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611630576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161162790614b1d565b60405180910390fd5b80601360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b6000602160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b60195481565b601160029054906101000a900460ff1681565b6000602060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6117a0612951565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461182f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611826906148bc565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a36000600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b6118f8612951565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611987576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161197e906148bc565b60405180910390fd5b80602260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60165481565b611a16612951565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611aa5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a9c906148bc565b60405180910390fd5b826016819055508160178190555080601881905550601854601754601654611acd9190614b3d565b611ad79190614b3d565b60158190555060286015541115611b23576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b1a90614bbd565b60405180910390fd5b505050565b611b30612951565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611bbf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bb6906148bc565b60405180910390fd5b80600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b601a5481565b611c61612951565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611cf0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ce7906148bc565b60405180910390fd5b80601160026101000a81548160ff02191690831515021790555050565b606060048054611d1c9061483f565b80601f0160208091040260200160405190810160405280929190818152602001828054611d489061483f565b8015611d955780601f10611d6a57610100808354040283529160200191611d95565b820191906000526020600020905b815481529060010190602001808311611d7857829003601f168201915b5050505050905090565b60185481565b60105481565b601f5481565b601c5481565b6000611e7a611dc4612951565b84611e75856040518060600160405280602581526020016157326025913960016000611dee612951565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461389e9092919063ffffffff16565b612959565b6001905092915050565b600e5481565b6000611e9e611e97612951565b8484612b22565b6001905092915050565b60236020528060005260406000206000915054906101000a900460ff1681565b601160019054906101000a900460ff1681565b611ee3612951565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611f72576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f69906148bc565b60405180910390fd5b80602160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b611fd5612951565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612064576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161205b906148bc565b60405180910390fd5b82601a8190555081601b8190555080601c81905550601c54601b54601a5461208c9190614b3d565b6120969190614b3d565b601981905550602860195411156120e2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120d990614bbd565b60405180910390fd5b505050565b601460009054906101000a900460ff1681565b60085481565b612108612951565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612197576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161218e906148bc565b60405180910390fd5b6001601160016101000a81548160ff0219169083151502179055506001601160026101000a81548160ff02191690831515021790555042600e81905550565b60006121e0612951565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461226f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612266906148bc565b60405180910390fd5b60018211156122b3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122aa90614c4f565b60405180910390fd5b6064826122be61116c565b6122c8919061499d565b6122d29190614a0e565b60098190555060019050919050565b60155481565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b60095481565b60175481565b612382612951565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612411576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612408906148bc565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603612480576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161247790614ce1565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a380600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b612548612951565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146125d7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125ce906148bc565b60405180910390fd5b60005b8151811015612668576001602060008484815181106125fc576125fb614d01565b5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550808061266090614d30565b9150506125da565b5050565b601b5481565b600a5481565b60136020528060005260406000206000915054906101000a900460ff1681565b60006126a2612951565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612731576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612728906148bc565b60405180910390fd5b600f546010546127419190614b3d565b4211612782576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161277990614dc4565b60405180910390fd5b6103e88211156127c7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127be90614e56565b60405180910390fd5b4260108190555060003073ffffffffffffffffffffffffffffffffffffffff166370a082317f00000000000000000000000000000000000000000000000000000000000000006040518263ffffffff1660e01b815260040161282991906144d4565b602060405180830381865afa158015612846573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061286a9190614e8b565b90506000612710848361287d919061499d565b6128879190614a0e565b905060008111156128c0576128bf7f000000000000000000000000000000000000000000000000000000000000000061dead83613960565b5b60007f000000000000000000000000000000000000000000000000000000000000000090508073ffffffffffffffffffffffffffffffffffffffff1663fff6cae96040518163ffffffff1660e01b8152600401600060405180830381600087803b15801561292d57600080fd5b505af1158015612941573d6000803e3d6000fd5b5050505060019350505050919050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036129c8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016129bf90614f2a565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612a37576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a2e90614fbc565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92583604051612b159190614457565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612b91576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b889061504e565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612c00576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612bf7906150e0565b60405180910390fd5b601360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16158015612ca45750601360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b612ce3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612cda9061514c565b60405180910390fd5b60008103612cfc57612cf783836000613960565b613899565b601160009054906101000a900460ff16156133dd57612d19611c03565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614158015612d875750612d57611c03565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015612dc05750600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015612dfa575061dead73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015612e135750600560149054906101000a900460ff16155b156133dc57601160019054906101000a900460ff16612f2b57602060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680612ecd5750602060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b80612f215750602060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b612f2a57600080fd5b5b601460009054906101000a900460ff16156130f357612f48611c03565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614158015612fcf57507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b801561302757507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b156130f25743601260003273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054106130ad576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016130a490615204565b60405180910390fd5b43601260003273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b5b602360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156131965750602260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b1561323d576008548111156131e0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016131d790615296565b60405180910390fd5b600a546131ec83611750565b826131f79190614b3d565b1115613238576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161322f90615302565b60405180910390fd5b6133db565b602360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156132e05750602260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b1561332f5760085481111561332a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161332190615394565b60405180910390fd5b6133da565b602260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff166133d957600a5461338c83611750565b826133979190614b3d565b11156133d8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016133cf90615302565b60405180910390fd5b5b5b5b5b5b60006133e830611750565b90506000600954821015905080801561340d5750601160029054906101000a900460ff165b80156134265750600560149054906101000a900460ff16155b801561347c5750602360008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b80156134d25750602160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b80156135285750602160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b1561356c576001600560146101000a81548160ff021916908315150217905550613550613bf3565b6000600560146101000a81548160ff0219169083151502179055505b6000600560149054906101000a900460ff16159050602160008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16806136225750602160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b1561362c57600090505b6000811561388957602360008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16801561368f57506000601954115b1561374e576064601954866136a4919061499d565b6136ae9190614a0e565b9050601954601b54826136c1919061499d565b6136cb9190614a0e565b601e60008282546136dc9190614b3d565b92505081905550601954601c54826136f4919061499d565b6136fe9190614a0e565b601f600082825461370f9190614b3d565b92505081905550601954601a5482613727919061499d565b6137319190614a0e565b601d60008282546137429190614b3d565b92505081905550613865565b602360008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156137a957506000601554115b15613864576064601554866137be919061499d565b6137c89190614a0e565b9050601554601754826137db919061499d565b6137e59190614a0e565b601e60008282546137f69190614b3d565b925050819055506015546018548261380e919061499d565b6138189190614a0e565b601f60008282546138299190614b3d565b9250508190555060155460165482613841919061499d565b61384b9190614a0e565b601d600082825461385c9190614b3d565b925050819055505b5b600081111561387a57613879873083613960565b5b808561388691906153b4565b94505b613894878787613960565b505050505b505050565b60008383111582906138e6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016138dd9190614221565b60405180910390fd5b50600083856138f591906153b4565b9050809150509392505050565b60008082846139119190614b3d565b905083811015613956576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161394d90615434565b60405180910390fd5b8091505092915050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036139cf576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016139c69061504e565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603613a3e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613a35906150e0565b60405180910390fd5b613a49838383613e73565b613ab4816040518060600160405280602681526020016156e4602691396000808773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461389e9092919063ffffffff16565b6000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550613b47816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461390290919063ffffffff16565b6000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051613be69190614457565b60405180910390a3505050565b6000613bfe30611750565b90506000601f54601d54601e54613c159190614b3d565b613c1f9190614b3d565b9050600080831480613c315750600082145b15613c3e57505050613e71565b6014600954613c4d919061499d565b831115613c66576014600954613c63919061499d565b92505b6000600283601e5486613c79919061499d565b613c839190614a0e565b613c8d9190614a0e565b905060008185613c9d91906153b4565b90506000479050613cad82613e78565b60008147613cbb91906153b4565b9050600086601d5483613cce919061499d565b613cd89190614a0e565b9050600087601f5484613ceb919061499d565b613cf59190614a0e565b90506000818385613d0691906153b4565b613d1091906153b4565b90506000601e819055506000601d819055506000601f81905550600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1682604051613d7090615485565b60006040518083038185875af1925050503d8060008114613dad576040519150601f19603f3d011682016040523d82523d6000602084013e613db2565b606091505b505080985050600087118015613dc85750600081115b15613dd857613dd787826140b5565b5b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1647604051613e1e90615485565b60006040518083038185875af1925050503d8060008114613e5b576040519150601f19603f3d011682016040523d82523d6000602084013e613e60565b606091505b505080985050505050505050505050505b565b505050565b6000600267ffffffffffffffff811115613e9557613e94614684565b5b604051908082528060200260200182016040528015613ec35781602001602082028036833780820191505090505b5090503081600081518110613edb57613eda614d01565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015613f80573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613fa491906154af565b81600181518110613fb857613fb7614d01565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505061401d307f000000000000000000000000000000000000000000000000000000000000000084612959565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b815260040161407f9594939291906155d5565b600060405180830381600087803b15801561409957600080fd5b505af11580156140ad573d6000803e3d6000fd5b505050505050565b6140e0307f000000000000000000000000000000000000000000000000000000000000000084612959565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663f305d71982308560008061dead426040518863ffffffff1660e01b81526004016141479695949392919061562f565b60606040518083038185885af1158015614165573d6000803e3d6000fd5b50505050506040513d601f19601f8201168201806040525081019061418a9190615690565b5050505050565b600081519050919050565b600082825260208201905092915050565b60005b838110156141cb5780820151818401526020810190506141b0565b60008484015250505050565b6000601f19601f8301169050919050565b60006141f382614191565b6141fd818561419c565b935061420d8185602086016141ad565b614216816141d7565b840191505092915050565b6000602082019050818103600083015261423b81846141e8565b905092915050565b6000604051905090565b600080fd5b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600061428282614257565b9050919050565b61429281614277565b811461429d57600080fd5b50565b6000813590506142af81614289565b92915050565b6000819050919050565b6142c8816142b5565b81146142d357600080fd5b50565b6000813590506142e5816142bf565b92915050565b600080604083850312156143025761430161424d565b5b6000614310858286016142a0565b9250506020614321858286016142d6565b9150509250929050565b60008115159050919050565b6143408161432b565b82525050565b600060208201905061435b6000830184614337565b92915050565b6000602082840312156143775761437661424d565b5b6000614385848285016142a0565b91505092915050565b600080604083850312156143a5576143a461424d565b5b60006143b3858286016142d6565b92505060206143c4858286016142d6565b9150509250929050565b6000819050919050565b60006143f36143ee6143e984614257565b6143ce565b614257565b9050919050565b6000614405826143d8565b9050919050565b6000614417826143fa565b9050919050565b6144278161440c565b82525050565b6000602082019050614442600083018461441e565b92915050565b614451816142b5565b82525050565b600060208201905061446c6000830184614448565b92915050565b60008060006060848603121561448b5761448a61424d565b5b6000614499868287016142a0565b93505060206144aa868287016142a0565b92505060406144bb868287016142d6565b9150509250925092565b6144ce81614277565b82525050565b60006020820190506144e960008301846144c5565b92915050565b600060ff82169050919050565b614505816144ef565b82525050565b600060208201905061452060008301846144fc565b92915050565b61452f8161432b565b811461453a57600080fd5b50565b60008135905061454c81614526565b92915050565b600080604083850312156145695761456861424d565b5b6000614577858286016142a0565b92505060206145888582860161453d565b9150509250929050565b6000806000606084860312156145ab576145aa61424d565b5b60006145b9868287016142d6565b93505060206145ca868287016142d6565b92505060406145db868287016142d6565b9150509250925092565b6000602082840312156145fb576145fa61424d565b5b60006146098482850161453d565b91505092915050565b6000602082840312156146285761462761424d565b5b6000614636848285016142d6565b91505092915050565b600080604083850312156146565761465561424d565b5b6000614664858286016142a0565b9250506020614675858286016142a0565b9150509250929050565b600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6146bc826141d7565b810181811067ffffffffffffffff821117156146db576146da614684565b5b80604052505050565b60006146ee614243565b90506146fa82826146b3565b919050565b600067ffffffffffffffff82111561471a57614719614684565b5b602082029050602081019050919050565b600080fd5b600061474361473e846146ff565b6146e4565b905080838252602082019050602084028301858111156147665761476561472b565b5b835b8181101561478f578061477b88826142a0565b845260208401935050602081019050614768565b5050509392505050565b600082601f8301126147ae576147ad61467f565b5b81356147be848260208601614730565b91505092915050565b6000602082840312156147dd576147dc61424d565b5b600082013567ffffffffffffffff8111156147fb576147fa614252565b5b61480784828501614799565b91505092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168061485757607f821691505b60208210810361486a57614869614810565b5b50919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b60006148a660208361419c565b91506148b182614870565b602082019050919050565b600060208201905081810360008301526148d581614899565b9050919050565b7f43616e6e6f7420736574206d61785472616e73616374696f6e416d6f756e742060008201527f6c6f776572207468616e20312500000000000000000000000000000000000000602082015250565b6000614938602d8361419c565b9150614943826148dc565b604082019050919050565b600060208201905081810360008301526149678161492b565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60006149a8826142b5565b91506149b3836142b5565b92508282026149c1816142b5565b915082820484148315176149d8576149d761496e565b5b5092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000614a19826142b5565b9150614a24836142b5565b925082614a3457614a336149df565b5b828204905092915050565b7f43616e6e6f7420736574206d617857616c6c6574206c6f776572207468616e2060008201527f3125000000000000000000000000000000000000000000000000000000000000602082015250565b6000614a9b60228361419c565b9150614aa682614a3f565b604082019050919050565b60006020820190508181036000830152614aca81614a8e565b9050919050565b7f416464726573732073686f756c64206e6f742062652030000000000000000000600082015250565b6000614b0760178361419c565b9150614b1282614ad1565b602082019050919050565b60006020820190508181036000830152614b3681614afa565b9050919050565b6000614b48826142b5565b9150614b53836142b5565b9250828201905080821115614b6b57614b6a61496e565b5b92915050565b7f4d757374206b656570206665657320617420343025206f72206c657373000000600082015250565b6000614ba7601d8361419c565b9150614bb282614b71565b602082019050919050565b60006020820190508181036000830152614bd681614b9a565b9050919050565b7f5377617020616d6f756e742063616e6e6f74206265206869676865722074686160008201527f6e20312520746f74616c20737570706c792e0000000000000000000000000000602082015250565b6000614c3960328361419c565b9150614c4482614bdd565b604082019050919050565b60006020820190508181036000830152614c6881614c2c565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000614ccb60268361419c565b9150614cd682614c6f565b604082019050919050565b60006020820190508181036000830152614cfa81614cbe565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6000614d3b826142b5565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203614d6d57614d6c61496e565b5b600182019050919050565b7f4d757374207761697420666f7220636f6f6c646f776e20746f2066696e697368600082015250565b6000614dae60208361419c565b9150614db982614d78565b602082019050919050565b60006020820190508181036000830152614ddd81614da1565b9050919050565b7f4d6179206e6f74206e756b65206d6f7265207468616e20313025206f6620746f60008201527f6b656e7320696e204c5000000000000000000000000000000000000000000000602082015250565b6000614e40602a8361419c565b9150614e4b82614de4565b604082019050919050565b60006020820190508181036000830152614e6f81614e33565b9050919050565b600081519050614e85816142bf565b92915050565b600060208284031215614ea157614ea061424d565b5b6000614eaf84828501614e76565b91505092915050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b6000614f1460248361419c565b9150614f1f82614eb8565b604082019050919050565b60006020820190508181036000830152614f4381614f07565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b6000614fa660228361419c565b9150614fb182614f4a565b604082019050919050565b60006020820190508181036000830152614fd581614f99565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b600061503860258361419c565b915061504382614fdc565b604082019050919050565b600060208201905081810360008301526150678161502b565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b60006150ca60238361419c565b91506150d58261506e565b604082019050919050565b600060208201905081810360008301526150f9816150bd565b9050919050565b7f426c61636b6c6973746564000000000000000000000000000000000000000000600082015250565b6000615136600b8361419c565b915061514182615100565b602082019050919050565b6000602082019050818103600083015261516581615129565b9050919050565b7f5f7472616e736665723a3a205472616e736665722044656c617920656e61626c60008201527f65642e20204f6e6c79206f6e652070757263686173652070657220626c6f636b60208201527f20616c6c6f7765642e0000000000000000000000000000000000000000000000604082015250565b60006151ee60498361419c565b91506151f98261516c565b606082019050919050565b6000602082019050818103600083015261521d816151e1565b9050919050565b7f427579207472616e7366657220616d6f756e742065786365656473207468652060008201527f6d61785472616e73616374696f6e416d6f756e742e0000000000000000000000602082015250565b600061528060358361419c565b915061528b82615224565b604082019050919050565b600060208201905081810360008301526152af81615273565b9050919050565b7f4d61782077616c6c657420657863656564656400000000000000000000000000600082015250565b60006152ec60138361419c565b91506152f7826152b6565b602082019050919050565b6000602082019050818103600083015261531b816152df565b9050919050565b7f53656c6c207472616e7366657220616d6f756e7420657863656564732074686560008201527f206d61785472616e73616374696f6e416d6f756e742e00000000000000000000602082015250565b600061537e60368361419c565b915061538982615322565b604082019050919050565b600060208201905081810360008301526153ad81615371565b9050919050565b60006153bf826142b5565b91506153ca836142b5565b92508282039050818111156153e2576153e161496e565b5b92915050565b7f536166654d6174683a206164646974696f6e206f766572666c6f770000000000600082015250565b600061541e601b8361419c565b9150615429826153e8565b602082019050919050565b6000602082019050818103600083015261544d81615411565b9050919050565b600081905092915050565b50565b600061546f600083615454565b915061547a8261545f565b600082019050919050565b600061549082615462565b9150819050919050565b6000815190506154a981614289565b92915050565b6000602082840312156154c5576154c461424d565b5b60006154d38482850161549a565b91505092915050565b6000819050919050565b60006155016154fc6154f7846154dc565b6143ce565b6142b5565b9050919050565b615511816154e6565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b61554c81614277565b82525050565b600061555e8383615543565b60208301905092915050565b6000602082019050919050565b600061558282615517565b61558c8185615522565b935061559783615533565b8060005b838110156155c85781516155af8882615552565b97506155ba8361556a565b92505060018101905061559b565b5085935050505092915050565b600060a0820190506155ea6000830188614448565b6155f76020830187615508565b81810360408301526156098186615577565b905061561860608301856144c5565b6156256080830184614448565b9695505050505050565b600060c08201905061564460008301896144c5565b6156516020830188614448565b61565e6040830187615508565b61566b6060830186615508565b61567860808301856144c5565b61568560a0830184614448565b979650505050505050565b6000806000606084860312156156a9576156a861424d565b5b60006156b786828701614e76565b93505060206156c886828701614e76565b92505060406156d986828701614e76565b915050925092509256fe45524332303a207472616e7366657220616d6f756e7420657863656564732062616c616e636545524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa264697066735822122088c88ba47f643adf8346044cf4710fa7bff86e324b8eddf5641d459d49c4c89764736f6c63430008130033

Deployed Bytecode

0x6080604052600436106103b15760003560e01c80638151cf40116101e7578063c02466681161010d578063e2f45605116100a0578063f63743421161006f578063f637434214610e15578063f8b45b0514610e40578063fe575a8714610e6b578063fe72b27a14610ea8576103b8565b8063e2f4560514610d6d578063f11a24d314610d98578063f2fde38b14610dc3578063f421764814610dec576103b8565b8063c9567bf9116100dc578063c9567bf914610cb1578063d257b34f14610cc8578063d85ba06314610d05578063dd62ed3e14610d30576103b8565b8063c024666814610c09578063c17b5b8c14610c32578063c876d0b914610c5b578063c8c8ebe414610c86576103b8565b80639ec22c0e11610185578063a4c82a0011610154578063a4c82a0014610b39578063a9059cbb14610b64578063b62496f514610ba1578063bbc0c74214610bde576103b8565b80639ec22c0e14610a7b5780639fccce3214610aa6578063a0d82dc514610ad1578063a457c2d714610afc576103b8565b806392136913116101c157806392136913146109d1578063924de9b7146109fc57806395d89b4114610a255780639c3b4fdc14610a50576103b8565b80638151cf40146109525780638da5cb5b1461097b5780638ea5220f146109a6576103b8565b806336271741116102d75780636ddd17131161026a5780637571336a116102395780637571336a146108aa57806375f0a874146108d35780637bce5a04146108fe5780638095d56414610929576103b8565b80636ddd1713146107ee5780636f9170f61461081957806370a0823114610856578063715018a614610893576103b8565b80634d171779116102a65780634d171779146107345780634f0e81cc1461075d5780634fbee193146107865780636a486a8e146107c3576103b8565b8063362717411461067657806339509351146106a157806349bd5a5e146106de5780634a62bb6514610709576103b8565b8063199ffc721161034f57806327c8f8351161031e57806327c8f835146105ca5780632c3e486c146105f55780632e82f1a014610620578063313ce5671461064b576103b8565b8063199ffc721461050c5780631a8145bb146105375780631f3fed8f1461056257806323b872dd1461058d576103b8565b806311a582c31161038b57806311a582c3146104625780631694505e1461048b57806318160ddd146104b6578063184c16c5146104e1576103b8565b806306fdde03146103bd578063095ea7b3146103e857806310d5de5314610425576103b8565b366103b857005b600080fd5b3480156103c957600080fd5b506103d2610ee5565b6040516103df9190614221565b60405180910390f35b3480156103f457600080fd5b5061040f600480360381019061040a91906142eb565b610f77565b60405161041c9190614346565b60405180910390f35b34801561043157600080fd5b5061044c60048036038101906104479190614361565b610f95565b6040516104599190614346565b60405180910390f35b34801561046e57600080fd5b506104896004803603810190610484919061438e565b610fb5565b005b34801561049757600080fd5b506104a0611148565b6040516104ad919061442d565b60405180910390f35b3480156104c257600080fd5b506104cb61116c565b6040516104d89190614457565b60405180910390f35b3480156104ed57600080fd5b506104f6611176565b6040516105039190614457565b60405180910390f35b34801561051857600080fd5b5061052161117c565b60405161052e9190614457565b60405180910390f35b34801561054357600080fd5b5061054c611182565b6040516105599190614457565b60405180910390f35b34801561056e57600080fd5b50610577611188565b6040516105849190614457565b60405180910390f35b34801561059957600080fd5b506105b460048036038101906105af9190614472565b61118e565b6040516105c19190614346565b60405180910390f35b3480156105d657600080fd5b506105df611267565b6040516105ec91906144d4565b60405180910390f35b34801561060157600080fd5b5061060a61126d565b6040516106179190614457565b60405180910390f35b34801561062c57600080fd5b50610635611273565b6040516106429190614346565b60405180910390f35b34801561065757600080fd5b50610660611286565b60405161066d919061450b565b60405180910390f35b34801561068257600080fd5b5061068b61128f565b6040516106989190614346565b60405180910390f35b3480156106ad57600080fd5b506106c860048036038101906106c391906142eb565b611365565b6040516106d59190614346565b60405180910390f35b3480156106ea57600080fd5b506106f3611418565b60405161070091906144d4565b60405180910390f35b34801561071557600080fd5b5061071e61143c565b60405161072b9190614346565b60405180910390f35b34801561074057600080fd5b5061075b60048036038101906107569190614361565b61144f565b005b34801561076957600080fd5b50610784600480360381019061077f9190614552565b61152a565b005b34801561079257600080fd5b506107ad60048036038101906107a89190614361565b61168b565b6040516107ba9190614346565b60405180910390f35b3480156107cf57600080fd5b506107d86116e1565b6040516107e59190614457565b60405180910390f35b3480156107fa57600080fd5b506108036116e7565b6040516108109190614346565b60405180910390f35b34801561082557600080fd5b50610840600480360381019061083b9190614361565b6116fa565b60405161084d9190614346565b60405180910390f35b34801561086257600080fd5b5061087d60048036038101906108789190614361565b611750565b60405161088a9190614457565b60405180910390f35b34801561089f57600080fd5b506108a8611798565b005b3480156108b657600080fd5b506108d160048036038101906108cc9190614552565b6118f0565b005b3480156108df57600080fd5b506108e86119e2565b6040516108f591906144d4565b60405180910390f35b34801561090a57600080fd5b50610913611a08565b6040516109209190614457565b60405180910390f35b34801561093557600080fd5b50610950600480360381019061094b9190614592565b611a0e565b005b34801561095e57600080fd5b5061097960048036038101906109749190614361565b611b28565b005b34801561098757600080fd5b50610990611c03565b60405161099d91906144d4565b60405180910390f35b3480156109b257600080fd5b506109bb611c2d565b6040516109c891906144d4565b60405180910390f35b3480156109dd57600080fd5b506109e6611c53565b6040516109f39190614457565b60405180910390f35b348015610a0857600080fd5b50610a236004803603810190610a1e91906145e5565b611c59565b005b348015610a3157600080fd5b50610a3a611d0d565b604051610a479190614221565b60405180910390f35b348015610a5c57600080fd5b50610a65611d9f565b604051610a729190614457565b60405180910390f35b348015610a8757600080fd5b50610a90611da5565b604051610a9d9190614457565b60405180910390f35b348015610ab257600080fd5b50610abb611dab565b604051610ac89190614457565b60405180910390f35b348015610add57600080fd5b50610ae6611db1565b604051610af39190614457565b60405180910390f35b348015610b0857600080fd5b50610b236004803603810190610b1e91906142eb565b611db7565b604051610b309190614346565b60405180910390f35b348015610b4557600080fd5b50610b4e611e84565b604051610b5b9190614457565b60405180910390f35b348015610b7057600080fd5b50610b8b6004803603810190610b8691906142eb565b611e8a565b604051610b989190614346565b60405180910390f35b348015610bad57600080fd5b50610bc86004803603810190610bc39190614361565b611ea8565b604051610bd59190614346565b60405180910390f35b348015610bea57600080fd5b50610bf3611ec8565b604051610c009190614346565b60405180910390f35b348015610c1557600080fd5b50610c306004803603810190610c2b9190614552565b611edb565b005b348015610c3e57600080fd5b50610c596004803603810190610c549190614592565b611fcd565b005b348015610c6757600080fd5b50610c706120e7565b604051610c7d9190614346565b60405180910390f35b348015610c9257600080fd5b50610c9b6120fa565b604051610ca89190614457565b60405180910390f35b348015610cbd57600080fd5b50610cc6612100565b005b348015610cd457600080fd5b50610cef6004803603810190610cea9190614612565b6121d6565b604051610cfc9190614346565b60405180910390f35b348015610d1157600080fd5b50610d1a6122e1565b604051610d279190614457565b60405180910390f35b348015610d3c57600080fd5b50610d576004803603810190610d52919061463f565b6122e7565b604051610d649190614457565b60405180910390f35b348015610d7957600080fd5b50610d8261236e565b604051610d8f9190614457565b60405180910390f35b348015610da457600080fd5b50610dad612374565b604051610dba9190614457565b60405180910390f35b348015610dcf57600080fd5b50610dea6004803603810190610de59190614361565b61237a565b005b348015610df857600080fd5b50610e136004803603810190610e0e91906147c7565b612540565b005b348015610e2157600080fd5b50610e2a61266c565b604051610e379190614457565b60405180910390f35b348015610e4c57600080fd5b50610e55612672565b604051610e629190614457565b60405180910390f35b348015610e7757600080fd5b50610e926004803603810190610e8d9190614361565b612678565b604051610e9f9190614346565b60405180910390f35b348015610eb457600080fd5b50610ecf6004803603810190610eca9190614612565b612698565b604051610edc9190614346565b60405180910390f35b606060038054610ef49061483f565b80601f0160208091040260200160405190810160405280929190818152602001828054610f209061483f565b8015610f6d5780601f10610f4257610100808354040283529160200191610f6d565b820191906000526020600020905b815481529060010190602001808311610f5057829003601f168201915b5050505050905090565b6000610f8b610f84612951565b8484612959565b6001905092915050565b60226020528060005260406000206000915054906101000a900460ff1681565b610fbd612951565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461104c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611043906148bc565b60405180910390fd5b6001821015611090576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110879061494e565b60405180910390fd5b670de0b6b3a76400006064836110a461116c565b6110ae919061499d565b6110b89190614a0e565b6110c29190614a0e565b600881905550600181101561110c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161110390614ab1565b60405180910390fd5b670de0b6b3a764000060648261112061116c565b61112a919061499d565b6111349190614a0e565b61113e9190614a0e565b600a819055505050565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d81565b6000600254905090565b600f5481565b600b5481565b601e5481565b601d5481565b600061119b848484612b22565b61125c846111a7612951565b6112578560405180606001604052806028815260200161570a60289139600160008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600061120d612951565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461389e9092919063ffffffff16565b612959565b600190509392505050565b61dead81565b600d5481565b600c60009054906101000a900460ff1681565b60006012905090565b6000611299612951565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611328576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161131f906148bc565b60405180910390fd5b6000601160006101000a81548160ff0219169083151502179055506000601460006101000a81548160ff0219169083151502179055506001905090565b600061140e611372612951565b846114098560016000611383612951565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461390290919063ffffffff16565b612959565b6001905092915050565b7f0000000000000000000000001b674202d148a558bc18a4b456851aa3324af1c281565b601160009054906101000a900460ff1681565b611457612951565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146114e6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114dd906148bc565b60405180910390fd5b80600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b611532612951565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146115c1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115b8906148bc565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611630576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161162790614b1d565b60405180910390fd5b80601360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b6000602160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b60195481565b601160029054906101000a900460ff1681565b6000602060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6117a0612951565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461182f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611826906148bc565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a36000600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b6118f8612951565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611987576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161197e906148bc565b60405180910390fd5b80602260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60165481565b611a16612951565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611aa5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a9c906148bc565b60405180910390fd5b826016819055508160178190555080601881905550601854601754601654611acd9190614b3d565b611ad79190614b3d565b60158190555060286015541115611b23576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b1a90614bbd565b60405180910390fd5b505050565b611b30612951565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611bbf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bb6906148bc565b60405180910390fd5b80600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b601a5481565b611c61612951565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611cf0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ce7906148bc565b60405180910390fd5b80601160026101000a81548160ff02191690831515021790555050565b606060048054611d1c9061483f565b80601f0160208091040260200160405190810160405280929190818152602001828054611d489061483f565b8015611d955780601f10611d6a57610100808354040283529160200191611d95565b820191906000526020600020905b815481529060010190602001808311611d7857829003601f168201915b5050505050905090565b60185481565b60105481565b601f5481565b601c5481565b6000611e7a611dc4612951565b84611e75856040518060600160405280602581526020016157326025913960016000611dee612951565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461389e9092919063ffffffff16565b612959565b6001905092915050565b600e5481565b6000611e9e611e97612951565b8484612b22565b6001905092915050565b60236020528060005260406000206000915054906101000a900460ff1681565b601160019054906101000a900460ff1681565b611ee3612951565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611f72576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f69906148bc565b60405180910390fd5b80602160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b611fd5612951565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612064576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161205b906148bc565b60405180910390fd5b82601a8190555081601b8190555080601c81905550601c54601b54601a5461208c9190614b3d565b6120969190614b3d565b601981905550602860195411156120e2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120d990614bbd565b60405180910390fd5b505050565b601460009054906101000a900460ff1681565b60085481565b612108612951565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612197576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161218e906148bc565b60405180910390fd5b6001601160016101000a81548160ff0219169083151502179055506001601160026101000a81548160ff02191690831515021790555042600e81905550565b60006121e0612951565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461226f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612266906148bc565b60405180910390fd5b60018211156122b3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122aa90614c4f565b60405180910390fd5b6064826122be61116c565b6122c8919061499d565b6122d29190614a0e565b60098190555060019050919050565b60155481565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b60095481565b60175481565b612382612951565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612411576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612408906148bc565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603612480576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161247790614ce1565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a380600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b612548612951565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146125d7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125ce906148bc565b60405180910390fd5b60005b8151811015612668576001602060008484815181106125fc576125fb614d01565b5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550808061266090614d30565b9150506125da565b5050565b601b5481565b600a5481565b60136020528060005260406000206000915054906101000a900460ff1681565b60006126a2612951565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612731576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612728906148bc565b60405180910390fd5b600f546010546127419190614b3d565b4211612782576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161277990614dc4565b60405180910390fd5b6103e88211156127c7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127be90614e56565b60405180910390fd5b4260108190555060003073ffffffffffffffffffffffffffffffffffffffff166370a082317f0000000000000000000000001b674202d148a558bc18a4b456851aa3324af1c26040518263ffffffff1660e01b815260040161282991906144d4565b602060405180830381865afa158015612846573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061286a9190614e8b565b90506000612710848361287d919061499d565b6128879190614a0e565b905060008111156128c0576128bf7f0000000000000000000000001b674202d148a558bc18a4b456851aa3324af1c261dead83613960565b5b60007f0000000000000000000000001b674202d148a558bc18a4b456851aa3324af1c290508073ffffffffffffffffffffffffffffffffffffffff1663fff6cae96040518163ffffffff1660e01b8152600401600060405180830381600087803b15801561292d57600080fd5b505af1158015612941573d6000803e3d6000fd5b5050505060019350505050919050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036129c8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016129bf90614f2a565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612a37576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a2e90614fbc565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92583604051612b159190614457565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612b91576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b889061504e565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612c00576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612bf7906150e0565b60405180910390fd5b601360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16158015612ca45750601360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b612ce3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612cda9061514c565b60405180910390fd5b60008103612cfc57612cf783836000613960565b613899565b601160009054906101000a900460ff16156133dd57612d19611c03565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614158015612d875750612d57611c03565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015612dc05750600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015612dfa575061dead73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015612e135750600560149054906101000a900460ff16155b156133dc57601160019054906101000a900460ff16612f2b57602060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680612ecd5750602060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b80612f215750602060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b612f2a57600080fd5b5b601460009054906101000a900460ff16156130f357612f48611c03565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614158015612fcf57507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b801561302757507f0000000000000000000000001b674202d148a558bc18a4b456851aa3324af1c273ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b156130f25743601260003273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054106130ad576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016130a490615204565b60405180910390fd5b43601260003273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b5b602360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156131965750602260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b1561323d576008548111156131e0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016131d790615296565b60405180910390fd5b600a546131ec83611750565b826131f79190614b3d565b1115613238576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161322f90615302565b60405180910390fd5b6133db565b602360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156132e05750602260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b1561332f5760085481111561332a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161332190615394565b60405180910390fd5b6133da565b602260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff166133d957600a5461338c83611750565b826133979190614b3d565b11156133d8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016133cf90615302565b60405180910390fd5b5b5b5b5b5b60006133e830611750565b90506000600954821015905080801561340d5750601160029054906101000a900460ff165b80156134265750600560149054906101000a900460ff16155b801561347c5750602360008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b80156134d25750602160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b80156135285750602160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b1561356c576001600560146101000a81548160ff021916908315150217905550613550613bf3565b6000600560146101000a81548160ff0219169083151502179055505b6000600560149054906101000a900460ff16159050602160008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16806136225750602160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b1561362c57600090505b6000811561388957602360008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16801561368f57506000601954115b1561374e576064601954866136a4919061499d565b6136ae9190614a0e565b9050601954601b54826136c1919061499d565b6136cb9190614a0e565b601e60008282546136dc9190614b3d565b92505081905550601954601c54826136f4919061499d565b6136fe9190614a0e565b601f600082825461370f9190614b3d565b92505081905550601954601a5482613727919061499d565b6137319190614a0e565b601d60008282546137429190614b3d565b92505081905550613865565b602360008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156137a957506000601554115b15613864576064601554866137be919061499d565b6137c89190614a0e565b9050601554601754826137db919061499d565b6137e59190614a0e565b601e60008282546137f69190614b3d565b925050819055506015546018548261380e919061499d565b6138189190614a0e565b601f60008282546138299190614b3d565b9250508190555060155460165482613841919061499d565b61384b9190614a0e565b601d600082825461385c9190614b3d565b925050819055505b5b600081111561387a57613879873083613960565b5b808561388691906153b4565b94505b613894878787613960565b505050505b505050565b60008383111582906138e6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016138dd9190614221565b60405180910390fd5b50600083856138f591906153b4565b9050809150509392505050565b60008082846139119190614b3d565b905083811015613956576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161394d90615434565b60405180910390fd5b8091505092915050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036139cf576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016139c69061504e565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603613a3e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613a35906150e0565b60405180910390fd5b613a49838383613e73565b613ab4816040518060600160405280602681526020016156e4602691396000808773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461389e9092919063ffffffff16565b6000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550613b47816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461390290919063ffffffff16565b6000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051613be69190614457565b60405180910390a3505050565b6000613bfe30611750565b90506000601f54601d54601e54613c159190614b3d565b613c1f9190614b3d565b9050600080831480613c315750600082145b15613c3e57505050613e71565b6014600954613c4d919061499d565b831115613c66576014600954613c63919061499d565b92505b6000600283601e5486613c79919061499d565b613c839190614a0e565b613c8d9190614a0e565b905060008185613c9d91906153b4565b90506000479050613cad82613e78565b60008147613cbb91906153b4565b9050600086601d5483613cce919061499d565b613cd89190614a0e565b9050600087601f5484613ceb919061499d565b613cf59190614a0e565b90506000818385613d0691906153b4565b613d1091906153b4565b90506000601e819055506000601d819055506000601f81905550600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1682604051613d7090615485565b60006040518083038185875af1925050503d8060008114613dad576040519150601f19603f3d011682016040523d82523d6000602084013e613db2565b606091505b505080985050600087118015613dc85750600081115b15613dd857613dd787826140b5565b5b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1647604051613e1e90615485565b60006040518083038185875af1925050503d8060008114613e5b576040519150601f19603f3d011682016040523d82523d6000602084013e613e60565b606091505b505080985050505050505050505050505b565b505050565b6000600267ffffffffffffffff811115613e9557613e94614684565b5b604051908082528060200260200182016040528015613ec35781602001602082028036833780820191505090505b5090503081600081518110613edb57613eda614d01565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015613f80573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613fa491906154af565b81600181518110613fb857613fb7614d01565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505061401d307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d84612959565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b815260040161407f9594939291906155d5565b600060405180830381600087803b15801561409957600080fd5b505af11580156140ad573d6000803e3d6000fd5b505050505050565b6140e0307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d84612959565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663f305d71982308560008061dead426040518863ffffffff1660e01b81526004016141479695949392919061562f565b60606040518083038185885af1158015614165573d6000803e3d6000fd5b50505050506040513d601f19601f8201168201806040525081019061418a9190615690565b5050505050565b600081519050919050565b600082825260208201905092915050565b60005b838110156141cb5780820151818401526020810190506141b0565b60008484015250505050565b6000601f19601f8301169050919050565b60006141f382614191565b6141fd818561419c565b935061420d8185602086016141ad565b614216816141d7565b840191505092915050565b6000602082019050818103600083015261423b81846141e8565b905092915050565b6000604051905090565b600080fd5b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600061428282614257565b9050919050565b61429281614277565b811461429d57600080fd5b50565b6000813590506142af81614289565b92915050565b6000819050919050565b6142c8816142b5565b81146142d357600080fd5b50565b6000813590506142e5816142bf565b92915050565b600080604083850312156143025761430161424d565b5b6000614310858286016142a0565b9250506020614321858286016142d6565b9150509250929050565b60008115159050919050565b6143408161432b565b82525050565b600060208201905061435b6000830184614337565b92915050565b6000602082840312156143775761437661424d565b5b6000614385848285016142a0565b91505092915050565b600080604083850312156143a5576143a461424d565b5b60006143b3858286016142d6565b92505060206143c4858286016142d6565b9150509250929050565b6000819050919050565b60006143f36143ee6143e984614257565b6143ce565b614257565b9050919050565b6000614405826143d8565b9050919050565b6000614417826143fa565b9050919050565b6144278161440c565b82525050565b6000602082019050614442600083018461441e565b92915050565b614451816142b5565b82525050565b600060208201905061446c6000830184614448565b92915050565b60008060006060848603121561448b5761448a61424d565b5b6000614499868287016142a0565b93505060206144aa868287016142a0565b92505060406144bb868287016142d6565b9150509250925092565b6144ce81614277565b82525050565b60006020820190506144e960008301846144c5565b92915050565b600060ff82169050919050565b614505816144ef565b82525050565b600060208201905061452060008301846144fc565b92915050565b61452f8161432b565b811461453a57600080fd5b50565b60008135905061454c81614526565b92915050565b600080604083850312156145695761456861424d565b5b6000614577858286016142a0565b92505060206145888582860161453d565b9150509250929050565b6000806000606084860312156145ab576145aa61424d565b5b60006145b9868287016142d6565b93505060206145ca868287016142d6565b92505060406145db868287016142d6565b9150509250925092565b6000602082840312156145fb576145fa61424d565b5b60006146098482850161453d565b91505092915050565b6000602082840312156146285761462761424d565b5b6000614636848285016142d6565b91505092915050565b600080604083850312156146565761465561424d565b5b6000614664858286016142a0565b9250506020614675858286016142a0565b9150509250929050565b600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6146bc826141d7565b810181811067ffffffffffffffff821117156146db576146da614684565b5b80604052505050565b60006146ee614243565b90506146fa82826146b3565b919050565b600067ffffffffffffffff82111561471a57614719614684565b5b602082029050602081019050919050565b600080fd5b600061474361473e846146ff565b6146e4565b905080838252602082019050602084028301858111156147665761476561472b565b5b835b8181101561478f578061477b88826142a0565b845260208401935050602081019050614768565b5050509392505050565b600082601f8301126147ae576147ad61467f565b5b81356147be848260208601614730565b91505092915050565b6000602082840312156147dd576147dc61424d565b5b600082013567ffffffffffffffff8111156147fb576147fa614252565b5b61480784828501614799565b91505092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168061485757607f821691505b60208210810361486a57614869614810565b5b50919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b60006148a660208361419c565b91506148b182614870565b602082019050919050565b600060208201905081810360008301526148d581614899565b9050919050565b7f43616e6e6f7420736574206d61785472616e73616374696f6e416d6f756e742060008201527f6c6f776572207468616e20312500000000000000000000000000000000000000602082015250565b6000614938602d8361419c565b9150614943826148dc565b604082019050919050565b600060208201905081810360008301526149678161492b565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60006149a8826142b5565b91506149b3836142b5565b92508282026149c1816142b5565b915082820484148315176149d8576149d761496e565b5b5092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000614a19826142b5565b9150614a24836142b5565b925082614a3457614a336149df565b5b828204905092915050565b7f43616e6e6f7420736574206d617857616c6c6574206c6f776572207468616e2060008201527f3125000000000000000000000000000000000000000000000000000000000000602082015250565b6000614a9b60228361419c565b9150614aa682614a3f565b604082019050919050565b60006020820190508181036000830152614aca81614a8e565b9050919050565b7f416464726573732073686f756c64206e6f742062652030000000000000000000600082015250565b6000614b0760178361419c565b9150614b1282614ad1565b602082019050919050565b60006020820190508181036000830152614b3681614afa565b9050919050565b6000614b48826142b5565b9150614b53836142b5565b9250828201905080821115614b6b57614b6a61496e565b5b92915050565b7f4d757374206b656570206665657320617420343025206f72206c657373000000600082015250565b6000614ba7601d8361419c565b9150614bb282614b71565b602082019050919050565b60006020820190508181036000830152614bd681614b9a565b9050919050565b7f5377617020616d6f756e742063616e6e6f74206265206869676865722074686160008201527f6e20312520746f74616c20737570706c792e0000000000000000000000000000602082015250565b6000614c3960328361419c565b9150614c4482614bdd565b604082019050919050565b60006020820190508181036000830152614c6881614c2c565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000614ccb60268361419c565b9150614cd682614c6f565b604082019050919050565b60006020820190508181036000830152614cfa81614cbe565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6000614d3b826142b5565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203614d6d57614d6c61496e565b5b600182019050919050565b7f4d757374207761697420666f7220636f6f6c646f776e20746f2066696e697368600082015250565b6000614dae60208361419c565b9150614db982614d78565b602082019050919050565b60006020820190508181036000830152614ddd81614da1565b9050919050565b7f4d6179206e6f74206e756b65206d6f7265207468616e20313025206f6620746f60008201527f6b656e7320696e204c5000000000000000000000000000000000000000000000602082015250565b6000614e40602a8361419c565b9150614e4b82614de4565b604082019050919050565b60006020820190508181036000830152614e6f81614e33565b9050919050565b600081519050614e85816142bf565b92915050565b600060208284031215614ea157614ea061424d565b5b6000614eaf84828501614e76565b91505092915050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b6000614f1460248361419c565b9150614f1f82614eb8565b604082019050919050565b60006020820190508181036000830152614f4381614f07565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b6000614fa660228361419c565b9150614fb182614f4a565b604082019050919050565b60006020820190508181036000830152614fd581614f99565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b600061503860258361419c565b915061504382614fdc565b604082019050919050565b600060208201905081810360008301526150678161502b565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b60006150ca60238361419c565b91506150d58261506e565b604082019050919050565b600060208201905081810360008301526150f9816150bd565b9050919050565b7f426c61636b6c6973746564000000000000000000000000000000000000000000600082015250565b6000615136600b8361419c565b915061514182615100565b602082019050919050565b6000602082019050818103600083015261516581615129565b9050919050565b7f5f7472616e736665723a3a205472616e736665722044656c617920656e61626c60008201527f65642e20204f6e6c79206f6e652070757263686173652070657220626c6f636b60208201527f20616c6c6f7765642e0000000000000000000000000000000000000000000000604082015250565b60006151ee60498361419c565b91506151f98261516c565b606082019050919050565b6000602082019050818103600083015261521d816151e1565b9050919050565b7f427579207472616e7366657220616d6f756e742065786365656473207468652060008201527f6d61785472616e73616374696f6e416d6f756e742e0000000000000000000000602082015250565b600061528060358361419c565b915061528b82615224565b604082019050919050565b600060208201905081810360008301526152af81615273565b9050919050565b7f4d61782077616c6c657420657863656564656400000000000000000000000000600082015250565b60006152ec60138361419c565b91506152f7826152b6565b602082019050919050565b6000602082019050818103600083015261531b816152df565b9050919050565b7f53656c6c207472616e7366657220616d6f756e7420657863656564732074686560008201527f206d61785472616e73616374696f6e416d6f756e742e00000000000000000000602082015250565b600061537e60368361419c565b915061538982615322565b604082019050919050565b600060208201905081810360008301526153ad81615371565b9050919050565b60006153bf826142b5565b91506153ca836142b5565b92508282039050818111156153e2576153e161496e565b5b92915050565b7f536166654d6174683a206164646974696f6e206f766572666c6f770000000000600082015250565b600061541e601b8361419c565b9150615429826153e8565b602082019050919050565b6000602082019050818103600083015261544d81615411565b9050919050565b600081905092915050565b50565b600061546f600083615454565b915061547a8261545f565b600082019050919050565b600061549082615462565b9150819050919050565b6000815190506154a981614289565b92915050565b6000602082840312156154c5576154c461424d565b5b60006154d38482850161549a565b91505092915050565b6000819050919050565b60006155016154fc6154f7846154dc565b6143ce565b6142b5565b9050919050565b615511816154e6565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b61554c81614277565b82525050565b600061555e8383615543565b60208301905092915050565b6000602082019050919050565b600061558282615517565b61558c8185615522565b935061559783615533565b8060005b838110156155c85781516155af8882615552565b97506155ba8361556a565b92505060018101905061559b565b5085935050505092915050565b600060a0820190506155ea6000830188614448565b6155f76020830187615508565b81810360408301526156098186615577565b905061561860608301856144c5565b6156256080830184614448565b9695505050505050565b600060c08201905061564460008301896144c5565b6156516020830188614448565b61565e6040830187615508565b61566b6060830186615508565b61567860808301856144c5565b61568560a0830184614448565b979650505050505050565b6000806000606084860312156156a9576156a861424d565b5b60006156b786828701614e76565b93505060206156c886828701614e76565b92505060406156d986828701614e76565b915050925092509256fe45524332303a207472616e7366657220616d6f756e7420657863656564732062616c616e636545524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa264697066735822122088c88ba47f643adf8346044cf4710fa7bff86e324b8eddf5641d459d49c4c89764736f6c63430008130033

Deployed Bytecode Sourcemap

22786:15384:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5106:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;7273:169;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24485:64;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27994:360;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;22827:51;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;6226:108;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23405:47;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23215:36;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24241:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24201;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;7924:355;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22930:53;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23311:45;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23271:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;6068:93;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27484:161;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;8688:218;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22885:38;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23503:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29764:137;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;30161:192;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;30028:125;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24052:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23583:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27108:111;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;6397:127;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19571:148;;;;;;;;;;;;;:::i;:::-;;28362:144;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;23022:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23941;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28719:369;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;29913:107;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;18929:79;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23059:24;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24087:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28606:101;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;5325:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24015:24;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23459:35;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24281:27;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24163:25;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;9409:269;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23363:29;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;6737:175;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24707:58;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23543:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29486:132;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;29100:378;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;23859:39;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23096:35;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27275:153;;;;;;;;;;;;;:::i;:::-;;27719:263;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23907:27;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;6975:151;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23138:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23978:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19874:244;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;26908:192;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;24125:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23178:24;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23806:46;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;37187:980;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5106:100;5160:13;5193:5;5186:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5106:100;:::o;7273:169::-;7356:4;7373:39;7382:12;:10;:12::i;:::-;7396:7;7405:6;7373:8;:39::i;:::-;7430:4;7423:11;;7273:169;;;;:::o;24485:64::-;;;;;;;;;;;;;;;;;;;;;;:::o;27994:360::-;19151:12;:10;:12::i;:::-;19141:22;;:6;;;;;;;;;;;:22;;;19133:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;28100:1:::1;28091:5;:10;;28083:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;28215:4;28210:3;28202:5;28186:13;:11;:13::i;:::-;:21;;;;:::i;:::-;:27;;;;:::i;:::-;28185:34;;;;:::i;:::-;28162:20;:57;;;;28248:1;28238:6;:11;;28230:58;;;;;;;;;;;;:::i;:::-;;;;;;;;;28342:4;28337:3;28328:6;28312:13;:11;:13::i;:::-;:22;;;;:::i;:::-;:28;;;;:::i;:::-;28311:35;;;;:::i;:::-;28299:9;:47;;;;27994:360:::0;;:::o;22827:51::-;;;:::o;6226:108::-;6287:7;6314:12;;6307:19;;6226:108;:::o;23405:47::-;;;;:::o;23215:36::-;;;;:::o;24241:33::-;;;;:::o;24201:::-;;;;:::o;7924:355::-;8064:4;8081:36;8091:6;8099:9;8110:6;8081:9;:36::i;:::-;8128:121;8137:6;8145:12;:10;:12::i;:::-;8159:89;8197:6;8159:89;;;;;;;;;;;;;;;;;:11;:19;8171:6;8159:19;;;;;;;;;;;;;;;:33;8179:12;:10;:12::i;:::-;8159:33;;;;;;;;;;;;;;;;:37;;:89;;;;;:::i;:::-;8128:8;:121::i;:::-;8267:4;8260:11;;7924:355;;;;;:::o;22930:53::-;22976:6;22930:53;:::o;23311:45::-;;;;:::o;23271:33::-;;;;;;;;;;;;;:::o;6068:93::-;6126:5;6151:2;6144:9;;6068:93;:::o;27484:161::-;27538:4;19151:12;:10;:12::i;:::-;19141:22;;:6;;;;;;;;;;;:22;;;19133:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;27571:5:::1;27554:14;;:22;;;;;;;;;;;;;;;;;;27610:5;27587:20;;:28;;;;;;;;;;;;;;;;;;27633:4;27626:11;;27484:161:::0;:::o;8688:218::-;8776:4;8793:83;8802:12;:10;:12::i;:::-;8816:7;8825:50;8864:10;8825:11;:25;8837:12;:10;:12::i;:::-;8825:25;;;;;;;;;;;;;;;:34;8851:7;8825:34;;;;;;;;;;;;;;;;:38;;:50;;;;:::i;:::-;8793:8;:83::i;:::-;8894:4;8887:11;;8688:218;;;;:::o;22885:38::-;;;:::o;23503:33::-;;;;;;;;;;;;;:::o;29764:137::-;19151:12;:10;:12::i;:::-;19141:22;;:6;;;;;;;;;;;:22;;;19133:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;29875:18:::1;29857:15;;:36;;;;;;;;;;;;;;;;;;29764:137:::0;:::o;30161:192::-;19151:12;:10;:12::i;:::-;19141:22;;:6;;;;;;;;;;;:22;;;19133:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;30273:1:::1;30253:22;;:8;:22;;::::0;30245:57:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;30339:6;30313:13;:23;30327:8;30313:23;;;;;;;;;;;;;;;;:32;;;;;;;;;;;;;;;;;;30161:192:::0;;:::o;30028:125::-;30093:4;30117:19;:28;30137:7;30117:28;;;;;;;;;;;;;;;;;;;;;;;;;30110:35;;30028:125;;;:::o;24052:28::-;;;;:::o;23583:31::-;;;;;;;;;;;;;:::o;27108:111::-;27169:4;27193:9;:18;27203:7;27193:18;;;;;;;;;;;;;;;;;;;;;;;;;27186:25;;27108:111;;;:::o;6397:127::-;6471:7;6498:9;:18;6508:7;6498:18;;;;;;;;;;;;;;;;6491:25;;6397:127;;;:::o;19571:148::-;19151:12;:10;:12::i;:::-;19141:22;;:6;;;;;;;;;;;:22;;;19133:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;19678:1:::1;19641:40;;19662:6;;;;;;;;;;;19641:40;;;;;;;;;;;;19709:1;19692:6;;:19;;;;;;;;;;;;;;;;;;19571:148::o:0;28362:144::-;19151:12;:10;:12::i;:::-;19141:22;;:6;;;;;;;;;;;:22;;;19133:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;28494:4:::1;28452:31;:39;28484:6;28452:39;;;;;;;;;;;;;;;;:46;;;;;;;;;;;;;;;;;;28362:144:::0;;:::o;23022:30::-;;;;;;;;;;;;;:::o;23941:::-;;;;:::o;28719:369::-;19151:12;:10;:12::i;:::-;19141:22;;:6;;;;;;;;;;;:22;;;19133:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;28853:13:::1;28835:15;:31;;;;28895:13;28877:15;:31;;;;28931:7;28919:9;:19;;;;29000:9;;28982:15;;28964;;:33;;;;:::i;:::-;:45;;;;:::i;:::-;28949:12;:60;;;;29044:2;29028:12;;:18;;29020:60;;;;;;;;;;;;:::i;:::-;;;;;;;;;28719:369:::0;;;:::o;29913:107::-;19151:12;:10;:12::i;:::-;19141:22;;:6;;;;;;;;;;;:22;;;19133:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;30003:9:::1;29991;;:21;;;;;;;;;;;;;;;;;;29913:107:::0;:::o;18929:79::-;18967:7;18994:6;;;;;;;;;;;18987:13;;18929:79;:::o;23059:24::-;;;;;;;;;;;;;:::o;24087:31::-;;;;:::o;28606:101::-;19151:12;:10;:12::i;:::-;19141:22;;:6;;;;;;;;;;;:22;;;19133:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;28692:7:::1;28678:11;;:21;;;;;;;;;;;;;;;;;;28606:101:::0;:::o;5325:104::-;5381:13;5414:7;5407:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5325:104;:::o;24015:24::-;;;;:::o;23459:35::-;;;;:::o;24281:27::-;;;;:::o;24163:25::-;;;;:::o;9409:269::-;9502:4;9519:129;9528:12;:10;:12::i;:::-;9542:7;9551:96;9590:15;9551:96;;;;;;;;;;;;;;;;;:11;:25;9563:12;:10;:12::i;:::-;9551:25;;;;;;;;;;;;;;;:34;9577:7;9551:34;;;;;;;;;;;;;;;;:38;;:96;;;;;:::i;:::-;9519:8;:129::i;:::-;9666:4;9659:11;;9409:269;;;;:::o;23363:29::-;;;;:::o;6737:175::-;6823:4;6840:42;6850:12;:10;:12::i;:::-;6864:9;6875:6;6840:9;:42::i;:::-;6900:4;6893:11;;6737:175;;;;:::o;24707:58::-;;;;;;;;;;;;;;;;;;;;;;:::o;23543:33::-;;;;;;;;;;;;;:::o;29486:132::-;19151:12;:10;:12::i;:::-;19141:22;;:6;;;;;;;;;;;:22;;;19133:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;29602:8:::1;29571:19;:28;29591:7;29571:28;;;;;;;;;;;;;;;;:39;;;;;;;;;;;;;;;;;;29486:132:::0;;:::o;29100:378::-;19151:12;:10;:12::i;:::-;19141:22;;:6;;;;;;;;;;;:22;;;19133:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;29236:13:::1;29217:16;:32;;;;29279:13;29260:16;:32;;;;29316:7;29303:10;:20;;;;29388:10;;29369:16;;29350;;:35;;;;:::i;:::-;:48;;;;:::i;:::-;29334:13;:64;;;;29434:2;29417:13;;:19;;29409:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;29100:378:::0;;;:::o;23859:39::-;;;;;;;;;;;;;:::o;23096:35::-;;;;:::o;27275:153::-;19151:12;:10;:12::i;:::-;19141:22;;:6;;;;;;;;;;;:22;;;19133:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;27344:4:::1;27328:13;;:20;;;;;;;;;;;;;;;;;;27373:4;27359:11;;:18;;;;;;;;;;;;;;;;;;27405:15;27388:14;:32;;;;27275:153::o:0;27719:263::-;27800:4;19151:12;:10;:12::i;:::-;19141:22;;:6;;;;;;;;;;;:22;;;19133:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;27836:1:::1;27823:9;:14;;27815:77;;;;;;;;;;;;:::i;:::-;;;;;;;;;27951:3;27939:9;27923:13;:11;:13::i;:::-;:25;;;;:::i;:::-;:31;;;;:::i;:::-;27902:18;:52;;;;27971:4;27964:11;;27719:263:::0;;;:::o;23907:27::-;;;;:::o;6975:151::-;7064:7;7091:11;:18;7103:5;7091:18;;;;;;;;;;;;;;;:27;7110:7;7091:27;;;;;;;;;;;;;;;;7084:34;;6975:151;;;;:::o;23138:33::-;;;;:::o;23978:30::-;;;;:::o;19874:244::-;19151:12;:10;:12::i;:::-;19141:22;;:6;;;;;;;;;;;:22;;;19133:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;19983:1:::1;19963:22;;:8;:22;;::::0;19955:73:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;20073:8;20044:38;;20065:6;;;;;;;;;;;20044:38;;;;;;;;;;;;20102:8;20093:6;;:17;;;;;;;;;;;;;;;;;;19874:244:::0;:::o;26908:192::-;19151:12;:10;:12::i;:::-;19141:22;;:6;;;;;;;;;;;:22;;;19133:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;26992:9:::1;26987:106;27011:10;:17;27007:1;:21;26987:106;;;27077:4;27050:9;:24;27060:10;27071:1;27060:13;;;;;;;;:::i;:::-;;;;;;;;27050:24;;;;;;;;;;;;;;;;:31;;;;;;;;;;;;;;;;;;27030:3;;;;;:::i;:::-;;;;26987:106;;;;26908:192:::0;:::o;24125:31::-;;;;:::o;23178:24::-;;;;:::o;23806:46::-;;;;;;;;;;;;;;;;;;;;;;:::o;37187:980::-;37271:4;19151:12;:10;:12::i;:::-;19141:22;;:6;;;;;;;;;;;:22;;;19133:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;37336:19:::1;;37313:20;;:42;;;;:::i;:::-;37295:15;:60;37287:106;;;;;;;;;;;;:::i;:::-;;;;;;;;;37423:4;37412:7;:15;;37404:70;;;;;;;;;;;;:::i;:::-;;;;;;;;;37508:15;37485:20;:38;;;;37586:28;37617:4;:14;;;37632:13;37617:29;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;37586:60;;37704:20;37758:5;37750:7;37727:20;:30;;;;:::i;:::-;:36;;;;:::i;:::-;37704:59;;37891:1;37876:12;:16;37872:109;;;37908:61;37924:13;37947:6;37956:12;37908:15;:61::i;:::-;37872:109;38064:19;38101:13;38064:51;;38126:4;:9;;;:11;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;38155:4;38148:11;;;;;37187:980:::0;;;:::o;507:98::-;560:7;587:10;580:17;;507:98;:::o;12595:380::-;12748:1;12731:19;;:5;:19;;;12723:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;12829:1;12810:21;;:7;:21;;;12802:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;12913:6;12883:11;:18;12895:5;12883:18;;;;;;;;;;;;;;;:27;12902:7;12883:27;;;;;;;;;;;;;;;:36;;;;12951:7;12935:32;;12944:5;12935:32;;;12960:6;12935:32;;;;;;:::i;:::-;;;;;;;;12595:380;;;:::o;30361:4143::-;30509:1;30493:18;;:4;:18;;;30485:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;30586:1;30572:16;;:2;:16;;;30564:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;30648:13;:19;30662:4;30648:19;;;;;;;;;;;;;;;;;;;;;;;;;30647:20;:42;;;;;30672:13;:17;30686:2;30672:17;;;;;;;;;;;;;;;;;;;;;;;;;30671:18;30647:42;30639:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;30729:1;30719:6;:11;30716:92;;30747:28;30763:4;30769:2;30773:1;30747:15;:28::i;:::-;30790:7;;30716:92;30831:14;;;;;;;;;;;30828:1820;;;30891:7;:5;:7::i;:::-;30883:15;;:4;:15;;;;:49;;;;;30925:7;:5;:7::i;:::-;30919:13;;:2;:13;;;;30883:49;:86;;;;;30967:1;30953:16;;:2;:16;;;;30883:86;:128;;;;;31004:6;30990:21;;:2;:21;;;;30883:128;:158;;;;;31033:8;;;;;;;;;;;31032:9;30883:158;30861:1776;;;31079:13;;;;;;;;;;;31075:127;;31124:9;:15;31134:4;31124:15;;;;;;;;;;;;;;;;;;;;;;;;;:32;;;;31143:9;:13;31153:2;31143:13;;;;;;;;;;;;;;;;;;;;;;;;;31124:32;:57;;;;31160:9;:21;31170:10;31160:21;;;;;;;;;;;;;;;;;;;;;;;;;31124:57;31116:66;;;;;;31075:127;31360:20;;;;;;;;;;;31356:423;;;31414:7;:5;:7::i;:::-;31408:13;;:2;:13;;;;:47;;;;;31439:15;31425:30;;:2;:30;;;;31408:47;:79;;;;;31473:13;31459:28;;:2;:28;;;;31408:79;31404:356;;;31565:12;31523:28;:39;31552:9;31523:39;;;;;;;;;;;;;;;;:54;31515:140;;;;;;;;;;;;:::i;:::-;;;;;;;;;31724:12;31682:28;:39;31711:9;31682:39;;;;;;;;;;;;;;;:54;;;;31404:356;31356:423;31848:25;:31;31874:4;31848:31;;;;;;;;;;;;;;;;;;;;;;;;;:71;;;;;31884:31;:35;31916:2;31884:35;;;;;;;;;;;;;;;;;;;;;;;;;31883:36;31848:71;31844:778;;;31966:20;;31956:6;:30;;31948:96;;;;;;;;;;;;:::i;:::-;;;;;;;;;32105:9;;32088:13;32098:2;32088:9;:13::i;:::-;32079:6;:22;;;;:::i;:::-;:35;;32071:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;31844:778;;;32232:25;:29;32258:2;32232:29;;;;;;;;;;;;;;;;;;;;;;;;;:71;;;;;32266:31;:37;32298:4;32266:37;;;;;;;;;;;;;;;;;;;;;;;;;32265:38;32232:71;32228:394;;;32350:20;;32340:6;:30;;32332:97;;;;;;;;;;;;:::i;:::-;;;;;;;;;32228:394;;;32476:31;:35;32508:2;32476:35;;;;;;;;;;;;;;;;;;;;;;;;;32472:150;;32569:9;;32552:13;32562:2;32552:9;:13::i;:::-;32543:6;:22;;;;:::i;:::-;:35;;32535:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;32472:150;32228:394;31844:778;30861:1776;30828:1820;32662:28;32693:24;32711:4;32693:9;:24::i;:::-;32662:55;;32738:12;32777:18;;32753:20;:42;;32738:57;;32826:7;:35;;;;;32850:11;;;;;;;;;;;32826:35;:61;;;;;32879:8;;;;;;;;;;;32878:9;32826:61;:110;;;;;32905:25;:31;32931:4;32905:31;;;;;;;;;;;;;;;;;;;;;;;;;32904:32;32826:110;:153;;;;;32954:19;:25;32974:4;32954:25;;;;;;;;;;;;;;;;;;;;;;;;;32953:26;32826:153;:194;;;;;32997:19;:23;33017:2;32997:23;;;;;;;;;;;;;;;;;;;;;;;;;32996:24;32826:194;32808:338;;;33058:4;33047:8;;:15;;;;;;;;;;;;;;;;;;33091:10;:8;:10::i;:::-;33129:5;33118:8;;:16;;;;;;;;;;;;;;;;;;32808:338;33158:12;33174:8;;;;;;;;;;;33173:9;33158:24;;33283:19;:25;33303:4;33283:25;;;;;;;;;;;;;;;;;;;;;;;;;:52;;;;33312:19;:23;33332:2;33312:23;;;;;;;;;;;;;;;;;;;;;;;;;33283:52;33280:99;;;33362:5;33352:15;;33280:99;33399:12;33503:7;33500:951;;;33554:25;:29;33580:2;33554:29;;;;;;;;;;;;;;;;;;;;;;;;;:50;;;;;33603:1;33587:13;;:17;33554:50;33550:732;;;33654:3;33640:13;;33631:6;:22;;;;:::i;:::-;:26;;;;:::i;:::-;33624:33;;33724:13;;33705:16;;33698:4;:23;;;;:::i;:::-;:39;;;;:::i;:::-;33676:18;;:61;;;;;;;:::i;:::-;;;;;;;;33792:13;;33779:10;;33772:4;:17;;;;:::i;:::-;:33;;;;:::i;:::-;33756:12;;:49;;;;;;;:::i;:::-;;;;;;;;33872:13;;33853:16;;33846:4;:23;;;;:::i;:::-;:39;;;;:::i;:::-;33824:18;;:61;;;;;;;:::i;:::-;;;;;;;;33550:732;;;33946:25;:31;33972:4;33946:31;;;;;;;;;;;;;;;;;;;;;;;;;:51;;;;;33996:1;33981:12;;:16;33946:51;33943:339;;;34044:3;34031:12;;34022:6;:21;;;;:::i;:::-;:25;;;;:::i;:::-;34015:32;;34110:12;;34092:15;;34085:4;:22;;;;:::i;:::-;:37;;;;:::i;:::-;34063:18;;:59;;;;;;;:::i;:::-;;;;;;;;34176:12;;34164:9;;34157:4;:16;;;;:::i;:::-;:31;;;;:::i;:::-;34141:12;;:47;;;;;;;:::i;:::-;;;;;;;;34254:12;;34236:15;;34229:4;:22;;;;:::i;:::-;:37;;;;:::i;:::-;34207:18;;:59;;;;;;;:::i;:::-;;;;;;;;33943:339;33550:732;34320:1;34313:4;:8;34310:93;;;34345:42;34361:4;34375;34382;34345:15;:42::i;:::-;34310:93;34435:4;34425:14;;;;;:::i;:::-;;;33500:951;34463:33;34479:4;34485:2;34489:6;34463:15;:33::i;:::-;30474:4030;;;;30361:4143;;;;:::o;14876:192::-;14962:7;14995:1;14990;:6;;14998:12;14982:29;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;15022:9;15038:1;15034;:5;;;;:::i;:::-;15022:17;;15059:1;15052:8;;;14876:192;;;;;:::o;13973:181::-;14031:7;14051:9;14067:1;14063;:5;;;;:::i;:::-;14051:17;;14092:1;14087;:6;;14079:46;;;;;;;;;;;;:::i;:::-;;;;;;;;;14145:1;14138:8;;;13973:181;;;;:::o;10168:573::-;10326:1;10308:20;;:6;:20;;;10300:70;;;;;;;;;;;;:::i;:::-;;;;;;;;;10410:1;10389:23;;:9;:23;;;10381:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;10465:47;10486:6;10494:9;10505:6;10465:20;:47::i;:::-;10545:71;10567:6;10545:71;;;;;;;;;;;;;;;;;:9;:17;10555:6;10545:17;;;;;;;;;;;;;;;;:21;;:71;;;;;:::i;:::-;10525:9;:17;10535:6;10525:17;;;;;;;;;;;;;;;:91;;;;10650:32;10675:6;10650:9;:20;10660:9;10650:20;;;;;;;;;;;;;;;;:24;;:32;;;;:::i;:::-;10627:9;:20;10637:9;10627:20;;;;;;;;;;;;;;;:55;;;;10715:9;10698:35;;10707:6;10698:35;;;10726:6;10698:35;;;;;;:::i;:::-;;;;;;;;10168:573;;;:::o;35656:1523::-;35695:23;35721:24;35739:4;35721:9;:24::i;:::-;35695:50;;35756:25;35826:12;;35805:18;;35784;;:39;;;;:::i;:::-;:54;;;;:::i;:::-;35756:82;;35849:12;35904:1;35885:15;:20;:46;;;;35930:1;35909:17;:22;35885:46;35882:60;;;35934:7;;;;;35882:60;35996:2;35975:18;;:23;;;;:::i;:::-;35957:15;:41;35954:111;;;36051:2;36030:18;;:23;;;;:::i;:::-;36012:41;;35954:111;36134:23;36219:1;36199:17;36178:18;;36160:15;:36;;;;:::i;:::-;:56;;;;:::i;:::-;:60;;;;:::i;:::-;36134:86;;36231:26;36278:15;36260;:33;;;;:::i;:::-;36231:62;;36314:25;36342:21;36314:49;;36376:36;36393:18;36376:16;:36::i;:::-;36434:18;36479:17;36455:21;:41;;;;:::i;:::-;36434:62;;36517:23;36575:17;36556:18;;36543:10;:31;;;;:::i;:::-;:49;;;;:::i;:::-;36517:75;;36603:17;36649;36636:12;;36623:10;:25;;;;:::i;:::-;:43;;;;:::i;:::-;36603:63;;36687:23;36744:9;36726:15;36713:10;:28;;;;:::i;:::-;:40;;;;:::i;:::-;36687:66;;36795:1;36774:18;:22;;;;36828:1;36807:18;:22;;;;36855:1;36840:12;:16;;;;36898:9;;;;;;;;;;;36890:23;;36921:9;36890:45;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;36877:58;;;;;36977:1;36959:15;:19;:42;;;;;37000:1;36982:15;:19;36959:42;36956:119;;;37017:46;37030:15;37047;37017:12;:46::i;:::-;36956:119;37116:15;;;;;;;;;;;37108:29;;37145:21;37108:63;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;37095:76;;;;;35684:1495;;;;;;;;;;35656:1523;:::o;13578:125::-;;;;:::o;34512:601::-;34640:21;34678:1;34664:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;34640:40;;34709:4;34691;34696:1;34691:7;;;;;;;;:::i;:::-;;;;;;;:23;;;;;;;;;;;34735:15;:20;;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;34725:4;34730:1;34725:7;;;;;;;;:::i;:::-;;;;;;;:32;;;;;;;;;;;34770:62;34787:4;34802:15;34820:11;34770:8;:62::i;:::-;34871:15;:66;;;34952:11;34978:1;35022:4;35049;35069:15;34871:224;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;34567:546;34512:601;:::o;35131:517::-;35279:62;35296:4;35311:15;35329:11;35279:8;:62::i;:::-;35384:15;:31;;;35423:9;35456:4;35476:11;35502:1;35545;22976:6;35614:15;35384:256;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;35131:517;;:::o;7:99:1:-;59:6;93:5;87:12;77:22;;7:99;;;:::o;112:169::-;196:11;230:6;225:3;218:19;270:4;265:3;261:14;246:29;;112:169;;;;:::o;287:246::-;368:1;378:113;392:6;389:1;386:13;378:113;;;477:1;472:3;468:11;462:18;458:1;453:3;449:11;442:39;414:2;411:1;407:10;402:15;;378:113;;;525:1;516:6;511:3;507:16;500:27;349:184;287:246;;;:::o;539:102::-;580:6;631:2;627:7;622:2;615:5;611:14;607:28;597:38;;539:102;;;:::o;647:377::-;735:3;763:39;796:5;763:39;:::i;:::-;818:71;882:6;877:3;818:71;:::i;:::-;811:78;;898:65;956:6;951:3;944:4;937:5;933:16;898:65;:::i;:::-;988:29;1010:6;988:29;:::i;:::-;983:3;979:39;972:46;;739:285;647:377;;;;:::o;1030:313::-;1143:4;1181:2;1170:9;1166:18;1158:26;;1230:9;1224:4;1220:20;1216:1;1205:9;1201:17;1194:47;1258:78;1331:4;1322:6;1258:78;:::i;:::-;1250:86;;1030:313;;;;:::o;1349:75::-;1382:6;1415:2;1409:9;1399:19;;1349:75;:::o;1430:117::-;1539:1;1536;1529:12;1553:117;1662:1;1659;1652:12;1676:126;1713:7;1753:42;1746:5;1742:54;1731:65;;1676:126;;;:::o;1808:96::-;1845:7;1874:24;1892:5;1874:24;:::i;:::-;1863:35;;1808:96;;;:::o;1910:122::-;1983:24;2001:5;1983:24;:::i;:::-;1976:5;1973:35;1963:63;;2022:1;2019;2012:12;1963:63;1910:122;:::o;2038:139::-;2084:5;2122:6;2109:20;2100:29;;2138:33;2165:5;2138:33;:::i;:::-;2038:139;;;;:::o;2183:77::-;2220:7;2249:5;2238:16;;2183:77;;;:::o;2266:122::-;2339:24;2357:5;2339:24;:::i;:::-;2332:5;2329:35;2319:63;;2378:1;2375;2368:12;2319:63;2266:122;:::o;2394:139::-;2440:5;2478:6;2465:20;2456:29;;2494:33;2521:5;2494:33;:::i;:::-;2394:139;;;;:::o;2539:474::-;2607:6;2615;2664:2;2652:9;2643:7;2639:23;2635:32;2632:119;;;2670:79;;:::i;:::-;2632:119;2790:1;2815:53;2860:7;2851:6;2840:9;2836:22;2815:53;:::i;:::-;2805:63;;2761:117;2917:2;2943:53;2988:7;2979:6;2968:9;2964:22;2943:53;:::i;:::-;2933:63;;2888:118;2539:474;;;;;:::o;3019:90::-;3053:7;3096:5;3089:13;3082:21;3071:32;;3019:90;;;:::o;3115:109::-;3196:21;3211:5;3196:21;:::i;:::-;3191:3;3184:34;3115:109;;:::o;3230:210::-;3317:4;3355:2;3344:9;3340:18;3332:26;;3368:65;3430:1;3419:9;3415:17;3406:6;3368:65;:::i;:::-;3230:210;;;;:::o;3446:329::-;3505:6;3554:2;3542:9;3533:7;3529:23;3525:32;3522:119;;;3560:79;;:::i;:::-;3522:119;3680:1;3705:53;3750:7;3741:6;3730:9;3726:22;3705:53;:::i;:::-;3695:63;;3651:117;3446:329;;;;:::o;3781:474::-;3849:6;3857;3906:2;3894:9;3885:7;3881:23;3877:32;3874:119;;;3912:79;;:::i;:::-;3874:119;4032:1;4057:53;4102:7;4093:6;4082:9;4078:22;4057:53;:::i;:::-;4047:63;;4003:117;4159:2;4185:53;4230:7;4221:6;4210:9;4206:22;4185:53;:::i;:::-;4175:63;;4130:118;3781:474;;;;;:::o;4261:60::-;4289:3;4310:5;4303:12;;4261:60;;;:::o;4327:142::-;4377:9;4410:53;4428:34;4437:24;4455:5;4437:24;:::i;:::-;4428:34;:::i;:::-;4410:53;:::i;:::-;4397:66;;4327:142;;;:::o;4475:126::-;4525:9;4558:37;4589:5;4558:37;:::i;:::-;4545:50;;4475:126;;;:::o;4607:153::-;4684:9;4717:37;4748:5;4717:37;:::i;:::-;4704:50;;4607:153;;;:::o;4766:185::-;4880:64;4938:5;4880:64;:::i;:::-;4875:3;4868:77;4766:185;;:::o;4957:276::-;5077:4;5115:2;5104:9;5100:18;5092:26;;5128:98;5223:1;5212:9;5208:17;5199:6;5128:98;:::i;:::-;4957:276;;;;:::o;5239:118::-;5326:24;5344:5;5326:24;:::i;:::-;5321:3;5314:37;5239:118;;:::o;5363:222::-;5456:4;5494:2;5483:9;5479:18;5471:26;;5507:71;5575:1;5564:9;5560:17;5551:6;5507:71;:::i;:::-;5363:222;;;;:::o;5591:619::-;5668:6;5676;5684;5733:2;5721:9;5712:7;5708:23;5704:32;5701:119;;;5739:79;;:::i;:::-;5701:119;5859:1;5884:53;5929:7;5920:6;5909:9;5905:22;5884:53;:::i;:::-;5874:63;;5830:117;5986:2;6012:53;6057:7;6048:6;6037:9;6033:22;6012:53;:::i;:::-;6002:63;;5957:118;6114:2;6140:53;6185:7;6176:6;6165:9;6161:22;6140:53;:::i;:::-;6130:63;;6085:118;5591:619;;;;;:::o;6216:118::-;6303:24;6321:5;6303:24;:::i;:::-;6298:3;6291:37;6216:118;;:::o;6340:222::-;6433:4;6471:2;6460:9;6456:18;6448:26;;6484:71;6552:1;6541:9;6537:17;6528:6;6484:71;:::i;:::-;6340:222;;;;:::o;6568:86::-;6603:7;6643:4;6636:5;6632:16;6621:27;;6568:86;;;:::o;6660:112::-;6743:22;6759:5;6743:22;:::i;:::-;6738:3;6731:35;6660:112;;:::o;6778:214::-;6867:4;6905:2;6894:9;6890:18;6882:26;;6918:67;6982:1;6971:9;6967:17;6958:6;6918:67;:::i;:::-;6778:214;;;;:::o;6998:116::-;7068:21;7083:5;7068:21;:::i;:::-;7061:5;7058:32;7048:60;;7104:1;7101;7094:12;7048:60;6998:116;:::o;7120:133::-;7163:5;7201:6;7188:20;7179:29;;7217:30;7241:5;7217:30;:::i;:::-;7120:133;;;;:::o;7259:468::-;7324:6;7332;7381:2;7369:9;7360:7;7356:23;7352:32;7349:119;;;7387:79;;:::i;:::-;7349:119;7507:1;7532:53;7577:7;7568:6;7557:9;7553:22;7532:53;:::i;:::-;7522:63;;7478:117;7634:2;7660:50;7702:7;7693:6;7682:9;7678:22;7660:50;:::i;:::-;7650:60;;7605:115;7259:468;;;;;:::o;7733:619::-;7810:6;7818;7826;7875:2;7863:9;7854:7;7850:23;7846:32;7843:119;;;7881:79;;:::i;:::-;7843:119;8001:1;8026:53;8071:7;8062:6;8051:9;8047:22;8026:53;:::i;:::-;8016:63;;7972:117;8128:2;8154:53;8199:7;8190:6;8179:9;8175:22;8154:53;:::i;:::-;8144:63;;8099:118;8256:2;8282:53;8327:7;8318:6;8307:9;8303:22;8282:53;:::i;:::-;8272:63;;8227:118;7733:619;;;;;:::o;8358:323::-;8414:6;8463:2;8451:9;8442:7;8438:23;8434:32;8431:119;;;8469:79;;:::i;:::-;8431:119;8589:1;8614:50;8656:7;8647:6;8636:9;8632:22;8614:50;:::i;:::-;8604:60;;8560:114;8358:323;;;;:::o;8687:329::-;8746:6;8795:2;8783:9;8774:7;8770:23;8766:32;8763:119;;;8801:79;;:::i;:::-;8763:119;8921:1;8946:53;8991:7;8982:6;8971:9;8967:22;8946:53;:::i;:::-;8936:63;;8892:117;8687:329;;;;:::o;9022:474::-;9090:6;9098;9147:2;9135:9;9126:7;9122:23;9118:32;9115:119;;;9153:79;;:::i;:::-;9115:119;9273:1;9298:53;9343:7;9334:6;9323:9;9319:22;9298:53;:::i;:::-;9288:63;;9244:117;9400:2;9426:53;9471:7;9462:6;9451:9;9447:22;9426:53;:::i;:::-;9416:63;;9371:118;9022:474;;;;;:::o;9502:117::-;9611:1;9608;9601:12;9625:180;9673:77;9670:1;9663:88;9770:4;9767:1;9760:15;9794:4;9791:1;9784:15;9811:281;9894:27;9916:4;9894:27;:::i;:::-;9886:6;9882:40;10024:6;10012:10;10009:22;9988:18;9976:10;9973:34;9970:62;9967:88;;;10035:18;;:::i;:::-;9967:88;10075:10;10071:2;10064:22;9854:238;9811:281;;:::o;10098:129::-;10132:6;10159:20;;:::i;:::-;10149:30;;10188:33;10216:4;10208:6;10188:33;:::i;:::-;10098:129;;;:::o;10233:311::-;10310:4;10400:18;10392:6;10389:30;10386:56;;;10422:18;;:::i;:::-;10386:56;10472:4;10464:6;10460:17;10452:25;;10532:4;10526;10522:15;10514:23;;10233:311;;;:::o;10550:117::-;10659:1;10656;10649:12;10690:710;10786:5;10811:81;10827:64;10884:6;10827:64;:::i;:::-;10811:81;:::i;:::-;10802:90;;10912:5;10941:6;10934:5;10927:21;10975:4;10968:5;10964:16;10957:23;;11028:4;11020:6;11016:17;11008:6;11004:30;11057:3;11049:6;11046:15;11043:122;;;11076:79;;:::i;:::-;11043:122;11191:6;11174:220;11208:6;11203:3;11200:15;11174:220;;;11283:3;11312:37;11345:3;11333:10;11312:37;:::i;:::-;11307:3;11300:50;11379:4;11374:3;11370:14;11363:21;;11250:144;11234:4;11229:3;11225:14;11218:21;;11174:220;;;11178:21;10792:608;;10690:710;;;;;:::o;11423:370::-;11494:5;11543:3;11536:4;11528:6;11524:17;11520:27;11510:122;;11551:79;;:::i;:::-;11510:122;11668:6;11655:20;11693:94;11783:3;11775:6;11768:4;11760:6;11756:17;11693:94;:::i;:::-;11684:103;;11500:293;11423:370;;;;:::o;11799:539::-;11883:6;11932:2;11920:9;11911:7;11907:23;11903:32;11900:119;;;11938:79;;:::i;:::-;11900:119;12086:1;12075:9;12071:17;12058:31;12116:18;12108:6;12105:30;12102:117;;;12138:79;;:::i;:::-;12102:117;12243:78;12313:7;12304:6;12293:9;12289:22;12243:78;:::i;:::-;12233:88;;12029:302;11799:539;;;;:::o;12344:180::-;12392:77;12389:1;12382:88;12489:4;12486:1;12479:15;12513:4;12510:1;12503:15;12530:320;12574:6;12611:1;12605:4;12601:12;12591:22;;12658:1;12652:4;12648:12;12679:18;12669:81;;12735:4;12727:6;12723:17;12713:27;;12669:81;12797:2;12789:6;12786:14;12766:18;12763:38;12760:84;;12816:18;;:::i;:::-;12760:84;12581:269;12530:320;;;:::o;12856:182::-;12996:34;12992:1;12984:6;12980:14;12973:58;12856:182;:::o;13044:366::-;13186:3;13207:67;13271:2;13266:3;13207:67;:::i;:::-;13200:74;;13283:93;13372:3;13283:93;:::i;:::-;13401:2;13396:3;13392:12;13385:19;;13044:366;;;:::o;13416:419::-;13582:4;13620:2;13609:9;13605:18;13597:26;;13669:9;13663:4;13659:20;13655:1;13644:9;13640:17;13633:47;13697:131;13823:4;13697:131;:::i;:::-;13689:139;;13416:419;;;:::o;13841:232::-;13981:34;13977:1;13969:6;13965:14;13958:58;14050:15;14045:2;14037:6;14033:15;14026:40;13841:232;:::o;14079:366::-;14221:3;14242:67;14306:2;14301:3;14242:67;:::i;:::-;14235:74;;14318:93;14407:3;14318:93;:::i;:::-;14436:2;14431:3;14427:12;14420:19;;14079:366;;;:::o;14451:419::-;14617:4;14655:2;14644:9;14640:18;14632:26;;14704:9;14698:4;14694:20;14690:1;14679:9;14675:17;14668:47;14732:131;14858:4;14732:131;:::i;:::-;14724:139;;14451:419;;;:::o;14876:180::-;14924:77;14921:1;14914:88;15021:4;15018:1;15011:15;15045:4;15042:1;15035:15;15062:410;15102:7;15125:20;15143:1;15125:20;:::i;:::-;15120:25;;15159:20;15177:1;15159:20;:::i;:::-;15154:25;;15214:1;15211;15207:9;15236:30;15254:11;15236:30;:::i;:::-;15225:41;;15415:1;15406:7;15402:15;15399:1;15396:22;15376:1;15369:9;15349:83;15326:139;;15445:18;;:::i;:::-;15326:139;15110:362;15062:410;;;;:::o;15478:180::-;15526:77;15523:1;15516:88;15623:4;15620:1;15613:15;15647:4;15644:1;15637:15;15664:185;15704:1;15721:20;15739:1;15721:20;:::i;:::-;15716:25;;15755:20;15773:1;15755:20;:::i;:::-;15750:25;;15794:1;15784:35;;15799:18;;:::i;:::-;15784:35;15841:1;15838;15834:9;15829:14;;15664:185;;;;:::o;15855:221::-;15995:34;15991:1;15983:6;15979:14;15972:58;16064:4;16059:2;16051:6;16047:15;16040:29;15855:221;:::o;16082:366::-;16224:3;16245:67;16309:2;16304:3;16245:67;:::i;:::-;16238:74;;16321:93;16410:3;16321:93;:::i;:::-;16439:2;16434:3;16430:12;16423:19;;16082:366;;;:::o;16454:419::-;16620:4;16658:2;16647:9;16643:18;16635:26;;16707:9;16701:4;16697:20;16693:1;16682:9;16678:17;16671:47;16735:131;16861:4;16735:131;:::i;:::-;16727:139;;16454:419;;;:::o;16879:173::-;17019:25;17015:1;17007:6;17003:14;16996:49;16879:173;:::o;17058:366::-;17200:3;17221:67;17285:2;17280:3;17221:67;:::i;:::-;17214:74;;17297:93;17386:3;17297:93;:::i;:::-;17415:2;17410:3;17406:12;17399:19;;17058:366;;;:::o;17430:419::-;17596:4;17634:2;17623:9;17619:18;17611:26;;17683:9;17677:4;17673:20;17669:1;17658:9;17654:17;17647:47;17711:131;17837:4;17711:131;:::i;:::-;17703:139;;17430:419;;;:::o;17855:191::-;17895:3;17914:20;17932:1;17914:20;:::i;:::-;17909:25;;17948:20;17966:1;17948:20;:::i;:::-;17943:25;;17991:1;17988;17984:9;17977:16;;18012:3;18009:1;18006:10;18003:36;;;18019:18;;:::i;:::-;18003:36;17855:191;;;;:::o;18052:179::-;18192:31;18188:1;18180:6;18176:14;18169:55;18052:179;:::o;18237:366::-;18379:3;18400:67;18464:2;18459:3;18400:67;:::i;:::-;18393:74;;18476:93;18565:3;18476:93;:::i;:::-;18594:2;18589:3;18585:12;18578:19;;18237:366;;;:::o;18609:419::-;18775:4;18813:2;18802:9;18798:18;18790:26;;18862:9;18856:4;18852:20;18848:1;18837:9;18833:17;18826:47;18890:131;19016:4;18890:131;:::i;:::-;18882:139;;18609:419;;;:::o;19034:237::-;19174:34;19170:1;19162:6;19158:14;19151:58;19243:20;19238:2;19230:6;19226:15;19219:45;19034:237;:::o;19277:366::-;19419:3;19440:67;19504:2;19499:3;19440:67;:::i;:::-;19433:74;;19516:93;19605:3;19516:93;:::i;:::-;19634:2;19629:3;19625:12;19618:19;;19277:366;;;:::o;19649:419::-;19815:4;19853:2;19842:9;19838:18;19830:26;;19902:9;19896:4;19892:20;19888:1;19877:9;19873:17;19866:47;19930:131;20056:4;19930:131;:::i;:::-;19922:139;;19649:419;;;:::o;20074:225::-;20214:34;20210:1;20202:6;20198:14;20191:58;20283:8;20278:2;20270:6;20266:15;20259:33;20074:225;:::o;20305:366::-;20447:3;20468:67;20532:2;20527:3;20468:67;:::i;:::-;20461:74;;20544:93;20633:3;20544:93;:::i;:::-;20662:2;20657:3;20653:12;20646:19;;20305:366;;;:::o;20677:419::-;20843:4;20881:2;20870:9;20866:18;20858:26;;20930:9;20924:4;20920:20;20916:1;20905:9;20901:17;20894:47;20958:131;21084:4;20958:131;:::i;:::-;20950:139;;20677:419;;;:::o;21102:180::-;21150:77;21147:1;21140:88;21247:4;21244:1;21237:15;21271:4;21268:1;21261:15;21288:233;21327:3;21350:24;21368:5;21350:24;:::i;:::-;21341:33;;21396:66;21389:5;21386:77;21383:103;;21466:18;;:::i;:::-;21383:103;21513:1;21506:5;21502:13;21495:20;;21288:233;;;:::o;21527:182::-;21667:34;21663:1;21655:6;21651:14;21644:58;21527:182;:::o;21715:366::-;21857:3;21878:67;21942:2;21937:3;21878:67;:::i;:::-;21871:74;;21954:93;22043:3;21954:93;:::i;:::-;22072:2;22067:3;22063:12;22056:19;;21715:366;;;:::o;22087:419::-;22253:4;22291:2;22280:9;22276:18;22268:26;;22340:9;22334:4;22330:20;22326:1;22315:9;22311:17;22304:47;22368:131;22494:4;22368:131;:::i;:::-;22360:139;;22087:419;;;:::o;22512:229::-;22652:34;22648:1;22640:6;22636:14;22629:58;22721:12;22716:2;22708:6;22704:15;22697:37;22512:229;:::o;22747:366::-;22889:3;22910:67;22974:2;22969:3;22910:67;:::i;:::-;22903:74;;22986:93;23075:3;22986:93;:::i;:::-;23104:2;23099:3;23095:12;23088:19;;22747:366;;;:::o;23119:419::-;23285:4;23323:2;23312:9;23308:18;23300:26;;23372:9;23366:4;23362:20;23358:1;23347:9;23343:17;23336:47;23400:131;23526:4;23400:131;:::i;:::-;23392:139;;23119:419;;;:::o;23544:143::-;23601:5;23632:6;23626:13;23617:22;;23648:33;23675:5;23648:33;:::i;:::-;23544:143;;;;:::o;23693:351::-;23763:6;23812:2;23800:9;23791:7;23787:23;23783:32;23780:119;;;23818:79;;:::i;:::-;23780:119;23938:1;23963:64;24019:7;24010:6;23999:9;23995:22;23963:64;:::i;:::-;23953:74;;23909:128;23693:351;;;;:::o;24050:223::-;24190:34;24186:1;24178:6;24174:14;24167:58;24259:6;24254:2;24246:6;24242:15;24235:31;24050:223;:::o;24279:366::-;24421:3;24442:67;24506:2;24501:3;24442:67;:::i;:::-;24435:74;;24518:93;24607:3;24518:93;:::i;:::-;24636:2;24631:3;24627:12;24620:19;;24279:366;;;:::o;24651:419::-;24817:4;24855:2;24844:9;24840:18;24832:26;;24904:9;24898:4;24894:20;24890:1;24879:9;24875:17;24868:47;24932:131;25058:4;24932:131;:::i;:::-;24924:139;;24651:419;;;:::o;25076:221::-;25216:34;25212:1;25204:6;25200:14;25193:58;25285:4;25280:2;25272:6;25268:15;25261:29;25076:221;:::o;25303:366::-;25445:3;25466:67;25530:2;25525:3;25466:67;:::i;:::-;25459:74;;25542:93;25631:3;25542:93;:::i;:::-;25660:2;25655:3;25651:12;25644:19;;25303:366;;;:::o;25675:419::-;25841:4;25879:2;25868:9;25864:18;25856:26;;25928:9;25922:4;25918:20;25914:1;25903:9;25899:17;25892:47;25956:131;26082:4;25956:131;:::i;:::-;25948:139;;25675:419;;;:::o;26100:224::-;26240:34;26236:1;26228:6;26224:14;26217:58;26309:7;26304:2;26296:6;26292:15;26285:32;26100:224;:::o;26330:366::-;26472:3;26493:67;26557:2;26552:3;26493:67;:::i;:::-;26486:74;;26569:93;26658:3;26569:93;:::i;:::-;26687:2;26682:3;26678:12;26671:19;;26330:366;;;:::o;26702:419::-;26868:4;26906:2;26895:9;26891:18;26883:26;;26955:9;26949:4;26945:20;26941:1;26930:9;26926:17;26919:47;26983:131;27109:4;26983:131;:::i;:::-;26975:139;;26702:419;;;:::o;27127:222::-;27267:34;27263:1;27255:6;27251:14;27244:58;27336:5;27331:2;27323:6;27319:15;27312:30;27127:222;:::o;27355:366::-;27497:3;27518:67;27582:2;27577:3;27518:67;:::i;:::-;27511:74;;27594:93;27683:3;27594:93;:::i;:::-;27712:2;27707:3;27703:12;27696:19;;27355:366;;;:::o;27727:419::-;27893:4;27931:2;27920:9;27916:18;27908:26;;27980:9;27974:4;27970:20;27966:1;27955:9;27951:17;27944:47;28008:131;28134:4;28008:131;:::i;:::-;28000:139;;27727:419;;;:::o;28152:161::-;28292:13;28288:1;28280:6;28276:14;28269:37;28152:161;:::o;28319:366::-;28461:3;28482:67;28546:2;28541:3;28482:67;:::i;:::-;28475:74;;28558:93;28647:3;28558:93;:::i;:::-;28676:2;28671:3;28667:12;28660:19;;28319:366;;;:::o;28691:419::-;28857:4;28895:2;28884:9;28880:18;28872:26;;28944:9;28938:4;28934:20;28930:1;28919:9;28915:17;28908:47;28972:131;29098:4;28972:131;:::i;:::-;28964:139;;28691:419;;;:::o;29116:297::-;29256:34;29252:1;29244:6;29240:14;29233:58;29325:34;29320:2;29312:6;29308:15;29301:59;29394:11;29389:2;29381:6;29377:15;29370:36;29116:297;:::o;29419:366::-;29561:3;29582:67;29646:2;29641:3;29582:67;:::i;:::-;29575:74;;29658:93;29747:3;29658:93;:::i;:::-;29776:2;29771:3;29767:12;29760:19;;29419:366;;;:::o;29791:419::-;29957:4;29995:2;29984:9;29980:18;29972:26;;30044:9;30038:4;30034:20;30030:1;30019:9;30015:17;30008:47;30072:131;30198:4;30072:131;:::i;:::-;30064:139;;29791:419;;;:::o;30216:240::-;30356:34;30352:1;30344:6;30340:14;30333:58;30425:23;30420:2;30412:6;30408:15;30401:48;30216:240;:::o;30462:366::-;30604:3;30625:67;30689:2;30684:3;30625:67;:::i;:::-;30618:74;;30701:93;30790:3;30701:93;:::i;:::-;30819:2;30814:3;30810:12;30803:19;;30462:366;;;:::o;30834:419::-;31000:4;31038:2;31027:9;31023:18;31015:26;;31087:9;31081:4;31077:20;31073:1;31062:9;31058:17;31051:47;31115:131;31241:4;31115:131;:::i;:::-;31107:139;;30834:419;;;:::o;31259:169::-;31399:21;31395:1;31387:6;31383:14;31376:45;31259:169;:::o;31434:366::-;31576:3;31597:67;31661:2;31656:3;31597:67;:::i;:::-;31590:74;;31673:93;31762:3;31673:93;:::i;:::-;31791:2;31786:3;31782:12;31775:19;;31434:366;;;:::o;31806:419::-;31972:4;32010:2;31999:9;31995:18;31987:26;;32059:9;32053:4;32049:20;32045:1;32034:9;32030:17;32023:47;32087:131;32213:4;32087:131;:::i;:::-;32079:139;;31806:419;;;:::o;32231:241::-;32371:34;32367:1;32359:6;32355:14;32348:58;32440:24;32435:2;32427:6;32423:15;32416:49;32231:241;:::o;32478:366::-;32620:3;32641:67;32705:2;32700:3;32641:67;:::i;:::-;32634:74;;32717:93;32806:3;32717:93;:::i;:::-;32835:2;32830:3;32826:12;32819:19;;32478:366;;;:::o;32850:419::-;33016:4;33054:2;33043:9;33039:18;33031:26;;33103:9;33097:4;33093:20;33089:1;33078:9;33074:17;33067:47;33131:131;33257:4;33131:131;:::i;:::-;33123:139;;32850:419;;;:::o;33275:194::-;33315:4;33335:20;33353:1;33335:20;:::i;:::-;33330:25;;33369:20;33387:1;33369:20;:::i;:::-;33364:25;;33413:1;33410;33406:9;33398:17;;33437:1;33431:4;33428:11;33425:37;;;33442:18;;:::i;:::-;33425:37;33275:194;;;;:::o;33475:177::-;33615:29;33611:1;33603:6;33599:14;33592:53;33475:177;:::o;33658:366::-;33800:3;33821:67;33885:2;33880:3;33821:67;:::i;:::-;33814:74;;33897:93;33986:3;33897:93;:::i;:::-;34015:2;34010:3;34006:12;33999:19;;33658:366;;;:::o;34030:419::-;34196:4;34234:2;34223:9;34219:18;34211:26;;34283:9;34277:4;34273:20;34269:1;34258:9;34254:17;34247:47;34311:131;34437:4;34311:131;:::i;:::-;34303:139;;34030:419;;;:::o;34455:147::-;34556:11;34593:3;34578:18;;34455:147;;;;:::o;34608:114::-;;:::o;34728:398::-;34887:3;34908:83;34989:1;34984:3;34908:83;:::i;:::-;34901:90;;35000:93;35089:3;35000:93;:::i;:::-;35118:1;35113:3;35109:11;35102:18;;34728:398;;;:::o;35132:379::-;35316:3;35338:147;35481:3;35338:147;:::i;:::-;35331:154;;35502:3;35495:10;;35132:379;;;:::o;35517:143::-;35574:5;35605:6;35599:13;35590:22;;35621:33;35648:5;35621:33;:::i;:::-;35517:143;;;;:::o;35666:351::-;35736:6;35785:2;35773:9;35764:7;35760:23;35756:32;35753:119;;;35791:79;;:::i;:::-;35753:119;35911:1;35936:64;35992:7;35983:6;35972:9;35968:22;35936:64;:::i;:::-;35926:74;;35882:128;35666:351;;;;:::o;36023:85::-;36068:7;36097:5;36086:16;;36023:85;;;:::o;36114:158::-;36172:9;36205:61;36223:42;36232:32;36258:5;36232:32;:::i;:::-;36223:42;:::i;:::-;36205:61;:::i;:::-;36192:74;;36114:158;;;:::o;36278:147::-;36373:45;36412:5;36373:45;:::i;:::-;36368:3;36361:58;36278:147;;:::o;36431:114::-;36498:6;36532:5;36526:12;36516:22;;36431:114;;;:::o;36551:184::-;36650:11;36684:6;36679:3;36672:19;36724:4;36719:3;36715:14;36700:29;;36551:184;;;;:::o;36741:132::-;36808:4;36831:3;36823:11;;36861:4;36856:3;36852:14;36844:22;;36741:132;;;:::o;36879:108::-;36956:24;36974:5;36956:24;:::i;:::-;36951:3;36944:37;36879:108;;:::o;36993:179::-;37062:10;37083:46;37125:3;37117:6;37083:46;:::i;:::-;37161:4;37156:3;37152:14;37138:28;;36993:179;;;;:::o;37178:113::-;37248:4;37280;37275:3;37271:14;37263:22;;37178:113;;;:::o;37327:732::-;37446:3;37475:54;37523:5;37475:54;:::i;:::-;37545:86;37624:6;37619:3;37545:86;:::i;:::-;37538:93;;37655:56;37705:5;37655:56;:::i;:::-;37734:7;37765:1;37750:284;37775:6;37772:1;37769:13;37750:284;;;37851:6;37845:13;37878:63;37937:3;37922:13;37878:63;:::i;:::-;37871:70;;37964:60;38017:6;37964:60;:::i;:::-;37954:70;;37810:224;37797:1;37794;37790:9;37785:14;;37750:284;;;37754:14;38050:3;38043:10;;37451:608;;;37327:732;;;;:::o;38065:831::-;38328:4;38366:3;38355:9;38351:19;38343:27;;38380:71;38448:1;38437:9;38433:17;38424:6;38380:71;:::i;:::-;38461:80;38537:2;38526:9;38522:18;38513:6;38461:80;:::i;:::-;38588:9;38582:4;38578:20;38573:2;38562:9;38558:18;38551:48;38616:108;38719:4;38710:6;38616:108;:::i;:::-;38608:116;;38734:72;38802:2;38791:9;38787:18;38778:6;38734:72;:::i;:::-;38816:73;38884:3;38873:9;38869:19;38860:6;38816:73;:::i;:::-;38065:831;;;;;;;;:::o;38902:807::-;39151:4;39189:3;39178:9;39174:19;39166:27;;39203:71;39271:1;39260:9;39256:17;39247:6;39203:71;:::i;:::-;39284:72;39352:2;39341:9;39337:18;39328:6;39284:72;:::i;:::-;39366:80;39442:2;39431:9;39427:18;39418:6;39366:80;:::i;:::-;39456;39532:2;39521:9;39517:18;39508:6;39456:80;:::i;:::-;39546:73;39614:3;39603:9;39599:19;39590:6;39546:73;:::i;:::-;39629;39697:3;39686:9;39682:19;39673:6;39629:73;:::i;:::-;38902:807;;;;;;;;;:::o;39715:663::-;39803:6;39811;39819;39868:2;39856:9;39847:7;39843:23;39839:32;39836:119;;;39874:79;;:::i;:::-;39836:119;39994:1;40019:64;40075:7;40066:6;40055:9;40051:22;40019:64;:::i;:::-;40009:74;;39965:128;40132:2;40158:64;40214:7;40205:6;40194:9;40190:22;40158:64;:::i;:::-;40148:74;;40103:129;40271:2;40297:64;40353:7;40344:6;40333:9;40329:22;40297:64;:::i;:::-;40287:74;;40242:129;39715:663;;;;;:::o

Swarm Source

ipfs://88c88ba47f643adf8346044cf4710fa7bff86e324b8eddf5641d459d49c4c897
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.