ETH Price: $2,380.59 (-1.14%)

Token

Alien Ape Club (AAC)
 

Overview

Max Total Supply

100,000,000 AAC

Holders

85

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Balance
311,987.309828669120264928 AAC

Value
$0.00
0x840780121c35FF85243d2aF8023b2E3b0b5C4165
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:
AAC

Compiler Version
v0.8.19+commit.7dd6d404

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, Unlicense license

Contract Source Code (Solidity)

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

/**

https://alienapeclub.xyz/
https://t.me/ALIENAPECLUB
https://twitter.com/AL1ENAPECLUB

*/

// 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 AAC 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("Alien Ape Club", "AAC") {
        
        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 = 25;
        uint256 _buyLiquidityFee = 0;
        uint256 _buyDevFee = 0;

        uint256 _sellMarketingFee = 35;
        uint256 _sellLiquidityFee = 0;
        uint256 _sellDevFee = 0;
        
        uint256 totalSupply = 100000000 * 1e18; 
        
        maxTransactionAmount = totalSupply * 2 / 100; // 2% maxTransactionAmountTxn
        maxWallet = totalSupply * 2 / 100; // 2% 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(0xB51CB5a496784c0F9C8F3f4aC0c9e8ccd1241620); // set as marketing wallet
        devWallet = address(0x4B30A4A61D1DAfB1cFD175A42281ef6cc0d0Df51); // 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 removealllimits() 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 updateMarketingWalletdetails(address newMarketingWallet) external onlyOwner {
        marketingWallet = newMarketingWallet;
    }
    
    function updateDevWalletdetails(address newWallet) external onlyOwner {
        devWallet = newWallet;
    }

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

    function manageall_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":"manageall_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":"removealllimits","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":"updateDevWalletdetails","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newMarketingWallet","type":"address"}],"name":"updateMarketingWalletdetails","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"}]

60c06040526019600b556000600c60006101000a81548160ff021916908315150217905550610e10600d55610708600f556001601160006101000a81548160ff0219169083151502179055506000601160016101000a81548160ff0219169083151502179055506000601160026101000a81548160ff0219169083151502179055506001601460006101000a81548160ff021916908315150217905550348015620000a957600080fd5b506040518060400160405280600e81526020017f416c69656e2041706520436c75620000000000000000000000000000000000008152506040518060400160405280600381526020017f4141430000000000000000000000000000000000000000000000000000000000815250816003908162000127919062000d7e565b50806004908162000139919062000d7e565b50505060006200014e6200067160201b60201c565b905080600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3506000737a250d5630b4cf539739df2c5dacb4c659f2488d9050620002198160016200067960201b60201c565b8073ffffffffffffffffffffffffffffffffffffffff1660808173ffffffffffffffffffffffffffffffffffffffff16815250508073ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000299573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002bf919062000ecf565b73ffffffffffffffffffffffffffffffffffffffff1663c9c65396308373ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000327573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200034d919062000ecf565b6040518363ffffffff1660e01b81526004016200036c92919062000f12565b6020604051808303816000875af11580156200038c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620003b2919062000ecf565b73ffffffffffffffffffffffffffffffffffffffff1660a08173ffffffffffffffffffffffffffffffffffffffff1681525050620003fa60a05160016200067960201b60201c565b6200040f60a05160016200077660201b60201c565b60006019905060008060006023905060008060006a52b7d2dcc80cd2e40000009050606460028262000442919062000f6e565b6200044e919062000fe8565b600881905550606460028262000465919062000f6e565b62000471919062000fe8565b600a819055506103e860058262000489919062000f6e565b62000495919062000fe8565b600981905550866016819055508560178190555084601881905550601854601754601654620004c5919062001020565b620004d1919062001020565b60158190555083601a8190555082601b8190555081601c81905550601c54601b54601a5462000501919062001020565b6200050d919062001020565b60198190555073b51cb5a496784c0f9c8f3f4ac0c9e8ccd1241620600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550734b30a4a61d1dafb1cfd175a42281ef6cc0d0df51600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550620005df620005d1620007d160201b60201c565b6001620007fb60201b60201c565b620005f2306001620007fb60201b60201c565b6200060761dead6001620007fb60201b60201c565b620006296200061b620007d160201b60201c565b60016200067960201b60201c565b6200063c3060016200067960201b60201c565b6200065161dead60016200067960201b60201c565b620006633382620008f860201b60201c565b5050505050505050620011f0565b600033905090565b620006896200067160201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146200071b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200071290620010bc565b60405180910390fd5b80602260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b80602360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6200080b6200067160201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146200089d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200089490620010bc565b60405180910390fd5b80602160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036200096a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000961906200112e565b60405180910390fd5b6200097e6000838362000a9c60201b60201c565b620009958160025462000aa160201b90919060201c565b600281905550620009ee816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205462000aa160201b90919060201c565b6000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405162000a90919062001161565b60405180910390a35050565b505050565b600080828462000ab2919062001020565b90508381101562000afa576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000af190620011ce565b60405180910390fd5b8091505092915050565b600081519050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168062000b8657607f821691505b60208210810362000b9c5762000b9b62000b3e565b5b50919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b60006008830262000c067fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8262000bc7565b62000c12868362000bc7565b95508019841693508086168417925050509392505050565b6000819050919050565b6000819050919050565b600062000c5f62000c5962000c538462000c2a565b62000c34565b62000c2a565b9050919050565b6000819050919050565b62000c7b8362000c3e565b62000c9362000c8a8262000c66565b84845462000bd4565b825550505050565b600090565b62000caa62000c9b565b62000cb781848462000c70565b505050565b5b8181101562000cdf5762000cd360008262000ca0565b60018101905062000cbd565b5050565b601f82111562000d2e5762000cf88162000ba2565b62000d038462000bb7565b8101602085101562000d13578190505b62000d2b62000d228562000bb7565b83018262000cbc565b50505b505050565b600082821c905092915050565b600062000d536000198460080262000d33565b1980831691505092915050565b600062000d6e838362000d40565b9150826002028217905092915050565b62000d898262000b04565b67ffffffffffffffff81111562000da55762000da462000b0f565b5b62000db1825462000b6d565b62000dbe82828562000ce3565b600060209050601f83116001811462000df6576000841562000de1578287015190505b62000ded858262000d60565b86555062000e5d565b601f19841662000e068662000ba2565b60005b8281101562000e305784890151825560018201915060208501945060208101905062000e09565b8683101562000e50578489015162000e4c601f89168262000d40565b8355505b6001600288020188555050505b505050505050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600062000e978262000e6a565b9050919050565b62000ea98162000e8a565b811462000eb557600080fd5b50565b60008151905062000ec98162000e9e565b92915050565b60006020828403121562000ee85762000ee762000e65565b5b600062000ef88482850162000eb8565b91505092915050565b62000f0c8162000e8a565b82525050565b600060408201905062000f29600083018562000f01565b62000f38602083018462000f01565b9392505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600062000f7b8262000c2a565b915062000f888362000c2a565b925082820262000f988162000c2a565b9150828204841483151762000fb25762000fb162000f3f565b5b5092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600062000ff58262000c2a565b9150620010028362000c2a565b92508262001015576200101462000fb9565b5b828204905092915050565b60006200102d8262000c2a565b91506200103a8362000c2a565b925082820190508082111562001055576200105462000f3f565b5b92915050565b600082825260208201905092915050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000620010a46020836200105b565b9150620010b1826200106c565b602082019050919050565b60006020820190508181036000830152620010d78162001095565b9050919050565b7f45524332303a206d696e7420746f20746865207a65726f206164647265737300600082015250565b600062001116601f836200105b565b91506200112382620010de565b602082019050919050565b60006020820190508181036000830152620011498162001107565b9050919050565b6200115b8162000c2a565b82525050565b600060208201905062001178600083018462001150565b92915050565b7f536166654d6174683a206164646974696f6e206f766572666c6f770000000000600082015250565b6000620011b6601b836200105b565b9150620011c3826200117e565b602082019050919050565b60006020820190508181036000830152620011e981620011a7565b9050919050565b60805160a05161578c6200125c60003960008181611656015281816127ee01528181612897015281816128c40152612fd80152600081816112ab01528181612f8001528181613f1701528181613ff80152818161401f015281816140bb01526140e2015261578c6000f3fe6080604052600436106103b15760003560e01c80638da5cb5b116101e7578063c17b5b8c1161010d578063e2f45605116100a0578063f63743421161006f578063f637434214610e15578063f8b45b0514610e40578063fe575a8714610e6b578063fe72b27a14610ea8576103b8565b8063e2f4560514610d6d578063f11a24d314610d98578063f2fde38b14610dc3578063f421764814610dec576103b8565b8063c9567bf9116100dc578063c9567bf914610cb1578063d257b34f14610cc8578063d85ba06314610d05578063dd62ed3e14610d30576103b8565b8063c17b5b8c14610c09578063c876d0b914610c32578063c8c8ebe414610c5d578063c9413b2614610c88576103b8565b80639fccce3211610185578063a9059cbb11610154578063a9059cbb14610b3b578063b62496f514610b78578063bbc0c74214610bb5578063c024666814610be0576103b8565b80639fccce3214610a7d578063a0d82dc514610aa8578063a457c2d714610ad3578063a4c82a0014610b10576103b8565b8063924de9b7116101c1578063924de9b7146109d357806395d89b41146109fc5780639c3b4fdc14610a275780639ec22c0e14610a52576103b8565b80638da5cb5b146109525780638ea5220f1461097d57806392136913146109a8576103b8565b80632e8de6a0116102d75780636ddd17131161026a5780637571336a116102395780637571336a146108aa57806375f0a874146108d35780637bce5a04146108fe5780638095d56414610929576103b8565b80636ddd1713146107ee5780636f9170f61461081957806370a0823114610856578063715018a614610893576103b8565b806349bd5a5e116102a657806349bd5a5e146107305780634a62bb651461075b5780634fbee193146107865780636a486a8e146107c3576103b8565b80632e8de6a0146106745780632f18dd911461069d578063313ce567146106c857806339509351146106f3576103b8565b8063184c16c51161034f57806323b872dd1161031e57806323b872dd146105b657806327c8f835146105f35780632c3e486c1461061e5780632e82f1a014610649576103b8565b8063184c16c51461050a578063199ffc72146105355780631a8145bb146105605780631f3fed8f1461058b576103b8565b806310d5de531161038b57806310d5de531461044e57806311a582c31461048b5780631694505e146104b457806318160ddd146104df576103b8565b806306fdde03146103bd57806308a925ce146103e8578063095ea7b314610411576103b8565b366103b857005b600080fd5b3480156103c957600080fd5b506103d2610ee5565b6040516103df9190614221565b60405180910390f35b3480156103f457600080fd5b5061040f600480360381019061040a91906142ed565b610f77565b005b34801561041d57600080fd5b5061043860048036038101906104339190614363565b6110d8565b60405161044591906143b2565b60405180910390f35b34801561045a57600080fd5b50610475600480360381019061047091906143cd565b6110f6565b60405161048291906143b2565b60405180910390f35b34801561049757600080fd5b506104b260048036038101906104ad91906143fa565b611116565b005b3480156104c057600080fd5b506104c96112a9565b6040516104d69190614499565b60405180910390f35b3480156104eb57600080fd5b506104f46112cd565b60405161050191906144c3565b60405180910390f35b34801561051657600080fd5b5061051f6112d7565b60405161052c91906144c3565b60405180910390f35b34801561054157600080fd5b5061054a6112dd565b60405161055791906144c3565b60405180910390f35b34801561056c57600080fd5b506105756112e3565b60405161058291906144c3565b60405180910390f35b34801561059757600080fd5b506105a06112e9565b6040516105ad91906144c3565b60405180910390f35b3480156105c257600080fd5b506105dd60048036038101906105d891906144de565b6112ef565b6040516105ea91906143b2565b60405180910390f35b3480156105ff57600080fd5b506106086113c8565b6040516106159190614540565b60405180910390f35b34801561062a57600080fd5b506106336113ce565b60405161064091906144c3565b60405180910390f35b34801561065557600080fd5b5061065e6113d4565b60405161066b91906143b2565b60405180910390f35b34801561068057600080fd5b5061069b600480360381019061069691906143cd565b6113e7565b005b3480156106a957600080fd5b506106b26114c2565b6040516106bf91906143b2565b60405180910390f35b3480156106d457600080fd5b506106dd611598565b6040516106ea9190614577565b60405180910390f35b3480156106ff57600080fd5b5061071a60048036038101906107159190614363565b6115a1565b60405161072791906143b2565b60405180910390f35b34801561073c57600080fd5b50610745611654565b6040516107529190614540565b60405180910390f35b34801561076757600080fd5b50610770611678565b60405161077d91906143b2565b60405180910390f35b34801561079257600080fd5b506107ad60048036038101906107a891906143cd565b61168b565b6040516107ba91906143b2565b60405180910390f35b3480156107cf57600080fd5b506107d86116e1565b6040516107e591906144c3565b60405180910390f35b3480156107fa57600080fd5b506108036116e7565b60405161081091906143b2565b60405180910390f35b34801561082557600080fd5b50610840600480360381019061083b91906143cd565b6116fa565b60405161084d91906143b2565b60405180910390f35b34801561086257600080fd5b5061087d600480360381019061087891906143cd565b611750565b60405161088a91906144c3565b60405180910390f35b34801561089f57600080fd5b506108a8611798565b005b3480156108b657600080fd5b506108d160048036038101906108cc91906142ed565b6118f0565b005b3480156108df57600080fd5b506108e86119e2565b6040516108f59190614540565b60405180910390f35b34801561090a57600080fd5b50610913611a08565b60405161092091906144c3565b60405180910390f35b34801561093557600080fd5b50610950600480360381019061094b9190614592565b611a0e565b005b34801561095e57600080fd5b50610967611b28565b6040516109749190614540565b60405180910390f35b34801561098957600080fd5b50610992611b52565b60405161099f9190614540565b60405180910390f35b3480156109b457600080fd5b506109bd611b78565b6040516109ca91906144c3565b60405180910390f35b3480156109df57600080fd5b506109fa60048036038101906109f591906145e5565b611b7e565b005b348015610a0857600080fd5b50610a11611c32565b604051610a1e9190614221565b60405180910390f35b348015610a3357600080fd5b50610a3c611cc4565b604051610a4991906144c3565b60405180910390f35b348015610a5e57600080fd5b50610a67611cca565b604051610a7491906144c3565b60405180910390f35b348015610a8957600080fd5b50610a92611cd0565b604051610a9f91906144c3565b60405180910390f35b348015610ab457600080fd5b50610abd611cd6565b604051610aca91906144c3565b60405180910390f35b348015610adf57600080fd5b50610afa6004803603810190610af59190614363565b611cdc565b604051610b0791906143b2565b60405180910390f35b348015610b1c57600080fd5b50610b25611da9565b604051610b3291906144c3565b60405180910390f35b348015610b4757600080fd5b50610b626004803603810190610b5d9190614363565b611daf565b604051610b6f91906143b2565b60405180910390f35b348015610b8457600080fd5b50610b9f6004803603810190610b9a91906143cd565b611dcd565b604051610bac91906143b2565b60405180910390f35b348015610bc157600080fd5b50610bca611ded565b604051610bd791906143b2565b60405180910390f35b348015610bec57600080fd5b50610c076004803603810190610c0291906142ed565b611e00565b005b348015610c1557600080fd5b50610c306004803603810190610c2b9190614592565b611ef2565b005b348015610c3e57600080fd5b50610c4761200c565b604051610c5491906143b2565b60405180910390f35b348015610c6957600080fd5b50610c7261201f565b604051610c7f91906144c3565b60405180910390f35b348015610c9457600080fd5b50610caf6004803603810190610caa91906143cd565b612025565b005b348015610cbd57600080fd5b50610cc6612100565b005b348015610cd457600080fd5b50610cef6004803603810190610cea9190614612565b6121d6565b604051610cfc91906143b2565b60405180910390f35b348015610d1157600080fd5b50610d1a6122e1565b604051610d2791906144c3565b60405180910390f35b348015610d3c57600080fd5b50610d576004803603810190610d52919061463f565b6122e7565b604051610d6491906144c3565b60405180910390f35b348015610d7957600080fd5b50610d8261236e565b604051610d8f91906144c3565b60405180910390f35b348015610da457600080fd5b50610dad612374565b604051610dba91906144c3565b60405180910390f35b348015610dcf57600080fd5b50610dea6004803603810190610de591906143cd565b61237a565b005b348015610df857600080fd5b50610e136004803603810190610e0e91906147c7565b612540565b005b348015610e2157600080fd5b50610e2a61266c565b604051610e3791906144c3565b60405180910390f35b348015610e4c57600080fd5b50610e55612672565b604051610e6291906144c3565b60405180910390f35b348015610e7757600080fd5b50610e926004803603810190610e8d91906143cd565b612678565b604051610e9f91906143b2565b60405180910390f35b348015610eb457600080fd5b50610ecf6004803603810190610eca9190614612565b612698565b604051610edc91906143b2565b60405180910390f35b606060038054610ef49061483f565b80601f0160208091040260200160405190810160405280929190818152602001828054610f209061483f565b8015610f6d5780601f10610f4257610100808354040283529160200191610f6d565b820191906000526020600020905b815481529060010190602001808311610f5057829003601f168201915b5050505050905090565b610f7f612951565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461100e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611005906148bc565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361107d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161107490614928565b60405180910390fd5b80601360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b60006110ec6110e5612951565b8484612959565b6001905092915050565b60226020528060005260406000206000915054906101000a900460ff1681565b61111e612951565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146111ad576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111a4906148bc565b60405180910390fd5b60018210156111f1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111e8906149ba565b60405180910390fd5b670de0b6b3a76400006064836112056112cd565b61120f9190614a09565b6112199190614a7a565b6112239190614a7a565b600881905550600181101561126d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161126490614b1d565b60405180910390fd5b670de0b6b3a76400006064826112816112cd565b61128b9190614a09565b6112959190614a7a565b61129f9190614a7a565b600a819055505050565b7f000000000000000000000000000000000000000000000000000000000000000081565b6000600254905090565b600f5481565b600b5481565b601e5481565b601d5481565b60006112fc848484612b22565b6113bd84611308612951565b6113b88560405180606001604052806028815260200161570a60289139600160008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600061136e612951565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461389e9092919063ffffffff16565b612959565b600190509392505050565b61dead81565b600d5481565b600c60009054906101000a900460ff1681565b6113ef612951565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461147e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611475906148bc565b60405180910390fd5b80600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60006114cc612951565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461155b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611552906148bc565b60405180910390fd5b6000601160006101000a81548160ff0219169083151502179055506000601460006101000a81548160ff0219169083151502179055506001905090565b60006012905090565b600061164a6115ae612951565b8461164585600160006115bf612951565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461390290919063ffffffff16565b612959565b6001905092915050565b7f000000000000000000000000000000000000000000000000000000000000000081565b601160009054906101000a900460ff1681565b6000602160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b60195481565b601160029054906101000a900460ff1681565b6000602060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6117a0612951565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461182f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611826906148bc565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a36000600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b6118f8612951565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611987576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161197e906148bc565b60405180910390fd5b80602260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60165481565b611a16612951565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611aa5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a9c906148bc565b60405180910390fd5b826016819055508160178190555080601881905550601854601754601654611acd9190614b3d565b611ad79190614b3d565b60158190555060286015541115611b23576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b1a90614bbd565b60405180910390fd5b505050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b601a5481565b611b86612951565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611c15576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c0c906148bc565b60405180910390fd5b80601160026101000a81548160ff02191690831515021790555050565b606060048054611c419061483f565b80601f0160208091040260200160405190810160405280929190818152602001828054611c6d9061483f565b8015611cba5780601f10611c8f57610100808354040283529160200191611cba565b820191906000526020600020905b815481529060010190602001808311611c9d57829003601f168201915b5050505050905090565b60185481565b60105481565b601f5481565b601c5481565b6000611d9f611ce9612951565b84611d9a856040518060600160405280602581526020016157326025913960016000611d13612951565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461389e9092919063ffffffff16565b612959565b6001905092915050565b600e5481565b6000611dc3611dbc612951565b8484612b22565b6001905092915050565b60236020528060005260406000206000915054906101000a900460ff1681565b601160019054906101000a900460ff1681565b611e08612951565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611e97576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e8e906148bc565b60405180910390fd5b80602160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b611efa612951565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611f89576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f80906148bc565b60405180910390fd5b82601a8190555081601b8190555080601c81905550601c54601b54601a54611fb19190614b3d565b611fbb9190614b3d565b60198190555060286019541115612007576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ffe90614bbd565b60405180910390fd5b505050565b601460009054906101000a900460ff1681565b60085481565b61202d612951565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146120bc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120b3906148bc565b60405180910390fd5b80600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b612108612951565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612197576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161218e906148bc565b60405180910390fd5b6001601160016101000a81548160ff0219169083151502179055506001601160026101000a81548160ff02191690831515021790555042600e81905550565b60006121e0612951565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461226f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612266906148bc565b60405180910390fd5b60018211156122b3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122aa90614c4f565b60405180910390fd5b6064826122be6112cd565b6122c89190614a09565b6122d29190614a7a565b60098190555060019050919050565b60155481565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b60095481565b60175481565b612382612951565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612411576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612408906148bc565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603612480576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161247790614ce1565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a380600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b612548612951565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146125d7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125ce906148bc565b60405180910390fd5b60005b8151811015612668576001602060008484815181106125fc576125fb614d01565b5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550808061266090614d30565b9150506125da565b5050565b601b5481565b600a5481565b60136020528060005260406000206000915054906101000a900460ff1681565b60006126a2612951565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612731576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612728906148bc565b60405180910390fd5b600f546010546127419190614b3d565b4211612782576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161277990614dc4565b60405180910390fd5b6103e88211156127c7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127be90614e56565b60405180910390fd5b4260108190555060003073ffffffffffffffffffffffffffffffffffffffff166370a082317f00000000000000000000000000000000000000000000000000000000000000006040518263ffffffff1660e01b81526004016128299190614540565b602060405180830381865afa158015612846573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061286a9190614e8b565b90506000612710848361287d9190614a09565b6128879190614a7a565b905060008111156128c0576128bf7f000000000000000000000000000000000000000000000000000000000000000061dead83613960565b5b60007f000000000000000000000000000000000000000000000000000000000000000090508073ffffffffffffffffffffffffffffffffffffffff1663fff6cae96040518163ffffffff1660e01b8152600401600060405180830381600087803b15801561292d57600080fd5b505af1158015612941573d6000803e3d6000fd5b5050505060019350505050919050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036129c8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016129bf90614f2a565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612a37576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a2e90614fbc565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92583604051612b1591906144c3565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612b91576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b889061504e565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612c00576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612bf7906150e0565b60405180910390fd5b601360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16158015612ca45750601360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b612ce3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612cda9061514c565b60405180910390fd5b60008103612cfc57612cf783836000613960565b613899565b601160009054906101000a900460ff16156133dd57612d19611b28565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614158015612d875750612d57611b28565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015612dc05750600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015612dfa575061dead73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015612e135750600560149054906101000a900460ff16155b156133dc57601160019054906101000a900460ff16612f2b57602060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680612ecd5750602060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b80612f215750602060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b612f2a57600080fd5b5b601460009054906101000a900460ff16156130f357612f48611b28565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614158015612fcf57507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b801561302757507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b156130f25743601260003273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054106130ad576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016130a490615204565b60405180910390fd5b43601260003273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b5b602360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156131965750602260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b1561323d576008548111156131e0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016131d790615296565b60405180910390fd5b600a546131ec83611750565b826131f79190614b3d565b1115613238576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161322f90615302565b60405180910390fd5b6133db565b602360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156132e05750602260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b1561332f5760085481111561332a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161332190615394565b60405180910390fd5b6133da565b602260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff166133d957600a5461338c83611750565b826133979190614b3d565b11156133d8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016133cf90615302565b60405180910390fd5b5b5b5b5b5b60006133e830611750565b90506000600954821015905080801561340d5750601160029054906101000a900460ff165b80156134265750600560149054906101000a900460ff16155b801561347c5750602360008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b80156134d25750602160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b80156135285750602160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b1561356c576001600560146101000a81548160ff021916908315150217905550613550613bf3565b6000600560146101000a81548160ff0219169083151502179055505b6000600560149054906101000a900460ff16159050602160008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16806136225750602160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b1561362c57600090505b6000811561388957602360008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16801561368f57506000601954115b1561374e576064601954866136a49190614a09565b6136ae9190614a7a565b9050601954601b54826136c19190614a09565b6136cb9190614a7a565b601e60008282546136dc9190614b3d565b92505081905550601954601c54826136f49190614a09565b6136fe9190614a7a565b601f600082825461370f9190614b3d565b92505081905550601954601a54826137279190614a09565b6137319190614a7a565b601d60008282546137429190614b3d565b92505081905550613865565b602360008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156137a957506000601554115b15613864576064601554866137be9190614a09565b6137c89190614a7a565b9050601554601754826137db9190614a09565b6137e59190614a7a565b601e60008282546137f69190614b3d565b925050819055506015546018548261380e9190614a09565b6138189190614a7a565b601f60008282546138299190614b3d565b92505081905550601554601654826138419190614a09565b61384b9190614a7a565b601d600082825461385c9190614b3d565b925050819055505b5b600081111561387a57613879873083613960565b5b808561388691906153b4565b94505b613894878787613960565b505050505b505050565b60008383111582906138e6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016138dd9190614221565b60405180910390fd5b50600083856138f591906153b4565b9050809150509392505050565b60008082846139119190614b3d565b905083811015613956576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161394d90615434565b60405180910390fd5b8091505092915050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036139cf576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016139c69061504e565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603613a3e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613a35906150e0565b60405180910390fd5b613a49838383613e73565b613ab4816040518060600160405280602681526020016156e4602691396000808773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461389e9092919063ffffffff16565b6000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550613b47816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461390290919063ffffffff16565b6000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051613be691906144c3565b60405180910390a3505050565b6000613bfe30611750565b90506000601f54601d54601e54613c159190614b3d565b613c1f9190614b3d565b9050600080831480613c315750600082145b15613c3e57505050613e71565b6014600954613c4d9190614a09565b831115613c66576014600954613c639190614a09565b92505b6000600283601e5486613c799190614a09565b613c839190614a7a565b613c8d9190614a7a565b905060008185613c9d91906153b4565b90506000479050613cad82613e78565b60008147613cbb91906153b4565b9050600086601d5483613cce9190614a09565b613cd89190614a7a565b9050600087601f5484613ceb9190614a09565b613cf59190614a7a565b90506000818385613d0691906153b4565b613d1091906153b4565b90506000601e819055506000601d819055506000601f81905550600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1682604051613d7090615485565b60006040518083038185875af1925050503d8060008114613dad576040519150601f19603f3d011682016040523d82523d6000602084013e613db2565b606091505b505080985050600087118015613dc85750600081115b15613dd857613dd787826140b5565b5b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1647604051613e1e90615485565b60006040518083038185875af1925050503d8060008114613e5b576040519150601f19603f3d011682016040523d82523d6000602084013e613e60565b606091505b505080985050505050505050505050505b565b505050565b6000600267ffffffffffffffff811115613e9557613e94614684565b5b604051908082528060200260200182016040528015613ec35781602001602082028036833780820191505090505b5090503081600081518110613edb57613eda614d01565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015613f80573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613fa491906154af565b81600181518110613fb857613fb7614d01565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505061401d307f000000000000000000000000000000000000000000000000000000000000000084612959565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b815260040161407f9594939291906155d5565b600060405180830381600087803b15801561409957600080fd5b505af11580156140ad573d6000803e3d6000fd5b505050505050565b6140e0307f000000000000000000000000000000000000000000000000000000000000000084612959565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663f305d71982308560008061dead426040518863ffffffff1660e01b81526004016141479695949392919061562f565b60606040518083038185885af1158015614165573d6000803e3d6000fd5b50505050506040513d601f19601f8201168201806040525081019061418a9190615690565b5050505050565b600081519050919050565b600082825260208201905092915050565b60005b838110156141cb5780820151818401526020810190506141b0565b60008484015250505050565b6000601f19601f8301169050919050565b60006141f382614191565b6141fd818561419c565b935061420d8185602086016141ad565b614216816141d7565b840191505092915050565b6000602082019050818103600083015261423b81846141e8565b905092915050565b6000604051905090565b600080fd5b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600061428282614257565b9050919050565b61429281614277565b811461429d57600080fd5b50565b6000813590506142af81614289565b92915050565b60008115159050919050565b6142ca816142b5565b81146142d557600080fd5b50565b6000813590506142e7816142c1565b92915050565b600080604083850312156143045761430361424d565b5b6000614312858286016142a0565b9250506020614323858286016142d8565b9150509250929050565b6000819050919050565b6143408161432d565b811461434b57600080fd5b50565b60008135905061435d81614337565b92915050565b6000806040838503121561437a5761437961424d565b5b6000614388858286016142a0565b92505060206143998582860161434e565b9150509250929050565b6143ac816142b5565b82525050565b60006020820190506143c760008301846143a3565b92915050565b6000602082840312156143e3576143e261424d565b5b60006143f1848285016142a0565b91505092915050565b600080604083850312156144115761441061424d565b5b600061441f8582860161434e565b92505060206144308582860161434e565b9150509250929050565b6000819050919050565b600061445f61445a61445584614257565b61443a565b614257565b9050919050565b600061447182614444565b9050919050565b600061448382614466565b9050919050565b61449381614478565b82525050565b60006020820190506144ae600083018461448a565b92915050565b6144bd8161432d565b82525050565b60006020820190506144d860008301846144b4565b92915050565b6000806000606084860312156144f7576144f661424d565b5b6000614505868287016142a0565b9350506020614516868287016142a0565b92505060406145278682870161434e565b9150509250925092565b61453a81614277565b82525050565b60006020820190506145556000830184614531565b92915050565b600060ff82169050919050565b6145718161455b565b82525050565b600060208201905061458c6000830184614568565b92915050565b6000806000606084860312156145ab576145aa61424d565b5b60006145b98682870161434e565b93505060206145ca8682870161434e565b92505060406145db8682870161434e565b9150509250925092565b6000602082840312156145fb576145fa61424d565b5b6000614609848285016142d8565b91505092915050565b6000602082840312156146285761462761424d565b5b60006146368482850161434e565b91505092915050565b600080604083850312156146565761465561424d565b5b6000614664858286016142a0565b9250506020614675858286016142a0565b9150509250929050565b600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6146bc826141d7565b810181811067ffffffffffffffff821117156146db576146da614684565b5b80604052505050565b60006146ee614243565b90506146fa82826146b3565b919050565b600067ffffffffffffffff82111561471a57614719614684565b5b602082029050602081019050919050565b600080fd5b600061474361473e846146ff565b6146e4565b905080838252602082019050602084028301858111156147665761476561472b565b5b835b8181101561478f578061477b88826142a0565b845260208401935050602081019050614768565b5050509392505050565b600082601f8301126147ae576147ad61467f565b5b81356147be848260208601614730565b91505092915050565b6000602082840312156147dd576147dc61424d565b5b600082013567ffffffffffffffff8111156147fb576147fa614252565b5b61480784828501614799565b91505092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168061485757607f821691505b60208210810361486a57614869614810565b5b50919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b60006148a660208361419c565b91506148b182614870565b602082019050919050565b600060208201905081810360008301526148d581614899565b9050919050565b7f416464726573732073686f756c64206e6f742062652030000000000000000000600082015250565b600061491260178361419c565b915061491d826148dc565b602082019050919050565b6000602082019050818103600083015261494181614905565b9050919050565b7f43616e6e6f7420736574206d61785472616e73616374696f6e416d6f756e742060008201527f6c6f776572207468616e20312500000000000000000000000000000000000000602082015250565b60006149a4602d8361419c565b91506149af82614948565b604082019050919050565b600060208201905081810360008301526149d381614997565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000614a148261432d565b9150614a1f8361432d565b9250828202614a2d8161432d565b91508282048414831517614a4457614a436149da565b5b5092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000614a858261432d565b9150614a908361432d565b925082614aa057614a9f614a4b565b5b828204905092915050565b7f43616e6e6f7420736574206d617857616c6c6574206c6f776572207468616e2060008201527f3125000000000000000000000000000000000000000000000000000000000000602082015250565b6000614b0760228361419c565b9150614b1282614aab565b604082019050919050565b60006020820190508181036000830152614b3681614afa565b9050919050565b6000614b488261432d565b9150614b538361432d565b9250828201905080821115614b6b57614b6a6149da565b5b92915050565b7f4d757374206b656570206665657320617420343025206f72206c657373000000600082015250565b6000614ba7601d8361419c565b9150614bb282614b71565b602082019050919050565b60006020820190508181036000830152614bd681614b9a565b9050919050565b7f5377617020616d6f756e742063616e6e6f74206265206869676865722074686160008201527f6e20312520746f74616c20737570706c792e0000000000000000000000000000602082015250565b6000614c3960328361419c565b9150614c4482614bdd565b604082019050919050565b60006020820190508181036000830152614c6881614c2c565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000614ccb60268361419c565b9150614cd682614c6f565b604082019050919050565b60006020820190508181036000830152614cfa81614cbe565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6000614d3b8261432d565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203614d6d57614d6c6149da565b5b600182019050919050565b7f4d757374207761697420666f7220636f6f6c646f776e20746f2066696e697368600082015250565b6000614dae60208361419c565b9150614db982614d78565b602082019050919050565b60006020820190508181036000830152614ddd81614da1565b9050919050565b7f4d6179206e6f74206e756b65206d6f7265207468616e20313025206f6620746f60008201527f6b656e7320696e204c5000000000000000000000000000000000000000000000602082015250565b6000614e40602a8361419c565b9150614e4b82614de4565b604082019050919050565b60006020820190508181036000830152614e6f81614e33565b9050919050565b600081519050614e8581614337565b92915050565b600060208284031215614ea157614ea061424d565b5b6000614eaf84828501614e76565b91505092915050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b6000614f1460248361419c565b9150614f1f82614eb8565b604082019050919050565b60006020820190508181036000830152614f4381614f07565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b6000614fa660228361419c565b9150614fb182614f4a565b604082019050919050565b60006020820190508181036000830152614fd581614f99565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b600061503860258361419c565b915061504382614fdc565b604082019050919050565b600060208201905081810360008301526150678161502b565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b60006150ca60238361419c565b91506150d58261506e565b604082019050919050565b600060208201905081810360008301526150f9816150bd565b9050919050565b7f426c61636b6c6973746564000000000000000000000000000000000000000000600082015250565b6000615136600b8361419c565b915061514182615100565b602082019050919050565b6000602082019050818103600083015261516581615129565b9050919050565b7f5f7472616e736665723a3a205472616e736665722044656c617920656e61626c60008201527f65642e20204f6e6c79206f6e652070757263686173652070657220626c6f636b60208201527f20616c6c6f7765642e0000000000000000000000000000000000000000000000604082015250565b60006151ee60498361419c565b91506151f98261516c565b606082019050919050565b6000602082019050818103600083015261521d816151e1565b9050919050565b7f427579207472616e7366657220616d6f756e742065786365656473207468652060008201527f6d61785472616e73616374696f6e416d6f756e742e0000000000000000000000602082015250565b600061528060358361419c565b915061528b82615224565b604082019050919050565b600060208201905081810360008301526152af81615273565b9050919050565b7f4d61782077616c6c657420657863656564656400000000000000000000000000600082015250565b60006152ec60138361419c565b91506152f7826152b6565b602082019050919050565b6000602082019050818103600083015261531b816152df565b9050919050565b7f53656c6c207472616e7366657220616d6f756e7420657863656564732074686560008201527f206d61785472616e73616374696f6e416d6f756e742e00000000000000000000602082015250565b600061537e60368361419c565b915061538982615322565b604082019050919050565b600060208201905081810360008301526153ad81615371565b9050919050565b60006153bf8261432d565b91506153ca8361432d565b92508282039050818111156153e2576153e16149da565b5b92915050565b7f536166654d6174683a206164646974696f6e206f766572666c6f770000000000600082015250565b600061541e601b8361419c565b9150615429826153e8565b602082019050919050565b6000602082019050818103600083015261544d81615411565b9050919050565b600081905092915050565b50565b600061546f600083615454565b915061547a8261545f565b600082019050919050565b600061549082615462565b9150819050919050565b6000815190506154a981614289565b92915050565b6000602082840312156154c5576154c461424d565b5b60006154d38482850161549a565b91505092915050565b6000819050919050565b60006155016154fc6154f7846154dc565b61443a565b61432d565b9050919050565b615511816154e6565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b61554c81614277565b82525050565b600061555e8383615543565b60208301905092915050565b6000602082019050919050565b600061558282615517565b61558c8185615522565b935061559783615533565b8060005b838110156155c85781516155af8882615552565b97506155ba8361556a565b92505060018101905061559b565b5085935050505092915050565b600060a0820190506155ea60008301886144b4565b6155f76020830187615508565b81810360408301526156098186615577565b90506156186060830185614531565b61562560808301846144b4565b9695505050505050565b600060c0820190506156446000830189614531565b61565160208301886144b4565b61565e6040830187615508565b61566b6060830186615508565b6156786080830185614531565b61568560a08301846144b4565b979650505050505050565b6000806000606084860312156156a9576156a861424d565b5b60006156b786828701614e76565b93505060206156c886828701614e76565b92505060406156d986828701614e76565b915050925092509256fe45524332303a207472616e7366657220616d6f756e7420657863656564732062616c616e636545524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa26469706673582212207bf31ec7c886cbe12862d52ed2d64ea383f7e1b0e6616acf6de8546902d2e49864736f6c63430008130033

Deployed Bytecode

0x6080604052600436106103b15760003560e01c80638da5cb5b116101e7578063c17b5b8c1161010d578063e2f45605116100a0578063f63743421161006f578063f637434214610e15578063f8b45b0514610e40578063fe575a8714610e6b578063fe72b27a14610ea8576103b8565b8063e2f4560514610d6d578063f11a24d314610d98578063f2fde38b14610dc3578063f421764814610dec576103b8565b8063c9567bf9116100dc578063c9567bf914610cb1578063d257b34f14610cc8578063d85ba06314610d05578063dd62ed3e14610d30576103b8565b8063c17b5b8c14610c09578063c876d0b914610c32578063c8c8ebe414610c5d578063c9413b2614610c88576103b8565b80639fccce3211610185578063a9059cbb11610154578063a9059cbb14610b3b578063b62496f514610b78578063bbc0c74214610bb5578063c024666814610be0576103b8565b80639fccce3214610a7d578063a0d82dc514610aa8578063a457c2d714610ad3578063a4c82a0014610b10576103b8565b8063924de9b7116101c1578063924de9b7146109d357806395d89b41146109fc5780639c3b4fdc14610a275780639ec22c0e14610a52576103b8565b80638da5cb5b146109525780638ea5220f1461097d57806392136913146109a8576103b8565b80632e8de6a0116102d75780636ddd17131161026a5780637571336a116102395780637571336a146108aa57806375f0a874146108d35780637bce5a04146108fe5780638095d56414610929576103b8565b80636ddd1713146107ee5780636f9170f61461081957806370a0823114610856578063715018a614610893576103b8565b806349bd5a5e116102a657806349bd5a5e146107305780634a62bb651461075b5780634fbee193146107865780636a486a8e146107c3576103b8565b80632e8de6a0146106745780632f18dd911461069d578063313ce567146106c857806339509351146106f3576103b8565b8063184c16c51161034f57806323b872dd1161031e57806323b872dd146105b657806327c8f835146105f35780632c3e486c1461061e5780632e82f1a014610649576103b8565b8063184c16c51461050a578063199ffc72146105355780631a8145bb146105605780631f3fed8f1461058b576103b8565b806310d5de531161038b57806310d5de531461044e57806311a582c31461048b5780631694505e146104b457806318160ddd146104df576103b8565b806306fdde03146103bd57806308a925ce146103e8578063095ea7b314610411576103b8565b366103b857005b600080fd5b3480156103c957600080fd5b506103d2610ee5565b6040516103df9190614221565b60405180910390f35b3480156103f457600080fd5b5061040f600480360381019061040a91906142ed565b610f77565b005b34801561041d57600080fd5b5061043860048036038101906104339190614363565b6110d8565b60405161044591906143b2565b60405180910390f35b34801561045a57600080fd5b50610475600480360381019061047091906143cd565b6110f6565b60405161048291906143b2565b60405180910390f35b34801561049757600080fd5b506104b260048036038101906104ad91906143fa565b611116565b005b3480156104c057600080fd5b506104c96112a9565b6040516104d69190614499565b60405180910390f35b3480156104eb57600080fd5b506104f46112cd565b60405161050191906144c3565b60405180910390f35b34801561051657600080fd5b5061051f6112d7565b60405161052c91906144c3565b60405180910390f35b34801561054157600080fd5b5061054a6112dd565b60405161055791906144c3565b60405180910390f35b34801561056c57600080fd5b506105756112e3565b60405161058291906144c3565b60405180910390f35b34801561059757600080fd5b506105a06112e9565b6040516105ad91906144c3565b60405180910390f35b3480156105c257600080fd5b506105dd60048036038101906105d891906144de565b6112ef565b6040516105ea91906143b2565b60405180910390f35b3480156105ff57600080fd5b506106086113c8565b6040516106159190614540565b60405180910390f35b34801561062a57600080fd5b506106336113ce565b60405161064091906144c3565b60405180910390f35b34801561065557600080fd5b5061065e6113d4565b60405161066b91906143b2565b60405180910390f35b34801561068057600080fd5b5061069b600480360381019061069691906143cd565b6113e7565b005b3480156106a957600080fd5b506106b26114c2565b6040516106bf91906143b2565b60405180910390f35b3480156106d457600080fd5b506106dd611598565b6040516106ea9190614577565b60405180910390f35b3480156106ff57600080fd5b5061071a60048036038101906107159190614363565b6115a1565b60405161072791906143b2565b60405180910390f35b34801561073c57600080fd5b50610745611654565b6040516107529190614540565b60405180910390f35b34801561076757600080fd5b50610770611678565b60405161077d91906143b2565b60405180910390f35b34801561079257600080fd5b506107ad60048036038101906107a891906143cd565b61168b565b6040516107ba91906143b2565b60405180910390f35b3480156107cf57600080fd5b506107d86116e1565b6040516107e591906144c3565b60405180910390f35b3480156107fa57600080fd5b506108036116e7565b60405161081091906143b2565b60405180910390f35b34801561082557600080fd5b50610840600480360381019061083b91906143cd565b6116fa565b60405161084d91906143b2565b60405180910390f35b34801561086257600080fd5b5061087d600480360381019061087891906143cd565b611750565b60405161088a91906144c3565b60405180910390f35b34801561089f57600080fd5b506108a8611798565b005b3480156108b657600080fd5b506108d160048036038101906108cc91906142ed565b6118f0565b005b3480156108df57600080fd5b506108e86119e2565b6040516108f59190614540565b60405180910390f35b34801561090a57600080fd5b50610913611a08565b60405161092091906144c3565b60405180910390f35b34801561093557600080fd5b50610950600480360381019061094b9190614592565b611a0e565b005b34801561095e57600080fd5b50610967611b28565b6040516109749190614540565b60405180910390f35b34801561098957600080fd5b50610992611b52565b60405161099f9190614540565b60405180910390f35b3480156109b457600080fd5b506109bd611b78565b6040516109ca91906144c3565b60405180910390f35b3480156109df57600080fd5b506109fa60048036038101906109f591906145e5565b611b7e565b005b348015610a0857600080fd5b50610a11611c32565b604051610a1e9190614221565b60405180910390f35b348015610a3357600080fd5b50610a3c611cc4565b604051610a4991906144c3565b60405180910390f35b348015610a5e57600080fd5b50610a67611cca565b604051610a7491906144c3565b60405180910390f35b348015610a8957600080fd5b50610a92611cd0565b604051610a9f91906144c3565b60405180910390f35b348015610ab457600080fd5b50610abd611cd6565b604051610aca91906144c3565b60405180910390f35b348015610adf57600080fd5b50610afa6004803603810190610af59190614363565b611cdc565b604051610b0791906143b2565b60405180910390f35b348015610b1c57600080fd5b50610b25611da9565b604051610b3291906144c3565b60405180910390f35b348015610b4757600080fd5b50610b626004803603810190610b5d9190614363565b611daf565b604051610b6f91906143b2565b60405180910390f35b348015610b8457600080fd5b50610b9f6004803603810190610b9a91906143cd565b611dcd565b604051610bac91906143b2565b60405180910390f35b348015610bc157600080fd5b50610bca611ded565b604051610bd791906143b2565b60405180910390f35b348015610bec57600080fd5b50610c076004803603810190610c0291906142ed565b611e00565b005b348015610c1557600080fd5b50610c306004803603810190610c2b9190614592565b611ef2565b005b348015610c3e57600080fd5b50610c4761200c565b604051610c5491906143b2565b60405180910390f35b348015610c6957600080fd5b50610c7261201f565b604051610c7f91906144c3565b60405180910390f35b348015610c9457600080fd5b50610caf6004803603810190610caa91906143cd565b612025565b005b348015610cbd57600080fd5b50610cc6612100565b005b348015610cd457600080fd5b50610cef6004803603810190610cea9190614612565b6121d6565b604051610cfc91906143b2565b60405180910390f35b348015610d1157600080fd5b50610d1a6122e1565b604051610d2791906144c3565b60405180910390f35b348015610d3c57600080fd5b50610d576004803603810190610d52919061463f565b6122e7565b604051610d6491906144c3565b60405180910390f35b348015610d7957600080fd5b50610d8261236e565b604051610d8f91906144c3565b60405180910390f35b348015610da457600080fd5b50610dad612374565b604051610dba91906144c3565b60405180910390f35b348015610dcf57600080fd5b50610dea6004803603810190610de591906143cd565b61237a565b005b348015610df857600080fd5b50610e136004803603810190610e0e91906147c7565b612540565b005b348015610e2157600080fd5b50610e2a61266c565b604051610e3791906144c3565b60405180910390f35b348015610e4c57600080fd5b50610e55612672565b604051610e6291906144c3565b60405180910390f35b348015610e7757600080fd5b50610e926004803603810190610e8d91906143cd565b612678565b604051610e9f91906143b2565b60405180910390f35b348015610eb457600080fd5b50610ecf6004803603810190610eca9190614612565b612698565b604051610edc91906143b2565b60405180910390f35b606060038054610ef49061483f565b80601f0160208091040260200160405190810160405280929190818152602001828054610f209061483f565b8015610f6d5780601f10610f4257610100808354040283529160200191610f6d565b820191906000526020600020905b815481529060010190602001808311610f5057829003601f168201915b5050505050905090565b610f7f612951565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461100e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611005906148bc565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361107d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161107490614928565b60405180910390fd5b80601360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b60006110ec6110e5612951565b8484612959565b6001905092915050565b60226020528060005260406000206000915054906101000a900460ff1681565b61111e612951565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146111ad576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111a4906148bc565b60405180910390fd5b60018210156111f1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111e8906149ba565b60405180910390fd5b670de0b6b3a76400006064836112056112cd565b61120f9190614a09565b6112199190614a7a565b6112239190614a7a565b600881905550600181101561126d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161126490614b1d565b60405180910390fd5b670de0b6b3a76400006064826112816112cd565b61128b9190614a09565b6112959190614a7a565b61129f9190614a7a565b600a819055505050565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d81565b6000600254905090565b600f5481565b600b5481565b601e5481565b601d5481565b60006112fc848484612b22565b6113bd84611308612951565b6113b88560405180606001604052806028815260200161570a60289139600160008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600061136e612951565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461389e9092919063ffffffff16565b612959565b600190509392505050565b61dead81565b600d5481565b600c60009054906101000a900460ff1681565b6113ef612951565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461147e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611475906148bc565b60405180910390fd5b80600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60006114cc612951565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461155b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611552906148bc565b60405180910390fd5b6000601160006101000a81548160ff0219169083151502179055506000601460006101000a81548160ff0219169083151502179055506001905090565b60006012905090565b600061164a6115ae612951565b8461164585600160006115bf612951565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461390290919063ffffffff16565b612959565b6001905092915050565b7f0000000000000000000000005eaa1a8d66a9005ae9cc88956576701ba67a072c81565b601160009054906101000a900460ff1681565b6000602160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b60195481565b601160029054906101000a900460ff1681565b6000602060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6117a0612951565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461182f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611826906148bc565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a36000600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b6118f8612951565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611987576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161197e906148bc565b60405180910390fd5b80602260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60165481565b611a16612951565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611aa5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a9c906148bc565b60405180910390fd5b826016819055508160178190555080601881905550601854601754601654611acd9190614b3d565b611ad79190614b3d565b60158190555060286015541115611b23576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b1a90614bbd565b60405180910390fd5b505050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b601a5481565b611b86612951565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611c15576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c0c906148bc565b60405180910390fd5b80601160026101000a81548160ff02191690831515021790555050565b606060048054611c419061483f565b80601f0160208091040260200160405190810160405280929190818152602001828054611c6d9061483f565b8015611cba5780601f10611c8f57610100808354040283529160200191611cba565b820191906000526020600020905b815481529060010190602001808311611c9d57829003601f168201915b5050505050905090565b60185481565b60105481565b601f5481565b601c5481565b6000611d9f611ce9612951565b84611d9a856040518060600160405280602581526020016157326025913960016000611d13612951565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461389e9092919063ffffffff16565b612959565b6001905092915050565b600e5481565b6000611dc3611dbc612951565b8484612b22565b6001905092915050565b60236020528060005260406000206000915054906101000a900460ff1681565b601160019054906101000a900460ff1681565b611e08612951565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611e97576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e8e906148bc565b60405180910390fd5b80602160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b611efa612951565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611f89576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f80906148bc565b60405180910390fd5b82601a8190555081601b8190555080601c81905550601c54601b54601a54611fb19190614b3d565b611fbb9190614b3d565b60198190555060286019541115612007576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ffe90614bbd565b60405180910390fd5b505050565b601460009054906101000a900460ff1681565b60085481565b61202d612951565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146120bc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120b3906148bc565b60405180910390fd5b80600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b612108612951565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612197576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161218e906148bc565b60405180910390fd5b6001601160016101000a81548160ff0219169083151502179055506001601160026101000a81548160ff02191690831515021790555042600e81905550565b60006121e0612951565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461226f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612266906148bc565b60405180910390fd5b60018211156122b3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122aa90614c4f565b60405180910390fd5b6064826122be6112cd565b6122c89190614a09565b6122d29190614a7a565b60098190555060019050919050565b60155481565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b60095481565b60175481565b612382612951565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612411576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612408906148bc565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603612480576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161247790614ce1565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a380600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b612548612951565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146125d7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125ce906148bc565b60405180910390fd5b60005b8151811015612668576001602060008484815181106125fc576125fb614d01565b5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550808061266090614d30565b9150506125da565b5050565b601b5481565b600a5481565b60136020528060005260406000206000915054906101000a900460ff1681565b60006126a2612951565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612731576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612728906148bc565b60405180910390fd5b600f546010546127419190614b3d565b4211612782576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161277990614dc4565b60405180910390fd5b6103e88211156127c7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127be90614e56565b60405180910390fd5b4260108190555060003073ffffffffffffffffffffffffffffffffffffffff166370a082317f0000000000000000000000005eaa1a8d66a9005ae9cc88956576701ba67a072c6040518263ffffffff1660e01b81526004016128299190614540565b602060405180830381865afa158015612846573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061286a9190614e8b565b90506000612710848361287d9190614a09565b6128879190614a7a565b905060008111156128c0576128bf7f0000000000000000000000005eaa1a8d66a9005ae9cc88956576701ba67a072c61dead83613960565b5b60007f0000000000000000000000005eaa1a8d66a9005ae9cc88956576701ba67a072c90508073ffffffffffffffffffffffffffffffffffffffff1663fff6cae96040518163ffffffff1660e01b8152600401600060405180830381600087803b15801561292d57600080fd5b505af1158015612941573d6000803e3d6000fd5b5050505060019350505050919050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036129c8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016129bf90614f2a565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612a37576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a2e90614fbc565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92583604051612b1591906144c3565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612b91576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b889061504e565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612c00576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612bf7906150e0565b60405180910390fd5b601360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16158015612ca45750601360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b612ce3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612cda9061514c565b60405180910390fd5b60008103612cfc57612cf783836000613960565b613899565b601160009054906101000a900460ff16156133dd57612d19611b28565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614158015612d875750612d57611b28565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015612dc05750600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015612dfa575061dead73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015612e135750600560149054906101000a900460ff16155b156133dc57601160019054906101000a900460ff16612f2b57602060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680612ecd5750602060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b80612f215750602060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b612f2a57600080fd5b5b601460009054906101000a900460ff16156130f357612f48611b28565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614158015612fcf57507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b801561302757507f0000000000000000000000005eaa1a8d66a9005ae9cc88956576701ba67a072c73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b156130f25743601260003273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054106130ad576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016130a490615204565b60405180910390fd5b43601260003273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b5b602360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156131965750602260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b1561323d576008548111156131e0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016131d790615296565b60405180910390fd5b600a546131ec83611750565b826131f79190614b3d565b1115613238576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161322f90615302565b60405180910390fd5b6133db565b602360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156132e05750602260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b1561332f5760085481111561332a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161332190615394565b60405180910390fd5b6133da565b602260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff166133d957600a5461338c83611750565b826133979190614b3d565b11156133d8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016133cf90615302565b60405180910390fd5b5b5b5b5b5b60006133e830611750565b90506000600954821015905080801561340d5750601160029054906101000a900460ff165b80156134265750600560149054906101000a900460ff16155b801561347c5750602360008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b80156134d25750602160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b80156135285750602160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b1561356c576001600560146101000a81548160ff021916908315150217905550613550613bf3565b6000600560146101000a81548160ff0219169083151502179055505b6000600560149054906101000a900460ff16159050602160008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16806136225750602160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b1561362c57600090505b6000811561388957602360008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16801561368f57506000601954115b1561374e576064601954866136a49190614a09565b6136ae9190614a7a565b9050601954601b54826136c19190614a09565b6136cb9190614a7a565b601e60008282546136dc9190614b3d565b92505081905550601954601c54826136f49190614a09565b6136fe9190614a7a565b601f600082825461370f9190614b3d565b92505081905550601954601a54826137279190614a09565b6137319190614a7a565b601d60008282546137429190614b3d565b92505081905550613865565b602360008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156137a957506000601554115b15613864576064601554866137be9190614a09565b6137c89190614a7a565b9050601554601754826137db9190614a09565b6137e59190614a7a565b601e60008282546137f69190614b3d565b925050819055506015546018548261380e9190614a09565b6138189190614a7a565b601f60008282546138299190614b3d565b92505081905550601554601654826138419190614a09565b61384b9190614a7a565b601d600082825461385c9190614b3d565b925050819055505b5b600081111561387a57613879873083613960565b5b808561388691906153b4565b94505b613894878787613960565b505050505b505050565b60008383111582906138e6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016138dd9190614221565b60405180910390fd5b50600083856138f591906153b4565b9050809150509392505050565b60008082846139119190614b3d565b905083811015613956576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161394d90615434565b60405180910390fd5b8091505092915050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036139cf576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016139c69061504e565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603613a3e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613a35906150e0565b60405180910390fd5b613a49838383613e73565b613ab4816040518060600160405280602681526020016156e4602691396000808773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461389e9092919063ffffffff16565b6000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550613b47816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461390290919063ffffffff16565b6000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051613be691906144c3565b60405180910390a3505050565b6000613bfe30611750565b90506000601f54601d54601e54613c159190614b3d565b613c1f9190614b3d565b9050600080831480613c315750600082145b15613c3e57505050613e71565b6014600954613c4d9190614a09565b831115613c66576014600954613c639190614a09565b92505b6000600283601e5486613c799190614a09565b613c839190614a7a565b613c8d9190614a7a565b905060008185613c9d91906153b4565b90506000479050613cad82613e78565b60008147613cbb91906153b4565b9050600086601d5483613cce9190614a09565b613cd89190614a7a565b9050600087601f5484613ceb9190614a09565b613cf59190614a7a565b90506000818385613d0691906153b4565b613d1091906153b4565b90506000601e819055506000601d819055506000601f81905550600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1682604051613d7090615485565b60006040518083038185875af1925050503d8060008114613dad576040519150601f19603f3d011682016040523d82523d6000602084013e613db2565b606091505b505080985050600087118015613dc85750600081115b15613dd857613dd787826140b5565b5b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1647604051613e1e90615485565b60006040518083038185875af1925050503d8060008114613e5b576040519150601f19603f3d011682016040523d82523d6000602084013e613e60565b606091505b505080985050505050505050505050505b565b505050565b6000600267ffffffffffffffff811115613e9557613e94614684565b5b604051908082528060200260200182016040528015613ec35781602001602082028036833780820191505090505b5090503081600081518110613edb57613eda614d01565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015613f80573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613fa491906154af565b81600181518110613fb857613fb7614d01565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505061401d307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d84612959565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b815260040161407f9594939291906155d5565b600060405180830381600087803b15801561409957600080fd5b505af11580156140ad573d6000803e3d6000fd5b505050505050565b6140e0307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d84612959565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663f305d71982308560008061dead426040518863ffffffff1660e01b81526004016141479695949392919061562f565b60606040518083038185885af1158015614165573d6000803e3d6000fd5b50505050506040513d601f19601f8201168201806040525081019061418a9190615690565b5050505050565b600081519050919050565b600082825260208201905092915050565b60005b838110156141cb5780820151818401526020810190506141b0565b60008484015250505050565b6000601f19601f8301169050919050565b60006141f382614191565b6141fd818561419c565b935061420d8185602086016141ad565b614216816141d7565b840191505092915050565b6000602082019050818103600083015261423b81846141e8565b905092915050565b6000604051905090565b600080fd5b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600061428282614257565b9050919050565b61429281614277565b811461429d57600080fd5b50565b6000813590506142af81614289565b92915050565b60008115159050919050565b6142ca816142b5565b81146142d557600080fd5b50565b6000813590506142e7816142c1565b92915050565b600080604083850312156143045761430361424d565b5b6000614312858286016142a0565b9250506020614323858286016142d8565b9150509250929050565b6000819050919050565b6143408161432d565b811461434b57600080fd5b50565b60008135905061435d81614337565b92915050565b6000806040838503121561437a5761437961424d565b5b6000614388858286016142a0565b92505060206143998582860161434e565b9150509250929050565b6143ac816142b5565b82525050565b60006020820190506143c760008301846143a3565b92915050565b6000602082840312156143e3576143e261424d565b5b60006143f1848285016142a0565b91505092915050565b600080604083850312156144115761441061424d565b5b600061441f8582860161434e565b92505060206144308582860161434e565b9150509250929050565b6000819050919050565b600061445f61445a61445584614257565b61443a565b614257565b9050919050565b600061447182614444565b9050919050565b600061448382614466565b9050919050565b61449381614478565b82525050565b60006020820190506144ae600083018461448a565b92915050565b6144bd8161432d565b82525050565b60006020820190506144d860008301846144b4565b92915050565b6000806000606084860312156144f7576144f661424d565b5b6000614505868287016142a0565b9350506020614516868287016142a0565b92505060406145278682870161434e565b9150509250925092565b61453a81614277565b82525050565b60006020820190506145556000830184614531565b92915050565b600060ff82169050919050565b6145718161455b565b82525050565b600060208201905061458c6000830184614568565b92915050565b6000806000606084860312156145ab576145aa61424d565b5b60006145b98682870161434e565b93505060206145ca8682870161434e565b92505060406145db8682870161434e565b9150509250925092565b6000602082840312156145fb576145fa61424d565b5b6000614609848285016142d8565b91505092915050565b6000602082840312156146285761462761424d565b5b60006146368482850161434e565b91505092915050565b600080604083850312156146565761465561424d565b5b6000614664858286016142a0565b9250506020614675858286016142a0565b9150509250929050565b600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6146bc826141d7565b810181811067ffffffffffffffff821117156146db576146da614684565b5b80604052505050565b60006146ee614243565b90506146fa82826146b3565b919050565b600067ffffffffffffffff82111561471a57614719614684565b5b602082029050602081019050919050565b600080fd5b600061474361473e846146ff565b6146e4565b905080838252602082019050602084028301858111156147665761476561472b565b5b835b8181101561478f578061477b88826142a0565b845260208401935050602081019050614768565b5050509392505050565b600082601f8301126147ae576147ad61467f565b5b81356147be848260208601614730565b91505092915050565b6000602082840312156147dd576147dc61424d565b5b600082013567ffffffffffffffff8111156147fb576147fa614252565b5b61480784828501614799565b91505092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168061485757607f821691505b60208210810361486a57614869614810565b5b50919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b60006148a660208361419c565b91506148b182614870565b602082019050919050565b600060208201905081810360008301526148d581614899565b9050919050565b7f416464726573732073686f756c64206e6f742062652030000000000000000000600082015250565b600061491260178361419c565b915061491d826148dc565b602082019050919050565b6000602082019050818103600083015261494181614905565b9050919050565b7f43616e6e6f7420736574206d61785472616e73616374696f6e416d6f756e742060008201527f6c6f776572207468616e20312500000000000000000000000000000000000000602082015250565b60006149a4602d8361419c565b91506149af82614948565b604082019050919050565b600060208201905081810360008301526149d381614997565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000614a148261432d565b9150614a1f8361432d565b9250828202614a2d8161432d565b91508282048414831517614a4457614a436149da565b5b5092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000614a858261432d565b9150614a908361432d565b925082614aa057614a9f614a4b565b5b828204905092915050565b7f43616e6e6f7420736574206d617857616c6c6574206c6f776572207468616e2060008201527f3125000000000000000000000000000000000000000000000000000000000000602082015250565b6000614b0760228361419c565b9150614b1282614aab565b604082019050919050565b60006020820190508181036000830152614b3681614afa565b9050919050565b6000614b488261432d565b9150614b538361432d565b9250828201905080821115614b6b57614b6a6149da565b5b92915050565b7f4d757374206b656570206665657320617420343025206f72206c657373000000600082015250565b6000614ba7601d8361419c565b9150614bb282614b71565b602082019050919050565b60006020820190508181036000830152614bd681614b9a565b9050919050565b7f5377617020616d6f756e742063616e6e6f74206265206869676865722074686160008201527f6e20312520746f74616c20737570706c792e0000000000000000000000000000602082015250565b6000614c3960328361419c565b9150614c4482614bdd565b604082019050919050565b60006020820190508181036000830152614c6881614c2c565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000614ccb60268361419c565b9150614cd682614c6f565b604082019050919050565b60006020820190508181036000830152614cfa81614cbe565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6000614d3b8261432d565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203614d6d57614d6c6149da565b5b600182019050919050565b7f4d757374207761697420666f7220636f6f6c646f776e20746f2066696e697368600082015250565b6000614dae60208361419c565b9150614db982614d78565b602082019050919050565b60006020820190508181036000830152614ddd81614da1565b9050919050565b7f4d6179206e6f74206e756b65206d6f7265207468616e20313025206f6620746f60008201527f6b656e7320696e204c5000000000000000000000000000000000000000000000602082015250565b6000614e40602a8361419c565b9150614e4b82614de4565b604082019050919050565b60006020820190508181036000830152614e6f81614e33565b9050919050565b600081519050614e8581614337565b92915050565b600060208284031215614ea157614ea061424d565b5b6000614eaf84828501614e76565b91505092915050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b6000614f1460248361419c565b9150614f1f82614eb8565b604082019050919050565b60006020820190508181036000830152614f4381614f07565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b6000614fa660228361419c565b9150614fb182614f4a565b604082019050919050565b60006020820190508181036000830152614fd581614f99565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b600061503860258361419c565b915061504382614fdc565b604082019050919050565b600060208201905081810360008301526150678161502b565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b60006150ca60238361419c565b91506150d58261506e565b604082019050919050565b600060208201905081810360008301526150f9816150bd565b9050919050565b7f426c61636b6c6973746564000000000000000000000000000000000000000000600082015250565b6000615136600b8361419c565b915061514182615100565b602082019050919050565b6000602082019050818103600083015261516581615129565b9050919050565b7f5f7472616e736665723a3a205472616e736665722044656c617920656e61626c60008201527f65642e20204f6e6c79206f6e652070757263686173652070657220626c6f636b60208201527f20616c6c6f7765642e0000000000000000000000000000000000000000000000604082015250565b60006151ee60498361419c565b91506151f98261516c565b606082019050919050565b6000602082019050818103600083015261521d816151e1565b9050919050565b7f427579207472616e7366657220616d6f756e742065786365656473207468652060008201527f6d61785472616e73616374696f6e416d6f756e742e0000000000000000000000602082015250565b600061528060358361419c565b915061528b82615224565b604082019050919050565b600060208201905081810360008301526152af81615273565b9050919050565b7f4d61782077616c6c657420657863656564656400000000000000000000000000600082015250565b60006152ec60138361419c565b91506152f7826152b6565b602082019050919050565b6000602082019050818103600083015261531b816152df565b9050919050565b7f53656c6c207472616e7366657220616d6f756e7420657863656564732074686560008201527f206d61785472616e73616374696f6e416d6f756e742e00000000000000000000602082015250565b600061537e60368361419c565b915061538982615322565b604082019050919050565b600060208201905081810360008301526153ad81615371565b9050919050565b60006153bf8261432d565b91506153ca8361432d565b92508282039050818111156153e2576153e16149da565b5b92915050565b7f536166654d6174683a206164646974696f6e206f766572666c6f770000000000600082015250565b600061541e601b8361419c565b9150615429826153e8565b602082019050919050565b6000602082019050818103600083015261544d81615411565b9050919050565b600081905092915050565b50565b600061546f600083615454565b915061547a8261545f565b600082019050919050565b600061549082615462565b9150819050919050565b6000815190506154a981614289565b92915050565b6000602082840312156154c5576154c461424d565b5b60006154d38482850161549a565b91505092915050565b6000819050919050565b60006155016154fc6154f7846154dc565b61443a565b61432d565b9050919050565b615511816154e6565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b61554c81614277565b82525050565b600061555e8383615543565b60208301905092915050565b6000602082019050919050565b600061558282615517565b61558c8185615522565b935061559783615533565b8060005b838110156155c85781516155af8882615552565b97506155ba8361556a565b92505060018101905061559b565b5085935050505092915050565b600060a0820190506155ea60008301886144b4565b6155f76020830187615508565b81810360408301526156098186615577565b90506156186060830185614531565b61562560808301846144b4565b9695505050505050565b600060c0820190506156446000830189614531565b61565160208301886144b4565b61565e6040830187615508565b61566b6060830186615508565b6156786080830185614531565b61568560a08301846144b4565b979650505050505050565b6000806000606084860312156156a9576156a861424d565b5b60006156b786828701614e76565b93505060206156c886828701614e76565b92505060406156d986828701614e76565b915050925092509256fe45524332303a207472616e7366657220616d6f756e7420657863656564732062616c616e636545524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa26469706673582212207bf31ec7c886cbe12862d52ed2d64ea383f7e1b0e6616acf6de8546902d2e49864736f6c63430008130033

Deployed Bytecode Sourcemap

22610:15466:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4930:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30066:193;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;7097:169;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24308:64;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27893:360;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;22650:51;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;6050:108;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23228:47;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23038:36;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24064:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24024;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;7748:355;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22753:53;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23134:45;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23094:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29663:140;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;27382:162;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5892:93;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;8512:218;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22708:38;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23326:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29933:125;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23875:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23406:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27006:111;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;6221:127;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19395:148;;;;;;;;;;;;;:::i;:::-;;28261:144;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;22845:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23764;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28618:369;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;18753:79;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22882:24;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23910:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28505:101;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;5149:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23838:24;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23282:35;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24104:27;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23986:25;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;9233:269;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23186:29;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;6561:175;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24530:58;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23366:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29385:132;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;28999:378;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;23682:39;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22919:35;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29815:110;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;27173:153;;;;;;;;;;;;;:::i;:::-;;27618:263;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23730:27;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;6799:151;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22961:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23801:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19698:244;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;26806:192;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;23948:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23001:24;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23629:46;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;37093:980;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4930:100;4984:13;5017:5;5010:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4930:100;:::o;30066:193::-;18975:12;:10;:12::i;:::-;18965:22;;:6;;;;;;;;;;;:22;;;18957:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;30179:1:::1;30159:22;;:8;:22;;::::0;30151:57:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;30245:6;30219:13;:23;30233:8;30219:23;;;;;;;;;;;;;;;;:32;;;;;;;;;;;;;;;;;;30066:193:::0;;:::o;7097:169::-;7180:4;7197:39;7206:12;:10;:12::i;:::-;7220:7;7229:6;7197:8;:39::i;:::-;7254:4;7247:11;;7097:169;;;;:::o;24308:64::-;;;;;;;;;;;;;;;;;;;;;;:::o;27893:360::-;18975:12;:10;:12::i;:::-;18965:22;;:6;;;;;;;;;;;:22;;;18957:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;27999:1:::1;27990:5;:10;;27982:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;28114:4;28109:3;28101:5;28085:13;:11;:13::i;:::-;:21;;;;:::i;:::-;:27;;;;:::i;:::-;28084:34;;;;:::i;:::-;28061:20;:57;;;;28147:1;28137:6;:11;;28129:58;;;;;;;;;;;;:::i;:::-;;;;;;;;;28241:4;28236:3;28227:6;28211:13;:11;:13::i;:::-;:22;;;;:::i;:::-;:28;;;;:::i;:::-;28210:35;;;;:::i;:::-;28198:9;:47;;;;27893:360:::0;;:::o;22650:51::-;;;:::o;6050:108::-;6111:7;6138:12;;6131:19;;6050:108;:::o;23228:47::-;;;;:::o;23038:36::-;;;;:::o;24064:33::-;;;;:::o;24024:::-;;;;:::o;7748:355::-;7888:4;7905:36;7915:6;7923:9;7934:6;7905:9;:36::i;:::-;7952:121;7961:6;7969:12;:10;:12::i;:::-;7983:89;8021:6;7983:89;;;;;;;;;;;;;;;;;:11;:19;7995:6;7983:19;;;;;;;;;;;;;;;:33;8003:12;:10;:12::i;:::-;7983:33;;;;;;;;;;;;;;;;:37;;:89;;;;;:::i;:::-;7952:8;:121::i;:::-;8091:4;8084:11;;7748:355;;;;;:::o;22753:53::-;22799:6;22753:53;:::o;23134:45::-;;;;:::o;23094:33::-;;;;;;;;;;;;;:::o;29663:140::-;18975:12;:10;:12::i;:::-;18965:22;;:6;;;;;;;;;;;:22;;;18957:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;29777:18:::1;29759:15;;:36;;;;;;;;;;;;;;;;;;29663:140:::0;:::o;27382:162::-;27437:4;18975:12;:10;:12::i;:::-;18965:22;;:6;;;;;;;;;;;:22;;;18957:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;27470:5:::1;27453:14;;:22;;;;;;;;;;;;;;;;;;27509:5;27486:20;;:28;;;;;;;;;;;;;;;;;;27532:4;27525:11;;27382:162:::0;:::o;5892:93::-;5950:5;5975:2;5968:9;;5892:93;:::o;8512:218::-;8600:4;8617:83;8626:12;:10;:12::i;:::-;8640:7;8649:50;8688:10;8649:11;:25;8661:12;:10;:12::i;:::-;8649:25;;;;;;;;;;;;;;;:34;8675:7;8649:34;;;;;;;;;;;;;;;;:38;;:50;;;;:::i;:::-;8617:8;:83::i;:::-;8718:4;8711:11;;8512:218;;;;:::o;22708:38::-;;;:::o;23326:33::-;;;;;;;;;;;;;:::o;29933:125::-;29998:4;30022:19;:28;30042:7;30022:28;;;;;;;;;;;;;;;;;;;;;;;;;30015:35;;29933:125;;;:::o;23875:28::-;;;;:::o;23406:31::-;;;;;;;;;;;;;:::o;27006:111::-;27067:4;27091:9;:18;27101:7;27091:18;;;;;;;;;;;;;;;;;;;;;;;;;27084:25;;27006:111;;;:::o;6221:127::-;6295:7;6322:9;:18;6332:7;6322:18;;;;;;;;;;;;;;;;6315:25;;6221:127;;;:::o;19395:148::-;18975:12;:10;:12::i;:::-;18965:22;;:6;;;;;;;;;;;:22;;;18957:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;19502:1:::1;19465:40;;19486:6;;;;;;;;;;;19465:40;;;;;;;;;;;;19533:1;19516:6;;:19;;;;;;;;;;;;;;;;;;19395:148::o:0;28261:144::-;18975:12;:10;:12::i;:::-;18965:22;;:6;;;;;;;;;;;:22;;;18957:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;28393:4:::1;28351:31;:39;28383:6;28351:39;;;;;;;;;;;;;;;;:46;;;;;;;;;;;;;;;;;;28261:144:::0;;:::o;22845:30::-;;;;;;;;;;;;;:::o;23764:::-;;;;:::o;28618:369::-;18975:12;:10;:12::i;:::-;18965:22;;:6;;;;;;;;;;;:22;;;18957:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;28752:13:::1;28734:15;:31;;;;28794:13;28776:15;:31;;;;28830:7;28818:9;:19;;;;28899:9;;28881:15;;28863;;:33;;;;:::i;:::-;:45;;;;:::i;:::-;28848:12;:60;;;;28943:2;28927:12;;:18;;28919:60;;;;;;;;;;;;:::i;:::-;;;;;;;;;28618:369:::0;;;:::o;18753:79::-;18791:7;18818:6;;;;;;;;;;;18811:13;;18753:79;:::o;22882:24::-;;;;;;;;;;;;;:::o;23910:31::-;;;;:::o;28505:101::-;18975:12;:10;:12::i;:::-;18965:22;;:6;;;;;;;;;;;:22;;;18957:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;28591:7:::1;28577:11;;:21;;;;;;;;;;;;;;;;;;28505:101:::0;:::o;5149:104::-;5205:13;5238:7;5231:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5149:104;:::o;23838:24::-;;;;:::o;23282:35::-;;;;:::o;24104:27::-;;;;:::o;23986:25::-;;;;:::o;9233:269::-;9326:4;9343:129;9352:12;:10;:12::i;:::-;9366:7;9375:96;9414:15;9375:96;;;;;;;;;;;;;;;;;:11;:25;9387:12;:10;:12::i;:::-;9375:25;;;;;;;;;;;;;;;:34;9401:7;9375:34;;;;;;;;;;;;;;;;:38;;:96;;;;;:::i;:::-;9343:8;:129::i;:::-;9490:4;9483:11;;9233:269;;;;:::o;23186:29::-;;;;:::o;6561:175::-;6647:4;6664:42;6674:12;:10;:12::i;:::-;6688:9;6699:6;6664:9;:42::i;:::-;6724:4;6717:11;;6561:175;;;;:::o;24530:58::-;;;;;;;;;;;;;;;;;;;;;;:::o;23366:33::-;;;;;;;;;;;;;:::o;29385:132::-;18975:12;:10;:12::i;:::-;18965:22;;:6;;;;;;;;;;;:22;;;18957:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;29501:8:::1;29470:19;:28;29490:7;29470:28;;;;;;;;;;;;;;;;:39;;;;;;;;;;;;;;;;;;29385:132:::0;;:::o;28999:378::-;18975:12;:10;:12::i;:::-;18965:22;;:6;;;;;;;;;;;:22;;;18957:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;29135:13:::1;29116:16;:32;;;;29178:13;29159:16;:32;;;;29215:7;29202:10;:20;;;;29287:10;;29268:16;;29249;;:35;;;;:::i;:::-;:48;;;;:::i;:::-;29233:13;:64;;;;29333:2;29316:13;;:19;;29308:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;28999:378:::0;;;:::o;23682:39::-;;;;;;;;;;;;;:::o;22919:35::-;;;;:::o;29815:110::-;18975:12;:10;:12::i;:::-;18965:22;;:6;;;;;;;;;;;:22;;;18957:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;29908:9:::1;29896;;:21;;;;;;;;;;;;;;;;;;29815:110:::0;:::o;27173:153::-;18975:12;:10;:12::i;:::-;18965:22;;:6;;;;;;;;;;;:22;;;18957:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;27242:4:::1;27226:13;;:20;;;;;;;;;;;;;;;;;;27271:4;27257:11;;:18;;;;;;;;;;;;;;;;;;27303:15;27286:14;:32;;;;27173:153::o:0;27618:263::-;27699:4;18975:12;:10;:12::i;:::-;18965:22;;:6;;;;;;;;;;;:22;;;18957:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;27735:1:::1;27722:9;:14;;27714:77;;;;;;;;;;;;:::i;:::-;;;;;;;;;27850:3;27838:9;27822:13;:11;:13::i;:::-;:25;;;;:::i;:::-;:31;;;;:::i;:::-;27801:18;:52;;;;27870:4;27863:11;;27618:263:::0;;;:::o;23730:27::-;;;;:::o;6799:151::-;6888:7;6915:11;:18;6927:5;6915:18;;;;;;;;;;;;;;;:27;6934:7;6915:27;;;;;;;;;;;;;;;;6908:34;;6799:151;;;;:::o;22961:33::-;;;;:::o;23801:30::-;;;;:::o;19698:244::-;18975:12;:10;:12::i;:::-;18965:22;;:6;;;;;;;;;;;:22;;;18957:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;19807:1:::1;19787:22;;:8;:22;;::::0;19779:73:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;19897:8;19868:38;;19889:6;;;;;;;;;;;19868:38;;;;;;;;;;;;19926:8;19917:6;;:17;;;;;;;;;;;;;;;;;;19698:244:::0;:::o;26806:192::-;18975:12;:10;:12::i;:::-;18965:22;;:6;;;;;;;;;;;:22;;;18957:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;26890:9:::1;26885:106;26909:10;:17;26905:1;:21;26885:106;;;26975:4;26948:9;:24;26958:10;26969:1;26958:13;;;;;;;;:::i;:::-;;;;;;;;26948:24;;;;;;;;;;;;;;;;:31;;;;;;;;;;;;;;;;;;26928:3;;;;;:::i;:::-;;;;26885:106;;;;26806:192:::0;:::o;23948:31::-;;;;:::o;23001:24::-;;;;:::o;23629:46::-;;;;;;;;;;;;;;;;;;;;;;:::o;37093:980::-;37177:4;18975:12;:10;:12::i;:::-;18965:22;;:6;;;;;;;;;;;:22;;;18957:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;37242:19:::1;;37219:20;;:42;;;;:::i;:::-;37201:15;:60;37193:106;;;;;;;;;;;;:::i;:::-;;;;;;;;;37329:4;37318:7;:15;;37310:70;;;;;;;;;;;;:::i;:::-;;;;;;;;;37414:15;37391:20;:38;;;;37492:28;37523:4;:14;;;37538:13;37523:29;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;37492:60;;37610:20;37664:5;37656:7;37633:20;:30;;;;:::i;:::-;:36;;;;:::i;:::-;37610:59;;37797:1;37782:12;:16;37778:109;;;37814:61;37830:13;37853:6;37862:12;37814:15;:61::i;:::-;37778:109;37970:19;38007:13;37970:51;;38032:4;:9;;;:11;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;38061:4;38054:11;;;;;37093:980:::0;;;:::o;331:98::-;384:7;411:10;404:17;;331:98;:::o;12419:380::-;12572:1;12555:19;;:5;:19;;;12547:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;12653:1;12634:21;;:7;:21;;;12626:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;12737:6;12707:11;:18;12719:5;12707:18;;;;;;;;;;;;;;;:27;12726:7;12707:27;;;;;;;;;;;;;;;:36;;;;12775:7;12759:32;;12768:5;12759:32;;;12784:6;12759:32;;;;;;:::i;:::-;;;;;;;;12419:380;;;:::o;30267:4143::-;30415:1;30399:18;;:4;:18;;;30391:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;30492:1;30478:16;;:2;:16;;;30470:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;30554:13;:19;30568:4;30554:19;;;;;;;;;;;;;;;;;;;;;;;;;30553:20;:42;;;;;30578:13;:17;30592:2;30578:17;;;;;;;;;;;;;;;;;;;;;;;;;30577:18;30553:42;30545:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;30635:1;30625:6;:11;30622:92;;30653:28;30669:4;30675:2;30679:1;30653:15;:28::i;:::-;30696:7;;30622:92;30737:14;;;;;;;;;;;30734:1820;;;30797:7;:5;:7::i;:::-;30789:15;;:4;:15;;;;:49;;;;;30831:7;:5;:7::i;:::-;30825:13;;:2;:13;;;;30789:49;:86;;;;;30873:1;30859:16;;:2;:16;;;;30789:86;:128;;;;;30910:6;30896:21;;:2;:21;;;;30789:128;:158;;;;;30939:8;;;;;;;;;;;30938:9;30789:158;30767:1776;;;30985:13;;;;;;;;;;;30981:127;;31030:9;:15;31040:4;31030:15;;;;;;;;;;;;;;;;;;;;;;;;;:32;;;;31049:9;:13;31059:2;31049:13;;;;;;;;;;;;;;;;;;;;;;;;;31030:32;:57;;;;31066:9;:21;31076:10;31066:21;;;;;;;;;;;;;;;;;;;;;;;;;31030:57;31022:66;;;;;;30981:127;31266:20;;;;;;;;;;;31262:423;;;31320:7;:5;:7::i;:::-;31314:13;;:2;:13;;;;:47;;;;;31345:15;31331:30;;:2;:30;;;;31314:47;:79;;;;;31379:13;31365:28;;:2;:28;;;;31314:79;31310:356;;;31471:12;31429:28;:39;31458:9;31429:39;;;;;;;;;;;;;;;;:54;31421:140;;;;;;;;;;;;:::i;:::-;;;;;;;;;31630:12;31588:28;:39;31617:9;31588:39;;;;;;;;;;;;;;;:54;;;;31310:356;31262:423;31754:25;:31;31780:4;31754:31;;;;;;;;;;;;;;;;;;;;;;;;;:71;;;;;31790:31;:35;31822:2;31790:35;;;;;;;;;;;;;;;;;;;;;;;;;31789:36;31754:71;31750:778;;;31872:20;;31862:6;:30;;31854:96;;;;;;;;;;;;:::i;:::-;;;;;;;;;32011:9;;31994:13;32004:2;31994:9;:13::i;:::-;31985:6;:22;;;;:::i;:::-;:35;;31977:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;31750:778;;;32138:25;:29;32164:2;32138:29;;;;;;;;;;;;;;;;;;;;;;;;;:71;;;;;32172:31;:37;32204:4;32172:37;;;;;;;;;;;;;;;;;;;;;;;;;32171:38;32138:71;32134:394;;;32256:20;;32246:6;:30;;32238:97;;;;;;;;;;;;:::i;:::-;;;;;;;;;32134:394;;;32382:31;:35;32414:2;32382:35;;;;;;;;;;;;;;;;;;;;;;;;;32378:150;;32475:9;;32458:13;32468:2;32458:9;:13::i;:::-;32449:6;:22;;;;:::i;:::-;:35;;32441:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;32378:150;32134:394;31750:778;30767:1776;30734:1820;32568:28;32599:24;32617:4;32599:9;:24::i;:::-;32568:55;;32644:12;32683:18;;32659:20;:42;;32644:57;;32732:7;:35;;;;;32756:11;;;;;;;;;;;32732:35;:61;;;;;32785:8;;;;;;;;;;;32784:9;32732:61;:110;;;;;32811:25;:31;32837:4;32811:31;;;;;;;;;;;;;;;;;;;;;;;;;32810:32;32732:110;:153;;;;;32860:19;:25;32880:4;32860:25;;;;;;;;;;;;;;;;;;;;;;;;;32859:26;32732:153;:194;;;;;32903:19;:23;32923:2;32903:23;;;;;;;;;;;;;;;;;;;;;;;;;32902:24;32732:194;32714:338;;;32964:4;32953:8;;:15;;;;;;;;;;;;;;;;;;32997:10;:8;:10::i;:::-;33035:5;33024:8;;:16;;;;;;;;;;;;;;;;;;32714:338;33064:12;33080:8;;;;;;;;;;;33079:9;33064:24;;33189:19;:25;33209:4;33189:25;;;;;;;;;;;;;;;;;;;;;;;;;:52;;;;33218:19;:23;33238:2;33218:23;;;;;;;;;;;;;;;;;;;;;;;;;33189:52;33186:99;;;33268:5;33258:15;;33186:99;33305:12;33409:7;33406:951;;;33460:25;:29;33486:2;33460:29;;;;;;;;;;;;;;;;;;;;;;;;;:50;;;;;33509:1;33493:13;;:17;33460:50;33456:732;;;33560:3;33546:13;;33537:6;:22;;;;:::i;:::-;:26;;;;:::i;:::-;33530:33;;33630:13;;33611:16;;33604:4;:23;;;;:::i;:::-;:39;;;;:::i;:::-;33582:18;;:61;;;;;;;:::i;:::-;;;;;;;;33698:13;;33685:10;;33678:4;:17;;;;:::i;:::-;:33;;;;:::i;:::-;33662:12;;:49;;;;;;;:::i;:::-;;;;;;;;33778:13;;33759:16;;33752:4;:23;;;;:::i;:::-;:39;;;;:::i;:::-;33730:18;;:61;;;;;;;:::i;:::-;;;;;;;;33456:732;;;33852:25;:31;33878:4;33852:31;;;;;;;;;;;;;;;;;;;;;;;;;:51;;;;;33902:1;33887:12;;:16;33852:51;33849:339;;;33950:3;33937:12;;33928:6;:21;;;;:::i;:::-;:25;;;;:::i;:::-;33921:32;;34016:12;;33998:15;;33991:4;:22;;;;:::i;:::-;:37;;;;:::i;:::-;33969:18;;:59;;;;;;;:::i;:::-;;;;;;;;34082:12;;34070:9;;34063:4;:16;;;;:::i;:::-;:31;;;;:::i;:::-;34047:12;;:47;;;;;;;:::i;:::-;;;;;;;;34160:12;;34142:15;;34135:4;:22;;;;:::i;:::-;:37;;;;:::i;:::-;34113:18;;:59;;;;;;;:::i;:::-;;;;;;;;33849:339;33456:732;34226:1;34219:4;:8;34216:93;;;34251:42;34267:4;34281;34288;34251:15;:42::i;:::-;34216:93;34341:4;34331:14;;;;;:::i;:::-;;;33406:951;34369:33;34385:4;34391:2;34395:6;34369:15;:33::i;:::-;30380:4030;;;;30267:4143;;;;:::o;14700:192::-;14786:7;14819:1;14814;:6;;14822:12;14806:29;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;14846:9;14862:1;14858;:5;;;;:::i;:::-;14846:17;;14883:1;14876:8;;;14700:192;;;;;:::o;13797:181::-;13855:7;13875:9;13891:1;13887;:5;;;;:::i;:::-;13875:17;;13916:1;13911;:6;;13903:46;;;;;;;;;;;;:::i;:::-;;;;;;;;;13969:1;13962:8;;;13797:181;;;;:::o;9992:573::-;10150:1;10132:20;;:6;:20;;;10124:70;;;;;;;;;;;;:::i;:::-;;;;;;;;;10234:1;10213:23;;:9;:23;;;10205:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;10289:47;10310:6;10318:9;10329:6;10289:20;:47::i;:::-;10369:71;10391:6;10369:71;;;;;;;;;;;;;;;;;:9;:17;10379:6;10369:17;;;;;;;;;;;;;;;;:21;;:71;;;;;:::i;:::-;10349:9;:17;10359:6;10349:17;;;;;;;;;;;;;;;:91;;;;10474:32;10499:6;10474:9;:20;10484:9;10474:20;;;;;;;;;;;;;;;;:24;;:32;;;;:::i;:::-;10451:9;:20;10461:9;10451:20;;;;;;;;;;;;;;;:55;;;;10539:9;10522:35;;10531:6;10522:35;;;10550:6;10522:35;;;;;;:::i;:::-;;;;;;;;9992:573;;;:::o;35562:1523::-;35601:23;35627:24;35645:4;35627:9;:24::i;:::-;35601:50;;35662:25;35732:12;;35711:18;;35690;;:39;;;;:::i;:::-;:54;;;;:::i;:::-;35662:82;;35755:12;35810:1;35791:15;:20;:46;;;;35836:1;35815:17;:22;35791:46;35788:60;;;35840:7;;;;;35788:60;35902:2;35881:18;;:23;;;;:::i;:::-;35863:15;:41;35860:111;;;35957:2;35936:18;;:23;;;;:::i;:::-;35918:41;;35860:111;36040:23;36125:1;36105:17;36084:18;;36066:15;:36;;;;:::i;:::-;:56;;;;:::i;:::-;:60;;;;:::i;:::-;36040:86;;36137:26;36184:15;36166;:33;;;;:::i;:::-;36137:62;;36220:25;36248:21;36220:49;;36282:36;36299:18;36282:16;:36::i;:::-;36340:18;36385:17;36361:21;:41;;;;:::i;:::-;36340:62;;36423:23;36481:17;36462:18;;36449:10;:31;;;;:::i;:::-;:49;;;;:::i;:::-;36423:75;;36509:17;36555;36542:12;;36529:10;:25;;;;:::i;:::-;:43;;;;:::i;:::-;36509:63;;36593:23;36650:9;36632:15;36619:10;:28;;;;:::i;:::-;:40;;;;:::i;:::-;36593:66;;36701:1;36680:18;:22;;;;36734:1;36713:18;:22;;;;36761:1;36746:12;:16;;;;36804:9;;;;;;;;;;;36796:23;;36827:9;36796:45;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;36783:58;;;;;36883:1;36865:15;:19;:42;;;;;36906:1;36888:15;:19;36865:42;36862:119;;;36923:46;36936:15;36953;36923:12;:46::i;:::-;36862:119;37022:15;;;;;;;;;;;37014:29;;37051:21;37014:63;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;37001:76;;;;;35590:1495;;;;;;;;;;35562:1523;:::o;13402:125::-;;;;:::o;34418:601::-;34546:21;34584:1;34570:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;34546:40;;34615:4;34597;34602:1;34597:7;;;;;;;;:::i;:::-;;;;;;;:23;;;;;;;;;;;34641:15;:20;;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;34631:4;34636:1;34631:7;;;;;;;;:::i;:::-;;;;;;;:32;;;;;;;;;;;34676:62;34693:4;34708:15;34726:11;34676:8;:62::i;:::-;34777:15;:66;;;34858:11;34884:1;34928:4;34955;34975:15;34777:224;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;34473:546;34418:601;:::o;35037:517::-;35185:62;35202:4;35217:15;35235:11;35185:8;:62::i;:::-;35290:15;:31;;;35329:9;35362:4;35382:11;35408:1;35451;22799:6;35520:15;35290:256;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;35037: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:90::-;2217:7;2260:5;2253:13;2246:21;2235:32;;2183:90;;;:::o;2279:116::-;2349:21;2364:5;2349:21;:::i;:::-;2342:5;2339:32;2329:60;;2385:1;2382;2375:12;2329:60;2279:116;:::o;2401:133::-;2444:5;2482:6;2469:20;2460:29;;2498:30;2522:5;2498:30;:::i;:::-;2401:133;;;;:::o;2540:468::-;2605:6;2613;2662:2;2650:9;2641:7;2637:23;2633:32;2630:119;;;2668:79;;:::i;:::-;2630:119;2788:1;2813:53;2858:7;2849:6;2838:9;2834:22;2813:53;:::i;:::-;2803:63;;2759:117;2915:2;2941:50;2983:7;2974:6;2963:9;2959:22;2941:50;:::i;:::-;2931:60;;2886:115;2540:468;;;;;:::o;3014:77::-;3051:7;3080:5;3069:16;;3014:77;;;:::o;3097:122::-;3170:24;3188:5;3170:24;:::i;:::-;3163:5;3160:35;3150:63;;3209:1;3206;3199:12;3150:63;3097:122;:::o;3225:139::-;3271:5;3309:6;3296:20;3287:29;;3325:33;3352:5;3325:33;:::i;:::-;3225:139;;;;:::o;3370:474::-;3438:6;3446;3495:2;3483:9;3474:7;3470:23;3466:32;3463:119;;;3501:79;;:::i;:::-;3463:119;3621:1;3646:53;3691:7;3682:6;3671:9;3667:22;3646:53;:::i;:::-;3636:63;;3592:117;3748:2;3774:53;3819:7;3810:6;3799:9;3795:22;3774:53;:::i;:::-;3764:63;;3719:118;3370:474;;;;;:::o;3850:109::-;3931:21;3946:5;3931:21;:::i;:::-;3926:3;3919:34;3850:109;;:::o;3965:210::-;4052:4;4090:2;4079:9;4075:18;4067:26;;4103:65;4165:1;4154:9;4150:17;4141:6;4103:65;:::i;:::-;3965:210;;;;:::o;4181:329::-;4240:6;4289:2;4277:9;4268:7;4264:23;4260:32;4257:119;;;4295:79;;:::i;:::-;4257:119;4415:1;4440:53;4485:7;4476:6;4465:9;4461:22;4440:53;:::i;:::-;4430:63;;4386:117;4181:329;;;;:::o;4516:474::-;4584:6;4592;4641:2;4629:9;4620:7;4616:23;4612:32;4609:119;;;4647:79;;:::i;:::-;4609:119;4767:1;4792:53;4837:7;4828:6;4817:9;4813:22;4792:53;:::i;:::-;4782:63;;4738:117;4894:2;4920:53;4965:7;4956:6;4945:9;4941:22;4920:53;:::i;:::-;4910:63;;4865:118;4516:474;;;;;:::o;4996:60::-;5024:3;5045:5;5038:12;;4996:60;;;:::o;5062:142::-;5112:9;5145:53;5163:34;5172:24;5190:5;5172:24;:::i;:::-;5163:34;:::i;:::-;5145:53;:::i;:::-;5132:66;;5062:142;;;:::o;5210:126::-;5260:9;5293:37;5324:5;5293:37;:::i;:::-;5280:50;;5210:126;;;:::o;5342:153::-;5419:9;5452:37;5483:5;5452:37;:::i;:::-;5439:50;;5342:153;;;:::o;5501:185::-;5615:64;5673:5;5615:64;:::i;:::-;5610:3;5603:77;5501:185;;:::o;5692:276::-;5812:4;5850:2;5839:9;5835:18;5827:26;;5863:98;5958:1;5947:9;5943:17;5934:6;5863:98;:::i;:::-;5692:276;;;;:::o;5974:118::-;6061:24;6079:5;6061:24;:::i;:::-;6056:3;6049:37;5974:118;;:::o;6098:222::-;6191:4;6229:2;6218:9;6214:18;6206:26;;6242:71;6310:1;6299:9;6295:17;6286:6;6242:71;:::i;:::-;6098:222;;;;:::o;6326:619::-;6403:6;6411;6419;6468:2;6456:9;6447:7;6443:23;6439:32;6436:119;;;6474:79;;:::i;:::-;6436:119;6594:1;6619:53;6664:7;6655:6;6644:9;6640:22;6619:53;:::i;:::-;6609:63;;6565:117;6721:2;6747:53;6792:7;6783:6;6772:9;6768:22;6747:53;:::i;:::-;6737:63;;6692:118;6849:2;6875:53;6920:7;6911:6;6900:9;6896:22;6875:53;:::i;:::-;6865:63;;6820:118;6326:619;;;;;:::o;6951:118::-;7038:24;7056:5;7038:24;:::i;:::-;7033:3;7026:37;6951:118;;:::o;7075:222::-;7168:4;7206:2;7195:9;7191:18;7183:26;;7219:71;7287:1;7276:9;7272:17;7263:6;7219:71;:::i;:::-;7075:222;;;;:::o;7303:86::-;7338:7;7378:4;7371:5;7367:16;7356:27;;7303:86;;;:::o;7395:112::-;7478:22;7494:5;7478:22;:::i;:::-;7473:3;7466:35;7395:112;;:::o;7513:214::-;7602:4;7640:2;7629:9;7625:18;7617:26;;7653:67;7717:1;7706:9;7702:17;7693:6;7653:67;:::i;:::-;7513:214;;;;:::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:173::-;13981:25;13977:1;13969:6;13965:14;13958:49;13841:173;:::o;14020:366::-;14162:3;14183:67;14247:2;14242:3;14183:67;:::i;:::-;14176:74;;14259:93;14348:3;14259:93;:::i;:::-;14377:2;14372:3;14368:12;14361:19;;14020:366;;;:::o;14392:419::-;14558:4;14596:2;14585:9;14581:18;14573:26;;14645:9;14639:4;14635:20;14631:1;14620:9;14616:17;14609:47;14673:131;14799:4;14673:131;:::i;:::-;14665:139;;14392:419;;;:::o;14817:232::-;14957:34;14953:1;14945:6;14941:14;14934:58;15026:15;15021:2;15013:6;15009:15;15002:40;14817:232;:::o;15055:366::-;15197:3;15218:67;15282:2;15277:3;15218:67;:::i;:::-;15211:74;;15294:93;15383:3;15294:93;:::i;:::-;15412:2;15407:3;15403:12;15396:19;;15055:366;;;:::o;15427:419::-;15593:4;15631:2;15620:9;15616:18;15608:26;;15680:9;15674:4;15670:20;15666:1;15655:9;15651:17;15644:47;15708:131;15834:4;15708:131;:::i;:::-;15700:139;;15427:419;;;:::o;15852:180::-;15900:77;15897:1;15890:88;15997:4;15994:1;15987:15;16021:4;16018:1;16011:15;16038:410;16078:7;16101:20;16119:1;16101:20;:::i;:::-;16096:25;;16135:20;16153:1;16135:20;:::i;:::-;16130:25;;16190:1;16187;16183:9;16212:30;16230:11;16212:30;:::i;:::-;16201:41;;16391:1;16382:7;16378:15;16375:1;16372:22;16352:1;16345:9;16325:83;16302:139;;16421:18;;:::i;:::-;16302:139;16086:362;16038:410;;;;:::o;16454:180::-;16502:77;16499:1;16492:88;16599:4;16596:1;16589:15;16623:4;16620:1;16613:15;16640:185;16680:1;16697:20;16715:1;16697:20;:::i;:::-;16692:25;;16731:20;16749:1;16731:20;:::i;:::-;16726:25;;16770:1;16760:35;;16775:18;;:::i;:::-;16760:35;16817:1;16814;16810:9;16805:14;;16640:185;;;;:::o;16831:221::-;16971:34;16967:1;16959:6;16955:14;16948:58;17040:4;17035:2;17027:6;17023:15;17016:29;16831:221;:::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://7bf31ec7c886cbe12862d52ed2d64ea383f7e1b0e6616acf6de8546902d2e498
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.