ETH Price: $3,827.07 (+4.89%)

Token

ERC-20: Portals (PORTALS)
 

Overview

Max Total Supply

1,000,000,000,000 PORTALS

Holders

6

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Filtered by Token Holder
0x0000000000000000000000000000000000001dead.eth
Balance
0 PORTALS

Value
$0.00
0xafc95089ed6682a54c0bea1515259034045be912
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:
PORTALS

Compiler Version
v0.8.16+commit.07a7930e

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2022-08-29
*/

/**
 * Portals | $PORTALS
 * The gateway for all web3 assets verification
 *
 * Website - https://portals.fyi/
 * Twitter - https://twitter.com/portalsfyi
*/

// SPDX-License-Identifier: MIT

pragma solidity 0.8.16;

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

    uint256 private _totalSupply;

    string private _name;
    string private _symbol;

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

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

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

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

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

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

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

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

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

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

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

        return true;
    }

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

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

        return true;
    }

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

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

        emit Transfer(sender, recipient, amount);
    }

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

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

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

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

        return c;
    }

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

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

        return c;
    }

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

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

        return c;
    }

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

    /**
     * @dev Returns the integer division of two unsigned integers. Reverts with custom message on
     * division by zero. The result is rounded towards zero.
     *
     * Counterpart to Solidity's `/` operator. Note: this function uses a
     * `revert` opcode (which leaves remaining gas untouched) while Solidity
     * uses an invalid opcode to revert (consuming all remaining gas).
     *
     * Requirements:
     *
     * - The divisor cannot be zero.
     */
    function div(
        uint256 a,
        uint256 b,
        string memory errorMessage
    ) internal pure returns (uint256) {
        require(b > 0, errorMessage);
        uint256 c = a / b;
        // assert(a == b * c + a % b); // There is no case in which this doesn't hold

        return c;
    }

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

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

contract Ownable is Context {
    address private _owner;

    event OwnershipTransferred(
        address indexed previousOwner,
        address indexed newOwner
    );

    /**
     * @dev Initializes the contract setting the deployer as the initial owner.
     */
    constructor() {
        address msgSender = _msgSender();
        _owner = msgSender;
        emit OwnershipTransferred(address(0), msgSender);
    }

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

    /**
     * @dev Throws if called by any account other than the owner.
     */
    modifier onlyOwner() {
        require(_owner == _msgSender(), "Ownable: caller is not the owner");
        _;
    }

    /**
     * @dev Leaves the contract without owner. It will not be possible to call
     * `onlyOwner` functions anymore. Can only be called by the current owner.
     *
     * NOTE: Renouncing ownership will leave the contract without an owner,
     * thereby removing any functionality that is only available to the owner.
     */
    function renounceOwnership() public virtual onlyOwner {
        emit OwnershipTransferred(_owner, address(0));
        _owner = address(0);
    }

    /**
     * @dev Transfers ownership of the contract to a new account (`newOwner`).
     * Can only be called by the current owner.
     */
    function transferOwnership(address newOwner) public virtual onlyOwner {
        require(
            newOwner != address(0),
            "Ownable: new owner is the zero address"
        );
        emit OwnershipTransferred(_owner, newOwner);
        _owner = newOwner;
    }
}

library SafeMathInt {
    int256 private constant MIN_INT256 = int256(1) << 255;
    int256 private constant MAX_INT256 = ~(int256(1) << 255);

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

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

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

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

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

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

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

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

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

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

    function WETH() external pure returns (address);

    function addLiquidity(
        address tokenA,
        address tokenB,
        uint256 amountADesired,
        uint256 amountBDesired,
        uint256 amountAMin,
        uint256 amountBMin,
        address to,
        uint256 deadline
    )
        external
        returns (
            uint256 amountA,
            uint256 amountB,
            uint256 liquidity
        );

    function addLiquidityETH(
        address token,
        uint256 amountTokenDesired,
        uint256 amountTokenMin,
        uint256 amountETHMin,
        address to,
        uint256 deadline
    )
        external
        payable
        returns (
            uint256 amountToken,
            uint256 amountETH,
            uint256 liquidity
        );

    function removeLiquidity(
        address tokenA,
        address tokenB,
        uint256 liquidity,
        uint256 amountAMin,
        uint256 amountBMin,
        address to,
        uint256 deadline
    ) external returns (uint256 amountA, uint256 amountB);

    function removeLiquidityETH(
        address token,
        uint256 liquidity,
        uint256 amountTokenMin,
        uint256 amountETHMin,
        address to,
        uint256 deadline
    ) external returns (uint256 amountToken, uint256 amountETH);

    function removeLiquidityWithPermit(
        address tokenA,
        address tokenB,
        uint256 liquidity,
        uint256 amountAMin,
        uint256 amountBMin,
        address to,
        uint256 deadline,
        bool approveMax,
        uint8 v,
        bytes32 r,
        bytes32 s
    ) external returns (uint256 amountA, uint256 amountB);

    function removeLiquidityETHWithPermit(
        address token,
        uint256 liquidity,
        uint256 amountTokenMin,
        uint256 amountETHMin,
        address to,
        uint256 deadline,
        bool approveMax,
        uint8 v,
        bytes32 r,
        bytes32 s
    ) external returns (uint256 amountToken, uint256 amountETH);

    function swapExactTokensForTokens(
        uint256 amountIn,
        uint256 amountOutMin,
        address[] calldata path,
        address to,
        uint256 deadline
    ) external returns (uint256[] memory amounts);

    function swapTokensForExactTokens(
        uint256 amountOut,
        uint256 amountInMax,
        address[] calldata path,
        address to,
        uint256 deadline
    ) external returns (uint256[] memory amounts);

    function swapExactETHForTokens(
        uint256 amountOutMin,
        address[] calldata path,
        address to,
        uint256 deadline
    ) external payable returns (uint256[] memory amounts);

    function swapTokensForExactETH(
        uint256 amountOut,
        uint256 amountInMax,
        address[] calldata path,
        address to,
        uint256 deadline
    ) external returns (uint256[] memory amounts);

    function swapExactTokensForETH(
        uint256 amountIn,
        uint256 amountOutMin,
        address[] calldata path,
        address to,
        uint256 deadline
    ) external returns (uint256[] memory amounts);

    function swapETHForExactTokens(
        uint256 amountOut,
        address[] calldata path,
        address to,
        uint256 deadline
    ) external payable returns (uint256[] memory amounts);

    function quote(
        uint256 amountA,
        uint256 reserveA,
        uint256 reserveB
    ) external pure returns (uint256 amountB);

    function getAmountOut(
        uint256 amountIn,
        uint256 reserveIn,
        uint256 reserveOut
    ) external pure returns (uint256 amountOut);

    function getAmountIn(
        uint256 amountOut,
        uint256 reserveIn,
        uint256 reserveOut
    ) external pure returns (uint256 amountIn);

    function getAmountsOut(uint256 amountIn, address[] calldata path)
        external
        view
        returns (uint256[] memory amounts);

    function getAmountsIn(uint256 amountOut, address[] calldata path)
        external
        view
        returns (uint256[] memory amounts);
}

interface IUniswapV2Router02 is IUniswapV2Router01 {
    function removeLiquidityETHSupportingFeeOnTransferTokens(
        address token,
        uint256 liquidity,
        uint256 amountTokenMin,
        uint256 amountETHMin,
        address to,
        uint256 deadline
    ) external returns (uint256 amountETH);

    function removeLiquidityETHWithPermitSupportingFeeOnTransferTokens(
        address token,
        uint256 liquidity,
        uint256 amountTokenMin,
        uint256 amountETHMin,
        address to,
        uint256 deadline,
        bool approveMax,
        uint8 v,
        bytes32 r,
        bytes32 s
    ) external returns (uint256 amountETH);

    function swapExactTokensForTokensSupportingFeeOnTransferTokens(
        uint256 amountIn,
        uint256 amountOutMin,
        address[] calldata path,
        address to,
        uint256 deadline
    ) external;

    function swapExactETHForTokensSupportingFeeOnTransferTokens(
        uint256 amountOutMin,
        address[] calldata path,
        address to,
        uint256 deadline
    ) external payable;

    function swapExactTokensForETHSupportingFeeOnTransferTokens(
        uint256 amountIn,
        uint256 amountOutMin,
        address[] calldata path,
        address to,
        uint256 deadline
    ) external;
}

contract PORTALS is ERC20, Ownable {
    using SafeMath for uint256;

    IUniswapV2Router02 public immutable uniswapV2Router;
    address public immutable uniswapV2Pair;

    bool private swapping;

    uint256 public swapTokensAtAmount;
    uint256 public maxTransactionAmount;

    uint256 public liquidityActiveBlock = 0; // 0 means liquidity is not active yet
    uint256 public tradingActiveBlock = 0; // 0 means trading is not active

    bool public tradingActive = false;
    bool public limitsInEffect = true;
    bool public swapEnabled = false;

    address public constant burnWallet = 0x000000000000000000000000000000000000dEaD;
    address public marketingWallet = 0xE7dc4f843dc3aB5Bc4D1fB750e286A8544409db7;

    uint256 public constant feeDivisor = 1000;

    uint256 public marketingBuyFee;
    uint256 public totalBuyFees;

    uint256 public marketingSellFee;
    uint256 public totalSellFees;

    uint256 public tokensForFees;
    uint256 public tokensForMarketing;

    uint256 public maxWallet;

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

    mapping(address => bool) public automatedMarketMakerPairs;

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

    event SetAutomatedMarketMakerPair(address indexed pair, bool indexed value);

    event SwapAndLiquify(
        uint256 tokensSwapped,
        uint256 ethReceived,
        uint256 tokensIntoLiqudity
    );

    constructor() ERC20("Portals", "PORTALS") {
        uint256 totalSupply = 1 * 1e12 * 1e18;

        swapTokensAtAmount = (totalSupply * 1) / 10000; // 0.01% swap tokens amount
        maxTransactionAmount = (totalSupply * 10) / 1000; // 1.0% maxTransactionAmountTxn
        maxWallet = (totalSupply * 20) / 1000; // 2% maxWallet

        marketingBuyFee = 30; // 3%
        totalBuyFees = marketingBuyFee;

        marketingSellFee = 40; // 4%
        totalSellFees = marketingSellFee;

        IUniswapV2Router02 _uniswapV2Router = IUniswapV2Router02(
            0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D
        );

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

        uniswapV2Router = _uniswapV2Router;
        uniswapV2Pair = _uniswapV2Pair;

        _setAutomatedMarketMakerPair(_uniswapV2Pair, true);

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

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

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

    receive() external payable {}

    function openPortal() external onlyOwner {
        require(!tradingActive, "Cannot re-enable trading");
        tradingActive = true;
        swapEnabled = true;
        tradingActiveBlock = block.number;
    }

    function excludeFromMaxTransaction(address newAd, bool trueFalse)
        public
        onlyOwner
    {
        _isExcludedMaxTransactionAmount[newAd] = trueFalse;
    }

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

        emit ExcludeFromFees(account, excluded);
    }

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

        emit ExcludeMultipleAccountsFromFees(accounts, excluded);
    }

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

        _setAutomatedMarketMakerPair(pair, value);
    }

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

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

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

        if (amount == 0) {
            super._transfer(from, to, 0);
            return;
        }

        if (!tradingActive) {
            require(
                _isExcludedFromFees[from] || _isExcludedFromFees[to],
                "Trading is not active yet."
            );
        }

        if (limitsInEffect) {
            if (
                from != owner() &&
                to != owner() &&
                to != address(0) &&
                to != address(0xdead) &&
                !swapping
            ) {
                if (!tradingActive) {
                    require(
                        _isExcludedFromFees[from] || _isExcludedFromFees[to],
                        "Trading is not active."
                    );
                }

                //when buy
                if (
                    automatedMarketMakerPairs[from] &&
                    !_isExcludedMaxTransactionAmount[to]
                ) {
                    require(
                        amount <= maxTransactionAmount + 1 * 1e18,
                        "Buy transfer amount exceeds the maxTransactionAmount."
                    );
                    require(
                        amount + balanceOf(to) <= maxWallet,
                        "Max wallet exceeded"
                    );
                }
                //when sell
                else if (
                    automatedMarketMakerPairs[to] &&
                    !_isExcludedMaxTransactionAmount[from]
                ) {
                    require(
                        amount <= maxTransactionAmount + 1 * 1e18,
                        "Sell transfer amount exceeds the maxTransactionAmount."
                    );
                } else if (!_isExcludedMaxTransactionAmount[to]) {
                    require(
                        amount + balanceOf(to) <= maxWallet,
                        "Max wallet exceeded"
                    );
                }
            }
        }

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

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

        bool takeFee = !swapping;

        // if any account belongs to _isExcludedFromFee account then remove the fee
        if (_isExcludedFromFees[from] || _isExcludedFromFees[to]) {
            takeFee = false;
        }

        uint256 fees = 0;

        // no taxes on transfers (non buys/sells)
        if (takeFee) {
            // on sell take fees, purchase token and burn it
            if (automatedMarketMakerPairs[to] && totalSellFees > 0) {
                fees = amount.mul(totalSellFees).div(feeDivisor);
                tokensForFees += fees;
                tokensForMarketing += (fees * marketingSellFee) / totalSellFees;
            }
            // on buy
            else if (automatedMarketMakerPairs[from]) {
                fees = amount.mul(totalBuyFees).div(feeDivisor);
                tokensForFees += fees;
                tokensForMarketing += (fees * marketingBuyFee) / totalBuyFees;
            }

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

            amount -= fees;
        }

        super._transfer(from, to, amount);
    }

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

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

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

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

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

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

    function updateSellFees(uint256 _newFee) external onlyOwner {
        marketingSellFee = _newFee;
        totalSellFees = marketingSellFee;
        require(totalSellFees <= 50, "Must keep fees at 5% or less");
    }

    function updateBuyFees(uint256 _newFee) external onlyOwner {
        marketingBuyFee = _newFee;
        totalBuyFees = marketingBuyFee;
        require(totalSellFees <= 50, "Must keep fees at 5% or less");
    }

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

    function swapBack() private {
        uint256 contractBalance = balanceOf(address(this));
        uint256 totalTokensToSwap = tokensForMarketing;
        bool success;

        if (contractBalance == 0 || totalTokensToSwap == 0) {
            return;
        }

        uint256 amountToSwapForETH = contractBalance;
        swapTokensForEth(amountToSwapForETH);

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

        tokensForMarketing = 0;
        tokensForFees = 0;
    }

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

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"bool","name":"isExcluded","type":"bool"}],"name":"ExcludeFromFees","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address[]","name":"accounts","type":"address[]"},{"indexed":false,"internalType":"bool","name":"isExcluded","type":"bool"}],"name":"ExcludeMultipleAccountsFromFees","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pair","type":"address"},{"indexed":true,"internalType":"bool","name":"value","type":"bool"}],"name":"SetAutomatedMarketMakerPair","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"tokensSwapped","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"ethReceived","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"tokensIntoLiqudity","type":"uint256"}],"name":"SwapAndLiquify","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"_isExcludedMaxTransactionAmount","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"automatedMarketMakerPairs","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"burnWallet","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":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"excluded","type":"bool"}],"name":"excludeFromFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newAd","type":"address"},{"internalType":"bool","name":"trueFalse","type":"bool"}],"name":"excludeFromMaxTransaction","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"accounts","type":"address[]"},{"internalType":"bool","name":"excluded","type":"bool"}],"name":"excludeMultipleAccountsFromFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"feeDivisor","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromFees","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"limitsInEffect","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"liquidityActiveBlock","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"manualSwap","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"marketingBuyFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"marketingSellFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"marketingWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxTransactionAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxWallet","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"openPortal","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"removeLimits","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pair","type":"address"},{"internalType":"bool","name":"value","type":"bool"}],"name":"setAutomatedMarketMakerPair","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"swapTokensAtAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokensForFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokensForMarketing","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalBuyFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSellFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tradingActive","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tradingActiveBlock","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"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":"_newFee","type":"uint256"}],"name":"updateBuyFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_newFee","type":"uint256"}],"name":"updateSellFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"withdrawStuckEth","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

60c0604052600060085560006009556000600a60006101000a81548160ff0219169083151502179055506001600a60016101000a81548160ff0219169083151502179055506000600a60026101000a81548160ff02191690831515021790555073e7dc4f843dc3ab5bc4d1fb750e286a8544409db7600a60036101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550348015620000c157600080fd5b506040518060400160405280600781526020017f506f7274616c73000000000000000000000000000000000000000000000000008152506040518060400160405280600781526020017f504f5254414c530000000000000000000000000000000000000000000000000081525081600390816200013f919062000cc4565b50806004908162000151919062000cc4565b505050600062000166620005dd60201b60201c565b905080600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35060006c0c9f2c9cd04674edea40000000905061271060018262000229919062000dda565b62000235919062000e6a565b6006819055506103e8600a826200024d919062000dda565b62000259919062000e6a565b6007819055506103e860148262000271919062000dda565b6200027d919062000e6a565b601181905550601e600b81905550600b54600c819055506028600d81905550600d54600e819055506000737a250d5630b4cf539739df2c5dacb4c659f2488d905060008173ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa1580156200030c573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000332919062000f0c565b73ffffffffffffffffffffffffffffffffffffffff1663c9c65396308473ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa1580156200039a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620003c0919062000f0c565b6040518363ffffffff1660e01b8152600401620003df92919062000f4f565b6020604051808303816000875af1158015620003ff573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000425919062000f0c565b90508173ffffffffffffffffffffffffffffffffffffffff1660808173ffffffffffffffffffffffffffffffffffffffff16815250508073ffffffffffffffffffffffffffffffffffffffff1660a08173ffffffffffffffffffffffffffffffffffffffff1681525050620004a2816001620005e560201b60201c565b620004c4620004b66200068660201b60201c565b6001620006b060201b60201c565b620004d7306001620006b060201b60201c565b620004ec61dead6001620006b060201b60201c565b620004ff826001620006b060201b60201c565b62000534600a60039054906101000a900473ffffffffffffffffffffffffffffffffffffffff166001620006b060201b60201c565b62000556620005486200068660201b60201c565b6001620007fd60201b60201c565b62000569306001620007fd60201b60201c565b6200057e61dead6001620007fd60201b60201c565b620005b3600a60039054906101000a900473ffffffffffffffffffffffffffffffffffffffff166001620007fd60201b60201c565b620005d4620005c76200068660201b60201c565b84620008fa60201b60201c565b50505062001114565b600033905090565b80601460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508015158273ffffffffffffffffffffffffffffffffffffffff167fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab60405160405180910390a35050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b620006c0620005dd60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161462000752576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620007499062000fdd565b60405180910390fd5b80601260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df782604051620007f191906200101c565b60405180910390a25050565b6200080d620005dd60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146200089f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620008969062000fdd565b60405180910390fd5b80601360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036200096c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620009639062001089565b60405180910390fd5b8060026000828254620009809190620010ab565b92505081905550806000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254620009d79190620010ab565b925050819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405162000a3e9190620010f7565b60405180910390a35050565b600081519050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168062000acc57607f821691505b60208210810362000ae25762000ae162000a84565b5b50919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b60006008830262000b4c7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8262000b0d565b62000b58868362000b0d565b95508019841693508086168417925050509392505050565b6000819050919050565b6000819050919050565b600062000ba562000b9f62000b998462000b70565b62000b7a565b62000b70565b9050919050565b6000819050919050565b62000bc18362000b84565b62000bd962000bd08262000bac565b84845462000b1a565b825550505050565b600090565b62000bf062000be1565b62000bfd81848462000bb6565b505050565b5b8181101562000c255762000c1960008262000be6565b60018101905062000c03565b5050565b601f82111562000c745762000c3e8162000ae8565b62000c498462000afd565b8101602085101562000c59578190505b62000c7162000c688562000afd565b83018262000c02565b50505b505050565b600082821c905092915050565b600062000c996000198460080262000c79565b1980831691505092915050565b600062000cb4838362000c86565b9150826002028217905092915050565b62000ccf8262000a4a565b67ffffffffffffffff81111562000ceb5762000cea62000a55565b5b62000cf7825462000ab3565b62000d0482828562000c29565b600060209050601f83116001811462000d3c576000841562000d27578287015190505b62000d33858262000ca6565b86555062000da3565b601f19841662000d4c8662000ae8565b60005b8281101562000d765784890151825560018201915060208501945060208101905062000d4f565b8683101562000d96578489015162000d92601f89168262000c86565b8355505b6001600288020188555050505b505050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600062000de78262000b70565b915062000df48362000b70565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161562000e305762000e2f62000dab565b5b828202905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600062000e778262000b70565b915062000e848362000b70565b92508262000e975762000e9662000e3b565b5b828204905092915050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600062000ed48262000ea7565b9050919050565b62000ee68162000ec7565b811462000ef257600080fd5b50565b60008151905062000f068162000edb565b92915050565b60006020828403121562000f255762000f2462000ea2565b5b600062000f358482850162000ef5565b91505092915050565b62000f498162000ec7565b82525050565b600060408201905062000f66600083018562000f3e565b62000f75602083018462000f3e565b9392505050565b600082825260208201905092915050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b600062000fc560208362000f7c565b915062000fd28262000f8d565b602082019050919050565b6000602082019050818103600083015262000ff88162000fb6565b9050919050565b60008115159050919050565b620010168162000fff565b82525050565b60006020820190506200103360008301846200100b565b92915050565b7f45524332303a206d696e7420746f20746865207a65726f206164647265737300600082015250565b600062001071601f8362000f7c565b91506200107e8262001039565b602082019050919050565b60006020820190508181036000830152620010a48162001062565b9050919050565b6000620010b88262000b70565b9150620010c58362000b70565b9250828201905080821115620010e057620010df62000dab565b5b92915050565b620010f18162000b70565b82525050565b60006020820190506200110e6000830184620010e6565b92915050565b60805160a05161473b6200115660003960008181610d6201526116e0015260008181610b7b01528181612c8801528181612d690152612d90015261473b6000f3fe6080604052600436106102815760003560e01c806375f0a8741161014f578063bbc0c742116100c1578063e2f456051161007a578063e2f456051461099f578063e7f444b3146109ca578063eba4c333146109f5578063ee40166e14610a1e578063f2fde38b14610a49578063f8b45b0514610a7257610288565b8063bbc0c7421461088f578063c0246668146108ba578063c492f046146108e3578063c8c8ebe41461090c578063d0a3981414610937578063dd62ed3e1461096257610288565b80639a36f932116101135780639a36f932146107595780639a7a23d614610784578063a457c2d7146107ad578063a9059cbb146107ea578063b62496f514610827578063b9e937001461086457610288565b806375f0a874146106aa5780637fa787ba146106d55780638da5cb5b146106ec57806395d89b4114610717578063975775701461074257610288565b80633f8a6204116101f35780636ddd1713116101ac5780636ddd1713146105ae57806370a08231146105d9578063715018a61461061657806371fc46881461062d578063751039fc146106565780637571336a1461068157610288565b80633f8a6204146104ae57806349bd5a5e146104d95780634a62bb65146105045780634fbee1931461052f57806351bc3c851461056c578063680789521461058357610288565b80631694505e116102455780631694505e1461038857806318160ddd146103b35780631f3fed8f146103de57806323b872dd14610409578063313ce56714610446578063395093511461047157610288565b8063062287491461028d57806306fdde03146102b8578063095ea7b3146102e35780630f4432e31461032057806310d5de531461034b57610288565b3661028857005b600080fd5b34801561029957600080fd5b506102a2610a9d565b6040516102af919061337c565b60405180910390f35b3480156102c457600080fd5b506102cd610aa3565b6040516102da9190613427565b60405180910390f35b3480156102ef57600080fd5b5061030a600480360381019061030591906134b5565b610b35565b6040516103179190613510565b60405180910390f35b34801561032c57600080fd5b50610335610b53565b604051610342919061353a565b60405180910390f35b34801561035757600080fd5b50610372600480360381019061036d9190613555565b610b59565b60405161037f9190613510565b60405180910390f35b34801561039457600080fd5b5061039d610b79565b6040516103aa91906135e1565b60405180910390f35b3480156103bf57600080fd5b506103c8610b9d565b6040516103d5919061353a565b60405180910390f35b3480156103ea57600080fd5b506103f3610ba7565b604051610400919061353a565b60405180910390f35b34801561041557600080fd5b50610430600480360381019061042b91906135fc565b610bad565b60405161043d9190613510565b60405180910390f35b34801561045257600080fd5b5061045b610ca5565b604051610468919061366b565b60405180910390f35b34801561047d57600080fd5b50610498600480360381019061049391906134b5565b610cae565b6040516104a59190613510565b60405180910390f35b3480156104ba57600080fd5b506104c3610d5a565b6040516104d0919061353a565b60405180910390f35b3480156104e557600080fd5b506104ee610d60565b6040516104fb919061337c565b60405180910390f35b34801561051057600080fd5b50610519610d84565b6040516105269190613510565b60405180910390f35b34801561053b57600080fd5b5061055660048036038101906105519190613555565b610d97565b6040516105639190613510565b60405180910390f35b34801561057857600080fd5b50610581610ded565b005b34801561058f57600080fd5b50610598610e9d565b6040516105a5919061353a565b60405180910390f35b3480156105ba57600080fd5b506105c3610ea3565b6040516105d09190613510565b60405180910390f35b3480156105e557600080fd5b5061060060048036038101906105fb9190613555565b610eb6565b60405161060d919061353a565b60405180910390f35b34801561062257600080fd5b5061062b610efe565b005b34801561063957600080fd5b50610654600480360381019061064f9190613686565b611056565b005b34801561066257600080fd5b5061066b611146565b6040516106789190613510565b60405180910390f35b34801561068d57600080fd5b506106a860048036038101906106a391906136df565b611201565b005b3480156106b657600080fd5b506106bf6112f3565b6040516106cc919061337c565b60405180910390f35b3480156106e157600080fd5b506106ea611319565b005b3480156106f857600080fd5b5061070161145f565b60405161070e919061337c565b60405180910390f35b34801561072357600080fd5b5061072c611489565b6040516107399190613427565b60405180910390f35b34801561074e57600080fd5b5061075761151b565b005b34801561076557600080fd5b5061076e611641565b60405161077b919061353a565b60405180910390f35b34801561079057600080fd5b506107ab60048036038101906107a691906136df565b611647565b005b3480156107b957600080fd5b506107d460048036038101906107cf91906134b5565b61177a565b6040516107e19190613510565b60405180910390f35b3480156107f657600080fd5b50610811600480360381019061080c91906134b5565b611865565b60405161081e9190613510565b60405180910390f35b34801561083357600080fd5b5061084e60048036038101906108499190613555565b611883565b60405161085b9190613510565b60405180910390f35b34801561087057600080fd5b506108796118a3565b604051610886919061353a565b60405180910390f35b34801561089b57600080fd5b506108a46118a9565b6040516108b19190613510565b60405180910390f35b3480156108c657600080fd5b506108e160048036038101906108dc91906136df565b6118bc565b005b3480156108ef57600080fd5b5061090a60048036038101906109059190613784565b6119fc565b005b34801561091857600080fd5b50610921611b73565b60405161092e919061353a565b60405180910390f35b34801561094357600080fd5b5061094c611b79565b604051610959919061353a565b60405180910390f35b34801561096e57600080fd5b50610989600480360381019061098491906137e4565b611b7f565b604051610996919061353a565b60405180910390f35b3480156109ab57600080fd5b506109b4611c06565b6040516109c1919061353a565b60405180910390f35b3480156109d657600080fd5b506109df611c0c565b6040516109ec919061353a565b60405180910390f35b348015610a0157600080fd5b50610a1c6004803603810190610a179190613686565b611c12565b005b348015610a2a57600080fd5b50610a33611d02565b604051610a40919061353a565b60405180910390f35b348015610a5557600080fd5b50610a706004803603810190610a6b9190613555565b611d08565b005b348015610a7e57600080fd5b50610a87611ece565b604051610a94919061353a565b60405180910390f35b61dead81565b606060038054610ab290613853565b80601f0160208091040260200160405190810160405280929190818152602001828054610ade90613853565b8015610b2b5780601f10610b0057610100808354040283529160200191610b2b565b820191906000526020600020905b815481529060010190602001808311610b0e57829003601f168201915b5050505050905090565b6000610b49610b42611ed4565b8484611edc565b6001905092915050565b60085481565b60136020528060005260406000206000915054906101000a900460ff1681565b7f000000000000000000000000000000000000000000000000000000000000000081565b6000600254905090565b60105481565b6000610bba8484846120a5565b6000600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000610c05611ed4565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905082811015610c85576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c7c906138f6565b60405180910390fd5b610c9985610c91611ed4565b858403611edc565b60019150509392505050565b60006012905090565b6000610d50610cbb611ed4565b848460016000610cc9611ed4565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610d4b9190613945565b611edc565b6001905092915050565b600f5481565b7f000000000000000000000000000000000000000000000000000000000000000081565b600a60019054906101000a900460ff1681565b6000601260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b610df5611ed4565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610e84576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e7b906139c5565b60405180910390fd5b6000610e8f30610eb6565b9050610e9a81612be9565b50565b600b5481565b600a60029054906101000a900460ff1681565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b610f06611ed4565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610f95576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f8c906139c5565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a36000600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b61105e611ed4565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146110ed576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110e4906139c5565b60405180910390fd5b80600b81905550600b54600c819055506032600e541115611143576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161113a90613a31565b60405180910390fd5b50565b6000611150611ed4565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146111df576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111d6906139c5565b60405180910390fd5b6000600a60016101000a81548160ff0219169083151502179055506001905090565b611209611ed4565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611298576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161128f906139c5565b60405180910390fd5b80601360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b600a60039054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b611321611ed4565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146113b0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113a7906139c5565b60405180910390fd5b60003373ffffffffffffffffffffffffffffffffffffffff16476040516113d690613a82565b60006040518083038185875af1925050503d8060008114611413576040519150601f19603f3d011682016040523d82523d6000602084013e611418565b606091505b505090508061145c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161145390613ae3565b60405180910390fd5b50565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60606004805461149890613853565b80601f01602080910402602001604051908101604052809291908181526020018280546114c490613853565b80156115115780601f106114e657610100808354040283529160200191611511565b820191906000526020600020905b8154815290600101906020018083116114f457829003601f168201915b5050505050905090565b611523611ed4565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146115b2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115a9906139c5565b60405180910390fd5b600a60009054906101000a900460ff1615611602576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115f990613b4f565b60405180910390fd5b6001600a60006101000a81548160ff0219169083151502179055506001600a60026101000a81548160ff02191690831515021790555043600981905550565b6103e881565b61164f611ed4565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146116de576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116d5906139c5565b60405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361176c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161176390613c07565b60405180910390fd5b6117768282612e26565b5050565b60008060016000611789611ed4565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905082811015611846576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161183d90613c99565b60405180910390fd5b61185a611851611ed4565b85858403611edc565b600191505092915050565b6000611879611872611ed4565b84846120a5565b6001905092915050565b60146020528060005260406000206000915054906101000a900460ff1681565b600c5481565b600a60009054906101000a900460ff1681565b6118c4611ed4565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611953576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161194a906139c5565b60405180910390fd5b80601260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7826040516119f09190613510565b60405180910390a25050565b611a04611ed4565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611a93576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a8a906139c5565b60405180910390fd5b60005b83839050811015611b32578160126000868685818110611ab957611ab8613cb9565b5b9050602002016020810190611ace9190613555565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508080611b2a90613ce8565b915050611a96565b507f7fdaf542373fa84f4ee8d662c642f44e4c2276a217d7d29e548b6eb29a233b35838383604051611b6693929190613df3565b60405180910390a1505050565b60075481565b600e5481565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b60065481565b600d5481565b611c1a611ed4565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611ca9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ca0906139c5565b60405180910390fd5b80600d81905550600d54600e819055506032600e541115611cff576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cf690613a31565b60405180910390fd5b50565b60095481565b611d10611ed4565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611d9f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d96906139c5565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611e0e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e0590613e97565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a380600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60115481565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611f4b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f4290613f29565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611fba576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fb190613fbb565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92583604051612098919061353a565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612114576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161210b9061404d565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612183576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161217a906140df565b60405180910390fd5b6000810361219c5761219783836000612ec7565b612be4565b600a60009054906101000a900460ff1661229157601260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16806122515750601260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b612290576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122879061414b565b60405180910390fd5b5b600a60019054906101000a900460ff16156127b2576122ae61145f565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415801561231c57506122ec61145f565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b80156123555750600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b801561238f575061dead73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b80156123a85750600560149054906101000a900460ff16155b156127b157600a60009054906101000a900460ff166124a257601260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16806124625750601260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b6124a1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612498906141b7565b60405180910390fd5b5b601460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156125455750601360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b156125ff57670de0b6b3a76400006007546125609190613945565b8111156125a2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161259990614249565b60405180910390fd5b6011546125ae83610eb6565b826125b99190613945565b11156125fa576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125f1906142b5565b60405180910390fd5b6127b0565b601460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156126a25750601360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b1561270457670de0b6b3a76400006007546126bd9190613945565b8111156126ff576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126f690614347565b60405180910390fd5b6127af565b601360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff166127ae5760115461276183610eb6565b8261276c9190613945565b11156127ad576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127a4906142b5565b60405180910390fd5b5b5b5b5b5b60006127bd30610eb6565b9050600060065482101590508080156127e25750600a60029054906101000a900460ff165b80156127fb5750600560149054906101000a900460ff16155b80156128515750601460008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b80156128a75750601260008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b80156128fd5750601260008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15612941576001600560146101000a81548160ff021916908315150217905550612925613130565b6000600560146101000a81548160ff0219169083151502179055505b6000600560149054906101000a900460ff16159050601260008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16806129f75750601260008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b15612a0157600090505b60008115612bd457601460008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015612a6457506000600e54115b15612ae557612a926103e8612a84600e548861321490919063ffffffff16565b61328e90919063ffffffff16565b905080600f6000828254612aa69190613945565b92505081905550600e54600d5482612abe9190614367565b612ac891906143f0565b60106000828254612ad99190613945565b92505081905550612bb0565b601460008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615612baf57612b606103e8612b52600c548861321490919063ffffffff16565b61328e90919063ffffffff16565b905080600f6000828254612b749190613945565b92505081905550600c54600b5482612b8c9190614367565b612b9691906143f0565b60106000828254612ba79190613945565b925050819055505b5b6000811115612bc557612bc4873083612ec7565b5b8085612bd19190614421565b94505b612bdf878787612ec7565b505050505b505050565b6000600267ffffffffffffffff811115612c0657612c05614455565b5b604051908082528060200260200182016040528015612c345781602001602082028036833780820191505090505b5090503081600081518110612c4c57612c4b613cb9565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015612cf1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612d159190614499565b81600181518110612d2957612d28613cb9565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050612d8e307f000000000000000000000000000000000000000000000000000000000000000084611edc565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b8152600401612df0959493929190614587565b600060405180830381600087803b158015612e0a57600080fd5b505af1158015612e1e573d6000803e3d6000fd5b505050505050565b80601460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508015158273ffffffffffffffffffffffffffffffffffffffff167fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab60405160405180910390a35050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612f36576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612f2d9061404d565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612fa5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612f9c906140df565b60405180910390fd5b60008060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490508181101561302b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161302290614653565b60405180910390fd5b8181036000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546130be9190613945565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051613122919061353a565b60405180910390a350505050565b600061313b30610eb6565b9050600060105490506000808314806131545750600082145b1561316157505050613212565b600083905061316f81612be9565b600a60039054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16476040516131b590613a82565b60006040518083038185875af1925050503d80600081146131f2576040519150601f19603f3d011682016040523d82523d6000602084013e6131f7565b606091505b50508092505060006010819055506000600f81905550505050505b565b60008083036132265760009050613288565b600082846132349190614367565b905082848261324391906143f0565b14613283576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161327a906146e5565b60405180910390fd5b809150505b92915050565b60006132d083836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f0000000000008152506132d8565b905092915050565b6000808311829061331f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016133169190613427565b60405180910390fd5b506000838561332e91906143f0565b9050809150509392505050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006133668261333b565b9050919050565b6133768161335b565b82525050565b6000602082019050613391600083018461336d565b92915050565b600081519050919050565b600082825260208201905092915050565b60005b838110156133d15780820151818401526020810190506133b6565b60008484015250505050565b6000601f19601f8301169050919050565b60006133f982613397565b61340381856133a2565b93506134138185602086016133b3565b61341c816133dd565b840191505092915050565b6000602082019050818103600083015261344181846133ee565b905092915050565b600080fd5b600080fd5b61345c8161335b565b811461346757600080fd5b50565b60008135905061347981613453565b92915050565b6000819050919050565b6134928161347f565b811461349d57600080fd5b50565b6000813590506134af81613489565b92915050565b600080604083850312156134cc576134cb613449565b5b60006134da8582860161346a565b92505060206134eb858286016134a0565b9150509250929050565b60008115159050919050565b61350a816134f5565b82525050565b60006020820190506135256000830184613501565b92915050565b6135348161347f565b82525050565b600060208201905061354f600083018461352b565b92915050565b60006020828403121561356b5761356a613449565b5b60006135798482850161346a565b91505092915050565b6000819050919050565b60006135a76135a261359d8461333b565b613582565b61333b565b9050919050565b60006135b98261358c565b9050919050565b60006135cb826135ae565b9050919050565b6135db816135c0565b82525050565b60006020820190506135f660008301846135d2565b92915050565b60008060006060848603121561361557613614613449565b5b60006136238682870161346a565b93505060206136348682870161346a565b9250506040613645868287016134a0565b9150509250925092565b600060ff82169050919050565b6136658161364f565b82525050565b6000602082019050613680600083018461365c565b92915050565b60006020828403121561369c5761369b613449565b5b60006136aa848285016134a0565b91505092915050565b6136bc816134f5565b81146136c757600080fd5b50565b6000813590506136d9816136b3565b92915050565b600080604083850312156136f6576136f5613449565b5b60006137048582860161346a565b9250506020613715858286016136ca565b9150509250929050565b600080fd5b600080fd5b600080fd5b60008083601f8401126137445761374361371f565b5b8235905067ffffffffffffffff81111561376157613760613724565b5b60208301915083602082028301111561377d5761377c613729565b5b9250929050565b60008060006040848603121561379d5761379c613449565b5b600084013567ffffffffffffffff8111156137bb576137ba61344e565b5b6137c78682870161372e565b935093505060206137da868287016136ca565b9150509250925092565b600080604083850312156137fb576137fa613449565b5b60006138098582860161346a565b925050602061381a8582860161346a565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168061386b57607f821691505b60208210810361387e5761387d613824565b5b50919050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206160008201527f6c6c6f77616e6365000000000000000000000000000000000000000000000000602082015250565b60006138e06028836133a2565b91506138eb82613884565b604082019050919050565b6000602082019050818103600083015261390f816138d3565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60006139508261347f565b915061395b8361347f565b925082820190508082111561397357613972613916565b5b92915050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b60006139af6020836133a2565b91506139ba82613979565b602082019050919050565b600060208201905081810360008301526139de816139a2565b9050919050565b7f4d757374206b6565702066656573206174203525206f72206c65737300000000600082015250565b6000613a1b601c836133a2565b9150613a26826139e5565b602082019050919050565b60006020820190508181036000830152613a4a81613a0e565b9050919050565b600081905092915050565b50565b6000613a6c600083613a51565b9150613a7782613a5c565b600082019050919050565b6000613a8d82613a5f565b9150819050919050565b7f6661696c656420746f2077697468647261770000000000000000000000000000600082015250565b6000613acd6012836133a2565b9150613ad882613a97565b602082019050919050565b60006020820190508181036000830152613afc81613ac0565b9050919050565b7f43616e6e6f742072652d656e61626c652074726164696e670000000000000000600082015250565b6000613b396018836133a2565b9150613b4482613b03565b602082019050919050565b60006020820190508181036000830152613b6881613b2c565b9050919050565b7f54686520556e697377617020706169722063616e6e6f742062652072656d6f7660008201527f65642066726f6d206175746f6d617465644d61726b65744d616b65725061697260208201527f7300000000000000000000000000000000000000000000000000000000000000604082015250565b6000613bf16041836133a2565b9150613bfc82613b6f565b606082019050919050565b60006020820190508181036000830152613c2081613be4565b9050919050565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760008201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b6000613c836025836133a2565b9150613c8e82613c27565b604082019050919050565b60006020820190508181036000830152613cb281613c76565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6000613cf38261347f565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203613d2557613d24613916565b5b600182019050919050565b600082825260208201905092915050565b6000819050919050565b613d548161335b565b82525050565b6000613d668383613d4b565b60208301905092915050565b6000613d81602084018461346a565b905092915050565b6000602082019050919050565b6000613da28385613d30565b9350613dad82613d41565b8060005b85811015613de657613dc38284613d72565b613dcd8882613d5a565b9750613dd883613d89565b925050600181019050613db1565b5085925050509392505050565b60006040820190508181036000830152613e0e818587613d96565b9050613e1d6020830184613501565b949350505050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000613e816026836133a2565b9150613e8c82613e25565b604082019050919050565b60006020820190508181036000830152613eb081613e74565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b6000613f136024836133a2565b9150613f1e82613eb7565b604082019050919050565b60006020820190508181036000830152613f4281613f06565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b6000613fa56022836133a2565b9150613fb082613f49565b604082019050919050565b60006020820190508181036000830152613fd481613f98565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b60006140376025836133a2565b915061404282613fdb565b604082019050919050565b600060208201905081810360008301526140668161402a565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b60006140c96023836133a2565b91506140d48261406d565b604082019050919050565b600060208201905081810360008301526140f8816140bc565b9050919050565b7f54726164696e67206973206e6f7420616374697665207965742e000000000000600082015250565b6000614135601a836133a2565b9150614140826140ff565b602082019050919050565b6000602082019050818103600083015261416481614128565b9050919050565b7f54726164696e67206973206e6f74206163746976652e00000000000000000000600082015250565b60006141a16016836133a2565b91506141ac8261416b565b602082019050919050565b600060208201905081810360008301526141d081614194565b9050919050565b7f427579207472616e7366657220616d6f756e742065786365656473207468652060008201527f6d61785472616e73616374696f6e416d6f756e742e0000000000000000000000602082015250565b60006142336035836133a2565b915061423e826141d7565b604082019050919050565b6000602082019050818103600083015261426281614226565b9050919050565b7f4d61782077616c6c657420657863656564656400000000000000000000000000600082015250565b600061429f6013836133a2565b91506142aa82614269565b602082019050919050565b600060208201905081810360008301526142ce81614292565b9050919050565b7f53656c6c207472616e7366657220616d6f756e7420657863656564732074686560008201527f206d61785472616e73616374696f6e416d6f756e742e00000000000000000000602082015250565b60006143316036836133a2565b915061433c826142d5565b604082019050919050565b6000602082019050818103600083015261436081614324565b9050919050565b60006143728261347f565b915061437d8361347f565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156143b6576143b5613916565b5b828202905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b60006143fb8261347f565b91506144068361347f565b925082614416576144156143c1565b5b828204905092915050565b600061442c8261347f565b91506144378361347f565b925082820390508181111561444f5761444e613916565b5b92915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60008151905061449381613453565b92915050565b6000602082840312156144af576144ae613449565b5b60006144bd84828501614484565b91505092915050565b6000819050919050565b60006144eb6144e66144e1846144c6565b613582565b61347f565b9050919050565b6144fb816144d0565b82525050565b600081519050919050565b6000819050602082019050919050565b6000602082019050919050565b600061453482614501565b61453e8185613d30565b93506145498361450c565b8060005b8381101561457a5781516145618882613d5a565b975061456c8361451c565b92505060018101905061454d565b5085935050505092915050565b600060a08201905061459c600083018861352b565b6145a960208301876144f2565b81810360408301526145bb8186614529565b90506145ca606083018561336d565b6145d7608083018461352b565b9695505050505050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206260008201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b600061463d6026836133a2565b9150614648826145e1565b604082019050919050565b6000602082019050818103600083015261466c81614630565b9050919050565b7f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f60008201527f7700000000000000000000000000000000000000000000000000000000000000602082015250565b60006146cf6021836133a2565b91506146da82614673565b604082019050919050565b600060208201905081810360008301526146fe816146c2565b905091905056fea26469706673582212209331ed2f825c6892a568bbfe98b6f320923a720833e45e5eda448b97f0d0f3b764736f6c63430008100033

Deployed Bytecode

0x6080604052600436106102815760003560e01c806375f0a8741161014f578063bbc0c742116100c1578063e2f456051161007a578063e2f456051461099f578063e7f444b3146109ca578063eba4c333146109f5578063ee40166e14610a1e578063f2fde38b14610a49578063f8b45b0514610a7257610288565b8063bbc0c7421461088f578063c0246668146108ba578063c492f046146108e3578063c8c8ebe41461090c578063d0a3981414610937578063dd62ed3e1461096257610288565b80639a36f932116101135780639a36f932146107595780639a7a23d614610784578063a457c2d7146107ad578063a9059cbb146107ea578063b62496f514610827578063b9e937001461086457610288565b806375f0a874146106aa5780637fa787ba146106d55780638da5cb5b146106ec57806395d89b4114610717578063975775701461074257610288565b80633f8a6204116101f35780636ddd1713116101ac5780636ddd1713146105ae57806370a08231146105d9578063715018a61461061657806371fc46881461062d578063751039fc146106565780637571336a1461068157610288565b80633f8a6204146104ae57806349bd5a5e146104d95780634a62bb65146105045780634fbee1931461052f57806351bc3c851461056c578063680789521461058357610288565b80631694505e116102455780631694505e1461038857806318160ddd146103b35780631f3fed8f146103de57806323b872dd14610409578063313ce56714610446578063395093511461047157610288565b8063062287491461028d57806306fdde03146102b8578063095ea7b3146102e35780630f4432e31461032057806310d5de531461034b57610288565b3661028857005b600080fd5b34801561029957600080fd5b506102a2610a9d565b6040516102af919061337c565b60405180910390f35b3480156102c457600080fd5b506102cd610aa3565b6040516102da9190613427565b60405180910390f35b3480156102ef57600080fd5b5061030a600480360381019061030591906134b5565b610b35565b6040516103179190613510565b60405180910390f35b34801561032c57600080fd5b50610335610b53565b604051610342919061353a565b60405180910390f35b34801561035757600080fd5b50610372600480360381019061036d9190613555565b610b59565b60405161037f9190613510565b60405180910390f35b34801561039457600080fd5b5061039d610b79565b6040516103aa91906135e1565b60405180910390f35b3480156103bf57600080fd5b506103c8610b9d565b6040516103d5919061353a565b60405180910390f35b3480156103ea57600080fd5b506103f3610ba7565b604051610400919061353a565b60405180910390f35b34801561041557600080fd5b50610430600480360381019061042b91906135fc565b610bad565b60405161043d9190613510565b60405180910390f35b34801561045257600080fd5b5061045b610ca5565b604051610468919061366b565b60405180910390f35b34801561047d57600080fd5b50610498600480360381019061049391906134b5565b610cae565b6040516104a59190613510565b60405180910390f35b3480156104ba57600080fd5b506104c3610d5a565b6040516104d0919061353a565b60405180910390f35b3480156104e557600080fd5b506104ee610d60565b6040516104fb919061337c565b60405180910390f35b34801561051057600080fd5b50610519610d84565b6040516105269190613510565b60405180910390f35b34801561053b57600080fd5b5061055660048036038101906105519190613555565b610d97565b6040516105639190613510565b60405180910390f35b34801561057857600080fd5b50610581610ded565b005b34801561058f57600080fd5b50610598610e9d565b6040516105a5919061353a565b60405180910390f35b3480156105ba57600080fd5b506105c3610ea3565b6040516105d09190613510565b60405180910390f35b3480156105e557600080fd5b5061060060048036038101906105fb9190613555565b610eb6565b60405161060d919061353a565b60405180910390f35b34801561062257600080fd5b5061062b610efe565b005b34801561063957600080fd5b50610654600480360381019061064f9190613686565b611056565b005b34801561066257600080fd5b5061066b611146565b6040516106789190613510565b60405180910390f35b34801561068d57600080fd5b506106a860048036038101906106a391906136df565b611201565b005b3480156106b657600080fd5b506106bf6112f3565b6040516106cc919061337c565b60405180910390f35b3480156106e157600080fd5b506106ea611319565b005b3480156106f857600080fd5b5061070161145f565b60405161070e919061337c565b60405180910390f35b34801561072357600080fd5b5061072c611489565b6040516107399190613427565b60405180910390f35b34801561074e57600080fd5b5061075761151b565b005b34801561076557600080fd5b5061076e611641565b60405161077b919061353a565b60405180910390f35b34801561079057600080fd5b506107ab60048036038101906107a691906136df565b611647565b005b3480156107b957600080fd5b506107d460048036038101906107cf91906134b5565b61177a565b6040516107e19190613510565b60405180910390f35b3480156107f657600080fd5b50610811600480360381019061080c91906134b5565b611865565b60405161081e9190613510565b60405180910390f35b34801561083357600080fd5b5061084e60048036038101906108499190613555565b611883565b60405161085b9190613510565b60405180910390f35b34801561087057600080fd5b506108796118a3565b604051610886919061353a565b60405180910390f35b34801561089b57600080fd5b506108a46118a9565b6040516108b19190613510565b60405180910390f35b3480156108c657600080fd5b506108e160048036038101906108dc91906136df565b6118bc565b005b3480156108ef57600080fd5b5061090a60048036038101906109059190613784565b6119fc565b005b34801561091857600080fd5b50610921611b73565b60405161092e919061353a565b60405180910390f35b34801561094357600080fd5b5061094c611b79565b604051610959919061353a565b60405180910390f35b34801561096e57600080fd5b50610989600480360381019061098491906137e4565b611b7f565b604051610996919061353a565b60405180910390f35b3480156109ab57600080fd5b506109b4611c06565b6040516109c1919061353a565b60405180910390f35b3480156109d657600080fd5b506109df611c0c565b6040516109ec919061353a565b60405180910390f35b348015610a0157600080fd5b50610a1c6004803603810190610a179190613686565b611c12565b005b348015610a2a57600080fd5b50610a33611d02565b604051610a40919061353a565b60405180910390f35b348015610a5557600080fd5b50610a706004803603810190610a6b9190613555565b611d08565b005b348015610a7e57600080fd5b50610a87611ece565b604051610a94919061353a565b60405180910390f35b61dead81565b606060038054610ab290613853565b80601f0160208091040260200160405190810160405280929190818152602001828054610ade90613853565b8015610b2b5780601f10610b0057610100808354040283529160200191610b2b565b820191906000526020600020905b815481529060010190602001808311610b0e57829003601f168201915b5050505050905090565b6000610b49610b42611ed4565b8484611edc565b6001905092915050565b60085481565b60136020528060005260406000206000915054906101000a900460ff1681565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d81565b6000600254905090565b60105481565b6000610bba8484846120a5565b6000600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000610c05611ed4565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905082811015610c85576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c7c906138f6565b60405180910390fd5b610c9985610c91611ed4565b858403611edc565b60019150509392505050565b60006012905090565b6000610d50610cbb611ed4565b848460016000610cc9611ed4565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610d4b9190613945565b611edc565b6001905092915050565b600f5481565b7f000000000000000000000000b3dabd04d1a0cecb2f4e3bc013e9d8614be1938c81565b600a60019054906101000a900460ff1681565b6000601260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b610df5611ed4565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610e84576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e7b906139c5565b60405180910390fd5b6000610e8f30610eb6565b9050610e9a81612be9565b50565b600b5481565b600a60029054906101000a900460ff1681565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b610f06611ed4565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610f95576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f8c906139c5565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a36000600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b61105e611ed4565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146110ed576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110e4906139c5565b60405180910390fd5b80600b81905550600b54600c819055506032600e541115611143576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161113a90613a31565b60405180910390fd5b50565b6000611150611ed4565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146111df576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111d6906139c5565b60405180910390fd5b6000600a60016101000a81548160ff0219169083151502179055506001905090565b611209611ed4565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611298576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161128f906139c5565b60405180910390fd5b80601360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b600a60039054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b611321611ed4565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146113b0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113a7906139c5565b60405180910390fd5b60003373ffffffffffffffffffffffffffffffffffffffff16476040516113d690613a82565b60006040518083038185875af1925050503d8060008114611413576040519150601f19603f3d011682016040523d82523d6000602084013e611418565b606091505b505090508061145c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161145390613ae3565b60405180910390fd5b50565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60606004805461149890613853565b80601f01602080910402602001604051908101604052809291908181526020018280546114c490613853565b80156115115780601f106114e657610100808354040283529160200191611511565b820191906000526020600020905b8154815290600101906020018083116114f457829003601f168201915b5050505050905090565b611523611ed4565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146115b2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115a9906139c5565b60405180910390fd5b600a60009054906101000a900460ff1615611602576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115f990613b4f565b60405180910390fd5b6001600a60006101000a81548160ff0219169083151502179055506001600a60026101000a81548160ff02191690831515021790555043600981905550565b6103e881565b61164f611ed4565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146116de576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116d5906139c5565b60405180910390fd5b7f000000000000000000000000b3dabd04d1a0cecb2f4e3bc013e9d8614be1938c73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361176c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161176390613c07565b60405180910390fd5b6117768282612e26565b5050565b60008060016000611789611ed4565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905082811015611846576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161183d90613c99565b60405180910390fd5b61185a611851611ed4565b85858403611edc565b600191505092915050565b6000611879611872611ed4565b84846120a5565b6001905092915050565b60146020528060005260406000206000915054906101000a900460ff1681565b600c5481565b600a60009054906101000a900460ff1681565b6118c4611ed4565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611953576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161194a906139c5565b60405180910390fd5b80601260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7826040516119f09190613510565b60405180910390a25050565b611a04611ed4565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611a93576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a8a906139c5565b60405180910390fd5b60005b83839050811015611b32578160126000868685818110611ab957611ab8613cb9565b5b9050602002016020810190611ace9190613555565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508080611b2a90613ce8565b915050611a96565b507f7fdaf542373fa84f4ee8d662c642f44e4c2276a217d7d29e548b6eb29a233b35838383604051611b6693929190613df3565b60405180910390a1505050565b60075481565b600e5481565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b60065481565b600d5481565b611c1a611ed4565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611ca9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ca0906139c5565b60405180910390fd5b80600d81905550600d54600e819055506032600e541115611cff576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cf690613a31565b60405180910390fd5b50565b60095481565b611d10611ed4565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611d9f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d96906139c5565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611e0e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e0590613e97565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a380600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60115481565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611f4b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f4290613f29565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611fba576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fb190613fbb565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92583604051612098919061353a565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612114576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161210b9061404d565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612183576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161217a906140df565b60405180910390fd5b6000810361219c5761219783836000612ec7565b612be4565b600a60009054906101000a900460ff1661229157601260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16806122515750601260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b612290576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122879061414b565b60405180910390fd5b5b600a60019054906101000a900460ff16156127b2576122ae61145f565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415801561231c57506122ec61145f565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b80156123555750600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b801561238f575061dead73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b80156123a85750600560149054906101000a900460ff16155b156127b157600a60009054906101000a900460ff166124a257601260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16806124625750601260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b6124a1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612498906141b7565b60405180910390fd5b5b601460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156125455750601360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b156125ff57670de0b6b3a76400006007546125609190613945565b8111156125a2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161259990614249565b60405180910390fd5b6011546125ae83610eb6565b826125b99190613945565b11156125fa576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125f1906142b5565b60405180910390fd5b6127b0565b601460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156126a25750601360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b1561270457670de0b6b3a76400006007546126bd9190613945565b8111156126ff576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126f690614347565b60405180910390fd5b6127af565b601360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff166127ae5760115461276183610eb6565b8261276c9190613945565b11156127ad576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127a4906142b5565b60405180910390fd5b5b5b5b5b5b60006127bd30610eb6565b9050600060065482101590508080156127e25750600a60029054906101000a900460ff165b80156127fb5750600560149054906101000a900460ff16155b80156128515750601460008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b80156128a75750601260008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b80156128fd5750601260008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15612941576001600560146101000a81548160ff021916908315150217905550612925613130565b6000600560146101000a81548160ff0219169083151502179055505b6000600560149054906101000a900460ff16159050601260008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16806129f75750601260008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b15612a0157600090505b60008115612bd457601460008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015612a6457506000600e54115b15612ae557612a926103e8612a84600e548861321490919063ffffffff16565b61328e90919063ffffffff16565b905080600f6000828254612aa69190613945565b92505081905550600e54600d5482612abe9190614367565b612ac891906143f0565b60106000828254612ad99190613945565b92505081905550612bb0565b601460008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615612baf57612b606103e8612b52600c548861321490919063ffffffff16565b61328e90919063ffffffff16565b905080600f6000828254612b749190613945565b92505081905550600c54600b5482612b8c9190614367565b612b9691906143f0565b60106000828254612ba79190613945565b925050819055505b5b6000811115612bc557612bc4873083612ec7565b5b8085612bd19190614421565b94505b612bdf878787612ec7565b505050505b505050565b6000600267ffffffffffffffff811115612c0657612c05614455565b5b604051908082528060200260200182016040528015612c345781602001602082028036833780820191505090505b5090503081600081518110612c4c57612c4b613cb9565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015612cf1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612d159190614499565b81600181518110612d2957612d28613cb9565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050612d8e307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d84611edc565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b8152600401612df0959493929190614587565b600060405180830381600087803b158015612e0a57600080fd5b505af1158015612e1e573d6000803e3d6000fd5b505050505050565b80601460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508015158273ffffffffffffffffffffffffffffffffffffffff167fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab60405160405180910390a35050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612f36576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612f2d9061404d565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612fa5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612f9c906140df565b60405180910390fd5b60008060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490508181101561302b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161302290614653565b60405180910390fd5b8181036000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546130be9190613945565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051613122919061353a565b60405180910390a350505050565b600061313b30610eb6565b9050600060105490506000808314806131545750600082145b1561316157505050613212565b600083905061316f81612be9565b600a60039054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16476040516131b590613a82565b60006040518083038185875af1925050503d80600081146131f2576040519150601f19603f3d011682016040523d82523d6000602084013e6131f7565b606091505b50508092505060006010819055506000600f81905550505050505b565b60008083036132265760009050613288565b600082846132349190614367565b905082848261324391906143f0565b14613283576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161327a906146e5565b60405180910390fd5b809150505b92915050565b60006132d083836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f0000000000008152506132d8565b905092915050565b6000808311829061331f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016133169190613427565b60405180910390fd5b506000838561332e91906143f0565b9050809150509392505050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006133668261333b565b9050919050565b6133768161335b565b82525050565b6000602082019050613391600083018461336d565b92915050565b600081519050919050565b600082825260208201905092915050565b60005b838110156133d15780820151818401526020810190506133b6565b60008484015250505050565b6000601f19601f8301169050919050565b60006133f982613397565b61340381856133a2565b93506134138185602086016133b3565b61341c816133dd565b840191505092915050565b6000602082019050818103600083015261344181846133ee565b905092915050565b600080fd5b600080fd5b61345c8161335b565b811461346757600080fd5b50565b60008135905061347981613453565b92915050565b6000819050919050565b6134928161347f565b811461349d57600080fd5b50565b6000813590506134af81613489565b92915050565b600080604083850312156134cc576134cb613449565b5b60006134da8582860161346a565b92505060206134eb858286016134a0565b9150509250929050565b60008115159050919050565b61350a816134f5565b82525050565b60006020820190506135256000830184613501565b92915050565b6135348161347f565b82525050565b600060208201905061354f600083018461352b565b92915050565b60006020828403121561356b5761356a613449565b5b60006135798482850161346a565b91505092915050565b6000819050919050565b60006135a76135a261359d8461333b565b613582565b61333b565b9050919050565b60006135b98261358c565b9050919050565b60006135cb826135ae565b9050919050565b6135db816135c0565b82525050565b60006020820190506135f660008301846135d2565b92915050565b60008060006060848603121561361557613614613449565b5b60006136238682870161346a565b93505060206136348682870161346a565b9250506040613645868287016134a0565b9150509250925092565b600060ff82169050919050565b6136658161364f565b82525050565b6000602082019050613680600083018461365c565b92915050565b60006020828403121561369c5761369b613449565b5b60006136aa848285016134a0565b91505092915050565b6136bc816134f5565b81146136c757600080fd5b50565b6000813590506136d9816136b3565b92915050565b600080604083850312156136f6576136f5613449565b5b60006137048582860161346a565b9250506020613715858286016136ca565b9150509250929050565b600080fd5b600080fd5b600080fd5b60008083601f8401126137445761374361371f565b5b8235905067ffffffffffffffff81111561376157613760613724565b5b60208301915083602082028301111561377d5761377c613729565b5b9250929050565b60008060006040848603121561379d5761379c613449565b5b600084013567ffffffffffffffff8111156137bb576137ba61344e565b5b6137c78682870161372e565b935093505060206137da868287016136ca565b9150509250925092565b600080604083850312156137fb576137fa613449565b5b60006138098582860161346a565b925050602061381a8582860161346a565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168061386b57607f821691505b60208210810361387e5761387d613824565b5b50919050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206160008201527f6c6c6f77616e6365000000000000000000000000000000000000000000000000602082015250565b60006138e06028836133a2565b91506138eb82613884565b604082019050919050565b6000602082019050818103600083015261390f816138d3565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60006139508261347f565b915061395b8361347f565b925082820190508082111561397357613972613916565b5b92915050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b60006139af6020836133a2565b91506139ba82613979565b602082019050919050565b600060208201905081810360008301526139de816139a2565b9050919050565b7f4d757374206b6565702066656573206174203525206f72206c65737300000000600082015250565b6000613a1b601c836133a2565b9150613a26826139e5565b602082019050919050565b60006020820190508181036000830152613a4a81613a0e565b9050919050565b600081905092915050565b50565b6000613a6c600083613a51565b9150613a7782613a5c565b600082019050919050565b6000613a8d82613a5f565b9150819050919050565b7f6661696c656420746f2077697468647261770000000000000000000000000000600082015250565b6000613acd6012836133a2565b9150613ad882613a97565b602082019050919050565b60006020820190508181036000830152613afc81613ac0565b9050919050565b7f43616e6e6f742072652d656e61626c652074726164696e670000000000000000600082015250565b6000613b396018836133a2565b9150613b4482613b03565b602082019050919050565b60006020820190508181036000830152613b6881613b2c565b9050919050565b7f54686520556e697377617020706169722063616e6e6f742062652072656d6f7660008201527f65642066726f6d206175746f6d617465644d61726b65744d616b65725061697260208201527f7300000000000000000000000000000000000000000000000000000000000000604082015250565b6000613bf16041836133a2565b9150613bfc82613b6f565b606082019050919050565b60006020820190508181036000830152613c2081613be4565b9050919050565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760008201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b6000613c836025836133a2565b9150613c8e82613c27565b604082019050919050565b60006020820190508181036000830152613cb281613c76565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6000613cf38261347f565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203613d2557613d24613916565b5b600182019050919050565b600082825260208201905092915050565b6000819050919050565b613d548161335b565b82525050565b6000613d668383613d4b565b60208301905092915050565b6000613d81602084018461346a565b905092915050565b6000602082019050919050565b6000613da28385613d30565b9350613dad82613d41565b8060005b85811015613de657613dc38284613d72565b613dcd8882613d5a565b9750613dd883613d89565b925050600181019050613db1565b5085925050509392505050565b60006040820190508181036000830152613e0e818587613d96565b9050613e1d6020830184613501565b949350505050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000613e816026836133a2565b9150613e8c82613e25565b604082019050919050565b60006020820190508181036000830152613eb081613e74565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b6000613f136024836133a2565b9150613f1e82613eb7565b604082019050919050565b60006020820190508181036000830152613f4281613f06565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b6000613fa56022836133a2565b9150613fb082613f49565b604082019050919050565b60006020820190508181036000830152613fd481613f98565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b60006140376025836133a2565b915061404282613fdb565b604082019050919050565b600060208201905081810360008301526140668161402a565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b60006140c96023836133a2565b91506140d48261406d565b604082019050919050565b600060208201905081810360008301526140f8816140bc565b9050919050565b7f54726164696e67206973206e6f7420616374697665207965742e000000000000600082015250565b6000614135601a836133a2565b9150614140826140ff565b602082019050919050565b6000602082019050818103600083015261416481614128565b9050919050565b7f54726164696e67206973206e6f74206163746976652e00000000000000000000600082015250565b60006141a16016836133a2565b91506141ac8261416b565b602082019050919050565b600060208201905081810360008301526141d081614194565b9050919050565b7f427579207472616e7366657220616d6f756e742065786365656473207468652060008201527f6d61785472616e73616374696f6e416d6f756e742e0000000000000000000000602082015250565b60006142336035836133a2565b915061423e826141d7565b604082019050919050565b6000602082019050818103600083015261426281614226565b9050919050565b7f4d61782077616c6c657420657863656564656400000000000000000000000000600082015250565b600061429f6013836133a2565b91506142aa82614269565b602082019050919050565b600060208201905081810360008301526142ce81614292565b9050919050565b7f53656c6c207472616e7366657220616d6f756e7420657863656564732074686560008201527f206d61785472616e73616374696f6e416d6f756e742e00000000000000000000602082015250565b60006143316036836133a2565b915061433c826142d5565b604082019050919050565b6000602082019050818103600083015261436081614324565b9050919050565b60006143728261347f565b915061437d8361347f565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156143b6576143b5613916565b5b828202905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b60006143fb8261347f565b91506144068361347f565b925082614416576144156143c1565b5b828204905092915050565b600061442c8261347f565b91506144378361347f565b925082820390508181111561444f5761444e613916565b5b92915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60008151905061449381613453565b92915050565b6000602082840312156144af576144ae613449565b5b60006144bd84828501614484565b91505092915050565b6000819050919050565b60006144eb6144e66144e1846144c6565b613582565b61347f565b9050919050565b6144fb816144d0565b82525050565b600081519050919050565b6000819050602082019050919050565b6000602082019050919050565b600061453482614501565b61453e8185613d30565b93506145498361450c565b8060005b8381101561457a5781516145618882613d5a565b975061456c8361451c565b92505060018101905061454d565b5085935050505092915050565b600060a08201905061459c600083018861352b565b6145a960208301876144f2565b81810360408301526145bb8186614529565b90506145ca606083018561336d565b6145d7608083018461352b565b9695505050505050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206260008201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b600061463d6026836133a2565b9150614648826145e1565b604082019050919050565b6000602082019050818103600083015261466c81614630565b9050919050565b7f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f60008201527f7700000000000000000000000000000000000000000000000000000000000000602082015250565b60006146cf6021836133a2565b91506146da82614673565b604082019050919050565b600060208201905081810360008301526146fe816146c2565b905091905056fea26469706673582212209331ed2f825c6892a568bbfe98b6f320923a720833e45e5eda448b97f0d0f3b764736f6c63430008100033

Deployed Bytecode Sourcemap

22532:11512:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23112:79;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4349:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5404:210;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22828:39;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23649:63;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22609:51;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4670:108;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23515:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5622:529;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4569:93;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;6159:297;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23480:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22667:38;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23032:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27277:128;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32477:154;;;;;;;;;;;;;:::i;:::-;;23332:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23072:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4786:177;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;14303:148;;;;;;;;;;;;;:::i;:::-;;32866:215;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;33133:121;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26046:175;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;23198:75;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33825:216;;;;;;;;;;;;;:::i;:::-;;13661:79;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4457:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25823:215;;;;;;;;;;;;;:::i;:::-;;23282:41;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26761:314;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;6464:482;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4971:216;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23721:57;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23369:27;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22992:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26229:184;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;26421:332;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;22784:35;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23443:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5195:201;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22744:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23405:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32639:219;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;22913:37;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;14606:281;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;23557:24;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23112:79;23149:42;23112:79;:::o;4349:100::-;4403:13;4436:5;4429:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4349:100;:::o;5404:210::-;5523:4;5545:39;5554:12;:10;:12::i;:::-;5568:7;5577:6;5545:8;:39::i;:::-;5602:4;5595:11;;5404:210;;;;:::o;22828:39::-;;;;:::o;23649:63::-;;;;;;;;;;;;;;;;;;;;;;:::o;22609:51::-;;;:::o;4670:108::-;4731:7;4758:12;;4751:19;;4670:108;:::o;23515:33::-;;;;:::o;5622:529::-;5762:4;5779:36;5789:6;5797:9;5808:6;5779:9;:36::i;:::-;5828:24;5855:11;:19;5867:6;5855:19;;;;;;;;;;;;;;;:33;5875:12;:10;:12::i;:::-;5855:33;;;;;;;;;;;;;;;;5828:60;;5941:6;5921:16;:26;;5899:116;;;;;;;;;;;;:::i;:::-;;;;;;;;;6051:57;6060:6;6068:12;:10;:12::i;:::-;6101:6;6082:16;:25;6051:8;:57::i;:::-;6139:4;6132:11;;;5622:529;;;;;:::o;4569:93::-;4627:5;4652:2;4645:9;;4569:93;:::o;6159:297::-;6274:4;6296:130;6319:12;:10;:12::i;:::-;6346:7;6405:10;6368:11;:25;6380:12;:10;:12::i;:::-;6368:25;;;;;;;;;;;;;;;:34;6394:7;6368:34;;;;;;;;;;;;;;;;:47;;;;:::i;:::-;6296:8;:130::i;:::-;6444:4;6437:11;;6159:297;;;;:::o;23480:28::-;;;;:::o;22667:38::-;;;:::o;23032:33::-;;;;;;;;;;;;;:::o;27277:128::-;27345:4;27369:19;:28;27389:7;27369:28;;;;;;;;;;;;;;;;;;;;;;;;;27362:35;;27277:128;;;:::o;32477:154::-;13883:12;:10;:12::i;:::-;13873:22;;:6;;;;;;;;;;;:22;;;13865:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;32529:23:::1;32555:24;32573:4;32555:9;:24::i;:::-;32529:50;;32590:33;32607:15;32590:16;:33::i;:::-;32518:113;32477:154::o:0;23332:30::-;;;;:::o;23072:31::-;;;;;;;;;;;;;:::o;4786:177::-;4905:7;4937:9;:18;4947:7;4937:18;;;;;;;;;;;;;;;;4930:25;;4786:177;;;:::o;14303:148::-;13883:12;:10;:12::i;:::-;13873:22;;:6;;;;;;;;;;;:22;;;13865:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;14410:1:::1;14373:40;;14394:6;;;;;;;;;;;14373:40;;;;;;;;;;;;14441:1;14424:6;;:19;;;;;;;;;;;;;;;;;;14303:148::o:0;32866:215::-;13883:12;:10;:12::i;:::-;13873:22;;:6;;;;;;;;;;;:22;;;13865:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;32954:7:::1;32936:15;:25;;;;32987:15;;32972:12;:30;;;;33038:2;33021:13;;:19;;33013:60;;;;;;;;;;;;:::i;:::-;;;;;;;;;32866:215:::0;:::o;33133:121::-;33185:4;13883:12;:10;:12::i;:::-;13873:22;;:6;;;;;;;;;;;:22;;;13865:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;33219:5:::1;33202:14;;:22;;;;;;;;;;;;;;;;;;33242:4;33235:11;;33133:121:::0;:::o;26046:175::-;13883:12;:10;:12::i;:::-;13873:22;;:6;;;;;;;;;;;:22;;;13865:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;26204:9:::1;26163:31;:38;26195:5;26163:38;;;;;;;;;;;;;;;;:50;;;;;;;;;;;;;;;;;;26046:175:::0;;:::o;23198:75::-;;;;;;;;;;;;;:::o;33825:216::-;13883:12;:10;:12::i;:::-;13873:22;;:6;;;;;;;;;;;:22;;;13865:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;33884:12:::1;33910:10;33902:24;;33948:21;33902:82;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;33883:101;;;34003:7;33995:38;;;;;;;;;;;;:::i;:::-;;;;;;;;;33872:169;33825:216::o:0;13661:79::-;13699:7;13726:6;;;;;;;;;;;13719:13;;13661:79;:::o;4457:104::-;4513:13;4546:7;4539:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4457:104;:::o;25823:215::-;13883:12;:10;:12::i;:::-;13873:22;;:6;;;;;;;;;;;:22;;;13865:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;25884:13:::1;;;;;;;;;;;25883:14;25875:51;;;;;;;;;;;;:::i;:::-;;;;;;;;;25953:4;25937:13;;:20;;;;;;;;;;;;;;;;;;25982:4;25968:11;;:18;;;;;;;;;;;;;;;;;;26018:12;25997:18;:33;;;;25823:215::o:0;23282:41::-;23319:4;23282:41;:::o;26761:314::-;13883:12;:10;:12::i;:::-;13873:22;;:6;;;;;;;;;;;:22;;;13865:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;26907:13:::1;26899:21;;:4;:21;;::::0;26877:136:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;27026:41;27055:4;27061:5;27026:28;:41::i;:::-;26761:314:::0;;:::o;6464:482::-;6584:4;6606:24;6633:11;:25;6645:12;:10;:12::i;:::-;6633:25;;;;;;;;;;;;;;;:34;6659:7;6633:34;;;;;;;;;;;;;;;;6606:61;;6720:15;6700:16;:35;;6678:122;;;;;;;;;;;;:::i;:::-;;;;;;;;;6836:67;6845:12;:10;:12::i;:::-;6859:7;6887:15;6868:16;:34;6836:8;:67::i;:::-;6934:4;6927:11;;;6464:482;;;;:::o;4971:216::-;5093:4;5115:42;5125:12;:10;:12::i;:::-;5139:9;5150:6;5115:9;:42::i;:::-;5175:4;5168:11;;4971:216;;;;:::o;23721:57::-;;;;;;;;;;;;;;;;;;;;;;:::o;23369:27::-;;;;:::o;22992:33::-;;;;;;;;;;;;;:::o;26229:184::-;13883:12;:10;:12::i;:::-;13873:22;;:6;;;;;;;;;;;:22;;;13865:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;26345:8:::1;26314:19;:28;26334:7;26314:28;;;;;;;;;;;;;;;;:39;;;;;;;;;;;;;;;;;;26387:7;26371:34;;;26396:8;26371:34;;;;;;:::i;:::-;;;;;;;;26229:184:::0;;:::o;26421:332::-;13883:12;:10;:12::i;:::-;13873:22;;:6;;;;;;;;;;;:22;;;13865:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;26566:9:::1;26561:116;26585:8;;:15;;26581:1;:19;26561:116;;;26657:8;26622:19;:32;26642:8;;26651:1;26642:11;;;;;;;:::i;:::-;;;;;;;;;;;;;;;:::i;:::-;26622:32;;;;;;;;;;;;;;;;:43;;;;;;;;;;;;;;;;;;26602:3;;;;;:::i;:::-;;;;26561:116;;;;26694:51;26726:8;;26736;26694:51;;;;;;;;:::i;:::-;;;;;;;;26421:332:::0;;;:::o;22784:35::-;;;;:::o;23443:28::-;;;;:::o;5195:201::-;5329:7;5361:11;:18;5373:5;5361:18;;;;;;;;;;;;;;;:27;5380:7;5361:27;;;;;;;;;;;;;;;;5354:34;;5195:201;;;;:::o;22744:33::-;;;;:::o;23405:31::-;;;;:::o;32639:219::-;13883:12;:10;:12::i;:::-;13873:22;;:6;;;;;;;;;;;:22;;;13865:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;32729:7:::1;32710:16;:26;;;;32763:16;;32747:13;:32;;;;32815:2;32798:13;;:19;;32790:60;;;;;;;;;;;;:::i;:::-;;;;;;;;;32639:219:::0;:::o;22913:37::-;;;;:::o;14606:281::-;13883:12;:10;:12::i;:::-;13873:22;;:6;;;;;;;;;;;:22;;;13865:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;14729:1:::1;14709:22;;:8;:22;;::::0;14687:110:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;14842:8;14813:38;;14834:6;;;;;;;;;;;14813:38;;;;;;;;;;;;14871:8;14862:6;;:17;;;;;;;;;;;;;;;;;;14606:281:::0;:::o;23557:24::-;;;;:::o;262:98::-;315:7;342:10;335:17;;262:98;:::o;7933:380::-;8086:1;8069:19;;:5;:19;;;8061:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;8167:1;8148:21;;:7;:21;;;8140:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;8251:6;8221:11;:18;8233:5;8221:18;;;;;;;;;;;;;;;:27;8240:7;8221:27;;;;;;;;;;;;;;;:36;;;;8289:7;8273:32;;8282:5;8273:32;;;8298:6;8273:32;;;;;;:::i;:::-;;;;;;;;7933:380;;;:::o;27413:3930::-;27561:1;27545:18;;:4;:18;;;27537:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;27638:1;27624:16;;:2;:16;;;27616:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;27707:1;27697:6;:11;27693:93;;27725:28;27741:4;27747:2;27751:1;27725:15;:28::i;:::-;27768:7;;27693:93;27803:13;;;;;;;;;;;27798:187;;27859:19;:25;27879:4;27859:25;;;;;;;;;;;;;;;;;;;;;;;;;:52;;;;27888:19;:23;27908:2;27888:23;;;;;;;;;;;;;;;;;;;;;;;;;27859:52;27833:140;;;;;;;;;;;;:::i;:::-;;;;;;;;;27798:187;28001:14;;;;;;;;;;;27997:1716;;;28062:7;:5;:7::i;:::-;28054:15;;:4;:15;;;;:49;;;;;28096:7;:5;:7::i;:::-;28090:13;;:2;:13;;;;28054:49;:86;;;;;28138:1;28124:16;;:2;:16;;;;28054:86;:128;;;;;28175:6;28161:21;;:2;:21;;;;28054:128;:158;;;;;28204:8;;;;;;;;;;;28203:9;28054:158;28032:1670;;;28252:13;;;;;;;;;;;28247:223;;28324:19;:25;28344:4;28324:25;;;;;;;;;;;;;;;;;;;;;;;;;:52;;;;28353:19;:23;28373:2;28353:23;;;;;;;;;;;;;;;;;;;;;;;;;28324:52;28290:160;;;;;;;;;;;;:::i;:::-;;;;;;;;;28247:223;28544:25;:31;28570:4;28544:31;;;;;;;;;;;;;;;;;;;;;;;;;:92;;;;;28601:31;:35;28633:2;28601:35;;;;;;;;;;;;;;;;;;;;;;;;;28600:36;28544:92;28518:1169;;;28746:8;28723:20;;:31;;;;:::i;:::-;28713:6;:41;;28679:180;;;;;;;;;;;;:::i;:::-;;;;;;;;;28942:9;;28925:13;28935:2;28925:9;:13::i;:::-;28916:6;:22;;;;:::i;:::-;:35;;28882:140;;;;;;;;;;;;:::i;:::-;;;;;;;;;28518:1169;;;29120:25;:29;29146:2;29120:29;;;;;;;;;;;;;;;;;;;;;;;;;:92;;;;;29175:31;:37;29207:4;29175:37;;;;;;;;;;;;;;;;;;;;;;;;;29174:38;29120:92;29094:593;;;29322:8;29299:20;;:31;;;;:::i;:::-;29289:6;:41;;29255:181;;;;;;;;;;;;:::i;:::-;;;;;;;;;29094:593;;;29467:31;:35;29499:2;29467:35;;;;;;;;;;;;;;;;;;;;;;;;;29462:225;;29587:9;;29570:13;29580:2;29570:9;:13::i;:::-;29561:6;:22;;;;:::i;:::-;:35;;29527:140;;;;;;;;;;;;:::i;:::-;;;;;;;;;29462:225;29094:593;28518:1169;28032:1670;27997:1716;29725:28;29756:24;29774:4;29756:9;:24::i;:::-;29725:55;;29791:12;29830:18;;29806:20;:42;;29791:57;;29879:7;:35;;;;;29903:11;;;;;;;;;;;29879:35;:61;;;;;29932:8;;;;;;;;;;;29931:9;29879:61;:110;;;;;29958:25;:31;29984:4;29958:31;;;;;;;;;;;;;;;;;;;;;;;;;29957:32;29879:110;:153;;;;;30007:19;:25;30027:4;30007:25;;;;;;;;;;;;;;;;;;;;;;;;;30006:26;29879:153;:194;;;;;30050:19;:23;30070:2;30050:23;;;;;;;;;;;;;;;;;;;;;;;;;30049:24;29879:194;29861:322;;;30111:4;30100:8;;:15;;;;;;;;;;;;;;;;;;30130:10;:8;:10::i;:::-;30166:5;30155:8;;:16;;;;;;;;;;;;;;;;;;29861:322;30195:12;30211:8;;;;;;;;;;;30210:9;30195:24;;30321:19;:25;30341:4;30321:25;;;;;;;;;;;;;;;;;;;;;;;;;:52;;;;30350:19;:23;30370:2;30350:23;;;;;;;;;;;;;;;;;;;;;;;;;30321:52;30317:100;;;30400:5;30390:15;;30317:100;30429:12;30513:7;30509:781;;;30603:25;:29;30629:2;30603:29;;;;;;;;;;;;;;;;;;;;;;;;;:50;;;;;30652:1;30636:13;;:17;30603:50;30599:542;;;30681:41;23319:4;30681:25;30692:13;;30681:6;:10;;:25;;;;:::i;:::-;:29;;:41;;;;:::i;:::-;30674:48;;30758:4;30741:13;;:21;;;;;;;:::i;:::-;;;;;;;;30831:13;;30811:16;;30804:4;:23;;;;:::i;:::-;30803:41;;;;:::i;:::-;30781:18;;:63;;;;;;;:::i;:::-;;;;;;;;30599:542;;;30906:25;:31;30932:4;30906:31;;;;;;;;;;;;;;;;;;;;;;;;;30902:239;;;30965:40;23319:4;30965:24;30976:12;;30965:6;:10;;:24;;;;:::i;:::-;:28;;:40;;;;:::i;:::-;30958:47;;31041:4;31024:13;;:21;;;;;;;:::i;:::-;;;;;;;;31113:12;;31094:15;;31087:4;:22;;;;:::i;:::-;31086:39;;;;:::i;:::-;31064:18;;:61;;;;;;;:::i;:::-;;;;;;;;30902:239;30599:542;31168:1;31161:4;:8;31157:91;;;31190:42;31206:4;31220;31227;31190:15;:42::i;:::-;31157:91;31274:4;31264:14;;;;;:::i;:::-;;;30509:781;31302:33;31318:4;31324:2;31328:6;31302:15;:33::i;:::-;27526:3817;;;;27413:3930;;;;:::o;31351:589::-;31477:21;31515:1;31501:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;31477:40;;31546:4;31528;31533:1;31528:7;;;;;;;;:::i;:::-;;;;;;;:23;;;;;;;;;;;31572:15;:20;;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;31562:4;31567:1;31562:7;;;;;;;;:::i;:::-;;;;;;;:32;;;;;;;;;;;31607:62;31624:4;31639:15;31657:11;31607:8;:62::i;:::-;31708:15;:66;;;31789:11;31815:1;31859:4;31886;31906:15;31708:224;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;31406:534;31351:589;:::o;27083:186::-;27200:5;27166:25;:31;27192:4;27166:31;;;;;;;;;;;;;;;;:39;;;;;;;;;;;;;;;;;;27255:5;27221:40;;27249:4;27221:40;;;;;;;;;;;;27083:186;;:::o;6954:651::-;7112:1;7094:20;;:6;:20;;;7086:70;;;;;;;;;;;;:::i;:::-;;;;;;;;;7196:1;7175:23;;:9;:23;;;7167:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;7251:21;7275:9;:17;7285:6;7275:17;;;;;;;;;;;;;;;;7251:41;;7342:6;7325:13;:23;;7303:111;;;;;;;;;;;;:::i;:::-;;;;;;;;;7486:6;7470:13;:22;7450:9;:17;7460:6;7450:17;;;;;;;;;;;;;;;:42;;;;7538:6;7514:9;:20;7524:9;7514:20;;;;;;;;;;;;;;;;:30;;;;;;;:::i;:::-;;;;;;;;7579:9;7562:35;;7571:6;7562:35;;;7590:6;7562:35;;;;;;:::i;:::-;;;;;;;;7075:530;6954:651;;;:::o;33262:555::-;33301:23;33327:24;33345:4;33327:9;:24::i;:::-;33301:50;;33362:25;33390:18;;33362:46;;33419:12;33467:1;33448:15;:20;:46;;;;33493:1;33472:17;:22;33448:46;33444:85;;;33511:7;;;;;33444:85;33541:26;33570:15;33541:44;;33596:36;33613:18;33596:16;:36::i;:::-;33667:15;;;;;;;;;;;33659:29;;33710:21;33659:87;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;33645:101;;;;;33780:1;33759:18;:22;;;;33808:1;33792:13;:17;;;;33290:527;;;;33262:555;:::o;9971:471::-;10029:7;10279:1;10274;:6;10270:47;;10304:1;10297:8;;;;10270:47;10329:9;10345:1;10341;:5;;;;:::i;:::-;10329:17;;10374:1;10369;10365;:5;;;;:::i;:::-;:10;10357:56;;;;;;;;;;;;:::i;:::-;;;;;;;;;10433:1;10426:8;;;9971:471;;;;;:::o;10918:132::-;10976:7;11003:39;11007:1;11010;11003:39;;;;;;;;;;;;;;;;;:3;:39::i;:::-;10996:46;;10918:132;;;;:::o;11546:312::-;11666:7;11698:1;11694;:5;11701:12;11686:28;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;11725:9;11741:1;11737;:5;;;;:::i;:::-;11725:17;;11849:1;11842:8;;;11546:312;;;;;:::o;7:126:1:-;44:7;84:42;77:5;73:54;62:65;;7:126;;;:::o;139:96::-;176:7;205:24;223:5;205:24;:::i;:::-;194:35;;139:96;;;:::o;241:118::-;328:24;346:5;328:24;:::i;:::-;323:3;316:37;241:118;;:::o;365:222::-;458:4;496:2;485:9;481:18;473:26;;509:71;577:1;566:9;562:17;553:6;509:71;:::i;:::-;365:222;;;;:::o;593:99::-;645:6;679:5;673:12;663:22;;593:99;;;:::o;698:169::-;782:11;816:6;811:3;804:19;856:4;851:3;847:14;832:29;;698:169;;;;:::o;873:246::-;954:1;964:113;978:6;975:1;972:13;964:113;;;1063:1;1058:3;1054:11;1048:18;1044:1;1039:3;1035:11;1028:39;1000:2;997:1;993:10;988:15;;964:113;;;1111:1;1102:6;1097:3;1093:16;1086:27;935:184;873:246;;;:::o;1125:102::-;1166:6;1217:2;1213:7;1208:2;1201:5;1197:14;1193:28;1183:38;;1125:102;;;:::o;1233:377::-;1321:3;1349:39;1382:5;1349:39;:::i;:::-;1404:71;1468:6;1463:3;1404:71;:::i;:::-;1397:78;;1484:65;1542:6;1537:3;1530:4;1523:5;1519:16;1484:65;:::i;:::-;1574:29;1596:6;1574:29;:::i;:::-;1569:3;1565:39;1558:46;;1325:285;1233:377;;;;:::o;1616:313::-;1729:4;1767:2;1756:9;1752:18;1744:26;;1816:9;1810:4;1806:20;1802:1;1791:9;1787:17;1780:47;1844:78;1917:4;1908:6;1844:78;:::i;:::-;1836:86;;1616:313;;;;:::o;2016:117::-;2125:1;2122;2115:12;2139:117;2248:1;2245;2238:12;2262:122;2335:24;2353:5;2335:24;:::i;:::-;2328:5;2325:35;2315:63;;2374:1;2371;2364:12;2315:63;2262:122;:::o;2390:139::-;2436:5;2474:6;2461:20;2452:29;;2490:33;2517:5;2490:33;:::i;:::-;2390:139;;;;:::o;2535:77::-;2572:7;2601:5;2590:16;;2535:77;;;:::o;2618:122::-;2691:24;2709:5;2691:24;:::i;:::-;2684:5;2681:35;2671:63;;2730:1;2727;2720:12;2671:63;2618:122;:::o;2746:139::-;2792:5;2830:6;2817:20;2808:29;;2846:33;2873:5;2846:33;:::i;:::-;2746:139;;;;:::o;2891:474::-;2959:6;2967;3016:2;3004:9;2995:7;2991:23;2987:32;2984:119;;;3022:79;;:::i;:::-;2984:119;3142:1;3167:53;3212:7;3203:6;3192:9;3188:22;3167:53;:::i;:::-;3157:63;;3113:117;3269:2;3295:53;3340:7;3331:6;3320:9;3316:22;3295:53;:::i;:::-;3285:63;;3240:118;2891:474;;;;;:::o;3371:90::-;3405:7;3448:5;3441:13;3434:21;3423:32;;3371:90;;;:::o;3467:109::-;3548:21;3563:5;3548:21;:::i;:::-;3543:3;3536:34;3467:109;;:::o;3582:210::-;3669:4;3707:2;3696:9;3692:18;3684:26;;3720:65;3782:1;3771:9;3767:17;3758:6;3720:65;:::i;:::-;3582:210;;;;:::o;3798:118::-;3885:24;3903:5;3885:24;:::i;:::-;3880:3;3873:37;3798:118;;:::o;3922:222::-;4015:4;4053:2;4042:9;4038:18;4030:26;;4066:71;4134:1;4123:9;4119:17;4110:6;4066:71;:::i;:::-;3922:222;;;;:::o;4150:329::-;4209:6;4258:2;4246:9;4237:7;4233:23;4229:32;4226:119;;;4264:79;;:::i;:::-;4226:119;4384:1;4409:53;4454:7;4445:6;4434:9;4430:22;4409:53;:::i;:::-;4399:63;;4355:117;4150:329;;;;:::o;4485:60::-;4513:3;4534:5;4527:12;;4485:60;;;:::o;4551:142::-;4601:9;4634:53;4652:34;4661:24;4679:5;4661:24;:::i;:::-;4652:34;:::i;:::-;4634:53;:::i;:::-;4621:66;;4551:142;;;:::o;4699:126::-;4749:9;4782:37;4813:5;4782:37;:::i;:::-;4769:50;;4699:126;;;:::o;4831:153::-;4908:9;4941:37;4972:5;4941:37;:::i;:::-;4928:50;;4831:153;;;:::o;4990:185::-;5104:64;5162:5;5104:64;:::i;:::-;5099:3;5092:77;4990:185;;:::o;5181:276::-;5301:4;5339:2;5328:9;5324:18;5316:26;;5352:98;5447:1;5436:9;5432:17;5423:6;5352:98;:::i;:::-;5181:276;;;;:::o;5463:619::-;5540:6;5548;5556;5605:2;5593:9;5584:7;5580:23;5576:32;5573:119;;;5611:79;;:::i;:::-;5573:119;5731:1;5756:53;5801:7;5792:6;5781:9;5777:22;5756:53;:::i;:::-;5746:63;;5702:117;5858:2;5884:53;5929:7;5920:6;5909:9;5905:22;5884:53;:::i;:::-;5874:63;;5829:118;5986:2;6012:53;6057:7;6048:6;6037:9;6033:22;6012:53;:::i;:::-;6002:63;;5957:118;5463:619;;;;;:::o;6088:86::-;6123:7;6163:4;6156:5;6152:16;6141:27;;6088:86;;;:::o;6180:112::-;6263:22;6279:5;6263:22;:::i;:::-;6258:3;6251:35;6180:112;;:::o;6298:214::-;6387:4;6425:2;6414:9;6410:18;6402:26;;6438:67;6502:1;6491:9;6487:17;6478:6;6438:67;:::i;:::-;6298:214;;;;:::o;6518:329::-;6577:6;6626:2;6614:9;6605:7;6601:23;6597:32;6594:119;;;6632:79;;:::i;:::-;6594:119;6752:1;6777:53;6822:7;6813:6;6802:9;6798:22;6777:53;:::i;:::-;6767:63;;6723:117;6518:329;;;;:::o;6853:116::-;6923:21;6938:5;6923:21;:::i;:::-;6916:5;6913:32;6903:60;;6959:1;6956;6949:12;6903:60;6853:116;:::o;6975:133::-;7018:5;7056:6;7043:20;7034:29;;7072:30;7096:5;7072:30;:::i;:::-;6975:133;;;;:::o;7114:468::-;7179:6;7187;7236:2;7224:9;7215:7;7211:23;7207:32;7204:119;;;7242:79;;:::i;:::-;7204:119;7362:1;7387:53;7432:7;7423:6;7412:9;7408:22;7387:53;:::i;:::-;7377:63;;7333:117;7489:2;7515:50;7557:7;7548:6;7537:9;7533:22;7515:50;:::i;:::-;7505:60;;7460:115;7114:468;;;;;:::o;7588:117::-;7697:1;7694;7687:12;7711:117;7820:1;7817;7810:12;7834:117;7943:1;7940;7933:12;7974:568;8047:8;8057:6;8107:3;8100:4;8092:6;8088:17;8084:27;8074:122;;8115:79;;:::i;:::-;8074:122;8228:6;8215:20;8205:30;;8258:18;8250:6;8247:30;8244:117;;;8280:79;;:::i;:::-;8244:117;8394:4;8386:6;8382:17;8370:29;;8448:3;8440:4;8432:6;8428:17;8418:8;8414:32;8411:41;8408:128;;;8455:79;;:::i;:::-;8408:128;7974:568;;;;;:::o;8548:698::-;8640:6;8648;8656;8705:2;8693:9;8684:7;8680:23;8676:32;8673:119;;;8711:79;;:::i;:::-;8673:119;8859:1;8848:9;8844:17;8831:31;8889:18;8881:6;8878:30;8875:117;;;8911:79;;:::i;:::-;8875:117;9024:80;9096:7;9087:6;9076:9;9072:22;9024:80;:::i;:::-;9006:98;;;;8802:312;9153:2;9179:50;9221:7;9212:6;9201:9;9197:22;9179:50;:::i;:::-;9169:60;;9124:115;8548:698;;;;;:::o;9252:474::-;9320:6;9328;9377:2;9365:9;9356:7;9352:23;9348:32;9345:119;;;9383:79;;:::i;:::-;9345:119;9503:1;9528:53;9573:7;9564:6;9553:9;9549:22;9528:53;:::i;:::-;9518:63;;9474:117;9630:2;9656:53;9701:7;9692:6;9681:9;9677:22;9656:53;:::i;:::-;9646:63;;9601:118;9252:474;;;;;:::o;9732:180::-;9780:77;9777:1;9770:88;9877:4;9874:1;9867:15;9901:4;9898:1;9891:15;9918:320;9962:6;9999:1;9993:4;9989:12;9979:22;;10046:1;10040:4;10036:12;10067:18;10057:81;;10123:4;10115:6;10111:17;10101:27;;10057:81;10185:2;10177:6;10174:14;10154:18;10151:38;10148:84;;10204:18;;:::i;:::-;10148:84;9969:269;9918:320;;;:::o;10244:227::-;10384:34;10380:1;10372:6;10368:14;10361:58;10453:10;10448:2;10440:6;10436:15;10429:35;10244:227;:::o;10477:366::-;10619:3;10640:67;10704:2;10699:3;10640:67;:::i;:::-;10633:74;;10716:93;10805:3;10716:93;:::i;:::-;10834:2;10829:3;10825:12;10818:19;;10477:366;;;:::o;10849:419::-;11015:4;11053:2;11042:9;11038:18;11030:26;;11102:9;11096:4;11092:20;11088:1;11077:9;11073:17;11066:47;11130:131;11256:4;11130:131;:::i;:::-;11122:139;;10849:419;;;:::o;11274:180::-;11322:77;11319:1;11312:88;11419:4;11416:1;11409:15;11443:4;11440:1;11433:15;11460:191;11500:3;11519:20;11537:1;11519:20;:::i;:::-;11514:25;;11553:20;11571:1;11553:20;:::i;:::-;11548:25;;11596:1;11593;11589:9;11582:16;;11617:3;11614:1;11611:10;11608:36;;;11624:18;;:::i;:::-;11608:36;11460:191;;;;:::o;11657:182::-;11797:34;11793:1;11785:6;11781:14;11774:58;11657:182;:::o;11845:366::-;11987:3;12008:67;12072:2;12067:3;12008:67;:::i;:::-;12001:74;;12084:93;12173:3;12084:93;:::i;:::-;12202:2;12197:3;12193:12;12186:19;;11845:366;;;:::o;12217:419::-;12383:4;12421:2;12410:9;12406:18;12398:26;;12470:9;12464:4;12460:20;12456:1;12445:9;12441:17;12434:47;12498:131;12624:4;12498:131;:::i;:::-;12490:139;;12217:419;;;:::o;12642:178::-;12782:30;12778:1;12770:6;12766:14;12759:54;12642:178;:::o;12826:366::-;12968:3;12989:67;13053:2;13048:3;12989:67;:::i;:::-;12982:74;;13065:93;13154:3;13065:93;:::i;:::-;13183:2;13178:3;13174:12;13167:19;;12826:366;;;:::o;13198:419::-;13364:4;13402:2;13391:9;13387:18;13379:26;;13451:9;13445:4;13441:20;13437:1;13426:9;13422:17;13415:47;13479:131;13605:4;13479:131;:::i;:::-;13471:139;;13198:419;;;:::o;13623:147::-;13724:11;13761:3;13746:18;;13623:147;;;;:::o;13776:114::-;;:::o;13896:398::-;14055:3;14076:83;14157:1;14152:3;14076:83;:::i;:::-;14069:90;;14168:93;14257:3;14168:93;:::i;:::-;14286:1;14281:3;14277:11;14270:18;;13896:398;;;:::o;14300:379::-;14484:3;14506:147;14649:3;14506:147;:::i;:::-;14499:154;;14670:3;14663:10;;14300:379;;;:::o;14685:168::-;14825:20;14821:1;14813:6;14809:14;14802:44;14685:168;:::o;14859:366::-;15001:3;15022:67;15086:2;15081:3;15022:67;:::i;:::-;15015:74;;15098:93;15187:3;15098:93;:::i;:::-;15216:2;15211:3;15207:12;15200:19;;14859:366;;;:::o;15231:419::-;15397:4;15435:2;15424:9;15420:18;15412:26;;15484:9;15478:4;15474:20;15470:1;15459:9;15455:17;15448:47;15512:131;15638:4;15512:131;:::i;:::-;15504:139;;15231:419;;;:::o;15656:174::-;15796:26;15792:1;15784:6;15780:14;15773:50;15656:174;:::o;15836:366::-;15978:3;15999:67;16063:2;16058:3;15999:67;:::i;:::-;15992:74;;16075:93;16164:3;16075:93;:::i;:::-;16193:2;16188:3;16184:12;16177:19;;15836:366;;;:::o;16208:419::-;16374:4;16412:2;16401:9;16397:18;16389:26;;16461:9;16455:4;16451:20;16447:1;16436:9;16432:17;16425:47;16489:131;16615:4;16489:131;:::i;:::-;16481:139;;16208:419;;;:::o;16633:289::-;16773:34;16769:1;16761:6;16757:14;16750:58;16842:34;16837:2;16829:6;16825:15;16818:59;16911:3;16906:2;16898:6;16894:15;16887:28;16633:289;:::o;16928:366::-;17070:3;17091:67;17155:2;17150:3;17091:67;:::i;:::-;17084:74;;17167:93;17256:3;17167:93;:::i;:::-;17285:2;17280:3;17276:12;17269:19;;16928:366;;;:::o;17300:419::-;17466:4;17504:2;17493:9;17489:18;17481:26;;17553:9;17547:4;17543:20;17539:1;17528:9;17524:17;17517:47;17581:131;17707:4;17581:131;:::i;:::-;17573:139;;17300:419;;;:::o;17725:224::-;17865:34;17861:1;17853:6;17849:14;17842:58;17934:7;17929:2;17921:6;17917:15;17910:32;17725:224;:::o;17955:366::-;18097:3;18118:67;18182:2;18177:3;18118:67;:::i;:::-;18111:74;;18194:93;18283:3;18194:93;:::i;:::-;18312:2;18307:3;18303:12;18296:19;;17955:366;;;:::o;18327:419::-;18493:4;18531:2;18520:9;18516:18;18508:26;;18580:9;18574:4;18570:20;18566:1;18555:9;18551:17;18544:47;18608:131;18734:4;18608:131;:::i;:::-;18600:139;;18327:419;;;:::o;18752:180::-;18800:77;18797:1;18790:88;18897:4;18894:1;18887:15;18921:4;18918:1;18911:15;18938:233;18977:3;19000:24;19018:5;19000:24;:::i;:::-;18991:33;;19046:66;19039:5;19036:77;19033:103;;19116:18;;:::i;:::-;19033:103;19163:1;19156:5;19152:13;19145:20;;18938:233;;;:::o;19177:184::-;19276:11;19310:6;19305:3;19298:19;19350:4;19345:3;19341:14;19326:29;;19177:184;;;;:::o;19367:102::-;19436:4;19459:3;19451:11;;19367:102;;;:::o;19475:108::-;19552:24;19570:5;19552:24;:::i;:::-;19547:3;19540:37;19475:108;;:::o;19589:179::-;19658:10;19679:46;19721:3;19713:6;19679:46;:::i;:::-;19757:4;19752:3;19748:14;19734:28;;19589:179;;;;:::o;19774:122::-;19826:5;19851:39;19886:2;19881:3;19877:12;19872:3;19851:39;:::i;:::-;19842:48;;19774:122;;;;:::o;19902:115::-;19974:4;20006;20001:3;19997:14;19989:22;;19902:115;;;:::o;20053:699::-;20182:3;20205:86;20284:6;20279:3;20205:86;:::i;:::-;20198:93;;20315:58;20367:5;20315:58;:::i;:::-;20396:7;20427:1;20412:315;20437:6;20434:1;20431:13;20412:315;;;20507:42;20542:6;20533:7;20507:42;:::i;:::-;20569:63;20628:3;20613:13;20569:63;:::i;:::-;20562:70;;20655:62;20710:6;20655:62;:::i;:::-;20645:72;;20472:255;20459:1;20456;20452:9;20447:14;;20412:315;;;20416:14;20743:3;20736:10;;20187:565;;20053:699;;;;;:::o;20758:491::-;20933:4;20971:2;20960:9;20956:18;20948:26;;21020:9;21014:4;21010:20;21006:1;20995:9;20991:17;20984:47;21048:118;21161:4;21152:6;21144;21048:118;:::i;:::-;21040:126;;21176:66;21238:2;21227:9;21223:18;21214:6;21176:66;:::i;:::-;20758:491;;;;;;:::o;21255:225::-;21395:34;21391:1;21383:6;21379:14;21372:58;21464:8;21459:2;21451:6;21447:15;21440:33;21255:225;:::o;21486:366::-;21628:3;21649:67;21713:2;21708:3;21649:67;:::i;:::-;21642:74;;21725:93;21814:3;21725:93;:::i;:::-;21843:2;21838:3;21834:12;21827:19;;21486:366;;;:::o;21858:419::-;22024:4;22062:2;22051:9;22047:18;22039:26;;22111:9;22105:4;22101:20;22097:1;22086:9;22082:17;22075:47;22139:131;22265:4;22139:131;:::i;:::-;22131:139;;21858:419;;;:::o;22283:223::-;22423:34;22419:1;22411:6;22407:14;22400:58;22492:6;22487:2;22479:6;22475:15;22468:31;22283:223;:::o;22512:366::-;22654:3;22675:67;22739:2;22734:3;22675:67;:::i;:::-;22668:74;;22751:93;22840:3;22751:93;:::i;:::-;22869:2;22864:3;22860:12;22853:19;;22512:366;;;:::o;22884:419::-;23050:4;23088:2;23077:9;23073:18;23065:26;;23137:9;23131:4;23127:20;23123:1;23112:9;23108:17;23101:47;23165:131;23291:4;23165:131;:::i;:::-;23157:139;;22884:419;;;:::o;23309:221::-;23449:34;23445:1;23437:6;23433:14;23426:58;23518:4;23513:2;23505:6;23501:15;23494:29;23309:221;:::o;23536:366::-;23678:3;23699:67;23763:2;23758:3;23699:67;:::i;:::-;23692:74;;23775:93;23864:3;23775:93;:::i;:::-;23893:2;23888:3;23884:12;23877:19;;23536:366;;;:::o;23908:419::-;24074:4;24112:2;24101:9;24097:18;24089:26;;24161:9;24155:4;24151:20;24147:1;24136:9;24132:17;24125:47;24189:131;24315:4;24189:131;:::i;:::-;24181:139;;23908:419;;;:::o;24333:224::-;24473:34;24469:1;24461:6;24457:14;24450:58;24542:7;24537:2;24529:6;24525:15;24518:32;24333:224;:::o;24563:366::-;24705:3;24726:67;24790:2;24785:3;24726:67;:::i;:::-;24719:74;;24802:93;24891:3;24802:93;:::i;:::-;24920:2;24915:3;24911:12;24904:19;;24563:366;;;:::o;24935:419::-;25101:4;25139:2;25128:9;25124:18;25116:26;;25188:9;25182:4;25178:20;25174:1;25163:9;25159:17;25152:47;25216:131;25342:4;25216:131;:::i;:::-;25208:139;;24935:419;;;:::o;25360:222::-;25500:34;25496:1;25488:6;25484:14;25477:58;25569:5;25564:2;25556:6;25552:15;25545:30;25360:222;:::o;25588:366::-;25730:3;25751:67;25815:2;25810:3;25751:67;:::i;:::-;25744:74;;25827:93;25916:3;25827:93;:::i;:::-;25945:2;25940:3;25936:12;25929:19;;25588:366;;;:::o;25960:419::-;26126:4;26164:2;26153:9;26149:18;26141:26;;26213:9;26207:4;26203:20;26199:1;26188:9;26184:17;26177:47;26241:131;26367:4;26241:131;:::i;:::-;26233:139;;25960:419;;;:::o;26385:176::-;26525:28;26521:1;26513:6;26509:14;26502:52;26385:176;:::o;26567:366::-;26709:3;26730:67;26794:2;26789:3;26730:67;:::i;:::-;26723:74;;26806:93;26895:3;26806:93;:::i;:::-;26924:2;26919:3;26915:12;26908:19;;26567:366;;;:::o;26939:419::-;27105:4;27143:2;27132:9;27128:18;27120:26;;27192:9;27186:4;27182:20;27178:1;27167:9;27163:17;27156:47;27220:131;27346:4;27220:131;:::i;:::-;27212:139;;26939:419;;;:::o;27364:172::-;27504:24;27500:1;27492:6;27488:14;27481:48;27364:172;:::o;27542:366::-;27684:3;27705:67;27769:2;27764:3;27705:67;:::i;:::-;27698:74;;27781:93;27870:3;27781:93;:::i;:::-;27899:2;27894:3;27890:12;27883:19;;27542:366;;;:::o;27914:419::-;28080:4;28118:2;28107:9;28103:18;28095:26;;28167:9;28161:4;28157:20;28153:1;28142:9;28138:17;28131:47;28195:131;28321:4;28195:131;:::i;:::-;28187:139;;27914:419;;;:::o;28339:240::-;28479:34;28475:1;28467:6;28463:14;28456:58;28548:23;28543:2;28535:6;28531:15;28524:48;28339:240;:::o;28585:366::-;28727:3;28748:67;28812:2;28807:3;28748:67;:::i;:::-;28741:74;;28824:93;28913:3;28824:93;:::i;:::-;28942:2;28937:3;28933:12;28926:19;;28585:366;;;:::o;28957:419::-;29123:4;29161:2;29150:9;29146:18;29138:26;;29210:9;29204:4;29200:20;29196:1;29185:9;29181:17;29174:47;29238:131;29364:4;29238:131;:::i;:::-;29230:139;;28957:419;;;:::o;29382:169::-;29522:21;29518:1;29510:6;29506:14;29499:45;29382:169;:::o;29557:366::-;29699:3;29720:67;29784:2;29779:3;29720:67;:::i;:::-;29713:74;;29796:93;29885:3;29796:93;:::i;:::-;29914:2;29909:3;29905:12;29898:19;;29557:366;;;:::o;29929:419::-;30095:4;30133:2;30122:9;30118:18;30110:26;;30182:9;30176:4;30172:20;30168:1;30157:9;30153:17;30146:47;30210:131;30336:4;30210:131;:::i;:::-;30202:139;;29929:419;;;:::o;30354:241::-;30494:34;30490:1;30482:6;30478:14;30471:58;30563:24;30558:2;30550:6;30546:15;30539:49;30354:241;:::o;30601:366::-;30743:3;30764:67;30828:2;30823:3;30764:67;:::i;:::-;30757:74;;30840:93;30929:3;30840:93;:::i;:::-;30958:2;30953:3;30949:12;30942:19;;30601:366;;;:::o;30973:419::-;31139:4;31177:2;31166:9;31162:18;31154:26;;31226:9;31220:4;31216:20;31212:1;31201:9;31197:17;31190:47;31254:131;31380:4;31254:131;:::i;:::-;31246:139;;30973:419;;;:::o;31398:348::-;31438:7;31461:20;31479:1;31461:20;:::i;:::-;31456:25;;31495:20;31513:1;31495:20;:::i;:::-;31490:25;;31683:1;31615:66;31611:74;31608:1;31605:81;31600:1;31593:9;31586:17;31582:105;31579:131;;;31690:18;;:::i;:::-;31579:131;31738:1;31735;31731:9;31720:20;;31398:348;;;;:::o;31752:180::-;31800:77;31797:1;31790:88;31897:4;31894:1;31887:15;31921:4;31918:1;31911:15;31938:185;31978:1;31995:20;32013:1;31995:20;:::i;:::-;31990:25;;32029:20;32047:1;32029:20;:::i;:::-;32024:25;;32068:1;32058:35;;32073:18;;:::i;:::-;32058:35;32115:1;32112;32108:9;32103:14;;31938:185;;;;:::o;32129:194::-;32169:4;32189:20;32207:1;32189:20;:::i;:::-;32184:25;;32223:20;32241:1;32223:20;:::i;:::-;32218:25;;32267:1;32264;32260:9;32252:17;;32291:1;32285:4;32282:11;32279:37;;;32296:18;;:::i;:::-;32279:37;32129:194;;;;:::o;32329:180::-;32377:77;32374:1;32367:88;32474:4;32471:1;32464:15;32498:4;32495:1;32488:15;32515:143;32572:5;32603:6;32597:13;32588:22;;32619:33;32646:5;32619:33;:::i;:::-;32515:143;;;;:::o;32664:351::-;32734:6;32783:2;32771:9;32762:7;32758:23;32754:32;32751:119;;;32789:79;;:::i;:::-;32751:119;32909:1;32934:64;32990:7;32981:6;32970:9;32966:22;32934:64;:::i;:::-;32924:74;;32880:128;32664:351;;;;:::o;33021:85::-;33066:7;33095:5;33084:16;;33021:85;;;:::o;33112:158::-;33170:9;33203:61;33221:42;33230:32;33256:5;33230:32;:::i;:::-;33221:42;:::i;:::-;33203:61;:::i;:::-;33190:74;;33112:158;;;:::o;33276:147::-;33371:45;33410:5;33371:45;:::i;:::-;33366:3;33359:58;33276:147;;:::o;33429:114::-;33496:6;33530:5;33524:12;33514:22;;33429:114;;;:::o;33549:132::-;33616:4;33639:3;33631:11;;33669:4;33664:3;33660:14;33652:22;;33549:132;;;:::o;33687:113::-;33757:4;33789;33784:3;33780:14;33772:22;;33687:113;;;:::o;33836:732::-;33955:3;33984:54;34032:5;33984:54;:::i;:::-;34054:86;34133:6;34128:3;34054:86;:::i;:::-;34047:93;;34164:56;34214:5;34164:56;:::i;:::-;34243:7;34274:1;34259:284;34284:6;34281:1;34278:13;34259:284;;;34360:6;34354:13;34387:63;34446:3;34431:13;34387:63;:::i;:::-;34380:70;;34473:60;34526:6;34473:60;:::i;:::-;34463:70;;34319:224;34306:1;34303;34299:9;34294:14;;34259:284;;;34263:14;34559:3;34552:10;;33960:608;;;33836:732;;;;:::o;34574:831::-;34837:4;34875:3;34864:9;34860:19;34852:27;;34889:71;34957:1;34946:9;34942:17;34933:6;34889:71;:::i;:::-;34970:80;35046:2;35035:9;35031:18;35022:6;34970:80;:::i;:::-;35097:9;35091:4;35087:20;35082:2;35071:9;35067:18;35060:48;35125:108;35228:4;35219:6;35125:108;:::i;:::-;35117:116;;35243:72;35311:2;35300:9;35296:18;35287:6;35243:72;:::i;:::-;35325:73;35393:3;35382:9;35378:19;35369:6;35325:73;:::i;:::-;34574:831;;;;;;;;:::o;35411:225::-;35551:34;35547:1;35539:6;35535:14;35528:58;35620:8;35615:2;35607:6;35603:15;35596:33;35411:225;:::o;35642:366::-;35784:3;35805:67;35869:2;35864:3;35805:67;:::i;:::-;35798:74;;35881:93;35970:3;35881:93;:::i;:::-;35999:2;35994:3;35990:12;35983:19;;35642:366;;;:::o;36014:419::-;36180:4;36218:2;36207:9;36203:18;36195:26;;36267:9;36261:4;36257:20;36253:1;36242:9;36238:17;36231:47;36295:131;36421:4;36295:131;:::i;:::-;36287:139;;36014:419;;;:::o;36439:220::-;36579:34;36575:1;36567:6;36563:14;36556:58;36648:3;36643:2;36635:6;36631:15;36624:28;36439:220;:::o;36665:366::-;36807:3;36828:67;36892:2;36887:3;36828:67;:::i;:::-;36821:74;;36904:93;36993:3;36904:93;:::i;:::-;37022:2;37017:3;37013:12;37006:19;;36665:366;;;:::o;37037:419::-;37203:4;37241:2;37230:9;37226:18;37218:26;;37290:9;37284:4;37280:20;37276:1;37265:9;37261:17;37254:47;37318:131;37444:4;37318:131;:::i;:::-;37310:139;;37037:419;;;:::o

Swarm Source

ipfs://9331ed2f825c6892a568bbfe98b6f320923a720833e45e5eda448b97f0d0f3b7
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.