BNB Price: $694.99 (-2.11%)
Gas: 1 GWei
 

Overview

Max Total Supply

700,000,000AFU

Holders

1,243

Market

Price

$0.00 @ 0.000000 BNB

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Filtered by Token Holder
USD Coin: USDC Token
Balance
1 AFU

Value
$0.00
0x8ac76a51cc950d9822d68b83fe1ad97b32cd580d
Loading...
Loading
Loading...
Loading
Loading...
Loading

Click here to update the token information / general information

Contract Source Code Verified (Exact Match)

Contract Name:
AFU

Compiler Version
v0.7.6+commit.7338295f

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, None license

Contract Source Code (Solidity)

/**
 *Submitted for verification at BscScan.com on 2022-07-20
*/

/**
 *Submitted for verification at BscScan.com on 2021-12-23
*/

pragma solidity ^0.7.6;

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

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

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

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

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

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

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

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

// File: contracts/Context.sol

pragma solidity >=0.6.0 <0.8.0;

/*
 * @dev Provides information about the current execution context, including the
 * sender of the transaction and its data. While these are generally available
 * via msg.sender and msg.data, they should not be accessed in such a direct
 * manner, since when dealing with GSN meta-transactions the account sending and
 * paying for execution may not be the actual sender (as far as an application
 * is concerned).
 *
 * This contract is only required for intermediate, library-like contracts.
 */
abstract contract Context {
    function _msgSender() internal view virtual returns (address payable) {
        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;
    }
}

// File: contracts/IUniswapV2Router01.sol

pragma solidity >=0.6.2;

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

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

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

pragma solidity >=0.6.2;


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

    function swapExactTokensForTokensSupportingFeeOnTransferTokens(
        uint amountIn,
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external;
    function swapExactETHForTokensSupportingFeeOnTransferTokens(
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external payable;
    function swapExactTokensForETHSupportingFeeOnTransferTokens(
        uint amountIn,
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external;
}
// File: contracts/IUniswapV2Factory.sol

pragma solidity >=0.5.0;

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

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

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

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

    function setFeeTo(address) external;
    function setFeeToSetter(address) external;
}
// File: contracts/IUniswapV2Pair.sol

pragma solidity >=0.5.0;

interface IUniswapV2Pair {
    event Approval(address indexed owner, address indexed spender, uint value);
    event Transfer(address indexed from, address indexed to, uint value);

    function name() external pure returns (string memory);
    function symbol() external pure returns (string memory);
    function decimals() external pure returns (uint8);
    function totalSupply() external view returns (uint);
    function balanceOf(address owner) external view returns (uint);
    function allowance(address owner, address spender) external view returns (uint);

    function approve(address spender, uint value) external returns (bool);
    function transfer(address to, uint value) external returns (bool);
    function transferFrom(address from, address to, uint value) external returns (bool);

    function DOMAIN_SEPARATOR() external view returns (bytes32);
    function PERMIT_TYPEHASH() external pure returns (bytes32);
    function nonces(address owner) external view returns (uint);

    function permit(address owner, address spender, uint value, uint deadline, uint8 v, bytes32 r, bytes32 s) external;

    event Mint(address indexed sender, uint amount0, uint amount1);
    event Burn(address indexed sender, uint amount0, uint amount1, address indexed to);
    event Swap(
        address indexed sender,
        uint amount0In,
        uint amount1In,
        uint amount0Out,
        uint amount1Out,
        address indexed to
    );
    event Sync(uint112 reserve0, uint112 reserve1);

    function MINIMUM_LIQUIDITY() external pure returns (uint);
    function factory() external view returns (address);
    function token0() external view returns (address);
    function token1() external view returns (address);
    function getReserves() external view returns (uint112 reserve0, uint112 reserve1, uint32 blockTimestampLast);
    function price0CumulativeLast() external view returns (uint);
    function price1CumulativeLast() external view returns (uint);
    function kLast() external view returns (uint);

    function mint(address to) external returns (uint liquidity);
    function burn(address to) external returns (uint amount0, uint amount1);
    function swap(uint amount0Out, uint amount1Out, address to, bytes calldata data) external;
    function skim(address to) external;
    function sync() external;

    function initialize(address, address) external;
}
// File: contracts/IterableMapping.sol

pragma solidity ^0.7.6;

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

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

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

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

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

    function set(Map storage map, 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(Map storage map, 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();
    }
}
// File: contracts/Ownable.sol 

pragma solidity ^0.7.6;

/**
 * @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.
 */
abstract contract Ownable is Context {
    address private _owner;

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

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

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

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

    /**
     * @dev Leaves the contract without owner. It will not be possible to call
     * `onlyOwner` functions anymore. Can only be called by the current owner.
     *
     * 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;
    }
}
// File: contracts/IDividendPayingTokenOptional.sol

pragma solidity ^0.7.6;

/// @title Dividend-Paying Token Optional Interface
/// @author Roger Wu (https://github.com/roger-wu)
/// @dev OPTIONAL functions for a dividend-paying token contract.
interface IDividendPayingTokenOptional {
  /// @notice View the amount of dividend in wei that an address can withdraw.
  /// @param _owner The address of a token holder.
  /// @return The amount of dividend in wei that `_owner` can withdraw.
  function withdrawableDividendOf(address _owner) external view returns(uint256);

  /// @notice View the amount of dividend in wei that an address has withdrawn.
  /// @param _owner The address of a token holder.
  /// @return The amount of dividend in wei that `_owner` has withdrawn.
  function withdrawnDividendOf(address _owner) external view returns(uint256);

  /// @notice View the amount of dividend in wei that an address has earned in total.
  /// @dev accumulativeDividendOf(_owner) = withdrawableDividendOf(_owner) + withdrawnDividendOf(_owner)
  /// @param _owner The address of a token holder.
  /// @return The amount of dividend in wei that `_owner` has earned in total.
  function accumulativeDividendOf(address _owner) external view returns(uint256);
}
// File: contracts/IDividendPayingToken.sol

pragma solidity ^0.7.6;

/// @title Dividend-Paying Token Interface
/// @author Roger Wu (https://github.com/roger-wu)
/// @dev An interface for a dividend-paying token contract.
interface IDividendPayingToken {
  /// @notice View the amount of dividend in wei that an address can withdraw.
  /// @param _owner The address of a token holder.
  /// @return The amount of dividend in wei that `_owner` can withdraw.
  function dividendOf(address _owner) external view returns(uint256);

  /// @notice Distributes ether to token holders as dividends.
  /// @dev SHOULD distribute the paid ether to token holders as dividends.
  ///  SHOULD NOT directly transfer ether to token holders in this function.
  ///  MUST emit a `DividendsDistributed` event when the amount of distributed ether is greater than 0.
  function distributeDividends() external payable;

  /// @notice Withdraws the ether distributed to the sender.
  /// @dev SHOULD transfer `dividendOf(msg.sender)` wei to `msg.sender`, and `dividendOf(msg.sender)` SHOULD be 0 after the transfer.
  ///  MUST emit a `DividendWithdrawn` event if the amount of ether transferred is greater than 0.
  function withdrawDividend() external;

  /// @dev This event MUST emit when ether is distributed to token holders.
  /// @param from The address which sends ether to this contract.
  /// @param weiAmount The amount of distributed ether in wei.
  event DividendsDistributed(
    address indexed from,
    uint256 weiAmount
  );

  /// @dev This event MUST emit when an address withdraws their dividend.
  /// @param to The address which withdraws ether from this contract.
  /// @param weiAmount The amount of withdrawn ether in wei.
  event DividendWithdrawn(
    address indexed to,
    uint256 weiAmount,
    address indexed tokenWithdrawn
  );
}
// File: contracts/SafeMathInt.sol

pragma solidity ^0.7.6;

/**
 * @title SafeMathInt
 * @dev Math operations with safety checks that revert on error
 * @dev SafeMath adapted for int256
 * Based on code of  https://github.com/RequestNetwork/requestNetwork/blob/master/packages/requestNetworkSmartContracts/contracts/base/math/SafeMathInt.sol
 */
library SafeMathInt {
  function mul(int256 a, int256 b) internal pure returns (int256) {
    // Prevent overflow when multiplying INT256_MIN with -1
    // https://github.com/RequestNetwork/requestNetwork/issues/43
    require(!(a == - 2**255 && b == -1) && !(b == - 2**255 && a == -1));

    int256 c = a * b;
    require((b == 0) || (c / b == a));
    return c;
  }

  function div(int256 a, int256 b) internal pure returns (int256) {
    // Prevent overflow when dividing INT256_MIN by -1
    // https://github.com/RequestNetwork/requestNetwork/issues/43
    require(!(a == - 2**255 && b == -1) && (b > 0));

    return a / b;
  }

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

    return a - b;
  }

  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 toUint256Safe(int256 a) internal pure returns (uint256) {
    require(a >= 0);
    return uint256(a);
  }
}
// File: contracts/SafeMathUint.sol

pragma solidity ^0.7.6;

/**
 * @title SafeMathUint
 * @dev Math operations with safety checks that revert on error
 */
library SafeMathUint {
  function toInt256Safe(uint256 a) internal pure returns (int256) {
    int256 b = int256(a);
    require(b >= 0);
    return b;
  }
}
// File: contracts/ERC20.sol
pragma solidity ^0.7.6;
/**
 * @dev Implementation of the {IERC20} interface.
 *
 * This implementation is agnostic to the way tokens are created. This means
 * that a supply mechanism has to be added in a derived contract using {_mint}.
 * For a generic mechanism see {ERC20PresetMinterPauser}.
 *
 * TIP: For a detailed writeup see our guide
 * https://forum.zeppelin.solutions/t/how-to-implement-erc20-supply-mechanisms/226[How
 * to implement supply mechanisms].
 *
 * We have followed general OpenZeppelin guidelines: functions revert instead
 * of returning `false` on failure. This behavior is nonetheless conventional
 * and does not conflict with the expectations of ERC20 applications.
 *
 * Additionally, an {Approval} event is emitted on calls to {transferFrom}.
 * This allows applications to reconstruct the allowance for all accounts just
 * by listening to said events. Other implementations of the EIP may not emit
 * these events, as it isn't required by the specification.
 *
 * Finally, the non-standard {decreaseAllowance} and {increaseAllowance}
 * functions have been added to mitigate the well-known issues around setting
 * allowances. See {IERC20-approve}.
 */
contract ERC20 is Context, IERC20 {
    using SafeMath for uint256;

    mapping (address => uint256) private _balances;

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

    uint256 private _totalSupply;

    string private _name;
    string private _symbol;
    uint8 private _decimals;

    /**
     * @dev Sets the values for {name} and {symbol}, initializes {decimals} with
     * a default value of 18.
     *
     * To select a different value for {decimals}, use {_setupDecimals}.
     *
     * All three of these values are immutable: they can only be set once during
     * construction.
     */
    constructor (string memory name_, string memory symbol_) {
        _name = name_;
        _symbol = symbol_;
        _decimals = 18;
    }

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

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

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

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

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

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

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

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

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

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

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

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

        _beforeTokenTransfer(sender, recipient, amount);

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

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

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

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

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

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

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

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

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

    /**
     * @dev Sets {decimals} to a value other than the default one of 18.
     *
     * WARNING: This function should only be called from the constructor. Most
     * applications that interact with token contracts will not expect
     * {decimals} to ever change, and may work incorrectly if it does.
     */
    function _setupDecimals(uint8 decimals_) internal virtual {
        _decimals = decimals_;
    }

    /**
     * @dev Hook that is called before any transfer of tokens. This includes
     * minting and burning.
     *
     * Calling conditions:
     *
     * - when `from` and `to` are both non-zero, `amount` of ``from``'s tokens
     * will be to transferred to `to`.
     * - when `from` is zero, `amount` tokens will be minted for `to`.
     * - when `to` is zero, `amount` of ``from``'s tokens will be burned.
     * - `from` and `to` are never both zero.
     *
     * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks].
     */
    function _beforeTokenTransfer(address from, address to, uint256 amount) internal virtual { }
}
// File: contracts/SafeMath.sol
pragma solidity ^0.7.6;
/**
 * @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, with an overflow flag.
     *
     * _Available since v3.4._
     */
    function tryAdd(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        uint256 c = a + b;
        if (c < a) return (false, 0);
        return (true, c);
    }

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

    /**
     * @dev Returns the multiplication of two unsigned integers, with an overflow flag.
     *
     * _Available since v3.4._
     */
    function tryMul(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        // Gas optimization: this is cheaper than requiring 'a' not being zero, but the
        // benefit is lost if 'b' is also tested.
        // See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522
        if (a == 0) return (true, 0);
        uint256 c = a * b;
        if (c / a != b) return (false, 0);
        return (true, c);
    }

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

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

    /**
     * @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) {
        require(b <= a, "SafeMath: subtraction overflow");
        return a - b;
    }

    /**
     * @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) {
        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, reverting 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) {
        require(b > 0, "SafeMath: division by zero");
        return a / b;
    }

    /**
     * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),
     * reverting 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) {
        require(b > 0, "SafeMath: modulo by zero");
        return a % b;
    }

    /**
     * @dev Returns the subtraction of two unsigned integers, reverting with custom message on
     * overflow (when the result is negative).
     *
     * CAUTION: This function is deprecated because it requires allocating memory for the error
     * message unnecessarily. For custom revert reasons use {trySub}.
     *
     * 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);
        return a - b;
    }

    /**
     * @dev Returns the integer division of two unsigned integers, reverting with custom message on
     * division by zero. The result is rounded towards zero.
     *
     * CAUTION: This function is deprecated because it requires allocating memory for the error
     * message unnecessarily. For custom revert reasons use {tryDiv}.
     *
     * 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);
        return a / b;
    }

    /**
     * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),
     * reverting with custom message when dividing by zero.
     *
     * CAUTION: This function is deprecated because it requires allocating memory for the error
     * message unnecessarily. For custom revert reasons use {tryMod}.
     *
     * 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;
    }
}
// File: contracts/ AFUDividendPayingToken.sol
pragma solidity ^0.7.6;
/// @title Dividend-Paying Token
/// @author Roger Wu (https://github.com/roger-wu)
/// @dev A mintable ERC20 token that allows anyone to pay and distribute ether
///  to token holders as dividends and allows token holders to withdraw their dividends.
///  Reference: the source code of PoWH3D: https://etherscan.io/address/0xB3775fB83F7D12A36E0475aBdD1FCA35c091efBe#code
contract DividendPayingToken is ERC20, IDividendPayingToken, IDividendPayingTokenOptional {
  using SafeMath for uint256;
  using SafeMathUint for uint256;
  using SafeMathInt for int256;

  // With `magnitude`, we can properly distribute dividends even if the amount of received ether is small.
  // For more discussion about choosing the value of `magnitude`,
  //  see https://github.com/ethereum/EIPs/issues/1726#issuecomment-472352728
  uint256 constant internal magnitude = 2**128;

  uint256 internal magnifiedDividendPerShare;
  uint256 internal lastAmount;
  
  address public DividendToken = address(0);
  address public masterContract;

    modifier onlyMaster() {
            require(masterContract == msg.sender, "Ownable: caller is not the master contract");
            _;
    }

  mapping(address => int256) internal magnifiedDividendCorrections;
  mapping(address => uint256) internal withdrawnDividends;

  uint256 public totalDividendsDistributed;

  constructor(string memory _name, string memory _symbol) public ERC20(_name, _symbol) {
    masterContract = msg.sender;
  }
  
  receive() external payable {
  }

  function updateMasterContract(address newAddress) public onlyMaster {
        masterContract = newAddress;
  }  
  function distributeDividends() public override payable onlyMaster {
    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 distributeTokenDividends(uint256 amount) public onlyMaster{
    require(totalSupply() > 0);

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

      totalDividendsDistributed = totalDividendsDistributed.add(amount);
    }
  }

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

  function _withdrawDividendOfUser(address payable user) internal returns (uint256) {
    uint256 _withdrawableDividend = withdrawableDividendOf(user);
    if (_withdrawableDividend > 0) {
      withdrawnDividends[user] = withdrawnDividends[user].add(_withdrawableDividend);

        bool success = false;
        if(DividendToken == address(0)){
            (bool sent,) = user.call{value: _withdrawableDividend}("");
            success = sent;
            emit DividendWithdrawn(user, _withdrawableDividend, DividendToken);     
        }else{
            success = IERC20(DividendToken).transfer(user, _withdrawableDividend);
            emit DividendWithdrawn(user, _withdrawableDividend, DividendToken);
        }

      if(!success) {
        withdrawnDividends[user] = withdrawnDividends[user].sub(_withdrawableDividend);
        return 0;
      }

      return _withdrawableDividend;
    }

    return 0;
  }

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

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

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

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

  function _transfer(address from, address to, uint256 value) internal virtual override {
    require(false);

    int256 _magCorrection = magnifiedDividendPerShare.mul(value).toInt256Safe();
    magnifiedDividendCorrections[from] = magnifiedDividendCorrections[from].add(_magCorrection);
    magnifiedDividendCorrections[to] = magnifiedDividendCorrections[to].sub(_magCorrection);
  }

  function _mint(address account, uint256 value) internal override {
    super._mint(account, value);

    magnifiedDividendCorrections[account] = magnifiedDividendCorrections[account]
      .sub( (magnifiedDividendPerShare.mul(value)).toInt256Safe() );
  }

  function _burn(address account, uint256 value) internal override {
    super._burn(account, value);

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

  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);
    }
  }
}
// File: contracts/ AFU.sol
pragma solidity ^0.7.6;
contract  AFU is ERC20, Ownable {
    using SafeMath for uint256;

    IUniswapV2Router02 public uniswapV2Router;
    address public immutable uniswapV2Pair;

    address public DividendToken = address(0);

    bool private swapping;

     AFUDividendTracker public dividendTracker;

    address public burnAddress;
    
    uint256 public maxBuyTransactionAmount = 700000000 * (10**18);
    uint256 public maxSellTransactionAmount = 700000000 * (10**18);
    uint256 public swapTokensAtAmount = 700000000 * (10**18);
    uint256 public _maxWalletToken = 700000000 * (10**18); 

    uint256 public sellLimitTime = 86400;
    mapping(address => uint256) public buycooldown;
    mapping(address => uint256) public sellcooldown;
    mapping(address => uint256) public firstsell;
    mapping(address => uint256) public sellnumber;
    address payable public marketAddress;
    address payable public charityAddress;
    address payable public buyBackAddress;
    address public marketTokenAddressForFee;
    address public charityTokenAddressForFee;
    address public buyBackTokenAddressForFee;
    // transfer fees
    uint256 public marketFee = 0;
    uint256 public charityFee = 0;
    uint256 public buyBackFee = 0;
    uint256 public tokenRewardsFee = 0;
    uint256 public liquidityFee = 0;
    uint256 public burnFee = 0;
    uint256 public totalFees = tokenRewardsFee.add(liquidityFee).add(marketFee).add(charityFee).add(buyBackFee).add(burnFee);
    // buy fees
    uint256 public buyMarketFee = 0;
    uint256 public buyCharityFee = 0;
    uint256 public buyBuyBackFee = 0;
    uint256 public buyTokenRewardsFee = 0;
    uint256 public buyLiquidityFee = 0;
    uint256 public buyBurnFee = 0;
    uint256 public buyTotalFees = buyTokenRewardsFee.add(buyLiquidityFee).add(buyMarketFee).add(buyCharityFee).add(buyBuyBackFee).add(buyBurnFee);
    // sell fees
    uint256 public sellMarketFee = 0;
    uint256 public sellCharityFee = 0;
    uint256 public sellBuyBackFee = 0;
    uint256 public sellTokenRewardsFee = 0;
    uint256 public sellLiquidityFee = 0;
    uint256 public sellBurnFee = 0;
    uint256 public sellTotalFees = sellTokenRewardsFee.add(sellLiquidityFee).add(sellMarketFee).add(sellCharityFee).add(sellBuyBackFee).add(sellBurnFee);
    // fee tracker
    uint256 private previousMarketFee = marketFee;
    uint256 private previousCharityFee = charityFee;
    uint256 private previousBuyBackFee = buyBackFee;
    uint256 private previousTokenRewardsFee = tokenRewardsFee;
    uint256 private previousLiquidityFee = liquidityFee;
    uint256 private previousBurnFee = burnFee;
    uint256 private previousTotalFees = totalFees;
    uint256 public processDividendTime;
    uint256 public dividendTime = 3600;
    
    bool public isBuyBackActive = false;
    bool public isTransferFeesDisabled = false;

    uint256 public gasForProcessing = 300000;
    
    address public presaleAddress = address(0);

    uint256 public tradingEnabledTimestamp = 1626399138;

    mapping (address => bool) private _isBlacklisted;    
    mapping (address => bool) private _isExcludedFromFees;
    mapping (address => bool) private _isExcludedFromLimits;
    mapping (address => bool) private canTransferBeforeTradingIsEnabled;
    mapping (address => bool) public automatedMarketMakerPairs;

    event UpdateDividendTracker(address indexed newAddress, address indexed oldAddress);
    event UpdateUniswapV2Router(address indexed newAddress, address indexed oldAddress);
    event UpdateDividendToken(address indexed newAddress, address indexed oldAddress);
    event ExcludeFromFees(address indexed account, bool isExcluded);
    event ExcludeMultipleAccountsFromFees(address[] accounts, bool isExcluded);
    event ExcludedMaxSellTransactionAmount(address indexed account, bool isExcluded);
    event SetAutomatedMarketMakerPair(address indexed pair, bool indexed value);
    event BurnWalletUpdated(address indexed newBurnWallet, address indexed oldBurnWallet);
    event GasForProcessingUpdated(uint256 indexed newValue, uint256 indexed oldValue);

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

    event SendDividends(
        uint256 tokensSwapped,
        uint256 amount
    );

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

    constructor() public ERC20("Animal Friends United", " AFU") {
    
        burnAddress = address(0xdead);
        uint256 _processDividendTime = block.timestamp;
        processDividendTime = _processDividendTime;

        dividendTracker = new  AFUDividendTracker();
        
        IUniswapV2Router02 _uniswapV2Router = IUniswapV2Router02(0x10ED43C718714eb63d5aA57B78B54704E256024E);
         
        address _uniswapV2Pair = IUniswapV2Factory(_uniswapV2Router.factory())
            .createPair(address(this), _uniswapV2Router.WETH());

        uniswapV2Router = _uniswapV2Router;
        uniswapV2Pair = _uniswapV2Pair;

        _setAutomatedMarketMakerPair(_uniswapV2Pair, true);

        dividendTracker.excludeFromDividends(address(dividendTracker));
        dividendTracker.excludeFromDividends(address(this));
        dividendTracker.excludeFromDividends(address(_uniswapV2Router));
        dividendTracker.excludeFromDividends(owner());
        _isExcludedFromLimits[address(dividendTracker)];
        _isExcludedFromLimits[address(this)];
        _isExcludedFromLimits[address(_uniswapV2Router)];
        _isExcludedFromLimits[owner()];
        _isExcludedFromLimits[_uniswapV2Pair];

        excludeFromFees(burnAddress, true);
        excludeFromFees(address(this), true);
        excludeFromFees(owner(), true);

        canTransferBeforeTradingIsEnabled[owner()] = true;
        /*
            _mint is an internal function in ERC20.sol that is only called here,
            and CANNOT be called ever again
        */
        _mint(owner(), 700000000 * (10**decimals()));
    }

    receive() external payable {

    }
    
    function swapAndLiquifyOwner(uint256 _tokens) external onlyOwner {
        swapAndLiquify(_tokens);
    }    
    
    function swapAndSendDividendsOwner(uint256 _tokens) external onlyOwner {
        swapAndSendDividends(_tokens);
    }
    function restoreFees() internal {
            marketFee = previousMarketFee;
            charityFee = previousCharityFee;
            buyBackFee = previousBuyBackFee;
            tokenRewardsFee = previousTokenRewardsFee;
            liquidityFee = previousLiquidityFee;
            burnFee = previousBurnFee;
            totalFees = previousTotalFees;
    }       
    
    function updateSellLimitTime(uint256 _newTime) external onlyOwner {
        sellLimitTime = _newTime;
    }       
    
    function updateMaxSellTx(uint256 _newAmountNoDecimals) external onlyOwner {
        maxSellTransactionAmount = _newAmountNoDecimals * (10**decimals());
    }   

    function updateMaxWalletAmount(uint256 newAmountNoDecimials) external onlyOwner {
        _maxWalletToken = newAmountNoDecimials * (10**decimals());
    }     

    function updateSwapAtAmount(uint256 newAmountNoDecimials) external onlyOwner {
        swapTokensAtAmount = newAmountNoDecimials * (10**decimals());
    } 
    
    function updateMaxBuyTx(uint256 _newAmountNoDecimals) external onlyOwner {
        maxBuyTransactionAmount = _newAmountNoDecimals * (10**decimals());
    }

    function updatedividendTime(uint256 _dividendTime) external onlyOwner {
        dividendTime = _dividendTime;
    }      
    
    function updateBuyBackMode(bool _isBuyBackActive) external onlyOwner {
        isBuyBackActive = _isBuyBackActive;
    }    
    
    function updateisTransferDisabled(bool _isTransferDisabled) external onlyOwner {
        isTransferFeesDisabled = _isTransferDisabled;
    }     

    function updateTradingEnabledTime (uint256 newTimeInEpoch) external onlyOwner {
        tradingEnabledTimestamp = newTimeInEpoch;
    }     

    function updateMinimumBalanceForDividends (uint256 newAmountNoDecimials) external onlyOwner {
        dividendTracker.updateMinimumBalanceForDividends(newAmountNoDecimials);
    }    
    

    function updateTokenForDividend(address newAddress) external onlyOwner {
        dividendTracker.updateTokenForDividend(newAddress);
        DividendToken = newAddress;
        emit UpdateDividendToken(newAddress, address(DividendToken));
    }    

    function updateMarketAddress(address payable newAddress) external onlyOwner {
        marketAddress = newAddress;
        _isExcludedFromFees[newAddress] = true;
        //dividendTracker.excludeFromDividends(marketAddress);     
    }    

    function updateCharityAddress(address payable newAddress) external onlyOwner {
        charityAddress = newAddress;
        _isExcludedFromFees[newAddress] = true;
        //dividendTracker.excludeFromDividends(charityAddress);
    }       

    function updateBuyBackAddress(address payable newAddress) external onlyOwner {
        buyBackAddress = newAddress;
        _isExcludedFromFees[newAddress] = true;
        //dividendTracker.excludeFromDividends(buyBackAddress);
    }    

    function updateMarketTokenFeeAddress(address newAddress) external onlyOwner {
        marketTokenAddressForFee = newAddress;
    }    

    function updateCharityTokenFeeAddress(address newAddress) external onlyOwner {
        charityTokenAddressForFee = newAddress;
    }    

    function updateBuyBackTokenFeeAddress(address newAddress) external onlyOwner {
        buyBackTokenAddressForFee = newAddress;
    }
    
    function burnTokens(uint256 amountNoDecimals) external onlyOwner {
        uint256 sendAmount = amountNoDecimals * (10**decimals());
        super._transfer(address(this), burnAddress, sendAmount);
    }
    function updateFees(uint256 _tokenRewardsFee, uint256 _liquidityFee, uint256 _marketFee, uint256 _charityFee, uint256 _buyBackFee, uint256 _burnFee) external onlyOwner {
        tokenRewardsFee = _tokenRewardsFee;
        liquidityFee = _liquidityFee;
        marketFee = _marketFee;
        charityFee = _charityFee;
        buyBackFee = _buyBackFee;
        burnFee = _burnFee;
        totalFees = _tokenRewardsFee.add(_liquidityFee).add(_marketFee).add(_charityFee).add(_buyBackFee).add(_burnFee);
    }    
    
    function updateBuyFees(uint256 _tokenRewardsFee, uint256 _liquidityFee, uint256 _marketFee, uint256 _charityFee, uint256 _buyBackFee, uint256 _burnFee) external onlyOwner {
        buyTokenRewardsFee = _tokenRewardsFee;
        buyLiquidityFee = _liquidityFee;
        buyMarketFee = _marketFee;
        buyCharityFee = _charityFee;
        buyBuyBackFee = _buyBackFee;
        buyBurnFee = _burnFee;
        buyTotalFees = _tokenRewardsFee.add(_liquidityFee).add(_marketFee).add(_charityFee).add(_buyBackFee).add(_burnFee);
    }    
    
    function updateSellFees(uint256 _tokenRewardsFee, uint256 _liquidityFee, uint256 _marketFee, uint256 _charityFee, uint256 _buyBackFee, uint256 _burnFee) external onlyOwner {
        sellTokenRewardsFee = _tokenRewardsFee;
        sellLiquidityFee = _liquidityFee;
        sellMarketFee = _marketFee;
        sellCharityFee = _charityFee;
        sellBuyBackFee = _buyBackFee;
        sellBurnFee = _burnFee;
        sellTotalFees = _tokenRewardsFee.add(_liquidityFee).add(_marketFee).add(_charityFee).add(_buyBackFee).add(_burnFee);
    }
    
    function whitelistDxSale(address _presaleAddress, address _routerAddress) external onlyOwner {
        presaleAddress = _presaleAddress;
        canTransferBeforeTradingIsEnabled[presaleAddress] = true;
        dividendTracker.excludeFromDividends(_presaleAddress);
        excludeFromFees(_presaleAddress, true);

        canTransferBeforeTradingIsEnabled[_routerAddress] = true;
        dividendTracker.excludeFromDividends(_routerAddress);
        excludeFromFees(_routerAddress, true);
    }

    function updateDividendTracker(address newAddress) external onlyOwner {
        require(newAddress != address(dividendTracker), " AFU: The dividend tracker already has that address");

         AFUDividendTracker newDividendTracker =  AFUDividendTracker(payable(newAddress));

        require(newDividendTracker.owner() == address(this), " AFU: The new dividend tracker must be owned by the  AFU token contract");

        newDividendTracker.excludeFromDividends(address(newDividendTracker));
        newDividendTracker.excludeFromDividends(address(this));
        newDividendTracker.excludeFromDividends(address(uniswapV2Router));

        emit UpdateDividendTracker(newAddress, address(dividendTracker));

        dividendTracker = newDividendTracker;
    }

    function updateUniswapV2Router(address newAddress) external onlyOwner {
        require(newAddress != address(uniswapV2Router), " AFU: The router already has that address");
        emit UpdateUniswapV2Router(newAddress, address(uniswapV2Router));
        uniswapV2Router = IUniswapV2Router02(newAddress);
    }

    function excludeFromFees(address account, bool excluded) public onlyOwner {
        //require(_isExcludedFromFees[account] != excluded, " AFU: Account is already the value of 'excluded'");
        _isExcludedFromFees[account] = excluded;
        //dividendTracker.excludeFromDividends(account);
        //emit ExcludeFromFees(account, excluded);
    }           
    
    function excludeFromLimits(address account, bool excluded) public onlyOwner {
        //require(_isExcludedFromFees[account] != excluded, " AFU: Account is already the value of 'excluded'");
        _isExcludedFromLimits[account] = excluded;
        //dividendTracker.excludeFromDividends(account);
        //emit ExcludeFromFees(account, excluded);
    }       
    //test
    function excludeMultipleAccountsFromLimits(address[] calldata accounts, bool excluded) external onlyOwner {
        for(uint256 i = 0; i < accounts.length; i++) {
            _isExcludedFromLimits[accounts[i]] = excluded;
        }

   }
   
   function blacklistAddress(address account, bool excluded) public onlyOwner {
        //require(_isExcludedFromFees[account] != excluded, " AFU: Account is already the value of 'excluded'");
        _isBlacklisted[account] = excluded;
        dividendTracker.excludeFromDividends(account);
        //emit ExcludeFromFees(account, excluded);
    }    

    function excludeFromDividends(address account) public onlyOwner {
        //require(_isExcludedFromFees[account] != excluded, " AFU: Account is already the value of 'excluded'");
        dividendTracker.excludeFromDividends(account);
        //emit ExcludeFromFees(account, excluded);
    }    

    function enableDividends(address account) public onlyOwner {
        //require(_isExcludedFromFees[account] != excluded, " AFU: Account is already the value of 'excluded'");
        dividendTracker.enableDividends(account);
        //emit ExcludeFromFees(account, excluded);
    }

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

        emit ExcludeMultipleAccountsFromFees(accounts, excluded);
    }

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

        _setAutomatedMarketMakerPair(pair, value);
    }

    function _setAutomatedMarketMakerPair(address pair, bool value) private {
        require(automatedMarketMakerPairs[pair] != value, " AFU: Automated market maker pair is already set to that value");
        automatedMarketMakerPairs[pair] = value;

        if(value) {
            dividendTracker.excludeFromDividends(pair);
        }

        emit SetAutomatedMarketMakerPair(pair, value);
    }

    function updateGasForProcessing(uint256 newValue) public onlyOwner {
        require(newValue >= 200000 && newValue <= 500000, " AFU: gasForProcessing must be between 200,000 and 500,000");
        require(newValue != gasForProcessing, " AFU: Cannot update gasForProcessing to same value");
        emit GasForProcessingUpdated(newValue, gasForProcessing);
        gasForProcessing = newValue;
    }

    function updateClaimWait(uint256 claimWait) external onlyOwner {
        dividendTracker.updateClaimWait(claimWait);
    }

    function getClaimWait() external view returns(uint256) {
        return dividendTracker.claimWait();
    }

    function getTotalDividendsDistributed() external view returns (uint256) {
        return dividendTracker.totalDividendsDistributed();
    }

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

    function withdrawableDividendOf(address account) public view returns(uint256) {
        return dividendTracker.withdrawableDividendOf(account);
    }

    function dividendTokenBalanceOf(address account) public view returns (uint256) {
        return dividendTracker.balanceOf(account);
    }

    function getAccountDividendsInfo(address account)
        external view returns (
            address,
            int256,
            int256,
            uint256,
            uint256,
            uint256,
            uint256,
            uint256) {
        return dividendTracker.getAccount(account);
    }

    function getAccountDividendsInfoAtIndex(uint256 index)
        external view returns (
            address,
            int256,
            int256,
            uint256,
            uint256,
            uint256,
            uint256,
            uint256) {
        return dividendTracker.getAccountAtIndex(index);
    }

    function processDividendTracker(uint256 gas) external {
        (uint256 iterations, uint256 claims, uint256 lastProcessedIndex) = dividendTracker.process(gas);
        emit ProcessedDividendTracker(iterations, claims, lastProcessedIndex, false, gas, tx.origin);
    }

    function claim() external {
        dividendTracker.processAccount(msg.sender, false);
    }

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

    function getNumberOfDividendTokenHolders() external view returns(uint256) {
        return dividendTracker.getNumberOfTokenHolders();
    }

    function getTradingIsEnabled() public view returns (bool) {
        return block.timestamp >= tradingEnabledTimestamp;
    }

    function swapAndLiquify(uint256 tokens) private  {
        uint256 marketFeeFull;
        uint256 charityFeeFull;
        uint256 buyBackFeeFull;
        
        if(marketFee != 0){
            marketFeeFull = tokens.mul(marketFee).div(100);
        }
        if(charityFee != 0){
            charityFeeFull = tokens.mul(charityFee).div(100);
        }
        if(buyBackFee != 0){
            buyBackFeeFull = tokens.mul(buyBackFee).div(100);
        }

        uint256 tokensAfterFee = tokens - marketFeeFull - charityFeeFull - buyBackFeeFull;
        // split the contract balance into halves
        uint256 initHalf = tokens.div(2);
        uint256 half = tokensAfterFee.div(2);
        uint256 otherHalf = tokensAfterFee.sub(half);

        // capture the contract's current ETH balance.
        // this is so that we can capture exactly the amount of ETH that the
        // swap creates, and not make the liquidity event include any ETH that
        // has been manually sent to the contract
        uint256 initialBalance = address(this).balance;

        // swap tokens for ETH
        swapTokensForEth(initHalf); // <- this breaks the ETH -> HATE swap when swap+liquify is triggered
        // how much ETH did we just swap into?
        uint256 newBalance = address(this).balance.sub(initialBalance);

        uint256 marketFeeBalance;
        uint256 charityFeeBalance;
        uint256 buyBackFeeBalance;

        if(marketFee != 0){
            marketFeeBalance = newBalance.mul(marketFee).div(100);
        }
        if(charityFee != 0){
            charityFeeBalance = newBalance.mul(charityFee).div(100);
        }
        if(buyBackFee != 0){
            buyBackFeeBalance = newBalance.mul(buyBackFee).div(100);
        }
        
        uint256 finalBalance = newBalance - marketFeeBalance - charityFeeBalance - buyBackFeeBalance;
        uint256 finalHalf = otherHalf;

        if(marketFeeBalance != 0){
        if(marketTokenAddressForFee != address(0)){
            swapEthForTokens(marketFeeBalance, marketTokenAddressForFee, marketAddress);
        }else{
            (bool sent,) = marketAddress.call{value: marketFeeBalance}("");
        }}

        if(charityFeeBalance != 0){        
        if(charityTokenAddressForFee != address(0)){
            swapEthForTokens(charityFeeBalance, charityTokenAddressForFee, charityAddress);
        }else{
            (bool sent,) = charityAddress.call{value: charityFeeBalance}("");
        }}
        
        if(buyBackFeeBalance != 0){        
        if(isBuyBackActive){
            swapEthForTokens(buyBackFeeBalance, address(this), buyBackAddress);
        }else{
            (bool sent,) = buyBackAddress.call{value: buyBackFeeBalance}("");
        }}

        // add liquidity to uniswap
        addLiquidity(finalHalf, finalBalance);
        emit SwapAndLiquify(half, finalBalance, otherHalf);
    }
    // modified to support BNB dividend
    function swapAndSendDividends(uint256 tokens) private {
        address payable diviTracker = address(dividendTracker);
        bool success = false;
        uint256 dividends;
        if(DividendToken != address(0)){
            swapTokensForTokens(tokens, address(this));
            dividends = IERC20(DividendToken).balanceOf(address(this));
            success = IERC20(DividendToken).transfer(address(dividendTracker), dividends);
        }else{
            uint256 initialBalance = address(this).balance;
            swapTokensForEth(tokens);
            uint256 newBalance = address(this).balance.sub(initialBalance);
            dividends = newBalance;
            (bool sent,) = diviTracker.call{value: newBalance}("");
            success = sent;
        }
        if (success) {
            dividendTracker.distributeTokenDividends(dividends);
            emit SendDividends(tokens, dividends);
        }
    } 
    function swapEthForTokens(uint256 ethAmount, address tokenAddress, address receiver) private {
        // generate the uniswap pair path of weth -> token
        address[] memory path = new address[](2);
        path[0] = uniswapV2Router.WETH();
        path[1] = tokenAddress;

        // make the swap
        uniswapV2Router.swapExactETHForTokensSupportingFeeOnTransferTokens{value: ethAmount}(
            0, // accept any amount of ETH
            path,
            receiver,
            block.timestamp
        );
    }
    function swapTokensForEth(uint256 tokenAmount) private {    
        // generate the uniswap pair path of token -> weth
        address[] memory path = new address[](2);
        path[0] = address(this);
        path[1] = uniswapV2Router.WETH();

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

        // make the swap
        uniswapV2Router.swapExactTokensForETHSupportingFeeOnTransferTokens(
            tokenAmount,
            0, // accept any amount of ETH
            path,
            address(this),
            block.timestamp
        );
        
    }
    function swapTokensForTokens(uint256 tokenAmount, address recipient) private {
       
        // generate the uniswap pair path of weth -> busd
        address[] memory path = new address[](3);
        path[0] = address(this);
        path[1] = uniswapV2Router.WETH();
        path[2] = DividendToken;

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

        // make the swap
        uniswapV2Router.swapExactTokensForTokensSupportingFeeOnTransferTokens(
            tokenAmount,
            0, // accept any amount of BUSD
            path,
            recipient,
            block.timestamp
        );
        
    }
    function addLiquidity(uint256 tokenAmount, uint256 ethAmount) internal {
        
        // approve token transfer to cover all possible scenarios
        _approve(address(this), address(uniswapV2Router), tokenAmount);

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

    function _transfer(
        address from,
        address to,
        uint256 amount
    ) internal override {
        require(!_isBlacklisted[from], "Blacklisted address cannot transfer!");
        require(!_isBlacklisted[to], "Blacklisted address cannot transfer!");
        require(from != address(0), "ERC20: transfer to the zero address");
        require(to != address(0), "ERC20: transfer to the zero address");
        if(amount == 0) {
            super._transfer(from, to, 0);
            return;
        }

        bool buyOrSell = false;
        if (
            from != owner() &&
            to != address(0) &&
            to != address(0xdead) &&
            automatedMarketMakerPairs[from]
        ) {
            if(!_isExcludedFromLimits[from]){
            require(
                amount <= maxBuyTransactionAmount,
                "Transfer amount exceeds the maxTxAmount."
            );
            }

            previousMarketFee = marketFee;
            previousCharityFee = charityFee;
            previousBuyBackFee = buyBackFee;
            previousTokenRewardsFee = tokenRewardsFee;
            previousLiquidityFee = liquidityFee;
            previousBurnFee = liquidityFee;
            previousTotalFees = totalFees;
            marketFee = buyMarketFee;
            charityFee = buyCharityFee;
            buyBackFee = buyBuyBackFee;
            tokenRewardsFee = buyTokenRewardsFee;
            liquidityFee = buyLiquidityFee;
            burnFee = buyBurnFee;
            totalFees = buyTotalFees;
            buyOrSell = true;
        }
        
        bool tradingIsEnabled = getTradingIsEnabled();
        
        if(!tradingIsEnabled) {
            require(canTransferBeforeTradingIsEnabled[from], " AFU: This account cannot send tokens until trading is enabled");
        }

        if( 
            from != owner() &&
            !swapping &&
            tradingIsEnabled &&
            automatedMarketMakerPairs[to] && // sells only by detecting transfer to automated market maker pair
            from != address(uniswapV2Router) && //router -> pair is removing liquidity which shouldn't have max
            !_isExcludedFromFees[to] //no max for those excluded from fees
        ) {

            // sets reset
            if(firstsell[from] + sellLimitTime < block.timestamp){
                sellnumber[from] = 0;
            }

            if(!_isExcludedFromLimits[from]){
                require(amount + sellnumber[from] <= maxSellTransactionAmount, "Sell transfer amount exceeds the maxSellAmount for the given time.");
                //require(sellcooldown[from] < block.timestamp, "Wait for sell cooldown!");
            }
            // increment existing amount or restart
            if (sellnumber[from] > 0) {
                sellnumber[from] += amount;
            }else{
                firstsell[from] = block.timestamp;
                //sellcooldown[from] = block.timestamp + sellLimitTime;
                sellnumber[from] += amount;
            }
            //
            previousMarketFee = marketFee;
            previousCharityFee = charityFee;
            previousBuyBackFee = buyBackFee;
            previousTokenRewardsFee = tokenRewardsFee;
            previousLiquidityFee = liquidityFee;
            previousBurnFee = burnFee;
            previousTotalFees = totalFees;
            marketFee = sellMarketFee;
            charityFee = sellCharityFee;
            buyBackFee = sellBuyBackFee;
            tokenRewardsFee = sellTokenRewardsFee;
            liquidityFee = sellLiquidityFee;
            burnFee = sellBurnFee;
            totalFees = sellTotalFees;
            buyOrSell = true;
            
        }

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

        if(
            tradingIsEnabled && 
            canSwap &&
            !swapping &&
            !automatedMarketMakerPairs[from] &&
            from != burnAddress &&
            to != burnAddress
        ) {
            swapping = true;
            // added to sell this amount set instead of just trigger
            //contractTokenBalance = swapTokensAtAmount;
            //uint256 swapTokens = contractTokenBalance.mul(liquidityFee).div(totalFees);
            swapAndLiquify(swapTokensAtAmount);

            uint256 sellTokens = balanceOf(address(this));
            swapAndSendDividends(sellTokens);

            swapping = false;
        }


        bool takeFee = tradingIsEnabled && !swapping;

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

        if(takeFee || buyOrSell ) {
            if(_isExcludedFromFees[from] || _isExcludedFromFees[to]){
             // exclude fees from those excluded from fees in case of buy or sell
            }else{
            uint256 calcFee = totalFees.sub(burnFee);
            uint256 feeAmount = amount.mul(calcFee).div(100);
            uint burnAmount = amount.mul(burnFee).div(100);
            amount = amount.sub(feeAmount).sub(burnAmount);
            super._transfer(from, address(this), feeAmount);
            super._transfer(from, burnAddress, burnAmount);
            }
        }else{
            if(_isExcludedFromFees[from] || _isExcludedFromFees[to]){
             // exclude burn from those excluded from fees
            }else{
            uint burnAmount = amount.mul(burnFee).div(100);
            amount = amount.sub(burnAmount);
            super._transfer(from, burnAddress, burnAmount);
            }
        }
        

        super._transfer(from, to, amount);


        restoreFees();
        

        try dividendTracker.setBalance(payable(from), balanceOf(from)) {} catch {}
        try dividendTracker.setBalance(payable(to), balanceOf(to)) {} catch {}

        bool canDividend = block.timestamp >= processDividendTime;

        if(!swapping && canDividend) {
            uint256 gas = gasForProcessing;
            processDividendTime += dividendTime;
            try dividendTracker.process(gas) returns (uint256 iterations, uint256 claims, uint256 lastProcessedIndex) {
                emit ProcessedDividendTracker(iterations, claims, lastProcessedIndex, true, gas, tx.origin);
            }
            catch {

            }
        }
    }
    
}

contract  AFUDividendTracker is DividendPayingToken, Ownable {
    using SafeMath for uint256;
    using SafeMathInt for int256;
    using IterableMapping for IterableMapping.Map;

    IterableMapping.Map private tokenHoldersMap;
    uint256 public lastProcessedIndex;

    mapping (address => bool) public excludedFromDividends;

    mapping (address => uint256) public lastClaimTimes;

    uint256 public claimWait;
    uint256 public minimumTokenBalanceForDividends;

    event ExcludeFromDividends(address indexed account);
    event ClaimWaitUpdated(uint256 indexed newValue, uint256 indexed oldValue);

    event Claim(address indexed account, uint256 amount, bool indexed automatic);

    constructor() public DividendPayingToken(" AFU_Dividend_Tracker", " AFU_Dividend_Tracker") {
        claimWait = 3600;
        minimumTokenBalanceForDividends = 1 * (10**18);
    }

    function updateMinimumBalanceForDividends(uint256 newAmountNoDecimials) external onlyOwner{
        minimumTokenBalanceForDividends = newAmountNoDecimials * (10**18);
    }

    function updateTokenForDividend(address newAddress) external onlyOwner {
        DividendToken = newAddress;
    }  
    function _transfer(address, address, uint256) internal override {
        require(false, " AFU_Dividend_Tracker: No transfers allowed");
    }

    function withdrawDividend() public override {
        require(false, " AFU_Dividend_Tracker: withdrawDividend disabled. Use the 'claim' function on the main  AFU contract.");
    }

    function excludeFromDividends(address account) external onlyOwner {
        //require(!excludedFromDividends[account]);
        excludedFromDividends[account] = true;

        _setBalance(account, 0);
        tokenHoldersMap.remove(account);

        //emit ExcludeFromDividends(account);
    }    

    function enableDividends(address account) external onlyOwner {
        //require(!excludedFromDividends[account]);
        excludedFromDividends[account] = false;
        //emit ExcludeFromDividends(account);
    }

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

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

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


    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.keys.length > lastProcessedIndex ?
                                                        tokenHoldersMap.keys.length.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 getAccountAtIndex(uint256 index)
        public view returns (
            address,
            int256,
            int256,
            uint256,
            uint256,
            uint256,
            uint256,
            uint256) {
        if(index >= tokenHoldersMap.size()) {
            return (0x0000000000000000000000000000000000000000, -1, -1, 0, 0, 0, 0, 0);
        }

        address account = tokenHoldersMap.getKeyAtIndex(index);

        return getAccount(account);
    }

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

        return block.timestamp.sub(lastClaimTime) >= claimWait;
    }

    function setBalance(address payable account, uint256 newBalance) external onlyOwner {
        if(excludedFromDividends[account]) {
            return;
        }

        if(newBalance >= minimumTokenBalanceForDividends) {
            _setBalance(account, newBalance);
            tokenHoldersMap.set(account, newBalance);
        }
        else {
            _setBalance(account, 0);
            tokenHoldersMap.remove(account);
        }

        processAccount(account, true);
    }

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

        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.keys.length) {
                _lastProcessedIndex = 0;
            }

            address account = tokenHoldersMap.keys[_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 processAccount(address payable account, bool automatic) public onlyOwner returns (bool) {
        uint256 amount = _withdrawDividendOfUser(account);

        if(amount > 0) {
            lastClaimTimes[account] = block.timestamp;
            emit Claim(account, amount, automatic);
            return true;
        }

        return false;
    }
    
}

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":"newBurnWallet","type":"address"},{"indexed":true,"internalType":"address","name":"oldBurnWallet","type":"address"}],"name":"BurnWalletUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"bool","name":"isExcluded","type":"bool"}],"name":"ExcludeFromFees","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address[]","name":"accounts","type":"address[]"},{"indexed":false,"internalType":"bool","name":"isExcluded","type":"bool"}],"name":"ExcludeMultipleAccountsFromFees","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"bool","name":"isExcluded","type":"bool"}],"name":"ExcludedMaxSellTransactionAmount","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"newValue","type":"uint256"},{"indexed":true,"internalType":"uint256","name":"oldValue","type":"uint256"}],"name":"GasForProcessingUpdated","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":"tokensSwapped","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"SendDividends","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pair","type":"address"},{"indexed":true,"internalType":"bool","name":"value","type":"bool"}],"name":"SetAutomatedMarketMakerPair","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"tokensSwapped","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"ethReceived","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"tokensIntoLiqudity","type":"uint256"}],"name":"SwapAndLiquify","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"newAddress","type":"address"},{"indexed":true,"internalType":"address","name":"oldAddress","type":"address"}],"name":"UpdateDividendToken","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"newAddress","type":"address"},{"indexed":true,"internalType":"address","name":"oldAddress","type":"address"}],"name":"UpdateDividendTracker","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"newAddress","type":"address"},{"indexed":true,"internalType":"address","name":"oldAddress","type":"address"}],"name":"UpdateUniswapV2Router","type":"event"},{"inputs":[],"name":"DividendToken","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_maxWalletToken","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"automatedMarketMakerPairs","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"excluded","type":"bool"}],"name":"blacklistAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"burnAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"burnFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"amountNoDecimals","type":"uint256"}],"name":"burnTokens","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"buyBackAddress","outputs":[{"internalType":"address payable","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyBackFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyBackTokenAddressForFee","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyBurnFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyBuyBackFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyCharityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyLiquidityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyMarketFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyTokenRewardsFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyTotalFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"buycooldown","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"charityAddress","outputs":[{"internalType":"address payable","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"charityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"charityTokenAddressForFee","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"claim","outputs":[],"stateMutability":"nonpayable","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":"dividendTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"dividendTokenBalanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"dividendTracker","outputs":[{"internalType":"contract AFUDividendTracker","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"enableDividends","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"excludeFromDividends","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"excluded","type":"bool"}],"name":"excludeFromFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"excluded","type":"bool"}],"name":"excludeFromLimits","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"accounts","type":"address[]"},{"internalType":"bool","name":"excluded","type":"bool"}],"name":"excludeMultipleAccountsFromFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"accounts","type":"address[]"},{"internalType":"bool","name":"excluded","type":"bool"}],"name":"excludeMultipleAccountsFromLimits","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"firstsell","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"gasForProcessing","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"getAccountDividendsInfo","outputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"int256","name":"","type":"int256"},{"internalType":"int256","name":"","type":"int256"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"index","type":"uint256"}],"name":"getAccountDividendsInfoAtIndex","outputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"int256","name":"","type":"int256"},{"internalType":"int256","name":"","type":"int256"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getClaimWait","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getLastProcessedIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getNumberOfDividendTokenHolders","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getTotalDividendsDistributed","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getTradingIsEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"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":[],"name":"isBuyBackActive","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromFees","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromLimits","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"isTransferFeesDisabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"liquidityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"marketAddress","outputs":[{"internalType":"address payable","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"marketFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"marketTokenAddressForFee","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxBuyTransactionAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxSellTransactionAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"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":"presaleAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"processDividendTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"gas","type":"uint256"}],"name":"processDividendTracker","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"sellBurnFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellBuyBackFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellCharityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellLimitTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellLiquidityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellMarketFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellTokenRewardsFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellTotalFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"sellcooldown","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"sellnumber","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pair","type":"address"},{"internalType":"bool","name":"value","type":"bool"}],"name":"setAutomatedMarketMakerPair","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_tokens","type":"uint256"}],"name":"swapAndLiquifyOwner","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_tokens","type":"uint256"}],"name":"swapAndSendDividendsOwner","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapTokensAtAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokenRewardsFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tradingEnabledTimestamp","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"uniswapV2Pair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"uniswapV2Router","outputs":[{"internalType":"contract IUniswapV2Router02","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address payable","name":"newAddress","type":"address"}],"name":"updateBuyBackAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_isBuyBackActive","type":"bool"}],"name":"updateBuyBackMode","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newAddress","type":"address"}],"name":"updateBuyBackTokenFeeAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_tokenRewardsFee","type":"uint256"},{"internalType":"uint256","name":"_liquidityFee","type":"uint256"},{"internalType":"uint256","name":"_marketFee","type":"uint256"},{"internalType":"uint256","name":"_charityFee","type":"uint256"},{"internalType":"uint256","name":"_buyBackFee","type":"uint256"},{"internalType":"uint256","name":"_burnFee","type":"uint256"}],"name":"updateBuyFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address payable","name":"newAddress","type":"address"}],"name":"updateCharityAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newAddress","type":"address"}],"name":"updateCharityTokenFeeAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"claimWait","type":"uint256"}],"name":"updateClaimWait","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newAddress","type":"address"}],"name":"updateDividendTracker","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_tokenRewardsFee","type":"uint256"},{"internalType":"uint256","name":"_liquidityFee","type":"uint256"},{"internalType":"uint256","name":"_marketFee","type":"uint256"},{"internalType":"uint256","name":"_charityFee","type":"uint256"},{"internalType":"uint256","name":"_buyBackFee","type":"uint256"},{"internalType":"uint256","name":"_burnFee","type":"uint256"}],"name":"updateFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newValue","type":"uint256"}],"name":"updateGasForProcessing","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address payable","name":"newAddress","type":"address"}],"name":"updateMarketAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newAddress","type":"address"}],"name":"updateMarketTokenFeeAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_newAmountNoDecimals","type":"uint256"}],"name":"updateMaxBuyTx","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_newAmountNoDecimals","type":"uint256"}],"name":"updateMaxSellTx","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newAmountNoDecimials","type":"uint256"}],"name":"updateMaxWalletAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newAmountNoDecimials","type":"uint256"}],"name":"updateMinimumBalanceForDividends","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_tokenRewardsFee","type":"uint256"},{"internalType":"uint256","name":"_liquidityFee","type":"uint256"},{"internalType":"uint256","name":"_marketFee","type":"uint256"},{"internalType":"uint256","name":"_charityFee","type":"uint256"},{"internalType":"uint256","name":"_buyBackFee","type":"uint256"},{"internalType":"uint256","name":"_burnFee","type":"uint256"}],"name":"updateSellFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_newTime","type":"uint256"}],"name":"updateSellLimitTime","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newAmountNoDecimials","type":"uint256"}],"name":"updateSwapAtAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newAddress","type":"address"}],"name":"updateTokenForDividend","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newTimeInEpoch","type":"uint256"}],"name":"updateTradingEnabledTime","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newAddress","type":"address"}],"name":"updateUniswapV2Router","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_dividendTime","type":"uint256"}],"name":"updatedividendTime","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_isTransferDisabled","type":"bool"}],"name":"updateisTransferDisabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_presaleAddress","type":"address"},{"internalType":"address","name":"_routerAddress","type":"address"}],"name":"whitelistDxSale","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"withdrawableDividendOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"stateMutability":"payable","type":"receive"}]

60a0604052600780546001600160a01b03191690556b024306c4097859c43c000000600a819055600b819055600c819055600d5562015180600e5560006019819055601a819055601b819055601c819055601d819055601e81905562000091906200007d818181818181818062000755602090811b62003df717901c565b6200075560201b62003df71790919060201c565b601f55600060205560006021556000602255600060235560006024556000602555620000ec6025546200007d6022546200007d6021546200007d6020546200007d6024546023546200075560201b62003df71790919060201c565b6026556000602755600060285560006029556000602a556000602b556000602c5562000147602c546200007d6029546200007d6028546200007d6027546200007d602b54602a546200075560201b62003df71790919060201c565b602d55601954602e55601a54602f55601b54603055601c54603155601d54603255601e54603355601f54603455610e106036556037805461ffff19169055620493e0603855603980546001600160a01b03191690556360f0e1a2603a55348015620001b157600080fd5b50604080518082018252601581527f416e696d616c20467269656e647320556e6974656400000000000000000000006020808301918252835180850190945260048452632041465560e01b908401528151919291620002139160039162000ac3565b5080516200022990600490602084019062000ac3565b50506005805460ff1916601217905550600062000245620007b7565b60058054610100600160a81b0319166101006001600160a01b03841690810291909117909155604051919250906000907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a350600980546001600160a01b03191661dead179055426035819055604051620002c39062000b58565b604051809103906000f080158015620002e0573d6000803e3d6000fd5b50600860006101000a8154816001600160a01b0302191690836001600160a01b0316021790555060007310ed43c718714eb63d5aa57b78b54704e256024e90506000816001600160a01b031663c45a01556040518163ffffffff1660e01b815260040160206040518083038186803b1580156200035c57600080fd5b505afa15801562000371573d6000803e3d6000fd5b505050506040513d60208110156200038857600080fd5b5051604080516315ab88c960e31b815290516001600160a01b039283169263c9c653969230929187169163ad5c464891600480820192602092909190829003018186803b158015620003d957600080fd5b505afa158015620003ee573d6000803e3d6000fd5b505050506040513d60208110156200040557600080fd5b5051604080516001600160e01b031960e086901b1681526001600160a01b0393841660048201529290911660248301525160448083019260209291908290030181600087803b1580156200045857600080fd5b505af11580156200046d573d6000803e3d6000fd5b505050506040513d60208110156200048457600080fd5b5051600680546001600160a01b0319166001600160a01b038516179055606081901b6001600160601b0319166080529050620004c2816001620007bb565b6008546040805163031e79db60e41b81526001600160a01b0390921660048301819052905190916331e79db091602480830192600092919082900301818387803b1580156200051057600080fd5b505af115801562000525573d6000803e3d6000fd5b50506008546040805163031e79db60e41b815230600482015290516001600160a01b0390921693506331e79db0925060248082019260009290919082900301818387803b1580156200057657600080fd5b505af11580156200058b573d6000803e3d6000fd5b50506008546040805163031e79db60e41b81526001600160a01b03878116600483015291519190921693506331e79db09250602480830192600092919082900301818387803b158015620005de57600080fd5b505af1158015620005f3573d6000803e3d6000fd5b50506008546001600160a01b031691506331e79db0905062000614620008ee565b6040518263ffffffff1660e01b815260040180826001600160a01b03168152602001915050600060405180830381600087803b1580156200065457600080fd5b505af115801562000669573d6000803e3d6000fd5b5050603d60208190526001600160a01b0385166000908152909250905062000690620008ee565b6001600160a01b039081168252602091820192909252828216600052603d9052600954620006c19116600162000902565b620006ce30600162000902565b620006e4620006dc620008ee565b600162000902565b6001603e6000620006f4620008ee565b6001600160a01b031681526020810191909152604001600020805460ff19169115159190911790556200074c6200072a620008ee565b62000734620009a6565b60ff16600a0a6329b9270002620009af60201b60201c565b50505062000b7d565b600082820183811015620007b0576040805162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b9392505050565b3390565b6001600160a01b0382166000908152603f602052604090205460ff16151581151514156200081b5760405162461bcd60e51b815260040180806020018281038252603e815260200180620091d0603e913960400191505060405180910390fd5b6001600160a01b0382166000908152603f60205260409020805460ff19168215801591909117909155620008b2576008546040805163031e79db60e41b81526001600160a01b038581166004830152915191909216916331e79db091602480830192600092919082900301818387803b1580156200089857600080fd5b505af1158015620008ad573d6000803e3d6000fd5b505050505b604051811515906001600160a01b038416907fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab90600090a35050565b60055461010090046001600160a01b031690565b6200090c620007b7565b6001600160a01b03166200091f620008ee565b6001600160a01b0316146200097b576040805162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b6001600160a01b03919091166000908152603c60205260409020805460ff1916911515919091179055565b60055460ff1690565b6001600160a01b03821662000a0b576040805162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f206164647265737300604482015290519081900360640190fd5b62000a196000838362000abe565b62000a35816002546200075560201b62003df71790919060201c565b6002556001600160a01b0382166000908152602081815260409091205462000a6891839062003df762000755821b17901c565b6001600160a01b0383166000818152602081815260408083209490945583518581529351929391927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9281900390910190a35050565b505050565b828054600181600116156101000203166002900490600052602060002090601f01602090048101928262000afb576000855562000b46565b82601f1062000b1657805160ff191683800117855562000b46565b8280016001018555821562000b46579182015b8281111562000b4657825182559160200191906001019062000b29565b5062000b5492915062000b66565b5090565b61293d806200689383390190565b5b8082111562000b54576000815560010162000b67565b60805160601c615cf362000ba060003980612093528061303e5250615cf36000f3fe6080604052600436106106d75760003560e01c80637a41865b1161037a578063c0a904a2116101d1578063e708a0f911610102578063f11a24d3116100a0578063f63743421161007a578063f6374342146117d9578063f7822e09146117ee578063fa280d4414611818578063fce589d814611842576106de565b8063f11a24d314611767578063f27fd2541461177c578063f2fde38b146117a6576106de565b8063e7841ec0116100dc578063e7841ec0146116e9578063e98030c7146116fe578063e9d3d61e14611728578063ecfca89914611752576106de565b8063e708a0f9146116aa578063e71dc3f5146116bf578063e76ed0e3146116d4576106de565b8063d4d90c251161016f578063dd62ed3e11610149578063dd62ed3e14611619578063e2f4560514611654578063e371f7cf14611669578063e4a1b95f14611695576106de565b8063d4d90c25146115bc578063d644c365146115d1578063d85ba06314611604576106de565b8063c55d2287116101ab578063c55d2287146114cb578063c6e5a5ab146114f5578063c9fa039614611574578063d2630cc314611589576106de565b8063c0a904a2146113e7578063c18bc19514611422578063c492f0461461144c576106de565b80639a7a23d6116102ab578063a9059cbb11610249578063ae5a17a711610223578063ae5a17a714611331578063afcf2fc414611364578063b62496f514611379578063c0246668146113ac576106de565b8063a9059cbb14611265578063ad56c13c1461129e578063adb873bd1461131c576106de565b8063a26579ad11610285578063a26579ad146111b1578063a457c2d7146111c6578063a5afbcb8146111ff578063a8b9d24014611232576106de565b80639a7a23d61461114c5780639c1b8af514611187578063a1dc92bc1461119c576106de565b806394305f4e11610318578063974d628c116102f2578063974d628c146110a757806398118cb4146110bc57806398eac156146110d1578063992c58e414611104576106de565b806394305f4e14611068578063956236411461107d57806395d89b4114611092576106de565b806388bdd9be1161035457806388bdd9be14610fc35780638ae1cf2214610ff65780638da5cb5b146110295780638f7142601461103e576106de565b80637a41865b14610f3357806381dcc26614610f66578063871c128d14610f99576106de565b80633d0c89631161052e5780635cce86cd1161045f578063700bb191116103fd578063715018a6116103d7578063715018a614610eac57806378109e5414610ec1578063783478ad14610ed657806379e02b4414610eeb576106de565b8063700bb19114610e3a57806370a0823114610e6457806370d5ae0514610e97576106de565b806365b8dbc01161043957806365b8dbc014610d955780636843cd8414610dc85780636a486a8e14610dfb5780636d1b229d14610e10576106de565b80635cce86cd14610d23578063616c594614610d5657806364b0f65314610d80576106de565b80634be8f8b1116104cc5780634e83ff6f116104a65780634e83ff6f14610c745780634fbee19314610caf57806354503bf714610ce25780635aa821a914610d0e576106de565b80634be8f8b114610c355780634d33b1ef14610c4a5780634e71d92d14610c5f576106de565b8063425b682e11610508578063425b682e14610bbb578063455a439614610bd0578063486b6d8614610c0b57806349bd5a5e14610c20576106de565b80633d0c896314610b2b5780633fe9092214610b5e578063407e378714610b91576106de565b80631fe70a981161060857806330bb4cff116105a657806335b5fb631161058057806335b5fb6314610a9e57806338b7692314610ab35780633950935114610ac85780633b364da814610b01576106de565b806330bb4cff14610a2b578063313ce56714610a4057806331e79db014610a6b576106de565b8063255e9d0a116105e2578063255e9d0a146109c257806325b61703146109d757806325e47531146109ec5780632c1f521614610a16576106de565b80631fe70a981461092057806322d3e2aa1461093557806323b872dd1461097f576106de565b8063122fe685116106755780631694505e1161064f5780631694505e146108ae57806318160ddd146108c35780631a221dbb146108d85780631bc8b18f146108ed576106de565b8063122fe685146108355780631283f1ca1461086657806313114a9d14610899576106de565b806308b2a12c116106b157806308b2a12c146107a9578063095ea7b3146107be5780630ccf21561461080b5780630d7f144114610820576106de565b806302259e9e146106e357806302df64d61461070a57806306fdde031461071f576106de565b366106de57005b600080fd5b3480156106ef57600080fd5b506106f8611857565b60408051918252519081900360200190f35b34801561071657600080fd5b506106f861185d565b34801561072b57600080fd5b50610734611863565b6040805160208082528351818301528351919283929083019185019080838360005b8381101561076e578181015183820152602001610756565b50505050905090810190601f16801561079b5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b3480156107b557600080fd5b506106f86118f9565b3480156107ca57600080fd5b506107f7600480360360408110156107e157600080fd5b506001600160a01b0381351690602001356118ff565b604080519115158252519081900360200190f35b34801561081757600080fd5b506106f861191d565b34801561082c57600080fd5b506106f8611923565b34801561084157600080fd5b5061084a611929565b604080516001600160a01b039092168252519081900360200190f35b34801561087257600080fd5b506106f86004803603602081101561088957600080fd5b50356001600160a01b0316611938565b3480156108a557600080fd5b506106f861194a565b3480156108ba57600080fd5b5061084a611950565b3480156108cf57600080fd5b506106f861195f565b3480156108e457600080fd5b506106f8611965565b3480156108f957600080fd5b506106f86004803603602081101561091057600080fd5b50356001600160a01b031661196b565b34801561092c57600080fd5b506106f861197d565b34801561094157600080fd5b5061097d600480360360c081101561095857600080fd5b5080359060208101359060408101359060608101359060808101359060a00135611983565b005b34801561098b57600080fd5b506107f7600480360360608110156109a257600080fd5b506001600160a01b03813581169160208101359091169060400135611a28565b3480156109ce57600080fd5b506106f8611aaf565b3480156109e357600080fd5b506106f8611ab5565b3480156109f857600080fd5b5061097d60048036036020811015610a0f57600080fd5b5035611abb565b348015610a2257600080fd5b5061084a611b22565b348015610a3757600080fd5b506106f8611b31565b348015610a4c57600080fd5b50610a55611ba7565b6040805160ff9092168252519081900360200190f35b348015610a7757600080fd5b5061097d60048036036020811015610a8e57600080fd5b50356001600160a01b0316611bb0565b348015610aaa57600080fd5b506106f8611c7b565b348015610abf57600080fd5b5061084a611c81565b348015610ad457600080fd5b506107f760048036036040811015610aeb57600080fd5b506001600160a01b038135169060200135611c90565b348015610b0d57600080fd5b5061097d60048036036020811015610b2457600080fd5b5035611cde565b348015610b3757600080fd5b5061097d60048036036020811015610b4e57600080fd5b50356001600160a01b0316611d8d565b348015610b6a57600080fd5b5061097d60048036036020811015610b8157600080fd5b50356001600160a01b0316611ea5565b348015610b9d57600080fd5b5061097d60048036036020811015610bb457600080fd5b5035611f29565b348015610bc757600080fd5b506107f7611f97565b348015610bdc57600080fd5b5061097d60048036036040811015610bf357600080fd5b506001600160a01b0381351690602001351515611fa0565b348015610c1757600080fd5b506107f7612083565b348015610c2c57600080fd5b5061084a612091565b348015610c4157600080fd5b506106f86120b5565b348015610c5657600080fd5b506107f76120bb565b348015610c6b57600080fd5b5061097d6120c4565b348015610c8057600080fd5b5061097d60048036036040811015610c9757600080fd5b506001600160a01b0381358116916020013516612149565b348015610cbb57600080fd5b506107f760048036036020811015610cd257600080fd5b50356001600160a01b03166122d1565b348015610cee57600080fd5b5061097d60048036036020811015610d0557600080fd5b503515156122ef565b348015610d1a57600080fd5b506106f8612364565b348015610d2f57600080fd5b506107f760048036036020811015610d4657600080fd5b50356001600160a01b031661236a565b348015610d6257600080fd5b5061097d60048036036020811015610d7957600080fd5b5035612388565b348015610d8c57600080fd5b506106f86123ef565b348015610da157600080fd5b5061097d60048036036020811015610db857600080fd5b50356001600160a01b0316612434565b348015610dd457600080fd5b506106f860048036036020811015610deb57600080fd5b50356001600160a01b0316612540565b348015610e0757600080fd5b506106f86125c3565b348015610e1c57600080fd5b5061097d60048036036020811015610e3357600080fd5b50356125c9565b348015610e4657600080fd5b5061097d60048036036020811015610e5d57600080fd5b503561265a565b348015610e7057600080fd5b506106f860048036036020811015610e8757600080fd5b50356001600160a01b0316612741565b348015610ea357600080fd5b5061084a61275c565b348015610eb857600080fd5b5061097d61276b565b348015610ecd57600080fd5b506106f861281d565b348015610ee257600080fd5b5061084a612823565b348015610ef757600080fd5b5061097d600480360360c0811015610f0e57600080fd5b5080359060208101359060408101359060608101359060808101359060a00135612832565b348015610f3f57600080fd5b506106f860048036036020811015610f5657600080fd5b50356001600160a01b03166128d1565b348015610f7257600080fd5b506106f860048036036020811015610f8957600080fd5b50356001600160a01b03166128e3565b348015610fa557600080fd5b5061097d60048036036020811015610fbc57600080fd5b50356128f5565b348015610fcf57600080fd5b5061097d60048036036020811015610fe657600080fd5b50356001600160a01b0316612a1c565b34801561100257600080fd5b5061097d6004803603602081101561101957600080fd5b50356001600160a01b0316612d0f565b34801561103557600080fd5b5061084a612dab565b34801561104a57600080fd5b5061097d6004803603602081101561106157600080fd5b5035612dbf565b34801561107457600080fd5b506106f8612e35565b34801561108957600080fd5b5061084a612e3b565b34801561109e57600080fd5b50610734612e4a565b3480156110b357600080fd5b506106f8612eab565b3480156110c857600080fd5b506106f8612eb1565b3480156110dd57600080fd5b5061097d600480360360208110156110f457600080fd5b50356001600160a01b0316612eb7565b34801561111057600080fd5b5061097d600480360360c081101561112757600080fd5b5080359060208101359060408101359060608101359060808101359060a00135612f3b565b34801561115857600080fd5b5061097d6004803603604081101561116f57600080fd5b506001600160a01b0381351690602001351515612fda565b34801561119357600080fd5b506106f86130b7565b3480156111a857600080fd5b506106f86130bd565b3480156111bd57600080fd5b506106f86130c3565b3480156111d257600080fd5b506107f7600480360360408110156111e957600080fd5b506001600160a01b038135169060200135613108565b34801561120b57600080fd5b5061097d6004803603602081101561122257600080fd5b50356001600160a01b0316613170565b34801561123e57600080fd5b506106f86004803603602081101561125557600080fd5b50356001600160a01b031661320c565b34801561127157600080fd5b506107f76004803603604081101561128857600080fd5b506001600160a01b03813516906020013561325d565b3480156112aa57600080fd5b506112d1600480360360208110156112c157600080fd5b50356001600160a01b0316613271565b604080516001600160a01b0390991689526020890197909752878701959095526060870193909352608086019190915260a085015260c084015260e083015251908190036101000190f35b34801561132857600080fd5b506106f8613351565b34801561133d57600080fd5b5061097d6004803603602081101561135457600080fd5b50356001600160a01b0316613357565b34801561137057600080fd5b5061084a6133f3565b34801561138557600080fd5b506107f76004803603602081101561139c57600080fd5b50356001600160a01b0316613402565b3480156113b857600080fd5b5061097d600480360360408110156113cf57600080fd5b506001600160a01b0381351690602001351515613417565b3480156113f357600080fd5b5061097d6004803603604081101561140a57600080fd5b506001600160a01b03813516906020013515156134a4565b34801561142e57600080fd5b5061097d6004803603602081101561144557600080fd5b5035613531565b34801561145857600080fd5b5061097d6004803603604081101561146f57600080fd5b81019060208101813564010000000081111561148a57600080fd5b82018360208201111561149c57600080fd5b803590602001918460208302840111640100000000831117156114be57600080fd5b91935091503515156135a7565b3480156114d757600080fd5b5061097d600480360360208110156114ee57600080fd5b50356136d1565b34801561150157600080fd5b5061097d6004803603604081101561151857600080fd5b81019060208101813564010000000081111561153357600080fd5b82018360208201111561154557600080fd5b8035906020019184602083028401116401000000008311171561156757600080fd5b9193509150351515613747565b34801561158057600080fd5b5061084a613804565b34801561159557600080fd5b5061097d600480360360208110156115ac57600080fd5b50356001600160a01b0316613813565b3480156115c857600080fd5b5061084a613897565b3480156115dd57600080fd5b5061097d600480360360208110156115f457600080fd5b50356001600160a01b03166138a6565b34801561161057600080fd5b506106f8613956565b34801561162557600080fd5b506106f86004803603604081101561163c57600080fd5b506001600160a01b038135811691602001351661395c565b34801561166057600080fd5b506106f8613987565b34801561167557600080fd5b5061097d6004803603602081101561168c57600080fd5b5035151561398d565b3480156116a157600080fd5b506106f8613a09565b3480156116b657600080fd5b506106f8613a0f565b3480156116cb57600080fd5b506106f8613a15565b3480156116e057600080fd5b5061084a613a1b565b3480156116f557600080fd5b506106f8613a2a565b34801561170a57600080fd5b5061097d6004803603602081101561172157600080fd5b5035613a6f565b34801561173457600080fd5b5061097d6004803603602081101561174b57600080fd5b5035613b1e565b34801561175e57600080fd5b506106f8613b89565b34801561177357600080fd5b506106f8613b8f565b34801561178857600080fd5b506112d16004803603602081101561179f57600080fd5b5035613b95565b3480156117b257600080fd5b5061097d600480360360208110156117c957600080fd5b50356001600160a01b0316613bfb565b3480156117e557600080fd5b506106f8613d09565b3480156117fa57600080fd5b5061097d6004803603602081101561181157600080fd5b5035613d0f565b34801561182457600080fd5b5061097d6004803603602081101561183b57600080fd5b5035613d76565b34801561184e57600080fd5b506106f8613df1565b600b5481565b60235481565b60038054604080516020601f60026000196101006001881615020190951694909404938401819004810282018101909252828152606093909290918301828280156118ef5780601f106118c4576101008083540402835291602001916118ef565b820191906000526020600020905b8154815290600101906020018083116118d257829003601f168201915b5050505050905090565b602a5481565b600061191361190c613e58565b8484613e5c565b5060015b92915050565b60195481565b60285481565b6039546001600160a01b031681565b600f6020526000908152604090205481565b601f5481565b6006546001600160a01b031681565b60025490565b60295481565b60116020526000908152604090205481565b60225481565b61198b613e58565b6001600160a01b031661199c612dab565b6001600160a01b0316146119e5576040805162461bcd60e51b81526020600482018190526024820152600080516020615b6d833981519152604482015290519081900360640190fd5b602a869055602b859055602784905560288390556029829055602c819055611a1d81611a17848187818a818e8e613df7565b90613df7565b602d55505050505050565b6000611a35848484613f48565b611aa584611a41613e58565b611aa085604051806060016040528060288152602001615b45602891396001600160a01b038a16600090815260016020526040812090611a7f613e58565b6001600160a01b031681526020810191909152604001600020549190614934565b613e5c565b5060019392505050565b60365481565b603a5481565b611ac3613e58565b6001600160a01b0316611ad4612dab565b6001600160a01b031614611b1d576040805162461bcd60e51b81526020600482018190526024820152600080516020615b6d833981519152604482015290519081900360640190fd5b600e55565b6008546001600160a01b031681565b600854604080516342d359d760e11b815290516000926001600160a01b0316916385a6b3ae916004808301926020929190829003018186803b158015611b7657600080fd5b505afa158015611b8a573d6000803e3d6000fd5b505050506040513d6020811015611ba057600080fd5b5051905090565b60055460ff1690565b611bb8613e58565b6001600160a01b0316611bc9612dab565b6001600160a01b031614611c12576040805162461bcd60e51b81526020600482018190526024820152600080516020615b6d833981519152604482015290519081900360640190fd5b6008546040805163031e79db60e41b81526001600160a01b038481166004830152915191909216916331e79db091602480830192600092919082900301818387803b158015611c6057600080fd5b505af1158015611c74573d6000803e3d6000fd5b5050505050565b60275481565b6018546001600160a01b031681565b6000611913611c9d613e58565b84611aa08560016000611cae613e58565b6001600160a01b03908116825260208083019390935260409182016000908120918c168152925290205490613df7565b611ce6613e58565b6001600160a01b0316611cf7612dab565b6001600160a01b031614611d40576040805162461bcd60e51b81526020600482018190526024820152600080516020615b6d833981519152604482015290519081900360640190fd5b60085460408051630766c9b560e31b81526004810184905290516001600160a01b0390921691633b364da89160248082019260009290919082900301818387803b158015611c6057600080fd5b611d95613e58565b6001600160a01b0316611da6612dab565b6001600160a01b031614611def576040805162461bcd60e51b81526020600482018190526024820152600080516020615b6d833981519152604482015290519081900360640190fd5b60085460408051633d0c896360e01b81526001600160a01b03848116600483015291519190921691633d0c896391602480830192600092919082900301818387803b158015611e3d57600080fd5b505af1158015611e51573d6000803e3d6000fd5b5050600780546001600160a01b0319166001600160a01b03858116918217928390556040519216935091507fc50953975bfb7dc05da466bc18236bf737c11097c9cc7ef9d079bc7ed96f03ae90600090a350565b611ead613e58565b6001600160a01b0316611ebe612dab565b6001600160a01b031614611f07576040805162461bcd60e51b81526020600482018190526024820152600080516020615b6d833981519152604482015290519081900360640190fd5b601780546001600160a01b0319166001600160a01b0392909216919091179055565b611f31613e58565b6001600160a01b0316611f42612dab565b6001600160a01b031614611f8b576040805162461bcd60e51b81526020600482018190526024820152600080516020615b6d833981519152604482015290519081900360640190fd5b611f94816149cb565b50565b60375460ff1681565b611fa8613e58565b6001600160a01b0316611fb9612dab565b6001600160a01b031614612002576040805162461bcd60e51b81526020600482018190526024820152600080516020615b6d833981519152604482015290519081900360640190fd5b6001600160a01b038281166000818152603b6020526040808220805460ff1916861515179055600854815163031e79db60e41b8152600481019490945290519316926331e79db092602480820193929182900301818387803b15801561206757600080fd5b505af115801561207b573d6000803e3d6000fd5b505050505050565b603754610100900460ff1681565b7f000000000000000000000000000000000000000000000000000000000000000081565b601b5481565b603a5442101590565b6008546040805163bc4c4b3760e01b815233600482015260006024820181905291516001600160a01b039093169263bc4c4b3792604480840193602093929083900390910190829087803b15801561211b57600080fd5b505af115801561212f573d6000803e3d6000fd5b505050506040513d602081101561214557600080fd5b5050565b612151613e58565b6001600160a01b0316612162612dab565b6001600160a01b0316146121ab576040805162461bcd60e51b81526020600482018190526024820152600080516020615b6d833981519152604482015290519081900360640190fd5b603980546001600160a01b0319166001600160a01b03848116918217928390559182166000908152603e6020526040808220805460ff19166001179055600854815163031e79db60e41b8152600481019490945290519316926331e79db092602480820193929182900301818387803b15801561222757600080fd5b505af115801561223b573d6000803e3d6000fd5b5050505061224a826001613417565b6001600160a01b038082166000818152603e6020526040808220805460ff19166001179055600854815163031e79db60e41b8152600481019490945290519316926331e79db092602480820193929182900301818387803b1580156122ae57600080fd5b505af11580156122c2573d6000803e3d6000fd5b50505050612145816001613417565b6001600160a01b03166000908152603c602052604090205460ff1690565b6122f7613e58565b6001600160a01b0316612308612dab565b6001600160a01b031614612351576040805162461bcd60e51b81526020600482018190526024820152600080516020615b6d833981519152604482015290519081900360640190fd5b6037805460ff1916911515919091179055565b600a5481565b6001600160a01b03166000908152603d602052604090205460ff1690565b612390613e58565b6001600160a01b03166123a1612dab565b6001600160a01b0316146123ea576040805162461bcd60e51b81526020600482018190526024820152600080516020615b6d833981519152604482015290519081900360640190fd5b603a55565b600854604080516304ddf6ef60e11b815290516000926001600160a01b0316916309bbedde916004808301926020929190829003018186803b158015611b7657600080fd5b61243c613e58565b6001600160a01b031661244d612dab565b6001600160a01b031614612496576040805162461bcd60e51b81526020600482018190526024820152600080516020615b6d833981519152604482015290519081900360640190fd5b6006546001600160a01b03828116911614156124e35760405162461bcd60e51b81526004018080602001828103825260298152602001806159156029913960400191505060405180910390fd5b6006546040516001600160a01b03918216918316907f8fc842bbd331dfa973645f4ed48b11683d501ebf1352708d77a5da2ab49a576e90600090a3600680546001600160a01b0319166001600160a01b0392909216919091179055565b600854604080516370a0823160e01b81526001600160a01b038481166004830152915160009392909216916370a0823191602480820192602092909190829003018186803b15801561259157600080fd5b505afa1580156125a5573d6000803e3d6000fd5b505050506040513d60208110156125bb57600080fd5b505192915050565b602d5481565b6125d1613e58565b6001600160a01b03166125e2612dab565b6001600160a01b03161461262b576040805162461bcd60e51b81526020600482018190526024820152600080516020615b6d833981519152604482015290519081900360640190fd5b6000612635611ba7565b60095460ff91909116600a0a830291506121459030906001600160a01b031683614d11565b600854604080516001624d3b8760e01b03198152600481018490529051600092839283926001600160a01b039092169163ffb2c4799160248082019260609290919082900301818787803b1580156126b157600080fd5b505af11580156126c5573d6000803e3d6000fd5b505050506040513d60608110156126db57600080fd5b5080516020808301516040938401518451848152928301829052828501819052606083018990529351929650945091925032916000917fc864333d6121033635ab41b29ae52f10a22cf4438c3e4f1c4c68518feb2f8a989181900360800190a350505050565b6001600160a01b031660009081526020819052604090205490565b6009546001600160a01b031681565b612773613e58565b6001600160a01b0316612784612dab565b6001600160a01b0316146127cd576040805162461bcd60e51b81526020600482018190526024820152600080516020615b6d833981519152604482015290519081900360640190fd5b60055460405160009161010090046001600160a01b0316907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a360058054610100600160a81b0319169055565b600d5481565b6015546001600160a01b031681565b61283a613e58565b6001600160a01b031661284b612dab565b6001600160a01b031614612894576040805162461bcd60e51b81526020600482018190526024820152600080516020615b6d833981519152604482015290519081900360640190fd5b6023869055602485905560208490556021839055602282905560258190556128c681611a17848187818a818e8e613df7565b602655505050505050565b60106020526000908152604090205481565b60126020526000908152604090205481565b6128fd613e58565b6001600160a01b031661290e612dab565b6001600160a01b031614612957576040805162461bcd60e51b81526020600482018190526024820152600080516020615b6d833981519152604482015290519081900360640190fd5b62030d40811015801561296d57506207a1208111155b6129a85760405162461bcd60e51b815260040180806020018281038252603a815260200180615bf0603a913960400191505060405180910390fd5b6038548114156129e95760405162461bcd60e51b8152600401808060200182810382526032815260200180615af26032913960400191505060405180910390fd5b60385460405182907f40d7e40e79af4e8e5a9b3c57030d8ea93f13d669c06d448c4d631d4ae7d23db790600090a3603855565b612a24613e58565b6001600160a01b0316612a35612dab565b6001600160a01b031614612a7e576040805162461bcd60e51b81526020600482018190526024820152600080516020615b6d833981519152604482015290519081900360640190fd5b6008546001600160a01b0382811691161415612acb5760405162461bcd60e51b8152600401808060200182810382526033815260200180615a366033913960400191505060405180910390fd5b6000819050306001600160a01b0316816001600160a01b0316638da5cb5b6040518163ffffffff1660e01b815260040160206040518083038186803b158015612b1357600080fd5b505afa158015612b27573d6000803e3d6000fd5b505050506040513d6020811015612b3d57600080fd5b50516001600160a01b031614612b845760405162461bcd60e51b8152600401808060200182810382526047815260200180615a696047913960600191505060405180910390fd5b806001600160a01b03166331e79db0826040518263ffffffff1660e01b815260040180826001600160a01b03168152602001915050600060405180830381600087803b158015612bd357600080fd5b505af1158015612be7573d6000803e3d6000fd5b50506040805163031e79db60e41b815230600482015290516001600160a01b03851693506331e79db09250602480830192600092919082900301818387803b158015612c3257600080fd5b505af1158015612c46573d6000803e3d6000fd5b50506006546040805163031e79db60e41b81526001600160a01b039283166004820152905191851693506331e79db0925060248082019260009290919082900301818387803b158015612c9857600080fd5b505af1158015612cac573d6000803e3d6000fd5b50506008546040516001600160a01b03918216935090851691507f90c7d74461c613da5efa97d90740869367d74ab3aa5837aa4ae9a975f954b7a890600090a3600880546001600160a01b0319166001600160a01b039290921691909117905550565b612d17613e58565b6001600160a01b0316612d28612dab565b6001600160a01b031614612d71576040805162461bcd60e51b81526020600482018190526024820152600080516020615b6d833981519152604482015290519081900360640190fd5b601580546001600160a01b039092166001600160a01b0319909216821790556000908152603c60205260409020805460ff19166001179055565b60055461010090046001600160a01b031690565b612dc7613e58565b6001600160a01b0316612dd8612dab565b6001600160a01b031614612e21576040805162461bcd60e51b81526020600482018190526024820152600080516020615b6d833981519152604482015290519081900360640190fd5b612e29611ba7565b60ff16600a0a02600b55565b600e5481565b6013546001600160a01b031681565b60048054604080516020601f60026000196101006001881615020190951694909404938401819004810282018101909252828152606093909290918301828280156118ef5780601f106118c4576101008083540402835291602001916118ef565b60355481565b601d5481565b612ebf613e58565b6001600160a01b0316612ed0612dab565b6001600160a01b031614612f19576040805162461bcd60e51b81526020600482018190526024820152600080516020615b6d833981519152604482015290519081900360640190fd5b601680546001600160a01b0319166001600160a01b0392909216919091179055565b612f43613e58565b6001600160a01b0316612f54612dab565b6001600160a01b031614612f9d576040805162461bcd60e51b81526020600482018190526024820152600080516020615b6d833981519152604482015290519081900360640190fd5b601c869055601d8590556019849055601a839055601b829055601e819055612fcf81611a17848187818a818e8e613df7565b601f55505050505050565b612fe2613e58565b6001600160a01b0316612ff3612dab565b6001600160a01b03161461303c576040805162461bcd60e51b81526020600482018190526024820152600080516020615b6d833981519152604482015290519081900360640190fd5b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316826001600160a01b031614156130ad5760405162461bcd60e51b815260040180806020018281038252604b815260200180615c4e604b913960600191505060405180910390fd5b6121458282614e6c565b60385481565b60215481565b60085460408051631bc9e27b60e21b815290516000926001600160a01b031691636f2789ec916004808301926020929190829003018186803b158015611b7657600080fd5b6000611913613115613e58565b84611aa085604051806060016040528060258152602001615c99602591396001600061313f613e58565b6001600160a01b03908116825260208083019390935260409182016000908120918d16815292529020549190614934565b613178613e58565b6001600160a01b0316613189612dab565b6001600160a01b0316146131d2576040805162461bcd60e51b81526020600482018190526024820152600080516020615b6d833981519152604482015290519081900360640190fd5b601380546001600160a01b039092166001600160a01b0319909216821790556000908152603c60205260409020805460ff19166001179055565b600854604080516302a2e74960e61b81526001600160a01b0384811660048301529151600093929092169163a8b9d24091602480820192602092909190829003018186803b15801561259157600080fd5b600061191361326a613e58565b8484613f48565b600080600080600080600080600860009054906101000a90046001600160a01b03166001600160a01b031663fbcbc0f18a6040518263ffffffff1660e01b815260040180826001600160a01b031681526020019150506101006040518083038186803b1580156132e057600080fd5b505afa1580156132f4573d6000803e3d6000fd5b505050506040513d61010081101561330b57600080fd5b508051602082015160408301516060840151608085015160a086015160c087015160e090970151959e50939c50919a509850965094509092509050919395975091939597565b602c5481565b61335f613e58565b6001600160a01b0316613370612dab565b6001600160a01b0316146133b9576040805162461bcd60e51b81526020600482018190526024820152600080516020615b6d833981519152604482015290519081900360640190fd5b601480546001600160a01b039092166001600160a01b0319909216821790556000908152603c60205260409020805460ff19166001179055565b6014546001600160a01b031681565b603f6020526000908152604090205460ff1681565b61341f613e58565b6001600160a01b0316613430612dab565b6001600160a01b031614613479576040805162461bcd60e51b81526020600482018190526024820152600080516020615b6d833981519152604482015290519081900360640190fd5b6001600160a01b03919091166000908152603c60205260409020805460ff1916911515919091179055565b6134ac613e58565b6001600160a01b03166134bd612dab565b6001600160a01b031614613506576040805162461bcd60e51b81526020600482018190526024820152600080516020615b6d833981519152604482015290519081900360640190fd5b6001600160a01b03919091166000908152603d60205260409020805460ff1916911515919091179055565b613539613e58565b6001600160a01b031661354a612dab565b6001600160a01b031614613593576040805162461bcd60e51b81526020600482018190526024820152600080516020615b6d833981519152604482015290519081900360640190fd5b61359b611ba7565b60ff16600a0a02600d55565b6135af613e58565b6001600160a01b03166135c0612dab565b6001600160a01b031614613609576040805162461bcd60e51b81526020600482018190526024820152600080516020615b6d833981519152604482015290519081900360640190fd5b60005b8281101561365e5781603c600086868581811061362557fe5b602090810292909201356001600160a01b0316835250810191909152604001600020805460ff191691151591909117905560010161360c565b507f7fdaf542373fa84f4ee8d662c642f44e4c2276a217d7d29e548b6eb29a233b35838383604051808060200183151581526020018281038252858582818152602001925060200280828437600083820152604051601f909101601f1916909201829003965090945050505050a1505050565b6136d9613e58565b6001600160a01b03166136ea612dab565b6001600160a01b031614613733576040805162461bcd60e51b81526020600482018190526024820152600080516020615b6d833981519152604482015290519081900360640190fd5b61373b611ba7565b60ff16600a0a02600c55565b61374f613e58565b6001600160a01b0316613760612dab565b6001600160a01b0316146137a9576040805162461bcd60e51b81526020600482018190526024820152600080516020615b6d833981519152604482015290519081900360640190fd5b60005b828110156137fe5781603d60008686858181106137c557fe5b602090810292909201356001600160a01b0316835250810191909152604001600020805460ff19169115159190911790556001016137ac565b50505050565b6017546001600160a01b031681565b61381b613e58565b6001600160a01b031661382c612dab565b6001600160a01b031614613875576040805162461bcd60e51b81526020600482018190526024820152600080516020615b6d833981519152604482015290519081900360640190fd5b601880546001600160a01b0319166001600160a01b0392909216919091179055565b6016546001600160a01b031681565b6138ae613e58565b6001600160a01b03166138bf612dab565b6001600160a01b031614613908576040805162461bcd60e51b81526020600482018190526024820152600080516020615b6d833981519152604482015290519081900360640190fd5b6008546040805163d644c36560e01b81526001600160a01b0384811660048301529151919092169163d644c36591602480830192600092919082900301818387803b158015611c6057600080fd5b60265481565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b600c5481565b613995613e58565b6001600160a01b03166139a6612dab565b6001600160a01b0316146139ef576040805162461bcd60e51b81526020600482018190526024820152600080516020615b6d833981519152604482015290519081900360640190fd5b603780549115156101000261ff0019909216919091179055565b60205481565b601c5481565b60255481565b6007546001600160a01b031681565b6008546040805163039e107b60e61b815290516000926001600160a01b03169163e7841ec0916004808301926020929190829003018186803b158015611b7657600080fd5b613a77613e58565b6001600160a01b0316613a88612dab565b6001600160a01b031614613ad1576040805162461bcd60e51b81526020600482018190526024820152600080516020615b6d833981519152604482015290519081900360640190fd5b6008546040805163e98030c760e01b81526004810184905290516001600160a01b039092169163e98030c79160248082019260009290919082900301818387803b158015611c6057600080fd5b613b26613e58565b6001600160a01b0316613b37612dab565b6001600160a01b031614613b80576040805162461bcd60e51b81526020600482018190526024820152600080516020615b6d833981519152604482015290519081900360640190fd5b611f9481614f9a565b601a5481565b60245481565b600080600080600080600080600860009054906101000a90046001600160a01b03166001600160a01b0316635183d6fd8a6040518263ffffffff1660e01b8152600401808281526020019150506101006040518083038186803b1580156132e057600080fd5b613c03613e58565b6001600160a01b0316613c14612dab565b6001600160a01b031614613c5d576040805162461bcd60e51b81526020600482018190526024820152600080516020615b6d833981519152604482015290519081900360640190fd5b6001600160a01b038116613ca25760405162461bcd60e51b815260040180806020018281038252602681526020018061593e6026913960400191505060405180910390fd5b6005546040516001600160a01b0380841692610100900416907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3600580546001600160a01b0390921661010002610100600160a81b0319909216919091179055565b602b5481565b613d17613e58565b6001600160a01b0316613d28612dab565b6001600160a01b031614613d71576040805162461bcd60e51b81526020600482018190526024820152600080516020615b6d833981519152604482015290519081900360640190fd5b603655565b613d7e613e58565b6001600160a01b0316613d8f612dab565b6001600160a01b031614613dd8576040805162461bcd60e51b81526020600482018190526024820152600080516020615b6d833981519152604482015290519081900360640190fd5b613de0611ba7565b60ff16600a0a8102600a8190555050565b601e5481565b600082820183811015613e51576040805162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b9392505050565b3390565b6001600160a01b038316613ea15760405162461bcd60e51b8152600401808060200182810382526024815260200180615c2a6024913960400191505060405180910390fd5b6001600160a01b038216613ee65760405162461bcd60e51b81526004018080602001828103825260228152602001806159646022913960400191505060405180910390fd5b6001600160a01b03808416600081815260016020908152604080832094871680845294825291829020859055815185815291517f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9259281900390910190a3505050565b6001600160a01b0383166000908152603b602052604090205460ff1615613fa05760405162461bcd60e51b81526004018080602001828103825260248152602001806159ac6024913960400191505060405180910390fd5b6001600160a01b0382166000908152603b602052604090205460ff1615613ff85760405162461bcd60e51b81526004018080602001828103825260248152602001806159ac6024913960400191505060405180910390fd5b6001600160a01b03831661403d5760405162461bcd60e51b81526004018080602001828103825260238152602001806158f26023913960400191505060405180910390fd5b6001600160a01b0382166140825760405162461bcd60e51b81526004018080602001828103825260238152602001806158f26023913960400191505060405180910390fd5b806140985761409383836000614d11565b61492f565b60006140a2612dab565b6001600160a01b0316846001600160a01b0316141580156140cb57506001600160a01b03831615155b80156140e257506001600160a01b03831661dead14155b801561410657506001600160a01b0384166000908152603f602052604090205460ff165b156141c6576001600160a01b0384166000908152603d602052604090205460ff1661416c57600a5482111561416c5760405162461bcd60e51b81526004018080602001828103825260288152602001806159d06028913960400191505060405180910390fd5b5060198054602e55601a8054602f55601b8054603055601c8054603155601d80546032819055603355601f805460345560205490955560215490935560225490915560235490556024549055602554601e55602654905560015b60006141d06120bb565b90508061422e576001600160a01b0385166000908152603e602052604090205460ff1661422e5760405162461bcd60e51b815260040180806020018281038252603e815260200180615b8d603e913960400191505060405180910390fd5b614236612dab565b6001600160a01b0316856001600160a01b0316141580156142615750600754600160a01b900460ff16155b801561426a5750805b801561428e57506001600160a01b0384166000908152603f602052604090205460ff165b80156142a857506006546001600160a01b03868116911614155b80156142cd57506001600160a01b0384166000908152603c602052604090205460ff16155b1561445557600e546001600160a01b0386166000908152601160205260409020544291011015614311576001600160a01b0385166000908152601260205260408120555b6001600160a01b0385166000908152603d602052604090205460ff1661438c57600b546001600160a01b0386166000908152601260205260409020548401111561438c5760405162461bcd60e51b8152600401808060200182810382526042815260200180615ab06042913960600191505060405180910390fd5b6001600160a01b038516600090815260126020526040902054156143cd576001600160a01b03851660009081526012602052604090208054840190556143f9565b6001600160a01b0385166000908152601160209081526040808320429055601290915290208054840190555b60198054602e55601a8054602f55601b8054603055601c8054603155601d8054603255601e8054603355601f8054603455602754909655602854909455602954909255602a549055602b549055602c549055602d549055600191505b600061446030612741565b600c549091508110158280156144735750805b80156144895750600754600160a01b900460ff16155b80156144ae57506001600160a01b0387166000908152603f602052604090205460ff16155b80156144c857506009546001600160a01b03888116911614155b80156144e257506009546001600160a01b03878116911614155b1561452b576007805460ff60a01b1916600160a01b179055600c54614506906149cb565b600061451130612741565b905061451c81614f9a565b506007805460ff60a01b191690555b60008380156145445750600754600160a01b900460ff16155b6001600160a01b0389166000908152603c602052604090205490915060ff168061458657506001600160a01b0387166000908152603c602052604090205460ff165b806145985750603754610100900460ff165b156145a1575060005b80806145aa5750845b1561468c576001600160a01b0388166000908152603c602052604090205460ff16806145ee57506001600160a01b0387166000908152603c602052604090205460ff165b156145f857614687565b6000614611601e54601f546151e790919063ffffffff16565b9050600061462a60646146248a85615244565b9061529d565b905060006146486064614624601e548c61524490919063ffffffff16565b905061465e816146588b856151e7565b906151e7565b985061466b8b3084614d11565b600954614683908c906001600160a01b031683614d11565b5050505b61471a565b6001600160a01b0388166000908152603c602052604090205460ff16806146cb57506001600160a01b0387166000908152603c602052604090205460ff165b156146d55761471a565b60006146f16064614624601e548a61524490919063ffffffff16565b90506146fd87826151e7565b600954909750614718908a906001600160a01b031683614d11565b505b614725888888614d11565b61472d615304565b6008546001600160a01b031663e30443bc8961474881612741565b6040518363ffffffff1660e01b815260040180836001600160a01b0316815260200182815260200192505050600060405180830381600087803b15801561478e57600080fd5b505af192505050801561479f575060015b506008546001600160a01b031663e30443bc886147bb81612741565b6040518363ffffffff1660e01b815260040180836001600160a01b0316815260200182815260200192505050600060405180830381600087803b15801561480157600080fd5b505af1925050508015614812575060015b5060355460075442919091101590600160a01b900460ff161580156148345750805b1561492857603854603654603580549091019055600854604080516001624d3b8760e01b031981526004810184905290516001600160a01b039092169163ffb2c479916024808201926060929091908290030181600087803b15801561489957600080fd5b505af19250505080156148cd57506040513d60608110156148b957600080fd5b508051602082015160409092015190919060015b6148d657614926565b604080518481526020810184905280820183905260608101869052905132916001917fc864333d6121033635ab41b29ae52f10a22cf4438c3e4f1c4c68518feb2f8a989181900360800190a35050505b505b5050505050505b505050565b600081848411156149c35760405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b83811015614988578181015183820152602001614970565b50505050905090810190601f1680156149b55780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b505050900390565b60008060006019546000146149f7576149f460646146246019548761524490919063ffffffff16565b92505b601a5415614a1c57614a196064614624601a548761524490919063ffffffff16565b91505b601b5415614a4157614a3e6064614624601b548761524490919063ffffffff16565b90505b8284038290038190036000614a5786600261529d565b90506000614a6683600261529d565b90506000614a7484836151e7565b905047614a8084615330565b6000614a8c47836151e7565b90506000806000601954600014614aba57614ab760646146246019548761524490919063ffffffff16565b92505b601a5415614adf57614adc6064614624601a548761524490919063ffffffff16565b91505b601b5415614b0457614b016064614624601b548761524490919063ffffffff16565b90505b828403829003819003868415614b9f576016546001600160a01b031615614b4857601654601354614b439187916001600160a01b0391821691166154c3565b614b9f565b6013546040516000916001600160a01b03169087908381818185875af1925050503d8060008114614b95576040519150601f19603f3d011682016040523d82523d6000602084013e614b9a565b606091505b505050505b8315614c30576017546001600160a01b031615614bd957601754601454614bd49186916001600160a01b0391821691166154c3565b614c30565b6014546040516000916001600160a01b03169086908381818185875af1925050503d8060008114614c26576040519150601f19603f3d011682016040523d82523d6000602084013e614c2b565b606091505b505050505b8215614cb65760375460ff1615614c5f57601554614c5a90849030906001600160a01b03166154c3565b614cb6565b6015546040516000916001600160a01b03169085908381818185875af1925050503d8060008114614cac576040519150601f19603f3d011682016040523d82523d6000602084013e614cb1565b606091505b505050505b614cc0818361565c565b604080518a8152602081018490528082018a905290517f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb5619181900360600190a1505050505050505050505050505050565b6001600160a01b038316614d565760405162461bcd60e51b8152600401808060200182810382526025815260200180615bcb6025913960400191505060405180910390fd5b6001600160a01b038216614d9b5760405162461bcd60e51b81526004018080602001828103825260238152602001806158f26023913960400191505060405180910390fd5b614da683838361492f565b614de381604051806060016040528060268152602001615986602691396001600160a01b0386166000908152602081905260409020549190614934565b6001600160a01b038085166000908152602081905260408082209390935590841681522054614e129082613df7565b6001600160a01b038084166000818152602081815260409182902094909455805185815290519193928716927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef92918290030190a3505050565b6001600160a01b0382166000908152603f602052604090205460ff1615158115151415614eca5760405162461bcd60e51b815260040180806020018281038252603e8152602001806159f8603e913960400191505060405180910390fd5b6001600160a01b0382166000908152603f60205260409020805460ff19168215801591909117909155614f5e576008546040805163031e79db60e41b81526001600160a01b038581166004830152915191909216916331e79db091602480830192600092919082900301818387803b158015614f4557600080fd5b505af1158015614f59573d6000803e3d6000fd5b505050505b604051811515906001600160a01b038416907fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab90600090a35050565b6008546007546001600160a01b0391821691600091829116156150c657614fc18430615714565b600754604080516370a0823160e01b815230600482015290516001600160a01b03909216916370a0823191602480820192602092909190829003018186803b15801561500c57600080fd5b505afa158015615020573d6000803e3d6000fd5b505050506040513d602081101561503657600080fd5b50516007546008546040805163a9059cbb60e01b81526001600160a01b03928316600482015260248101859052905193945091169163a9059cbb916044808201926020929091908290030181600087803b15801561509357600080fd5b505af11580156150a7573d6000803e3d6000fd5b505050506040513d60208110156150bd57600080fd5b5051915061513b565b476150d085615330565b60006150dc47836151e7565b6040519093508391506000906001600160a01b0387169083908381818185875af1925050503d806000811461512d576040519150601f19603f3d011682016040523d82523d6000602084013e615132565b606091505b50909550505050505b81156137fe576008546040805163b0c7ce3760e01b81526004810184905290516001600160a01b039092169163b0c7ce379160248082019260009290919082900301818387803b15801561518e57600080fd5b505af11580156151a2573d6000803e3d6000fd5b5050604080518781526020810185905281517f80195cc573b02cc48460cbca6e6e4cc85ddb91959d946e1c3025ea3d87942dc39450908190039091019150a150505050565b60008282111561523e576040805162461bcd60e51b815260206004820152601e60248201527f536166654d6174683a207375627472616374696f6e206f766572666c6f770000604482015290519081900360640190fd5b50900390565b60008261525357506000611917565b8282028284828161526057fe5b0414613e515760405162461bcd60e51b8152600401808060200182810382526021815260200180615b246021913960400191505060405180910390fd5b60008082116152f3576040805162461bcd60e51b815260206004820152601a60248201527f536166654d6174683a206469766973696f6e206279207a65726f000000000000604482015290519081900360640190fd5b8183816152fc57fe5b049392505050565b602e54601955602f54601a55603054601b55603154601c55603254601d55603354601e55603454601f55565b604080516002808252606082018352600092602083019080368337019050509050308160008151811061535f57fe5b6001600160a01b03928316602091820292909201810191909152600654604080516315ab88c960e31b81529051919093169263ad5c4648926004808301939192829003018186803b1580156153b357600080fd5b505afa1580156153c7573d6000803e3d6000fd5b505050506040513d60208110156153dd57600080fd5b50518151829060019081106153ee57fe5b6001600160a01b0392831660209182029290920101526006546154149130911684613e5c565b60065460405163791ac94760e01b8152600481018481526000602483018190523060648401819052426084850181905260a060448601908152875160a487015287516001600160a01b039097169663791ac947968a968a9594939092909160c40190602080880191028083838b5b8381101561549a578181015183820152602001615482565b505050509050019650505050505050600060405180830381600087803b15801561206757600080fd5b6040805160028082526060820183526000926020830190803683375050600654604080516315ab88c960e31b815290519394506001600160a01b039091169263ad5c464892506004808301926020929190829003018186803b15801561552857600080fd5b505afa15801561553c573d6000803e3d6000fd5b505050506040513d602081101561555257600080fd5b50518151829060009061556157fe5b60200260200101906001600160a01b031690816001600160a01b031681525050828160018151811061558f57fe5b6001600160a01b0392831660209182029290920181019190915260065460405163b6f9de9560e01b815260006004820181815287861660448401524260648401819052608060248501908152885160848601528851959097169663b6f9de95968c9694958a958c95939260a49092019187810191028083838b5b83811015615621578181015183820152602001615609565b50505050905001955050505050506000604051808303818588803b15801561564857600080fd5b505af1158015614928573d6000803e3d6000fd5b6006546156749030906001600160a01b031684613e5c565b6006546009546040805163f305d71960e01b81523060048201526024810186905260006044820181905260648201526001600160a01b0392831660848201524260a48201529051919092169163f305d71991849160c48082019260609290919082900301818588803b1580156156e957600080fd5b505af11580156156fd573d6000803e3d6000fd5b50505050506040513d60608110156137fe57600080fd5b6040805160038082526080820190925260009160208201606080368337019050509050308160008151811061574557fe5b6001600160a01b03928316602091820292909201810191909152600654604080516315ab88c960e31b81529051919093169263ad5c4648926004808301939192829003018186803b15801561579957600080fd5b505afa1580156157ad573d6000803e3d6000fd5b505050506040513d60208110156157c357600080fd5b50518151829060019081106157d457fe5b6001600160a01b0392831660209182029290920101526007548251911690829060029081106157ff57fe5b6001600160a01b0392831660209182029290920101526006546158259130911685613e5c565b600654604051635c11d79560e01b8152600481018581526000602483018190526001600160a01b038681166064850152426084850181905260a060448601908152875160a487015287519290961695635c11d795958a9589948b9493919260c40190602080880191028083838b5b838110156158ab578181015183820152602001615893565b505050509050019650505050505050600060405180830381600087803b1580156158d457600080fd5b505af11580156158e8573d6000803e3d6000fd5b5050505050505056fe45524332303a207472616e7366657220746f20746865207a65726f2061646472657373204146553a2054686520726f7574657220616c726561647920686173207468617420616464726573734f776e61626c653a206e6577206f776e657220697320746865207a65726f206164647265737345524332303a20617070726f766520746f20746865207a65726f206164647265737345524332303a207472616e7366657220616d6f756e7420657863656564732062616c616e6365426c61636b6c697374656420616464726573732063616e6e6f74207472616e73666572215472616e7366657220616d6f756e74206578636565647320746865206d61785478416d6f756e742e204146553a204175746f6d61746564206d61726b6574206d616b6572207061697220697320616c72656164792073657420746f20746861742076616c7565204146553a20546865206469766964656e6420747261636b657220616c72656164792068617320746861742061646472657373204146553a20546865206e6577206469766964656e6420747261636b6572206d757374206265206f776e656420627920746865202041465520746f6b656e20636f6e747261637453656c6c207472616e7366657220616d6f756e74206578636565647320746865206d617853656c6c416d6f756e7420666f722074686520676976656e2074696d652e204146553a2043616e6e6f742075706461746520676173466f7250726f63657373696e6720746f2073616d652076616c7565536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f7745524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e63654f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572204146553a2054686973206163636f756e742063616e6e6f742073656e6420746f6b656e7320756e74696c2074726164696e6720697320656e61626c656445524332303a207472616e736665722066726f6d20746865207a65726f2061646472657373204146553a20676173466f7250726f63657373696e67206d757374206265206265747765656e203230302c30303020616e64203530302c30303045524332303a20617070726f76652066726f6d20746865207a65726f2061646472657373204146553a205468652050616e63616b655377617020706169722063616e6e6f742062652072656d6f7665642066726f6d206175746f6d617465644d61726b65744d616b6572506169727345524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa2646970667358221220535c0cad5cf49d13c401d79f593ed35caa142b99ef09ea25b683341a5d69fc3e64736f6c634300070600336080604052600880546001600160a01b03191690553480156200002157600080fd5b5060408051808201825260158082527f204146555f4469766964656e645f547261636b65720000000000000000000000602080840182815285518087019096529285528401528151919291839183916200007e916003916200012e565b508051620000949060049060208401906200012e565b50506005805460ff191660121790555050600980546001600160a01b03191633179055506000620000c46200012a565b600d80546001600160a01b0319166001600160a01b038316908117909155604051919250906000907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a350610e10601555670de0b6b3a7640000601655620001da565b3390565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282620001665760008555620001b1565b82601f106200018157805160ff1916838001178555620001b1565b82800160010185558215620001b1579182015b82811115620001b157825182559160200191906001019062000194565b50620001bf929150620001c3565b5090565b5b80821115620001bf5760008155600101620001c4565b61275380620001ea6000396000f3fe6080604052600436106102555760003560e01c806385a6b3ae11610139578063be10b614116100b6578063e76ed0e31161007a578063e76ed0e314610919578063e7841ec01461092e578063e98030c714610943578063f2fde38b1461096d578063fbcbc0f1146109a0578063ffb2c479146109d35761025c565b8063be10b61414610848578063cd446e221461085d578063d644c36514610872578063dd62ed3e146108a5578063e30443bc146108e05761025c565b8063a8b9d240116100fd578063a8b9d24014610744578063a9059cbb14610777578063aafd847a146107b0578063b0c7ce37146107e3578063bc4c4b371461080d5761025c565b806385a6b3ae1461067d5780638da5cb5b1461069257806391b89fba146106c357806395d89b41146106f6578063a457c2d71461070b5761025c565b8063313ce567116101d25780634e7b827f116101965780634e7b827f146105635780635183d6fd146105965780636a4740021461060b5780636f2789ec1461062057806370a0823114610635578063715018a6146106685761025c565b8063313ce5671461046f57806331e79db01461049a57806339509351146104cd5780633b364da8146105065780633d0c8963146105305761025c565b8063226cfa3d11610219578063226cfa3d1461037e57806323b872dd146103b157806327ce0147146103f45780632a150127146104275780633009a6091461045a5761025c565b806303c833021461026157806306fdde031461026b578063095ea7b3146102f557806309bbedde1461034257806318160ddd146103695761025c565b3661025c57005b600080fd5b610269610a1b565b005b34801561027757600080fd5b50610280610af5565b6040805160208082528351818301528351919283929083019185019080838360005b838110156102ba5781810151838201526020016102a2565b50505050905090810190601f1680156102e75780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b34801561030157600080fd5b5061032e6004803603604081101561031857600080fd5b506001600160a01b038135169060200135610b8b565b604080519115158252519081900360200190f35b34801561034e57600080fd5b50610357610ba9565b60408051918252519081900360200190f35b34801561037557600080fd5b50610357610baf565b34801561038a57600080fd5b50610357600480360360208110156103a157600080fd5b50356001600160a01b0316610bb5565b3480156103bd57600080fd5b5061032e600480360360608110156103d457600080fd5b506001600160a01b03813581169160208101359091169060400135610bc7565b34801561040057600080fd5b506103576004803603602081101561041757600080fd5b50356001600160a01b0316610c4e565b34801561043357600080fd5b506102696004803603602081101561044a57600080fd5b50356001600160a01b0316610cad565b34801561046657600080fd5b50610357610d18565b34801561047b57600080fd5b50610484610d1e565b6040805160ff9092168252519081900360200190f35b3480156104a657600080fd5b50610269600480360360208110156104bd57600080fd5b50356001600160a01b0316610d27565b3480156104d957600080fd5b5061032e600480360360408110156104f057600080fd5b506001600160a01b038135169060200135610e33565b34801561051257600080fd5b506102696004803603602081101561052957600080fd5b5035610e81565b34801561053c57600080fd5b506102696004803603602081101561055357600080fd5b50356001600160a01b0316610ef2565b34801561056f57600080fd5b5061032e6004803603602081101561058657600080fd5b50356001600160a01b0316610f76565b3480156105a257600080fd5b506105c0600480360360208110156105b957600080fd5b5035610f8b565b604080516001600160a01b0390991689526020890197909752878701959095526060870193909352608086019190915260a085015260c084015260e083015251908190036101000190f35b34801561061757600080fd5b506102696110ea565b34801561062c57600080fd5b50610357611121565b34801561064157600080fd5b506103576004803603602081101561065857600080fd5b50356001600160a01b0316611127565b34801561067457600080fd5b50610269611142565b34801561068957600080fd5b506103576111ee565b34801561069e57600080fd5b506106a76111f4565b604080516001600160a01b039092168252519081900360200190f35b3480156106cf57600080fd5b50610357600480360360208110156106e657600080fd5b50356001600160a01b0316611203565b34801561070257600080fd5b5061028061120e565b34801561071757600080fd5b5061032e6004803603604081101561072e57600080fd5b506001600160a01b03813516906020013561126f565b34801561075057600080fd5b506103576004803603602081101561076757600080fd5b50356001600160a01b03166112d7565b34801561078357600080fd5b5061032e6004803603604081101561079a57600080fd5b506001600160a01b038135169060200135611303565b3480156107bc57600080fd5b50610357600480360360208110156107d357600080fd5b50356001600160a01b0316611317565b3480156107ef57600080fd5b506102696004803603602081101561080657600080fd5b5035611332565b34801561081957600080fd5b5061032e6004803603604081101561083057600080fd5b506001600160a01b03813516906020013515156113fb565b34801561085457600080fd5b506103576114da565b34801561086957600080fd5b506106a76114e0565b34801561087e57600080fd5b506102696004803603602081101561089557600080fd5b50356001600160a01b03166114ef565b3480156108b157600080fd5b50610357600480360360408110156108c857600080fd5b506001600160a01b0381358116916020013516611572565b3480156108ec57600080fd5b506102696004803603604081101561090357600080fd5b506001600160a01b03813516906020013561159d565b34801561092557600080fd5b506106a7611753565b34801561093a57600080fd5b50610357611762565b34801561094f57600080fd5b506102696004803603602081101561096657600080fd5b5035611768565b34801561097957600080fd5b506102696004803603602081101561099057600080fd5b50356001600160a01b031661188e565b3480156109ac57600080fd5b506105c0600480360360208110156109c357600080fd5b50356001600160a01b0316611991565b3480156109df57600080fd5b506109fd600480360360208110156109f657600080fd5b5035611b04565b60408051938452602084019290925282820152519081900360600190f35b6009546001600160a01b03163314610a645760405162461bcd60e51b815260040180806020018281038252602a8152602001806125ba602a913960400191505060405180910390fd5b6000610a6e610baf565b11610a7857600080fd5b3415610af357610aa9610a89610baf565b610a9734600160801b611c02565b81610a9e57fe5b600654919004611c62565b60065560408051348152905133917fa493a9229478c3fcd73f66d2cdeb7f94fd0f341da924d1054236d78454116511919081900360200190a2600c54610aef9034611c62565b600c555b565b60038054604080516020601f6002600019610100600188161502019095169490940493840181900481028201810190925282815260609390929091830182828015610b815780601f10610b5657610100808354040283529160200191610b81565b820191906000526020600020905b815481529060010190602001808311610b6457829003601f168201915b5050505050905090565b6000610b9f610b98611cbc565b8484611cc0565b5060015b92915050565b600e5490565b60025490565b60146020526000908152604090205481565b6000610bd4848484611dac565b610c4484610be0611cbc565b610c3f8560405180606001604052806028815260200161266c602891396001600160a01b038a16600090815260016020526040812090610c1e611cbc565b6001600160a01b031681526020810191909152604001600020549190611de3565b611cc0565b5060019392505050565b6001600160a01b0381166000908152600a6020526040812054600160801b90610c9d90610c9890610c92610c8d610c8488611127565b60065490611c02565b611e7a565b90611e8a565b611ebd565b81610ca457fe5b0490505b919050565b6009546001600160a01b03163314610cf65760405162461bcd60e51b815260040180806020018281038252602a8152602001806125ba602a913960400191505060405180910390fd5b600980546001600160a01b0319166001600160a01b0392909216919091179055565b60125481565b60055460ff1690565b610d2f611cbc565b6001600160a01b0316610d406111f4565b6001600160a01b031614610d89576040805162461bcd60e51b81526020600482018190526024820152600080516020612694833981519152604482015290519081900360640190fd5b6001600160a01b0381166000908152601360205260408120805460ff19166001179055610db7908290611ed0565b6040805163131836e760e21b8152600e60048201526001600160a01b0383166024820152905173f38c7c109f3819e19202a6335ec96f46275c327291634c60db9c916044808301926000929190829003018186803b158015610e1857600080fd5b505af4158015610e2c573d6000803e3d6000fd5b5050505050565b6000610b9f610e40611cbc565b84610c3f8560016000610e51611cbc565b6001600160a01b03908116825260208083019390935260409182016000908120918c168152925290205490611c62565b610e89611cbc565b6001600160a01b0316610e9a6111f4565b6001600160a01b031614610ee3576040805162461bcd60e51b81526020600482018190526024820152600080516020612694833981519152604482015290519081900360640190fd5b670de0b6b3a764000002601655565b610efa611cbc565b6001600160a01b0316610f0b6111f4565b6001600160a01b031614610f54576040805162461bcd60e51b81526020600482018190526024820152600080516020612694833981519152604482015290519081900360640190fd5b600880546001600160a01b0319166001600160a01b0392909216919091179055565b60136020526000908152604090205460ff1681565b600080600080600080600080600e73f38c7c109f3819e19202a6335ec96f46275c327263deb3d89690916040518263ffffffff1660e01b81526004018082815260200191505060206040518083038186803b158015610fe957600080fd5b505af4158015610ffd573d6000803e3d6000fd5b505050506040513d602081101561101357600080fd5b5051891061103a5750600096506000199550859450869350839250829150819050806110df565b6000600e73f38c7c109f3819e19202a6335ec96f46275c327263d1aa9e7e90918c6040518363ffffffff1660e01b8152600401808381526020018281526020019250505060206040518083038186803b15801561109657600080fd5b505af41580156110aa573d6000803e3d6000fd5b505050506040513d60208110156110c057600080fd5b505190506110cd81611991565b98509850985098509850985098509850505b919395975091939597565b60405162461bcd60e51b81526004018080602001828103825260658152602001806125556065913960800191505060405180910390fd5b60155481565b6001600160a01b031660009081526020819052604090205490565b61114a611cbc565b6001600160a01b031661115b6111f4565b6001600160a01b0316146111a4576040805162461bcd60e51b81526020600482018190526024820152600080516020612694833981519152604482015290519081900360640190fd5b600d546040516000916001600160a01b0316907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600d80546001600160a01b0319169055565b600c5481565b600d546001600160a01b031690565b6000610ba3826112d7565b60048054604080516020601f6002600019610100600188161502019095169490940493840181900481028201810190925282815260609390929091830182828015610b815780601f10610b5657610100808354040283529160200191610b81565b6000610b9f61127c611cbc565b84610c3f856040518060600160405280602581526020016126f960259139600160006112a6611cbc565b6001600160a01b03908116825260208083019390935260409182016000908120918d16815292529020549190611de3565b6001600160a01b0381166000908152600b6020526040812054610ba3906112fd84610c4e565b90611f29565b6000610b9f611310611cbc565b8484611dac565b6001600160a01b03166000908152600b602052604090205490565b6009546001600160a01b0316331461137b5760405162461bcd60e51b815260040180806020018281038252602a8152602001806125ba602a913960400191505060405180910390fd5b6000611385610baf565b1161138f57600080fd5b80156113f8576113ae6113a0610baf565b610a9783600160801b611c02565b60065560408051828152905133917fa493a9229478c3fcd73f66d2cdeb7f94fd0f341da924d1054236d78454116511919081900360200190a2600c546113f49082611c62565b600c555b50565b6000611405611cbc565b6001600160a01b03166114166111f4565b6001600160a01b03161461145f576040805162461bcd60e51b81526020600482018190526024820152600080516020612694833981519152604482015290519081900360640190fd5b600061146a84611f86565b905080156114d0576001600160a01b0384166000818152601460209081526040918290204290558151848152915186151593927fa2c38e2d2fb7e3e1912d937fd1ca11ed6d51864dee4cfa7a7bf02becd7acf09292908290030190a36001915050610ba3565b5060009392505050565b60165481565b6009546001600160a01b031681565b6114f7611cbc565b6001600160a01b03166115086111f4565b6001600160a01b031614611551576040805162461bcd60e51b81526020600482018190526024820152600080516020612694833981519152604482015290519081900360640190fd5b6001600160a01b03166000908152601360205260409020805460ff19169055565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b6115a5611cbc565b6001600160a01b03166115b66111f4565b6001600160a01b0316146115ff576040805162461bcd60e51b81526020600482018190526024820152600080516020612694833981519152604482015290519081900360640190fd5b6001600160a01b03821660009081526013602052604090205460ff16156116255761174f565b60165481106116bd576116388282611ed0565b60408051632f0ad01760e21b8152600e60048201526001600160a01b038416602482015260448101839052905173f38c7c109f3819e19202a6335ec96f46275c32729163bc2b405c916064808301926000929190829003018186803b1580156116a057600080fd5b505af41580156116b4573d6000803e3d6000fd5b50505050611742565b6116c8826000611ed0565b6040805163131836e760e21b8152600e60048201526001600160a01b0384166024820152905173f38c7c109f3819e19202a6335ec96f46275c327291634c60db9c916044808301926000929190829003018186803b15801561172957600080fd5b505af415801561173d573d6000803e3d6000fd5b505050505b61174d8260016113fb565b505b5050565b6008546001600160a01b031681565b60125490565b611770611cbc565b6001600160a01b03166117816111f4565b6001600160a01b0316146117ca576040805162461bcd60e51b81526020600482018190526024820152600080516020612694833981519152604482015290519081900360640190fd5b610e1081101580156117df5750620151808111155b61181a5760405162461bcd60e51b815260040180806020018281038252604a81526020018061250b604a913960600191505060405180910390fd5b60155481141561185b5760405162461bcd60e51b815260040180806020018281038252603c8152602001806125e4603c913960400191505060405180910390fd5b60155460405182907f474ea64804364a1e29a4487ddb63c3342a2dd826ccd8acf48825e680a0e6f20f90600090a3601555565b611896611cbc565b6001600160a01b03166118a76111f4565b6001600160a01b0316146118f0576040805162461bcd60e51b81526020600482018190526024820152600080516020612694833981519152604482015290519081900360640190fd5b6001600160a01b0381166119355760405162461bcd60e51b81526004018080602001828103825260268152602001806124c36026913960400191505060405180910390fd5b600d546040516001600160a01b038084169216907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3600d80546001600160a01b0319166001600160a01b0392909216919091179055565b600080600080600080600080889750600e73f38c7c109f3819e19202a6335ec96f46275c32726317e142d190918a6040518363ffffffff1660e01b815260040180838152602001826001600160a01b031681526020019250505060206040518083038186803b158015611a0357600080fd5b505af4158015611a17573d6000803e3d6000fd5b505050506040513d6020811015611a2d57600080fd5b50519650600019955060008712611a9157601254871115611a5d57601254611a569088906121b1565b9550611a91565b601254600e5460009110611a72576000611a81565b601254600e54611a8191611f29565b9050611a8d8882611e8a565b9650505b611a9a886112d7565b9450611aa588610c4e565b6001600160a01b038916600090815260146020526040902054909450925082611acf576000611add565b601554611add908490611c62565b9150428211611aed576000611af7565b611af78242611f29565b9050919395975091939597565b600e546000908190819080611b2457505060125460009250829150611bfb565b6012546000805a90506000805b8984108015611b3f57508582105b15611bea57600e546001909501948510611b5857600094505b6000600e6000018681548110611b6a57fe5b60009182526020808320909101546001600160a01b03168083526014909152604090912054909150611b9b906121e5565b15611bb757611bab8160016113fb565b15611bb7576001909101905b60019092019160005a905080851115611be157611bde611bd78683611f29565b8790611c62565b95505b9350611b319050565b601285905590975095509193505050505b9193909250565b600082611c1157506000610ba3565b82820282848281611c1e57fe5b0414611c5b5760405162461bcd60e51b815260040180806020018281038252602181526020018061264b6021913960400191505060405180910390fd5b9392505050565b600082820183811015611c5b576040805162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b3390565b6001600160a01b038316611d055760405162461bcd60e51b81526004018080602001828103825260248152602001806126d56024913960400191505060405180910390fd5b6001600160a01b038216611d4a5760405162461bcd60e51b81526004018080602001828103825260228152602001806124e96022913960400191505060405180910390fd5b6001600160a01b03808416600081815260016020908152604080832094871680845294825291829020859055815185815291517f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9259281900390910190a3505050565b60405162461bcd60e51b815260040180806020018281038252602b815260200180612620602b913960400191505060405180910390fd5b60008184841115611e725760405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b83811015611e37578181015183820152602001611e1f565b50505050905090810190601f168015611e645780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b505050900390565b60008181811215610ba357600080fd5b6000828201818312801590611e9f5750838112155b80611eb45750600083128015611eb457508381125b611c5b57600080fd5b600080821215611ecc57600080fd5b5090565b6000611edb83611127565b905080821115611f03576000611ef18383611f29565b9050611efd848261220c565b5061174d565b8082101561174d576000611f178284611f29565b9050611f238482612270565b50505050565b600082821115611f80576040805162461bcd60e51b815260206004820152601e60248201527f536166654d6174683a207375627472616374696f6e206f766572666c6f770000604482015290519081900360640190fd5b50900390565b600080611f92836112d7565b905080156121a8576001600160a01b0383166000908152600b6020526040902054611fbd9082611c62565b6001600160a01b038085166000908152600b602052604081209290925560085416612086576040516000906001600160a01b0386169084908381818185875af1925050503d806000811461202d576040519150601f19603f3d011682016040523d82523d6000602084013e612032565b606091505b50506008546040805186815290519294508493506001600160a01b0391821692918816917feb063efb53b3790d2bc15284b59af7544466c8787c2883321ee27095647911b69181900360200190a350612152565b6008546040805163a9059cbb60e01b81526001600160a01b038781166004830152602482018690529151919092169163a9059cbb9160448083019260209291908290030181600087803b1580156120dc57600080fd5b505af11580156120f0573d6000803e3d6000fd5b505050506040513d602081101561210657600080fd5b50516008546040805185815290519293506001600160a01b0391821692918716917feb063efb53b3790d2bc15284b59af7544466c8787c2883321ee27095647911b69181900360200190a35b806121a0576001600160a01b0384166000908152600b602052604090205461217a9083611f29565b6001600160a01b0385166000908152600b60205260408120919091559250610ca8915050565b509050610ca8565b50600092915050565b60008082121580156121c557508282840313155b806121dc57506000821280156121dc575082828403135b611f8057600080fd5b6000428211156121f757506000610ca8565b6015546122044284611f29565b101592915050565b61221682826122b4565b612250612231610c8d83600654611c0290919063ffffffff16565b6001600160a01b0384166000908152600a6020526040902054906121b1565b6001600160a01b039092166000908152600a602052604090209190915550565b61227a82826123a4565b612250612295610c8d83600654611c0290919063ffffffff16565b6001600160a01b0384166000908152600a602052604090205490611e8a565b6001600160a01b03821661230f576040805162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f206164647265737300604482015290519081900360640190fd5b61231b6000838361174d565b6002546123289082611c62565b6002556001600160a01b03821660009081526020819052604090205461234e9082611c62565b6001600160a01b0383166000818152602081815260408083209490945583518581529351929391927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9281900390910190a35050565b6001600160a01b0382166123e95760405162461bcd60e51b81526004018080602001828103825260218152602001806126b46021913960400191505060405180910390fd5b6123f58260008361174d565b612432816040518060600160405280602281526020016124a1602291396001600160a01b0385166000908152602081905260409020549190611de3565b6001600160a01b0383166000908152602081905260409020556002546124589082611f29565b6002556040805182815290516000916001600160a01b038516917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9181900360200190a3505056fe45524332303a206275726e20616d6f756e7420657863656564732062616c616e63654f776e61626c653a206e6577206f776e657220697320746865207a65726f206164647265737345524332303a20617070726f766520746f20746865207a65726f2061646472657373204146555f4469766964656e645f547261636b65723a20636c61696d57616974206d757374206265207570646174656420746f206265747765656e203120616e6420323420686f757273204146555f4469766964656e645f547261636b65723a2077697468647261774469766964656e642064697361626c65642e20557365207468652027636c61696d272066756e6374696f6e206f6e20746865206d61696e202041465520636f6e74726163742e4f776e61626c653a2063616c6c6572206973206e6f7420746865206d617374657220636f6e7472616374204146555f4469766964656e645f547261636b65723a2043616e6e6f742075706461746520636c61696d5761697420746f2073616d652076616c7565204146555f4469766964656e645f547261636b65723a204e6f207472616e736665727320616c6c6f776564536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f7745524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e63654f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657245524332303a206275726e2066726f6d20746865207a65726f206164647265737345524332303a20617070726f76652066726f6d20746865207a65726f206164647265737345524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa264697066735822122064c015715837b83714f1b841e08c61144160edd88884c8c6522fc4796708b0dd64736f6c63430007060033204146553a204175746f6d61746564206d61726b6574206d616b6572207061697220697320616c72656164792073657420746f20746861742076616c7565

Deployed Bytecode

0x6080604052600436106106d75760003560e01c80637a41865b1161037a578063c0a904a2116101d1578063e708a0f911610102578063f11a24d3116100a0578063f63743421161007a578063f6374342146117d9578063f7822e09146117ee578063fa280d4414611818578063fce589d814611842576106de565b8063f11a24d314611767578063f27fd2541461177c578063f2fde38b146117a6576106de565b8063e7841ec0116100dc578063e7841ec0146116e9578063e98030c7146116fe578063e9d3d61e14611728578063ecfca89914611752576106de565b8063e708a0f9146116aa578063e71dc3f5146116bf578063e76ed0e3146116d4576106de565b8063d4d90c251161016f578063dd62ed3e11610149578063dd62ed3e14611619578063e2f4560514611654578063e371f7cf14611669578063e4a1b95f14611695576106de565b8063d4d90c25146115bc578063d644c365146115d1578063d85ba06314611604576106de565b8063c55d2287116101ab578063c55d2287146114cb578063c6e5a5ab146114f5578063c9fa039614611574578063d2630cc314611589576106de565b8063c0a904a2146113e7578063c18bc19514611422578063c492f0461461144c576106de565b80639a7a23d6116102ab578063a9059cbb11610249578063ae5a17a711610223578063ae5a17a714611331578063afcf2fc414611364578063b62496f514611379578063c0246668146113ac576106de565b8063a9059cbb14611265578063ad56c13c1461129e578063adb873bd1461131c576106de565b8063a26579ad11610285578063a26579ad146111b1578063a457c2d7146111c6578063a5afbcb8146111ff578063a8b9d24014611232576106de565b80639a7a23d61461114c5780639c1b8af514611187578063a1dc92bc1461119c576106de565b806394305f4e11610318578063974d628c116102f2578063974d628c146110a757806398118cb4146110bc57806398eac156146110d1578063992c58e414611104576106de565b806394305f4e14611068578063956236411461107d57806395d89b4114611092576106de565b806388bdd9be1161035457806388bdd9be14610fc35780638ae1cf2214610ff65780638da5cb5b146110295780638f7142601461103e576106de565b80637a41865b14610f3357806381dcc26614610f66578063871c128d14610f99576106de565b80633d0c89631161052e5780635cce86cd1161045f578063700bb191116103fd578063715018a6116103d7578063715018a614610eac57806378109e5414610ec1578063783478ad14610ed657806379e02b4414610eeb576106de565b8063700bb19114610e3a57806370a0823114610e6457806370d5ae0514610e97576106de565b806365b8dbc01161043957806365b8dbc014610d955780636843cd8414610dc85780636a486a8e14610dfb5780636d1b229d14610e10576106de565b80635cce86cd14610d23578063616c594614610d5657806364b0f65314610d80576106de565b80634be8f8b1116104cc5780634e83ff6f116104a65780634e83ff6f14610c745780634fbee19314610caf57806354503bf714610ce25780635aa821a914610d0e576106de565b80634be8f8b114610c355780634d33b1ef14610c4a5780634e71d92d14610c5f576106de565b8063425b682e11610508578063425b682e14610bbb578063455a439614610bd0578063486b6d8614610c0b57806349bd5a5e14610c20576106de565b80633d0c896314610b2b5780633fe9092214610b5e578063407e378714610b91576106de565b80631fe70a981161060857806330bb4cff116105a657806335b5fb631161058057806335b5fb6314610a9e57806338b7692314610ab35780633950935114610ac85780633b364da814610b01576106de565b806330bb4cff14610a2b578063313ce56714610a4057806331e79db014610a6b576106de565b8063255e9d0a116105e2578063255e9d0a146109c257806325b61703146109d757806325e47531146109ec5780632c1f521614610a16576106de565b80631fe70a981461092057806322d3e2aa1461093557806323b872dd1461097f576106de565b8063122fe685116106755780631694505e1161064f5780631694505e146108ae57806318160ddd146108c35780631a221dbb146108d85780631bc8b18f146108ed576106de565b8063122fe685146108355780631283f1ca1461086657806313114a9d14610899576106de565b806308b2a12c116106b157806308b2a12c146107a9578063095ea7b3146107be5780630ccf21561461080b5780630d7f144114610820576106de565b806302259e9e146106e357806302df64d61461070a57806306fdde031461071f576106de565b366106de57005b600080fd5b3480156106ef57600080fd5b506106f8611857565b60408051918252519081900360200190f35b34801561071657600080fd5b506106f861185d565b34801561072b57600080fd5b50610734611863565b6040805160208082528351818301528351919283929083019185019080838360005b8381101561076e578181015183820152602001610756565b50505050905090810190601f16801561079b5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b3480156107b557600080fd5b506106f86118f9565b3480156107ca57600080fd5b506107f7600480360360408110156107e157600080fd5b506001600160a01b0381351690602001356118ff565b604080519115158252519081900360200190f35b34801561081757600080fd5b506106f861191d565b34801561082c57600080fd5b506106f8611923565b34801561084157600080fd5b5061084a611929565b604080516001600160a01b039092168252519081900360200190f35b34801561087257600080fd5b506106f86004803603602081101561088957600080fd5b50356001600160a01b0316611938565b3480156108a557600080fd5b506106f861194a565b3480156108ba57600080fd5b5061084a611950565b3480156108cf57600080fd5b506106f861195f565b3480156108e457600080fd5b506106f8611965565b3480156108f957600080fd5b506106f86004803603602081101561091057600080fd5b50356001600160a01b031661196b565b34801561092c57600080fd5b506106f861197d565b34801561094157600080fd5b5061097d600480360360c081101561095857600080fd5b5080359060208101359060408101359060608101359060808101359060a00135611983565b005b34801561098b57600080fd5b506107f7600480360360608110156109a257600080fd5b506001600160a01b03813581169160208101359091169060400135611a28565b3480156109ce57600080fd5b506106f8611aaf565b3480156109e357600080fd5b506106f8611ab5565b3480156109f857600080fd5b5061097d60048036036020811015610a0f57600080fd5b5035611abb565b348015610a2257600080fd5b5061084a611b22565b348015610a3757600080fd5b506106f8611b31565b348015610a4c57600080fd5b50610a55611ba7565b6040805160ff9092168252519081900360200190f35b348015610a7757600080fd5b5061097d60048036036020811015610a8e57600080fd5b50356001600160a01b0316611bb0565b348015610aaa57600080fd5b506106f8611c7b565b348015610abf57600080fd5b5061084a611c81565b348015610ad457600080fd5b506107f760048036036040811015610aeb57600080fd5b506001600160a01b038135169060200135611c90565b348015610b0d57600080fd5b5061097d60048036036020811015610b2457600080fd5b5035611cde565b348015610b3757600080fd5b5061097d60048036036020811015610b4e57600080fd5b50356001600160a01b0316611d8d565b348015610b6a57600080fd5b5061097d60048036036020811015610b8157600080fd5b50356001600160a01b0316611ea5565b348015610b9d57600080fd5b5061097d60048036036020811015610bb457600080fd5b5035611f29565b348015610bc757600080fd5b506107f7611f97565b348015610bdc57600080fd5b5061097d60048036036040811015610bf357600080fd5b506001600160a01b0381351690602001351515611fa0565b348015610c1757600080fd5b506107f7612083565b348015610c2c57600080fd5b5061084a612091565b348015610c4157600080fd5b506106f86120b5565b348015610c5657600080fd5b506107f76120bb565b348015610c6b57600080fd5b5061097d6120c4565b348015610c8057600080fd5b5061097d60048036036040811015610c9757600080fd5b506001600160a01b0381358116916020013516612149565b348015610cbb57600080fd5b506107f760048036036020811015610cd257600080fd5b50356001600160a01b03166122d1565b348015610cee57600080fd5b5061097d60048036036020811015610d0557600080fd5b503515156122ef565b348015610d1a57600080fd5b506106f8612364565b348015610d2f57600080fd5b506107f760048036036020811015610d4657600080fd5b50356001600160a01b031661236a565b348015610d6257600080fd5b5061097d60048036036020811015610d7957600080fd5b5035612388565b348015610d8c57600080fd5b506106f86123ef565b348015610da157600080fd5b5061097d60048036036020811015610db857600080fd5b50356001600160a01b0316612434565b348015610dd457600080fd5b506106f860048036036020811015610deb57600080fd5b50356001600160a01b0316612540565b348015610e0757600080fd5b506106f86125c3565b348015610e1c57600080fd5b5061097d60048036036020811015610e3357600080fd5b50356125c9565b348015610e4657600080fd5b5061097d60048036036020811015610e5d57600080fd5b503561265a565b348015610e7057600080fd5b506106f860048036036020811015610e8757600080fd5b50356001600160a01b0316612741565b348015610ea357600080fd5b5061084a61275c565b348015610eb857600080fd5b5061097d61276b565b348015610ecd57600080fd5b506106f861281d565b348015610ee257600080fd5b5061084a612823565b348015610ef757600080fd5b5061097d600480360360c0811015610f0e57600080fd5b5080359060208101359060408101359060608101359060808101359060a00135612832565b348015610f3f57600080fd5b506106f860048036036020811015610f5657600080fd5b50356001600160a01b03166128d1565b348015610f7257600080fd5b506106f860048036036020811015610f8957600080fd5b50356001600160a01b03166128e3565b348015610fa557600080fd5b5061097d60048036036020811015610fbc57600080fd5b50356128f5565b348015610fcf57600080fd5b5061097d60048036036020811015610fe657600080fd5b50356001600160a01b0316612a1c565b34801561100257600080fd5b5061097d6004803603602081101561101957600080fd5b50356001600160a01b0316612d0f565b34801561103557600080fd5b5061084a612dab565b34801561104a57600080fd5b5061097d6004803603602081101561106157600080fd5b5035612dbf565b34801561107457600080fd5b506106f8612e35565b34801561108957600080fd5b5061084a612e3b565b34801561109e57600080fd5b50610734612e4a565b3480156110b357600080fd5b506106f8612eab565b3480156110c857600080fd5b506106f8612eb1565b3480156110dd57600080fd5b5061097d600480360360208110156110f457600080fd5b50356001600160a01b0316612eb7565b34801561111057600080fd5b5061097d600480360360c081101561112757600080fd5b5080359060208101359060408101359060608101359060808101359060a00135612f3b565b34801561115857600080fd5b5061097d6004803603604081101561116f57600080fd5b506001600160a01b0381351690602001351515612fda565b34801561119357600080fd5b506106f86130b7565b3480156111a857600080fd5b506106f86130bd565b3480156111bd57600080fd5b506106f86130c3565b3480156111d257600080fd5b506107f7600480360360408110156111e957600080fd5b506001600160a01b038135169060200135613108565b34801561120b57600080fd5b5061097d6004803603602081101561122257600080fd5b50356001600160a01b0316613170565b34801561123e57600080fd5b506106f86004803603602081101561125557600080fd5b50356001600160a01b031661320c565b34801561127157600080fd5b506107f76004803603604081101561128857600080fd5b506001600160a01b03813516906020013561325d565b3480156112aa57600080fd5b506112d1600480360360208110156112c157600080fd5b50356001600160a01b0316613271565b604080516001600160a01b0390991689526020890197909752878701959095526060870193909352608086019190915260a085015260c084015260e083015251908190036101000190f35b34801561132857600080fd5b506106f8613351565b34801561133d57600080fd5b5061097d6004803603602081101561135457600080fd5b50356001600160a01b0316613357565b34801561137057600080fd5b5061084a6133f3565b34801561138557600080fd5b506107f76004803603602081101561139c57600080fd5b50356001600160a01b0316613402565b3480156113b857600080fd5b5061097d600480360360408110156113cf57600080fd5b506001600160a01b0381351690602001351515613417565b3480156113f357600080fd5b5061097d6004803603604081101561140a57600080fd5b506001600160a01b03813516906020013515156134a4565b34801561142e57600080fd5b5061097d6004803603602081101561144557600080fd5b5035613531565b34801561145857600080fd5b5061097d6004803603604081101561146f57600080fd5b81019060208101813564010000000081111561148a57600080fd5b82018360208201111561149c57600080fd5b803590602001918460208302840111640100000000831117156114be57600080fd5b91935091503515156135a7565b3480156114d757600080fd5b5061097d600480360360208110156114ee57600080fd5b50356136d1565b34801561150157600080fd5b5061097d6004803603604081101561151857600080fd5b81019060208101813564010000000081111561153357600080fd5b82018360208201111561154557600080fd5b8035906020019184602083028401116401000000008311171561156757600080fd5b9193509150351515613747565b34801561158057600080fd5b5061084a613804565b34801561159557600080fd5b5061097d600480360360208110156115ac57600080fd5b50356001600160a01b0316613813565b3480156115c857600080fd5b5061084a613897565b3480156115dd57600080fd5b5061097d600480360360208110156115f457600080fd5b50356001600160a01b03166138a6565b34801561161057600080fd5b506106f8613956565b34801561162557600080fd5b506106f86004803603604081101561163c57600080fd5b506001600160a01b038135811691602001351661395c565b34801561166057600080fd5b506106f8613987565b34801561167557600080fd5b5061097d6004803603602081101561168c57600080fd5b5035151561398d565b3480156116a157600080fd5b506106f8613a09565b3480156116b657600080fd5b506106f8613a0f565b3480156116cb57600080fd5b506106f8613a15565b3480156116e057600080fd5b5061084a613a1b565b3480156116f557600080fd5b506106f8613a2a565b34801561170a57600080fd5b5061097d6004803603602081101561172157600080fd5b5035613a6f565b34801561173457600080fd5b5061097d6004803603602081101561174b57600080fd5b5035613b1e565b34801561175e57600080fd5b506106f8613b89565b34801561177357600080fd5b506106f8613b8f565b34801561178857600080fd5b506112d16004803603602081101561179f57600080fd5b5035613b95565b3480156117b257600080fd5b5061097d600480360360208110156117c957600080fd5b50356001600160a01b0316613bfb565b3480156117e557600080fd5b506106f8613d09565b3480156117fa57600080fd5b5061097d6004803603602081101561181157600080fd5b5035613d0f565b34801561182457600080fd5b5061097d6004803603602081101561183b57600080fd5b5035613d76565b34801561184e57600080fd5b506106f8613df1565b600b5481565b60235481565b60038054604080516020601f60026000196101006001881615020190951694909404938401819004810282018101909252828152606093909290918301828280156118ef5780601f106118c4576101008083540402835291602001916118ef565b820191906000526020600020905b8154815290600101906020018083116118d257829003601f168201915b5050505050905090565b602a5481565b600061191361190c613e58565b8484613e5c565b5060015b92915050565b60195481565b60285481565b6039546001600160a01b031681565b600f6020526000908152604090205481565b601f5481565b6006546001600160a01b031681565b60025490565b60295481565b60116020526000908152604090205481565b60225481565b61198b613e58565b6001600160a01b031661199c612dab565b6001600160a01b0316146119e5576040805162461bcd60e51b81526020600482018190526024820152600080516020615b6d833981519152604482015290519081900360640190fd5b602a869055602b859055602784905560288390556029829055602c819055611a1d81611a17848187818a818e8e613df7565b90613df7565b602d55505050505050565b6000611a35848484613f48565b611aa584611a41613e58565b611aa085604051806060016040528060288152602001615b45602891396001600160a01b038a16600090815260016020526040812090611a7f613e58565b6001600160a01b031681526020810191909152604001600020549190614934565b613e5c565b5060019392505050565b60365481565b603a5481565b611ac3613e58565b6001600160a01b0316611ad4612dab565b6001600160a01b031614611b1d576040805162461bcd60e51b81526020600482018190526024820152600080516020615b6d833981519152604482015290519081900360640190fd5b600e55565b6008546001600160a01b031681565b600854604080516342d359d760e11b815290516000926001600160a01b0316916385a6b3ae916004808301926020929190829003018186803b158015611b7657600080fd5b505afa158015611b8a573d6000803e3d6000fd5b505050506040513d6020811015611ba057600080fd5b5051905090565b60055460ff1690565b611bb8613e58565b6001600160a01b0316611bc9612dab565b6001600160a01b031614611c12576040805162461bcd60e51b81526020600482018190526024820152600080516020615b6d833981519152604482015290519081900360640190fd5b6008546040805163031e79db60e41b81526001600160a01b038481166004830152915191909216916331e79db091602480830192600092919082900301818387803b158015611c6057600080fd5b505af1158015611c74573d6000803e3d6000fd5b5050505050565b60275481565b6018546001600160a01b031681565b6000611913611c9d613e58565b84611aa08560016000611cae613e58565b6001600160a01b03908116825260208083019390935260409182016000908120918c168152925290205490613df7565b611ce6613e58565b6001600160a01b0316611cf7612dab565b6001600160a01b031614611d40576040805162461bcd60e51b81526020600482018190526024820152600080516020615b6d833981519152604482015290519081900360640190fd5b60085460408051630766c9b560e31b81526004810184905290516001600160a01b0390921691633b364da89160248082019260009290919082900301818387803b158015611c6057600080fd5b611d95613e58565b6001600160a01b0316611da6612dab565b6001600160a01b031614611def576040805162461bcd60e51b81526020600482018190526024820152600080516020615b6d833981519152604482015290519081900360640190fd5b60085460408051633d0c896360e01b81526001600160a01b03848116600483015291519190921691633d0c896391602480830192600092919082900301818387803b158015611e3d57600080fd5b505af1158015611e51573d6000803e3d6000fd5b5050600780546001600160a01b0319166001600160a01b03858116918217928390556040519216935091507fc50953975bfb7dc05da466bc18236bf737c11097c9cc7ef9d079bc7ed96f03ae90600090a350565b611ead613e58565b6001600160a01b0316611ebe612dab565b6001600160a01b031614611f07576040805162461bcd60e51b81526020600482018190526024820152600080516020615b6d833981519152604482015290519081900360640190fd5b601780546001600160a01b0319166001600160a01b0392909216919091179055565b611f31613e58565b6001600160a01b0316611f42612dab565b6001600160a01b031614611f8b576040805162461bcd60e51b81526020600482018190526024820152600080516020615b6d833981519152604482015290519081900360640190fd5b611f94816149cb565b50565b60375460ff1681565b611fa8613e58565b6001600160a01b0316611fb9612dab565b6001600160a01b031614612002576040805162461bcd60e51b81526020600482018190526024820152600080516020615b6d833981519152604482015290519081900360640190fd5b6001600160a01b038281166000818152603b6020526040808220805460ff1916861515179055600854815163031e79db60e41b8152600481019490945290519316926331e79db092602480820193929182900301818387803b15801561206757600080fd5b505af115801561207b573d6000803e3d6000fd5b505050505050565b603754610100900460ff1681565b7f000000000000000000000000343bda4a1e49b97ff323c250797e110c15eff57b81565b601b5481565b603a5442101590565b6008546040805163bc4c4b3760e01b815233600482015260006024820181905291516001600160a01b039093169263bc4c4b3792604480840193602093929083900390910190829087803b15801561211b57600080fd5b505af115801561212f573d6000803e3d6000fd5b505050506040513d602081101561214557600080fd5b5050565b612151613e58565b6001600160a01b0316612162612dab565b6001600160a01b0316146121ab576040805162461bcd60e51b81526020600482018190526024820152600080516020615b6d833981519152604482015290519081900360640190fd5b603980546001600160a01b0319166001600160a01b03848116918217928390559182166000908152603e6020526040808220805460ff19166001179055600854815163031e79db60e41b8152600481019490945290519316926331e79db092602480820193929182900301818387803b15801561222757600080fd5b505af115801561223b573d6000803e3d6000fd5b5050505061224a826001613417565b6001600160a01b038082166000818152603e6020526040808220805460ff19166001179055600854815163031e79db60e41b8152600481019490945290519316926331e79db092602480820193929182900301818387803b1580156122ae57600080fd5b505af11580156122c2573d6000803e3d6000fd5b50505050612145816001613417565b6001600160a01b03166000908152603c602052604090205460ff1690565b6122f7613e58565b6001600160a01b0316612308612dab565b6001600160a01b031614612351576040805162461bcd60e51b81526020600482018190526024820152600080516020615b6d833981519152604482015290519081900360640190fd5b6037805460ff1916911515919091179055565b600a5481565b6001600160a01b03166000908152603d602052604090205460ff1690565b612390613e58565b6001600160a01b03166123a1612dab565b6001600160a01b0316146123ea576040805162461bcd60e51b81526020600482018190526024820152600080516020615b6d833981519152604482015290519081900360640190fd5b603a55565b600854604080516304ddf6ef60e11b815290516000926001600160a01b0316916309bbedde916004808301926020929190829003018186803b158015611b7657600080fd5b61243c613e58565b6001600160a01b031661244d612dab565b6001600160a01b031614612496576040805162461bcd60e51b81526020600482018190526024820152600080516020615b6d833981519152604482015290519081900360640190fd5b6006546001600160a01b03828116911614156124e35760405162461bcd60e51b81526004018080602001828103825260298152602001806159156029913960400191505060405180910390fd5b6006546040516001600160a01b03918216918316907f8fc842bbd331dfa973645f4ed48b11683d501ebf1352708d77a5da2ab49a576e90600090a3600680546001600160a01b0319166001600160a01b0392909216919091179055565b600854604080516370a0823160e01b81526001600160a01b038481166004830152915160009392909216916370a0823191602480820192602092909190829003018186803b15801561259157600080fd5b505afa1580156125a5573d6000803e3d6000fd5b505050506040513d60208110156125bb57600080fd5b505192915050565b602d5481565b6125d1613e58565b6001600160a01b03166125e2612dab565b6001600160a01b03161461262b576040805162461bcd60e51b81526020600482018190526024820152600080516020615b6d833981519152604482015290519081900360640190fd5b6000612635611ba7565b60095460ff91909116600a0a830291506121459030906001600160a01b031683614d11565b600854604080516001624d3b8760e01b03198152600481018490529051600092839283926001600160a01b039092169163ffb2c4799160248082019260609290919082900301818787803b1580156126b157600080fd5b505af11580156126c5573d6000803e3d6000fd5b505050506040513d60608110156126db57600080fd5b5080516020808301516040938401518451848152928301829052828501819052606083018990529351929650945091925032916000917fc864333d6121033635ab41b29ae52f10a22cf4438c3e4f1c4c68518feb2f8a989181900360800190a350505050565b6001600160a01b031660009081526020819052604090205490565b6009546001600160a01b031681565b612773613e58565b6001600160a01b0316612784612dab565b6001600160a01b0316146127cd576040805162461bcd60e51b81526020600482018190526024820152600080516020615b6d833981519152604482015290519081900360640190fd5b60055460405160009161010090046001600160a01b0316907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a360058054610100600160a81b0319169055565b600d5481565b6015546001600160a01b031681565b61283a613e58565b6001600160a01b031661284b612dab565b6001600160a01b031614612894576040805162461bcd60e51b81526020600482018190526024820152600080516020615b6d833981519152604482015290519081900360640190fd5b6023869055602485905560208490556021839055602282905560258190556128c681611a17848187818a818e8e613df7565b602655505050505050565b60106020526000908152604090205481565b60126020526000908152604090205481565b6128fd613e58565b6001600160a01b031661290e612dab565b6001600160a01b031614612957576040805162461bcd60e51b81526020600482018190526024820152600080516020615b6d833981519152604482015290519081900360640190fd5b62030d40811015801561296d57506207a1208111155b6129a85760405162461bcd60e51b815260040180806020018281038252603a815260200180615bf0603a913960400191505060405180910390fd5b6038548114156129e95760405162461bcd60e51b8152600401808060200182810382526032815260200180615af26032913960400191505060405180910390fd5b60385460405182907f40d7e40e79af4e8e5a9b3c57030d8ea93f13d669c06d448c4d631d4ae7d23db790600090a3603855565b612a24613e58565b6001600160a01b0316612a35612dab565b6001600160a01b031614612a7e576040805162461bcd60e51b81526020600482018190526024820152600080516020615b6d833981519152604482015290519081900360640190fd5b6008546001600160a01b0382811691161415612acb5760405162461bcd60e51b8152600401808060200182810382526033815260200180615a366033913960400191505060405180910390fd5b6000819050306001600160a01b0316816001600160a01b0316638da5cb5b6040518163ffffffff1660e01b815260040160206040518083038186803b158015612b1357600080fd5b505afa158015612b27573d6000803e3d6000fd5b505050506040513d6020811015612b3d57600080fd5b50516001600160a01b031614612b845760405162461bcd60e51b8152600401808060200182810382526047815260200180615a696047913960600191505060405180910390fd5b806001600160a01b03166331e79db0826040518263ffffffff1660e01b815260040180826001600160a01b03168152602001915050600060405180830381600087803b158015612bd357600080fd5b505af1158015612be7573d6000803e3d6000fd5b50506040805163031e79db60e41b815230600482015290516001600160a01b03851693506331e79db09250602480830192600092919082900301818387803b158015612c3257600080fd5b505af1158015612c46573d6000803e3d6000fd5b50506006546040805163031e79db60e41b81526001600160a01b039283166004820152905191851693506331e79db0925060248082019260009290919082900301818387803b158015612c9857600080fd5b505af1158015612cac573d6000803e3d6000fd5b50506008546040516001600160a01b03918216935090851691507f90c7d74461c613da5efa97d90740869367d74ab3aa5837aa4ae9a975f954b7a890600090a3600880546001600160a01b0319166001600160a01b039290921691909117905550565b612d17613e58565b6001600160a01b0316612d28612dab565b6001600160a01b031614612d71576040805162461bcd60e51b81526020600482018190526024820152600080516020615b6d833981519152604482015290519081900360640190fd5b601580546001600160a01b039092166001600160a01b0319909216821790556000908152603c60205260409020805460ff19166001179055565b60055461010090046001600160a01b031690565b612dc7613e58565b6001600160a01b0316612dd8612dab565b6001600160a01b031614612e21576040805162461bcd60e51b81526020600482018190526024820152600080516020615b6d833981519152604482015290519081900360640190fd5b612e29611ba7565b60ff16600a0a02600b55565b600e5481565b6013546001600160a01b031681565b60048054604080516020601f60026000196101006001881615020190951694909404938401819004810282018101909252828152606093909290918301828280156118ef5780601f106118c4576101008083540402835291602001916118ef565b60355481565b601d5481565b612ebf613e58565b6001600160a01b0316612ed0612dab565b6001600160a01b031614612f19576040805162461bcd60e51b81526020600482018190526024820152600080516020615b6d833981519152604482015290519081900360640190fd5b601680546001600160a01b0319166001600160a01b0392909216919091179055565b612f43613e58565b6001600160a01b0316612f54612dab565b6001600160a01b031614612f9d576040805162461bcd60e51b81526020600482018190526024820152600080516020615b6d833981519152604482015290519081900360640190fd5b601c869055601d8590556019849055601a839055601b829055601e819055612fcf81611a17848187818a818e8e613df7565b601f55505050505050565b612fe2613e58565b6001600160a01b0316612ff3612dab565b6001600160a01b03161461303c576040805162461bcd60e51b81526020600482018190526024820152600080516020615b6d833981519152604482015290519081900360640190fd5b7f000000000000000000000000343bda4a1e49b97ff323c250797e110c15eff57b6001600160a01b0316826001600160a01b031614156130ad5760405162461bcd60e51b815260040180806020018281038252604b815260200180615c4e604b913960600191505060405180910390fd5b6121458282614e6c565b60385481565b60215481565b60085460408051631bc9e27b60e21b815290516000926001600160a01b031691636f2789ec916004808301926020929190829003018186803b158015611b7657600080fd5b6000611913613115613e58565b84611aa085604051806060016040528060258152602001615c99602591396001600061313f613e58565b6001600160a01b03908116825260208083019390935260409182016000908120918d16815292529020549190614934565b613178613e58565b6001600160a01b0316613189612dab565b6001600160a01b0316146131d2576040805162461bcd60e51b81526020600482018190526024820152600080516020615b6d833981519152604482015290519081900360640190fd5b601380546001600160a01b039092166001600160a01b0319909216821790556000908152603c60205260409020805460ff19166001179055565b600854604080516302a2e74960e61b81526001600160a01b0384811660048301529151600093929092169163a8b9d24091602480820192602092909190829003018186803b15801561259157600080fd5b600061191361326a613e58565b8484613f48565b600080600080600080600080600860009054906101000a90046001600160a01b03166001600160a01b031663fbcbc0f18a6040518263ffffffff1660e01b815260040180826001600160a01b031681526020019150506101006040518083038186803b1580156132e057600080fd5b505afa1580156132f4573d6000803e3d6000fd5b505050506040513d61010081101561330b57600080fd5b508051602082015160408301516060840151608085015160a086015160c087015160e090970151959e50939c50919a509850965094509092509050919395975091939597565b602c5481565b61335f613e58565b6001600160a01b0316613370612dab565b6001600160a01b0316146133b9576040805162461bcd60e51b81526020600482018190526024820152600080516020615b6d833981519152604482015290519081900360640190fd5b601480546001600160a01b039092166001600160a01b0319909216821790556000908152603c60205260409020805460ff19166001179055565b6014546001600160a01b031681565b603f6020526000908152604090205460ff1681565b61341f613e58565b6001600160a01b0316613430612dab565b6001600160a01b031614613479576040805162461bcd60e51b81526020600482018190526024820152600080516020615b6d833981519152604482015290519081900360640190fd5b6001600160a01b03919091166000908152603c60205260409020805460ff1916911515919091179055565b6134ac613e58565b6001600160a01b03166134bd612dab565b6001600160a01b031614613506576040805162461bcd60e51b81526020600482018190526024820152600080516020615b6d833981519152604482015290519081900360640190fd5b6001600160a01b03919091166000908152603d60205260409020805460ff1916911515919091179055565b613539613e58565b6001600160a01b031661354a612dab565b6001600160a01b031614613593576040805162461bcd60e51b81526020600482018190526024820152600080516020615b6d833981519152604482015290519081900360640190fd5b61359b611ba7565b60ff16600a0a02600d55565b6135af613e58565b6001600160a01b03166135c0612dab565b6001600160a01b031614613609576040805162461bcd60e51b81526020600482018190526024820152600080516020615b6d833981519152604482015290519081900360640190fd5b60005b8281101561365e5781603c600086868581811061362557fe5b602090810292909201356001600160a01b0316835250810191909152604001600020805460ff191691151591909117905560010161360c565b507f7fdaf542373fa84f4ee8d662c642f44e4c2276a217d7d29e548b6eb29a233b35838383604051808060200183151581526020018281038252858582818152602001925060200280828437600083820152604051601f909101601f1916909201829003965090945050505050a1505050565b6136d9613e58565b6001600160a01b03166136ea612dab565b6001600160a01b031614613733576040805162461bcd60e51b81526020600482018190526024820152600080516020615b6d833981519152604482015290519081900360640190fd5b61373b611ba7565b60ff16600a0a02600c55565b61374f613e58565b6001600160a01b0316613760612dab565b6001600160a01b0316146137a9576040805162461bcd60e51b81526020600482018190526024820152600080516020615b6d833981519152604482015290519081900360640190fd5b60005b828110156137fe5781603d60008686858181106137c557fe5b602090810292909201356001600160a01b0316835250810191909152604001600020805460ff19169115159190911790556001016137ac565b50505050565b6017546001600160a01b031681565b61381b613e58565b6001600160a01b031661382c612dab565b6001600160a01b031614613875576040805162461bcd60e51b81526020600482018190526024820152600080516020615b6d833981519152604482015290519081900360640190fd5b601880546001600160a01b0319166001600160a01b0392909216919091179055565b6016546001600160a01b031681565b6138ae613e58565b6001600160a01b03166138bf612dab565b6001600160a01b031614613908576040805162461bcd60e51b81526020600482018190526024820152600080516020615b6d833981519152604482015290519081900360640190fd5b6008546040805163d644c36560e01b81526001600160a01b0384811660048301529151919092169163d644c36591602480830192600092919082900301818387803b158015611c6057600080fd5b60265481565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b600c5481565b613995613e58565b6001600160a01b03166139a6612dab565b6001600160a01b0316146139ef576040805162461bcd60e51b81526020600482018190526024820152600080516020615b6d833981519152604482015290519081900360640190fd5b603780549115156101000261ff0019909216919091179055565b60205481565b601c5481565b60255481565b6007546001600160a01b031681565b6008546040805163039e107b60e61b815290516000926001600160a01b03169163e7841ec0916004808301926020929190829003018186803b158015611b7657600080fd5b613a77613e58565b6001600160a01b0316613a88612dab565b6001600160a01b031614613ad1576040805162461bcd60e51b81526020600482018190526024820152600080516020615b6d833981519152604482015290519081900360640190fd5b6008546040805163e98030c760e01b81526004810184905290516001600160a01b039092169163e98030c79160248082019260009290919082900301818387803b158015611c6057600080fd5b613b26613e58565b6001600160a01b0316613b37612dab565b6001600160a01b031614613b80576040805162461bcd60e51b81526020600482018190526024820152600080516020615b6d833981519152604482015290519081900360640190fd5b611f9481614f9a565b601a5481565b60245481565b600080600080600080600080600860009054906101000a90046001600160a01b03166001600160a01b0316635183d6fd8a6040518263ffffffff1660e01b8152600401808281526020019150506101006040518083038186803b1580156132e057600080fd5b613c03613e58565b6001600160a01b0316613c14612dab565b6001600160a01b031614613c5d576040805162461bcd60e51b81526020600482018190526024820152600080516020615b6d833981519152604482015290519081900360640190fd5b6001600160a01b038116613ca25760405162461bcd60e51b815260040180806020018281038252602681526020018061593e6026913960400191505060405180910390fd5b6005546040516001600160a01b0380841692610100900416907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3600580546001600160a01b0390921661010002610100600160a81b0319909216919091179055565b602b5481565b613d17613e58565b6001600160a01b0316613d28612dab565b6001600160a01b031614613d71576040805162461bcd60e51b81526020600482018190526024820152600080516020615b6d833981519152604482015290519081900360640190fd5b603655565b613d7e613e58565b6001600160a01b0316613d8f612dab565b6001600160a01b031614613dd8576040805162461bcd60e51b81526020600482018190526024820152600080516020615b6d833981519152604482015290519081900360640190fd5b613de0611ba7565b60ff16600a0a8102600a8190555050565b601e5481565b600082820183811015613e51576040805162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b9392505050565b3390565b6001600160a01b038316613ea15760405162461bcd60e51b8152600401808060200182810382526024815260200180615c2a6024913960400191505060405180910390fd5b6001600160a01b038216613ee65760405162461bcd60e51b81526004018080602001828103825260228152602001806159646022913960400191505060405180910390fd5b6001600160a01b03808416600081815260016020908152604080832094871680845294825291829020859055815185815291517f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9259281900390910190a3505050565b6001600160a01b0383166000908152603b602052604090205460ff1615613fa05760405162461bcd60e51b81526004018080602001828103825260248152602001806159ac6024913960400191505060405180910390fd5b6001600160a01b0382166000908152603b602052604090205460ff1615613ff85760405162461bcd60e51b81526004018080602001828103825260248152602001806159ac6024913960400191505060405180910390fd5b6001600160a01b03831661403d5760405162461bcd60e51b81526004018080602001828103825260238152602001806158f26023913960400191505060405180910390fd5b6001600160a01b0382166140825760405162461bcd60e51b81526004018080602001828103825260238152602001806158f26023913960400191505060405180910390fd5b806140985761409383836000614d11565b61492f565b60006140a2612dab565b6001600160a01b0316846001600160a01b0316141580156140cb57506001600160a01b03831615155b80156140e257506001600160a01b03831661dead14155b801561410657506001600160a01b0384166000908152603f602052604090205460ff165b156141c6576001600160a01b0384166000908152603d602052604090205460ff1661416c57600a5482111561416c5760405162461bcd60e51b81526004018080602001828103825260288152602001806159d06028913960400191505060405180910390fd5b5060198054602e55601a8054602f55601b8054603055601c8054603155601d80546032819055603355601f805460345560205490955560215490935560225490915560235490556024549055602554601e55602654905560015b60006141d06120bb565b90508061422e576001600160a01b0385166000908152603e602052604090205460ff1661422e5760405162461bcd60e51b815260040180806020018281038252603e815260200180615b8d603e913960400191505060405180910390fd5b614236612dab565b6001600160a01b0316856001600160a01b0316141580156142615750600754600160a01b900460ff16155b801561426a5750805b801561428e57506001600160a01b0384166000908152603f602052604090205460ff165b80156142a857506006546001600160a01b03868116911614155b80156142cd57506001600160a01b0384166000908152603c602052604090205460ff16155b1561445557600e546001600160a01b0386166000908152601160205260409020544291011015614311576001600160a01b0385166000908152601260205260408120555b6001600160a01b0385166000908152603d602052604090205460ff1661438c57600b546001600160a01b0386166000908152601260205260409020548401111561438c5760405162461bcd60e51b8152600401808060200182810382526042815260200180615ab06042913960600191505060405180910390fd5b6001600160a01b038516600090815260126020526040902054156143cd576001600160a01b03851660009081526012602052604090208054840190556143f9565b6001600160a01b0385166000908152601160209081526040808320429055601290915290208054840190555b60198054602e55601a8054602f55601b8054603055601c8054603155601d8054603255601e8054603355601f8054603455602754909655602854909455602954909255602a549055602b549055602c549055602d549055600191505b600061446030612741565b600c549091508110158280156144735750805b80156144895750600754600160a01b900460ff16155b80156144ae57506001600160a01b0387166000908152603f602052604090205460ff16155b80156144c857506009546001600160a01b03888116911614155b80156144e257506009546001600160a01b03878116911614155b1561452b576007805460ff60a01b1916600160a01b179055600c54614506906149cb565b600061451130612741565b905061451c81614f9a565b506007805460ff60a01b191690555b60008380156145445750600754600160a01b900460ff16155b6001600160a01b0389166000908152603c602052604090205490915060ff168061458657506001600160a01b0387166000908152603c602052604090205460ff165b806145985750603754610100900460ff165b156145a1575060005b80806145aa5750845b1561468c576001600160a01b0388166000908152603c602052604090205460ff16806145ee57506001600160a01b0387166000908152603c602052604090205460ff165b156145f857614687565b6000614611601e54601f546151e790919063ffffffff16565b9050600061462a60646146248a85615244565b9061529d565b905060006146486064614624601e548c61524490919063ffffffff16565b905061465e816146588b856151e7565b906151e7565b985061466b8b3084614d11565b600954614683908c906001600160a01b031683614d11565b5050505b61471a565b6001600160a01b0388166000908152603c602052604090205460ff16806146cb57506001600160a01b0387166000908152603c602052604090205460ff165b156146d55761471a565b60006146f16064614624601e548a61524490919063ffffffff16565b90506146fd87826151e7565b600954909750614718908a906001600160a01b031683614d11565b505b614725888888614d11565b61472d615304565b6008546001600160a01b031663e30443bc8961474881612741565b6040518363ffffffff1660e01b815260040180836001600160a01b0316815260200182815260200192505050600060405180830381600087803b15801561478e57600080fd5b505af192505050801561479f575060015b506008546001600160a01b031663e30443bc886147bb81612741565b6040518363ffffffff1660e01b815260040180836001600160a01b0316815260200182815260200192505050600060405180830381600087803b15801561480157600080fd5b505af1925050508015614812575060015b5060355460075442919091101590600160a01b900460ff161580156148345750805b1561492857603854603654603580549091019055600854604080516001624d3b8760e01b031981526004810184905290516001600160a01b039092169163ffb2c479916024808201926060929091908290030181600087803b15801561489957600080fd5b505af19250505080156148cd57506040513d60608110156148b957600080fd5b508051602082015160409092015190919060015b6148d657614926565b604080518481526020810184905280820183905260608101869052905132916001917fc864333d6121033635ab41b29ae52f10a22cf4438c3e4f1c4c68518feb2f8a989181900360800190a35050505b505b5050505050505b505050565b600081848411156149c35760405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b83811015614988578181015183820152602001614970565b50505050905090810190601f1680156149b55780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b505050900390565b60008060006019546000146149f7576149f460646146246019548761524490919063ffffffff16565b92505b601a5415614a1c57614a196064614624601a548761524490919063ffffffff16565b91505b601b5415614a4157614a3e6064614624601b548761524490919063ffffffff16565b90505b8284038290038190036000614a5786600261529d565b90506000614a6683600261529d565b90506000614a7484836151e7565b905047614a8084615330565b6000614a8c47836151e7565b90506000806000601954600014614aba57614ab760646146246019548761524490919063ffffffff16565b92505b601a5415614adf57614adc6064614624601a548761524490919063ffffffff16565b91505b601b5415614b0457614b016064614624601b548761524490919063ffffffff16565b90505b828403829003819003868415614b9f576016546001600160a01b031615614b4857601654601354614b439187916001600160a01b0391821691166154c3565b614b9f565b6013546040516000916001600160a01b03169087908381818185875af1925050503d8060008114614b95576040519150601f19603f3d011682016040523d82523d6000602084013e614b9a565b606091505b505050505b8315614c30576017546001600160a01b031615614bd957601754601454614bd49186916001600160a01b0391821691166154c3565b614c30565b6014546040516000916001600160a01b03169086908381818185875af1925050503d8060008114614c26576040519150601f19603f3d011682016040523d82523d6000602084013e614c2b565b606091505b505050505b8215614cb65760375460ff1615614c5f57601554614c5a90849030906001600160a01b03166154c3565b614cb6565b6015546040516000916001600160a01b03169085908381818185875af1925050503d8060008114614cac576040519150601f19603f3d011682016040523d82523d6000602084013e614cb1565b606091505b505050505b614cc0818361565c565b604080518a8152602081018490528082018a905290517f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb5619181900360600190a1505050505050505050505050505050565b6001600160a01b038316614d565760405162461bcd60e51b8152600401808060200182810382526025815260200180615bcb6025913960400191505060405180910390fd5b6001600160a01b038216614d9b5760405162461bcd60e51b81526004018080602001828103825260238152602001806158f26023913960400191505060405180910390fd5b614da683838361492f565b614de381604051806060016040528060268152602001615986602691396001600160a01b0386166000908152602081905260409020549190614934565b6001600160a01b038085166000908152602081905260408082209390935590841681522054614e129082613df7565b6001600160a01b038084166000818152602081815260409182902094909455805185815290519193928716927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef92918290030190a3505050565b6001600160a01b0382166000908152603f602052604090205460ff1615158115151415614eca5760405162461bcd60e51b815260040180806020018281038252603e8152602001806159f8603e913960400191505060405180910390fd5b6001600160a01b0382166000908152603f60205260409020805460ff19168215801591909117909155614f5e576008546040805163031e79db60e41b81526001600160a01b038581166004830152915191909216916331e79db091602480830192600092919082900301818387803b158015614f4557600080fd5b505af1158015614f59573d6000803e3d6000fd5b505050505b604051811515906001600160a01b038416907fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab90600090a35050565b6008546007546001600160a01b0391821691600091829116156150c657614fc18430615714565b600754604080516370a0823160e01b815230600482015290516001600160a01b03909216916370a0823191602480820192602092909190829003018186803b15801561500c57600080fd5b505afa158015615020573d6000803e3d6000fd5b505050506040513d602081101561503657600080fd5b50516007546008546040805163a9059cbb60e01b81526001600160a01b03928316600482015260248101859052905193945091169163a9059cbb916044808201926020929091908290030181600087803b15801561509357600080fd5b505af11580156150a7573d6000803e3d6000fd5b505050506040513d60208110156150bd57600080fd5b5051915061513b565b476150d085615330565b60006150dc47836151e7565b6040519093508391506000906001600160a01b0387169083908381818185875af1925050503d806000811461512d576040519150601f19603f3d011682016040523d82523d6000602084013e615132565b606091505b50909550505050505b81156137fe576008546040805163b0c7ce3760e01b81526004810184905290516001600160a01b039092169163b0c7ce379160248082019260009290919082900301818387803b15801561518e57600080fd5b505af11580156151a2573d6000803e3d6000fd5b5050604080518781526020810185905281517f80195cc573b02cc48460cbca6e6e4cc85ddb91959d946e1c3025ea3d87942dc39450908190039091019150a150505050565b60008282111561523e576040805162461bcd60e51b815260206004820152601e60248201527f536166654d6174683a207375627472616374696f6e206f766572666c6f770000604482015290519081900360640190fd5b50900390565b60008261525357506000611917565b8282028284828161526057fe5b0414613e515760405162461bcd60e51b8152600401808060200182810382526021815260200180615b246021913960400191505060405180910390fd5b60008082116152f3576040805162461bcd60e51b815260206004820152601a60248201527f536166654d6174683a206469766973696f6e206279207a65726f000000000000604482015290519081900360640190fd5b8183816152fc57fe5b049392505050565b602e54601955602f54601a55603054601b55603154601c55603254601d55603354601e55603454601f55565b604080516002808252606082018352600092602083019080368337019050509050308160008151811061535f57fe5b6001600160a01b03928316602091820292909201810191909152600654604080516315ab88c960e31b81529051919093169263ad5c4648926004808301939192829003018186803b1580156153b357600080fd5b505afa1580156153c7573d6000803e3d6000fd5b505050506040513d60208110156153dd57600080fd5b50518151829060019081106153ee57fe5b6001600160a01b0392831660209182029290920101526006546154149130911684613e5c565b60065460405163791ac94760e01b8152600481018481526000602483018190523060648401819052426084850181905260a060448601908152875160a487015287516001600160a01b039097169663791ac947968a968a9594939092909160c40190602080880191028083838b5b8381101561549a578181015183820152602001615482565b505050509050019650505050505050600060405180830381600087803b15801561206757600080fd5b6040805160028082526060820183526000926020830190803683375050600654604080516315ab88c960e31b815290519394506001600160a01b039091169263ad5c464892506004808301926020929190829003018186803b15801561552857600080fd5b505afa15801561553c573d6000803e3d6000fd5b505050506040513d602081101561555257600080fd5b50518151829060009061556157fe5b60200260200101906001600160a01b031690816001600160a01b031681525050828160018151811061558f57fe5b6001600160a01b0392831660209182029290920181019190915260065460405163b6f9de9560e01b815260006004820181815287861660448401524260648401819052608060248501908152885160848601528851959097169663b6f9de95968c9694958a958c95939260a49092019187810191028083838b5b83811015615621578181015183820152602001615609565b50505050905001955050505050506000604051808303818588803b15801561564857600080fd5b505af1158015614928573d6000803e3d6000fd5b6006546156749030906001600160a01b031684613e5c565b6006546009546040805163f305d71960e01b81523060048201526024810186905260006044820181905260648201526001600160a01b0392831660848201524260a48201529051919092169163f305d71991849160c48082019260609290919082900301818588803b1580156156e957600080fd5b505af11580156156fd573d6000803e3d6000fd5b50505050506040513d60608110156137fe57600080fd5b6040805160038082526080820190925260009160208201606080368337019050509050308160008151811061574557fe5b6001600160a01b03928316602091820292909201810191909152600654604080516315ab88c960e31b81529051919093169263ad5c4648926004808301939192829003018186803b15801561579957600080fd5b505afa1580156157ad573d6000803e3d6000fd5b505050506040513d60208110156157c357600080fd5b50518151829060019081106157d457fe5b6001600160a01b0392831660209182029290920101526007548251911690829060029081106157ff57fe5b6001600160a01b0392831660209182029290920101526006546158259130911685613e5c565b600654604051635c11d79560e01b8152600481018581526000602483018190526001600160a01b038681166064850152426084850181905260a060448601908152875160a487015287519290961695635c11d795958a9589948b9493919260c40190602080880191028083838b5b838110156158ab578181015183820152602001615893565b505050509050019650505050505050600060405180830381600087803b1580156158d457600080fd5b505af11580156158e8573d6000803e3d6000fd5b5050505050505056fe45524332303a207472616e7366657220746f20746865207a65726f2061646472657373204146553a2054686520726f7574657220616c726561647920686173207468617420616464726573734f776e61626c653a206e6577206f776e657220697320746865207a65726f206164647265737345524332303a20617070726f766520746f20746865207a65726f206164647265737345524332303a207472616e7366657220616d6f756e7420657863656564732062616c616e6365426c61636b6c697374656420616464726573732063616e6e6f74207472616e73666572215472616e7366657220616d6f756e74206578636565647320746865206d61785478416d6f756e742e204146553a204175746f6d61746564206d61726b6574206d616b6572207061697220697320616c72656164792073657420746f20746861742076616c7565204146553a20546865206469766964656e6420747261636b657220616c72656164792068617320746861742061646472657373204146553a20546865206e6577206469766964656e6420747261636b6572206d757374206265206f776e656420627920746865202041465520746f6b656e20636f6e747261637453656c6c207472616e7366657220616d6f756e74206578636565647320746865206d617853656c6c416d6f756e7420666f722074686520676976656e2074696d652e204146553a2043616e6e6f742075706461746520676173466f7250726f63657373696e6720746f2073616d652076616c7565536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f7745524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e63654f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572204146553a2054686973206163636f756e742063616e6e6f742073656e6420746f6b656e7320756e74696c2074726164696e6720697320656e61626c656445524332303a207472616e736665722066726f6d20746865207a65726f2061646472657373204146553a20676173466f7250726f63657373696e67206d757374206265206265747765656e203230302c30303020616e64203530302c30303045524332303a20617070726f76652066726f6d20746865207a65726f2061646472657373204146553a205468652050616e63616b655377617020706169722063616e6e6f742062652072656d6f7665642066726f6d206175746f6d617465644d61726b65744d616b6572506169727345524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa2646970667358221220535c0cad5cf49d13c401d79f593ed35caa142b99ef09ea25b683341a5d69fc3e64736f6c63430007060033

Library Used


Deployed Bytecode Sourcemap

45051:32192:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;45458:62;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;46678:37;;;;;;;;;;;;;:::i;23070:91::-;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;47084:38;;;;;;;;;;;;;:::i;25216:169::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;25216:169:0;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;46199:28;;;;;;;;;;;;;:::i;47004:33::-;;;;;;;;;;;;;:::i;47999:42::-;;;;;;;;;;;;;:::i;:::-;;;;-1:-1:-1;;;;;47999:42:0;;;;;;;;;;;;;;45696:46;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;45696:46:0;-1:-1:-1;;;;;45696:46:0;;:::i;46418:120::-;;;;;;;;;;;;;:::i;45125:41::-;;;;;;;;;;;;;:::i;24169:108::-;;;;;;;;;;;;;:::i;47044:33::-;;;;;;;;;;;;;:::i;45803:44::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;45803:44:0;-1:-1:-1;;;;;45803:44:0;;:::i;46639:32::-;;;;;;;;;;;;;:::i;56301:546::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;56301:546:0;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;25867:321;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;25867:321:0;;;;;;;;;;;;;;;;;:::i;47806:34::-;;;;;;;;;;;;;:::i;48050:51::-;;;;;;;;;;;;;:::i;51979:109::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;51979:109:0;;:::i;45301:41::-;;;;;;;;;;;;;:::i;62110:141::-;;;;;;;;;;;;;:::i;24013:91::-;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;59853:294;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;59853:294:0;-1:-1:-1;;;;;59853:294:0;;:::i;46965:32::-;;;;;;;;;;;;;:::i;46130:40::-;;;;;;;;;;;;;:::i;26597:218::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;26597:218:0;;;;;;;;:::i;53358:181::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;53358:181:0;;:::i;53557:248::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;53557:248:0;-1:-1:-1;;;;;53557:248:0;;:::i;54713:134::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;54713:134:0;-1:-1:-1;;;;;54713:134:0;;:::i;51346:107::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;51346:107:0;;:::i;47853:35::-;;;;;;;;;;;;;:::i;59491:350::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;59491:350:0;;;;;;;;;;:::i;47895:42::-;;;;;;;;;;;;;:::i;45173:38::-;;;;;;;;;;;;;:::i;46270:29::-;;;;;;;;;;;;;:::i;64172:126::-;;;;;;;;;;;;;:::i;63784:94::-;;;;;;;;;;;;;:::i;56859:504::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;56859:504:0;;;;;;;;;;:::i;62259:125::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;62259:125:0;-1:-1:-1;;;;;62259:125:0;;:::i;52915:122::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;52915:122:0;;;;:::i;45390:61::-;;;;;;;;;;;;;:::i;62400:129::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;62400:129:0;-1:-1:-1;;;;;62400:129:0;;:::i;53208:137::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;53208:137:0;;:::i;64023:141::-;;;;;;;;;;;;;:::i;58152:315::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;58152:315:0;-1:-1:-1;;;;;58152:315:0;;:::i;62696:139::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;62696:139:0;-1:-1:-1;;;;;62696:139:0;;:::i;47208:148::-;;;;;;;;;;;;;:::i;55005:206::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;55005:206:0;;:::i;63505:271::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;63505:271:0;;:::i;24340:127::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;24340:127:0;-1:-1:-1;;;;;24340:127:0;;:::i;45351:26::-;;;;;;;;;;;;;:::i;15439:148::-;;;;;;;;;;;;;:::i;45590:53::-;;;;;;;;;;;;;:::i;45993:37::-;;;;;;;;;;;;;:::i;55747:538::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;55747:538:0;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;45749:47::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;45749:47:0;-1:-1:-1;;;;;45749:47:0;;:::i;45854:45::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;45854:45:0;-1:-1:-1;;;;;45854:45:0;;:::i;61450:404::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;61450:404:0;;:::i;57371:773::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;57371:773:0;-1:-1:-1;;;;;57371:773:0;;:::i;54320:237::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;54320:237:0;-1:-1:-1;;;;;54320:237:0;;:::i;14788:87::-;;;;;;;;;;;;;:::i;52107:159::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;52107:159:0;;:::i;45653:36::-;;;;;;;;;;;;;:::i;45906:::-;;;;;;;;;;;;;:::i;23280:95::-;;;;;;;;;;;;;:::i;47765:34::-;;;;;;;;;;;;;:::i;46347:31::-;;;;;;;;;;;;;:::i;54569:132::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;54569:132:0;-1:-1:-1;;;;;54569:132:0;;:::i;55217:514::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;55217:514:0;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;60765:264::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;60765:264:0;;;;;;;;;;:::i;47946:40::-;;;;;;;;;;;;;:::i;46600:32::-;;;;;;;;;;;;;:::i;61994:108::-;;;;;;;;;;;;;:::i;27318:269::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;27318:269:0;;;;;;;;:::i;53817:239::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;53817:239:0;-1:-1:-1;;;;;53817:239:0;;:::i;62537:151::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;62537:151:0;-1:-1:-1;;;;;62537:151:0;;:::i;24680:175::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;24680:175:0;;;;;;;;:::i;62843:318::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;62843:318:0;-1:-1:-1;;;;;62843:318:0;;:::i;:::-;;;;-1:-1:-1;;;;;62843:318:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;47171:30;;;;;;;;;;;;;:::i;54068:237::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;54068:237:0;-1:-1:-1;;;;;54068:237:0;;:::i;45949:37::-;;;;;;;;;;;;;:::i;48365:58::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;48365:58:0;-1:-1:-1;;;;;48365:58:0;;:::i;58475:356::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;58475:356:0;;;;;;;;;;:::i;58854:360::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;58854:360:0;;;;;;;;;;:::i;52277:156::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;52277:156:0;;:::i;60451:306::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;60451:306:0;-1:-1:-1;60451:306:0;;;;:::i;52446:156::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;52446:156:0;;:::i;59239:242::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;59239:242:0;-1:-1:-1;59239:242:0;;;;:::i;46083:40::-;;;;;;;;;;;;;:::i;54859:134::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;54859:134:0;-1:-1:-1;;;;;54859:134:0;;:::i;46037:39::-;;;;;;;;;;;;;:::i;60159:284::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;60159:284:0;-1:-1:-1;;;;;60159:284:0;;:::i;46799:141::-;;;;;;;;;;;;;:::i;24918:151::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;24918:151:0;;;;;;;;;;:::i;45527:56::-;;;;;;;;;;;;;:::i;53053:142::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;53053:142:0;;;;:::i;46562:31::-;;;;;;;;;;;;;:::i;46306:34::-;;;;;;;;;;;;;:::i;46763:29::-;;;;;;;;;;;;;:::i;45220:41::-;;;;;;;;;;;;;:::i;63886:129::-;;;;;;;;;;;;;:::i;61862:124::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;61862:124:0;;:::i;51469:119::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;51469:119:0;;:::i;46234:29::-;;;;;;;;;;;;;:::i;46722:34::-;;;;;;;;;;;;;:::i;63169:328::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;63169:328:0;;:::i;15742:244::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;15742:244:0;-1:-1:-1;;;;;15742:244:0;;:::i;47129:35::-;;;;;;;;;;;;;:::i;52780:117::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;52780:117:0;;:::i;52615:157::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;52615:157:0;;:::i;46385:26::-;;;;;;;;;;;;;:::i;45458:62::-;;;;:::o;46678:37::-;;;;:::o;23070:91::-;23148:5;23141:12;;;;;;;;-1:-1:-1;;23141:12:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23115:13;;23141:12;;23148:5;;23141:12;;23148:5;23141:12;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23070:91;:::o;47084:38::-;;;;:::o;25216:169::-;25299:4;25316:39;25325:12;:10;:12::i;:::-;25339:7;25348:6;25316:8;:39::i;:::-;-1:-1:-1;25373:4:0;25216:169;;;;;:::o;46199:28::-;;;;:::o;47004:33::-;;;;:::o;47999:42::-;;;-1:-1:-1;;;;;47999:42:0;;:::o;45696:46::-;;;;;;;;;;;;;:::o;46418:120::-;;;;:::o;45125:41::-;;;-1:-1:-1;;;;;45125:41:0;;:::o;24169:108::-;24257:12;;24169:108;:::o;47044:33::-;;;;:::o;45803:44::-;;;;;;;;;;;;;:::o;46639:32::-;;;;:::o;56301:546::-;15019:12;:10;:12::i;:::-;-1:-1:-1;;;;;15008:23:0;:7;:5;:7::i;:::-;-1:-1:-1;;;;;15008:23:0;;15000:68;;;;;-1:-1:-1;;;15000:68:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;15000:68:0;;;;;;;;;;;;;;;56484:19:::1;:38:::0;;;56533:16:::1;:32:::0;;;56576:13:::1;:26:::0;;;56613:14:::1;:28:::0;;;56652:14:::1;:28:::0;;;56691:11:::1;:22:::0;;;56740:99:::1;56705:8:::0;56740:85:::1;56669:11:::0;56740:85;56630:11;56740:85;56592:10;56740:85;56506:16;56552:13;56740:20:::1;:35::i;:::-;:39:::0;::::1;:51::i;:99::-;56724:13;:115:::0;-1:-1:-1;;;;;;56301:546:0:o;25867:321::-;25973:4;25990:36;26000:6;26008:9;26019:6;25990:9;:36::i;:::-;26037:121;26046:6;26054:12;:10;:12::i;:::-;26068:89;26106:6;26068:89;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;26068:19:0;;;;;;:11;:19;;;;;;26088:12;:10;:12::i;:::-;-1:-1:-1;;;;;26068:33:0;;;;;;;;;;;;-1:-1:-1;26068:33:0;;;:89;:37;:89::i;:::-;26037:8;:121::i;:::-;-1:-1:-1;26176:4:0;25867:321;;;;;:::o;47806:34::-;;;;:::o;48050:51::-;;;;:::o;51979:109::-;15019:12;:10;:12::i;:::-;-1:-1:-1;;;;;15008:23:0;:7;:5;:7::i;:::-;-1:-1:-1;;;;;15008:23:0;;15000:68;;;;;-1:-1:-1;;;15000:68:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;15000:68:0;;;;;;;;;;;;;;;52056:13:::1;:24:::0;51979:109::o;45301:41::-;;;-1:-1:-1;;;;;45301:41:0;;:::o;62110:141::-;62200:15;;:43;;;-1:-1:-1;;;62200:43:0;;;;62173:7;;-1:-1:-1;;;;;62200:15:0;;:41;;:43;;;;;;;;;;;;;;:15;:43;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;62200:43:0;;-1:-1:-1;62110:141:0;:::o;24013:91::-;24087:9;;;;24013:91;:::o;59853:294::-;15019:12;:10;:12::i;:::-;-1:-1:-1;;;;;15008:23:0;:7;:5;:7::i;:::-;-1:-1:-1;;;;;15008:23:0;;15000:68;;;;;-1:-1:-1;;;15000:68:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;15000:68:0;;;;;;;;;;;;;;;60042:15:::1;::::0;:45:::1;::::0;;-1:-1:-1;;;60042:45:0;;-1:-1:-1;;;;;60042:45:0;;::::1;;::::0;::::1;::::0;;;:15;;;::::1;::::0;:36:::1;::::0;:45;;;;;:15:::1;::::0;:45;;;;;;;:15;;:45;::::1;;::::0;::::1;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;59853:294:::0;:::o;46965:32::-;;;;:::o;46130:40::-;;;-1:-1:-1;;;;;46130:40:0;;:::o;26597:218::-;26685:4;26702:83;26711:12;:10;:12::i;:::-;26725:7;26734:50;26773:10;26734:11;:25;26746:12;:10;:12::i;:::-;-1:-1:-1;;;;;26734:25:0;;;;;;;;;;;;;;;;;-1:-1:-1;26734:25:0;;;:34;;;;;;;;;;;:38;:50::i;53358:181::-;15019:12;:10;:12::i;:::-;-1:-1:-1;;;;;15008:23:0;:7;:5;:7::i;:::-;-1:-1:-1;;;;;15008:23:0;;15000:68;;;;;-1:-1:-1;;;15000:68:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;15000:68:0;;;;;;;;;;;;;;;53461:15:::1;::::0;:70:::1;::::0;;-1:-1:-1;;;53461:70:0;;::::1;::::0;::::1;::::0;;;;;-1:-1:-1;;;;;53461:15:0;;::::1;::::0;:48:::1;::::0;:70;;;;;:15:::1;::::0;:70;;;;;;;;:15;;:70;::::1;;::::0;::::1;;;;::::0;::::1;53557:248:::0;15019:12;:10;:12::i;:::-;-1:-1:-1;;;;;15008:23:0;:7;:5;:7::i;:::-;-1:-1:-1;;;;;15008:23:0;;15000:68;;;;;-1:-1:-1;;;15000:68:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;15000:68:0;;;;;;;;;;;;;;;53639:15:::1;::::0;:50:::1;::::0;;-1:-1:-1;;;53639:50:0;;-1:-1:-1;;;;;53639:50:0;;::::1;;::::0;::::1;::::0;;;:15;;;::::1;::::0;:38:::1;::::0;:50;;;;;:15:::1;::::0;:50;;;;;;;:15;;:50;::::1;;::::0;::::1;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;-1:-1:-1::0;;53700:13:0::1;:26:::0;;-1:-1:-1;;;;;;53700:26:0::1;-1:-1:-1::0;;;;;53700:26:0;;::::1;::::0;;::::1;::::0;;;;53742:55:::1;::::0;53782:13;::::1;::::0;-1:-1:-1;53700:26:0;-1:-1:-1;53742:55:0::1;::::0;-1:-1:-1;;53742:55:0::1;53557:248:::0;:::o;54713:134::-;15019:12;:10;:12::i;:::-;-1:-1:-1;;;;;15008:23:0;:7;:5;:7::i;:::-;-1:-1:-1;;;;;15008:23:0;;15000:68;;;;;-1:-1:-1;;;15000:68:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;15000:68:0;;;;;;;;;;;;;;;54801:25:::1;:38:::0;;-1:-1:-1;;;;;;54801:38:0::1;-1:-1:-1::0;;;;;54801:38:0;;;::::1;::::0;;;::::1;::::0;;54713:134::o;51346:107::-;15019:12;:10;:12::i;:::-;-1:-1:-1;;;;;15008:23:0;:7;:5;:7::i;:::-;-1:-1:-1;;;;;15008:23:0;;15000:68;;;;;-1:-1:-1;;;15000:68:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;15000:68:0;;;;;;;;;;;;;;;51422:23:::1;51437:7;51422:14;:23::i;:::-;51346:107:::0;:::o;47853:35::-;;;;;;:::o;59491:350::-;15019:12;:10;:12::i;:::-;-1:-1:-1;;;;;15008:23:0;:7;:5;:7::i;:::-;-1:-1:-1;;;;;15008:23:0;;15000:68;;;;;-1:-1:-1;;;15000:68:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;15000:68:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;59691:23:0;;::::1;;::::0;;;:14:::1;:23;::::0;;;;;:34;;-1:-1:-1;;59691:34:0::1;::::0;::::1;;;::::0;;59736:15:::1;::::0;:45;;-1:-1:-1;;;59736:45:0;;::::1;::::0;::::1;::::0;;;;;;:15;::::1;::::0;:36:::1;::::0;:45;;;;;59691:23;59736:45;;;;;;59691:23;59736:15;:45;::::1;;::::0;::::1;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;59491:350:::0;;:::o;47895:42::-;;;;;;;;;:::o;45173:38::-;;;:::o;46270:29::-;;;;:::o;64172:126::-;64267:23;;64248:15;:42;;64172:126;:::o;63784:94::-;63821:15;;:49;;;-1:-1:-1;;;63821:49:0;;63852:10;63821:49;;;;:15;:49;;;;;;;;-1:-1:-1;;;;;63821:15:0;;;;:30;;:49;;;;;;;;;;;;;;;;;;:15;:49;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;63784:94:0:o;56859:504::-;15019:12;:10;:12::i;:::-;-1:-1:-1;;;;;15008:23:0;:7;:5;:7::i;:::-;-1:-1:-1;;;;;15008:23:0;;15000:68;;;;;-1:-1:-1;;;15000:68:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;15000:68:0;;;;;;;;;;;;;;;56963:14:::1;:32:::0;;-1:-1:-1;;;;;;56963:32:0::1;-1:-1:-1::0;;;;;56963:32:0;;::::1;::::0;;::::1;::::0;;;;57040:14;;::::1;-1:-1:-1::0;57006:49:0;;;:33:::1;:49;::::0;;;;;:56;;-1:-1:-1;;57006:56:0::1;-1:-1:-1::0;57006:56:0::1;::::0;;57073:15:::1;::::0;:53;;-1:-1:-1;;;57073:53:0;;::::1;::::0;::::1;::::0;;;;;;:15;::::1;::::0;:36:::1;::::0;:53;;;;;-1:-1:-1;57073:53:0;;;;;;-1:-1:-1;57073:15:0;:53;::::1;;::::0;::::1;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;57137:38;57153:15;57170:4;57137:15;:38::i;:::-;-1:-1:-1::0;;;;;57188:49:0;;::::1;;::::0;;;:33:::1;:49;::::0;;;;;:56;;-1:-1:-1;;57188:56:0::1;57240:4;57188:56;::::0;;57255:15:::1;::::0;:52;;-1:-1:-1;;;57255:52:0;;::::1;::::0;::::1;::::0;;;;;;:15;::::1;::::0;:36:::1;::::0;:52;;;;;57188:49;57255:52;;;;;;57188:49;57255:15;:52;::::1;;::::0;::::1;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;57318:37;57334:14;57350:4;57318:15;:37::i;62259:125::-:0;-1:-1:-1;;;;;62348:28:0;62324:4;62348:28;;;:19;:28;;;;;;;;;62259:125::o;52915:122::-;15019:12;:10;:12::i;:::-;-1:-1:-1;;;;;15008:23:0;:7;:5;:7::i;:::-;-1:-1:-1;;;;;15008:23:0;;15000:68;;;;;-1:-1:-1;;;15000:68:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;15000:68:0;;;;;;;;;;;;;;;52995:15:::1;:34:::0;;-1:-1:-1;;52995:34:0::1;::::0;::::1;;::::0;;;::::1;::::0;;52915:122::o;45390:61::-;;;;:::o;62400:129::-;-1:-1:-1;;;;;62491:30:0;62467:4;62491:30;;;:21;:30;;;;;;;;;62400:129::o;53208:137::-;15019:12;:10;:12::i;:::-;-1:-1:-1;;;;;15008:23:0;:7;:5;:7::i;:::-;-1:-1:-1;;;;;15008:23:0;;15000:68;;;;;-1:-1:-1;;;15000:68:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;15000:68:0;;;;;;;;;;;;;;;53297:23:::1;:40:::0;53208:137::o;64023:141::-;64115:15;;:41;;;-1:-1:-1;;;64115:41:0;;;;64088:7;;-1:-1:-1;;;;;64115:15:0;;:39;;:41;;;;;;;;;;;;;;:15;:41;;;;;;;;;;58152:315;15019:12;:10;:12::i;:::-;-1:-1:-1;;;;;15008:23:0;:7;:5;:7::i;:::-;-1:-1:-1;;;;;15008:23:0;;15000:68;;;;;-1:-1:-1;;;15000:68:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;15000:68:0;;;;;;;;;;;;;;;58263:15:::1;::::0;-1:-1:-1;;;;;58241:38:0;;::::1;58263:15:::0;::::1;58241:38;;58233:92;;;;-1:-1:-1::0;;;58233:92:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;58383:15;::::0;58341:59:::1;::::0;-1:-1:-1;;;;;58383:15:0;;::::1;::::0;58341:59;::::1;::::0;::::1;::::0;58383:15:::1;::::0;58341:59:::1;58411:15;:48:::0;;-1:-1:-1;;;;;;58411:48:0::1;-1:-1:-1::0;;;;;58411:48:0;;;::::1;::::0;;;::::1;::::0;;58152:315::o;62696:139::-;62793:15;;:34;;;-1:-1:-1;;;62793:34:0;;-1:-1:-1;;;;;62793:34:0;;;;;;;;;62766:7;;62793:15;;;;;:25;;:34;;;;;;;;;;;;;;;:15;:34;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;62793:34:0;;62696:139;-1:-1:-1;;62696:139:0:o;47208:148::-;;;;:::o;55005:206::-;15019:12;:10;:12::i;:::-;-1:-1:-1;;;;;15008:23:0;:7;:5;:7::i;:::-;-1:-1:-1;;;;;15008:23:0;;15000:68;;;;;-1:-1:-1;;;15000:68:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;15000:68:0;;;;;;;;;;;;;;;55081:18:::1;55126:10;:8;:10::i;:::-;55179:11;::::0;55122:14:::1;::::0;;;::::1;:2;:14;55102:35:::0;::::1;::::0;-1:-1:-1;55148:55:0::1;::::0;55172:4:::1;::::0;-1:-1:-1;;;;;55179:11:0::1;55102:35:::0;55148:15:::1;:55::i;63505:271::-:0;63637:15;;:28;;;-1:-1:-1;;;;;;63637:28:0;;;;;;;;;;63571:18;;;;;;-1:-1:-1;;;;;63637:15:0;;;;:23;;:28;;;;;;;;;;;;;;;63571:18;63637:15;:28;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;63637:28:0;;;;;;;;;;;;63681:87;;;;;;;;;;;;;;;;;63637:28;63681:87;;;;;;;63637:28;;-1:-1:-1;63637:28:0;-1:-1:-1;63637:28:0;;-1:-1:-1;63758:9:0;;63746:5;;63681:87;;;;;;;;;63505:271;;;;:::o;24340:127::-;-1:-1:-1;;;;;24441:18:0;24414:7;24441:18;;;;;;;;;;;;24340:127::o;45351:26::-;;;-1:-1:-1;;;;;45351:26:0;;:::o;15439:148::-;15019:12;:10;:12::i;:::-;-1:-1:-1;;;;;15008:23:0;:7;:5;:7::i;:::-;-1:-1:-1;;;;;15008:23:0;;15000:68;;;;;-1:-1:-1;;;15000:68:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;15000:68:0;;;;;;;;;;;;;;;15530:6:::1;::::0;15509:40:::1;::::0;15546:1:::1;::::0;15530:6:::1;::::0;::::1;-1:-1:-1::0;;;;;15530:6:0::1;::::0;15509:40:::1;::::0;15546:1;;15509:40:::1;15560:6;:19:::0;;-1:-1:-1;;;;;;15560:19:0::1;::::0;;15439:148::o;45590:53::-;;;;:::o;45993:37::-;;;-1:-1:-1;;;;;45993:37:0;;:::o;55747:538::-;15019:12;:10;:12::i;:::-;-1:-1:-1;;;;;15008:23:0;:7;:5;:7::i;:::-;-1:-1:-1;;;;;15008:23:0;;15000:68;;;;;-1:-1:-1;;;15000:68:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;15000:68:0;;;;;;;;;;;;;;;55929:18:::1;:37:::0;;;55977:15:::1;:31:::0;;;56019:12:::1;:25:::0;;;56055:13:::1;:27:::0;;;56093:13:::1;:27:::0;;;56131:10:::1;:21:::0;;;56178:99:::1;56144:8:::0;56178:85:::1;56109:11:::0;56178:85;56071:11;56178:85;56034:10;56178:85;55950:16;55995:13;56178:20:::1;:35::i;:99::-;56163:12;:114:::0;-1:-1:-1;;;;;;55747:538:0:o;45749:47::-;;;;;;;;;;;;;:::o;45854:45::-;;;;;;;;;;;;;:::o;61450:404::-;15019:12;:10;:12::i;:::-;-1:-1:-1;;;;;15008:23:0;:7;:5;:7::i;:::-;-1:-1:-1;;;;;15008:23:0;;15000:68;;;;;-1:-1:-1;;;15000:68:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;15000:68:0;;;;;;;;;;;;;;;61548:6:::1;61536:8;:18;;:40;;;;;61570:6;61558:8;:18;;61536:40;61528:111;;;;-1:-1:-1::0;;;61528:111:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;61670:16;;61658:8;:28;;61650:91;;;;-1:-1:-1::0;;;61650:91:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;61791:16;::::0;61757:51:::1;::::0;61781:8;;61757:51:::1;::::0;;;::::1;61819:16;:27:::0;61450:404::o;57371:773::-;15019:12;:10;:12::i;:::-;-1:-1:-1;;;;;15008:23:0;:7;:5;:7::i;:::-;-1:-1:-1;;;;;15008:23:0;;15000:68;;;;;-1:-1:-1;;;15000:68:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;15000:68:0;;;;;;;;;;;;;;;57482:15:::1;::::0;-1:-1:-1;;;;;57460:38:0;;::::1;57482:15:::0;::::1;57460:38;;57452:102;;;;-1:-1:-1::0;;;57452:102:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;57568:37;57636:10;57568:80;;57707:4;-1:-1:-1::0;;;;;57669:43:0::1;:18;-1:-1:-1::0;;;;;57669:24:0::1;;:26;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;-1:-1:-1::0;57669:26:0;-1:-1:-1;;;;;57669:43:0::1;;57661:127;;;;-1:-1:-1::0;;;57661:127:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;57801:18;-1:-1:-1::0;;;;;57801:39:0::1;;57849:18;57801:68;;;;;;;;;;;;;-1:-1:-1::0;;;;;57801:68:0::1;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;-1:-1:-1::0;;57880:54:0::1;::::0;;-1:-1:-1;;;57880:54:0;;57928:4:::1;57880:54;::::0;::::1;::::0;;;-1:-1:-1;;;;;57880:39:0;::::1;::::0;-1:-1:-1;57880:39:0::1;::::0;-1:-1:-1;57880:54:0;;;;;-1:-1:-1;;57880:54:0;;;;;;;-1:-1:-1;57880:39:0;:54;::::1;;::::0;::::1;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;-1:-1:-1::0;;57993:15:0::1;::::0;57945:65:::1;::::0;;-1:-1:-1;;;57945:65:0;;-1:-1:-1;;;;;57993:15:0;;::::1;57945:65;::::0;::::1;::::0;;;:39;;::::1;::::0;-1:-1:-1;57945:39:0::1;::::0;-1:-1:-1;57945:65:0;;;;;57993:15:::1;::::0;57945:65;;;;;;;;57993:15;57945:39;:65;::::1;;::::0;::::1;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;-1:-1:-1::0;;58070:15:0::1;::::0;58028:59:::1;::::0;-1:-1:-1;;;;;58070:15:0;;::::1;::::0;-1:-1:-1;58028:59:0;;::::1;::::0;-1:-1:-1;58028:59:0::1;::::0;58070:15:::1;::::0;58028:59:::1;58100:15;:36:::0;;-1:-1:-1;;;;;;58100:36:0::1;-1:-1:-1::0;;;;;58100:36:0;;;::::1;::::0;;;::::1;::::0;;-1:-1:-1;57371:773:0:o;54320:237::-;15019:12;:10;:12::i;:::-;-1:-1:-1;;;;;15008:23:0;:7;:5;:7::i;:::-;-1:-1:-1;;;;;15008:23:0;;15000:68;;;;;-1:-1:-1;;;15000:68:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;15000:68:0;;;;;;;;;;;;;;;54408:14:::1;:27:::0;;-1:-1:-1;;;;;54408:27:0;;::::1;-1:-1:-1::0;;;;;;54408:27:0;;::::1;::::0;::::1;::::0;;:14:::1;54446:31:::0;;;:19:::1;:31;::::0;;;;:38;;-1:-1:-1;;54446:38:0::1;54408:27:::0;54446:38:::1;::::0;;54320:237::o;14788:87::-;14861:6;;;;;-1:-1:-1;;;;;14861:6:0;;14788:87::o;52107:159::-;15019:12;:10;:12::i;:::-;-1:-1:-1;;;;;15008:23:0;:7;:5;:7::i;:::-;-1:-1:-1;;;;;15008:23:0;;15000:68;;;;;-1:-1:-1;;;15000:68:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;15000:68:0;;;;;;;;;;;;;;;52247:10:::1;:8;:10::i;:::-;52243:14;;:2;:14;52219:39;52192:24;:66:::0;52107:159::o;45653:36::-;;;;:::o;45906:::-;;;-1:-1:-1;;;;;45906:36:0;;:::o;23280:95::-;23360:7;23353:14;;;;;;;;-1:-1:-1;;23353:14:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23327:13;;23353:14;;23360:7;;23353:14;;23360:7;23353:14;;;;;;;;;;;;;;;;;;;;;;;;47765:34;;;;:::o;46347:31::-;;;;:::o;54569:132::-;15019:12;:10;:12::i;:::-;-1:-1:-1;;;;;15008:23:0;:7;:5;:7::i;:::-;-1:-1:-1;;;;;15008:23:0;;15000:68;;;;;-1:-1:-1;;;15000:68:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;15000:68:0;;;;;;;;;;;;;;;54656:24:::1;:37:::0;;-1:-1:-1;;;;;;54656:37:0::1;-1:-1:-1::0;;;;;54656:37:0;;;::::1;::::0;;;::::1;::::0;;54569:132::o;55217:514::-;15019:12;:10;:12::i;:::-;-1:-1:-1;;;;;15008:23:0;:7;:5;:7::i;:::-;-1:-1:-1;;;;;15008:23:0;;15000:68;;;;;-1:-1:-1;;;15000:68:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;15000:68:0;;;;;;;;;;;;;;;55396:15:::1;:34:::0;;;55441:12:::1;:28:::0;;;55480:9:::1;:22:::0;;;55513:10:::1;:24:::0;;;55548:10:::1;:24:::0;;;55583:7:::1;:18:::0;;;55624:99:::1;55593:8:::0;55624:85:::1;55561:11:::0;55624:85;55526:11;55624:85;55492:10;55624:85;55414:16;55456:13;55624:20:::1;:35::i;:99::-;55612:9;:111:::0;-1:-1:-1;;;;;;55217:514:0:o;60765:264::-;15019:12;:10;:12::i;:::-;-1:-1:-1;;;;;15008:23:0;:7;:5;:7::i;:::-;-1:-1:-1;;;;;15008:23:0;;15000:68;;;;;-1:-1:-1;;;15000:68:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;15000:68:0;;;;;;;;;;;;;;;60874:13:::1;-1:-1:-1::0;;;;;60866:21:0::1;:4;-1:-1:-1::0;;;;;60866:21:0::1;;;60858:109;;;;-1:-1:-1::0;;;60858:109:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;60980:41;61009:4;61015:5;60980:28;:41::i;47946:40::-:0;;;;:::o;46600:32::-;;;;:::o;61994:108::-;62067:15;;:27;;;-1:-1:-1;;;62067:27:0;;;;62040:7;;-1:-1:-1;;;;;62067:15:0;;:25;;:27;;;;;;;;;;;;;;:15;:27;;;;;;;;;;27318:269;27411:4;27428:129;27437:12;:10;:12::i;:::-;27451:7;27460:96;27499:15;27460:96;;;;;;;;;;;;;;;;;:11;:25;27472:12;:10;:12::i;:::-;-1:-1:-1;;;;;27460:25:0;;;;;;;;;;;;;;;;;-1:-1:-1;27460:25:0;;;:34;;;;;;;;;;;:96;:38;:96::i;53817:239::-;15019:12;:10;:12::i;:::-;-1:-1:-1;;;;;15008:23:0;:7;:5;:7::i;:::-;-1:-1:-1;;;;;15008:23:0;;15000:68;;;;;-1:-1:-1;;;15000:68:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;15000:68:0;;;;;;;;;;;;;;;53904:13:::1;:26:::0;;-1:-1:-1;;;;;53904:26:0;;::::1;-1:-1:-1::0;;;;;;53904:26:0;;::::1;::::0;::::1;::::0;;:13:::1;53941:31:::0;;;:19:::1;:31;::::0;;;;:38;;-1:-1:-1;;53941:38:0::1;53904:26:::0;53941:38:::1;::::0;;53817:239::o;62537:151::-;62633:15;;:47;;;-1:-1:-1;;;62633:47:0;;-1:-1:-1;;;;;62633:47:0;;;;;;;;;62606:7;;62633:15;;;;;:38;;:47;;;;;;;;;;;;;;;:15;:47;;;;;;;;;;24680:175;24766:4;24783:42;24793:12;:10;:12::i;:::-;24807:9;24818:6;24783:9;:42::i;62843:318::-;62939:7;62961:6;62982;63003:7;63025;63047;63069;63091;63118:15;;;;;;;;;-1:-1:-1;;;;;63118:15:0;-1:-1:-1;;;;;63118:26:0;;63145:7;63118:35;;;;;;;;;;;;;-1:-1:-1;;;;;63118:35:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;63118:35:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;63118:35:0;;-1:-1:-1;63118:35:0;;-1:-1:-1;63118:35:0;-1:-1:-1;63118:35:0;-1:-1:-1;63118:35:0;-1:-1:-1;63118:35:0;;-1:-1:-1;63118:35:0;-1:-1:-1;62843:318:0;;;;;;;;;:::o;47171:30::-;;;;:::o;54068:237::-;15019:12;:10;:12::i;:::-;-1:-1:-1;;;;;15008:23:0;:7;:5;:7::i;:::-;-1:-1:-1;;;;;15008:23:0;;15000:68;;;;;-1:-1:-1;;;15000:68:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;15000:68:0;;;;;;;;;;;;;;;54156:14:::1;:27:::0;;-1:-1:-1;;;;;54156:27:0;;::::1;-1:-1:-1::0;;;;;;54156:27:0;;::::1;::::0;::::1;::::0;;:14:::1;54194:31:::0;;;:19:::1;:31;::::0;;;;:38;;-1:-1:-1;;54194:38:0::1;54156:27:::0;54194:38:::1;::::0;;54068:237::o;45949:37::-;;;-1:-1:-1;;;;;45949:37:0;;:::o;48365:58::-;;;;;;;;;;;;;;;:::o;58475:356::-;15019:12;:10;:12::i;:::-;-1:-1:-1;;;;;15008:23:0;:7;:5;:7::i;:::-;-1:-1:-1;;;;;15008:23:0;;15000:68;;;;;-1:-1:-1;;;15000:68:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;15000:68:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;58674:28:0;;;::::1;;::::0;;;:19:::1;:28;::::0;;;;:39;;-1:-1:-1;;58674:39:0::1;::::0;::::1;;::::0;;;::::1;::::0;;58475:356::o;58854:360::-;15019:12;:10;:12::i;:::-;-1:-1:-1;;;;;15008:23:0;:7;:5;:7::i;:::-;-1:-1:-1;;;;;15008:23:0;;15000:68;;;;;-1:-1:-1;;;15000:68:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;15000:68:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;59055:30:0;;;::::1;;::::0;;;:21:::1;:30;::::0;;;;:41;;-1:-1:-1;;59055:41:0::1;::::0;::::1;;::::0;;;::::1;::::0;;58854:360::o;52277:156::-;15019:12;:10;:12::i;:::-;-1:-1:-1;;;;;15008:23:0;:7;:5;:7::i;:::-;-1:-1:-1;;;;;15008:23:0;;15000:68;;;;;-1:-1:-1;;;15000:68:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;15000:68:0;;;;;;;;;;;;;;;52414:10:::1;:8;:10::i;:::-;52410:14;;:2;:14;52386:39;52368:15;:57:::0;52277:156::o;60451:306::-;15019:12;:10;:12::i;:::-;-1:-1:-1;;;;;15008:23:0;:7;:5;:7::i;:::-;-1:-1:-1;;;;;15008:23:0;;15000:68;;;;;-1:-1:-1;;;15000:68:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;15000:68:0;;;;;;;;;;;;;;;60570:9:::1;60566:115;60585:19:::0;;::::1;60566:115;;;60661:8;60626:19;:32;60646:8;;60655:1;60646:11;;;;;;;;::::0;;::::1;::::0;;;::::1;;-1:-1:-1::0;;;;;60646:11:0::1;60626:32:::0;;-1:-1:-1;60626:32:0;::::1;::::0;;;;;;-1:-1:-1;60626:32:0;:43;;-1:-1:-1;;60626:43:0::1;::::0;::::1;;::::0;;;::::1;::::0;;-1:-1:-1;60606:3:0::1;60566:115;;;;60698:51;60730:8;;60740;60698:51;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;;::::1;::::0;::::1;::::0;::::1;::::0;;::::1;-1:-1:-1::0;;60698:51:0::1;::::0;;::::1;::::0;;::::1;::::0;-1:-1:-1;60698:51:0;;-1:-1:-1;;;;;60698:51:0::1;60451:306:::0;;;:::o;52446:156::-;15019:12;:10;:12::i;:::-;-1:-1:-1;;;;;15008:23:0;:7;:5;:7::i;:::-;-1:-1:-1;;;;;15008:23:0;;15000:68;;;;;-1:-1:-1;;;15000:68:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;15000:68:0;;;;;;;;;;;;;;;52583:10:::1;:8;:10::i;:::-;52579:14;;:2;:14;52555:39;52534:18;:60:::0;52446:156::o;59239:242::-;15019:12;:10;:12::i;:::-;-1:-1:-1;;;;;15008:23:0;:7;:5;:7::i;:::-;-1:-1:-1;;;;;15008:23:0;;15000:68;;;;;-1:-1:-1;;;15000:68:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;15000:68:0;;;;;;;;;;;;;;;59360:9:::1;59356:117;59375:19:::0;;::::1;59356:117;;;59453:8;59416:21;:34;59438:8;;59447:1;59438:11;;;;;;;;::::0;;::::1;::::0;;;::::1;;-1:-1:-1::0;;;;;59438:11:0::1;59416:34:::0;;-1:-1:-1;59416:34:0;::::1;::::0;;;;;;-1:-1:-1;59416:34:0;:45;;-1:-1:-1;;59416:45:0::1;::::0;::::1;;::::0;;;::::1;::::0;;-1:-1:-1;59396:3:0::1;59356:117;;;;59239:242:::0;;;:::o;46083:40::-;;;-1:-1:-1;;;;;46083:40:0;;:::o;54859:134::-;15019:12;:10;:12::i;:::-;-1:-1:-1;;;;;15008:23:0;:7;:5;:7::i;:::-;-1:-1:-1;;;;;15008:23:0;;15000:68;;;;;-1:-1:-1;;;15000:68:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;15000:68:0;;;;;;;;;;;;;;;54947:25:::1;:38:::0;;-1:-1:-1;;;;;;54947:38:0::1;-1:-1:-1::0;;;;;54947:38:0;;;::::1;::::0;;;::::1;::::0;;54859:134::o;46037:39::-;;;-1:-1:-1;;;;;46037:39:0;;:::o;60159:284::-;15019:12;:10;:12::i;:::-;-1:-1:-1;;;;;15008:23:0;:7;:5;:7::i;:::-;-1:-1:-1;;;;;15008:23:0;;15000:68;;;;;-1:-1:-1;;;15000:68:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;15000:68:0;;;;;;;;;;;;;;;60343:15:::1;::::0;:40:::1;::::0;;-1:-1:-1;;;60343:40:0;;-1:-1:-1;;;;;60343:40:0;;::::1;;::::0;::::1;::::0;;;:15;;;::::1;::::0;:31:::1;::::0;:40;;;;;:15:::1;::::0;:40;;;;;;;:15;;:40;::::1;;::::0;::::1;;;;::::0;::::1;46799:141:::0;;;;:::o;24918:151::-;-1:-1:-1;;;;;25034:18:0;;;25007:7;25034:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;24918:151::o;45527:56::-;;;;:::o;53053:142::-;15019:12;:10;:12::i;:::-;-1:-1:-1;;;;;15008:23:0;:7;:5;:7::i;:::-;-1:-1:-1;;;;;15008:23:0;;15000:68;;;;;-1:-1:-1;;;15000:68:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;15000:68:0;;;;;;;;;;;;;;;53143:22:::1;:44:::0;;;::::1;;;;-1:-1:-1::0;;53143:44:0;;::::1;::::0;;;::::1;::::0;;53053:142::o;46562:31::-;;;;:::o;46306:34::-;;;;:::o;46763:29::-;;;;:::o;45220:41::-;;;-1:-1:-1;;;;;45220:41:0;;:::o;63886:129::-;63968:15;;:39;;;-1:-1:-1;;;63968:39:0;;;;63941:7;;-1:-1:-1;;;;;63968:15:0;;:37;;:39;;;;;;;;;;;;;;:15;:39;;;;;;;;;;61862:124;15019:12;:10;:12::i;:::-;-1:-1:-1;;;;;15008:23:0;:7;:5;:7::i;:::-;-1:-1:-1;;;;;15008:23:0;;15000:68;;;;;-1:-1:-1;;;15000:68:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;15000:68:0;;;;;;;;;;;;;;;61936:15:::1;::::0;:42:::1;::::0;;-1:-1:-1;;;61936:42:0;;::::1;::::0;::::1;::::0;;;;;-1:-1:-1;;;;;61936:15:0;;::::1;::::0;:31:::1;::::0;:42;;;;;:15:::1;::::0;:42;;;;;;;;:15;;:42;::::1;;::::0;::::1;;;;::::0;::::1;51469:119:::0;15019:12;:10;:12::i;:::-;-1:-1:-1;;;;;15008:23:0;:7;:5;:7::i;:::-;-1:-1:-1;;;;;15008:23:0;;15000:68;;;;;-1:-1:-1;;;15000:68:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;15000:68:0;;;;;;;;;;;;;;;51551:29:::1;51572:7;51551:20;:29::i;46234:::-:0;;;;:::o;46722:34::-;;;;:::o;63169:328::-;63270:7;63292:6;63313;63334:7;63356;63378;63400;63422;63449:15;;;;;;;;;-1:-1:-1;;;;;63449:15:0;-1:-1:-1;;;;;63449:33:0;;63483:5;63449:40;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15742:244;15019:12;:10;:12::i;:::-;-1:-1:-1;;;;;15008:23:0;:7;:5;:7::i;:::-;-1:-1:-1;;;;;15008:23:0;;15000:68;;;;;-1:-1:-1;;;15000:68:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;15000:68:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;15831:22:0;::::1;15823:73;;;;-1:-1:-1::0;;;15823:73:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15933:6;::::0;15912:38:::1;::::0;-1:-1:-1;;;;;15912:38:0;;::::1;::::0;15933:6:::1;::::0;::::1;;::::0;15912:38:::1;::::0;;;::::1;15961:6;:17:::0;;-1:-1:-1;;;;;15961:17:0;;::::1;;;-1:-1:-1::0;;;;;;15961:17:0;;::::1;::::0;;;::::1;::::0;;15742:244::o;47129:35::-;;;;:::o;52780:117::-;15019:12;:10;:12::i;:::-;-1:-1:-1;;;;;15008:23:0;:7;:5;:7::i;:::-;-1:-1:-1;;;;;15008:23:0;;15000:68;;;;;-1:-1:-1;;;15000:68:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;15000:68:0;;;;;;;;;;;;;;;52861:12:::1;:28:::0;52780:117::o;52615:157::-;15019:12;:10;:12::i;:::-;-1:-1:-1;;;;;15008:23:0;:7;:5;:7::i;:::-;-1:-1:-1;;;;;15008:23:0;;15000:68;;;;;-1:-1:-1;;;15000:68:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;15000:68:0;;;;;;;;;;;;;;;52753:10:::1;:8;:10::i;:::-;52749:14;;:2;:14;52725:20;:39;52699:23;:65;;;;52615:157:::0;:::o;46385:26::-;;;;:::o;34703:179::-;34761:7;34793:5;;;34817:6;;;;34809:46;;;;;-1:-1:-1;;;34809:46:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;34873:1;34703:179;-1:-1:-1;;;34703:179:0:o;3422:106::-;3510:10;3422:106;:::o;30465:346::-;-1:-1:-1;;;;;30567:19:0;;30559:68;;;;-1:-1:-1;;;30559:68:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;30646:21:0;;30638:68;;;;-1:-1:-1;;;30638:68:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;30719:18:0;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;:36;;;30771:32;;;;;;;;;;;;;;;;;30465:346;;;:::o;70621:6613::-;-1:-1:-1;;;;;70754:20:0;;;;;;:14;:20;;;;;;;;70753:21;70745:70;;;;-1:-1:-1;;;70745:70:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;70835:18:0;;;;;;:14;:18;;;;;;;;70834:19;70826:68;;;;-1:-1:-1;;;70826:68:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;70913:18:0;;70905:66;;;;-1:-1:-1;;;70905:66:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;70990:16:0;;70982:64;;;;-1:-1:-1;;;70982:64:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;71060:11;71057:92;;71088:28;71104:4;71110:2;71114:1;71088:15;:28::i;:::-;71131:7;;71057:92;71161:14;71220:7;:5;:7::i;:::-;-1:-1:-1;;;;;71212:15:0;:4;-1:-1:-1;;;;;71212:15:0;;;:48;;;;-1:-1:-1;;;;;;71244:16:0;;;;71212:48;:86;;;;-1:-1:-1;;;;;;71277:21:0;;71291:6;71277:21;;71212:86;:134;;;;-1:-1:-1;;;;;;71315:31:0;;;;;;:25;:31;;;;;;;;71212:134;71194:1043;;;-1:-1:-1;;;;;71377:27:0;;;;;;:21;:27;;;;;;;;71373:198;;71456:23;;71446:6;:33;;71420:135;;;;-1:-1:-1;;;71420:135:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;71607:9:0;;;71587:17;:29;71652:10;;;71631:18;:31;71698:10;;;71677:18;:31;71749:15;;;71723:23;:41;71802:12;;;71779:20;:35;;;71829:15;:30;71894:9;;;71874:17;:29;71930:12;;71918:24;;;71970:13;;71957:26;;;72011:13;;71998:26;;;72057:18;;72039:36;;72105:15;;72090:30;;72145:10;;72135:7;:20;72182:12;;72170:24;;-1:-1:-1;71194:1043:0;72257:21;72281;:19;:21::i;:::-;72257:45;;72327:16;72323:163;;-1:-1:-1;;;;;72368:39:0;;;;;;:33;:39;;;;;;;;72360:114;;;;-1:-1:-1;;;72360:114:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;72524:7;:5;:7::i;:::-;-1:-1:-1;;;;;72516:15:0;:4;-1:-1:-1;;;;;72516:15:0;;;:41;;;;-1:-1:-1;72549:8:0;;-1:-1:-1;;;72549:8:0;;;;72548:9;72516:41;:74;;;;;72574:16;72516:74;:120;;;;-1:-1:-1;;;;;;72607:29:0;;;;;;:25;:29;;;;;;;;72516:120;:236;;;;-1:-1:-1;72736:15:0;;-1:-1:-1;;;;;72720:32:0;;;72736:15;;72720:32;;72516:236;:341;;;;-1:-1:-1;;;;;;72834:23:0;;;;;;:19;:23;;;;;;;;72833:24;72516:341;72498:1909;;;72972:13;;-1:-1:-1;;;;;72954:15:0;;;;;;:9;:15;;;;;;72988;72954:31;;:49;72951:108;;;-1:-1:-1;;;;;73023:16:0;;73042:1;73023:16;;;:10;:16;;;;;:20;72951:108;-1:-1:-1;;;;;73079:27:0;;;;;;:21;:27;;;;;;;;73075:292;;73163:24;;-1:-1:-1;;;;;73143:16:0;;;;;;:10;:16;;;;;;73134:25;;:53;;73126:132;;;;-1:-1:-1;;;73126:132:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;73438:16:0;;73457:1;73438:16;;;:10;:16;;;;;;:20;73434:277;;-1:-1:-1;;;;;73479:16:0;;;;;;:10;:16;;;;;:26;;;;;;73434:277;;;-1:-1:-1;;;;;73544:15:0;;;;;;:9;:15;;;;;;;;73562;73544:33;;73669:10;:16;;;;;:26;;;;;;73434:277;73761:9;;;73741:17;:29;73806:10;;;73785:18;:31;73852:10;;;73831:18;:31;73903:15;;;73877:23;:41;73956:12;;;73933:20;:35;74001:7;;;73983:15;:25;74043:9;;;74023:17;:29;74079:13;;74067:25;;;74120:14;;74107:27;;;74162:14;;74149:27;;;74209:19;;74191:37;;74258:16;;74243:31;;74299:11;;74289:21;;74337:13;;74325:25;;-1:-1:-1;;;72498:1909:0;74419:28;74450:24;74468:4;74450:9;:24::i;:::-;74534:18;;74419:55;;-1:-1:-1;74510:42:0;;;74582:16;:41;;;;;74616:7;74582:41;:67;;;;-1:-1:-1;74641:8:0;;-1:-1:-1;;;74641:8:0;;;;74640:9;74582:67;:116;;;;-1:-1:-1;;;;;;74667:31:0;;;;;;:25;:31;;;;;;;;74666:32;74582:116;:152;;;;-1:-1:-1;74723:11:0;;-1:-1:-1;;;;;74715:19:0;;;74723:11;;74715:19;;74582:152;:186;;;;-1:-1:-1;74757:11:0;;-1:-1:-1;;;;;74751:17:0;;;74757:11;;74751:17;;74582:186;74565:667;;;74795:8;:15;;-1:-1:-1;;;;74795:15:0;-1:-1:-1;;;74795:15:0;;;75059:18;;75044:34;;:14;:34::i;:::-;75095:18;75116:24;75134:4;75116:9;:24::i;:::-;75095:45;;75155:32;75176:10;75155:20;:32::i;:::-;-1:-1:-1;75204:8:0;:16;;-1:-1:-1;;;;75204:16:0;;;74565:667;75246:12;75261:16;:29;;;;-1:-1:-1;75282:8:0;;-1:-1:-1;;;75282:8:0;;;;75281:9;75261:29;-1:-1:-1;;;;;75391:25:0;;;;;;:19;:25;;;;;;75246:44;;-1:-1:-1;75391:25:0;;;:52;;-1:-1:-1;;;;;;75420:23:0;;;;;;:19;:23;;;;;;;;75391:52;:78;;;-1:-1:-1;75447:22:0;;;;;;;75391:78;75388:125;;;-1:-1:-1;75496:5:0;75388:125;75528:7;:20;;;;75539:9;75528:20;75525:940;;;-1:-1:-1;;;;;75569:25:0;;;;;;:19;:25;;;;;;;;;:52;;-1:-1:-1;;;;;;75598:23:0;;;;;;:19;:23;;;;;;;;75569:52;75566:538;;;;;;75740:15;75758:22;75772:7;;75758:9;;:13;;:22;;;;:::i;:::-;75740:40;-1:-1:-1;75795:17:0;75815:28;75839:3;75815:19;:6;75740:40;75815:10;:19::i;:::-;:23;;:28::i;:::-;75795:48;;75858:15;75876:28;75900:3;75876:19;75887:7;;75876:6;:10;;:19;;;;:::i;:28::-;75858:46;-1:-1:-1;75928:37:0;75858:46;75928:21;:6;75939:9;75928:10;:21::i;:::-;:25;;:37::i;:::-;75919:46;;75980:47;75996:4;76010;76017:9;75980:15;:47::i;:::-;76064:11;;76042:46;;76058:4;;-1:-1:-1;;;;;76064:11:0;76077:10;76042:15;:46::i;:::-;75566:538;;;;75525:940;;;-1:-1:-1;;;;;76137:25:0;;;;;;:19;:25;;;;;;;;;:52;;-1:-1:-1;;;;;;76166:23:0;;;;;;:19;:23;;;;;;;;76137:52;76134:320;;;;;;76285:15;76303:28;76327:3;76303:19;76314:7;;76303:6;:10;;:19;;;;:::i;:28::-;76285:46;-1:-1:-1;76355:22:0;:6;76285:46;76355:10;:22::i;:::-;76414:11;;76346:31;;-1:-1:-1;76392:46:0;;76408:4;;-1:-1:-1;;;;;76414:11:0;76427:10;76392:15;:46::i;:::-;76134:320;;76487:33;76503:4;76509:2;76513:6;76487:15;:33::i;:::-;76535:13;:11;:13::i;:::-;76575:15;;-1:-1:-1;;;;;76575:15:0;:26;76610:4;76617:15;76610:4;76617:9;:15::i;:::-;76575:58;;;;;;;;;;;;;-1:-1:-1;;;;;76575:58:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;76571:74;76659:15;;-1:-1:-1;;;;;76659:15:0;:26;76694:2;76699:13;76694:2;76699:9;:13::i;:::-;76659:54;;;;;;;;;;;;;-1:-1:-1;;;;;76659:54:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;76655:70;76775:19;;76811:8;;76756:15;:38;;;;;;-1:-1:-1;;;76811:8:0;;;;76810:9;:24;;;;;76823:11;76810:24;76807:420;;;76865:16;;76919:12;;76896:19;:35;;;;;;;76950:15;;:28;;;-1:-1:-1;;;;;;76950:28:0;;;;;;;;;;-1:-1:-1;;;;;76950:15:0;;;;:23;;:28;;;;;;;;;;;;;;;76851:11;76950:15;:28;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;76950:28:0;;;;;;;;;;;;;;;;76946:270;;;;;77076:86;;;;;;;;;;;;;;;;;;;;;;;;;;77152:9;;77141:4;;77076:86;;;;;;;;;76979:199;;;76946:270;76807:420;;70621:6613;;;;;;;;;;:::o;37530:166::-;37616:7;37652:12;37644:6;;;;37636:29;;;;-1:-1:-1;;;37636:29:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;37683:5:0;;;37530:166::o;64306:2952::-;64366:21;64398:22;64431;64477:9;;64490:1;64477:14;64474:91;;64523:30;64549:3;64523:21;64534:9;;64523:6;:10;;:21;;;;:::i;:30::-;64507:46;;64474:91;64578:10;;:15;64575:94;;64626:31;64653:3;64626:22;64637:10;;64626:6;:10;;:22;;;;:::i;:31::-;64609:48;;64575:94;64682:10;;:15;64679:94;;64730:31;64757:3;64730:22;64741:10;;64730:6;:10;;:22;;;;:::i;:31::-;64713:48;;64679:94;64810:22;;;:39;;;:56;;;64785:22;64947:13;64810:6;64958:1;64947:10;:13::i;:::-;64928:32;-1:-1:-1;64971:12:0;64986:21;:14;65005:1;64986:18;:21::i;:::-;64971:36;-1:-1:-1;65018:17:0;65038:24;:14;64971:36;65038:18;:24::i;:::-;65018:44;-1:-1:-1;65365:21:0;65431:26;65448:8;65431:16;:26::i;:::-;65586:18;65607:41;:21;65633:14;65607:25;:41::i;:::-;65586:62;;65661:24;65696:25;65732;65773:9;;65786:1;65773:14;65770:98;;65822:34;65852:3;65822:25;65837:9;;65822:10;:14;;:25;;;;:::i;:34::-;65803:53;;65770:98;65881:10;;:15;65878:101;;65932:35;65963:3;65932:26;65947:10;;65932;:14;;:26;;;;:::i;:35::-;65912:55;;65878:101;65992:10;;:15;65989:101;;66043:35;66074:3;66043:26;66058:10;;66043;:14;;:26;;;;:::i;:35::-;66023:55;;65989:101;66133:29;;;:49;;;:69;;;66233:9;66258:21;;66255:274;;66294:24;;-1:-1:-1;;;;;66294:24:0;:38;66291:237;;66383:24;;66409:13;;66348:75;;66365:16;;-1:-1:-1;;;;;66383:24:0;;;;66409:13;66348:16;:75::i;:::-;66291:237;;;66469:13;;:47;;66455:9;;-1:-1:-1;;;;;66469:13:0;;66495:16;;66455:9;66469:47;66455:9;66469:47;66495:16;66469:13;:47;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;66291:237:0;66544:22;;66541:289;;66589:25;;-1:-1:-1;;;;;66589:25:0;:39;66586:243;;66680:25;;66707:14;;66644:78;;66661:17;;-1:-1:-1;;;;;66680:25:0;;;;66707:14;66644:16;:78::i;:::-;66586:243;;;66768:14;;:49;;66754:9;;-1:-1:-1;;;;;66768:14:0;;66795:17;;66754:9;66768:49;66754:9;66768:49;66795:17;66768:14;:49;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;66586:243:0;66853:22;;66850:253;;66898:15;;;;66895:207;;;66980:14;;66929:66;;66946:17;;66973:4;;-1:-1:-1;;;;;66980:14:0;66929:16;:66::i;:::-;66895:207;;;67041:14;;:49;;67027:9;;-1:-1:-1;;;;;67041:14:0;;67068:17;;67027:9;67041:49;67027:9;67041:49;67068:17;67041:14;:49;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;66895:207:0;67152:37;67165:9;67176:12;67152;:37::i;:::-;67205:45;;;;;;;;;;;;;;;;;;;;;;;;;;;;;64306:2952;;;;;;;;;;;;;;;:::o;28077:539::-;-1:-1:-1;;;;;28183:20:0;;28175:70;;;;-1:-1:-1;;;28175:70:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;28264:23:0;;28256:71;;;;-1:-1:-1;;;28256:71:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28340:47;28361:6;28369:9;28380:6;28340:20;:47::i;:::-;28420:71;28442:6;28420:71;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;28420:17:0;;:9;:17;;;;;;;;;;;;:71;:21;:71::i;:::-;-1:-1:-1;;;;;28400:17:0;;;:9;:17;;;;;;;;;;;:91;;;;28525:20;;;;;;;:32;;28550:6;28525:24;:32::i;:::-;-1:-1:-1;;;;;28502:20:0;;;:9;:20;;;;;;;;;;;;:55;;;;28573:35;;;;;;;28502:20;;28573:35;;;;;;;;;;;;;28077:539;;;:::o;61037:405::-;-1:-1:-1;;;;;61128:31:0;;;;;;:25;:31;;;;;;;;:40;;;;;;;61120:115;;;;-1:-1:-1;;;61120:115:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;61246:31:0;;;;;;:25;:31;;;;;:39;;-1:-1:-1;;61246:39:0;;;;;;;;;;;;61298:79;;61323:15;;:42;;;-1:-1:-1;;;61323:42:0;;-1:-1:-1;;;;;61323:42:0;;;;;;;;;:15;;;;;:36;;:42;;;;;:15;;:42;;;;;;;:15;;:42;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;61298:79;61394:40;;;;;;-1:-1:-1;;;;;61394:40:0;;;;;;;;61037:405;;:::o;67305:942::-;67408:15;;67497:13;;-1:-1:-1;;;;;67408:15:0;;;;67370:27;;;;67497:13;:27;67494:593;;67540:42;67560:6;67576:4;67540:19;:42::i;:::-;67616:13;;67609:46;;;-1:-1:-1;;;67609:46:0;;67649:4;67609:46;;;;;;-1:-1:-1;;;;;67616:13:0;;;;67609:31;;:46;;;;;;;;;;;;;;;67616:13;67609:46;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;67609:46:0;67687:13;;67719:15;;67680:67;;;-1:-1:-1;;;67680:67:0;;-1:-1:-1;;;;;67719:15:0;;;67680:67;;;;;;;;;;;;67609:46;;-1:-1:-1;67687:13:0;;;67680:30;;:67;;;;;67609:46;;67680:67;;;;;;;;67687:13;;67680:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;67680:67:0;;-1:-1:-1;67494:593:0;;;67803:21;67839:24;67856:6;67839:16;:24::i;:::-;67878:18;67899:41;:21;67925:14;67899:25;:41::i;:::-;68007:39;;67878:62;;-1:-1:-1;67878:62:0;;-1:-1:-1;67993:9:0;;-1:-1:-1;;;;;68007:16:0;;;67878:62;;67993:9;68007:39;67993:9;68007:39;67878:62;68007:16;:39;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;67992:54:0;;-1:-1:-1;;;;;67494:593:0;68101:7;68097:143;;;68125:15;;:51;;;-1:-1:-1;;;68125:51:0;;;;;;;;;;-1:-1:-1;;;;;68125:15:0;;;;:40;;:51;;;;;:15;;:51;;;;;;;;:15;;:51;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;68196:32:0;;;;;;;;;;;;;;;;-1:-1:-1;68196:32:0;;;;;;;;-1:-1:-1;68196:32:0;67305:942;;;;:::o;35165:158::-;35223:7;35256:1;35251;:6;;35243:49;;;;;-1:-1:-1;;;35243:49:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;35310:5:0;;;35165:158::o;35582:220::-;35640:7;35664:6;35660:20;;-1:-1:-1;35679:1:0;35672:8;;35660:20;35703:5;;;35707:1;35703;:5;:1;35727:5;;;;;:10;35719:56;;;;-1:-1:-1;;;35719:56:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;36280:153;36338:7;36370:1;36366;:5;36358:44;;;;;-1:-1:-1;;;36358:44:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;36424:1;36420;:5;;;;;;;36280:153;-1:-1:-1;;;36280:153:0:o;51594:366::-;51653:17;;51641:9;:29;51698:18;;51685:10;:31;51744:18;;51731:10;:31;51795:23;;51777:15;:41;51848:20;;51833:12;:35;51893:15;;51883:7;:25;51935:17;;51923:9;:29;51594:366::o;68798:603::-;68952:16;;;68966:1;68952:16;;;;;;;;68928:21;;68952:16;;;;;;;;;;-1:-1:-1;68952:16:0;68928:40;;68997:4;68979;68984:1;68979:7;;;;;;;;-1:-1:-1;;;;;68979:23:0;;;:7;;;;;;;;;;:23;;;;69023:15;;:22;;;-1:-1:-1;;;69023:22:0;;;;:15;;;;;:20;;:22;;;;;68979:7;;69023:22;;;;;:15;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;69023:22:0;69013:7;;:4;;69018:1;;69013:7;;;;;;-1:-1:-1;;;;;69013:32:0;;;:7;;;;;;;;;:32;69090:15;;69058:62;;69075:4;;69090:15;69108:11;69058:8;:62::i;:::-;69159:15;;:224;;-1:-1:-1;;;69159:224:0;;;;;;;;:15;:224;;;;;;69337:4;69159:224;;;;;;69357:15;69159:224;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;69159:15:0;;;;:66;;69240:11;;69310:4;;69337;69357:15;69159:224;;;;;;;;;;;;;;;;:15;:224;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;68254:538;68442:16;;;68456:1;68442:16;;;;;;;;68418:21;;68442:16;;;;;;;;-1:-1:-1;;68479:15:0;;:22;;;-1:-1:-1;;;68479:22:0;;;;68418:40;;-1:-1:-1;;;;;;68479:15:0;;;;:20;;-1:-1:-1;68479:22:0;;;;;;;;;;;;;;:15;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;68479:22:0;68469:7;;:4;;68474:1;;68469:7;;;;;;;;;:32;-1:-1:-1;;;;;68469:32:0;;;-1:-1:-1;;;;;68469:32:0;;;;;68522:12;68512:4;68517:1;68512:7;;;;;;;;-1:-1:-1;;;;;68512:22:0;;;:7;;;;;;;;;;:22;;;;68573:15;;:211;;-1:-1:-1;;;68573:211:0;;:15;:211;;;;;;;;;;;;;68758:15;68573:211;;;;;;;;;;;;;;;;;;;;;:15;;;;;:66;;68647:9;;68573:15;;68716:4;;68735:8;;68573:211;;;;;;;;;;;;;;;:15;:211;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;70076:537;70267:15;;70235:62;;70252:4;;-1:-1:-1;;;;;70267:15:0;70285:11;70235:8;:62::i;:::-;70339:15;;70543:11;;70339:256;;;-1:-1:-1;;;70339:256:0;;70411:4;70339:256;;;;;;;;;;:15;:256;;;;;;;;;;-1:-1:-1;;;;;70543:11:0;;;70339:256;;;;70569:15;70339:256;;;;;;:15;;;;;:31;;70378:9;;70339:256;;;;;;;;;;;;;;;70378:9;70339:15;:256;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;69407:663;69587:16;;;69601:1;69587:16;;;;;;;;;69563:21;;69587:16;;;;;;;;;;-1:-1:-1;69587:16:0;69563:40;;69632:4;69614;69619:1;69614:7;;;;;;;;-1:-1:-1;;;;;69614:23:0;;;:7;;;;;;;;;;:23;;;;69658:15;;:22;;;-1:-1:-1;;;69658:22:0;;;;:15;;;;;:20;;:22;;;;;69614:7;;69658:22;;;;;:15;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;69658:22:0;69648:7;;:4;;69653:1;;69648:7;;;;;;-1:-1:-1;;;;;69648:32:0;;;:7;;;;;;;;;:32;69701:13;;69691:7;;69701:13;;;69691:4;;69696:1;;69691:7;;;;;;-1:-1:-1;;;;;69691:23:0;;;:7;;;;;;;;;:23;69759:15;;69727:62;;69744:4;;69759:15;69777:11;69727:8;:62::i;:::-;69828:15;;:224;;-1:-1:-1;;;69828:224:0;;;;;;;;:15;:224;;;;;;-1:-1:-1;;;;;69828:224:0;;;;;;;70026:15;69828:224;;;;;;;;;;;;;;;;;;;;;:15;;;;;:69;;69912:11;;69983:4;;70002:9;;70026:15;69828:224;;;;;;;;;;;;;;:15;:224;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;69407:663;;;:::o

Swarm Source

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