ETH Price: $3,354.64 (+0.60%)
Gas: 8.65 Gwei

Token

OneTrillionDollar ($OTD)
 

Overview

Max Total Supply

1,000,000,000,000 $OTD

Holders

132

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Balance
741,679,128.486378476343465918 $OTD

Value
$0.00
0xfae88e0ffe8deacda622f5931ca1149a037ebee7
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:
OneTrillionDollar

Compiler Version
v0.8.17+commit.8df45f5f

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2023-05-26
*/

/*

https://t.me/OneTrillionDollarPortal

*/

// SPDX-License-Identifier: MIT

pragma solidity 0.8.17;

/**
 * @dev Interface of the ERC20 standard as defined in the EIP.
 */

interface IERC20 {
    function totalSupply() external view returns (uint256);
    function balanceOf(address account) external view returns (uint256);
    function transfer(address recipient, uint256 amount) external returns (bool);
    function allowance(address owner, address spender) external view returns (uint256);
    function approve(address spender, uint256 amount) external returns (bool);

    function transferFrom(
        address sender,
        address recipient,
        uint256 amount
    ) external returns (bool);

    event Transfer(address indexed from, address indexed to, uint256 value);
    event Approval(address indexed owner, address indexed spender, uint256 value);
}

/**
 * @dev Interface for the optional metadata functions from the ERC20 standard.
 *
 * _Available since v4.1._
 */
interface IERC20Metadata is IERC20 {
    function name() external view returns (string memory);
    function symbol() external view returns (string memory);
    function decimals() external view returns (uint8);
}

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

    function _msgData() internal view virtual returns (bytes calldata) {
        return msg.data;
    }
}


/**
 * @dev Contract module which provides a basic access control mechanism, where
 * there is an account (an owner) that can be granted exclusive access to
 * specific functions.
 */
abstract 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() {
        _setOwner(_msgSender());
    }

    /**
     * @dev Returns the address of the current owner.
     */
    function owner() public view virtual 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.
     */
    function renounceOwnership() public virtual onlyOwner {
        _setOwner(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");
        _setOwner(newOwner);
    }

    function _setOwner(address newOwner) private {
        address oldOwner = _owner;
        _owner = newOwner;
        emit OwnershipTransferred(oldOwner, newOwner);
    }
}


/**
 * @dev Implementation of the {IERC20} interface.
 */
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;

    /**
     * @dev Sets the values for {name} and {symbol}.
     *
     */
    constructor(string memory name_, string memory symbol_) {
        _name = name_;
        _symbol = symbol_;
    }

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

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

    /**
     * @dev Returns the number of decimals used to get its user representation.
     */
    function decimals() public view virtual override returns (uint8) {
        return 18;
    }

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

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

    /**
     * @dev See {IERC20-transfer}.
     *
     */
    function transfer(address recipient, uint256 amount) public virtual override returns (bool) {
        _transfer(_msgSender(), recipient, amount);
        return true;
    }

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

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

    /**
     * @dev See {IERC20-transferFrom}.
     */
    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;
    }

    /**
     * @dev Atomically increases the allowance granted to `spender` by the caller.
     *
     */
    function increaseAllowance(address spender, uint256 addedValue) public virtual returns (bool) {
        _approve(_msgSender(), spender, _allowances[_msgSender()][spender] + addedValue);
        return true;
    }

    /**
     * @dev Atomically decreases the allowance granted to `spender` by the caller.
     *
     */
    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;
    }

    /**
     * @dev Moves `amount` of tokens from `sender` to `recipient`.
     *
     */
    function _transfer(
        address sender,
        address recipient,
        uint256 amount
    ) internal virtual {
        require(sender != address(0), "ERC20: transfer from the zero address");
        require(recipient != address(0), "ERC20: transfer to the zero address");

        _beforeTokenTransfer(sender, recipient, amount);

        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);

        _afterTokenTransfer(sender, recipient, amount);
    }

    /** @dev Creates `amount` tokens and assigns them to `account`, increasing
     * the total supply.
     */
    function _createTotalSupply(address account, uint256 amount) internal virtual {
        require(account != address(0), "ERC20: mint to the zero address");

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

        _totalSupply += amount;
        _balances[account] += amount;
        emit Transfer(address(0), account, amount);

        _afterTokenTransfer(address(0), account, amount);
    }

   
    /**
     * @dev Sets `amount` as the allowance of `spender` over the `owner` s tokens.
     *
     */
    function _approve(
        address owner,
        address spender,
        uint256 amount
    ) internal virtual {
        require(owner != address(0), "ERC20: approve from the zero address");
        require(spender != address(0), "ERC20: approve to the zero address");

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

    /**
     * @dev Hook that is called before any transfer of tokens. This includes
     * minting and burning.
     */
    function _beforeTokenTransfer(
        address from,
        address to,
        uint256 amount
    ) internal virtual {}

    /**
     * @dev Hook that is called after any transfer of tokens. This includes
     * minting and burning.
     */
    function _afterTokenTransfer(
        address from,
        address to,
        uint256 amount
    ) internal virtual {}
}


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

    function addLiquidity(
        address tokenA,
        address tokenB,
        uint amountADesired,
        uint amountBDesired,
        uint amountAMin,
        uint amountBMin,
        address to,
        uint deadline
    ) external returns (uint amountA, uint amountB, uint liquidity);
    function addLiquidityETH(
        address token,
        uint amountTokenDesired,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline
    ) external payable returns (uint amountToken, uint amountETH, uint liquidity);
    function removeLiquidity(
        address tokenA,
        address tokenB,
        uint liquidity,
        uint amountAMin,
        uint amountBMin,
        address to,
        uint deadline
    ) external returns (uint amountA, uint amountB);
    function removeLiquidityETH(
        address token,
        uint liquidity,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline
    ) external returns (uint amountToken, uint amountETH);
    function removeLiquidityWithPermit(
        address tokenA,
        address tokenB,
        uint liquidity,
        uint amountAMin,
        uint amountBMin,
        address to,
        uint deadline,
        bool approveMax, uint8 v, bytes32 r, bytes32 s
    ) external returns (uint amountA, uint amountB);
    function removeLiquidityETHWithPermit(
        address token,
        uint liquidity,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline,
        bool approveMax, uint8 v, bytes32 r, bytes32 s
    ) external returns (uint amountToken, uint amountETH);
    function swapExactTokensForTokens(
        uint amountIn,
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external returns (uint[] memory amounts);
    function swapTokensForExactTokens(
        uint amountOut,
        uint amountInMax,
        address[] calldata path,
        address to,
        uint deadline
    ) external returns (uint[] memory amounts);
    function swapExactETHForTokens(uint amountOutMin, address[] calldata path, address to, uint deadline)
        external
        payable
        returns (uint[] memory amounts);
    function swapTokensForExactETH(uint amountOut, uint amountInMax, address[] calldata path, address to, uint deadline)
        external
        returns (uint[] memory amounts);
    function swapExactTokensForETH(uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline)
        external
        returns (uint[] memory amounts);
    function swapETHForExactTokens(uint amountOut, address[] calldata path, address to, uint deadline)
        external
        payable
        returns (uint[] memory amounts);

    function quote(uint amountA, uint reserveA, uint reserveB) external pure returns (uint amountB);
    function getAmountOut(uint amountIn, uint reserveIn, uint reserveOut) external pure returns (uint amountOut);
    function getAmountIn(uint amountOut, uint reserveIn, uint reserveOut) external pure returns (uint amountIn);
    function getAmountsOut(uint amountIn, address[] calldata path) external view returns (uint[] memory amounts);
    function getAmountsIn(uint amountOut, address[] calldata path) external view returns (uint[] memory amounts);
}

interface IUniswapV2Router02 is IUniswapV2Router01 {
    function removeLiquidityETHSupportingFeeOnTransferTokens(
        address token,
        uint liquidity,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline
    ) external returns (uint amountETH);
    function removeLiquidityETHWithPermitSupportingFeeOnTransferTokens(
        address token,
        uint liquidity,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline,
        bool approveMax, uint8 v, bytes32 r, bytes32 s
    ) external returns (uint amountETH);

    function swapExactTokensForTokensSupportingFeeOnTransferTokens(
        uint amountIn,
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external;
    function swapExactETHForTokensSupportingFeeOnTransferTokens(
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external payable;
    function swapExactTokensForETHSupportingFeeOnTransferTokens(
        uint amountIn,
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external;
}

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

    function feeTo() external view returns (address);
    function feeToSetter() external view returns (address);

    function getPair(address tokenA, address tokenB) external view returns (address pair);
    function allPairs(uint) external view returns (address pair);
    function allPairsLength() external view returns (uint);

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

    function setFeeTo(address) external;
    function setFeeToSetter(address) external;
}

/**
 * @dev Wrappers over Solidity's arithmetic operations.
 */
library SignedSafeMath {
    /**
     * @dev Returns the multiplication of two signed integers, reverting on
     * overflow.
     */
    function mul(int256 a, int256 b) internal pure returns (int256) {
        return a * b;
    }

    /**
     * @dev Returns the integer division of two signed integers. Reverts on
     * division by zero. The result is rounded towards zero.
     */
    function div(int256 a, int256 b) internal pure returns (int256) {
        return a / b;
    }

    /**
     * @dev Returns the subtraction of two signed integers, reverting on
     * overflow.
     */
    function sub(int256 a, int256 b) internal pure returns (int256) {
        return a - b;
    }

    /**
     * @dev Returns the addition of two signed integers, reverting on
     * overflow.
     */
    function add(int256 a, int256 b) internal pure returns (int256) {
        return a + b;
    }
}

// CAUTION
// This version of SafeMath should only be used with Solidity 0.8 or later,
// because it relies on the compiler's built in overflow checks.
 
library SafeMath {
    /**
     * @dev Returns the addition of two unsigned integers, with an overflow flag.
     *
     * _Available since v3.4._
     */
    function tryAdd(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        unchecked {
            uint256 c = a + b;
            if (c < a) return (false, 0);
            return (true, c);
        }
    }

    /**
     * @dev Returns the substraction of two unsigned integers, with an overflow flag.
     *
     * _Available since v3.4._
     */
    function trySub(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        unchecked {
            if (b > a) return (false, 0);
            return (true, a - b);
        }
    }

    /**
     * @dev Returns the multiplication of two unsigned integers, with an overflow flag.
     *
     * _Available since v3.4._
     */
    function tryMul(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        unchecked {
            // 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 (true, 0);
            uint256 c = a * b;
            if (c / a != b) return (false, 0);
            return (true, c);
        }
    }

    /**
     * @dev Returns the division of two unsigned integers, with a division by zero flag.
     *
     * _Available since v3.4._
     */
    function tryDiv(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        unchecked {
            if (b == 0) return (false, 0);
            return (true, a / b);
        }
    }

    /**
     * @dev Returns the remainder of dividing two unsigned integers, with a division by zero flag.
     *
     * _Available since v3.4._
     */
    function tryMod(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        unchecked {
            if (b == 0) return (false, 0);
            return (true, a % b);
        }
    }

    /**
     * @dev Returns the addition of two unsigned integers, reverting on
     * overflow.
     */
    function add(uint256 a, uint256 b) internal pure returns (uint256) {
        return a + b;
    }

    /**
     * @dev Returns the subtraction of two unsigned integers, reverting on
     * overflow (when the result is negative).
     */
    function sub(uint256 a, uint256 b) internal pure returns (uint256) {
        return a - b;
    }

    /**
     * @dev Returns the multiplication of two unsigned integers, reverting on
     * overflow.
     */
    function mul(uint256 a, uint256 b) internal pure returns (uint256) {
        return a * b;
    }

    /**
     * @dev Returns the integer division of two unsigned integers, reverting on
     * division by zero. The result is rounded towards zero.
     */
    function div(uint256 a, uint256 b) internal pure returns (uint256) {
        return a / b;
    }

    /**
     * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),
     * reverting when dividing by zero.
     */
    function mod(uint256 a, uint256 b) internal pure returns (uint256) {
        return a % b;
    }

    /**
     * @dev Returns the subtraction of two unsigned integers, reverting with custom message on
     * overflow (when the result is negative).
     */
    function sub(
        uint256 a,
        uint256 b,
        string memory errorMessage
    ) internal pure returns (uint256) {
        unchecked {
            require(b <= a, errorMessage);
            return a - b;
        }
    }

    /**
     * @dev Returns the integer division of two unsigned integers, reverting with custom message on
     * division by zero. The result is rounded towards zero.
     */
    function div(
        uint256 a,
        uint256 b,
        string memory errorMessage
    ) internal pure returns (uint256) {
        unchecked {
            require(b > 0, errorMessage);
            return a / b;
        }
    }

    /**
     * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),
     * reverting with custom message when dividing by zero.
     */
    function mod(
        uint256 a,
        uint256 b,
        string memory errorMessage
    ) internal pure returns (uint256) {
        unchecked {
            require(b > 0, errorMessage);
            return a % b;
        }
    }
}

/**
 * @dev Wrappers over Solidity's uintXX/intXX casting operators with added overflow
 * checks.
 */
library SafeCast {
    /**
     * @dev Returns the downcasted uint224 from uint256, reverting on
     * overflow (when the input is greater than largest uint224).
     */
    function toUint224(uint256 value) internal pure returns (uint224) {
        require(value <= type(uint224).max, "SafeCast: value doesn't fit in 224 bits");
        return uint224(value);
    }

    /**
     * @dev Returns the downcasted uint128 from uint256, reverting on
     * overflow (when the input is greater than largest uint128).
     */
    function toUint128(uint256 value) internal pure returns (uint128) {
        require(value <= type(uint128).max, "SafeCast: value doesn't fit in 128 bits");
        return uint128(value);
    }

    /**
     * @dev Returns the downcasted uint96 from uint256, reverting on
     * overflow (when the input is greater than largest uint96).
     */
    function toUint96(uint256 value) internal pure returns (uint96) {
        require(value <= type(uint96).max, "SafeCast: value doesn't fit in 96 bits");
        return uint96(value);
    }

    /**
     * @dev Returns the downcasted uint64 from uint256, reverting on
     * overflow (when the input is greater than largest uint64).
     */
    function toUint64(uint256 value) internal pure returns (uint64) {
        require(value <= type(uint64).max, "SafeCast: value doesn't fit in 64 bits");
        return uint64(value);
    }

    /**
     * @dev Returns the downcasted uint32 from uint256, reverting on
     * overflow (when the input is greater than largest uint32).
     */
    function toUint32(uint256 value) internal pure returns (uint32) {
        require(value <= type(uint32).max, "SafeCast: value doesn't fit in 32 bits");
        return uint32(value);
    }

    /**
     * @dev Returns the downcasted uint16 from uint256, reverting on
     * overflow (when the input is greater than largest uint16).
     */
    function toUint16(uint256 value) internal pure returns (uint16) {
        require(value <= type(uint16).max, "SafeCast: value doesn't fit in 16 bits");
        return uint16(value);
    }

    /**
     * @dev Returns the downcasted uint8 from uint256, reverting on
     * overflow (when the input is greater than largest uint8).
     */
    function toUint8(uint256 value) internal pure returns (uint8) {
        require(value <= type(uint8).max, "SafeCast: value doesn't fit in 8 bits");
        return uint8(value);
    }

    /**
     * @dev Converts a signed int256 into an unsigned uint256.
     *
     * Requirements:
     *
     * - input must be greater than or equal to 0.
     */
    function toUint256(int256 value) internal pure returns (uint256) {
        require(value >= 0, "SafeCast: value must be positive");
        return uint256(value);
    }

    /**
     * @dev Returns the downcasted int128 from int256, reverting on
     * overflow (when the input is less than smallest int128 or
     */
    function toInt128(int256 value) internal pure returns (int128) {
        require(value >= type(int128).min && value <= type(int128).max, "SafeCast: value doesn't fit in 128 bits");
        return int128(value);
    }

    /**
     * @dev Returns the downcasted int64 from int256, reverting on
     * overflow (when the input is less than smallest int64 or
     */
    function toInt64(int256 value) internal pure returns (int64) {
        require(value >= type(int64).min && value <= type(int64).max, "SafeCast: value doesn't fit in 64 bits");
        return int64(value);
    }

    /**
     * @dev Returns the downcasted int32 from int256, reverting on
     * overflow (when the input is less than smallest int32 or
     */
    function toInt32(int256 value) internal pure returns (int32) {
        require(value >= type(int32).min && value <= type(int32).max, "SafeCast: value doesn't fit in 32 bits");
        return int32(value);
    }

    /**
     * @dev Returns the downcasted int16 from int256, reverting on
     * overflow (when the input is less than smallest int16 or
     */
    function toInt16(int256 value) internal pure returns (int16) {
        require(value >= type(int16).min && value <= type(int16).max, "SafeCast: value doesn't fit in 16 bits");
        return int16(value);
    }

    /**
     * @dev Returns the downcasted int8 from int256, reverting on
     * overflow (when the input is less than smallest int8 or
     */
    function toInt8(int256 value) internal pure returns (int8) {
        require(value >= type(int8).min && value <= type(int8).max, "SafeCast: value doesn't fit in 8 bits");
        return int8(value);
    }

    /**
     * @dev Converts an unsigned uint256 into a signed int256.
     */
    function toInt256(uint256 value) internal pure returns (int256) {
        // Note: Unsafe cast below is okay because `type(int256).max` is guaranteed to be positive
        require(value <= uint256(type(int256).max), "SafeCast: value doesn't fit in an int256");
        return int256(value);
    }
}

contract OneTrillionDollar is ERC20, Ownable {

    using SafeMath for uint256;

    IUniswapV2Router02 public uniswapV2Router;
    address public immutable uniswapV2Pair;

    uint256 public liquidityTokens;
    uint256 public devTokens;
    uint256 public liquidityBuyFee = 1; 
    uint256 public devBuyFee = 30; 
    uint256 public devSellFee = 45; 
    uint256 public burnSellFee = 1;
    uint256 public maxBuyTransactionAmount = 30000000000 * (10**18);
    uint256 public maxSellTransactionAmount = 30000000000 * (10**18);
    uint256 public swapTokensAtAmount = 200000000 * (10**18);
    uint256 public maxWalletToken = 30000000000 * (10**18);

    address payable public devWallet = payable(0x7D9F6B92910bFEA8189dBa75a3Ca7Cc59DFE45C1);
    address public deadWallet = 0x000000000000000000000000000000000000dEaD;

    bool private inSwapAndLiquify;
    bool public swapAndLiquifyEnabled = true;
  
    // exlcude from fees
    mapping (address => bool) private _isExcludedFromFees;
    
    event SwapAndLiquifyEnabledUpdated(bool enabled);
    event SwapEthForTokens(uint256 amountIn, address[] path);
    event SwapAndLiquify(uint256 tokensIntoLiqudity, uint256 ethReceived);
    event ExcludeFromFees(address indexed account, bool isExcluded);
    event MaxWalletAmountUpdated(uint256 prevValue, uint256 newValue);

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

    modifier lockTheSwap {
        inSwapAndLiquify = true;
        _;
        inSwapAndLiquify = false;
    }

    constructor() ERC20("OneTrillionDollar", "$OTD") {
    	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;


        // exclude from paying fees or having max transaction amount
        excludeFromFees(owner(), true);
        excludeFromFees(address(this), true);
        excludeFromFees(devWallet, true);
        
        /*
            internal function  that is only called here,
            and CANNOT be called ever again
        */
        _createTotalSupply(owner(), 1000000000000 * (10**18));
    }

    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 (from==uniswapV2Pair && !_isExcludedFromFees[from] && !_isExcludedFromFees[to]) {
            uint256 contractBalanceRecepient = balanceOf(to);
            require(contractBalanceRecepient + amount <= maxWalletToken, "Exceeds maximum wallet token amount.");
        }

        if(!_isExcludedFromFees[from] && !_isExcludedFromFees[to] && from==uniswapV2Pair){
            require(amount <= maxBuyTransactionAmount, "amount exceeds the maxBuyTransactionAmount.");
        }

        if(!_isExcludedFromFees[from] && !_isExcludedFromFees[to] && to==uniswapV2Pair){
            require(amount <= maxSellTransactionAmount, "amount exceeds the maxSellTransactionAmount.");
        }
    
        if(!inSwapAndLiquify && to==uniswapV2Pair && 
            swapAndLiquifyEnabled && 
            (devTokens >= swapTokensAtAmount ||
            liquidityTokens >= swapTokensAtAmount))
        {
            swapAndLiquify();
        }
             

        if(!_isExcludedFromFees[from] && !_isExcludedFromFees[to]) {
            uint256 devShare;
            uint256 liquidityShare;
            uint256 burnShare;
            
            if(from==uniswapV2Pair) {
                
                if(devBuyFee > 0) {
                    devShare = amount.mul(devBuyFee).div(100);
                    devTokens += devShare;
                    super._transfer(from, address(this), devShare);
                }

                if(liquidityBuyFee > 0) {
                    liquidityShare = amount.mul(liquidityBuyFee).div(100);
                    liquidityTokens += liquidityShare;
                    super._transfer(from, address(this), liquidityShare);
                }

            }

            if(to==uniswapV2Pair) {
               
                if(devSellFee > 0) {
                    devShare = amount.mul(devSellFee).div(100);
                    devTokens += devShare;
                    super._transfer(from, address(this), devShare);
                }

                if(burnSellFee > 0) {
                    burnShare = amount.mul(burnSellFee).div(100);
                    super._transfer(from, deadWallet, burnShare);
                }

            }

            amount = amount.sub(devShare.add(liquidityShare).add(burnShare));

        }

        super._transfer(from, to, amount);

    }

    function swapAndLiquify() private lockTheSwap {
        uint256 contractTokenBalance = balanceOf(address(this));
        if(liquidityTokens >= swapTokensAtAmount && contractTokenBalance >= swapTokensAtAmount) {
            // split the contract balance into halves
            uint256 half = swapTokensAtAmount.div(2);
            uint256 otherHalf = swapTokensAtAmount.sub(half);

            // capture the contract's current ETH balance.
            uint256 initialBalance = address(this).balance;

            // swap tokens for ETH
            swapTokensForEth(half, address(this));

            // how much ETH did we just swap into?
            uint256 newBalance = address(this).balance.sub(initialBalance);

            // add liquidity to uniswap
            addLiquidity(otherHalf, newBalance);
            emit SwapAndLiquify(half, newBalance, otherHalf);
            liquidityTokens -= swapTokensAtAmount;
        }

        if(devTokens >= swapTokensAtAmount && contractTokenBalance >= swapTokensAtAmount) {
            swapTokensForEth(swapTokensAtAmount, devWallet);
            devTokens -= swapTokensAtAmount;
        }

    }

    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
            owner(),
            block.timestamp
        );
    }

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

        if(allowance(address(this), address(uniswapV2Router)) < tokenAmount) {
          _approve(address(this), address(uniswapV2Router), ~uint256(0));
        }

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

    function removeBuyFee(uint256 _liqFee, uint256 _devFee) public onlyOwner() {
        require(_liqFee.add(_devFee) <= 5, "tax too high");
        liquidityBuyFee = _liqFee;
        devBuyFee = _devFee;
    }

    function removeSellFee(uint256 _devFee, uint256 _burnFee) public onlyOwner() {
        require(_devFee.add(_burnFee) <= 5, "tax too high");
        devSellFee = _devFee;
        burnSellFee = _burnFee;
    }

    function updateDevWallet(address payable _devWallet) public onlyOwner {  
        devWallet = _devWallet;
    }

    function setMaxBuyTransactionAmount(uint256 _maxTxAmount) public onlyOwner {
        maxBuyTransactionAmount = _maxTxAmount;
        require(maxBuyTransactionAmount >= totalSupply().div(500), "value too low");
    }

    function setMaxSellTransactionAmount(uint256 _maxTxAmount) public onlyOwner {
        maxSellTransactionAmount = _maxTxAmount;
        require(maxSellTransactionAmount >= totalSupply().div(500), "value too low");
    }
    
    function excludeFromFees(address account, bool excluded) public onlyOwner {
        require(_isExcludedFromFees[account] != excluded );
        _isExcludedFromFees[account] = excluded;

        emit ExcludeFromFees(account, excluded);
    }

    function SetSwapTokensAtAmount(uint256 newLimit) external onlyOwner {
        swapTokensAtAmount = newLimit;
    }
    
    function isExcludedFromFees(address account) public view returns(bool) {
        return _isExcludedFromFees[account];
    }
    
    function setSwapAndLiquifyEnabled(bool _enabled) public onlyOwner {
        swapAndLiquifyEnabled = _enabled;
        emit SwapAndLiquifyEnabledUpdated(_enabled);
    }

    function setMaxWalletToken(uint256 _newValue) external onlyOwner {
        uint256 prevValue = maxWalletToken;
  	    maxWalletToken = _newValue;
        require(maxWalletToken >= totalSupply().div(500), "value too low");
        emit MaxWalletAmountUpdated(prevValue, _newValue);
  	}

    receive() external payable {

  	}
    
}

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":"uint256","name":"prevValue","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"newValue","type":"uint256"}],"name":"MaxWalletAmountUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"tokensIntoLiqudity","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"ethReceived","type":"uint256"}],"name":"SwapAndLiquify","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":false,"internalType":"bool","name":"enabled","type":"bool"}],"name":"SwapAndLiquifyEnabledUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"amountIn","type":"uint256"},{"indexed":false,"internalType":"address[]","name":"path","type":"address[]"}],"name":"SwapEthForTokens","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":"uint256","name":"newLimit","type":"uint256"}],"name":"SetSwapTokensAtAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"burnSellFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"deadWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"devBuyFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"devSellFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"devTokens","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"devWallet","outputs":[{"internalType":"address payable","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"excluded","type":"bool"}],"name":"excludeFromFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"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":"liquidityBuyFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"liquidityTokens","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxBuyTransactionAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxSellTransactionAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxWalletToken","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_liqFee","type":"uint256"},{"internalType":"uint256","name":"_devFee","type":"uint256"}],"name":"removeBuyFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_devFee","type":"uint256"},{"internalType":"uint256","name":"_burnFee","type":"uint256"}],"name":"removeSellFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_maxTxAmount","type":"uint256"}],"name":"setMaxBuyTransactionAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_maxTxAmount","type":"uint256"}],"name":"setMaxSellTransactionAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_newValue","type":"uint256"}],"name":"setMaxWalletToken","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_enabled","type":"bool"}],"name":"setSwapAndLiquifyEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapAndLiquifyEnabled","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":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"uniswapV2Pair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"uniswapV2Router","outputs":[{"internalType":"contract IUniswapV2Router02","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address payable","name":"_devWallet","type":"address"}],"name":"updateDevWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

60a06040526001600955601e600a55602d600b556001600c556b60ef6b1aba6f072330000000600d556b60ef6b1aba6f072330000000600e556aa56fa5b99019a5c8000000600f556b60ef6b1aba6f072330000000601055737d9f6b92910bfea8189dba75a3ca7cc59dfe45c1601160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555061dead601260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506001601260156101000a81548160ff0219169083151502179055503480156200011757600080fd5b506040518060400160405280601181526020017f4f6e655472696c6c696f6e446f6c6c61720000000000000000000000000000008152506040518060400160405280600481526020017f244f544400000000000000000000000000000000000000000000000000000000815250816003908162000195919062000aec565b508060049081620001a7919062000aec565b505050620001ca620001be6200046160201b60201c565b6200046960201b60201c565b6000737a250d5630b4cf539739df2c5dacb4c659f2488d905060008173ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000231573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000257919062000c3d565b73ffffffffffffffffffffffffffffffffffffffff1663c9c65396308473ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015620002bf573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002e5919062000c3d565b6040518363ffffffff1660e01b81526004016200030492919062000c80565b6020604051808303816000875af115801562000324573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200034a919062000c3d565b905081600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff1660808173ffffffffffffffffffffffffffffffffffffffff1681525050620003e3620003d56200052f60201b60201c565b60016200055960201b60201c565b620003f63060016200055960201b60201c565b6200042b601160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1660016200055960201b60201c565b620004596200043f6200052f60201b60201c565b6c0c9f2c9cd04674edea40000000620006f060201b60201c565b505062000e74565b600033905090565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b620005696200046160201b60201c565b73ffffffffffffffffffffffffffffffffffffffff166200058f6200052f60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1614620005e8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620005df9062000d0e565b60405180910390fd5b801515601360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161515036200064557600080fd5b80601360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df782604051620006e4919062000d4d565b60405180910390a25050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160362000762576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620007599062000dba565b60405180910390fd5b62000776600083836200086860201b60201c565b80600260008282546200078a919062000e0b565b92505081905550806000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254620007e1919062000e0b565b925050819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405162000848919062000e57565b60405180910390a362000864600083836200086d60201b60201c565b5050565b505050565b505050565b600081519050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680620008f457607f821691505b6020821081036200090a5762000909620008ac565b5b50919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b600060088302620009747fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8262000935565b62000980868362000935565b95508019841693508086168417925050509392505050565b6000819050919050565b6000819050919050565b6000620009cd620009c7620009c18462000998565b620009a2565b62000998565b9050919050565b6000819050919050565b620009e983620009ac565b62000a01620009f882620009d4565b84845462000942565b825550505050565b600090565b62000a1862000a09565b62000a25818484620009de565b505050565b5b8181101562000a4d5762000a4160008262000a0e565b60018101905062000a2b565b5050565b601f82111562000a9c5762000a668162000910565b62000a718462000925565b8101602085101562000a81578190505b62000a9962000a908562000925565b83018262000a2a565b50505b505050565b600082821c905092915050565b600062000ac16000198460080262000aa1565b1980831691505092915050565b600062000adc838362000aae565b9150826002028217905092915050565b62000af78262000872565b67ffffffffffffffff81111562000b135762000b126200087d565b5b62000b1f8254620008db565b62000b2c82828562000a51565b600060209050601f83116001811462000b64576000841562000b4f578287015190505b62000b5b858262000ace565b86555062000bcb565b601f19841662000b748662000910565b60005b8281101562000b9e5784890151825560018201915060208501945060208101905062000b77565b8683101562000bbe578489015162000bba601f89168262000aae565b8355505b6001600288020188555050505b505050505050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600062000c058262000bd8565b9050919050565b62000c178162000bf8565b811462000c2357600080fd5b50565b60008151905062000c378162000c0c565b92915050565b60006020828403121562000c565762000c5562000bd3565b5b600062000c668482850162000c26565b91505092915050565b62000c7a8162000bf8565b82525050565b600060408201905062000c97600083018562000c6f565b62000ca6602083018462000c6f565b9392505050565b600082825260208201905092915050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b600062000cf660208362000cad565b915062000d038262000cbe565b602082019050919050565b6000602082019050818103600083015262000d298162000ce7565b9050919050565b60008115159050919050565b62000d478162000d30565b82525050565b600060208201905062000d64600083018462000d3c565b92915050565b7f45524332303a206d696e7420746f20746865207a65726f206164647265737300600082015250565b600062000da2601f8362000cad565b915062000daf8262000d6a565b602082019050919050565b6000602082019050818103600083015262000dd58162000d93565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600062000e188262000998565b915062000e258362000998565b925082820190508082111562000e405762000e3f62000ddc565b5b92915050565b62000e518162000998565b82525050565b600060208201905062000e6e600083018462000e46565b92915050565b608051613dd162000eba60003960008181610ee001528181611c3201528181611e3c01528181611f82015281816120350152818161217801526122800152613dd16000f3fe6080604052600436106102345760003560e01c806370105c3b1161012e578063a9059cbb116100ab578063dd62ed3e1161006f578063dd62ed3e14610850578063e2f456051461088d578063e6c75f71146108b8578063f2fde38b146108e3578063f5b01e151461090c5761023b565b8063a9059cbb1461076b578063b45e83f8146107a8578063c0246668146107d3578063c49b9a80146107fc578063ccb61358146108255761023b565b80638da5cb5b116100f25780638da5cb5b146106845780638ea5220f146106af57806391d55f41146106da57806395d89b4114610703578063a457c2d71461072e5761023b565b806370105c3b146105b157806370a08231146105da578063715018a6146106175780637e7613771461062e57806385141a77146106595761023b565b80631816467f116101bc5780634a74bb02116101805780634a74bb02146104c85780634b8ce602146104f35780634fbee1931461051e578063556482091461055b5780635aa821a9146105865761023b565b80631816467f146103cf57806323b872dd146103f8578063313ce56714610435578063395093511461046057806349bd5a5e1461049d5761023b565b806309e89af71161020357806309e89af7146102fe5780631127ae3b1461032757806316216e5f146103505780631694505e1461037957806318160ddd146103a45761023b565b806301143fea1461024057806302259e9e1461026b57806306fdde0314610296578063095ea7b3146102c15761023b565b3661023b57005b600080fd5b34801561024c57600080fd5b50610255610935565b6040516102629190612c54565b60405180910390f35b34801561027757600080fd5b5061028061093b565b60405161028d9190612c54565b60405180910390f35b3480156102a257600080fd5b506102ab610941565b6040516102b89190612cff565b60405180910390f35b3480156102cd57600080fd5b506102e860048036038101906102e39190612db0565b6109d3565b6040516102f59190612e0b565b60405180910390f35b34801561030a57600080fd5b5061032560048036038101906103209190612e26565b6109f1565b005b34801561033357600080fd5b5061034e60048036038101906103499190612e53565b610a77565b005b34801561035c57600080fd5b5061037760048036038101906103729190612e26565b610b5b565b005b34801561038557600080fd5b5061038e610c41565b60405161039b9190612ef2565b60405180910390f35b3480156103b057600080fd5b506103b9610c67565b6040516103c69190612c54565b60405180910390f35b3480156103db57600080fd5b506103f660048036038101906103f19190612f4b565b610c71565b005b34801561040457600080fd5b5061041f600480360381019061041a9190612f78565b610d31565b60405161042c9190612e0b565b60405180910390f35b34801561044157600080fd5b5061044a610e29565b6040516104579190612fe7565b60405180910390f35b34801561046c57600080fd5b5061048760048036038101906104829190612db0565b610e32565b6040516104949190612e0b565b60405180910390f35b3480156104a957600080fd5b506104b2610ede565b6040516104bf9190613011565b60405180910390f35b3480156104d457600080fd5b506104dd610f02565b6040516104ea9190612e0b565b60405180910390f35b3480156104ff57600080fd5b50610508610f15565b6040516105159190612c54565b60405180910390f35b34801561052a57600080fd5b506105456004803603810190610540919061302c565b610f1b565b6040516105529190612e0b565b60405180910390f35b34801561056757600080fd5b50610570610f71565b60405161057d9190612c54565b60405180910390f35b34801561059257600080fd5b5061059b610f77565b6040516105a89190612c54565b60405180910390f35b3480156105bd57600080fd5b506105d860048036038101906105d39190612e53565b610f7d565b005b3480156105e657600080fd5b5061060160048036038101906105fc919061302c565b611061565b60405161060e9190612c54565b60405180910390f35b34801561062357600080fd5b5061062c6110a9565b005b34801561063a57600080fd5b50610643611131565b6040516106509190612c54565b60405180910390f35b34801561066557600080fd5b5061066e611137565b60405161067b9190613011565b60405180910390f35b34801561069057600080fd5b5061069961115d565b6040516106a69190613011565b60405180910390f35b3480156106bb57600080fd5b506106c4611187565b6040516106d19190613068565b60405180910390f35b3480156106e657600080fd5b5061070160048036038101906106fc9190612e26565b6111ad565b005b34801561070f57600080fd5b506107186112d4565b6040516107259190612cff565b60405180910390f35b34801561073a57600080fd5b5061075560048036038101906107509190612db0565b611366565b6040516107629190612e0b565b60405180910390f35b34801561077757600080fd5b50610792600480360381019061078d9190612db0565b611451565b60405161079f9190612e0b565b60405180910390f35b3480156107b457600080fd5b506107bd61146f565b6040516107ca9190612c54565b60405180910390f35b3480156107df57600080fd5b506107fa60048036038101906107f591906130af565b611475565b005b34801561080857600080fd5b50610823600480360381019061081e91906130ef565b6115f6565b005b34801561083157600080fd5b5061083a6116c6565b6040516108479190612c54565b60405180910390f35b34801561085c57600080fd5b506108776004803603810190610872919061311c565b6116cc565b6040516108849190612c54565b60405180910390f35b34801561089957600080fd5b506108a2611753565b6040516108af9190612c54565b60405180910390f35b3480156108c457600080fd5b506108cd611759565b6040516108da9190612c54565b60405180910390f35b3480156108ef57600080fd5b5061090a6004803603810190610905919061302c565b61175f565b005b34801561091857600080fd5b50610933600480360381019061092e9190612e26565b611856565b005b600a5481565b600e5481565b6060600380546109509061318b565b80601f016020809104026020016040519081016040528092919081815260200182805461097c9061318b565b80156109c95780601f1061099e576101008083540402835291602001916109c9565b820191906000526020600020905b8154815290600101906020018083116109ac57829003601f168201915b5050505050905090565b60006109e76109e061193c565b8484611944565b6001905092915050565b6109f961193c565b73ffffffffffffffffffffffffffffffffffffffff16610a1761115d565b73ffffffffffffffffffffffffffffffffffffffff1614610a6d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a6490613208565b60405180910390fd5b80600f8190555050565b610a7f61193c565b73ffffffffffffffffffffffffffffffffffffffff16610a9d61115d565b73ffffffffffffffffffffffffffffffffffffffff1614610af3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610aea90613208565b60405180910390fd5b6005610b088284611b0d90919063ffffffff16565b1115610b49576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b4090613274565b60405180910390fd5b8160098190555080600a819055505050565b610b6361193c565b73ffffffffffffffffffffffffffffffffffffffff16610b8161115d565b73ffffffffffffffffffffffffffffffffffffffff1614610bd7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bce90613208565b60405180910390fd5b80600e81905550610bfa6101f4610bec610c67565b611b2390919063ffffffff16565b600e541015610c3e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c35906132e0565b60405180910390fd5b50565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600254905090565b610c7961193c565b73ffffffffffffffffffffffffffffffffffffffff16610c9761115d565b73ffffffffffffffffffffffffffffffffffffffff1614610ced576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ce490613208565b60405180910390fd5b80601160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6000610d3e848484611b39565b6000600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000610d8961193c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905082811015610e09576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e0090613372565b60405180910390fd5b610e1d85610e1561193c565b858403611944565b60019150509392505050565b60006012905090565b6000610ed4610e3f61193c565b848460016000610e4d61193c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610ecf91906133c1565b611944565b6001905092915050565b7f000000000000000000000000000000000000000000000000000000000000000081565b601260159054906101000a900460ff1681565b60075481565b6000601360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b60085481565b600d5481565b610f8561193c565b73ffffffffffffffffffffffffffffffffffffffff16610fa361115d565b73ffffffffffffffffffffffffffffffffffffffff1614610ff9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ff090613208565b60405180910390fd5b600561100e8284611b0d90919063ffffffff16565b111561104f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161104690613274565b60405180910390fd5b81600b8190555080600c819055505050565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6110b161193c565b73ffffffffffffffffffffffffffffffffffffffff166110cf61115d565b73ffffffffffffffffffffffffffffffffffffffff1614611125576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161111c90613208565b60405180910390fd5b61112f60006123dd565b565b600c5481565b601260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b601160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6111b561193c565b73ffffffffffffffffffffffffffffffffffffffff166111d361115d565b73ffffffffffffffffffffffffffffffffffffffff1614611229576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161122090613208565b60405180910390fd5b60006010549050816010819055506112536101f4611245610c67565b611b2390919063ffffffff16565b6010541015611297576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161128e906132e0565b60405180910390fd5b7f0a7c714b6801281a6e2610a6371ac6a5da9a5947616d74f4aa3ad1d289278e7381836040516112c89291906133f5565b60405180910390a15050565b6060600480546112e39061318b565b80601f016020809104026020016040519081016040528092919081815260200182805461130f9061318b565b801561135c5780601f106113315761010080835404028352916020019161135c565b820191906000526020600020905b81548152906001019060200180831161133f57829003601f168201915b5050505050905090565b6000806001600061137561193c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905082811015611432576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161142990613490565b60405180910390fd5b61144661143d61193c565b85858403611944565b600191505092915050565b600061146561145e61193c565b8484611b39565b6001905092915050565b600b5481565b61147d61193c565b73ffffffffffffffffffffffffffffffffffffffff1661149b61115d565b73ffffffffffffffffffffffffffffffffffffffff16146114f1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114e890613208565b60405180910390fd5b801515601360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615150361154d57600080fd5b80601360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7826040516115ea9190612e0b565b60405180910390a25050565b6115fe61193c565b73ffffffffffffffffffffffffffffffffffffffff1661161c61115d565b73ffffffffffffffffffffffffffffffffffffffff1614611672576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161166990613208565b60405180910390fd5b80601260156101000a81548160ff0219169083151502179055507f53726dfcaf90650aa7eb35524f4d3220f07413c8d6cb404cc8c18bf5591bc159816040516116bb9190612e0b565b60405180910390a150565b60095481565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b600f5481565b60105481565b61176761193c565b73ffffffffffffffffffffffffffffffffffffffff1661178561115d565b73ffffffffffffffffffffffffffffffffffffffff16146117db576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117d290613208565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff160361184a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161184190613522565b60405180910390fd5b611853816123dd565b50565b61185e61193c565b73ffffffffffffffffffffffffffffffffffffffff1661187c61115d565b73ffffffffffffffffffffffffffffffffffffffff16146118d2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118c990613208565b60405180910390fd5b80600d819055506118f56101f46118e7610c67565b611b2390919063ffffffff16565b600d541015611939576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611930906132e0565b60405180910390fd5b50565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036119b3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119aa906135b4565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611a22576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a1990613646565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92583604051611b009190612c54565b60405180910390a3505050565b60008183611b1b91906133c1565b905092915050565b60008183611b319190613695565b905092915050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611ba8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b9f90613738565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611c17576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c0e906137ca565b60405180910390fd5b60008103611c3057611c2b838360006124a3565b6123d8565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16148015611cd55750601360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b8015611d2b5750601360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15611d8f576000611d3b83611061565b90506010548282611d4c91906133c1565b1115611d8d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d849061385c565b60405180910390fd5b505b601360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16158015611e335750601360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b8015611e8a57507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16145b15611ed557600d54811115611ed4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ecb906138ee565b60405180910390fd5b5b601360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16158015611f795750601360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b8015611fd057507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16145b1561201b57600e5481111561201a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161201190613980565b60405180910390fd5b5b601260149054906101000a900460ff1615801561208357507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16145b801561209b5750601260159054906101000a900460ff165b80156120ba5750600f546008541015806120b95750600f5460075410155b5b156120c8576120c7612722565b5b601360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615801561216c5750601360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b156123cc5760008060007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff160361227e576000600a541115612223576121fc60646121ee600a54876128a690919063ffffffff16565b611b2390919063ffffffff16565b9250826008600082825461221091906133c1565b925050819055506122228630856124a3565b5b6000600954111561227d576122566064612248600954876128a690919063ffffffff16565b611b2390919063ffffffff16565b9150816007600082825461226a91906133c1565b9250508190555061227c8630846124a3565b5b5b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff160361238f576000600b54111561232b5761230460646122f6600b54876128a690919063ffffffff16565b611b2390919063ffffffff16565b9250826008600082825461231891906133c1565b9250508190555061232a8630856124a3565b5b6000600c54111561238e5761235e6064612350600c54876128a690919063ffffffff16565b611b2390919063ffffffff16565b905061238d86601260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16836124a3565b5b5b6123c66123b7826123a98587611b0d90919063ffffffff16565b611b0d90919063ffffffff16565b856128bc90919063ffffffff16565b93505050505b6123d78383836124a3565b5b505050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612512576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161250990613738565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612581576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612578906137ca565b60405180910390fd5b61258c8383836128d2565b60008060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015612612576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161260990613a12565b60405180910390fd5b8181036000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546126a591906133c1565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516127099190612c54565b60405180910390a361271c8484846128d7565b50505050565b6001601260146101000a81548160ff021916908315150217905550600061274830611061565b9050600f54600754101580156127605750600f548110155b1561282357600061277d6002600f54611b2390919063ffffffff16565b9050600061279682600f546128bc90919063ffffffff16565b905060004790506127a783306128dc565b60006127bc82476128bc90919063ffffffff16565b90506127c88382612b56565b7f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb5618482856040516127fb93929190613a32565b60405180910390a1600f54600760008282546128179190613a69565b92505081905550505050505b600f54600854101580156128395750600f548110155b156128885761286c600f54601160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166128dc565b600f54600860008282546128809190613a69565b925050819055505b506000601260146101000a81548160ff021916908315150217905550565b600081836128b49190613a9d565b905092915050565b600081836128ca9190613a69565b905092915050565b505050565b505050565b6000600267ffffffffffffffff8111156128f9576128f8613adf565b5b6040519080825280602002602001820160405280156129275781602001602082028036833780820191505090505b509050308160008151811061293f5761293e613b0e565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa1580156129e6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612a0a9190613b52565b81600181518110612a1e57612a1d613b0e565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505082612a8530600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166116cc565b1015612abb57612aba30600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600019611944565b5b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663791ac9478460008486426040518663ffffffff1660e01b8152600401612b1f959493929190613c78565b600060405180830381600087803b158015612b3957600080fd5b505af1158015612b4d573d6000803e3d6000fd5b50505050505050565b612b8330600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1684611944565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f305d719823085600080612bcf61115d565b426040518863ffffffff1660e01b8152600401612bf196959493929190613cd2565b60606040518083038185885af1158015612c0f573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190612c349190613d48565b5050505050565b6000819050919050565b612c4e81612c3b565b82525050565b6000602082019050612c696000830184612c45565b92915050565b600081519050919050565b600082825260208201905092915050565b60005b83811015612ca9578082015181840152602081019050612c8e565b60008484015250505050565b6000601f19601f8301169050919050565b6000612cd182612c6f565b612cdb8185612c7a565b9350612ceb818560208601612c8b565b612cf481612cb5565b840191505092915050565b60006020820190508181036000830152612d198184612cc6565b905092915050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000612d5182612d26565b9050919050565b612d6181612d46565b8114612d6c57600080fd5b50565b600081359050612d7e81612d58565b92915050565b612d8d81612c3b565b8114612d9857600080fd5b50565b600081359050612daa81612d84565b92915050565b60008060408385031215612dc757612dc6612d21565b5b6000612dd585828601612d6f565b9250506020612de685828601612d9b565b9150509250929050565b60008115159050919050565b612e0581612df0565b82525050565b6000602082019050612e206000830184612dfc565b92915050565b600060208284031215612e3c57612e3b612d21565b5b6000612e4a84828501612d9b565b91505092915050565b60008060408385031215612e6a57612e69612d21565b5b6000612e7885828601612d9b565b9250506020612e8985828601612d9b565b9150509250929050565b6000819050919050565b6000612eb8612eb3612eae84612d26565b612e93565b612d26565b9050919050565b6000612eca82612e9d565b9050919050565b6000612edc82612ebf565b9050919050565b612eec81612ed1565b82525050565b6000602082019050612f076000830184612ee3565b92915050565b6000612f1882612d26565b9050919050565b612f2881612f0d565b8114612f3357600080fd5b50565b600081359050612f4581612f1f565b92915050565b600060208284031215612f6157612f60612d21565b5b6000612f6f84828501612f36565b91505092915050565b600080600060608486031215612f9157612f90612d21565b5b6000612f9f86828701612d6f565b9350506020612fb086828701612d6f565b9250506040612fc186828701612d9b565b9150509250925092565b600060ff82169050919050565b612fe181612fcb565b82525050565b6000602082019050612ffc6000830184612fd8565b92915050565b61300b81612d46565b82525050565b60006020820190506130266000830184613002565b92915050565b60006020828403121561304257613041612d21565b5b600061305084828501612d6f565b91505092915050565b61306281612f0d565b82525050565b600060208201905061307d6000830184613059565b92915050565b61308c81612df0565b811461309757600080fd5b50565b6000813590506130a981613083565b92915050565b600080604083850312156130c6576130c5612d21565b5b60006130d485828601612d6f565b92505060206130e58582860161309a565b9150509250929050565b60006020828403121561310557613104612d21565b5b60006131138482850161309a565b91505092915050565b6000806040838503121561313357613132612d21565b5b600061314185828601612d6f565b925050602061315285828601612d6f565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806131a357607f821691505b6020821081036131b6576131b561315c565b5b50919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b60006131f2602083612c7a565b91506131fd826131bc565b602082019050919050565b60006020820190508181036000830152613221816131e5565b9050919050565b7f74617820746f6f20686967680000000000000000000000000000000000000000600082015250565b600061325e600c83612c7a565b915061326982613228565b602082019050919050565b6000602082019050818103600083015261328d81613251565b9050919050565b7f76616c756520746f6f206c6f7700000000000000000000000000000000000000600082015250565b60006132ca600d83612c7a565b91506132d582613294565b602082019050919050565b600060208201905081810360008301526132f9816132bd565b9050919050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206160008201527f6c6c6f77616e6365000000000000000000000000000000000000000000000000602082015250565b600061335c602883612c7a565b915061336782613300565b604082019050919050565b6000602082019050818103600083015261338b8161334f565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60006133cc82612c3b565b91506133d783612c3b565b92508282019050808211156133ef576133ee613392565b5b92915050565b600060408201905061340a6000830185612c45565b6134176020830184612c45565b9392505050565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760008201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b600061347a602583612c7a565b91506134858261341e565b604082019050919050565b600060208201905081810360008301526134a98161346d565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b600061350c602683612c7a565b9150613517826134b0565b604082019050919050565b6000602082019050818103600083015261353b816134ff565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b600061359e602483612c7a565b91506135a982613542565b604082019050919050565b600060208201905081810360008301526135cd81613591565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b6000613630602283612c7a565b915061363b826135d4565b604082019050919050565b6000602082019050818103600083015261365f81613623565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b60006136a082612c3b565b91506136ab83612c3b565b9250826136bb576136ba613666565b5b828204905092915050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b6000613722602583612c7a565b915061372d826136c6565b604082019050919050565b6000602082019050818103600083015261375181613715565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b60006137b4602383612c7a565b91506137bf82613758565b604082019050919050565b600060208201905081810360008301526137e3816137a7565b9050919050565b7f45786365656473206d6178696d756d2077616c6c657420746f6b656e20616d6f60008201527f756e742e00000000000000000000000000000000000000000000000000000000602082015250565b6000613846602483612c7a565b9150613851826137ea565b604082019050919050565b6000602082019050818103600083015261387581613839565b9050919050565b7f616d6f756e74206578636565647320746865206d61784275795472616e73616360008201527f74696f6e416d6f756e742e000000000000000000000000000000000000000000602082015250565b60006138d8602b83612c7a565b91506138e38261387c565b604082019050919050565b60006020820190508181036000830152613907816138cb565b9050919050565b7f616d6f756e74206578636565647320746865206d617853656c6c5472616e736160008201527f6374696f6e416d6f756e742e0000000000000000000000000000000000000000602082015250565b600061396a602c83612c7a565b91506139758261390e565b604082019050919050565b600060208201905081810360008301526139998161395d565b9050919050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206260008201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b60006139fc602683612c7a565b9150613a07826139a0565b604082019050919050565b60006020820190508181036000830152613a2b816139ef565b9050919050565b6000606082019050613a476000830186612c45565b613a546020830185612c45565b613a616040830184612c45565b949350505050565b6000613a7482612c3b565b9150613a7f83612c3b565b9250828203905081811115613a9757613a96613392565b5b92915050565b6000613aa882612c3b565b9150613ab383612c3b565b9250828202613ac181612c3b565b91508282048414831517613ad857613ad7613392565b5b5092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600081519050613b4c81612d58565b92915050565b600060208284031215613b6857613b67612d21565b5b6000613b7684828501613b3d565b91505092915050565b6000819050919050565b6000613ba4613b9f613b9a84613b7f565b612e93565b612c3b565b9050919050565b613bb481613b89565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b613bef81612d46565b82525050565b6000613c018383613be6565b60208301905092915050565b6000602082019050919050565b6000613c2582613bba565b613c2f8185613bc5565b9350613c3a83613bd6565b8060005b83811015613c6b578151613c528882613bf5565b9750613c5d83613c0d565b925050600181019050613c3e565b5085935050505092915050565b600060a082019050613c8d6000830188612c45565b613c9a6020830187613bab565b8181036040830152613cac8186613c1a565b9050613cbb6060830185613002565b613cc86080830184612c45565b9695505050505050565b600060c082019050613ce76000830189613002565b613cf46020830188612c45565b613d016040830187613bab565b613d0e6060830186613bab565b613d1b6080830185613002565b613d2860a0830184612c45565b979650505050505050565b600081519050613d4281612d84565b92915050565b600080600060608486031215613d6157613d60612d21565b5b6000613d6f86828701613d33565b9350506020613d8086828701613d33565b9250506040613d9186828701613d33565b915050925092509256fea2646970667358221220ccc045fa874ae2a2806a1b9980bbeadc166f9c21ecff3010f5e430bbd01421c464736f6c63430008110033

Deployed Bytecode

0x6080604052600436106102345760003560e01c806370105c3b1161012e578063a9059cbb116100ab578063dd62ed3e1161006f578063dd62ed3e14610850578063e2f456051461088d578063e6c75f71146108b8578063f2fde38b146108e3578063f5b01e151461090c5761023b565b8063a9059cbb1461076b578063b45e83f8146107a8578063c0246668146107d3578063c49b9a80146107fc578063ccb61358146108255761023b565b80638da5cb5b116100f25780638da5cb5b146106845780638ea5220f146106af57806391d55f41146106da57806395d89b4114610703578063a457c2d71461072e5761023b565b806370105c3b146105b157806370a08231146105da578063715018a6146106175780637e7613771461062e57806385141a77146106595761023b565b80631816467f116101bc5780634a74bb02116101805780634a74bb02146104c85780634b8ce602146104f35780634fbee1931461051e578063556482091461055b5780635aa821a9146105865761023b565b80631816467f146103cf57806323b872dd146103f8578063313ce56714610435578063395093511461046057806349bd5a5e1461049d5761023b565b806309e89af71161020357806309e89af7146102fe5780631127ae3b1461032757806316216e5f146103505780631694505e1461037957806318160ddd146103a45761023b565b806301143fea1461024057806302259e9e1461026b57806306fdde0314610296578063095ea7b3146102c15761023b565b3661023b57005b600080fd5b34801561024c57600080fd5b50610255610935565b6040516102629190612c54565b60405180910390f35b34801561027757600080fd5b5061028061093b565b60405161028d9190612c54565b60405180910390f35b3480156102a257600080fd5b506102ab610941565b6040516102b89190612cff565b60405180910390f35b3480156102cd57600080fd5b506102e860048036038101906102e39190612db0565b6109d3565b6040516102f59190612e0b565b60405180910390f35b34801561030a57600080fd5b5061032560048036038101906103209190612e26565b6109f1565b005b34801561033357600080fd5b5061034e60048036038101906103499190612e53565b610a77565b005b34801561035c57600080fd5b5061037760048036038101906103729190612e26565b610b5b565b005b34801561038557600080fd5b5061038e610c41565b60405161039b9190612ef2565b60405180910390f35b3480156103b057600080fd5b506103b9610c67565b6040516103c69190612c54565b60405180910390f35b3480156103db57600080fd5b506103f660048036038101906103f19190612f4b565b610c71565b005b34801561040457600080fd5b5061041f600480360381019061041a9190612f78565b610d31565b60405161042c9190612e0b565b60405180910390f35b34801561044157600080fd5b5061044a610e29565b6040516104579190612fe7565b60405180910390f35b34801561046c57600080fd5b5061048760048036038101906104829190612db0565b610e32565b6040516104949190612e0b565b60405180910390f35b3480156104a957600080fd5b506104b2610ede565b6040516104bf9190613011565b60405180910390f35b3480156104d457600080fd5b506104dd610f02565b6040516104ea9190612e0b565b60405180910390f35b3480156104ff57600080fd5b50610508610f15565b6040516105159190612c54565b60405180910390f35b34801561052a57600080fd5b506105456004803603810190610540919061302c565b610f1b565b6040516105529190612e0b565b60405180910390f35b34801561056757600080fd5b50610570610f71565b60405161057d9190612c54565b60405180910390f35b34801561059257600080fd5b5061059b610f77565b6040516105a89190612c54565b60405180910390f35b3480156105bd57600080fd5b506105d860048036038101906105d39190612e53565b610f7d565b005b3480156105e657600080fd5b5061060160048036038101906105fc919061302c565b611061565b60405161060e9190612c54565b60405180910390f35b34801561062357600080fd5b5061062c6110a9565b005b34801561063a57600080fd5b50610643611131565b6040516106509190612c54565b60405180910390f35b34801561066557600080fd5b5061066e611137565b60405161067b9190613011565b60405180910390f35b34801561069057600080fd5b5061069961115d565b6040516106a69190613011565b60405180910390f35b3480156106bb57600080fd5b506106c4611187565b6040516106d19190613068565b60405180910390f35b3480156106e657600080fd5b5061070160048036038101906106fc9190612e26565b6111ad565b005b34801561070f57600080fd5b506107186112d4565b6040516107259190612cff565b60405180910390f35b34801561073a57600080fd5b5061075560048036038101906107509190612db0565b611366565b6040516107629190612e0b565b60405180910390f35b34801561077757600080fd5b50610792600480360381019061078d9190612db0565b611451565b60405161079f9190612e0b565b60405180910390f35b3480156107b457600080fd5b506107bd61146f565b6040516107ca9190612c54565b60405180910390f35b3480156107df57600080fd5b506107fa60048036038101906107f591906130af565b611475565b005b34801561080857600080fd5b50610823600480360381019061081e91906130ef565b6115f6565b005b34801561083157600080fd5b5061083a6116c6565b6040516108479190612c54565b60405180910390f35b34801561085c57600080fd5b506108776004803603810190610872919061311c565b6116cc565b6040516108849190612c54565b60405180910390f35b34801561089957600080fd5b506108a2611753565b6040516108af9190612c54565b60405180910390f35b3480156108c457600080fd5b506108cd611759565b6040516108da9190612c54565b60405180910390f35b3480156108ef57600080fd5b5061090a6004803603810190610905919061302c565b61175f565b005b34801561091857600080fd5b50610933600480360381019061092e9190612e26565b611856565b005b600a5481565b600e5481565b6060600380546109509061318b565b80601f016020809104026020016040519081016040528092919081815260200182805461097c9061318b565b80156109c95780601f1061099e576101008083540402835291602001916109c9565b820191906000526020600020905b8154815290600101906020018083116109ac57829003601f168201915b5050505050905090565b60006109e76109e061193c565b8484611944565b6001905092915050565b6109f961193c565b73ffffffffffffffffffffffffffffffffffffffff16610a1761115d565b73ffffffffffffffffffffffffffffffffffffffff1614610a6d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a6490613208565b60405180910390fd5b80600f8190555050565b610a7f61193c565b73ffffffffffffffffffffffffffffffffffffffff16610a9d61115d565b73ffffffffffffffffffffffffffffffffffffffff1614610af3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610aea90613208565b60405180910390fd5b6005610b088284611b0d90919063ffffffff16565b1115610b49576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b4090613274565b60405180910390fd5b8160098190555080600a819055505050565b610b6361193c565b73ffffffffffffffffffffffffffffffffffffffff16610b8161115d565b73ffffffffffffffffffffffffffffffffffffffff1614610bd7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bce90613208565b60405180910390fd5b80600e81905550610bfa6101f4610bec610c67565b611b2390919063ffffffff16565b600e541015610c3e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c35906132e0565b60405180910390fd5b50565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600254905090565b610c7961193c565b73ffffffffffffffffffffffffffffffffffffffff16610c9761115d565b73ffffffffffffffffffffffffffffffffffffffff1614610ced576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ce490613208565b60405180910390fd5b80601160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6000610d3e848484611b39565b6000600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000610d8961193c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905082811015610e09576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e0090613372565b60405180910390fd5b610e1d85610e1561193c565b858403611944565b60019150509392505050565b60006012905090565b6000610ed4610e3f61193c565b848460016000610e4d61193c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610ecf91906133c1565b611944565b6001905092915050565b7f000000000000000000000000e07e1754a0655dbf94f87336f72faeb56f590f9d81565b601260159054906101000a900460ff1681565b60075481565b6000601360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b60085481565b600d5481565b610f8561193c565b73ffffffffffffffffffffffffffffffffffffffff16610fa361115d565b73ffffffffffffffffffffffffffffffffffffffff1614610ff9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ff090613208565b60405180910390fd5b600561100e8284611b0d90919063ffffffff16565b111561104f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161104690613274565b60405180910390fd5b81600b8190555080600c819055505050565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6110b161193c565b73ffffffffffffffffffffffffffffffffffffffff166110cf61115d565b73ffffffffffffffffffffffffffffffffffffffff1614611125576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161111c90613208565b60405180910390fd5b61112f60006123dd565b565b600c5481565b601260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b601160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6111b561193c565b73ffffffffffffffffffffffffffffffffffffffff166111d361115d565b73ffffffffffffffffffffffffffffffffffffffff1614611229576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161122090613208565b60405180910390fd5b60006010549050816010819055506112536101f4611245610c67565b611b2390919063ffffffff16565b6010541015611297576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161128e906132e0565b60405180910390fd5b7f0a7c714b6801281a6e2610a6371ac6a5da9a5947616d74f4aa3ad1d289278e7381836040516112c89291906133f5565b60405180910390a15050565b6060600480546112e39061318b565b80601f016020809104026020016040519081016040528092919081815260200182805461130f9061318b565b801561135c5780601f106113315761010080835404028352916020019161135c565b820191906000526020600020905b81548152906001019060200180831161133f57829003601f168201915b5050505050905090565b6000806001600061137561193c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905082811015611432576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161142990613490565b60405180910390fd5b61144661143d61193c565b85858403611944565b600191505092915050565b600061146561145e61193c565b8484611b39565b6001905092915050565b600b5481565b61147d61193c565b73ffffffffffffffffffffffffffffffffffffffff1661149b61115d565b73ffffffffffffffffffffffffffffffffffffffff16146114f1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114e890613208565b60405180910390fd5b801515601360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615150361154d57600080fd5b80601360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7826040516115ea9190612e0b565b60405180910390a25050565b6115fe61193c565b73ffffffffffffffffffffffffffffffffffffffff1661161c61115d565b73ffffffffffffffffffffffffffffffffffffffff1614611672576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161166990613208565b60405180910390fd5b80601260156101000a81548160ff0219169083151502179055507f53726dfcaf90650aa7eb35524f4d3220f07413c8d6cb404cc8c18bf5591bc159816040516116bb9190612e0b565b60405180910390a150565b60095481565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b600f5481565b60105481565b61176761193c565b73ffffffffffffffffffffffffffffffffffffffff1661178561115d565b73ffffffffffffffffffffffffffffffffffffffff16146117db576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117d290613208565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff160361184a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161184190613522565b60405180910390fd5b611853816123dd565b50565b61185e61193c565b73ffffffffffffffffffffffffffffffffffffffff1661187c61115d565b73ffffffffffffffffffffffffffffffffffffffff16146118d2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118c990613208565b60405180910390fd5b80600d819055506118f56101f46118e7610c67565b611b2390919063ffffffff16565b600d541015611939576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611930906132e0565b60405180910390fd5b50565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036119b3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119aa906135b4565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611a22576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a1990613646565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92583604051611b009190612c54565b60405180910390a3505050565b60008183611b1b91906133c1565b905092915050565b60008183611b319190613695565b905092915050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611ba8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b9f90613738565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611c17576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c0e906137ca565b60405180910390fd5b60008103611c3057611c2b838360006124a3565b6123d8565b7f000000000000000000000000e07e1754a0655dbf94f87336f72faeb56f590f9d73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16148015611cd55750601360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b8015611d2b5750601360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15611d8f576000611d3b83611061565b90506010548282611d4c91906133c1565b1115611d8d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d849061385c565b60405180910390fd5b505b601360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16158015611e335750601360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b8015611e8a57507f000000000000000000000000e07e1754a0655dbf94f87336f72faeb56f590f9d73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16145b15611ed557600d54811115611ed4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ecb906138ee565b60405180910390fd5b5b601360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16158015611f795750601360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b8015611fd057507f000000000000000000000000e07e1754a0655dbf94f87336f72faeb56f590f9d73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16145b1561201b57600e5481111561201a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161201190613980565b60405180910390fd5b5b601260149054906101000a900460ff1615801561208357507f000000000000000000000000e07e1754a0655dbf94f87336f72faeb56f590f9d73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16145b801561209b5750601260159054906101000a900460ff165b80156120ba5750600f546008541015806120b95750600f5460075410155b5b156120c8576120c7612722565b5b601360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615801561216c5750601360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b156123cc5760008060007f000000000000000000000000e07e1754a0655dbf94f87336f72faeb56f590f9d73ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff160361227e576000600a541115612223576121fc60646121ee600a54876128a690919063ffffffff16565b611b2390919063ffffffff16565b9250826008600082825461221091906133c1565b925050819055506122228630856124a3565b5b6000600954111561227d576122566064612248600954876128a690919063ffffffff16565b611b2390919063ffffffff16565b9150816007600082825461226a91906133c1565b9250508190555061227c8630846124a3565b5b5b7f000000000000000000000000e07e1754a0655dbf94f87336f72faeb56f590f9d73ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff160361238f576000600b54111561232b5761230460646122f6600b54876128a690919063ffffffff16565b611b2390919063ffffffff16565b9250826008600082825461231891906133c1565b9250508190555061232a8630856124a3565b5b6000600c54111561238e5761235e6064612350600c54876128a690919063ffffffff16565b611b2390919063ffffffff16565b905061238d86601260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16836124a3565b5b5b6123c66123b7826123a98587611b0d90919063ffffffff16565b611b0d90919063ffffffff16565b856128bc90919063ffffffff16565b93505050505b6123d78383836124a3565b5b505050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612512576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161250990613738565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612581576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612578906137ca565b60405180910390fd5b61258c8383836128d2565b60008060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015612612576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161260990613a12565b60405180910390fd5b8181036000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546126a591906133c1565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516127099190612c54565b60405180910390a361271c8484846128d7565b50505050565b6001601260146101000a81548160ff021916908315150217905550600061274830611061565b9050600f54600754101580156127605750600f548110155b1561282357600061277d6002600f54611b2390919063ffffffff16565b9050600061279682600f546128bc90919063ffffffff16565b905060004790506127a783306128dc565b60006127bc82476128bc90919063ffffffff16565b90506127c88382612b56565b7f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb5618482856040516127fb93929190613a32565b60405180910390a1600f54600760008282546128179190613a69565b92505081905550505050505b600f54600854101580156128395750600f548110155b156128885761286c600f54601160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166128dc565b600f54600860008282546128809190613a69565b925050819055505b506000601260146101000a81548160ff021916908315150217905550565b600081836128b49190613a9d565b905092915050565b600081836128ca9190613a69565b905092915050565b505050565b505050565b6000600267ffffffffffffffff8111156128f9576128f8613adf565b5b6040519080825280602002602001820160405280156129275781602001602082028036833780820191505090505b509050308160008151811061293f5761293e613b0e565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa1580156129e6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612a0a9190613b52565b81600181518110612a1e57612a1d613b0e565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505082612a8530600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166116cc565b1015612abb57612aba30600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600019611944565b5b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663791ac9478460008486426040518663ffffffff1660e01b8152600401612b1f959493929190613c78565b600060405180830381600087803b158015612b3957600080fd5b505af1158015612b4d573d6000803e3d6000fd5b50505050505050565b612b8330600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1684611944565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f305d719823085600080612bcf61115d565b426040518863ffffffff1660e01b8152600401612bf196959493929190613cd2565b60606040518083038185885af1158015612c0f573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190612c349190613d48565b5050505050565b6000819050919050565b612c4e81612c3b565b82525050565b6000602082019050612c696000830184612c45565b92915050565b600081519050919050565b600082825260208201905092915050565b60005b83811015612ca9578082015181840152602081019050612c8e565b60008484015250505050565b6000601f19601f8301169050919050565b6000612cd182612c6f565b612cdb8185612c7a565b9350612ceb818560208601612c8b565b612cf481612cb5565b840191505092915050565b60006020820190508181036000830152612d198184612cc6565b905092915050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000612d5182612d26565b9050919050565b612d6181612d46565b8114612d6c57600080fd5b50565b600081359050612d7e81612d58565b92915050565b612d8d81612c3b565b8114612d9857600080fd5b50565b600081359050612daa81612d84565b92915050565b60008060408385031215612dc757612dc6612d21565b5b6000612dd585828601612d6f565b9250506020612de685828601612d9b565b9150509250929050565b60008115159050919050565b612e0581612df0565b82525050565b6000602082019050612e206000830184612dfc565b92915050565b600060208284031215612e3c57612e3b612d21565b5b6000612e4a84828501612d9b565b91505092915050565b60008060408385031215612e6a57612e69612d21565b5b6000612e7885828601612d9b565b9250506020612e8985828601612d9b565b9150509250929050565b6000819050919050565b6000612eb8612eb3612eae84612d26565b612e93565b612d26565b9050919050565b6000612eca82612e9d565b9050919050565b6000612edc82612ebf565b9050919050565b612eec81612ed1565b82525050565b6000602082019050612f076000830184612ee3565b92915050565b6000612f1882612d26565b9050919050565b612f2881612f0d565b8114612f3357600080fd5b50565b600081359050612f4581612f1f565b92915050565b600060208284031215612f6157612f60612d21565b5b6000612f6f84828501612f36565b91505092915050565b600080600060608486031215612f9157612f90612d21565b5b6000612f9f86828701612d6f565b9350506020612fb086828701612d6f565b9250506040612fc186828701612d9b565b9150509250925092565b600060ff82169050919050565b612fe181612fcb565b82525050565b6000602082019050612ffc6000830184612fd8565b92915050565b61300b81612d46565b82525050565b60006020820190506130266000830184613002565b92915050565b60006020828403121561304257613041612d21565b5b600061305084828501612d6f565b91505092915050565b61306281612f0d565b82525050565b600060208201905061307d6000830184613059565b92915050565b61308c81612df0565b811461309757600080fd5b50565b6000813590506130a981613083565b92915050565b600080604083850312156130c6576130c5612d21565b5b60006130d485828601612d6f565b92505060206130e58582860161309a565b9150509250929050565b60006020828403121561310557613104612d21565b5b60006131138482850161309a565b91505092915050565b6000806040838503121561313357613132612d21565b5b600061314185828601612d6f565b925050602061315285828601612d6f565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806131a357607f821691505b6020821081036131b6576131b561315c565b5b50919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b60006131f2602083612c7a565b91506131fd826131bc565b602082019050919050565b60006020820190508181036000830152613221816131e5565b9050919050565b7f74617820746f6f20686967680000000000000000000000000000000000000000600082015250565b600061325e600c83612c7a565b915061326982613228565b602082019050919050565b6000602082019050818103600083015261328d81613251565b9050919050565b7f76616c756520746f6f206c6f7700000000000000000000000000000000000000600082015250565b60006132ca600d83612c7a565b91506132d582613294565b602082019050919050565b600060208201905081810360008301526132f9816132bd565b9050919050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206160008201527f6c6c6f77616e6365000000000000000000000000000000000000000000000000602082015250565b600061335c602883612c7a565b915061336782613300565b604082019050919050565b6000602082019050818103600083015261338b8161334f565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60006133cc82612c3b565b91506133d783612c3b565b92508282019050808211156133ef576133ee613392565b5b92915050565b600060408201905061340a6000830185612c45565b6134176020830184612c45565b9392505050565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760008201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b600061347a602583612c7a565b91506134858261341e565b604082019050919050565b600060208201905081810360008301526134a98161346d565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b600061350c602683612c7a565b9150613517826134b0565b604082019050919050565b6000602082019050818103600083015261353b816134ff565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b600061359e602483612c7a565b91506135a982613542565b604082019050919050565b600060208201905081810360008301526135cd81613591565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b6000613630602283612c7a565b915061363b826135d4565b604082019050919050565b6000602082019050818103600083015261365f81613623565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b60006136a082612c3b565b91506136ab83612c3b565b9250826136bb576136ba613666565b5b828204905092915050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b6000613722602583612c7a565b915061372d826136c6565b604082019050919050565b6000602082019050818103600083015261375181613715565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b60006137b4602383612c7a565b91506137bf82613758565b604082019050919050565b600060208201905081810360008301526137e3816137a7565b9050919050565b7f45786365656473206d6178696d756d2077616c6c657420746f6b656e20616d6f60008201527f756e742e00000000000000000000000000000000000000000000000000000000602082015250565b6000613846602483612c7a565b9150613851826137ea565b604082019050919050565b6000602082019050818103600083015261387581613839565b9050919050565b7f616d6f756e74206578636565647320746865206d61784275795472616e73616360008201527f74696f6e416d6f756e742e000000000000000000000000000000000000000000602082015250565b60006138d8602b83612c7a565b91506138e38261387c565b604082019050919050565b60006020820190508181036000830152613907816138cb565b9050919050565b7f616d6f756e74206578636565647320746865206d617853656c6c5472616e736160008201527f6374696f6e416d6f756e742e0000000000000000000000000000000000000000602082015250565b600061396a602c83612c7a565b91506139758261390e565b604082019050919050565b600060208201905081810360008301526139998161395d565b9050919050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206260008201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b60006139fc602683612c7a565b9150613a07826139a0565b604082019050919050565b60006020820190508181036000830152613a2b816139ef565b9050919050565b6000606082019050613a476000830186612c45565b613a546020830185612c45565b613a616040830184612c45565b949350505050565b6000613a7482612c3b565b9150613a7f83612c3b565b9250828203905081811115613a9757613a96613392565b5b92915050565b6000613aa882612c3b565b9150613ab383612c3b565b9250828202613ac181612c3b565b91508282048414831517613ad857613ad7613392565b5b5092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600081519050613b4c81612d58565b92915050565b600060208284031215613b6857613b67612d21565b5b6000613b7684828501613b3d565b91505092915050565b6000819050919050565b6000613ba4613b9f613b9a84613b7f565b612e93565b612c3b565b9050919050565b613bb481613b89565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b613bef81612d46565b82525050565b6000613c018383613be6565b60208301905092915050565b6000602082019050919050565b6000613c2582613bba565b613c2f8185613bc5565b9350613c3a83613bd6565b8060005b83811015613c6b578151613c528882613bf5565b9750613c5d83613c0d565b925050600181019050613c3e565b5085935050505092915050565b600060a082019050613c8d6000830188612c45565b613c9a6020830187613bab565b8181036040830152613cac8186613c1a565b9050613cbb6060830185613002565b613cc86080830184612c45565b9695505050505050565b600060c082019050613ce76000830189613002565b613cf46020830188612c45565b613d016040830187613bab565b613d0e6060830186613bab565b613d1b6080830185613002565b613d2860a0830184612c45565b979650505050505050565b600081519050613d4281612d84565b92915050565b600080600060608486031215613d6157613d60612d21565b5b6000613d6f86828701613d33565b9350506020613d8086828701613d33565b9250506040613d9186828701613d33565b915050925092509256fea2646970667358221220ccc045fa874ae2a2806a1b9980bbeadc166f9c21ecff3010f5e430bbd01421c464736f6c63430008110033

Deployed Bytecode Sourcemap

25657:9717:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25951:29;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26133:64;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3815:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5221:169;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;34587:116;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;33317:210;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;34101:221;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;25746:41;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4403:108;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33754:113;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;5456:492;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4245:93;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;6066:215;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25794:38;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26538:40;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25841:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;34715:125;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25878:24;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26063:63;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33535:211;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;4574:127;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2575:94;;;;;;;;;;;;;:::i;:::-;;26026:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26423:70;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2089:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26330:86;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;35031:290;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;4034:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;6399:413;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4771:175;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25988:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;34334:245;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;34852:171;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;25909:34;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5009:151;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26204:56;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26267:54;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2824:192;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;33875:218;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;25951:29;;;;:::o;26133:64::-;;;;:::o;3815:100::-;3869:13;3902:5;3895:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3815:100;:::o;5221:169::-;5304:4;5321:39;5330:12;:10;:12::i;:::-;5344:7;5353:6;5321:8;:39::i;:::-;5378:4;5371:11;;5221:169;;;;:::o;34587:116::-;2320:12;:10;:12::i;:::-;2309:23;;:7;:5;:7::i;:::-;:23;;;2301:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;34687:8:::1;34666:18;:29;;;;34587:116:::0;:::o;33317:210::-;2320:12;:10;:12::i;:::-;2309:23;;:7;:5;:7::i;:::-;:23;;;2301:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;33435:1:::1;33411:20;33423:7;33411;:11;;:20;;;;:::i;:::-;:25;;33403:50;;;;;;;;;;;;:::i;:::-;;;;;;;;;33482:7;33464:15;:25;;;;33512:7;33500:9;:19;;;;33317:210:::0;;:::o;34101:221::-;2320:12;:10;:12::i;:::-;2309:23;;:7;:5;:7::i;:::-;:23;;;2301:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;34215:12:::1;34188:24;:39;;;;34274:22;34292:3;34274:13;:11;:13::i;:::-;:17;;:22;;;;:::i;:::-;34246:24;;:50;;34238:76;;;;;;;;;;;;:::i;:::-;;;;;;;;;34101:221:::0;:::o;25746:41::-;;;;;;;;;;;;;:::o;4403:108::-;4464:7;4491:12;;4484:19;;4403:108;:::o;33754:113::-;2320:12;:10;:12::i;:::-;2309:23;;:7;:5;:7::i;:::-;:23;;;2301:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;33849:10:::1;33837:9;;:22;;;;;;;;;;;;;;;;;;33754:113:::0;:::o;5456:492::-;5596:4;5613:36;5623:6;5631:9;5642:6;5613:9;:36::i;:::-;5662:24;5689:11;:19;5701:6;5689:19;;;;;;;;;;;;;;;:33;5709:12;:10;:12::i;:::-;5689:33;;;;;;;;;;;;;;;;5662:60;;5761:6;5741:16;:26;;5733:79;;;;;;;;;;;;:::i;:::-;;;;;;;;;5848:57;5857:6;5865:12;:10;:12::i;:::-;5898:6;5879:16;:25;5848:8;:57::i;:::-;5936:4;5929:11;;;5456:492;;;;;:::o;4245:93::-;4303:5;4328:2;4321:9;;4245:93;:::o;6066:215::-;6154:4;6171:80;6180:12;:10;:12::i;:::-;6194:7;6240:10;6203:11;:25;6215:12;:10;:12::i;:::-;6203:25;;;;;;;;;;;;;;;:34;6229:7;6203:34;;;;;;;;;;;;;;;;:47;;;;:::i;:::-;6171:8;:80::i;:::-;6269:4;6262:11;;6066:215;;;;:::o;25794:38::-;;;:::o;26538:40::-;;;;;;;;;;;;;:::o;25841:30::-;;;;:::o;34715:125::-;34780:4;34804:19;:28;34824:7;34804:28;;;;;;;;;;;;;;;;;;;;;;;;;34797:35;;34715:125;;;:::o;25878:24::-;;;;:::o;26063:63::-;;;;:::o;33535:211::-;2320:12;:10;:12::i;:::-;2309:23;;:7;:5;:7::i;:::-;:23;;;2301:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;33656:1:::1;33631:21;33643:8;33631:7;:11;;:21;;;;:::i;:::-;:26;;33623:51;;;;;;;;;;;;:::i;:::-;;;;;;;;;33698:7;33685:10;:20;;;;33730:8;33716:11;:22;;;;33535:211:::0;;:::o;4574:127::-;4648:7;4675:9;:18;4685:7;4675:18;;;;;;;;;;;;;;;;4668:25;;4574:127;;;:::o;2575:94::-;2320:12;:10;:12::i;:::-;2309:23;;:7;:5;:7::i;:::-;:23;;;2301:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;2640:21:::1;2658:1;2640:9;:21::i;:::-;2575:94::o:0;26026:30::-;;;;:::o;26423:70::-;;;;;;;;;;;;;:::o;2089:87::-;2135:7;2162:6;;;;;;;;;;;2155:13;;2089:87;:::o;26330:86::-;;;;;;;;;;;;;:::o;35031:290::-;2320:12;:10;:12::i;:::-;2309:23;;:7;:5;:7::i;:::-;:23;;;2301:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;35107:17:::1;35127:14;;35107:34;;35168:9;35151:14;:26;;;;35214:22;35232:3;35214:13;:11;:13::i;:::-;:17;;:22;;;;:::i;:::-;35196:14;;:40;;35188:66;;;;;;;;;;;;:::i;:::-;;;;;;;;;35270:44;35293:9;35304;35270:44;;;;;;;:::i;:::-;;;;;;;;35096:225;35031:290:::0;:::o;4034:104::-;4090:13;4123:7;4116:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4034:104;:::o;6399:413::-;6492:4;6509:24;6536:11;:25;6548:12;:10;:12::i;:::-;6536:25;;;;;;;;;;;;;;;:34;6562:7;6536:34;;;;;;;;;;;;;;;;6509:61;;6609:15;6589:16;:35;;6581:85;;;;;;;;;;;;:::i;:::-;;;;;;;;;6702:67;6711:12;:10;:12::i;:::-;6725:7;6753:15;6734:16;:34;6702:8;:67::i;:::-;6800:4;6793:11;;;6399:413;;;;:::o;4771:175::-;4857:4;4874:42;4884:12;:10;:12::i;:::-;4898:9;4909:6;4874:9;:42::i;:::-;4934:4;4927:11;;4771:175;;;;:::o;25988:30::-;;;;:::o;34334:245::-;2320:12;:10;:12::i;:::-;2309:23;;:7;:5;:7::i;:::-;:23;;;2301:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;34459:8:::1;34427:40;;:19;:28;34447:7;34427:28;;;;;;;;;;;;;;;;;;;;;;;;;:40;;::::0;34419:50:::1;;;::::0;::::1;;34511:8;34480:19;:28;34500:7;34480:28;;;;;;;;;;;;;;;;:39;;;;;;;;;;;;;;;;;;34553:7;34537:34;;;34562:8;34537:34;;;;;;:::i;:::-;;;;;;;;34334:245:::0;;:::o;34852:171::-;2320:12;:10;:12::i;:::-;2309:23;;:7;:5;:7::i;:::-;:23;;;2301:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;34953:8:::1;34929:21;;:32;;;;;;;;;;;;;;;;;;34977:38;35006:8;34977:38;;;;;;:::i;:::-;;;;;;;;34852:171:::0;:::o;25909:34::-;;;;:::o;5009:151::-;5098:7;5125:11;:18;5137:5;5125:18;;;;;;;;;;;;;;;:27;5144:7;5125:27;;;;;;;;;;;;;;;;5118:34;;5009:151;;;;:::o;26204:56::-;;;;:::o;26267:54::-;;;;:::o;2824:192::-;2320:12;:10;:12::i;:::-;2309:23;;:7;:5;:7::i;:::-;:23;;;2301:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;2933:1:::1;2913:22;;:8;:22;;::::0;2905:73:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;2989:19;2999:8;2989:9;:19::i;:::-;2824:192:::0;:::o;33875:218::-;2320:12;:10;:12::i;:::-;2309:23;;:7;:5;:7::i;:::-;:23;;;2301:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;33987:12:::1;33961:23;:38;;;;34045:22;34063:3;34045:13;:11;:13::i;:::-;:17;;:22;;;;:::i;:::-;34018:23;;:49;;34010:75;;;;;;;;;;;;:::i;:::-;;;;;;;;;33875:218:::0;:::o;1281:98::-;1334:7;1361:10;1354:17;;1281:98;:::o;8305:380::-;8458:1;8441:19;;:5;:19;;;8433:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;8539:1;8520:21;;:7;:21;;;8512:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;8623:6;8593:11;:18;8605:5;8593:18;;;;;;;;;;;;;;;:27;8612:7;8593:27;;;;;;;;;;;;;;;:36;;;;8661:7;8645:32;;8654:5;8645:32;;;8670:6;8645:32;;;;;;:::i;:::-;;;;;;;;8305:380;;;:::o;18095:98::-;18153:7;18184:1;18180;:5;;;;:::i;:::-;18173:12;;18095:98;;;;:::o;18831:::-;18889:7;18920:1;18916;:5;;;;:::i;:::-;18909:12;;18831:98;;;;:::o;28139:2767::-;28287:1;28271:18;;:4;:18;;;28263:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;28364:1;28350:16;;:2;:16;;;28342:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;28439:1;28429:6;:11;28426:92;;28457:28;28473:4;28479:2;28483:1;28457:15;:28::i;:::-;28500:7;;28426:92;28540:13;28534:19;;:4;:19;;;:49;;;;;28558:19;:25;28578:4;28558:25;;;;;;;;;;;;;;;;;;;;;;;;;28557:26;28534:49;:77;;;;;28588:19;:23;28608:2;28588:23;;;;;;;;;;;;;;;;;;;;;;;;;28587:24;28534:77;28530:273;;;28628:32;28663:13;28673:2;28663:9;:13::i;:::-;28628:48;;28736:14;;28726:6;28699:24;:33;;;;:::i;:::-;:51;;28691:100;;;;;;;;;;;;:::i;:::-;;;;;;;;;28613:190;28530:273;28819:19;:25;28839:4;28819:25;;;;;;;;;;;;;;;;;;;;;;;;;28818:26;:54;;;;;28849:19;:23;28869:2;28849:23;;;;;;;;;;;;;;;;;;;;;;;;;28848:24;28818:54;:77;;;;;28882:13;28876:19;;:4;:19;;;28818:77;28815:197;;;28929:23;;28919:6;:33;;28911:89;;;;;;;;;;;;:::i;:::-;;;;;;;;;28815:197;29028:19;:25;29048:4;29028:25;;;;;;;;;;;;;;;;;;;;;;;;;29027:26;:54;;;;;29058:19;:23;29078:2;29058:23;;;;;;;;;;;;;;;;;;;;;;;;;29057:24;29027:54;:75;;;;;29089:13;29085:17;;:2;:17;;;29027:75;29024:197;;;29136:24;;29126:6;:34;;29118:91;;;;;;;;;;;;:::i;:::-;;;;;;;;;29024:197;29241:16;;;;;;;;;;;29240:17;:38;;;;;29265:13;29261:17;;:2;:17;;;29240:38;:77;;;;;29296:21;;;;;;;;;;;29240:77;:182;;;;;29349:18;;29336:9;;:31;;:85;;;;29403:18;;29384:15;;:37;;29336:85;29240:182;29237:239;;;29448:16;:14;:16::i;:::-;29237:239;29507:19;:25;29527:4;29507:25;;;;;;;;;;;;;;;;;;;;;;;;;29506:26;:54;;;;;29537:19;:23;29557:2;29537:23;;;;;;;;;;;;;;;;;;;;;;;;;29536:24;29506:54;29503:1348;;;29577:16;29608:22;29645:17;29700:13;29694:19;;:4;:19;;;29691:564;;29767:1;29755:9;;:13;29752:215;;;29804:30;29830:3;29804:21;29815:9;;29804:6;:10;;:21;;;;:::i;:::-;:25;;:30;;;;:::i;:::-;29793:41;;29870:8;29857:9;;:21;;;;;;;:::i;:::-;;;;;;;;29901:46;29917:4;29931;29938:8;29901:15;:46::i;:::-;29752:215;30008:1;29990:15;;:19;29987:251;;;30051:36;30083:3;30051:27;30062:15;;30051:6;:10;;:27;;;;:::i;:::-;:31;;:36;;;;:::i;:::-;30034:53;;30129:14;30110:15;;:33;;;;;;;:::i;:::-;;;;;;;;30166:52;30182:4;30196;30203:14;30166:15;:52::i;:::-;29987:251;29691:564;30278:13;30274:17;;:2;:17;;;30271:486;;30345:1;30332:10;;:14;30329:217;;;30382:31;30409:3;30382:22;30393:10;;30382:6;:10;;:22;;;;:::i;:::-;:26;;:31;;;;:::i;:::-;30371:42;;30449:8;30436:9;;:21;;;;;;;:::i;:::-;;;;;;;;30480:46;30496:4;30510;30517:8;30480:15;:46::i;:::-;30329:217;30583:1;30569:11;;:15;30566:174;;;30621:32;30649:3;30621:23;30632:11;;30621:6;:10;;:23;;;;:::i;:::-;:27;;:32;;;;:::i;:::-;30609:44;;30676;30692:4;30698:10;;;;;;;;;;;30710:9;30676:15;:44::i;:::-;30566:174;30271:486;30782:55;30793:43;30826:9;30793:28;30806:14;30793:8;:12;;:28;;;;:::i;:::-;:32;;:43;;;;:::i;:::-;30782:6;:10;;:55;;;;:::i;:::-;30773:64;;29562:1289;;;29503:1348;30863:33;30879:4;30885:2;30889:6;30863:15;:33::i;:::-;28139:2767;;;;:::o;3024:173::-;3080:16;3099:6;;;;;;;;;;;3080:25;;3125:8;3116:6;;:17;;;;;;;;;;;;;;;;;;3180:8;3149:40;;3170:8;3149:40;;;;;;;;;;;;3069:128;3024:173;:::o;6914:733::-;7072:1;7054:20;;:6;:20;;;7046:70;;;;;;;;;;;;:::i;:::-;;;;;;;;;7156:1;7135:23;;:9;:23;;;7127:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;7211:47;7232:6;7240:9;7251:6;7211:20;:47::i;:::-;7271:21;7295:9;:17;7305:6;7295:17;;;;;;;;;;;;;;;;7271:41;;7348:6;7331:13;:23;;7323:74;;;;;;;;;;;;:::i;:::-;;;;;;;;;7469:6;7453:13;:22;7433:9;:17;7443:6;7433:17;;;;;;;;;;;;;;;:42;;;;7521:6;7497:9;:20;7507:9;7497:20;;;;;;;;;;;;;;;;:30;;;;;;;:::i;:::-;;;;;;;;7562:9;7545:35;;7554:6;7545:35;;;7573:6;7545:35;;;;;;:::i;:::-;;;;;;;;7593:46;7613:6;7621:9;7632:6;7593:19;:46::i;:::-;7035:612;6914:733;;;:::o;30914:1171::-;27205:4;27186:16;;:23;;;;;;;;;;;;;;;;;;30971:28:::1;31002:24;31020:4;31002:9;:24::i;:::-;30971:55;;31059:18;;31040:15;;:37;;:83;;;;;31105:18;;31081:20;:42;;31040:83;31037:825;;;31195:12;31210:25;31233:1;31210:18;;:22;;:25;;;;:::i;:::-;31195:40;;31250:17;31270:28;31293:4;31270:18;;:22;;:28;;;;:::i;:::-;31250:48;;31375:22;31400:21;31375:46;;31474:37;31491:4;31505;31474:16;:37::i;:::-;31580:18;31601:41;31627:14;31601:21;:25;;:41;;;;:::i;:::-;31580:62;;31700:35;31713:9;31724:10;31700:12;:35::i;:::-;31755:43;31770:4;31776:10;31788:9;31755:43;;;;;;;;:::i;:::-;;;;;;;;31832:18;;31813:15;;:37;;;;;;;:::i;:::-;;;;;;;;31125:737;;;;31037:825;31890:18;;31877:9;;:31;;:77;;;;;31936:18;;31912:20;:42;;31877:77;31874:202;;;31971:47;31988:18;;32008:9;;;;;;;;;;;31971:16;:47::i;:::-;32046:18;;32033:9;;:31;;;;;;;:::i;:::-;;;;;;;;31874:202;30960:1125;27251:5:::0;27232:16;;:24;;;;;;;;;;;;;;;;;;30914:1171::o;18564:98::-;18622:7;18653:1;18649;:5;;;;:::i;:::-;18642:12;;18564:98;;;;:::o;18343:::-;18401:7;18432:1;18428;:5;;;;:::i;:::-;18421:12;;18343:98;;;;:::o;8818:125::-;;;;:::o;9075:124::-;;;;:::o;32614:695::-;32753:21;32791:1;32777:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;32753:40;;32822:4;32804;32809:1;32804:7;;;;;;;;:::i;:::-;;;;;;;:23;;;;;;;;;;;32848:15;;;;;;;;;;;:20;;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;32838:4;32843:1;32838:7;;;;;;;;:::i;:::-;;;;;;;:32;;;;;;;;;;;32939:11;32886:50;32904:4;32919:15;;;;;;;;;;;32886:9;:50::i;:::-;:64;32883:156;;;32965:62;32982:4;32997:15;;;;;;;;;;;33024:1;33015:11;32965:8;:62::i;:::-;32883:156;33077:15;;;;;;;;;;;:66;;;33158:11;33184:1;33228:4;33247:3;33265:15;33077:214;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;32682:627;32614:695;;:::o;32093:513::-;32241:62;32258:4;32273:15;;;;;;;;;;;32291:11;32241:8;:62::i;:::-;32346:15;;;;;;;;;;;:31;;;32385:9;32418:4;32438:11;32464:1;32507;32550:7;:5;:7::i;:::-;32572:15;32346:252;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;32093:513;;:::o;7:77:1:-;44:7;73:5;62:16;;7:77;;;:::o;90:118::-;177:24;195:5;177:24;:::i;:::-;172:3;165:37;90:118;;:::o;214:222::-;307:4;345:2;334:9;330:18;322:26;;358:71;426:1;415:9;411:17;402:6;358:71;:::i;:::-;214:222;;;;:::o;442:99::-;494:6;528:5;522:12;512:22;;442:99;;;:::o;547:169::-;631:11;665:6;660:3;653:19;705:4;700:3;696:14;681:29;;547:169;;;;:::o;722:246::-;803:1;813:113;827:6;824:1;821:13;813:113;;;912:1;907:3;903:11;897:18;893:1;888:3;884:11;877:39;849:2;846:1;842:10;837:15;;813:113;;;960:1;951:6;946:3;942:16;935:27;784:184;722:246;;;:::o;974:102::-;1015:6;1066:2;1062:7;1057:2;1050:5;1046:14;1042:28;1032:38;;974:102;;;:::o;1082:377::-;1170:3;1198:39;1231:5;1198:39;:::i;:::-;1253:71;1317:6;1312:3;1253:71;:::i;:::-;1246:78;;1333:65;1391:6;1386:3;1379:4;1372:5;1368:16;1333:65;:::i;:::-;1423:29;1445:6;1423:29;:::i;:::-;1418:3;1414:39;1407:46;;1174:285;1082:377;;;;:::o;1465:313::-;1578:4;1616:2;1605:9;1601:18;1593:26;;1665:9;1659:4;1655:20;1651:1;1640:9;1636:17;1629:47;1693:78;1766:4;1757:6;1693:78;:::i;:::-;1685:86;;1465:313;;;;:::o;1865:117::-;1974:1;1971;1964:12;2111:126;2148:7;2188:42;2181:5;2177:54;2166:65;;2111:126;;;:::o;2243:96::-;2280:7;2309:24;2327:5;2309:24;:::i;:::-;2298:35;;2243:96;;;:::o;2345:122::-;2418:24;2436:5;2418:24;:::i;:::-;2411:5;2408:35;2398:63;;2457:1;2454;2447:12;2398:63;2345:122;:::o;2473:139::-;2519:5;2557:6;2544:20;2535:29;;2573:33;2600:5;2573:33;:::i;:::-;2473:139;;;;:::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:329::-;3857:6;3906:2;3894:9;3885:7;3881:23;3877:32;3874:119;;;3912:79;;:::i;:::-;3874:119;4032:1;4057:53;4102:7;4093:6;4082:9;4078:22;4057:53;:::i;:::-;4047:63;;4003:117;3798:329;;;;:::o;4133:474::-;4201:6;4209;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;4511:2;4537:53;4582:7;4573:6;4562:9;4558:22;4537:53;:::i;:::-;4527:63;;4482:118;4133:474;;;;;:::o;4613:60::-;4641:3;4662:5;4655:12;;4613:60;;;:::o;4679:142::-;4729:9;4762:53;4780:34;4789:24;4807:5;4789:24;:::i;:::-;4780:34;:::i;:::-;4762:53;:::i;:::-;4749:66;;4679:142;;;:::o;4827:126::-;4877:9;4910:37;4941:5;4910:37;:::i;:::-;4897:50;;4827:126;;;:::o;4959:153::-;5036:9;5069:37;5100:5;5069:37;:::i;:::-;5056:50;;4959:153;;;:::o;5118:185::-;5232:64;5290:5;5232:64;:::i;:::-;5227:3;5220:77;5118:185;;:::o;5309:276::-;5429:4;5467:2;5456:9;5452:18;5444:26;;5480:98;5575:1;5564:9;5560:17;5551:6;5480:98;:::i;:::-;5309:276;;;;:::o;5591:104::-;5636:7;5665:24;5683:5;5665:24;:::i;:::-;5654:35;;5591:104;;;:::o;5701:138::-;5782:32;5808:5;5782:32;:::i;:::-;5775:5;5772:43;5762:71;;5829:1;5826;5819:12;5762:71;5701:138;:::o;5845:155::-;5899:5;5937:6;5924:20;5915:29;;5953:41;5988:5;5953:41;:::i;:::-;5845:155;;;;:::o;6006:345::-;6073:6;6122:2;6110:9;6101:7;6097:23;6093:32;6090:119;;;6128:79;;:::i;:::-;6090:119;6248:1;6273:61;6326:7;6317:6;6306:9;6302:22;6273:61;:::i;:::-;6263:71;;6219:125;6006:345;;;;:::o;6357:619::-;6434:6;6442;6450;6499:2;6487:9;6478:7;6474:23;6470:32;6467:119;;;6505:79;;:::i;:::-;6467:119;6625:1;6650:53;6695:7;6686:6;6675:9;6671:22;6650:53;:::i;:::-;6640:63;;6596:117;6752:2;6778:53;6823:7;6814:6;6803:9;6799:22;6778:53;:::i;:::-;6768:63;;6723:118;6880:2;6906:53;6951:7;6942:6;6931:9;6927:22;6906:53;:::i;:::-;6896:63;;6851:118;6357:619;;;;;:::o;6982:86::-;7017:7;7057:4;7050:5;7046:16;7035:27;;6982:86;;;:::o;7074:112::-;7157:22;7173:5;7157:22;:::i;:::-;7152:3;7145:35;7074:112;;:::o;7192:214::-;7281:4;7319:2;7308:9;7304:18;7296:26;;7332:67;7396:1;7385:9;7381:17;7372:6;7332:67;:::i;:::-;7192:214;;;;:::o;7412:118::-;7499:24;7517:5;7499:24;:::i;:::-;7494:3;7487:37;7412:118;;:::o;7536:222::-;7629:4;7667:2;7656:9;7652:18;7644:26;;7680:71;7748:1;7737:9;7733:17;7724:6;7680:71;:::i;:::-;7536:222;;;;:::o;7764:329::-;7823:6;7872:2;7860:9;7851:7;7847:23;7843:32;7840:119;;;7878:79;;:::i;:::-;7840:119;7998:1;8023:53;8068:7;8059:6;8048:9;8044:22;8023:53;:::i;:::-;8013:63;;7969:117;7764:329;;;;:::o;8099:142::-;8202:32;8228:5;8202:32;:::i;:::-;8197:3;8190:45;8099:142;;:::o;8247:254::-;8356:4;8394:2;8383:9;8379:18;8371:26;;8407:87;8491:1;8480:9;8476:17;8467:6;8407:87;:::i;:::-;8247:254;;;;:::o;8507:116::-;8577:21;8592:5;8577:21;:::i;:::-;8570:5;8567:32;8557:60;;8613:1;8610;8603:12;8557:60;8507:116;:::o;8629:133::-;8672:5;8710:6;8697:20;8688:29;;8726:30;8750:5;8726:30;:::i;:::-;8629:133;;;;:::o;8768:468::-;8833:6;8841;8890:2;8878:9;8869:7;8865:23;8861:32;8858:119;;;8896:79;;:::i;:::-;8858:119;9016:1;9041:53;9086:7;9077:6;9066:9;9062:22;9041:53;:::i;:::-;9031:63;;8987:117;9143:2;9169:50;9211:7;9202:6;9191:9;9187:22;9169:50;:::i;:::-;9159:60;;9114:115;8768:468;;;;;:::o;9242:323::-;9298:6;9347:2;9335:9;9326:7;9322:23;9318:32;9315:119;;;9353:79;;:::i;:::-;9315:119;9473:1;9498:50;9540:7;9531:6;9520:9;9516:22;9498:50;:::i;:::-;9488:60;;9444:114;9242:323;;;;:::o;9571:474::-;9639:6;9647;9696:2;9684:9;9675:7;9671:23;9667:32;9664:119;;;9702:79;;:::i;:::-;9664:119;9822:1;9847:53;9892:7;9883:6;9872:9;9868:22;9847:53;:::i;:::-;9837:63;;9793:117;9949:2;9975:53;10020:7;10011:6;10000:9;9996:22;9975:53;:::i;:::-;9965:63;;9920:118;9571:474;;;;;:::o;10051:180::-;10099:77;10096:1;10089:88;10196:4;10193:1;10186:15;10220:4;10217:1;10210:15;10237:320;10281:6;10318:1;10312:4;10308:12;10298:22;;10365:1;10359:4;10355:12;10386:18;10376:81;;10442:4;10434:6;10430:17;10420:27;;10376:81;10504:2;10496:6;10493:14;10473:18;10470:38;10467:84;;10523:18;;:::i;:::-;10467:84;10288:269;10237:320;;;:::o;10563:182::-;10703:34;10699:1;10691:6;10687:14;10680:58;10563:182;:::o;10751:366::-;10893:3;10914:67;10978:2;10973:3;10914:67;:::i;:::-;10907:74;;10990:93;11079:3;10990:93;:::i;:::-;11108:2;11103:3;11099:12;11092:19;;10751:366;;;:::o;11123:419::-;11289:4;11327:2;11316:9;11312:18;11304:26;;11376:9;11370:4;11366:20;11362:1;11351:9;11347:17;11340:47;11404:131;11530:4;11404:131;:::i;:::-;11396:139;;11123:419;;;:::o;11548:162::-;11688:14;11684:1;11676:6;11672:14;11665:38;11548:162;:::o;11716:366::-;11858:3;11879:67;11943:2;11938:3;11879:67;:::i;:::-;11872:74;;11955:93;12044:3;11955:93;:::i;:::-;12073:2;12068:3;12064:12;12057:19;;11716:366;;;:::o;12088:419::-;12254:4;12292:2;12281:9;12277:18;12269:26;;12341:9;12335:4;12331:20;12327:1;12316:9;12312:17;12305:47;12369:131;12495:4;12369:131;:::i;:::-;12361:139;;12088:419;;;:::o;12513:163::-;12653:15;12649:1;12641:6;12637:14;12630:39;12513:163;:::o;12682:366::-;12824:3;12845:67;12909:2;12904:3;12845:67;:::i;:::-;12838:74;;12921:93;13010:3;12921:93;:::i;:::-;13039:2;13034:3;13030:12;13023:19;;12682:366;;;:::o;13054:419::-;13220:4;13258:2;13247:9;13243:18;13235:26;;13307:9;13301:4;13297:20;13293:1;13282:9;13278:17;13271:47;13335:131;13461:4;13335:131;:::i;:::-;13327:139;;13054:419;;;:::o;13479:227::-;13619:34;13615:1;13607:6;13603:14;13596:58;13688:10;13683:2;13675:6;13671:15;13664:35;13479:227;:::o;13712:366::-;13854:3;13875:67;13939:2;13934:3;13875:67;:::i;:::-;13868:74;;13951:93;14040:3;13951:93;:::i;:::-;14069:2;14064:3;14060:12;14053:19;;13712:366;;;:::o;14084:419::-;14250:4;14288:2;14277:9;14273:18;14265:26;;14337:9;14331:4;14327:20;14323:1;14312:9;14308:17;14301:47;14365:131;14491:4;14365:131;:::i;:::-;14357:139;;14084:419;;;:::o;14509:180::-;14557:77;14554:1;14547:88;14654:4;14651:1;14644:15;14678:4;14675:1;14668:15;14695:191;14735:3;14754:20;14772:1;14754:20;:::i;:::-;14749:25;;14788:20;14806:1;14788:20;:::i;:::-;14783:25;;14831:1;14828;14824:9;14817:16;;14852:3;14849:1;14846:10;14843:36;;;14859:18;;:::i;:::-;14843:36;14695:191;;;;:::o;14892:332::-;15013:4;15051:2;15040:9;15036:18;15028:26;;15064:71;15132:1;15121:9;15117:17;15108:6;15064:71;:::i;:::-;15145:72;15213:2;15202:9;15198:18;15189:6;15145:72;:::i;:::-;14892:332;;;;;:::o;15230:224::-;15370:34;15366:1;15358:6;15354:14;15347:58;15439:7;15434:2;15426:6;15422:15;15415:32;15230:224;:::o;15460:366::-;15602:3;15623:67;15687:2;15682:3;15623:67;:::i;:::-;15616:74;;15699:93;15788:3;15699:93;:::i;:::-;15817:2;15812:3;15808:12;15801:19;;15460:366;;;:::o;15832:419::-;15998:4;16036:2;16025:9;16021:18;16013:26;;16085:9;16079:4;16075:20;16071:1;16060:9;16056:17;16049:47;16113:131;16239:4;16113:131;:::i;:::-;16105:139;;15832:419;;;:::o;16257:225::-;16397:34;16393:1;16385:6;16381:14;16374:58;16466:8;16461:2;16453:6;16449:15;16442:33;16257:225;:::o;16488:366::-;16630:3;16651:67;16715:2;16710:3;16651:67;:::i;:::-;16644:74;;16727:93;16816:3;16727:93;:::i;:::-;16845:2;16840:3;16836:12;16829:19;;16488:366;;;:::o;16860:419::-;17026:4;17064:2;17053:9;17049:18;17041:26;;17113:9;17107:4;17103:20;17099:1;17088:9;17084:17;17077:47;17141:131;17267:4;17141:131;:::i;:::-;17133:139;;16860:419;;;:::o;17285:223::-;17425:34;17421:1;17413:6;17409:14;17402:58;17494:6;17489:2;17481:6;17477:15;17470:31;17285:223;:::o;17514:366::-;17656:3;17677:67;17741:2;17736:3;17677:67;:::i;:::-;17670:74;;17753:93;17842:3;17753:93;:::i;:::-;17871:2;17866:3;17862:12;17855:19;;17514:366;;;:::o;17886:419::-;18052:4;18090:2;18079:9;18075:18;18067:26;;18139:9;18133:4;18129:20;18125:1;18114:9;18110:17;18103:47;18167:131;18293:4;18167:131;:::i;:::-;18159:139;;17886:419;;;:::o;18311:221::-;18451:34;18447:1;18439:6;18435:14;18428:58;18520:4;18515:2;18507:6;18503:15;18496:29;18311:221;:::o;18538:366::-;18680:3;18701:67;18765:2;18760:3;18701:67;:::i;:::-;18694:74;;18777:93;18866:3;18777:93;:::i;:::-;18895:2;18890:3;18886:12;18879:19;;18538:366;;;:::o;18910:419::-;19076:4;19114:2;19103:9;19099:18;19091:26;;19163:9;19157:4;19153:20;19149:1;19138:9;19134:17;19127:47;19191:131;19317:4;19191:131;:::i;:::-;19183:139;;18910:419;;;:::o;19335:180::-;19383:77;19380:1;19373:88;19480:4;19477:1;19470:15;19504:4;19501:1;19494:15;19521:185;19561:1;19578:20;19596:1;19578:20;:::i;:::-;19573:25;;19612:20;19630:1;19612:20;:::i;:::-;19607:25;;19651:1;19641:35;;19656:18;;:::i;:::-;19641:35;19698:1;19695;19691:9;19686:14;;19521:185;;;;:::o;19712:224::-;19852:34;19848:1;19840:6;19836:14;19829:58;19921:7;19916:2;19908:6;19904:15;19897:32;19712:224;:::o;19942:366::-;20084:3;20105:67;20169:2;20164:3;20105:67;:::i;:::-;20098:74;;20181:93;20270:3;20181:93;:::i;:::-;20299:2;20294:3;20290:12;20283:19;;19942:366;;;:::o;20314:419::-;20480:4;20518:2;20507:9;20503:18;20495:26;;20567:9;20561:4;20557:20;20553:1;20542:9;20538:17;20531:47;20595:131;20721:4;20595:131;:::i;:::-;20587:139;;20314:419;;;:::o;20739:222::-;20879:34;20875:1;20867:6;20863:14;20856:58;20948:5;20943:2;20935:6;20931:15;20924:30;20739:222;:::o;20967:366::-;21109:3;21130:67;21194:2;21189:3;21130:67;:::i;:::-;21123:74;;21206:93;21295:3;21206:93;:::i;:::-;21324:2;21319:3;21315:12;21308:19;;20967:366;;;:::o;21339:419::-;21505:4;21543:2;21532:9;21528:18;21520:26;;21592:9;21586:4;21582:20;21578:1;21567:9;21563:17;21556:47;21620:131;21746:4;21620:131;:::i;:::-;21612:139;;21339:419;;;:::o;21764:223::-;21904:34;21900:1;21892:6;21888:14;21881:58;21973:6;21968:2;21960:6;21956:15;21949:31;21764:223;:::o;21993:366::-;22135:3;22156:67;22220:2;22215:3;22156:67;:::i;:::-;22149:74;;22232:93;22321:3;22232:93;:::i;:::-;22350:2;22345:3;22341:12;22334:19;;21993:366;;;:::o;22365:419::-;22531:4;22569:2;22558:9;22554:18;22546:26;;22618:9;22612:4;22608:20;22604:1;22593:9;22589:17;22582:47;22646:131;22772:4;22646:131;:::i;:::-;22638:139;;22365:419;;;:::o;22790:230::-;22930:34;22926:1;22918:6;22914:14;22907:58;22999:13;22994:2;22986:6;22982:15;22975:38;22790:230;:::o;23026:366::-;23168:3;23189:67;23253:2;23248:3;23189:67;:::i;:::-;23182:74;;23265:93;23354:3;23265:93;:::i;:::-;23383:2;23378:3;23374:12;23367:19;;23026:366;;;:::o;23398:419::-;23564:4;23602:2;23591:9;23587:18;23579:26;;23651:9;23645:4;23641:20;23637:1;23626:9;23622:17;23615:47;23679:131;23805:4;23679:131;:::i;:::-;23671:139;;23398:419;;;:::o;23823:231::-;23963:34;23959:1;23951:6;23947:14;23940:58;24032:14;24027:2;24019:6;24015:15;24008:39;23823:231;:::o;24060:366::-;24202:3;24223:67;24287:2;24282:3;24223:67;:::i;:::-;24216:74;;24299:93;24388:3;24299:93;:::i;:::-;24417:2;24412:3;24408:12;24401:19;;24060:366;;;:::o;24432:419::-;24598:4;24636:2;24625:9;24621:18;24613:26;;24685:9;24679:4;24675:20;24671:1;24660:9;24656:17;24649:47;24713:131;24839:4;24713:131;:::i;:::-;24705:139;;24432:419;;;:::o;24857:225::-;24997:34;24993:1;24985:6;24981:14;24974:58;25066:8;25061:2;25053:6;25049:15;25042:33;24857:225;:::o;25088:366::-;25230:3;25251:67;25315:2;25310:3;25251:67;:::i;:::-;25244:74;;25327:93;25416:3;25327:93;:::i;:::-;25445:2;25440:3;25436:12;25429:19;;25088:366;;;:::o;25460:419::-;25626:4;25664:2;25653:9;25649:18;25641:26;;25713:9;25707:4;25703:20;25699:1;25688:9;25684:17;25677:47;25741:131;25867:4;25741:131;:::i;:::-;25733:139;;25460:419;;;:::o;25885:442::-;26034:4;26072:2;26061:9;26057:18;26049:26;;26085:71;26153:1;26142:9;26138:17;26129:6;26085:71;:::i;:::-;26166:72;26234:2;26223:9;26219:18;26210:6;26166:72;:::i;:::-;26248;26316:2;26305:9;26301:18;26292:6;26248:72;:::i;:::-;25885:442;;;;;;:::o;26333:194::-;26373:4;26393:20;26411:1;26393:20;:::i;:::-;26388:25;;26427:20;26445:1;26427:20;:::i;:::-;26422:25;;26471:1;26468;26464:9;26456:17;;26495:1;26489:4;26486:11;26483:37;;;26500:18;;:::i;:::-;26483:37;26333:194;;;;:::o;26533:410::-;26573:7;26596:20;26614:1;26596:20;:::i;:::-;26591:25;;26630:20;26648:1;26630:20;:::i;:::-;26625:25;;26685:1;26682;26678:9;26707:30;26725:11;26707:30;:::i;:::-;26696:41;;26886:1;26877:7;26873:15;26870:1;26867:22;26847:1;26840:9;26820:83;26797:139;;26916:18;;:::i;:::-;26797:139;26581:362;26533:410;;;;:::o;26949:180::-;26997:77;26994:1;26987:88;27094:4;27091:1;27084:15;27118:4;27115:1;27108:15;27135:180;27183:77;27180:1;27173:88;27280:4;27277:1;27270:15;27304:4;27301:1;27294:15;27321:143;27378:5;27409:6;27403:13;27394:22;;27425:33;27452:5;27425:33;:::i;:::-;27321:143;;;;:::o;27470:351::-;27540:6;27589:2;27577:9;27568:7;27564:23;27560:32;27557:119;;;27595:79;;:::i;:::-;27557:119;27715:1;27740:64;27796:7;27787:6;27776:9;27772:22;27740:64;:::i;:::-;27730:74;;27686:128;27470:351;;;;:::o;27827:85::-;27872:7;27901:5;27890:16;;27827:85;;;:::o;27918:158::-;27976:9;28009:61;28027:42;28036:32;28062:5;28036:32;:::i;:::-;28027:42;:::i;:::-;28009:61;:::i;:::-;27996:74;;27918:158;;;:::o;28082:147::-;28177:45;28216:5;28177:45;:::i;:::-;28172:3;28165:58;28082:147;;:::o;28235:114::-;28302:6;28336:5;28330:12;28320:22;;28235:114;;;:::o;28355:184::-;28454:11;28488:6;28483:3;28476:19;28528:4;28523:3;28519:14;28504:29;;28355:184;;;;:::o;28545:132::-;28612:4;28635:3;28627:11;;28665:4;28660:3;28656:14;28648:22;;28545:132;;;:::o;28683:108::-;28760:24;28778:5;28760:24;:::i;:::-;28755:3;28748:37;28683:108;;:::o;28797:179::-;28866:10;28887:46;28929:3;28921:6;28887:46;:::i;:::-;28965:4;28960:3;28956:14;28942:28;;28797:179;;;;:::o;28982:113::-;29052:4;29084;29079:3;29075:14;29067:22;;28982:113;;;:::o;29131:732::-;29250:3;29279:54;29327:5;29279:54;:::i;:::-;29349:86;29428:6;29423:3;29349:86;:::i;:::-;29342:93;;29459:56;29509:5;29459:56;:::i;:::-;29538:7;29569:1;29554:284;29579:6;29576:1;29573:13;29554:284;;;29655:6;29649:13;29682:63;29741:3;29726:13;29682:63;:::i;:::-;29675:70;;29768:60;29821:6;29768:60;:::i;:::-;29758:70;;29614:224;29601:1;29598;29594:9;29589:14;;29554:284;;;29558:14;29854:3;29847:10;;29255:608;;;29131:732;;;;:::o;29869:831::-;30132:4;30170:3;30159:9;30155:19;30147:27;;30184:71;30252:1;30241:9;30237:17;30228:6;30184:71;:::i;:::-;30265:80;30341:2;30330:9;30326:18;30317:6;30265:80;:::i;:::-;30392:9;30386:4;30382:20;30377:2;30366:9;30362:18;30355:48;30420:108;30523:4;30514:6;30420:108;:::i;:::-;30412:116;;30538:72;30606:2;30595:9;30591:18;30582:6;30538:72;:::i;:::-;30620:73;30688:3;30677:9;30673:19;30664:6;30620:73;:::i;:::-;29869:831;;;;;;;;:::o;30706:807::-;30955:4;30993:3;30982:9;30978:19;30970:27;;31007:71;31075:1;31064:9;31060:17;31051:6;31007:71;:::i;:::-;31088:72;31156:2;31145:9;31141:18;31132:6;31088:72;:::i;:::-;31170:80;31246:2;31235:9;31231:18;31222:6;31170:80;:::i;:::-;31260;31336:2;31325:9;31321:18;31312:6;31260:80;:::i;:::-;31350:73;31418:3;31407:9;31403:19;31394:6;31350:73;:::i;:::-;31433;31501:3;31490:9;31486:19;31477:6;31433:73;:::i;:::-;30706:807;;;;;;;;;:::o;31519:143::-;31576:5;31607:6;31601:13;31592:22;;31623:33;31650:5;31623:33;:::i;:::-;31519:143;;;;:::o;31668:663::-;31756:6;31764;31772;31821:2;31809:9;31800:7;31796:23;31792:32;31789:119;;;31827:79;;:::i;:::-;31789:119;31947:1;31972:64;32028:7;32019:6;32008:9;32004:22;31972:64;:::i;:::-;31962:74;;31918:128;32085:2;32111:64;32167:7;32158:6;32147:9;32143:22;32111:64;:::i;:::-;32101:74;;32056:129;32224:2;32250:64;32306:7;32297:6;32286:9;32282:22;32250:64;:::i;:::-;32240:74;;32195:129;31668:663;;;;;:::o

Swarm Source

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