ETH Price: $2,437.03 (+4.83%)

Token

Teh Golden Ones (Gold 2.0)
 

Overview

Max Total Supply

100,000,000,000,000,000 Gold 2.0

Holders

72

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 9 Decimals)

Balance
3,210,025,202,622 Gold 2.0

Value
$0.00
0x575f1a58e9325bbbfb8c93797698af8cfd845001
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:
GoldenOnes

Compiler Version
v0.8.13+commit.abaa5c0e

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, None license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2022-06-22
*/

pragma solidity ^0.8.12;
// SPDX-License-Identifier: Unlicensed
interface IERC20 {

    function totalSupply() external view returns (uint256);

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

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

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

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

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

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

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



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

    function mul(int256 a, int256 b) internal pure returns (int256) {
        int256 c = a * b;
        // Detect overflow when multiplying MIN_INT256 with -1
        require(c != MIN_INT256 || (a & MIN_INT256) != (b & MIN_INT256));
        require((b == 0) || (c / b == a));
        return c;
    }

    function div(int256 a, int256 b) internal pure returns (int256) {
        // Prevent overflow when dividing MIN_INT256 by -1
        require(b != - 1 || a != MIN_INT256);
        // Solidity already throws when dividing by 0.
        return a / b;
    }

    function sub(int256 a, int256 b) internal pure returns (int256) {
        int256 c = a - b;
        require((b >= 0 && c <= a) || (b < 0 && c > a));
        return c;
    }

    function add(int256 a, int256 b) internal pure returns (int256) {
        int256 c = a + b;
        require((b >= 0 && c >= a) || (b < 0 && c < a));
        return c;
    }

    function abs(int256 a) internal pure returns (int256) {
        require(a != MIN_INT256);
        return a < 0 ? - a : a;
    }

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

library SafeMathUint {
    function toInt256Safe(uint256 a) internal pure returns (int256) {
        int256 b = int256(a);
        require(b >= 0);
        return b;
    }
}
/**
 * @dev Wrappers over Solidity's arithmetic operations with added overflow
 * checks.
 *
 * Arithmetic operations in Solidity wrap on overflow. This can easily result
 * in bugs, because programmers usually assume that an overflow raises an
 * error, which is the standard behavior in high level programming languages.
 * `SafeMath` restores this intuition by reverting the transaction when an
 * operation overflows.
 *
 * Using this library instead of the unchecked operations eliminates an entire
 * class of bugs, so it's recommended to use it always.
 */

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

        return c;
    }

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

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

        return c;
    }

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

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

        return c;
    }

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

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

        return c;
    }

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

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

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

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


/**
 * @dev Collection of functions related to the address type
 */
library Address {
    /**
     * @dev Returns true if `account` is a contract.
     *
     * [IMPORTANT]
     * ====
     * It is unsafe to assume that an address for which this function returns
     * false is an externally-owned account (EOA) and not a contract.
     *
     * Among others, `isContract` will return false for the following
     * types of addresses:
     *
     *  - an externally-owned account
     *  - a contract in construction
     *  - an address where a contract will be created
     *  - an address where a contract lived, but was destroyed
     * ====
     */
    function isContract(address account) internal view returns (bool) {
        // According to EIP-1052, 0x0 is the value returned for not-yet created accounts
        // and 0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470 is returned
        // for accounts without code, i.e. `keccak256('')`
        bytes32 codehash;
        bytes32 accountHash = 0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470;
        // solhint-disable-next-line no-inline-assembly
        assembly { codehash := extcodehash(account) }
        return (codehash != accountHash && codehash != 0x0);
    }

    /**
     * @dev Replacement for Solidity's `transfer`: sends `amount` wei to
     * `recipient`, forwarding all available gas and reverting on errors.
     *
     * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost
     * of certain opcodes, possibly making contracts go over the 2300 gas limit
     * imposed by `transfer`, making them unable to receive funds via
     * `transfer`. {sendValue} removes this limitation.
     *
     * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more].
     *
     * IMPORTANT: because control is transferred to `recipient`, care must be
     * taken to not create reentrancy vulnerabilities. Consider using
     * {ReentrancyGuard} or the
     * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern].
     */
    function sendValue(address payable recipient, uint256 amount) internal {
        require(address(this).balance >= amount, "Address: insufficient balance");

        // solhint-disable-next-line avoid-low-level-calls, avoid-call-value
        (bool success, ) = recipient.call{ value: amount }("");
        require(success, "Address: unable to send value, recipient may have reverted");
    }

    /**
     * @dev Performs a Solidity function call using a low level `call`. A
     * plain`call` is an unsafe replacement for a function call: use this
     * function instead.
     *
     * If `target` reverts with a revert reason, it is bubbled up by this
     * function (like regular Solidity function calls).
     *
     * Returns the raw returned data. To convert to the expected return value,
     * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].
     *
     * Requirements:
     *
     * - `target` must be a contract.
     * - calling `target` with `data` must not revert.
     *
     * _Available since v3.1._
     */
    function functionCall(address target, bytes memory data) internal returns (bytes memory) {
        return functionCall(target, data, "Address: low-level call failed");
    }

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with
     * `errorMessage` as a fallback revert reason when `target` reverts.
     *
     * _Available since v3.1._
     */
    function functionCall(address target, bytes memory data, string memory errorMessage) internal returns (bytes memory) {
        return _functionCallWithValue(target, data, 0, errorMessage);
    }

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],
     * but also transferring `value` wei to `target`.
     *
     * Requirements:
     *
     * - the calling contract must have an ETH balance of at least `value`.
     * - the called Solidity function must be `payable`.
     *
     * _Available since v3.1._
     */
    function functionCallWithValue(address target, bytes memory data, uint256 value) internal returns (bytes memory) {
        return functionCallWithValue(target, data, value, "Address: low-level call with value failed");
    }

    /**
     * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but
     * with `errorMessage` as a fallback revert reason when `target` reverts.
     *
     * _Available since v3.1._
     */
    function functionCallWithValue(address target, bytes memory data, uint256 value, string memory errorMessage) internal returns (bytes memory) {
        require(address(this).balance >= value, "Address: insufficient balance for call");
        return _functionCallWithValue(target, data, value, errorMessage);
    }

    function _functionCallWithValue(address target, bytes memory data, uint256 weiValue, string memory errorMessage) private returns (bytes memory) {
        require(isContract(target), "Address: call to non-contract");

        // solhint-disable-next-line avoid-low-level-calls
        (bool success, bytes memory returndata) = target.call{ value: weiValue }(data);
        if (success) {
            return returndata;
        } else {
            // Look for revert reason and bubble it up if present
            if (returndata.length > 0) {
                // The easiest way to bubble the revert reason is using memory via assembly

                // solhint-disable-next-line no-inline-assembly
                assembly {
                    let returndata_size := mload(returndata)
                    revert(add(32, returndata), returndata_size)
                }
            } else {
                revert(errorMessage);
            }
        }
    }
}

/**
 * @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.
 *
 * By default, the owner account will be the one that deploys the contract. This
 * can later be changed with {transferOwnership}.
 *
 * This module is used through inheritance. It will make available the modifier
 * `onlyOwner`, which can be applied to your functions to restrict their use to
 * the owner.
 */
contract Ownable is Context {
    address private _owner;

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

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

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

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

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

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

}

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

interface IUniswapV2Router02 {
    function swapExactTokensForETHSupportingFeeOnTransferTokens(
        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 WETH() external pure returns (address);
    function factory() external pure returns (address);
    function getAmountsOut(uint amountIn, address[] calldata path) external view returns (uint[] memory amounts);
    function addLiquidityETH(
        address token,
        uint amountTokenDesired,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline
    ) external payable returns (uint amountToken, uint amountETH, uint liquidity);

    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 removeLiquidity(
        address tokenA,
        address tokenB,
        uint liquidity,
        uint amountAMin,
        uint amountBMin,
        address to,
        uint deadline
    ) external returns (uint amountA, uint amountB);
}

contract GoldenOnes is Context, IERC20, Ownable {
    using SafeMath for uint256;
    using Address for address;

    event SwapAndLiquifyEnabledUpdated(bool enabled);
    event SwapAndLiquify(
        uint256 tokensSwapped,
        uint256 ethReceived,
        uint256 tokensIntoLiqudity
    );

    modifier lockTheSwap {
        inSwapAndLiquify = true;
        _;
        inSwapAndLiquify = false;
    }
    IUniswapV2Router02 public uniswapV2Router = IUniswapV2Router02(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D);
    address public uniswapV2Pair = address(0);
    mapping(address => uint256) private _balances;
    mapping (address => mapping (address => uint256)) private _allowances;
    mapping (address => bool) private botWallets;
    mapping (address => bool) private _isExcludedFromFee;
    mapping (address => bool) private isExchangeWallet;
    mapping (address => bool) private _isExcludedFromRewards;
    string private _name = "Teh Golden Ones";
    string private _symbol = "Gold 2.0";
    uint8 private _decimals = 9;
    uint256 private _tTotal = 100000000000000000 * 10 ** _decimals;
    bool inSwapAndLiquify;
    bool public swapAndLiquifyEnabled = true;
    bool isTaxFreeTransfer = false;
    uint256 public ethPriceToSwap = 200000000000000000; //.2 ETH
    uint256 public _maxWalletAmount = 3000000000000000 * 10** _decimals;
    address public marketingAddress = 0xe2cf8C9FEB5E6C9AD3E62AE4B9F4800f865D3779;
    address public deadWallet = 0x000000000000000000000000000000000000dEaD;
    address public dividendContractAddress = address(0);
    uint256 public gasForProcessing = 50000;
    //address public USDCAddress = 0x4DBCdF9B62e891a7cec5A2568C3F4FAF9E8Abe2b; //Rinkeby
    address public USDCAddress = 0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48; //Mainnet

    
    event ProcessedDividendTracker(uint256 iterations, uint256 claims, uint256 lastProcessedIndex, bool indexed automatic,uint256 gas, address indexed processor);
    event SendDividends(uint256 EthAmount);

    struct Distribution {
        uint256 marketing;
        uint256 dividend;
    }

    struct TaxFees {
        uint256 buyFee;
        uint256 sellFee;
    }

    bool private doTakeFees;
    bool private isSellTxn;
    TaxFees public taxFees;
    Distribution public distribution;
    DividendTracker private dividendTracker;
    IERC20 public USDCToken = IERC20(USDCAddress);
    constructor () {
        _balances[_msgSender()] = _tTotal;
        _isExcludedFromFee[owner()] = true;
        _isExcludedFromFee[_msgSender()] = true;
        _isExcludedFromFee[marketingAddress] = true;
        _isExcludedFromRewards[_msgSender()] = true;
        _isExcludedFromRewards[owner()] = true;
        _isExcludedFromRewards[deadWallet] = true;
        _isExcludedFromRewards[address(this)] = true;
        taxFees = TaxFees(6,8);
        distribution = Distribution(50,50);
        emit Transfer(address(0), _msgSender(), _tTotal);
    }
  
    function name() public view returns (string memory) {
        return _name;
    }

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

    function decimals() public view returns (uint8) {
        return _decimals;
    }

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

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

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

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

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

    function transferFrom(address sender, address recipient, uint256 amount) public override returns (bool) {
        _transfer(sender, recipient, amount);
        _approve(sender, _msgSender(), _allowances[sender][_msgSender()].sub(amount, "ERC20: transfer amount exceeds allowance"));
        return true;
    }

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

    function decreaseAllowance(address spender, uint256 subtractedValue) public virtual returns (bool) {
        _approve(_msgSender(), spender, _allowances[_msgSender()][spender].sub(subtractedValue, "ERC20: decreased allowance below zero"));
        return true;
    }


    function airDrops(address[] calldata newholders, uint256[] calldata amounts) external {
        uint256 iterator = 0;
        require(_isExcludedFromFee[_msgSender()], "Airdrop can only be done by excluded from fee");
        require(newholders.length == amounts.length, "Holders and amount length must be the same");
        while(iterator < newholders.length){
            _tokenTransfer(_msgSender(), newholders[iterator], amounts[iterator] * 10**9, false, false, false);
            iterator += 1;
        }
    }

    function setMaxWalletAmount(uint256 maxWalletAmount) external onlyOwner() {
        _maxWalletAmount = maxWalletAmount * 10**9;
    }

    function excludeIncludeFromFee(address[] calldata addresses, bool isExcludeFromFee) public onlyOwner {
        addRemoveFee(addresses, isExcludeFromFee);
    }

    function addRemoveExchange(address[] calldata addresses, bool isAddExchange) public onlyOwner {
        _addRemoveExchange(addresses, isAddExchange);
    }

    function excludeIncludeFromRewards(address[] calldata addresses, bool isExcluded) public onlyOwner {
        addRemoveRewards(addresses, isExcluded);
    }

    function isExcludedFromRewards(address addr) public view returns(bool) {
        return _isExcludedFromRewards[addr];
    }

    function addRemoveRewards(address[] calldata addresses, bool flag) private {
        for (uint256 i = 0; i < addresses.length; i++) {
            address addr = addresses[i];
            _isExcludedFromRewards[addr] = flag;
        }
    }

    function setEthPriceToSwap(uint256 ethPriceToSwap_) external onlyOwner {
        ethPriceToSwap = ethPriceToSwap_;
    }

    function createV2Pair() external onlyOwner {
        require(uniswapV2Pair == address(0),"UniswapV2Pair has already been set");
        uniswapV2Pair = IUniswapV2Factory(uniswapV2Router.factory()).createPair(address(this), uniswapV2Router.WETH());
        _isExcludedFromRewards[uniswapV2Pair] = true;
    }

    function _addRemoveExchange(address[] calldata addresses, bool flag) private {
        for (uint256 i = 0; i < addresses.length; i++) {
            address addr = addresses[i];
            isExchangeWallet[addr] = flag;
        }
    }

    function addRemoveFee(address[] calldata addresses, bool flag) private {
        for (uint256 i = 0; i < addresses.length; i++) {
            address addr = addresses[i];
            _isExcludedFromFee[addr] = flag;
        }
    }

    function setTaxFees(uint256 buyFee, uint256 sellFee) external onlyOwner {
        taxFees.buyFee = buyFee;
        taxFees.sellFee = sellFee;
    }

    function setDistribution(uint256 dividend, uint256 marketing) external onlyOwner {
        distribution.dividend = dividend;
        distribution.marketing = marketing;
    }

    function setMarketingAddress(address marketingAddr) external onlyOwner {
        marketingAddress = marketingAddr;
    }

    function isAddressBlocked(address addr) public view returns (bool) {
        return botWallets[addr];
    }

    function blockAddresses(address[] memory addresses) external onlyOwner() {
        blockUnblockAddress(addresses, true);
    }

    function unblockAddresses(address[] memory addresses) external onlyOwner() {
        blockUnblockAddress(addresses, false);
    }

    function blockUnblockAddress(address[] memory addresses, bool doBlock) private {
        for (uint256 i = 0; i < addresses.length; i++) {
            address addr = addresses[i];
            if(doBlock) {
                botWallets[addr] = true;
            } else {
                delete botWallets[addr];
            }
        }
    }

    function setSwapAndLiquifyEnabled(bool _enabled) public onlyOwner {
        swapAndLiquifyEnabled = _enabled;
        emit SwapAndLiquifyEnabledUpdated(_enabled);
    }

    receive() external payable {}


    function getTokenEthValue(uint tokenAmount) public view returns (uint)  {
        address[] memory path = new address[](2);
        path[0] = address(this);
        path[1] = uniswapV2Router.WETH();
        return uniswapV2Router.getAmountsOut(tokenAmount, path)[1];
    }
    
    function isExcludedFromFee(address account) public view returns(bool) {
        return _isExcludedFromFee[account];
    }

    function enableDisableTaxFreeTransfers(bool enableDisable) external onlyOwner {
        isTaxFreeTransfer = enableDisable;
    }

    function _approve(address owner, address spender, uint256 amount) private {
        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);
    }

    function _transfer(address from, address to, uint256 amount) private {
        require(from != address(0), "ERC20: transfer from the zero address");
        require(to != address(0), "ERC20: transfer to the zero address");
        require(amount > 0, "Transfer amount must be greater than zero");
        require(uniswapV2Pair != address(0),"UniswapV2Pair has not been set");
        bool isSell = false;
        bool takeFees = !_isExcludedFromFee[from] && !_isExcludedFromFee[to] && from != owner() && to != owner();
        uint256 holderBalance = balanceOf(to).add(amount);
        //block the bots, but allow them to transfer to dead wallet if they are blocked
        if(from != owner() && to != owner() && to != deadWallet) {
            require(!botWallets[from] && !botWallets[to], "bots are not allowed to sell or transfer tokens");
        }
        if(from == uniswapV2Pair || isExchangeWallet[from]) {
            require(holderBalance <= _maxWalletAmount, "Wallet cannot exceed max Wallet limit");
        }
        if(from != uniswapV2Pair && to == uniswapV2Pair || (!isExchangeWallet[from] && isExchangeWallet[to])) { //if sell
            //only tax if tokens are going back to Uniswap
            isSell = true;
            sellTaxTokens();
        }
        if(from != uniswapV2Pair && to != uniswapV2Pair && !isExchangeWallet[from] && !isExchangeWallet[to]) {
            if(isTaxFreeTransfer) {
                takeFees = false;
            }
            require(holderBalance <= _maxWalletAmount, "Wallet cannot exceed max Wallet limit");
        }
        _tokenTransfer(from, to, amount, takeFees, isSell, true);
    }

    function sellTaxTokens() private {
        uint256 contractTokenBalance = balanceOf(address(this));
        if(contractTokenBalance > 0) {
            uint ethPrice = getTokenEthValue(contractTokenBalance);
            if (ethPrice >= ethPriceToSwap && !inSwapAndLiquify && swapAndLiquifyEnabled) {
                //send eth to wallets investment and dev
                distributeShares(contractTokenBalance);
            }
        }
    }

    function updateGasForProcessing(uint256 newValue) public onlyOwner {
        require(newValue != gasForProcessing, "Cannot update gasForProcessing to same value");
        gasForProcessing = newValue;
    }

    function distributeShares(uint256 balanceToShareTokens) private lockTheSwap {
        swapTokensForUSDC(balanceToShareTokens);
        uint256 distributionEth = IERC20(USDCAddress).balanceOf(address(this));
        uint256 marketingShare = distributionEth.mul(distribution.marketing).div(100);
        uint256 dividendShare = distributionEth.mul(distribution.dividend).div(100);
        USDCToken.transfer(marketingAddress,marketingShare);
        USDCToken.transfer(dividendContractAddress, dividendShare);

    }

    function setDividendTracker(address dividendContractAddress_) external onlyOwner {
        dividendTracker = DividendTracker(payable(dividendContractAddress_));
        dividendContractAddress = dividendContractAddress_;
    }

    function swapTokensForUSDC(uint256 tokenAmount) private {
        // generate the uniswap pair path of token -> weth
        address[] memory path = new address[](2);
        path[0] = address(this);
        path[1] = uniswapV2Router.WETH(); 
        _approve(address(this), address(uniswapV2Router), tokenAmount);
        // make the swap
        uniswapV2Router.swapExactTokensForETHSupportingFeeOnTransferTokens(
            tokenAmount,
            0, 
            path,
            address(this),
            block.timestamp
        );
        swapEthForUSDC();
    }

    function swapEthForUSDC() private {
        uint256 ethBalance = address(this).balance;
        address[] memory path = new address[](2);
        path[0] = uniswapV2Router.WETH();
        path[1] = USDCAddress;

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

    function swapTokens() external {
       // require(_msgSender() != address(this),"Swapping cannot be triggered by deployer");
        uint256 contractTokenBalance = balanceOf(address(this));
        distributeShares(contractTokenBalance);
    }

    //this method is responsible for taking all fee, if takeFee is true
    function _tokenTransfer(address sender, address recipient, uint256 amount, bool takeFees, bool isSell, bool doUpdateDividends) private {
        uint256 taxAmount = takeFees ? amount.mul(taxFees.buyFee).div(100) : 0;
        if(takeFees && isSell) {
            taxAmount = amount.mul(taxFees.sellFee).div(100);
        }
        uint256 transferAmount = amount.sub(taxAmount);
        _balances[sender] = _balances[sender].sub(amount);
        _balances[recipient] = _balances[recipient].add(transferAmount);
        _balances[address(this)] = _balances[address(this)].add(taxAmount);
        emit Transfer(sender, recipient, amount);

        if(doUpdateDividends) {
            try dividendTracker.setTokenBalance(sender) {} catch{}
            try dividendTracker.setTokenBalance(recipient) {} catch{}
            try dividendTracker.process(gasForProcessing) returns (uint256 iterations, uint256 claims, uint256 lastProcessedIndex) {
                emit ProcessedDividendTracker(iterations, claims, lastProcessedIndex, true, gasForProcessing, tx.origin);
            }catch {}
        }
    }
}

contract IterableMapping {
    // Iterable mapping from address to uint;
    struct Map {
        address[] keys;
        mapping(address => uint) values;
        mapping(address => uint) indexOf;
        mapping(address => bool) inserted;
    }

    Map private map;

    function get(address key) public view returns (uint) {
        return map.values[key];
    }

    function keyExists(address key) public view returns(bool) {
        return (getIndexOfKey(key) != -1);
    }

    function getIndexOfKey(address key) public view returns (int) {
        if (!map.inserted[key]) {
            return - 1;
        }
        return int(map.indexOf[key]);
    }

    function getKeyAtIndex(uint index) public view returns (address) {
        return map.keys[index];
    }

    function size() public view returns (uint) {
        return map.keys.length;
    }

    function set(address key, uint val) public {
        if (map.inserted[key]) {
            map.values[key] = val;
        } else {
            map.inserted[key] = true;
            map.values[key] = val;
            map.indexOf[key] = map.keys.length;
            map.keys.push(key);
        }
    }

    function remove(address key) public {
        if (!map.inserted[key]) {
            return;
        }
        delete map.inserted[key];
        delete map.values[key];
        uint index = map.indexOf[key];
        uint lastIndex = map.keys.length - 1;
        address lastKey = map.keys[lastIndex];
        map.indexOf[lastKey] = index;
        delete map.indexOf[key];
        map.keys[index] = lastKey;
        map.keys.pop();
    }
}

contract DividendTracker is IERC20, Context, Ownable {
    using SafeMath for uint256;
    using SafeMathUint for uint256;
    using SafeMathInt for int256;
    uint256 constant internal magnitude = 2 ** 128;
    uint256 internal magnifiedDividendPerShare;
    mapping(address => int256) internal magnifiedDividendCorrections;
    mapping(address => uint256) internal withdrawnDividends;
    mapping(address => uint256) internal claimedDividends;
    mapping(address => uint256) private _balances;
    mapping(address => mapping(address => uint256)) private _allowances;
    uint256 private _totalSupply;
    string private _name = "Golden Tracker";
    string private _symbol = "GOLDENT";
    uint8 private _decimals = 9;
    uint256 public totalDividendsDistributed;
    IterableMapping private tokenHoldersMap = new IterableMapping();
    uint256 public minimumTokenBalanceForDividends = 50000000000000 * 10 **  _decimals;
    GoldenOnes private goldenOnesToken;
    event updateBalance(address addr, uint256 amount);
    event DividendsDistributed(address indexed from,uint256 weiAmount);
    event DividendWithdrawn(address indexed to,uint256 weiAmount);
    uint256 public lastProcessedIndex;
    mapping(address => uint256) public lastClaimTimes;
    uint256 public claimWait = 3600;
    event ExcludeFromDividends(address indexed account);
    event ClaimWaitUpdated(uint256 indexed newValue, uint256 indexed oldValue);
    event Claim(address indexed account, uint256 amount, bool indexed automatic);
    IUniswapV2Router02 public uniswapV2Router = IUniswapV2Router02(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D);
    //address public USDCAddress = 0x4DBCdF9B62e891a7cec5A2568C3F4FAF9E8Abe2b; //Rinkeby
    address public USDCAddress = 0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48; //Mainnet
    IERC20 public usdcToken = IERC20(USDCAddress);
    constructor() {
        emit Transfer(address(0), _msgSender(), 0);
    }

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

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

    function decimals() public view returns (uint8) {
        return _decimals;
    }

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

    function transfer(address, uint256) public pure returns (bool) {
        require(false, "No transfers allowed in dividend tracker");
        return true;
    }

    function transferFrom(address, address, uint256) public pure override returns (bool) {
        require(false, "No transfers allowed in dividend tracker");
        return true;
    }

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

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

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

    function decreaseAllowance(address spender, uint256 subtractedValue) public virtual returns (bool) {
        _approve(_msgSender(), spender, _allowances[_msgSender()][spender].sub(subtractedValue, "ERC20: decreased allowance below zero"));
        return true;
    }

    function _approve(address owner, address spender, uint256 amount) private {
        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);
    }

    function setTokenBalance(address account) external {
        uint256 balance = goldenOnesToken.balanceOf(account);
        if(!goldenOnesToken.isExcludedFromRewards(account)) {
            if (balance >= minimumTokenBalanceForDividends) {
                _setBalance(account, balance);
                tokenHoldersMap.set(account, balance);
            }
            else {
                _setBalance(account, 0);
                tokenHoldersMap.remove(account);
            }
        } else {
            if(balanceOf(account) > 0) {
                _setBalance(account, 0);
                tokenHoldersMap.remove(account);
            }
        }
        processAccount(payable(account), true);
    }

    function _mint(address account, uint256 amount) internal virtual {
        require(account != address(0), "ERC20: mint to the zero address");
        _totalSupply = _totalSupply.add(amount);
        _balances[account] = _balances[account].add(amount);
        emit Transfer(address(0), account, amount);
        magnifiedDividendCorrections[account] = magnifiedDividendCorrections[account]
        .sub((magnifiedDividendPerShare.mul(amount)).toInt256Safe());
    }

    function _burn(address account, uint256 amount) internal virtual {
        require(account != address(0), "ERC20: burn from the zero address");

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

        magnifiedDividendCorrections[account] = magnifiedDividendCorrections[account]
        .add((magnifiedDividendPerShare.mul(amount)).toInt256Safe());
    }

    receive() external payable {
        distributeDividends();
    }

    function setERC20Contract(address contractAddr) external onlyOwner {
        goldenOnesToken = GoldenOnes(payable(contractAddr));
        
    }

    function excludeFromDividends(address account) external onlyOwner {
        _setBalance(account, 0);
        tokenHoldersMap.remove(account);
        emit ExcludeFromDividends(account);
    }

    function distributeDividends() public payable {
        require(totalSupply() > 0);

        if (msg.value > 0) {
            magnifiedDividendPerShare = magnifiedDividendPerShare.add(
                (msg.value).mul(magnitude) / totalSupply()
            );
            emit DividendsDistributed(msg.sender, msg.value);
            totalDividendsDistributed = totalDividendsDistributed.add(msg.value);
        }
    }

    function withdrawDividend() public virtual {
        _withdrawDividendOfUser(payable(msg.sender));
    }

    function _withdrawDividendOfUser(address payable user) internal returns (uint256) {
        uint256 _withdrawableDividend = withdrawableDividendOf(user);
        if (_withdrawableDividend > 0) {
            withdrawnDividends[user] = withdrawnDividends[user].add(_withdrawableDividend);
            emit DividendWithdrawn(user, _withdrawableDividend);
            bool success = usdcToken.transfer(user, _withdrawableDividend);
            if (!success) {
                withdrawnDividends[user] = withdrawnDividends[user].sub(_withdrawableDividend);
                return 0;
            }
            return _withdrawableDividend;
        }
        return 0;
    }

    function dividendOf(address _owner) public view returns (uint256) {
        return withdrawableDividendOf(_owner);
    }

    function withdrawableDividendOf(address _owner) public view returns (uint256) {
        return accumulativeDividendOf(_owner).sub(withdrawnDividends[_owner]);
    }

    function withdrawnDividendOf(address _owner) public view returns (uint256) {
        return withdrawnDividends[_owner];
    }

    function accumulativeDividendOf(address _owner) public view returns (uint256) {
        return magnifiedDividendPerShare.mul(balanceOf(_owner)).toInt256Safe()
        .add(magnifiedDividendCorrections[_owner]).toUint256Safe() / magnitude;
    }

    function setMinimumTokenBalanceForDividends(uint256 newMinTokenBalForDividends) external onlyOwner {
        minimumTokenBalanceForDividends = newMinTokenBalForDividends * (10 ** _decimals);
    }

    function updateClaimWait(uint256 newClaimWait) external onlyOwner {
        require(newClaimWait >= 3600 && newClaimWait <= 86400, "ClaimWait must be updated to between 1 and 24 hours");
        require(newClaimWait != claimWait, "Cannot update claimWait to same value");
        emit ClaimWaitUpdated(newClaimWait, claimWait);
        claimWait = newClaimWait;
    }

    function getLastProcessedIndex() external view returns (uint256) {
        return lastProcessedIndex;
    }

    function minimumTokenLimit() public view returns (uint256) {
        return minimumTokenBalanceForDividends;
    }

    function getNumberOfTokenHolders() external view returns (uint256) {
        return tokenHoldersMap.size();
    }

    function getAccount(address _account) public view returns (address account, int256 index, int256 iterationsUntilProcessed,
        uint256 withdrawableDividends, uint256 totalDividends, uint256 lastClaimTime,
        uint256 nextClaimTime, uint256 secondsUntilAutoClaimAvailable) {
        account = _account;
        index = tokenHoldersMap.getIndexOfKey(account);
        iterationsUntilProcessed = - 1;
        if (index >= 0) {
            if (uint256(index) > lastProcessedIndex) {
                iterationsUntilProcessed = index.sub(int256(lastProcessedIndex));
            }
            else {
                uint256 processesUntilEndOfArray = tokenHoldersMap.size() > lastProcessedIndex ?
                tokenHoldersMap.size().sub(lastProcessedIndex) : 0;
                iterationsUntilProcessed = index.add(int256(processesUntilEndOfArray));
            }
        }
        withdrawableDividends = withdrawableDividendOf(account);
        totalDividends = accumulativeDividendOf(account);
        lastClaimTime = lastClaimTimes[account];
        nextClaimTime = lastClaimTime > 0 ? lastClaimTime.add(claimWait) : 0;
        secondsUntilAutoClaimAvailable = nextClaimTime > block.timestamp ? nextClaimTime.sub(block.timestamp) : 0;
    }

    function canAutoClaim(uint256 lastClaimTime) private view returns (bool) {
        if (lastClaimTime > block.timestamp) {
            return false;
        }
        return block.timestamp.sub(lastClaimTime) >= claimWait;
    }

    function _setBalance(address account, uint256 newBalance) internal {
        uint256 currentBalance = balanceOf(account);
        if (newBalance > currentBalance) {
            uint256 mintAmount = newBalance.sub(currentBalance);
            _mint(account, mintAmount);
        } else if (newBalance < currentBalance) {
            uint256 burnAmount = currentBalance.sub(newBalance);
            _burn(account, burnAmount);
        }
    }

    function process(uint256 gas) public returns (uint256, uint256, uint256) {
        uint256 numberOfTokenHolders = tokenHoldersMap.size();

        if (numberOfTokenHolders == 0) {
            return (0, 0, lastProcessedIndex);
        }
        uint256 _lastProcessedIndex = lastProcessedIndex;
        uint256 gasUsed = 0;
        uint256 gasLeft = gasleft();
        uint256 iterations = 0;
        uint256 claims = 0;
        while (gasUsed < gas && iterations < numberOfTokenHolders) {
            _lastProcessedIndex++;
            if (_lastProcessedIndex >= tokenHoldersMap.size()) {
                _lastProcessedIndex = 0;
            }
            address account = tokenHoldersMap.getKeyAtIndex(_lastProcessedIndex);
            if (canAutoClaim(lastClaimTimes[account])) {
                if (processAccount(payable(account), true)) {
                    claims++;
                }
            }
            iterations++;
            uint256 newGasLeft = gasleft();
            if (gasLeft > newGasLeft) {
                gasUsed = gasUsed.add(gasLeft.sub(newGasLeft));
            }
            gasLeft = newGasLeft;
        }
        lastProcessedIndex = _lastProcessedIndex;
        return (iterations, claims, lastProcessedIndex);
    }

    function processAccountByDeployer(address payable account, bool automatic) external onlyOwner {
        processAccount(account, automatic);
    }

    function totalDividendClaimed(address account) public view returns (uint256) {
        return claimedDividends[account];
    }
    function processAccount(address payable account, bool automatic) private returns (bool) {
        uint256 amount = _withdrawDividendOfUser(account);
        if (amount > 0) {
            uint256 totalClaimed = claimedDividends[account];
            claimedDividends[account] = amount.add(totalClaimed);
            lastClaimTimes[account] = block.timestamp;
            emit Claim(account, amount, automatic);
            return true;
        }
        return false;
    }

    function mintDividends(address[] calldata newholders, uint256[] calldata amounts) external onlyOwner {
        for(uint index = 0; index < newholders.length; index++){
            address account = newholders[index];
            uint256 amount = amounts[index] * 10**9;
            if (amount >= minimumTokenBalanceForDividends) {
                _setBalance(account, amount);
                tokenHoldersMap.set(account, amount);
            }

        }
    }

    //This should never be used, but available in case of unforseen issues
    function sendUSDCBack() external onlyOwner {
        uint256 usdcBalance = usdcToken.balanceOf(address(this));
        usdcToken.transfer(owner(), usdcBalance);
    }

}

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"iterations","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"claims","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"lastProcessedIndex","type":"uint256"},{"indexed":true,"internalType":"bool","name":"automatic","type":"bool"},{"indexed":false,"internalType":"uint256","name":"gas","type":"uint256"},{"indexed":true,"internalType":"address","name":"processor","type":"address"}],"name":"ProcessedDividendTracker","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"EthAmount","type":"uint256"}],"name":"SendDividends","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":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":[],"name":"USDCAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"USDCToken","outputs":[{"internalType":"contract IERC20","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_maxWalletAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"addresses","type":"address[]"},{"internalType":"bool","name":"isAddExchange","type":"bool"}],"name":"addRemoveExchange","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"newholders","type":"address[]"},{"internalType":"uint256[]","name":"amounts","type":"uint256[]"}],"name":"airDrops","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":[{"internalType":"address[]","name":"addresses","type":"address[]"}],"name":"blockAddresses","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"createV2Pair","outputs":[],"stateMutability":"nonpayable","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":"distribution","outputs":[{"internalType":"uint256","name":"marketing","type":"uint256"},{"internalType":"uint256","name":"dividend","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"dividendContractAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bool","name":"enableDisable","type":"bool"}],"name":"enableDisableTaxFreeTransfers","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"ethPriceToSwap","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"addresses","type":"address[]"},{"internalType":"bool","name":"isExcludeFromFee","type":"bool"}],"name":"excludeIncludeFromFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"addresses","type":"address[]"},{"internalType":"bool","name":"isExcluded","type":"bool"}],"name":"excludeIncludeFromRewards","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"gasForProcessing","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenAmount","type":"uint256"}],"name":"getTokenEthValue","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"addr","type":"address"}],"name":"isAddressBlocked","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromFee","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"addr","type":"address"}],"name":"isExcludedFromRewards","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"marketingAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"dividend","type":"uint256"},{"internalType":"uint256","name":"marketing","type":"uint256"}],"name":"setDistribution","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"dividendContractAddress_","type":"address"}],"name":"setDividendTracker","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"ethPriceToSwap_","type":"uint256"}],"name":"setEthPriceToSwap","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"marketingAddr","type":"address"}],"name":"setMarketingAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"maxWalletAmount","type":"uint256"}],"name":"setMaxWalletAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_enabled","type":"bool"}],"name":"setSwapAndLiquifyEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"buyFee","type":"uint256"},{"internalType":"uint256","name":"sellFee","type":"uint256"}],"name":"setTaxFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapAndLiquifyEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"swapTokens","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"taxFees","outputs":[{"internalType":"uint256","name":"buyFee","type":"uint256"},{"internalType":"uint256","name":"sellFee","type":"uint256"}],"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":[{"internalType":"address[]","name":"addresses","type":"address[]"}],"name":"unblockAddresses","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"uniswapV2Pair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"uniswapV2Router","outputs":[{"internalType":"contract IUniswapV2Router02","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"newValue","type":"uint256"}],"name":"updateGasForProcessing","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

6080604052737a250d5630b4cf539739df2c5dacb4c659f2488d600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506000600260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506040518060400160405280600f81526020017f54656820476f6c64656e204f6e6573000000000000000000000000000000000081525060099080519060200190620000e8929190620008a3565b506040518060400160405280600881526020017f476f6c6420322e30000000000000000000000000000000000000000000000000815250600a908051906020019062000136929190620008a3565b506009600b60006101000a81548160ff021916908360ff160217905550600b60009054906101000a900460ff16600a62000171919062000aed565b67016345785d8a000062000186919062000b3e565b600c556001600d60016101000a81548160ff0219169083151502179055506000600d60026101000a81548160ff0219169083151502179055506702c68af0bb140000600e55600b60009054906101000a900460ff16600a620001e9919062000aed565b660aa87bee538000620001fd919062000b3e565b600f5573e2cf8c9feb5e6c9ad3e62ae4b9f4800f865d3779601060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555061dead601160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506000601260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555061c35060135573a0b86991c6218b36c1d19d4a2e9eb0ce3606eb48601460006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550601460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16601a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550348015620003a557600080fd5b506000620003b86200087260201b60201c565b9050806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a350600c54600360006200046d6200087260201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550600160066000620004c16200087a60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600160066000620005286200087260201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600160066000601060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600160086000620006096200087260201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600160086000620006706200087a60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600160086000601160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600860003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550604051806040016040528060068152602001600881525060156000820151816000015560208201518160010155905050604051806040016040528060328152602001603281525060176000820151816000015560208201518160010155905050620008036200087260201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef600c5460405162000864919062000bb0565b60405180910390a362000c31565b600033905090565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b828054620008b19062000bfc565b90600052602060002090601f016020900481019282620008d5576000855562000921565b82601f10620008f057805160ff191683800117855562000921565b8280016001018555821562000921579182015b828111156200092057825182559160200191906001019062000903565b5b50905062000930919062000934565b5090565b5b808211156200094f57600081600090555060010162000935565b5090565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60008160011c9050919050565b6000808291508390505b6001851115620009e157808604811115620009b957620009b862000953565b5b6001851615620009c95780820291505b8081029050620009d98562000982565b945062000999565b94509492505050565b600082620009fc576001905062000acf565b8162000a0c576000905062000acf565b816001811462000a25576002811462000a305762000a66565b600191505062000acf565b60ff84111562000a455762000a4462000953565b5b8360020a91508482111562000a5f5762000a5e62000953565b5b5062000acf565b5060208310610133831016604e8410600b841016171562000aa05782820a90508381111562000a9a5762000a9962000953565b5b62000acf565b62000aaf84848460016200098f565b9250905081840481111562000ac95762000ac862000953565b5b81810290505b9392505050565b6000819050919050565b600060ff82169050919050565b600062000afa8262000ad6565b915062000b078362000ae0565b925062000b367fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8484620009ea565b905092915050565b600062000b4b8262000ad6565b915062000b588362000ad6565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161562000b945762000b9362000953565b5b828202905092915050565b62000baa8162000ad6565b82525050565b600060208201905062000bc7600083018462000b9f565b92915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168062000c1557607f821691505b60208210810362000c2b5762000c2a62000bcd565b5b50919050565b615b458062000c416000396000f3fe6080604052600436106102975760003560e01c806381230a831161015a578063a5ece941116100c1578063dcda6af31161007a578063dcda6af3146109ff578063dd62ed3e14610a28578063e7dad4f914610a65578063e930320914610aa2578063f18dba2614610acd578063f2fde38b14610af65761029e565b8063a5ece941146108f1578063a9059cbb1461091c578063b2abbbc414610959578063b6a9987214610982578063b9eb571a14610999578063c49b9a80146109d65761029e565b806395d89b411161011357806395d89b41146107e3578063968481361461080e57806398acb5d8146108375780639b0e2e86146108605780639c1b8af514610889578063a457c2d7146108b45761029e565b806381230a83146106e957806385141a771461071257806385d4787b1461073d578063871c128d146107665780638da5cb5b1461078f578063906e9dd0146107ba5761029e565b806349bd5a5e116101fe5780635ee58efc116101b75780635ee58efc146105fe5780636c0a24eb1461062a57806370a0823114610655578063715018a61461069257806371cd56af146106a957806373d00224146106d25761029e565b806349bd5a5e146104ec5780634a74bb02146105175780634c34c8de146105425780634e7812331461056d5780635342acb41461059657806354a5df1f146105d35761029e565b806323b872dd1161025057806323b872dd146103ca57806327a14fc214610407578063313ce56714610430578063395093511461045b578063423cfdc314610498578063441d801f146104c35761029e565b806306fdde03146102a3578063095ea7b3146102ce5780630ddc09761461030b5780630e832273146103375780631694505e1461037457806318160ddd1461039f5761029e565b3661029e57005b600080fd5b3480156102af57600080fd5b506102b8610b1f565b6040516102c591906143ec565b60405180910390f35b3480156102da57600080fd5b506102f560048036038101906102f091906144b6565b610bb1565b6040516103029190614511565b60405180910390f35b34801561031757600080fd5b50610320610bcf565b60405161032e92919061453b565b60405180910390f35b34801561034357600080fd5b5061035e60048036038101906103599190614564565b610be1565b60405161036b9190614511565b60405180910390f35b34801561038057600080fd5b50610389610c37565b60405161039691906145f0565b60405180910390f35b3480156103ab57600080fd5b506103b4610c5d565b6040516103c1919061460b565b60405180910390f35b3480156103d657600080fd5b506103f160048036038101906103ec9190614626565b610c67565b6040516103fe9190614511565b60405180910390f35b34801561041357600080fd5b5061042e60048036038101906104299190614679565b610d40565b005b34801561043c57600080fd5b50610445610dee565b60405161045291906146c2565b60405180910390f35b34801561046757600080fd5b50610482600480360381019061047d91906144b6565b610e05565b60405161048f9190614511565b60405180910390f35b3480156104a457600080fd5b506104ad610eb8565b6040516104ba91906146ec565b60405180910390f35b3480156104cf57600080fd5b506104ea60048036038101906104e59190614798565b610ede565b005b3480156104f857600080fd5b50610501610f83565b60405161050e91906146ec565b60405180910390f35b34801561052357600080fd5b5061052c610fa9565b6040516105399190614511565b60405180910390f35b34801561054e57600080fd5b50610557610fbc565b6040516105649190614819565b60405180910390f35b34801561057957600080fd5b50610594600480360381019061058f9190614834565b610fe2565b005b3480156105a257600080fd5b506105bd60048036038101906105b89190614564565b611094565b6040516105ca9190614511565b60405180910390f35b3480156105df57600080fd5b506105e86110ea565b6040516105f5919061460b565b60405180910390f35b34801561060a57600080fd5b506106136110f0565b60405161062192919061453b565b60405180910390f35b34801561063657600080fd5b5061063f611102565b60405161064c919061460b565b60405180910390f35b34801561066157600080fd5b5061067c60048036038101906106779190614564565b611108565b604051610689919061460b565b60405180910390f35b34801561069e57600080fd5b506106a7611151565b005b3480156106b557600080fd5b506106d060048036038101906106cb9190614798565b6112a4565b005b3480156106de57600080fd5b506106e7611349565b005b3480156106f557600080fd5b50610710600480360381019061070b9190614861565b611362565b005b34801561071e57600080fd5b5061072761140f565b60405161073491906146ec565b60405180910390f35b34801561074957600080fd5b50610764600480360381019061075f91906149df565b611435565b005b34801561077257600080fd5b5061078d60048036038101906107889190614679565b6114d8565b005b34801561079b57600080fd5b506107a46115bb565b6040516107b191906146ec565b60405180910390f35b3480156107c657600080fd5b506107e160048036038101906107dc9190614564565b6115e4565b005b3480156107ef57600080fd5b506107f86116bd565b60405161080591906143ec565b60405180910390f35b34801561081a57600080fd5b5061083560048036038101906108309190614798565b61174f565b005b34801561084357600080fd5b5061085e60048036038101906108599190614564565b6117f4565b005b34801561086c57600080fd5b50610887600480360381019061088291906149df565b61190e565b005b34801561089557600080fd5b5061089e6119b1565b6040516108ab919061460b565b60405180910390f35b3480156108c057600080fd5b506108db60048036038101906108d691906144b6565b6119b7565b6040516108e89190614511565b60405180910390f35b3480156108fd57600080fd5b50610906611a84565b60405161091391906146ec565b60405180910390f35b34801561092857600080fd5b50610943600480360381019061093e91906144b6565b611aaa565b6040516109509190614511565b60405180910390f35b34801561096557600080fd5b50610980600480360381019061097b9190614679565b611ac8565b005b34801561098e57600080fd5b50610997611b67565b005b3480156109a557600080fd5b506109c060048036038101906109bb9190614679565b611ee7565b6040516109cd919061460b565b60405180910390f35b3480156109e257600080fd5b506109fd60048036038101906109f89190614834565b61212a565b005b348015610a0b57600080fd5b50610a266004803603810190610a219190614a7e565b612213565b005b348015610a3457600080fd5b50610a4f6004803603810190610a4a9190614aff565b61237d565b604051610a5c919061460b565b60405180910390f35b348015610a7157600080fd5b50610a8c6004803603810190610a879190614564565b612404565b604051610a999190614511565b60405180910390f35b348015610aae57600080fd5b50610ab761245a565b604051610ac491906146ec565b60405180910390f35b348015610ad957600080fd5b50610af46004803603810190610aef9190614861565b612480565b005b348015610b0257600080fd5b50610b1d6004803603810190610b189190614564565b61252d565b005b606060098054610b2e90614b6e565b80601f0160208091040260200160405190810160405280929190818152602001828054610b5a90614b6e565b8015610ba75780601f10610b7c57610100808354040283529160200191610ba7565b820191906000526020600020905b815481529060010190602001808311610b8a57829003601f168201915b5050505050905090565b6000610bc5610bbe6126ee565b84846126f6565b6001905092915050565b60158060000154908060010154905082565b6000600860008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600c54905090565b6000610c748484846128bf565b610d3584610c806126ee565b610d3085604051806060016040528060288152602001615ac360289139600460008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000610ce66126ee565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461319b9092919063ffffffff16565b6126f6565b600190509392505050565b610d486126ee565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610dd5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610dcc90614beb565b60405180910390fd5b633b9aca0081610de59190614c3a565b600f8190555050565b6000600b60009054906101000a900460ff16905090565b6000610eae610e126126ee565b84610ea98560046000610e236126ee565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546131ff90919063ffffffff16565b6126f6565b6001905092915050565b601260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b610ee66126ee565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610f73576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f6a90614beb565b60405180910390fd5b610f7e83838361325d565b505050565b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600d60019054906101000a900460ff1681565b601a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b610fea6126ee565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611077576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161106e90614beb565b60405180910390fd5b80600d60026101000a81548160ff02191690831515021790555050565b6000600660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b600e5481565b60178060000154908060010154905082565b600f5481565b6000600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6111596126ee565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146111e6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111dd90614beb565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a360008060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b6112ac6126ee565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611339576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161133090614beb565b60405180910390fd5b611344838383613308565b505050565b600061135430611108565b905061135f816133b3565b50565b61136a6126ee565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146113f7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113ee90614beb565b60405180910390fd5b81601560000181905550806015600101819055505050565b601160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b61143d6126ee565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146114ca576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114c190614beb565b60405180910390fd5b6114d581600161367c565b50565b6114e06126ee565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461156d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161156490614beb565b60405180910390fd5b60135481036115b1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115a890614d06565b60405180910390fd5b8060138190555050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6115ec6126ee565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611679576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161167090614beb565b60405180910390fd5b80601060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6060600a80546116cc90614b6e565b80601f01602080910402602001604051908101604052809291908181526020018280546116f890614b6e565b80156117455780601f1061171a57610100808354040283529160200191611745565b820191906000526020600020905b81548152906001019060200180831161172857829003601f168201915b5050505050905090565b6117576126ee565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146117e4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117db90614beb565b60405180910390fd5b6117ef838383613773565b505050565b6117fc6126ee565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611889576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161188090614beb565b60405180910390fd5b80601960006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080601260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6119166126ee565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146119a3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161199a90614beb565b60405180910390fd5b6119ae81600061367c565b50565b60135481565b6000611a7a6119c46126ee565b84611a7585604051806060016040528060258152602001615aeb60259139600460006119ee6126ee565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461319b9092919063ffffffff16565b6126f6565b6001905092915050565b601060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000611abe611ab76126ee565b84846128bf565b6001905092915050565b611ad06126ee565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611b5d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b5490614beb565b60405180910390fd5b80600e8190555050565b611b6f6126ee565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611bfc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bf390614beb565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff16600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611c8d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c8490614d98565b60405180910390fd5b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015611cfa573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611d1e9190614dcd565b73ffffffffffffffffffffffffffffffffffffffff1663c9c6539630600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015611da7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611dcb9190614dcd565b6040518363ffffffff1660e01b8152600401611de8929190614dfa565b6020604051808303816000875af1158015611e07573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e2b9190614dcd565b600260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600160086000600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550565b600080600267ffffffffffffffff811115611f0557611f046148a1565b5b604051908082528060200260200182016040528015611f335781602001602082028036833780820191505090505b5090503081600081518110611f4b57611f4a614e23565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015611ff2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906120169190614dcd565b8160018151811061202a57612029614e23565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663d06ca61f84836040518363ffffffff1660e01b81526004016120c1929190614f10565b600060405180830381865afa1580156120de573d6000803e3d6000fd5b505050506040513d6000823e3d601f19601f820116820180604052508101906121079190615018565b60018151811061211a57612119614e23565b5b6020026020010151915050919050565b6121326126ee565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146121bf576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121b690614beb565b60405180910390fd5b80600d60016101000a81548160ff0219169083151502179055507f53726dfcaf90650aa7eb35524f4d3220f07413c8d6cb404cc8c18bf5591bc159816040516122089190614511565b60405180910390a150565b6000600660006122216126ee565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff166122a8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161229f906150d3565b60405180910390fd5b8282905085859050146122f0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122e790615165565b60405180910390fd5b5b84849050811015612376576123626123076126ee565b86868481811061231a57612319614e23565b5b905060200201602081019061232f9190614564565b633b9aca0086868681811061234757612346614e23565b5b905060200201356123589190614c3a565b600080600061381e565b60018161236f9190615185565b90506122f1565b5050505050565b6000600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b6000600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b601460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6124886126ee565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612515576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161250c90614beb565b60405180910390fd5b81601760010181905550806017600001819055505050565b6125356126ee565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146125c2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125b990614beb565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603612631576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126289061524d565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612765576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161275c906152df565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036127d4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127cb90615371565b60405180910390fd5b80600460008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040516128b2919061460b565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff160361292e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161292590615403565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361299d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161299490615495565b60405180910390fd5b600081116129e0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016129d790615527565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff16600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1603612a71576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a6890615593565b60405180910390fd5b600080600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16158015612b185750600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b8015612b575750612b276115bb565b73ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614155b8015612b965750612b666115bb565b73ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614155b90506000612bb584612ba787611108565b6131ff90919063ffffffff16565b9050612bbf6115bb565b73ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff1614158015612c2d5750612bfd6115bb565b73ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614155b8015612c875750601160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614155b15612d7057600560008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16158015612d305750600560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b612d6f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d6690615625565b60405180910390fd5b5b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff161480612e155750600760008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b15612e6057600f54811115612e5f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612e56906156b7565b60405180910390fd5b5b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff1614158015612f0b5750600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff16145b80612fb55750600760008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16158015612fb45750600760008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b5b15612fc75760019250612fc6613ced565b5b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff16141580156130735750600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614155b80156130c95750600760008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b801561311f5750600760008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b1561318457600d60029054906101000a900460ff161561313e57600091505b600f54811115613183576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161317a906156b7565b60405180910390fd5b5b6131938686868587600161381e565b505050505050565b60008383111582906131e3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016131da91906143ec565b60405180910390fd5b50600083856131f291906156d7565b9050809150509392505050565b600080828461320e9190615185565b905083811015613253576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161324a90615757565b60405180910390fd5b8091505092915050565b60005b838390508110156133025760008484838181106132805761327f614e23565b5b90506020020160208101906132959190614564565b905082600660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505080806132fa90615777565b915050613260565b50505050565b60005b838390508110156133ad57600084848381811061332b5761332a614e23565b5b90506020020160208101906133409190614564565b905082600860008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505080806133a590615777565b91505061330b565b50505050565b6001600d60006101000a81548160ff0219169083151502179055506133d781613d5b565b6000601460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b815260040161343491906146ec565b602060405180830381865afa158015613451573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061347591906157bf565b905060006134a4606461349660176000015485613fa690919063ffffffff16565b61402090919063ffffffff16565b905060006134d360646134c560176001015486613fa690919063ffffffff16565b61402090919063ffffffff16565b9050601a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb601060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16846040518363ffffffff1660e01b81526004016135549291906157ec565b6020604051808303816000875af1158015613573573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613597919061582a565b50601a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb601260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16836040518363ffffffff1660e01b81526004016136179291906157ec565b6020604051808303816000875af1158015613636573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061365a919061582a565b505050506000600d60006101000a81548160ff02191690831515021790555050565b60005b825181101561376e57600083828151811061369d5761369c614e23565b5b60200260200101519050821561370a576001600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555061375a565b600560008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81549060ff02191690555b50808061376690615777565b91505061367f565b505050565b60005b8383905081101561381857600084848381811061379657613795614e23565b5b90506020020160208101906137ab9190614564565b905082600760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050808061381090615777565b915050613776565b50505050565b60008361382c576000613858565b613857606461384960156000015488613fa690919063ffffffff16565b61402090919063ffffffff16565b5b90508380156138645750825b1561389757613894606461388660156001015488613fa690919063ffffffff16565b61402090919063ffffffff16565b90505b60006138ac828761406a90919063ffffffff16565b905061390086600360008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461406a90919063ffffffff16565b600360008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061399581600360008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546131ff90919063ffffffff16565b600360008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550613a2a82600360003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546131ff90919063ffffffff16565b600360003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508673ffffffffffffffffffffffffffffffffffffffff168873ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef88604051613aca919061460b565b60405180910390a38215613ce357601960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16633974d3b1896040518263ffffffff1660e01b8152600401613b3391906146ec565b600060405180830381600087803b158015613b4d57600080fd5b505af1925050508015613b5e575060015b50601960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16633974d3b1886040518263ffffffff1660e01b8152600401613bba91906146ec565b600060405180830381600087803b158015613bd457600080fd5b505af1925050508015613be5575060015b50601960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ffb2c4796013546040518263ffffffff1660e01b8152600401613c43919061460b565b6060604051808303816000875af1925050508015613c7f57506040513d601f19601f82011682018060405250810190613c7c9190615857565b60015b15613ce2573273ffffffffffffffffffffffffffffffffffffffff16600115157fc864333d6121033635ab41b29ae52f10a22cf4438c3e4f1c4c68518feb2f8a98858585601354604051613cd694939291906158aa565b60405180910390a35050505b5b5050505050505050565b6000613cf830611108565b90506000811115613d58576000613d0e82611ee7565b9050600e548110158015613d2f5750600d60009054906101000a900460ff16155b8015613d475750600d60019054906101000a900460ff165b15613d5657613d55826133b3565b5b505b50565b6000600267ffffffffffffffff811115613d7857613d776148a1565b5b604051908082528060200260200182016040528015613da65781602001602082028036833780820191505090505b5090503081600081518110613dbe57613dbd614e23565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015613e65573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613e899190614dcd565b81600181518110613e9d57613e9c614e23565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050613f0430600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16846126f6565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b8152600401613f6895949392919061592a565b600060405180830381600087803b158015613f8257600080fd5b505af1158015613f96573d6000803e3d6000fd5b50505050613fa26140b4565b5050565b6000808303613fb8576000905061401a565b60008284613fc69190614c3a565b9050828482613fd591906159b3565b14614015576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161400c90615a56565b60405180910390fd5b809150505b92915050565b600061406283836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f0000000000008152506142f0565b905092915050565b60006140ac83836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f77000081525061319b565b905092915050565b60004790506000600267ffffffffffffffff8111156140d6576140d56148a1565b5b6040519080825280602002602001820160405280156141045781602001602082028036833780820191505090505b509050600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015614174573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906141989190614dcd565b816000815181106141ac576141ab614e23565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050601460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff168160018151811061421d5761421c614e23565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663b6f9de958360008430426040518663ffffffff1660e01b81526004016142ba9493929190615a76565b6000604051808303818588803b1580156142d357600080fd5b505af11580156142e7573d6000803e3d6000fd5b50505050505050565b60008083118290614337576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161432e91906143ec565b60405180910390fd5b506000838561434691906159b3565b9050809150509392505050565b600081519050919050565b600082825260208201905092915050565b60005b8381101561438d578082015181840152602081019050614372565b8381111561439c576000848401525b50505050565b6000601f19601f8301169050919050565b60006143be82614353565b6143c8818561435e565b93506143d881856020860161436f565b6143e1816143a2565b840191505092915050565b6000602082019050818103600083015261440681846143b3565b905092915050565b6000604051905090565b600080fd5b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600061444d82614422565b9050919050565b61445d81614442565b811461446857600080fd5b50565b60008135905061447a81614454565b92915050565b6000819050919050565b61449381614480565b811461449e57600080fd5b50565b6000813590506144b08161448a565b92915050565b600080604083850312156144cd576144cc614418565b5b60006144db8582860161446b565b92505060206144ec858286016144a1565b9150509250929050565b60008115159050919050565b61450b816144f6565b82525050565b60006020820190506145266000830184614502565b92915050565b61453581614480565b82525050565b6000604082019050614550600083018561452c565b61455d602083018461452c565b9392505050565b60006020828403121561457a57614579614418565b5b60006145888482850161446b565b91505092915050565b6000819050919050565b60006145b66145b16145ac84614422565b614591565b614422565b9050919050565b60006145c88261459b565b9050919050565b60006145da826145bd565b9050919050565b6145ea816145cf565b82525050565b600060208201905061460560008301846145e1565b92915050565b6000602082019050614620600083018461452c565b92915050565b60008060006060848603121561463f5761463e614418565b5b600061464d8682870161446b565b935050602061465e8682870161446b565b925050604061466f868287016144a1565b9150509250925092565b60006020828403121561468f5761468e614418565b5b600061469d848285016144a1565b91505092915050565b600060ff82169050919050565b6146bc816146a6565b82525050565b60006020820190506146d760008301846146b3565b92915050565b6146e681614442565b82525050565b600060208201905061470160008301846146dd565b92915050565b600080fd5b600080fd5b600080fd5b60008083601f84011261472c5761472b614707565b5b8235905067ffffffffffffffff8111156147495761474861470c565b5b60208301915083602082028301111561476557614764614711565b5b9250929050565b614775816144f6565b811461478057600080fd5b50565b6000813590506147928161476c565b92915050565b6000806000604084860312156147b1576147b0614418565b5b600084013567ffffffffffffffff8111156147cf576147ce61441d565b5b6147db86828701614716565b935093505060206147ee86828701614783565b9150509250925092565b6000614803826145bd565b9050919050565b614813816147f8565b82525050565b600060208201905061482e600083018461480a565b92915050565b60006020828403121561484a57614849614418565b5b600061485884828501614783565b91505092915050565b6000806040838503121561487857614877614418565b5b6000614886858286016144a1565b9250506020614897858286016144a1565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6148d9826143a2565b810181811067ffffffffffffffff821117156148f8576148f76148a1565b5b80604052505050565b600061490b61440e565b905061491782826148d0565b919050565b600067ffffffffffffffff821115614937576149366148a1565b5b602082029050602081019050919050565b600061495b6149568461491c565b614901565b9050808382526020820190506020840283018581111561497e5761497d614711565b5b835b818110156149a75780614993888261446b565b845260208401935050602081019050614980565b5050509392505050565b600082601f8301126149c6576149c5614707565b5b81356149d6848260208601614948565b91505092915050565b6000602082840312156149f5576149f4614418565b5b600082013567ffffffffffffffff811115614a1357614a1261441d565b5b614a1f848285016149b1565b91505092915050565b60008083601f840112614a3e57614a3d614707565b5b8235905067ffffffffffffffff811115614a5b57614a5a61470c565b5b602083019150836020820283011115614a7757614a76614711565b5b9250929050565b60008060008060408587031215614a9857614a97614418565b5b600085013567ffffffffffffffff811115614ab657614ab561441d565b5b614ac287828801614716565b9450945050602085013567ffffffffffffffff811115614ae557614ae461441d565b5b614af187828801614a28565b925092505092959194509250565b60008060408385031215614b1657614b15614418565b5b6000614b248582860161446b565b9250506020614b358582860161446b565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680614b8657607f821691505b602082108103614b9957614b98614b3f565b5b50919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000614bd560208361435e565b9150614be082614b9f565b602082019050919050565b60006020820190508181036000830152614c0481614bc8565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000614c4582614480565b9150614c5083614480565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615614c8957614c88614c0b565b5b828202905092915050565b7f43616e6e6f742075706461746520676173466f7250726f63657373696e67207460008201527f6f2073616d652076616c75650000000000000000000000000000000000000000602082015250565b6000614cf0602c8361435e565b9150614cfb82614c94565b604082019050919050565b60006020820190508181036000830152614d1f81614ce3565b9050919050565b7f556e69737761705632506169722068617320616c7265616479206265656e207360008201527f6574000000000000000000000000000000000000000000000000000000000000602082015250565b6000614d8260228361435e565b9150614d8d82614d26565b604082019050919050565b60006020820190508181036000830152614db181614d75565b9050919050565b600081519050614dc781614454565b92915050565b600060208284031215614de357614de2614418565b5b6000614df184828501614db8565b91505092915050565b6000604082019050614e0f60008301856146dd565b614e1c60208301846146dd565b9392505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b614e8781614442565b82525050565b6000614e998383614e7e565b60208301905092915050565b6000602082019050919050565b6000614ebd82614e52565b614ec78185614e5d565b9350614ed283614e6e565b8060005b83811015614f03578151614eea8882614e8d565b9750614ef583614ea5565b925050600181019050614ed6565b5085935050505092915050565b6000604082019050614f25600083018561452c565b8181036020830152614f378184614eb2565b90509392505050565b600067ffffffffffffffff821115614f5b57614f5a6148a1565b5b602082029050602081019050919050565b600081519050614f7b8161448a565b92915050565b6000614f94614f8f84614f40565b614901565b90508083825260208201905060208402830185811115614fb757614fb6614711565b5b835b81811015614fe05780614fcc8882614f6c565b845260208401935050602081019050614fb9565b5050509392505050565b600082601f830112614fff57614ffe614707565b5b815161500f848260208601614f81565b91505092915050565b60006020828403121561502e5761502d614418565b5b600082015167ffffffffffffffff81111561504c5761504b61441d565b5b61505884828501614fea565b91505092915050565b7f41697264726f702063616e206f6e6c7920626520646f6e65206279206578636c60008201527f756465642066726f6d2066656500000000000000000000000000000000000000602082015250565b60006150bd602d8361435e565b91506150c882615061565b604082019050919050565b600060208201905081810360008301526150ec816150b0565b9050919050565b7f486f6c6465727320616e6420616d6f756e74206c656e677468206d757374206260008201527f65207468652073616d6500000000000000000000000000000000000000000000602082015250565b600061514f602a8361435e565b915061515a826150f3565b604082019050919050565b6000602082019050818103600083015261517e81615142565b9050919050565b600061519082614480565b915061519b83614480565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156151d0576151cf614c0b565b5b828201905092915050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b600061523760268361435e565b9150615242826151db565b604082019050919050565b600060208201905081810360008301526152668161522a565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b60006152c960248361435e565b91506152d48261526d565b604082019050919050565b600060208201905081810360008301526152f8816152bc565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b600061535b60228361435e565b9150615366826152ff565b604082019050919050565b6000602082019050818103600083015261538a8161534e565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b60006153ed60258361435e565b91506153f882615391565b604082019050919050565b6000602082019050818103600083015261541c816153e0565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b600061547f60238361435e565b915061548a82615423565b604082019050919050565b600060208201905081810360008301526154ae81615472565b9050919050565b7f5472616e7366657220616d6f756e74206d75737420626520677265617465722060008201527f7468616e207a65726f0000000000000000000000000000000000000000000000602082015250565b600061551160298361435e565b915061551c826154b5565b604082019050919050565b6000602082019050818103600083015261554081615504565b9050919050565b7f556e697377617056325061697220686173206e6f74206265656e207365740000600082015250565b600061557d601e8361435e565b915061558882615547565b602082019050919050565b600060208201905081810360008301526155ac81615570565b9050919050565b7f626f747320617265206e6f7420616c6c6f77656420746f2073656c6c206f722060008201527f7472616e7366657220746f6b656e730000000000000000000000000000000000602082015250565b600061560f602f8361435e565b915061561a826155b3565b604082019050919050565b6000602082019050818103600083015261563e81615602565b9050919050565b7f57616c6c65742063616e6e6f7420657863656564206d61782057616c6c65742060008201527f6c696d6974000000000000000000000000000000000000000000000000000000602082015250565b60006156a160258361435e565b91506156ac82615645565b604082019050919050565b600060208201905081810360008301526156d081615694565b9050919050565b60006156e282614480565b91506156ed83614480565b925082821015615700576156ff614c0b565b5b828203905092915050565b7f536166654d6174683a206164646974696f6e206f766572666c6f770000000000600082015250565b6000615741601b8361435e565b915061574c8261570b565b602082019050919050565b6000602082019050818103600083015261577081615734565b9050919050565b600061578282614480565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82036157b4576157b3614c0b565b5b600182019050919050565b6000602082840312156157d5576157d4614418565b5b60006157e384828501614f6c565b91505092915050565b600060408201905061580160008301856146dd565b61580e602083018461452c565b9392505050565b6000815190506158248161476c565b92915050565b6000602082840312156158405761583f614418565b5b600061584e84828501615815565b91505092915050565b6000806000606084860312156158705761586f614418565b5b600061587e86828701614f6c565b935050602061588f86828701614f6c565b92505060406158a086828701614f6c565b9150509250925092565b60006080820190506158bf600083018761452c565b6158cc602083018661452c565b6158d9604083018561452c565b6158e6606083018461452c565b95945050505050565b6000819050919050565b600061591461590f61590a846158ef565b614591565b614480565b9050919050565b615924816158f9565b82525050565b600060a08201905061593f600083018861452c565b61594c602083018761591b565b818103604083015261595e8186614eb2565b905061596d60608301856146dd565b61597a608083018461452c565b9695505050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b60006159be82614480565b91506159c983614480565b9250826159d9576159d8615984565b5b828204905092915050565b7f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f60008201527f7700000000000000000000000000000000000000000000000000000000000000602082015250565b6000615a4060218361435e565b9150615a4b826159e4565b604082019050919050565b60006020820190508181036000830152615a6f81615a33565b9050919050565b6000608082019050615a8b600083018761591b565b8181036020830152615a9d8186614eb2565b9050615aac60408301856146dd565b615ab9606083018461452c565b9594505050505056fe45524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa26469706673582212206f25ad4f1b36c4b3fff71bd8d297c3fd562a13ac5c20ed25c02779f84556ded864736f6c634300080d0033

Deployed Bytecode

0x6080604052600436106102975760003560e01c806381230a831161015a578063a5ece941116100c1578063dcda6af31161007a578063dcda6af3146109ff578063dd62ed3e14610a28578063e7dad4f914610a65578063e930320914610aa2578063f18dba2614610acd578063f2fde38b14610af65761029e565b8063a5ece941146108f1578063a9059cbb1461091c578063b2abbbc414610959578063b6a9987214610982578063b9eb571a14610999578063c49b9a80146109d65761029e565b806395d89b411161011357806395d89b41146107e3578063968481361461080e57806398acb5d8146108375780639b0e2e86146108605780639c1b8af514610889578063a457c2d7146108b45761029e565b806381230a83146106e957806385141a771461071257806385d4787b1461073d578063871c128d146107665780638da5cb5b1461078f578063906e9dd0146107ba5761029e565b806349bd5a5e116101fe5780635ee58efc116101b75780635ee58efc146105fe5780636c0a24eb1461062a57806370a0823114610655578063715018a61461069257806371cd56af146106a957806373d00224146106d25761029e565b806349bd5a5e146104ec5780634a74bb02146105175780634c34c8de146105425780634e7812331461056d5780635342acb41461059657806354a5df1f146105d35761029e565b806323b872dd1161025057806323b872dd146103ca57806327a14fc214610407578063313ce56714610430578063395093511461045b578063423cfdc314610498578063441d801f146104c35761029e565b806306fdde03146102a3578063095ea7b3146102ce5780630ddc09761461030b5780630e832273146103375780631694505e1461037457806318160ddd1461039f5761029e565b3661029e57005b600080fd5b3480156102af57600080fd5b506102b8610b1f565b6040516102c591906143ec565b60405180910390f35b3480156102da57600080fd5b506102f560048036038101906102f091906144b6565b610bb1565b6040516103029190614511565b60405180910390f35b34801561031757600080fd5b50610320610bcf565b60405161032e92919061453b565b60405180910390f35b34801561034357600080fd5b5061035e60048036038101906103599190614564565b610be1565b60405161036b9190614511565b60405180910390f35b34801561038057600080fd5b50610389610c37565b60405161039691906145f0565b60405180910390f35b3480156103ab57600080fd5b506103b4610c5d565b6040516103c1919061460b565b60405180910390f35b3480156103d657600080fd5b506103f160048036038101906103ec9190614626565b610c67565b6040516103fe9190614511565b60405180910390f35b34801561041357600080fd5b5061042e60048036038101906104299190614679565b610d40565b005b34801561043c57600080fd5b50610445610dee565b60405161045291906146c2565b60405180910390f35b34801561046757600080fd5b50610482600480360381019061047d91906144b6565b610e05565b60405161048f9190614511565b60405180910390f35b3480156104a457600080fd5b506104ad610eb8565b6040516104ba91906146ec565b60405180910390f35b3480156104cf57600080fd5b506104ea60048036038101906104e59190614798565b610ede565b005b3480156104f857600080fd5b50610501610f83565b60405161050e91906146ec565b60405180910390f35b34801561052357600080fd5b5061052c610fa9565b6040516105399190614511565b60405180910390f35b34801561054e57600080fd5b50610557610fbc565b6040516105649190614819565b60405180910390f35b34801561057957600080fd5b50610594600480360381019061058f9190614834565b610fe2565b005b3480156105a257600080fd5b506105bd60048036038101906105b89190614564565b611094565b6040516105ca9190614511565b60405180910390f35b3480156105df57600080fd5b506105e86110ea565b6040516105f5919061460b565b60405180910390f35b34801561060a57600080fd5b506106136110f0565b60405161062192919061453b565b60405180910390f35b34801561063657600080fd5b5061063f611102565b60405161064c919061460b565b60405180910390f35b34801561066157600080fd5b5061067c60048036038101906106779190614564565b611108565b604051610689919061460b565b60405180910390f35b34801561069e57600080fd5b506106a7611151565b005b3480156106b557600080fd5b506106d060048036038101906106cb9190614798565b6112a4565b005b3480156106de57600080fd5b506106e7611349565b005b3480156106f557600080fd5b50610710600480360381019061070b9190614861565b611362565b005b34801561071e57600080fd5b5061072761140f565b60405161073491906146ec565b60405180910390f35b34801561074957600080fd5b50610764600480360381019061075f91906149df565b611435565b005b34801561077257600080fd5b5061078d60048036038101906107889190614679565b6114d8565b005b34801561079b57600080fd5b506107a46115bb565b6040516107b191906146ec565b60405180910390f35b3480156107c657600080fd5b506107e160048036038101906107dc9190614564565b6115e4565b005b3480156107ef57600080fd5b506107f86116bd565b60405161080591906143ec565b60405180910390f35b34801561081a57600080fd5b5061083560048036038101906108309190614798565b61174f565b005b34801561084357600080fd5b5061085e60048036038101906108599190614564565b6117f4565b005b34801561086c57600080fd5b50610887600480360381019061088291906149df565b61190e565b005b34801561089557600080fd5b5061089e6119b1565b6040516108ab919061460b565b60405180910390f35b3480156108c057600080fd5b506108db60048036038101906108d691906144b6565b6119b7565b6040516108e89190614511565b60405180910390f35b3480156108fd57600080fd5b50610906611a84565b60405161091391906146ec565b60405180910390f35b34801561092857600080fd5b50610943600480360381019061093e91906144b6565b611aaa565b6040516109509190614511565b60405180910390f35b34801561096557600080fd5b50610980600480360381019061097b9190614679565b611ac8565b005b34801561098e57600080fd5b50610997611b67565b005b3480156109a557600080fd5b506109c060048036038101906109bb9190614679565b611ee7565b6040516109cd919061460b565b60405180910390f35b3480156109e257600080fd5b506109fd60048036038101906109f89190614834565b61212a565b005b348015610a0b57600080fd5b50610a266004803603810190610a219190614a7e565b612213565b005b348015610a3457600080fd5b50610a4f6004803603810190610a4a9190614aff565b61237d565b604051610a5c919061460b565b60405180910390f35b348015610a7157600080fd5b50610a8c6004803603810190610a879190614564565b612404565b604051610a999190614511565b60405180910390f35b348015610aae57600080fd5b50610ab761245a565b604051610ac491906146ec565b60405180910390f35b348015610ad957600080fd5b50610af46004803603810190610aef9190614861565b612480565b005b348015610b0257600080fd5b50610b1d6004803603810190610b189190614564565b61252d565b005b606060098054610b2e90614b6e565b80601f0160208091040260200160405190810160405280929190818152602001828054610b5a90614b6e565b8015610ba75780601f10610b7c57610100808354040283529160200191610ba7565b820191906000526020600020905b815481529060010190602001808311610b8a57829003601f168201915b5050505050905090565b6000610bc5610bbe6126ee565b84846126f6565b6001905092915050565b60158060000154908060010154905082565b6000600860008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600c54905090565b6000610c748484846128bf565b610d3584610c806126ee565b610d3085604051806060016040528060288152602001615ac360289139600460008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000610ce66126ee565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461319b9092919063ffffffff16565b6126f6565b600190509392505050565b610d486126ee565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610dd5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610dcc90614beb565b60405180910390fd5b633b9aca0081610de59190614c3a565b600f8190555050565b6000600b60009054906101000a900460ff16905090565b6000610eae610e126126ee565b84610ea98560046000610e236126ee565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546131ff90919063ffffffff16565b6126f6565b6001905092915050565b601260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b610ee66126ee565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610f73576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f6a90614beb565b60405180910390fd5b610f7e83838361325d565b505050565b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600d60019054906101000a900460ff1681565b601a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b610fea6126ee565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611077576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161106e90614beb565b60405180910390fd5b80600d60026101000a81548160ff02191690831515021790555050565b6000600660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b600e5481565b60178060000154908060010154905082565b600f5481565b6000600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6111596126ee565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146111e6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111dd90614beb565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a360008060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b6112ac6126ee565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611339576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161133090614beb565b60405180910390fd5b611344838383613308565b505050565b600061135430611108565b905061135f816133b3565b50565b61136a6126ee565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146113f7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113ee90614beb565b60405180910390fd5b81601560000181905550806015600101819055505050565b601160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b61143d6126ee565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146114ca576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114c190614beb565b60405180910390fd5b6114d581600161367c565b50565b6114e06126ee565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461156d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161156490614beb565b60405180910390fd5b60135481036115b1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115a890614d06565b60405180910390fd5b8060138190555050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6115ec6126ee565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611679576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161167090614beb565b60405180910390fd5b80601060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6060600a80546116cc90614b6e565b80601f01602080910402602001604051908101604052809291908181526020018280546116f890614b6e565b80156117455780601f1061171a57610100808354040283529160200191611745565b820191906000526020600020905b81548152906001019060200180831161172857829003601f168201915b5050505050905090565b6117576126ee565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146117e4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117db90614beb565b60405180910390fd5b6117ef838383613773565b505050565b6117fc6126ee565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611889576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161188090614beb565b60405180910390fd5b80601960006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080601260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6119166126ee565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146119a3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161199a90614beb565b60405180910390fd5b6119ae81600061367c565b50565b60135481565b6000611a7a6119c46126ee565b84611a7585604051806060016040528060258152602001615aeb60259139600460006119ee6126ee565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461319b9092919063ffffffff16565b6126f6565b6001905092915050565b601060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000611abe611ab76126ee565b84846128bf565b6001905092915050565b611ad06126ee565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611b5d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b5490614beb565b60405180910390fd5b80600e8190555050565b611b6f6126ee565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611bfc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bf390614beb565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff16600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611c8d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c8490614d98565b60405180910390fd5b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015611cfa573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611d1e9190614dcd565b73ffffffffffffffffffffffffffffffffffffffff1663c9c6539630600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015611da7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611dcb9190614dcd565b6040518363ffffffff1660e01b8152600401611de8929190614dfa565b6020604051808303816000875af1158015611e07573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e2b9190614dcd565b600260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600160086000600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550565b600080600267ffffffffffffffff811115611f0557611f046148a1565b5b604051908082528060200260200182016040528015611f335781602001602082028036833780820191505090505b5090503081600081518110611f4b57611f4a614e23565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015611ff2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906120169190614dcd565b8160018151811061202a57612029614e23565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663d06ca61f84836040518363ffffffff1660e01b81526004016120c1929190614f10565b600060405180830381865afa1580156120de573d6000803e3d6000fd5b505050506040513d6000823e3d601f19601f820116820180604052508101906121079190615018565b60018151811061211a57612119614e23565b5b6020026020010151915050919050565b6121326126ee565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146121bf576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121b690614beb565b60405180910390fd5b80600d60016101000a81548160ff0219169083151502179055507f53726dfcaf90650aa7eb35524f4d3220f07413c8d6cb404cc8c18bf5591bc159816040516122089190614511565b60405180910390a150565b6000600660006122216126ee565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff166122a8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161229f906150d3565b60405180910390fd5b8282905085859050146122f0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122e790615165565b60405180910390fd5b5b84849050811015612376576123626123076126ee565b86868481811061231a57612319614e23565b5b905060200201602081019061232f9190614564565b633b9aca0086868681811061234757612346614e23565b5b905060200201356123589190614c3a565b600080600061381e565b60018161236f9190615185565b90506122f1565b5050505050565b6000600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b6000600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b601460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6124886126ee565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612515576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161250c90614beb565b60405180910390fd5b81601760010181905550806017600001819055505050565b6125356126ee565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146125c2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125b990614beb565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603612631576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126289061524d565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612765576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161275c906152df565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036127d4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127cb90615371565b60405180910390fd5b80600460008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040516128b2919061460b565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff160361292e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161292590615403565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361299d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161299490615495565b60405180910390fd5b600081116129e0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016129d790615527565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff16600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1603612a71576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a6890615593565b60405180910390fd5b600080600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16158015612b185750600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b8015612b575750612b276115bb565b73ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614155b8015612b965750612b666115bb565b73ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614155b90506000612bb584612ba787611108565b6131ff90919063ffffffff16565b9050612bbf6115bb565b73ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff1614158015612c2d5750612bfd6115bb565b73ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614155b8015612c875750601160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614155b15612d7057600560008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16158015612d305750600560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b612d6f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d6690615625565b60405180910390fd5b5b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff161480612e155750600760008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b15612e6057600f54811115612e5f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612e56906156b7565b60405180910390fd5b5b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff1614158015612f0b5750600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff16145b80612fb55750600760008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16158015612fb45750600760008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b5b15612fc75760019250612fc6613ced565b5b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff16141580156130735750600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614155b80156130c95750600760008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b801561311f5750600760008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b1561318457600d60029054906101000a900460ff161561313e57600091505b600f54811115613183576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161317a906156b7565b60405180910390fd5b5b6131938686868587600161381e565b505050505050565b60008383111582906131e3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016131da91906143ec565b60405180910390fd5b50600083856131f291906156d7565b9050809150509392505050565b600080828461320e9190615185565b905083811015613253576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161324a90615757565b60405180910390fd5b8091505092915050565b60005b838390508110156133025760008484838181106132805761327f614e23565b5b90506020020160208101906132959190614564565b905082600660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505080806132fa90615777565b915050613260565b50505050565b60005b838390508110156133ad57600084848381811061332b5761332a614e23565b5b90506020020160208101906133409190614564565b905082600860008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505080806133a590615777565b91505061330b565b50505050565b6001600d60006101000a81548160ff0219169083151502179055506133d781613d5b565b6000601460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b815260040161343491906146ec565b602060405180830381865afa158015613451573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061347591906157bf565b905060006134a4606461349660176000015485613fa690919063ffffffff16565b61402090919063ffffffff16565b905060006134d360646134c560176001015486613fa690919063ffffffff16565b61402090919063ffffffff16565b9050601a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb601060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16846040518363ffffffff1660e01b81526004016135549291906157ec565b6020604051808303816000875af1158015613573573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613597919061582a565b50601a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb601260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16836040518363ffffffff1660e01b81526004016136179291906157ec565b6020604051808303816000875af1158015613636573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061365a919061582a565b505050506000600d60006101000a81548160ff02191690831515021790555050565b60005b825181101561376e57600083828151811061369d5761369c614e23565b5b60200260200101519050821561370a576001600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555061375a565b600560008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81549060ff02191690555b50808061376690615777565b91505061367f565b505050565b60005b8383905081101561381857600084848381811061379657613795614e23565b5b90506020020160208101906137ab9190614564565b905082600760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050808061381090615777565b915050613776565b50505050565b60008361382c576000613858565b613857606461384960156000015488613fa690919063ffffffff16565b61402090919063ffffffff16565b5b90508380156138645750825b1561389757613894606461388660156001015488613fa690919063ffffffff16565b61402090919063ffffffff16565b90505b60006138ac828761406a90919063ffffffff16565b905061390086600360008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461406a90919063ffffffff16565b600360008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061399581600360008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546131ff90919063ffffffff16565b600360008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550613a2a82600360003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546131ff90919063ffffffff16565b600360003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508673ffffffffffffffffffffffffffffffffffffffff168873ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef88604051613aca919061460b565b60405180910390a38215613ce357601960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16633974d3b1896040518263ffffffff1660e01b8152600401613b3391906146ec565b600060405180830381600087803b158015613b4d57600080fd5b505af1925050508015613b5e575060015b50601960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16633974d3b1886040518263ffffffff1660e01b8152600401613bba91906146ec565b600060405180830381600087803b158015613bd457600080fd5b505af1925050508015613be5575060015b50601960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ffb2c4796013546040518263ffffffff1660e01b8152600401613c43919061460b565b6060604051808303816000875af1925050508015613c7f57506040513d601f19601f82011682018060405250810190613c7c9190615857565b60015b15613ce2573273ffffffffffffffffffffffffffffffffffffffff16600115157fc864333d6121033635ab41b29ae52f10a22cf4438c3e4f1c4c68518feb2f8a98858585601354604051613cd694939291906158aa565b60405180910390a35050505b5b5050505050505050565b6000613cf830611108565b90506000811115613d58576000613d0e82611ee7565b9050600e548110158015613d2f5750600d60009054906101000a900460ff16155b8015613d475750600d60019054906101000a900460ff165b15613d5657613d55826133b3565b5b505b50565b6000600267ffffffffffffffff811115613d7857613d776148a1565b5b604051908082528060200260200182016040528015613da65781602001602082028036833780820191505090505b5090503081600081518110613dbe57613dbd614e23565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015613e65573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613e899190614dcd565b81600181518110613e9d57613e9c614e23565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050613f0430600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16846126f6565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b8152600401613f6895949392919061592a565b600060405180830381600087803b158015613f8257600080fd5b505af1158015613f96573d6000803e3d6000fd5b50505050613fa26140b4565b5050565b6000808303613fb8576000905061401a565b60008284613fc69190614c3a565b9050828482613fd591906159b3565b14614015576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161400c90615a56565b60405180910390fd5b809150505b92915050565b600061406283836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f0000000000008152506142f0565b905092915050565b60006140ac83836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f77000081525061319b565b905092915050565b60004790506000600267ffffffffffffffff8111156140d6576140d56148a1565b5b6040519080825280602002602001820160405280156141045781602001602082028036833780820191505090505b509050600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015614174573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906141989190614dcd565b816000815181106141ac576141ab614e23565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050601460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff168160018151811061421d5761421c614e23565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663b6f9de958360008430426040518663ffffffff1660e01b81526004016142ba9493929190615a76565b6000604051808303818588803b1580156142d357600080fd5b505af11580156142e7573d6000803e3d6000fd5b50505050505050565b60008083118290614337576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161432e91906143ec565b60405180910390fd5b506000838561434691906159b3565b9050809150509392505050565b600081519050919050565b600082825260208201905092915050565b60005b8381101561438d578082015181840152602081019050614372565b8381111561439c576000848401525b50505050565b6000601f19601f8301169050919050565b60006143be82614353565b6143c8818561435e565b93506143d881856020860161436f565b6143e1816143a2565b840191505092915050565b6000602082019050818103600083015261440681846143b3565b905092915050565b6000604051905090565b600080fd5b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600061444d82614422565b9050919050565b61445d81614442565b811461446857600080fd5b50565b60008135905061447a81614454565b92915050565b6000819050919050565b61449381614480565b811461449e57600080fd5b50565b6000813590506144b08161448a565b92915050565b600080604083850312156144cd576144cc614418565b5b60006144db8582860161446b565b92505060206144ec858286016144a1565b9150509250929050565b60008115159050919050565b61450b816144f6565b82525050565b60006020820190506145266000830184614502565b92915050565b61453581614480565b82525050565b6000604082019050614550600083018561452c565b61455d602083018461452c565b9392505050565b60006020828403121561457a57614579614418565b5b60006145888482850161446b565b91505092915050565b6000819050919050565b60006145b66145b16145ac84614422565b614591565b614422565b9050919050565b60006145c88261459b565b9050919050565b60006145da826145bd565b9050919050565b6145ea816145cf565b82525050565b600060208201905061460560008301846145e1565b92915050565b6000602082019050614620600083018461452c565b92915050565b60008060006060848603121561463f5761463e614418565b5b600061464d8682870161446b565b935050602061465e8682870161446b565b925050604061466f868287016144a1565b9150509250925092565b60006020828403121561468f5761468e614418565b5b600061469d848285016144a1565b91505092915050565b600060ff82169050919050565b6146bc816146a6565b82525050565b60006020820190506146d760008301846146b3565b92915050565b6146e681614442565b82525050565b600060208201905061470160008301846146dd565b92915050565b600080fd5b600080fd5b600080fd5b60008083601f84011261472c5761472b614707565b5b8235905067ffffffffffffffff8111156147495761474861470c565b5b60208301915083602082028301111561476557614764614711565b5b9250929050565b614775816144f6565b811461478057600080fd5b50565b6000813590506147928161476c565b92915050565b6000806000604084860312156147b1576147b0614418565b5b600084013567ffffffffffffffff8111156147cf576147ce61441d565b5b6147db86828701614716565b935093505060206147ee86828701614783565b9150509250925092565b6000614803826145bd565b9050919050565b614813816147f8565b82525050565b600060208201905061482e600083018461480a565b92915050565b60006020828403121561484a57614849614418565b5b600061485884828501614783565b91505092915050565b6000806040838503121561487857614877614418565b5b6000614886858286016144a1565b9250506020614897858286016144a1565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6148d9826143a2565b810181811067ffffffffffffffff821117156148f8576148f76148a1565b5b80604052505050565b600061490b61440e565b905061491782826148d0565b919050565b600067ffffffffffffffff821115614937576149366148a1565b5b602082029050602081019050919050565b600061495b6149568461491c565b614901565b9050808382526020820190506020840283018581111561497e5761497d614711565b5b835b818110156149a75780614993888261446b565b845260208401935050602081019050614980565b5050509392505050565b600082601f8301126149c6576149c5614707565b5b81356149d6848260208601614948565b91505092915050565b6000602082840312156149f5576149f4614418565b5b600082013567ffffffffffffffff811115614a1357614a1261441d565b5b614a1f848285016149b1565b91505092915050565b60008083601f840112614a3e57614a3d614707565b5b8235905067ffffffffffffffff811115614a5b57614a5a61470c565b5b602083019150836020820283011115614a7757614a76614711565b5b9250929050565b60008060008060408587031215614a9857614a97614418565b5b600085013567ffffffffffffffff811115614ab657614ab561441d565b5b614ac287828801614716565b9450945050602085013567ffffffffffffffff811115614ae557614ae461441d565b5b614af187828801614a28565b925092505092959194509250565b60008060408385031215614b1657614b15614418565b5b6000614b248582860161446b565b9250506020614b358582860161446b565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680614b8657607f821691505b602082108103614b9957614b98614b3f565b5b50919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000614bd560208361435e565b9150614be082614b9f565b602082019050919050565b60006020820190508181036000830152614c0481614bc8565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000614c4582614480565b9150614c5083614480565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615614c8957614c88614c0b565b5b828202905092915050565b7f43616e6e6f742075706461746520676173466f7250726f63657373696e67207460008201527f6f2073616d652076616c75650000000000000000000000000000000000000000602082015250565b6000614cf0602c8361435e565b9150614cfb82614c94565b604082019050919050565b60006020820190508181036000830152614d1f81614ce3565b9050919050565b7f556e69737761705632506169722068617320616c7265616479206265656e207360008201527f6574000000000000000000000000000000000000000000000000000000000000602082015250565b6000614d8260228361435e565b9150614d8d82614d26565b604082019050919050565b60006020820190508181036000830152614db181614d75565b9050919050565b600081519050614dc781614454565b92915050565b600060208284031215614de357614de2614418565b5b6000614df184828501614db8565b91505092915050565b6000604082019050614e0f60008301856146dd565b614e1c60208301846146dd565b9392505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b614e8781614442565b82525050565b6000614e998383614e7e565b60208301905092915050565b6000602082019050919050565b6000614ebd82614e52565b614ec78185614e5d565b9350614ed283614e6e565b8060005b83811015614f03578151614eea8882614e8d565b9750614ef583614ea5565b925050600181019050614ed6565b5085935050505092915050565b6000604082019050614f25600083018561452c565b8181036020830152614f378184614eb2565b90509392505050565b600067ffffffffffffffff821115614f5b57614f5a6148a1565b5b602082029050602081019050919050565b600081519050614f7b8161448a565b92915050565b6000614f94614f8f84614f40565b614901565b90508083825260208201905060208402830185811115614fb757614fb6614711565b5b835b81811015614fe05780614fcc8882614f6c565b845260208401935050602081019050614fb9565b5050509392505050565b600082601f830112614fff57614ffe614707565b5b815161500f848260208601614f81565b91505092915050565b60006020828403121561502e5761502d614418565b5b600082015167ffffffffffffffff81111561504c5761504b61441d565b5b61505884828501614fea565b91505092915050565b7f41697264726f702063616e206f6e6c7920626520646f6e65206279206578636c60008201527f756465642066726f6d2066656500000000000000000000000000000000000000602082015250565b60006150bd602d8361435e565b91506150c882615061565b604082019050919050565b600060208201905081810360008301526150ec816150b0565b9050919050565b7f486f6c6465727320616e6420616d6f756e74206c656e677468206d757374206260008201527f65207468652073616d6500000000000000000000000000000000000000000000602082015250565b600061514f602a8361435e565b915061515a826150f3565b604082019050919050565b6000602082019050818103600083015261517e81615142565b9050919050565b600061519082614480565b915061519b83614480565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156151d0576151cf614c0b565b5b828201905092915050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b600061523760268361435e565b9150615242826151db565b604082019050919050565b600060208201905081810360008301526152668161522a565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b60006152c960248361435e565b91506152d48261526d565b604082019050919050565b600060208201905081810360008301526152f8816152bc565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b600061535b60228361435e565b9150615366826152ff565b604082019050919050565b6000602082019050818103600083015261538a8161534e565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b60006153ed60258361435e565b91506153f882615391565b604082019050919050565b6000602082019050818103600083015261541c816153e0565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b600061547f60238361435e565b915061548a82615423565b604082019050919050565b600060208201905081810360008301526154ae81615472565b9050919050565b7f5472616e7366657220616d6f756e74206d75737420626520677265617465722060008201527f7468616e207a65726f0000000000000000000000000000000000000000000000602082015250565b600061551160298361435e565b915061551c826154b5565b604082019050919050565b6000602082019050818103600083015261554081615504565b9050919050565b7f556e697377617056325061697220686173206e6f74206265656e207365740000600082015250565b600061557d601e8361435e565b915061558882615547565b602082019050919050565b600060208201905081810360008301526155ac81615570565b9050919050565b7f626f747320617265206e6f7420616c6c6f77656420746f2073656c6c206f722060008201527f7472616e7366657220746f6b656e730000000000000000000000000000000000602082015250565b600061560f602f8361435e565b915061561a826155b3565b604082019050919050565b6000602082019050818103600083015261563e81615602565b9050919050565b7f57616c6c65742063616e6e6f7420657863656564206d61782057616c6c65742060008201527f6c696d6974000000000000000000000000000000000000000000000000000000602082015250565b60006156a160258361435e565b91506156ac82615645565b604082019050919050565b600060208201905081810360008301526156d081615694565b9050919050565b60006156e282614480565b91506156ed83614480565b925082821015615700576156ff614c0b565b5b828203905092915050565b7f536166654d6174683a206164646974696f6e206f766572666c6f770000000000600082015250565b6000615741601b8361435e565b915061574c8261570b565b602082019050919050565b6000602082019050818103600083015261577081615734565b9050919050565b600061578282614480565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82036157b4576157b3614c0b565b5b600182019050919050565b6000602082840312156157d5576157d4614418565b5b60006157e384828501614f6c565b91505092915050565b600060408201905061580160008301856146dd565b61580e602083018461452c565b9392505050565b6000815190506158248161476c565b92915050565b6000602082840312156158405761583f614418565b5b600061584e84828501615815565b91505092915050565b6000806000606084860312156158705761586f614418565b5b600061587e86828701614f6c565b935050602061588f86828701614f6c565b92505060406158a086828701614f6c565b9150509250925092565b60006080820190506158bf600083018761452c565b6158cc602083018661452c565b6158d9604083018561452c565b6158e6606083018461452c565b95945050505050565b6000819050919050565b600061591461590f61590a846158ef565b614591565b614480565b9050919050565b615924816158f9565b82525050565b600060a08201905061593f600083018861452c565b61594c602083018761591b565b818103604083015261595e8186614eb2565b905061596d60608301856146dd565b61597a608083018461452c565b9695505050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b60006159be82614480565b91506159c983614480565b9250826159d9576159d8615984565b5b828204905092915050565b7f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f60008201527f7700000000000000000000000000000000000000000000000000000000000000602082015250565b6000615a4060218361435e565b9150615a4b826159e4565b604082019050919050565b60006020820190508181036000830152615a6f81615a33565b9050919050565b6000608082019050615a8b600083018761591b565b8181036020830152615a9d8186614eb2565b9050615aac60408301856146dd565b615ab9606083018461452c565b9594505050505056fe45524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa26469706673582212206f25ad4f1b36c4b3fff71bd8d297c3fd562a13ac5c20ed25c02779f84556ded864736f6c634300080d0033

Deployed Bytecode Sourcemap

19935:15344:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22958:83;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23791:161;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22219:22;;;;;;;;;;;;;:::i;:::-;;;;;;;;:::i;:::-;;;;;;;;25961:125;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20363:106;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23235:95;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23960:313;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25319:135;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;23144:83;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24281:218;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21486:51;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25462:161;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;20476:41;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21102:40;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22333:45;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29144:130;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;29013:123;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21186:50;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22248:32;;;;;;;;;;;;;:::i;:::-;;;;;;;;:::i;:::-;;;;;;;;21252:67;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23338:119;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17743:148;;;;;;;;;;;;;:::i;:::-;;25796:157;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;33831:248;;;;;;;;;;;;;:::i;:::-;;27287:150;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;21409:70;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27877:128;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;31762:209;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;17107:79;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27630:122;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;23049:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25631:157;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;32509:229;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;28013:131;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;21544:39;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24507:269;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21326:76;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23465:167;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26346:122;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;26476:311;;;;;;;;;;;;;:::i;:::-;;28724:277;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28506:171;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;24786:525;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;23640:143;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27760:109;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21680:71;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27445:177;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;18046:244;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;22958:83;22995:13;23028:5;23021:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22958:83;:::o;23791:161::-;23866:4;23883:39;23892:12;:10;:12::i;:::-;23906:7;23915:6;23883:8;:39::i;:::-;23940:4;23933:11;;23791:161;;;;:::o;22219:22::-;;;;;;;;;;;;;;:::o;25961:125::-;26026:4;26050:22;:28;26073:4;26050:28;;;;;;;;;;;;;;;;;;;;;;;;;26043:35;;25961:125;;;:::o;20363:106::-;;;;;;;;;;;;;:::o;23235:95::-;23288:7;23315;;23308:14;;23235:95;:::o;23960:313::-;24058:4;24075:36;24085:6;24093:9;24104:6;24075:9;:36::i;:::-;24122:121;24131:6;24139:12;:10;:12::i;:::-;24153:89;24191:6;24153:89;;;;;;;;;;;;;;;;;:11;:19;24165:6;24153:19;;;;;;;;;;;;;;;:33;24173:12;:10;:12::i;:::-;24153:33;;;;;;;;;;;;;;;;:37;;:89;;;;;:::i;:::-;24122:8;:121::i;:::-;24261:4;24254:11;;23960:313;;;;;:::o;25319:135::-;17329:12;:10;:12::i;:::-;17319:22;;:6;;;;;;;;;;:22;;;17311:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;25441:5:::1;25423:15;:23;;;;:::i;:::-;25404:16;:42;;;;25319:135:::0;:::o;23144:83::-;23185:5;23210:9;;;;;;;;;;;23203:16;;23144:83;:::o;24281:218::-;24369:4;24386:83;24395:12;:10;:12::i;:::-;24409:7;24418:50;24457:10;24418:11;:25;24430:12;:10;:12::i;:::-;24418:25;;;;;;;;;;;;;;;:34;24444:7;24418:34;;;;;;;;;;;;;;;;:38;;:50;;;;:::i;:::-;24386:8;:83::i;:::-;24487:4;24480:11;;24281:218;;;;:::o;21486:51::-;;;;;;;;;;;;;:::o;25462:161::-;17329:12;:10;:12::i;:::-;17319:22;;:6;;;;;;;;;;:22;;;17311:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;25574:41:::1;25587:9;;25598:16;25574:12;:41::i;:::-;25462:161:::0;;;:::o;20476:41::-;;;;;;;;;;;;;:::o;21102:40::-;;;;;;;;;;;;;:::o;22333:45::-;;;;;;;;;;;;;:::o;29144:130::-;17329:12;:10;:12::i;:::-;17319:22;;:6;;;;;;;;;;:22;;;17311:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;29253:13:::1;29233:17;;:33;;;;;;;;;;;;;;;;;;29144:130:::0;:::o;29013:123::-;29077:4;29101:18;:27;29120:7;29101:27;;;;;;;;;;;;;;;;;;;;;;;;;29094:34;;29013:123;;;:::o;21186:50::-;;;;:::o;22248:32::-;;;;;;;;;;;;;;:::o;21252:67::-;;;;:::o;23338:119::-;23404:7;23431:9;:18;23441:7;23431:18;;;;;;;;;;;;;;;;23424:25;;23338:119;;;:::o;17743:148::-;17329:12;:10;:12::i;:::-;17319:22;;:6;;;;;;;;;;:22;;;17311:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;17850:1:::1;17813:40;;17834:6;::::0;::::1;;;;;;;;17813:40;;;;;;;;;;;;17881:1;17864:6:::0;::::1;:19;;;;;;;;;;;;;;;;;;17743:148::o:0;25796:157::-;17329:12;:10;:12::i;:::-;17319:22;;:6;;;;;;;;;;:22;;;17311:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;25906:39:::1;25923:9;;25934:10;25906:16;:39::i;:::-;25796:157:::0;;;:::o;33831:248::-;33967:28;33998:24;34016:4;33998:9;:24::i;:::-;33967:55;;34033:38;34050:20;34033:16;:38::i;:::-;33862:217;33831:248::o;27287:150::-;17329:12;:10;:12::i;:::-;17319:22;;:6;;;;;;;;;;:22;;;17311:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;27387:6:::1;27370:7;:14;;:23;;;;27422:7;27404;:15;;:25;;;;27287:150:::0;;:::o;21409:70::-;;;;;;;;;;;;;:::o;27877:128::-;17329:12;:10;:12::i;:::-;17319:22;;:6;;;;;;;;;;:22;;;17311:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;27961:36:::1;27981:9;27992:4;27961:19;:36::i;:::-;27877:128:::0;:::o;31762:209::-;17329:12;:10;:12::i;:::-;17319:22;;:6;;;;;;;;;;:22;;;17311:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;31860:16:::1;;31848:8;:28:::0;31840:85:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;31955:8;31936:16;:27;;;;31762:209:::0;:::o;17107:79::-;17145:7;17172:6;;;;;;;;;;;17165:13;;17107:79;:::o;27630:122::-;17329:12;:10;:12::i;:::-;17319:22;;:6;;;;;;;;;;:22;;;17311:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;27731:13:::1;27712:16;;:32;;;;;;;;;;;;;;;;;;27630:122:::0;:::o;23049:87::-;23088:13;23121:7;23114:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23049:87;:::o;25631:157::-;17329:12;:10;:12::i;:::-;17319:22;;:6;;;;;;;;;;:22;;;17311:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;25736:44:::1;25755:9;;25766:13;25736:18;:44::i;:::-;25631:157:::0;;;:::o;32509:229::-;17329:12;:10;:12::i;:::-;17319:22;;:6;;;;;;;;;;:22;;;17311:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;32643:24:::1;32601:15;;:68;;;;;;;;;;;;;;;;;;32706:24;32680:23;;:50;;;;;;;;;;;;;;;;;;32509:229:::0;:::o;28013:131::-;17329:12;:10;:12::i;:::-;17319:22;;:6;;;;;;;;;;:22;;;17311:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;28099:37:::1;28119:9;28130:5;28099:19;:37::i;:::-;28013:131:::0;:::o;21544:39::-;;;;:::o;24507:269::-;24600:4;24617:129;24626:12;:10;:12::i;:::-;24640:7;24649:96;24688:15;24649:96;;;;;;;;;;;;;;;;;:11;:25;24661:12;:10;:12::i;:::-;24649:25;;;;;;;;;;;;;;;:34;24675:7;24649:34;;;;;;;;;;;;;;;;:38;;:96;;;;;:::i;:::-;24617:8;:129::i;:::-;24764:4;24757:11;;24507:269;;;;:::o;21326:76::-;;;;;;;;;;;;;:::o;23465:167::-;23543:4;23560:42;23570:12;:10;:12::i;:::-;23584:9;23595:6;23560:9;:42::i;:::-;23620:4;23613:11;;23465:167;;;;:::o;26346:122::-;17329:12;:10;:12::i;:::-;17319:22;;:6;;;;;;;;;;:22;;;17311:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;26445:15:::1;26428:14;:32;;;;26346:122:::0;:::o;26476:311::-;17329:12;:10;:12::i;:::-;17319:22;;:6;;;;;;;;;;:22;;;17311:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;26563:1:::1;26538:27;;:13;;;;;;;;;;;:27;;;26530:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;26648:15;;;;;;;;;;;:23;;;:25;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;26630:55;;;26694:4;26701:15;;;;;;;;;;;:20;;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;26630:94;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;26614:13;;:110;;;;;;;;;;;;;;;;;;26775:4;26735:22;:37;26758:13;;;;;;;;;;;26735:37;;;;;;;;;;;;;;;;:44;;;;;;;;;;;;;;;;;;26476:311::o:0;28724:277::-;28789:4;28807:21;28845:1;28831:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28807:40;;28876:4;28858;28863:1;28858:7;;;;;;;;:::i;:::-;;;;;;;:23;;;;;;;;;;;28902:15;;;;;;;;;;;:20;;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;28892:4;28897:1;28892:7;;;;;;;;:::i;:::-;;;;;;;:32;;;;;;;;;;;28942:15;;;;;;;;;;;:29;;;28972:11;28985:4;28942:48;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;28991:1;28942:51;;;;;;;;:::i;:::-;;;;;;;;28935:58;;;28724:277;;;:::o;28506:171::-;17329:12;:10;:12::i;:::-;17319:22;;:6;;;;;;;;;;:22;;;17311:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;28607:8:::1;28583:21;;:32;;;;;;;;;;;;;;;;;;28631:38;28660:8;28631:38;;;;;;:::i;:::-;;;;;;;;28506:171:::0;:::o;24786:525::-;24883:16;24922:18;:32;24941:12;:10;:12::i;:::-;24922:32;;;;;;;;;;;;;;;;;;;;;;;;;24914:90;;;;;;;;;;;;:::i;:::-;;;;;;;;;25044:7;;:14;;25023:10;;:17;;:35;25015:90;;;;;;;;;;;;:::i;:::-;;;;;;;;;25116:188;25133:10;;:17;;25122:8;:28;25116:188;;;25166:98;25181:12;:10;:12::i;:::-;25195:10;;25206:8;25195:20;;;;;;;:::i;:::-;;;;;;;;;;;;;;;:::i;:::-;25237:5;25217:7;;25225:8;25217:17;;;;;;;:::i;:::-;;;;;;;;:25;;;;:::i;:::-;25244:5;25251;25258;25166:14;:98::i;:::-;25291:1;25279:13;;;;;:::i;:::-;;;25116:188;;;24872:439;24786:525;;;;:::o;23640:143::-;23721:7;23748:11;:18;23760:5;23748:18;;;;;;;;;;;;;;;:27;23767:7;23748:27;;;;;;;;;;;;;;;;23741:34;;23640:143;;;;:::o;27760:109::-;27821:4;27845:10;:16;27856:4;27845:16;;;;;;;;;;;;;;;;;;;;;;;;;27838:23;;27760:109;;;:::o;21680:71::-;;;;;;;;;;;;;:::o;27445:177::-;17329:12;:10;:12::i;:::-;17319:22;;:6;;;;;;;;;;:22;;;17311:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;27561:8:::1;27537:12;:21;;:32;;;;27605:9;27580:12;:22;;:34;;;;27445:177:::0;;:::o;18046:244::-;17329:12;:10;:12::i;:::-;17319:22;;:6;;;;;;;;;;:22;;;17311:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;18155:1:::1;18135:22;;:8;:22;;::::0;18127:73:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;18245:8;18216:38;;18237:6;::::0;::::1;;;;;;;;18216:38;;;;;;;;;;;;18274:8;18265:6;::::0;:17:::1;;;;;;;;;;;;;;;;;;18046:244:::0;:::o;9599:98::-;9652:7;9679:10;9672:17;;9599:98;:::o;29282:337::-;29392:1;29375:19;;:5;:19;;;29367:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;29473:1;29454:21;;:7;:21;;;29446:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;29557:6;29527:11;:18;29539:5;29527:18;;;;;;;;;;;;;;;:27;29546:7;29527:27;;;;;;;;;;;;;;;:36;;;;29595:7;29579:32;;29588:5;29579:32;;;29604:6;29579:32;;;;;;:::i;:::-;;;;;;;;29282:337;;;:::o;29627:1669::-;29731:1;29715:18;;:4;:18;;;29707:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;29808:1;29794:16;;:2;:16;;;29786:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;29878:1;29869:6;:10;29861:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;29969:1;29944:27;;:13;;;;;;;;;;;:27;;;29936:69;;;;;;;;;;;;:::i;:::-;;;;;;;;;30016:11;30046:13;30063:18;:24;30082:4;30063:24;;;;;;;;;;;;;;;;;;;;;;;;;30062:25;:52;;;;;30092:18;:22;30111:2;30092:22;;;;;;;;;;;;;;;;;;;;;;;;;30091:23;30062:52;:71;;;;;30126:7;:5;:7::i;:::-;30118:15;;:4;:15;;;;30062:71;:88;;;;;30143:7;:5;:7::i;:::-;30137:13;;:2;:13;;;;30062:88;30046:104;;30161:21;30185:25;30203:6;30185:13;30195:2;30185:9;:13::i;:::-;:17;;:25;;;;:::i;:::-;30161:49;;30321:7;:5;:7::i;:::-;30313:15;;:4;:15;;;;:32;;;;;30338:7;:5;:7::i;:::-;30332:13;;:2;:13;;;;30313:32;:52;;;;;30355:10;;;;;;;;;;;30349:16;;:2;:16;;;;30313:52;30310:180;;;30391:10;:16;30402:4;30391:16;;;;;;;;;;;;;;;;;;;;;;;;;30390:17;:36;;;;;30412:10;:14;30423:2;30412:14;;;;;;;;;;;;;;;;;;;;;;;;;30411:15;30390:36;30382:96;;;;;;;;;;;;:::i;:::-;;;;;;;;;30310:180;30511:13;;;;;;;;;;;30503:21;;:4;:21;;;:47;;;;30528:16;:22;30545:4;30528:22;;;;;;;;;;;;;;;;;;;;;;;;;30503:47;30500:162;;;30592:16;;30575:13;:33;;30567:83;;;;;;;;;;;;:::i;:::-;;;;;;;;;30500:162;30683:13;;;;;;;;;;;30675:21;;:4;:21;;;;:44;;;;;30706:13;;;;;;;;;;;30700:19;;:2;:19;;;30675:44;:97;;;;30725:16;:22;30742:4;30725:22;;;;;;;;;;;;;;;;;;;;;;;;;30724:23;:47;;;;;30751:16;:20;30768:2;30751:20;;;;;;;;;;;;;;;;;;;;;;;;;30724:47;30675:97;30672:242;;;30868:4;30859:13;;30887:15;:13;:15::i;:::-;30672:242;30935:13;;;;;;;;;;;30927:21;;:4;:21;;;;:44;;;;;30958:13;;;;;;;;;;;30952:19;;:2;:19;;;;30927:44;:71;;;;;30976:16;:22;30993:4;30976:22;;;;;;;;;;;;;;;;;;;;;;;;;30975:23;30927:71;:96;;;;;31003:16;:20;31020:2;31003:20;;;;;;;;;;;;;;;;;;;;;;;;;31002:21;30927:96;30924:298;;;31043:17;;;;;;;;;;;31040:73;;;31092:5;31081:16;;31040:73;31152:16;;31135:13;:33;;31127:83;;;;;;;;;;;;:::i;:::-;;;;;;;;;30924:298;31232:56;31247:4;31253:2;31257:6;31265:8;31275:6;31283:4;31232:14;:56::i;:::-;29696:1600;;;29627:1669;;;:::o;5930:192::-;6016:7;6049:1;6044;:6;;6052:12;6036:29;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;6076:9;6092:1;6088;:5;;;;:::i;:::-;6076:17;;6113:1;6106:8;;;5930:192;;;;;:::o;5027:181::-;5085:7;5105:9;5121:1;5117;:5;;;;:::i;:::-;5105:17;;5146:1;5141;:6;;5133:46;;;;;;;;;;;;:::i;:::-;;;;;;;;;5199:1;5192:8;;;5027:181;;;;:::o;27043:236::-;27130:9;27125:147;27149:9;;:16;;27145:1;:20;27125:147;;;27187:12;27202:9;;27212:1;27202:12;;;;;;;:::i;:::-;;;;;;;;;;;;;;;:::i;:::-;27187:27;;27256:4;27229:18;:24;27248:4;27229:24;;;;;;;;;;;;;;;;:31;;;;;;;;;;;;;;;;;;27172:100;27167:3;;;;;:::i;:::-;;;;27125:147;;;;27043:236;;;:::o;26094:244::-;26185:9;26180:151;26204:9;;:16;;26200:1;:20;26180:151;;;26242:12;26257:9;;26267:1;26257:12;;;;;;;:::i;:::-;;;;;;;;;;;;;;;:::i;:::-;26242:27;;26315:4;26284:22;:28;26307:4;26284:28;;;;;;;;;;;;;;;;:35;;;;;;;;;;;;;;;;;;26227:104;26222:3;;;;;:::i;:::-;;;;26180:151;;;;26094:244;;;:::o;31979:522::-;20298:4;20279:16;;:23;;;;;;;;;;;;;;;;;;32066:39:::1;32084:20;32066:17;:39::i;:::-;32116:23;32149:11;;;;;;;;;;;32142:29;;;32180:4;32142:44;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;32116:70;;32197:22;32222:52;32270:3;32222:43;32242:12;:22;;;32222:15;:19;;:43;;;;:::i;:::-;:47;;:52;;;;:::i;:::-;32197:77;;32285:21;32309:51;32356:3;32309:42;32329:12;:21;;;32309:15;:19;;:42;;;;:::i;:::-;:46;;:51;;;;:::i;:::-;32285:75;;32371:9;;;;;;;;;;;:18;;;32390:16;;;;;;;;;;;32407:14;32371:51;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;32433:9;;;;;;;;;;;:18;;;32452:23;;;;;;;;;;;32477:13;32433:58;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;32055:446;;;20344:5:::0;20325:16;;:24;;;;;;;;;;;;;;;;;;31979:522;:::o;28152:346::-;28247:9;28242:249;28266:9;:16;28262:1;:20;28242:249;;;28304:12;28319:9;28329:1;28319:12;;;;;;;;:::i;:::-;;;;;;;;28304:27;;28349:7;28346:134;;;28396:4;28377:10;:16;28388:4;28377:16;;;;;;;;;;;;;;;;:23;;;;;;;;;;;;;;;;;;28346:134;;;28448:10;:16;28459:4;28448:16;;;;;;;;;;;;;;;;28441:23;;;;;;;;;;;28346:134;28289:202;28284:3;;;;;:::i;:::-;;;;28242:249;;;;28152:346;;:::o;26795:240::-;26888:9;26883:145;26907:9;;:16;;26903:1;:20;26883:145;;;26945:12;26960:9;;26970:1;26960:12;;;;;;;:::i;:::-;;;;;;;;;;;;;;;:::i;:::-;26945:27;;27012:4;26987:16;:22;27004:4;26987:22;;;;;;;;;;;;;;;;:29;;;;;;;;;;;;;;;;;;26930:98;26925:3;;;;;:::i;:::-;;;;26883:145;;;;26795:240;;;:::o;34160:1116::-;34306:17;34326:8;:50;;34375:1;34326:50;;;34337:35;34368:3;34337:26;34348:7;:14;;;34337:6;:10;;:26;;;;:::i;:::-;:30;;:35;;;;:::i;:::-;34326:50;34306:70;;34390:8;:18;;;;;34402:6;34390:18;34387:98;;;34437:36;34469:3;34437:27;34448:7;:15;;;34437:6;:10;;:27;;;;:::i;:::-;:31;;:36;;;;:::i;:::-;34425:48;;34387:98;34495:22;34520:21;34531:9;34520:6;:10;;:21;;;;:::i;:::-;34495:46;;34572:29;34594:6;34572:9;:17;34582:6;34572:17;;;;;;;;;;;;;;;;:21;;:29;;;;:::i;:::-;34552:9;:17;34562:6;34552:17;;;;;;;;;;;;;;;:49;;;;34635:40;34660:14;34635:9;:20;34645:9;34635:20;;;;;;;;;;;;;;;;:24;;:40;;;;:::i;:::-;34612:9;:20;34622:9;34612:20;;;;;;;;;;;;;;;:63;;;;34713:39;34742:9;34713;:24;34731:4;34713:24;;;;;;;;;;;;;;;;:28;;:39;;;;:::i;:::-;34686:9;:24;34704:4;34686:24;;;;;;;;;;;;;;;:66;;;;34785:9;34768:35;;34777:6;34768:35;;;34796:6;34768:35;;;;;;:::i;:::-;;;;;;;;34819:17;34816:453;;;34857:15;;;;;;;;;;;:31;;;34889:6;34857:39;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;34853:54;34925:15;;;;;;;;;;;:31;;;34957:9;34925:42;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;34921:57;34996:15;;;;;;;;;;;:23;;;35020:16;;34996:41;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;34992:266;;;35224:9;35135:99;;35200:4;35135:99;;;35160:10;35172:6;35180:18;35206:16;;35135:99;;;;;;;;;:::i;:::-;;;;;;;;35038:212;;;34992:266;34816:453;34295:981;;34160:1116;;;;;;:::o;31304:450::-;31348:28;31379:24;31397:4;31379:9;:24::i;:::-;31348:55;;31440:1;31417:20;:24;31414:333;;;31458:13;31474:38;31491:20;31474:16;:38::i;:::-;31458:54;;31543:14;;31531:8;:26;;:47;;;;;31562:16;;;;;;;;;;;31561:17;31531:47;:72;;;;;31582:21;;;;;;;;;;;31531:72;31527:209;;;31682:38;31699:20;31682:16;:38::i;:::-;31527:209;31443:304;31414:333;31337:417;31304:450::o;32746:587::-;32873:21;32911:1;32897:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;32873:40;;32942:4;32924;32929:1;32924:7;;;;;;;;:::i;:::-;;;;;;;:23;;;;;;;;;;;32968:15;;;;;;;;;;;:20;;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;32958:4;32963:1;32958:7;;;;;;;;:::i;:::-;;;;;;;:32;;;;;;;;;;;33002:62;33019:4;33034:15;;;;;;;;;;;33052:11;33002:8;:62::i;:::-;33101:15;;;;;;;;;;;:66;;;33182:11;33208:1;33225:4;33252;33272:15;33101:197;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;33309:16;:14;:16::i;:::-;32802:531;32746:587;:::o;6381:471::-;6439:7;6689:1;6684;:6;6680:47;;6714:1;6707:8;;;;6680:47;6739:9;6755:1;6751;:5;;;;:::i;:::-;6739:17;;6784:1;6779;6775;:5;;;;:::i;:::-;:10;6767:56;;;;;;;;;;;;:::i;:::-;;;;;;;;;6843:1;6836:8;;;6381:471;;;;;:::o;7328:132::-;7386:7;7413:39;7417:1;7420;7413:39;;;;;;;;;;;;;;;;;:3;:39::i;:::-;7406:46;;7328:132;;;;:::o;5491:136::-;5549:7;5576:43;5580:1;5583;5576:43;;;;;;;;;;;;;;;;;:3;:43::i;:::-;5569:50;;5491:136;;;;:::o;33341:482::-;33386:18;33407:21;33386:42;;33439:21;33477:1;33463:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;33439:40;;33500:15;;;;;;;;;;;:20;;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;33490:4;33495:1;33490:7;;;;;;;;:::i;:::-;;;;;;;:32;;;;;;;;;;;33543:11;;;;;;;;;;;33533:4;33538:1;33533:7;;;;;;;;:::i;:::-;;;;;;;:21;;;;;;;;;;;33593:15;;;;;;;;;;;:66;;;33667:10;33693:1;33742:4;33769;33789:15;33593:222;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;33375:448;;33341:482::o;7956:278::-;8042:7;8074:1;8070;:5;8077:12;8062:28;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;8101:9;8117:1;8113;:5;;;;:::i;:::-;8101:17;;8225:1;8218:8;;;7956:278;;;;;:::o;7:99:1:-;59:6;93:5;87:12;77:22;;7:99;;;:::o;112:169::-;196:11;230:6;225:3;218:19;270:4;265:3;261:14;246:29;;112:169;;;;:::o;287:307::-;355:1;365:113;379:6;376:1;373:13;365:113;;;464:1;459:3;455:11;449:18;445:1;440:3;436:11;429:39;401:2;398:1;394:10;389:15;;365:113;;;496:6;493:1;490:13;487:101;;;576:1;567:6;562:3;558:16;551:27;487:101;336:258;287:307;;;:::o;600:102::-;641:6;692:2;688:7;683:2;676:5;672:14;668:28;658:38;;600:102;;;:::o;708:364::-;796:3;824:39;857:5;824:39;:::i;:::-;879:71;943:6;938:3;879:71;:::i;:::-;872:78;;959:52;1004:6;999:3;992:4;985:5;981:16;959:52;:::i;:::-;1036:29;1058:6;1036:29;:::i;:::-;1031:3;1027:39;1020:46;;800:272;708:364;;;;:::o;1078:313::-;1191:4;1229:2;1218:9;1214:18;1206:26;;1278:9;1272:4;1268:20;1264:1;1253:9;1249:17;1242:47;1306:78;1379:4;1370:6;1306:78;:::i;:::-;1298:86;;1078:313;;;;:::o;1397:75::-;1430:6;1463:2;1457:9;1447:19;;1397:75;:::o;1478:117::-;1587:1;1584;1577:12;1601:117;1710:1;1707;1700:12;1724:126;1761:7;1801:42;1794:5;1790:54;1779:65;;1724:126;;;:::o;1856:96::-;1893:7;1922:24;1940:5;1922:24;:::i;:::-;1911:35;;1856:96;;;:::o;1958:122::-;2031:24;2049:5;2031:24;:::i;:::-;2024:5;2021:35;2011:63;;2070:1;2067;2060:12;2011:63;1958:122;:::o;2086:139::-;2132:5;2170:6;2157:20;2148:29;;2186:33;2213:5;2186:33;:::i;:::-;2086:139;;;;:::o;2231:77::-;2268:7;2297:5;2286:16;;2231:77;;;:::o;2314:122::-;2387:24;2405:5;2387:24;:::i;:::-;2380:5;2377:35;2367:63;;2426:1;2423;2416:12;2367:63;2314:122;:::o;2442:139::-;2488:5;2526:6;2513:20;2504:29;;2542:33;2569:5;2542:33;:::i;:::-;2442:139;;;;:::o;2587:474::-;2655:6;2663;2712:2;2700:9;2691:7;2687:23;2683:32;2680:119;;;2718:79;;:::i;:::-;2680:119;2838:1;2863:53;2908:7;2899:6;2888:9;2884:22;2863:53;:::i;:::-;2853:63;;2809:117;2965:2;2991:53;3036:7;3027:6;3016:9;3012:22;2991:53;:::i;:::-;2981:63;;2936:118;2587:474;;;;;:::o;3067:90::-;3101:7;3144:5;3137:13;3130:21;3119:32;;3067:90;;;:::o;3163:109::-;3244:21;3259:5;3244:21;:::i;:::-;3239:3;3232:34;3163:109;;:::o;3278:210::-;3365:4;3403:2;3392:9;3388:18;3380:26;;3416:65;3478:1;3467:9;3463:17;3454:6;3416:65;:::i;:::-;3278:210;;;;:::o;3494:118::-;3581:24;3599:5;3581:24;:::i;:::-;3576:3;3569:37;3494:118;;:::o;3618:332::-;3739:4;3777:2;3766:9;3762:18;3754:26;;3790:71;3858:1;3847:9;3843:17;3834:6;3790:71;:::i;:::-;3871:72;3939:2;3928:9;3924:18;3915:6;3871:72;:::i;:::-;3618:332;;;;;:::o;3956:329::-;4015:6;4064:2;4052:9;4043:7;4039:23;4035:32;4032:119;;;4070:79;;:::i;:::-;4032:119;4190:1;4215:53;4260:7;4251:6;4240:9;4236:22;4215:53;:::i;:::-;4205:63;;4161:117;3956:329;;;;:::o;4291:60::-;4319:3;4340:5;4333:12;;4291:60;;;:::o;4357:142::-;4407:9;4440:53;4458:34;4467:24;4485:5;4467:24;:::i;:::-;4458:34;:::i;:::-;4440:53;:::i;:::-;4427:66;;4357:142;;;:::o;4505:126::-;4555:9;4588:37;4619:5;4588:37;:::i;:::-;4575:50;;4505:126;;;:::o;4637:152::-;4713:9;4746:37;4777:5;4746:37;:::i;:::-;4733:50;;4637:152;;;:::o;4795:183::-;4908:63;4965:5;4908:63;:::i;:::-;4903:3;4896:76;4795:183;;:::o;4984:274::-;5103:4;5141:2;5130:9;5126:18;5118:26;;5154:97;5248:1;5237:9;5233:17;5224:6;5154:97;:::i;:::-;4984:274;;;;:::o;5264:222::-;5357:4;5395:2;5384:9;5380:18;5372:26;;5408:71;5476:1;5465:9;5461:17;5452:6;5408:71;:::i;:::-;5264:222;;;;:::o;5492:619::-;5569:6;5577;5585;5634:2;5622:9;5613:7;5609:23;5605:32;5602:119;;;5640:79;;:::i;:::-;5602:119;5760:1;5785:53;5830:7;5821:6;5810:9;5806:22;5785:53;:::i;:::-;5775:63;;5731:117;5887:2;5913:53;5958:7;5949:6;5938:9;5934:22;5913:53;:::i;:::-;5903:63;;5858:118;6015:2;6041:53;6086:7;6077:6;6066:9;6062:22;6041:53;:::i;:::-;6031:63;;5986:118;5492:619;;;;;:::o;6117:329::-;6176:6;6225:2;6213:9;6204:7;6200:23;6196:32;6193:119;;;6231:79;;:::i;:::-;6193:119;6351:1;6376:53;6421:7;6412:6;6401:9;6397:22;6376:53;:::i;:::-;6366:63;;6322:117;6117:329;;;;:::o;6452:86::-;6487:7;6527:4;6520:5;6516:16;6505:27;;6452:86;;;:::o;6544:112::-;6627:22;6643:5;6627:22;:::i;:::-;6622:3;6615:35;6544:112;;:::o;6662:214::-;6751:4;6789:2;6778:9;6774:18;6766:26;;6802:67;6866:1;6855:9;6851:17;6842:6;6802:67;:::i;:::-;6662:214;;;;:::o;6882:118::-;6969:24;6987:5;6969:24;:::i;:::-;6964:3;6957:37;6882:118;;:::o;7006:222::-;7099:4;7137:2;7126:9;7122:18;7114:26;;7150:71;7218:1;7207:9;7203:17;7194:6;7150:71;:::i;:::-;7006:222;;;;:::o;7234:117::-;7343:1;7340;7333:12;7357:117;7466:1;7463;7456:12;7480:117;7589:1;7586;7579:12;7620:568;7693:8;7703:6;7753:3;7746:4;7738:6;7734:17;7730:27;7720:122;;7761:79;;:::i;:::-;7720:122;7874:6;7861:20;7851:30;;7904:18;7896:6;7893:30;7890:117;;;7926:79;;:::i;:::-;7890:117;8040:4;8032:6;8028:17;8016:29;;8094:3;8086:4;8078:6;8074:17;8064:8;8060:32;8057:41;8054:128;;;8101:79;;:::i;:::-;8054:128;7620:568;;;;;:::o;8194:116::-;8264:21;8279:5;8264:21;:::i;:::-;8257:5;8254:32;8244:60;;8300:1;8297;8290:12;8244:60;8194:116;:::o;8316:133::-;8359:5;8397:6;8384:20;8375:29;;8413:30;8437:5;8413:30;:::i;:::-;8316:133;;;;:::o;8455:698::-;8547:6;8555;8563;8612:2;8600:9;8591:7;8587:23;8583:32;8580:119;;;8618:79;;:::i;:::-;8580:119;8766:1;8755:9;8751:17;8738:31;8796:18;8788:6;8785:30;8782:117;;;8818:79;;:::i;:::-;8782:117;8931:80;9003:7;8994:6;8983:9;8979:22;8931:80;:::i;:::-;8913:98;;;;8709:312;9060:2;9086:50;9128:7;9119:6;9108:9;9104:22;9086:50;:::i;:::-;9076:60;;9031:115;8455:698;;;;;:::o;9159:139::-;9222:9;9255:37;9286:5;9255:37;:::i;:::-;9242:50;;9159:139;;;:::o;9304:157::-;9404:50;9448:5;9404:50;:::i;:::-;9399:3;9392:63;9304:157;;:::o;9467:248::-;9573:4;9611:2;9600:9;9596:18;9588:26;;9624:84;9705:1;9694:9;9690:17;9681:6;9624:84;:::i;:::-;9467:248;;;;:::o;9721:323::-;9777:6;9826:2;9814:9;9805:7;9801:23;9797:32;9794:119;;;9832:79;;:::i;:::-;9794:119;9952:1;9977:50;10019:7;10010:6;9999:9;9995:22;9977:50;:::i;:::-;9967:60;;9923:114;9721:323;;;;:::o;10050:474::-;10118:6;10126;10175:2;10163:9;10154:7;10150:23;10146:32;10143:119;;;10181:79;;:::i;:::-;10143:119;10301:1;10326:53;10371:7;10362:6;10351:9;10347:22;10326:53;:::i;:::-;10316:63;;10272:117;10428:2;10454:53;10499:7;10490:6;10479:9;10475:22;10454:53;:::i;:::-;10444:63;;10399:118;10050:474;;;;;:::o;10530:180::-;10578:77;10575:1;10568:88;10675:4;10672:1;10665:15;10699:4;10696:1;10689:15;10716:281;10799:27;10821:4;10799:27;:::i;:::-;10791:6;10787:40;10929:6;10917:10;10914:22;10893:18;10881:10;10878:34;10875:62;10872:88;;;10940:18;;:::i;:::-;10872:88;10980:10;10976:2;10969:22;10759:238;10716:281;;:::o;11003:129::-;11037:6;11064:20;;:::i;:::-;11054:30;;11093:33;11121:4;11113:6;11093:33;:::i;:::-;11003:129;;;:::o;11138:311::-;11215:4;11305:18;11297:6;11294:30;11291:56;;;11327:18;;:::i;:::-;11291:56;11377:4;11369:6;11365:17;11357:25;;11437:4;11431;11427:15;11419:23;;11138:311;;;:::o;11472:710::-;11568:5;11593:81;11609:64;11666:6;11609:64;:::i;:::-;11593:81;:::i;:::-;11584:90;;11694:5;11723:6;11716:5;11709:21;11757:4;11750:5;11746:16;11739:23;;11810:4;11802:6;11798:17;11790:6;11786:30;11839:3;11831:6;11828:15;11825:122;;;11858:79;;:::i;:::-;11825:122;11973:6;11956:220;11990:6;11985:3;11982:15;11956:220;;;12065:3;12094:37;12127:3;12115:10;12094:37;:::i;:::-;12089:3;12082:50;12161:4;12156:3;12152:14;12145:21;;12032:144;12016:4;12011:3;12007:14;12000:21;;11956:220;;;11960:21;11574:608;;11472:710;;;;;:::o;12205:370::-;12276:5;12325:3;12318:4;12310:6;12306:17;12302:27;12292:122;;12333:79;;:::i;:::-;12292:122;12450:6;12437:20;12475:94;12565:3;12557:6;12550:4;12542:6;12538:17;12475:94;:::i;:::-;12466:103;;12282:293;12205:370;;;;:::o;12581:539::-;12665:6;12714:2;12702:9;12693:7;12689:23;12685:32;12682:119;;;12720:79;;:::i;:::-;12682:119;12868:1;12857:9;12853:17;12840:31;12898:18;12890:6;12887:30;12884:117;;;12920:79;;:::i;:::-;12884:117;13025:78;13095:7;13086:6;13075:9;13071:22;13025:78;:::i;:::-;13015:88;;12811:302;12581:539;;;;:::o;13143:568::-;13216:8;13226:6;13276:3;13269:4;13261:6;13257:17;13253:27;13243:122;;13284:79;;:::i;:::-;13243:122;13397:6;13384:20;13374:30;;13427:18;13419:6;13416:30;13413:117;;;13449:79;;:::i;:::-;13413:117;13563:4;13555:6;13551:17;13539:29;;13617:3;13609:4;13601:6;13597:17;13587:8;13583:32;13580:41;13577:128;;;13624:79;;:::i;:::-;13577:128;13143:568;;;;;:::o;13717:934::-;13839:6;13847;13855;13863;13912:2;13900:9;13891:7;13887:23;13883:32;13880:119;;;13918:79;;:::i;:::-;13880:119;14066:1;14055:9;14051:17;14038:31;14096:18;14088:6;14085:30;14082:117;;;14118:79;;:::i;:::-;14082:117;14231:80;14303:7;14294:6;14283:9;14279:22;14231:80;:::i;:::-;14213:98;;;;14009:312;14388:2;14377:9;14373:18;14360:32;14419:18;14411:6;14408:30;14405:117;;;14441:79;;:::i;:::-;14405:117;14554:80;14626:7;14617:6;14606:9;14602:22;14554:80;:::i;:::-;14536:98;;;;14331:313;13717:934;;;;;;;:::o;14657:474::-;14725:6;14733;14782:2;14770:9;14761:7;14757:23;14753:32;14750:119;;;14788:79;;:::i;:::-;14750:119;14908:1;14933:53;14978:7;14969:6;14958:9;14954:22;14933:53;:::i;:::-;14923:63;;14879:117;15035:2;15061:53;15106:7;15097:6;15086:9;15082:22;15061:53;:::i;:::-;15051:63;;15006:118;14657:474;;;;;:::o;15137:180::-;15185:77;15182:1;15175:88;15282:4;15279:1;15272:15;15306:4;15303:1;15296:15;15323:320;15367:6;15404:1;15398:4;15394:12;15384:22;;15451:1;15445:4;15441:12;15472:18;15462:81;;15528:4;15520:6;15516:17;15506:27;;15462:81;15590:2;15582:6;15579:14;15559:18;15556:38;15553:84;;15609:18;;:::i;:::-;15553:84;15374:269;15323:320;;;:::o;15649:182::-;15789:34;15785:1;15777:6;15773:14;15766:58;15649:182;:::o;15837:366::-;15979:3;16000:67;16064:2;16059:3;16000:67;:::i;:::-;15993:74;;16076:93;16165:3;16076:93;:::i;:::-;16194:2;16189:3;16185:12;16178:19;;15837:366;;;:::o;16209:419::-;16375:4;16413:2;16402:9;16398:18;16390:26;;16462:9;16456:4;16452:20;16448:1;16437:9;16433:17;16426:47;16490:131;16616:4;16490:131;:::i;:::-;16482:139;;16209:419;;;:::o;16634:180::-;16682:77;16679:1;16672:88;16779:4;16776:1;16769:15;16803:4;16800:1;16793:15;16820:348;16860:7;16883:20;16901:1;16883:20;:::i;:::-;16878:25;;16917:20;16935:1;16917:20;:::i;:::-;16912:25;;17105:1;17037:66;17033:74;17030:1;17027:81;17022:1;17015:9;17008:17;17004:105;17001:131;;;17112:18;;:::i;:::-;17001:131;17160:1;17157;17153:9;17142:20;;16820:348;;;;:::o;17174:231::-;17314:34;17310:1;17302:6;17298:14;17291:58;17383:14;17378:2;17370:6;17366:15;17359:39;17174:231;:::o;17411:366::-;17553:3;17574:67;17638:2;17633:3;17574:67;:::i;:::-;17567:74;;17650:93;17739:3;17650:93;:::i;:::-;17768:2;17763:3;17759:12;17752:19;;17411:366;;;:::o;17783:419::-;17949:4;17987:2;17976:9;17972:18;17964:26;;18036:9;18030:4;18026:20;18022:1;18011:9;18007:17;18000:47;18064:131;18190:4;18064:131;:::i;:::-;18056:139;;17783:419;;;:::o;18208:221::-;18348:34;18344:1;18336:6;18332:14;18325:58;18417:4;18412:2;18404:6;18400:15;18393:29;18208:221;:::o;18435:366::-;18577:3;18598:67;18662:2;18657:3;18598:67;:::i;:::-;18591:74;;18674:93;18763:3;18674:93;:::i;:::-;18792:2;18787:3;18783:12;18776:19;;18435:366;;;:::o;18807:419::-;18973:4;19011:2;19000:9;18996:18;18988:26;;19060:9;19054:4;19050:20;19046:1;19035:9;19031:17;19024:47;19088:131;19214:4;19088:131;:::i;:::-;19080:139;;18807:419;;;:::o;19232:143::-;19289:5;19320:6;19314:13;19305:22;;19336:33;19363:5;19336:33;:::i;:::-;19232:143;;;;:::o;19381:351::-;19451:6;19500:2;19488:9;19479:7;19475:23;19471:32;19468:119;;;19506:79;;:::i;:::-;19468:119;19626:1;19651:64;19707:7;19698:6;19687:9;19683:22;19651:64;:::i;:::-;19641:74;;19597:128;19381:351;;;;:::o;19738:332::-;19859:4;19897:2;19886:9;19882:18;19874:26;;19910:71;19978:1;19967:9;19963:17;19954:6;19910:71;:::i;:::-;19991:72;20059:2;20048:9;20044:18;20035:6;19991:72;:::i;:::-;19738:332;;;;;:::o;20076:180::-;20124:77;20121:1;20114:88;20221:4;20218:1;20211:15;20245:4;20242:1;20235:15;20262:114;20329:6;20363:5;20357:12;20347:22;;20262:114;;;:::o;20382:184::-;20481:11;20515:6;20510:3;20503:19;20555:4;20550:3;20546:14;20531:29;;20382:184;;;;:::o;20572:132::-;20639:4;20662:3;20654:11;;20692:4;20687:3;20683:14;20675:22;;20572:132;;;:::o;20710:108::-;20787:24;20805:5;20787:24;:::i;:::-;20782:3;20775:37;20710:108;;:::o;20824:179::-;20893:10;20914:46;20956:3;20948:6;20914:46;:::i;:::-;20992:4;20987:3;20983:14;20969:28;;20824:179;;;;:::o;21009:113::-;21079:4;21111;21106:3;21102:14;21094:22;;21009:113;;;:::o;21158:732::-;21277:3;21306:54;21354:5;21306:54;:::i;:::-;21376:86;21455:6;21450:3;21376:86;:::i;:::-;21369:93;;21486:56;21536:5;21486:56;:::i;:::-;21565:7;21596:1;21581:284;21606:6;21603:1;21600:13;21581:284;;;21682:6;21676:13;21709:63;21768:3;21753:13;21709:63;:::i;:::-;21702:70;;21795:60;21848:6;21795:60;:::i;:::-;21785:70;;21641:224;21628:1;21625;21621:9;21616:14;;21581:284;;;21585:14;21881:3;21874:10;;21282:608;;;21158:732;;;;:::o;21896:483::-;22067:4;22105:2;22094:9;22090:18;22082:26;;22118:71;22186:1;22175:9;22171:17;22162:6;22118:71;:::i;:::-;22236:9;22230:4;22226:20;22221:2;22210:9;22206:18;22199:48;22264:108;22367:4;22358:6;22264:108;:::i;:::-;22256:116;;21896:483;;;;;:::o;22385:311::-;22462:4;22552:18;22544:6;22541:30;22538:56;;;22574:18;;:::i;:::-;22538:56;22624:4;22616:6;22612:17;22604:25;;22684:4;22678;22674:15;22666:23;;22385:311;;;:::o;22702:143::-;22759:5;22790:6;22784:13;22775:22;;22806:33;22833:5;22806:33;:::i;:::-;22702:143;;;;:::o;22868:732::-;22975:5;23000:81;23016:64;23073:6;23016:64;:::i;:::-;23000:81;:::i;:::-;22991:90;;23101:5;23130:6;23123:5;23116:21;23164:4;23157:5;23153:16;23146:23;;23217:4;23209:6;23205:17;23197:6;23193:30;23246:3;23238:6;23235:15;23232:122;;;23265:79;;:::i;:::-;23232:122;23380:6;23363:231;23397:6;23392:3;23389:15;23363:231;;;23472:3;23501:48;23545:3;23533:10;23501:48;:::i;:::-;23496:3;23489:61;23579:4;23574:3;23570:14;23563:21;;23439:155;23423:4;23418:3;23414:14;23407:21;;23363:231;;;23367:21;22981:619;;22868:732;;;;;:::o;23623:385::-;23705:5;23754:3;23747:4;23739:6;23735:17;23731:27;23721:122;;23762:79;;:::i;:::-;23721:122;23872:6;23866:13;23897:105;23998:3;23990:6;23983:4;23975:6;23971:17;23897:105;:::i;:::-;23888:114;;23711:297;23623:385;;;;:::o;24014:554::-;24109:6;24158:2;24146:9;24137:7;24133:23;24129:32;24126:119;;;24164:79;;:::i;:::-;24126:119;24305:1;24294:9;24290:17;24284:24;24335:18;24327:6;24324:30;24321:117;;;24357:79;;:::i;:::-;24321:117;24462:89;24543:7;24534:6;24523:9;24519:22;24462:89;:::i;:::-;24452:99;;24255:306;24014:554;;;;:::o;24574:232::-;24714:34;24710:1;24702:6;24698:14;24691:58;24783:15;24778:2;24770:6;24766:15;24759:40;24574:232;:::o;24812:366::-;24954:3;24975:67;25039:2;25034:3;24975:67;:::i;:::-;24968:74;;25051:93;25140:3;25051:93;:::i;:::-;25169:2;25164:3;25160:12;25153:19;;24812:366;;;:::o;25184:419::-;25350:4;25388:2;25377:9;25373:18;25365:26;;25437:9;25431:4;25427:20;25423:1;25412:9;25408:17;25401:47;25465:131;25591:4;25465:131;:::i;:::-;25457:139;;25184:419;;;:::o;25609:229::-;25749:34;25745:1;25737:6;25733:14;25726:58;25818:12;25813:2;25805:6;25801:15;25794:37;25609:229;:::o;25844:366::-;25986:3;26007:67;26071:2;26066:3;26007:67;:::i;:::-;26000:74;;26083:93;26172:3;26083:93;:::i;:::-;26201:2;26196:3;26192:12;26185:19;;25844:366;;;:::o;26216:419::-;26382:4;26420:2;26409:9;26405:18;26397:26;;26469:9;26463:4;26459:20;26455:1;26444:9;26440:17;26433:47;26497:131;26623:4;26497:131;:::i;:::-;26489:139;;26216:419;;;:::o;26641:305::-;26681:3;26700:20;26718:1;26700:20;:::i;:::-;26695:25;;26734:20;26752:1;26734:20;:::i;:::-;26729:25;;26888:1;26820:66;26816:74;26813:1;26810:81;26807:107;;;26894:18;;:::i;:::-;26807:107;26938:1;26935;26931:9;26924:16;;26641:305;;;;:::o;26952:225::-;27092:34;27088:1;27080:6;27076:14;27069:58;27161:8;27156:2;27148:6;27144:15;27137:33;26952:225;:::o;27183:366::-;27325:3;27346:67;27410:2;27405:3;27346:67;:::i;:::-;27339:74;;27422:93;27511:3;27422:93;:::i;:::-;27540:2;27535:3;27531:12;27524:19;;27183:366;;;:::o;27555:419::-;27721:4;27759:2;27748:9;27744:18;27736:26;;27808:9;27802:4;27798:20;27794:1;27783:9;27779:17;27772:47;27836:131;27962:4;27836:131;:::i;:::-;27828:139;;27555:419;;;:::o;27980:223::-;28120:34;28116:1;28108:6;28104:14;28097:58;28189:6;28184:2;28176:6;28172:15;28165:31;27980:223;:::o;28209:366::-;28351:3;28372:67;28436:2;28431:3;28372:67;:::i;:::-;28365:74;;28448:93;28537:3;28448:93;:::i;:::-;28566:2;28561:3;28557:12;28550:19;;28209:366;;;:::o;28581:419::-;28747:4;28785:2;28774:9;28770:18;28762:26;;28834:9;28828:4;28824:20;28820:1;28809:9;28805:17;28798:47;28862:131;28988:4;28862:131;:::i;:::-;28854:139;;28581:419;;;:::o;29006:221::-;29146:34;29142:1;29134:6;29130:14;29123:58;29215:4;29210:2;29202:6;29198:15;29191:29;29006:221;:::o;29233:366::-;29375:3;29396:67;29460:2;29455:3;29396:67;:::i;:::-;29389:74;;29472:93;29561:3;29472:93;:::i;:::-;29590:2;29585:3;29581:12;29574:19;;29233:366;;;:::o;29605:419::-;29771:4;29809:2;29798:9;29794:18;29786:26;;29858:9;29852:4;29848:20;29844:1;29833:9;29829:17;29822:47;29886:131;30012:4;29886:131;:::i;:::-;29878:139;;29605:419;;;:::o;30030:224::-;30170:34;30166:1;30158:6;30154:14;30147:58;30239:7;30234:2;30226:6;30222:15;30215:32;30030:224;:::o;30260:366::-;30402:3;30423:67;30487:2;30482:3;30423:67;:::i;:::-;30416:74;;30499:93;30588:3;30499:93;:::i;:::-;30617:2;30612:3;30608:12;30601:19;;30260:366;;;:::o;30632:419::-;30798:4;30836:2;30825:9;30821:18;30813:26;;30885:9;30879:4;30875:20;30871:1;30860:9;30856:17;30849:47;30913:131;31039:4;30913:131;:::i;:::-;30905:139;;30632:419;;;:::o;31057:222::-;31197:34;31193:1;31185:6;31181:14;31174:58;31266:5;31261:2;31253:6;31249:15;31242:30;31057:222;:::o;31285:366::-;31427:3;31448:67;31512:2;31507:3;31448:67;:::i;:::-;31441:74;;31524:93;31613:3;31524:93;:::i;:::-;31642:2;31637:3;31633:12;31626:19;;31285:366;;;:::o;31657:419::-;31823:4;31861:2;31850:9;31846:18;31838:26;;31910:9;31904:4;31900:20;31896:1;31885:9;31881:17;31874:47;31938:131;32064:4;31938:131;:::i;:::-;31930:139;;31657:419;;;:::o;32082:228::-;32222:34;32218:1;32210:6;32206:14;32199:58;32291:11;32286:2;32278:6;32274:15;32267:36;32082:228;:::o;32316:366::-;32458:3;32479:67;32543:2;32538:3;32479:67;:::i;:::-;32472:74;;32555:93;32644:3;32555:93;:::i;:::-;32673:2;32668:3;32664:12;32657:19;;32316:366;;;:::o;32688:419::-;32854:4;32892:2;32881:9;32877:18;32869:26;;32941:9;32935:4;32931:20;32927:1;32916:9;32912:17;32905:47;32969:131;33095:4;32969:131;:::i;:::-;32961:139;;32688:419;;;:::o;33113:180::-;33253:32;33249:1;33241:6;33237:14;33230:56;33113:180;:::o;33299:366::-;33441:3;33462:67;33526:2;33521:3;33462:67;:::i;:::-;33455:74;;33538:93;33627:3;33538:93;:::i;:::-;33656:2;33651:3;33647:12;33640:19;;33299:366;;;:::o;33671:419::-;33837:4;33875:2;33864:9;33860:18;33852:26;;33924:9;33918:4;33914:20;33910:1;33899:9;33895:17;33888:47;33952:131;34078:4;33952:131;:::i;:::-;33944:139;;33671:419;;;:::o;34096:234::-;34236:34;34232:1;34224:6;34220:14;34213:58;34305:17;34300:2;34292:6;34288:15;34281:42;34096:234;:::o;34336:366::-;34478:3;34499:67;34563:2;34558:3;34499:67;:::i;:::-;34492:74;;34575:93;34664:3;34575:93;:::i;:::-;34693:2;34688:3;34684:12;34677:19;;34336:366;;;:::o;34708:419::-;34874:4;34912:2;34901:9;34897:18;34889:26;;34961:9;34955:4;34951:20;34947:1;34936:9;34932:17;34925:47;34989:131;35115:4;34989:131;:::i;:::-;34981:139;;34708:419;;;:::o;35133:224::-;35273:34;35269:1;35261:6;35257:14;35250:58;35342:7;35337:2;35329:6;35325:15;35318:32;35133:224;:::o;35363:366::-;35505:3;35526:67;35590:2;35585:3;35526:67;:::i;:::-;35519:74;;35602:93;35691:3;35602:93;:::i;:::-;35720:2;35715:3;35711:12;35704:19;;35363:366;;;:::o;35735:419::-;35901:4;35939:2;35928:9;35924:18;35916:26;;35988:9;35982:4;35978:20;35974:1;35963:9;35959:17;35952:47;36016:131;36142:4;36016:131;:::i;:::-;36008:139;;35735:419;;;:::o;36160:191::-;36200:4;36220:20;36238:1;36220:20;:::i;:::-;36215:25;;36254:20;36272:1;36254:20;:::i;:::-;36249:25;;36293:1;36290;36287:8;36284:34;;;36298:18;;:::i;:::-;36284:34;36343:1;36340;36336:9;36328:17;;36160:191;;;;:::o;36357:177::-;36497:29;36493:1;36485:6;36481:14;36474:53;36357:177;:::o;36540:366::-;36682:3;36703:67;36767:2;36762:3;36703:67;:::i;:::-;36696:74;;36779:93;36868:3;36779:93;:::i;:::-;36897:2;36892:3;36888:12;36881:19;;36540:366;;;:::o;36912:419::-;37078:4;37116:2;37105:9;37101:18;37093:26;;37165:9;37159:4;37155:20;37151:1;37140:9;37136:17;37129:47;37193:131;37319:4;37193:131;:::i;:::-;37185:139;;36912:419;;;:::o;37337:233::-;37376:3;37399:24;37417:5;37399:24;:::i;:::-;37390:33;;37445:66;37438:5;37435:77;37432:103;;37515:18;;:::i;:::-;37432:103;37562:1;37555:5;37551:13;37544:20;;37337:233;;;:::o;37576:351::-;37646:6;37695:2;37683:9;37674:7;37670:23;37666:32;37663:119;;;37701:79;;:::i;:::-;37663:119;37821:1;37846:64;37902:7;37893:6;37882:9;37878:22;37846:64;:::i;:::-;37836:74;;37792:128;37576:351;;;;:::o;37933:332::-;38054:4;38092:2;38081:9;38077:18;38069:26;;38105:71;38173:1;38162:9;38158:17;38149:6;38105:71;:::i;:::-;38186:72;38254:2;38243:9;38239:18;38230:6;38186:72;:::i;:::-;37933:332;;;;;:::o;38271:137::-;38325:5;38356:6;38350:13;38341:22;;38372:30;38396:5;38372:30;:::i;:::-;38271:137;;;;:::o;38414:345::-;38481:6;38530:2;38518:9;38509:7;38505:23;38501:32;38498:119;;;38536:79;;:::i;:::-;38498:119;38656:1;38681:61;38734:7;38725:6;38714:9;38710:22;38681:61;:::i;:::-;38671:71;;38627:125;38414:345;;;;:::o;38765:663::-;38853:6;38861;38869;38918:2;38906:9;38897:7;38893:23;38889:32;38886:119;;;38924:79;;:::i;:::-;38886:119;39044:1;39069:64;39125:7;39116:6;39105:9;39101:22;39069:64;:::i;:::-;39059:74;;39015:128;39182:2;39208:64;39264:7;39255:6;39244:9;39240:22;39208:64;:::i;:::-;39198:74;;39153:129;39321:2;39347:64;39403:7;39394:6;39383:9;39379:22;39347:64;:::i;:::-;39337:74;;39292:129;38765:663;;;;;:::o;39434:553::-;39611:4;39649:3;39638:9;39634:19;39626:27;;39663:71;39731:1;39720:9;39716:17;39707:6;39663:71;:::i;:::-;39744:72;39812:2;39801:9;39797:18;39788:6;39744:72;:::i;:::-;39826;39894:2;39883:9;39879:18;39870:6;39826:72;:::i;:::-;39908;39976:2;39965:9;39961:18;39952:6;39908:72;:::i;:::-;39434:553;;;;;;;:::o;39993:85::-;40038:7;40067:5;40056:16;;39993:85;;;:::o;40084:158::-;40142:9;40175:61;40193:42;40202:32;40228:5;40202:32;:::i;:::-;40193:42;:::i;:::-;40175:61;:::i;:::-;40162:74;;40084:158;;;:::o;40248:147::-;40343:45;40382:5;40343:45;:::i;:::-;40338:3;40331:58;40248:147;;:::o;40401:831::-;40664:4;40702:3;40691:9;40687:19;40679:27;;40716:71;40784:1;40773:9;40769:17;40760:6;40716:71;:::i;:::-;40797:80;40873:2;40862:9;40858:18;40849:6;40797:80;:::i;:::-;40924:9;40918:4;40914:20;40909:2;40898:9;40894:18;40887:48;40952:108;41055:4;41046:6;40952:108;:::i;:::-;40944:116;;41070:72;41138:2;41127:9;41123:18;41114:6;41070:72;:::i;:::-;41152:73;41220:3;41209:9;41205:19;41196:6;41152:73;:::i;:::-;40401:831;;;;;;;;:::o;41238:180::-;41286:77;41283:1;41276:88;41383:4;41380:1;41373:15;41407:4;41404:1;41397:15;41424:185;41464:1;41481:20;41499:1;41481:20;:::i;:::-;41476:25;;41515:20;41533:1;41515:20;:::i;:::-;41510:25;;41554:1;41544:35;;41559:18;;:::i;:::-;41544:35;41601:1;41598;41594:9;41589:14;;41424:185;;;;:::o;41615:220::-;41755:34;41751:1;41743:6;41739:14;41732:58;41824:3;41819:2;41811:6;41807:15;41800:28;41615:220;:::o;41841:366::-;41983:3;42004:67;42068:2;42063:3;42004:67;:::i;:::-;41997:74;;42080:93;42169:3;42080:93;:::i;:::-;42198:2;42193:3;42189:12;42182:19;;41841:366;;;:::o;42213:419::-;42379:4;42417:2;42406:9;42402:18;42394:26;;42466:9;42460:4;42456:20;42452:1;42441:9;42437:17;42430:47;42494:131;42620:4;42494:131;:::i;:::-;42486:139;;42213:419;;;:::o;42638:720::-;42873:4;42911:3;42900:9;42896:19;42888:27;;42925:79;43001:1;42990:9;42986:17;42977:6;42925:79;:::i;:::-;43051:9;43045:4;43041:20;43036:2;43025:9;43021:18;43014:48;43079:108;43182:4;43173:6;43079:108;:::i;:::-;43071:116;;43197:72;43265:2;43254:9;43250:18;43241:6;43197:72;:::i;:::-;43279;43347:2;43336:9;43332:18;43323:6;43279:72;:::i;:::-;42638:720;;;;;;;:::o

Swarm Source

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