ETH Price: $3,334.47 (-1.19%)
Gas: 8 Gwei

Token

Yu-Gi-Eth! (YGE)
 

Overview

Max Total Supply

100,000,000,000 YGE

Holders

201

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 9 Decimals)

Balance
7,893.474724096 YGE

Value
$0.00
0xd70cf54d6481e5a21e11d0c319f357e05ff4dc2f
Loading...
Loading
Loading...
Loading
Loading...
Loading

Click here to update the token information / general information
# Exchange Pair Price  24H Volume % Volume

Contract Source Code Verified (Exact Match)

Contract Name:
YGE

Compiler Version
v0.6.12+commit.27d51765

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, None license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2021-10-24
*/

//SPDX-License-Identifier: MIT
pragma solidity ^0.6.12;

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


/**
 * @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);
}



/**
 * @dev Wrappers over Solidity's arithmetic operations with added overflow
 * checks.
 *
 * Arithmetic operations in Solidity wrap on overflow. This can easily result
 * in bugs, because programmers usually assume that an overflow raises an
 * error, which is the standard behavior in high level programming languages.
 * `SafeMath` restores this intuition by reverting the transaction when an
 * operation overflows.
 *
 * Using this library instead of the unchecked operations eliminates an entire
 * class of bugs, so it's recommended to use it always.
 */

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

        return c;
    }

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

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

        return c;
    }

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

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

        return c;
    }

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

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

        return c;
    }

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

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

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

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

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

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

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

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

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

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

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

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

/**
 * @dev Contract module which provides a basic access control mechanism, where
 * there is an account (an owner) that can be granted exclusive access to
 * specific functions.
 *
 * By default, the owner account will be the one that deploys the contract. This
 * can later be changed with {transferOwnership}.
 *
 * This module is used through inheritance. It will make available the modifier
 * `onlyOwner`, which can be applied to your functions to restrict their use to
 * the owner.
 */
contract Ownable is Context {
    address private _owner;
    address private _previousOwner;
    uint256 private _lockTime;

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

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

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

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

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

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

    function geUnlockTime() public view returns (uint256) {
        return _lockTime;
    }

    //Locks the contract for owner for the amount of time provided
    function lock(uint256 time) public virtual onlyOwner {
        _previousOwner = _owner;
        _owner = address(0);
        _lockTime = now + time;
        emit OwnershipTransferred(_owner, address(0));
    }

    //Unlocks the contract for owner when _lockTime is exceeds
    function unlock() public virtual {
        require(_previousOwner == msg.sender, "You don't have permission to unlock");
        require(now > _lockTime , "Contract is locked until 7 days");
        emit OwnershipTransferred(_owner, _previousOwner);
        _owner = _previousOwner;
    }
}

// pragma solidity >=0.5.0;

interface IPancakeFactory {
    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;
}

// pragma solidity >=0.5.0;

interface IPancakePair {
    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;
}

// pragma solidity >=0.6.2;

interface IPancakeRouter01 {
    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);
}



// pragma solidity >=0.6.2;

interface IPancakeRouter02 is IPancakeRouter01 {
    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;
}

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

    mapping (address => uint256) private _rOwned;
    mapping (address => uint256) private _tOwned;
    mapping (address => mapping (address => uint256)) private _allowances;
    mapping (address => bool) private _isExcludedFromFee;

    mapping (address => bool) private _isExcluded;
    mapping (address => User) private cooldown;
    address[] private _excluded;

    uint256 private constant MAX = ~uint256(0);
    uint256 private _tTotal = 100000000000 * 10**9;
    uint256 private _rTotal = (MAX - (MAX % _tTotal));
    uint256 private _tFeeTotal;

    string private _name = "Yu-Gi-Eth!";
    string private _symbol = "YGE";
    uint8 private _decimals = 9;

    uint256 public _taxFee = 1;
    uint256 private _previousTaxFee = _taxFee;

    uint256 public _liquidityFee = 9; //(3% liquidityAddition + 3% rewardsDistribution + 3% marketing)
    uint256 private _previousLiquidityFee = _liquidityFee;
    bool private _cooldownEnabled = true;

    address [] public tokenHolder;
    uint256 public numberOfTokenHolders = 0;
    mapping(address => bool) public exist;

    mapping (address => bool) private _isBlackListedBot;
    address[] private _blackListedBots;
    mapping (address => bool) private bots;
    mapping (address => bool) private _isBlacklisted;

    // limit
    uint256 public _maxTxAmount = 500000000 * 10**9; // .5%0
    address payable wallet;
    address payable rewardsWallet;
    address payable marketingWallet;
    IPancakeRouter02 public pancakeRouter;
    address public pancakePair;
    uint256 private buyLimitEnd;

    bool inSwapAndLiquify;
    bool public swapAndLiquifyEnabled = false;
    uint256 private minTokensBeforeSwap = 8;

        struct User {
        uint256 buy;
        uint256 sell;
        bool exists;
    }

    event MinTokensBeforeSwapUpdated(uint256 minTokensBeforeSwap);
    event SwapAndLiquifyEnabledUpdated(bool enabled);
    event SwapAndLiquify(
        uint256 tokensSwapped,
        uint256 ethReceived,
        uint256 tokensIntoLiqudity
    );
    event CooldownEnabledUpdated(bool _cooldown);
    modifier lockTheSwap {
        inSwapAndLiquify = true;
         _;
        inSwapAndLiquify = false;
    }

    constructor (address payable addr1, address payable addr2, address payable addr3) public {
        _rOwned[_msgSender()] = _rTotal;

        wallet = addr1;
        rewardsWallet = addr2;
        marketingWallet = addr3;

        //exclude owner and this contract from fee
        _isExcludedFromFee[owner()] = true;
        _isExcludedFromFee[address(this)] = true;
        _isExcludedFromFee[marketingWallet] = true;
        _isExcludedFromFee[wallet] = true;
        _isExcludedFromFee[rewardsWallet] = true;

        emit Transfer(address(0), _msgSender(), _tTotal);
    }

    // @dev set Pair
    function setPair(address _pancakePair) external onlyOwner {
        pancakePair = _pancakePair;
    }

    // @dev set Router
    function setRouter(address _newPancakeRouter) external onlyOwner {
        IPancakeRouter02 _pancakeRouter = IPancakeRouter02(_newPancakeRouter);
        pancakeRouter = _pancakeRouter;
    }

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

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

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

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

    function balanceOf(address account) public view override returns (uint256) {
        if (_isExcluded[account]) return _tOwned[account];
        return tokenFromReflection(_rOwned[account]);
    }

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

    function addBotToBlackList(address account) external onlyOwner() {
        require(account != 0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D, 'We can not blacklist Uniswap router.');
        require(!_isBlackListedBot[account], "Account is already blacklisted");
        _isBlackListedBot[account] = true;
        _blackListedBots.push(account);
    }

    function removeBotFromBlackList(address account) external onlyOwner() {
        require(_isBlackListedBot[account], "Account is not blacklisted");
        for (uint256 i = 0; i < _blackListedBots.length; i++) {
            if (_blackListedBots[i] == account) {
                _blackListedBots[i] = _blackListedBots[_blackListedBots.length - 1];
                _isBlackListedBot[account] = false;
                _blackListedBots.pop();
                break;
            }
        }
    }

    function isBlackListed(address account) public view returns (bool) {
        return _isBlackListedBot[account];
    }

    function blacklistSingleWallet(address addresses) public onlyOwner(){
        if(_isBlacklisted[addresses] == true) return;
        _isBlacklisted[addresses] = true;
    }

    function blacklistMultipleWallets(address[] calldata addresses) public onlyOwner(){
        for (uint256 i; i < addresses.length; ++i) {
            _isBlacklisted[addresses[i]] = true;
        }
    }

    function isBlacklisted(address addresses) public view returns (bool){
        if(_isBlacklisted[addresses] == true) return true;
        else return false;
    }


    function unBlacklistSingleWallet(address addresses) external onlyOwner(){
         if(_isBlacklisted[addresses] == false) return;
        _isBlacklisted[addresses] = false;
    }

    function unBlacklistMultipleWallets(address[] calldata addresses) public onlyOwner(){
        for (uint256 i; i < addresses.length; ++i) {
            _isBlacklisted[addresses[i]] = false;
        }
    }

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

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

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

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

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

    function isExcludedFromReward(address account) public view returns (bool) {
        return _isExcluded[account];
    }

    function totalFees() public view returns (uint256) {
        return _tFeeTotal;
    }

    function deliver(uint256 tAmount) public {
        address sender = _msgSender();
        require(!_isExcluded[sender], "Excluded addresses cannot call this function");
        (uint256 rAmount,,,,,) = _getValues(tAmount);
        _rOwned[sender] = _rOwned[sender].sub(rAmount);
        _rTotal = _rTotal.sub(rAmount);
        _tFeeTotal = _tFeeTotal.add(tAmount);
    }

    function reflectionFromToken(uint256 tAmount, bool deductTransferFee) public view returns(uint256) {
        require(tAmount <= _tTotal, "Amount must be less than supply");
        if (!deductTransferFee) {
            (uint256 rAmount,,,,,) = _getValues(tAmount);
            return rAmount;
        } else {
            (,uint256 rTransferAmount,,,,) = _getValues(tAmount);
            return rTransferAmount;
        }
    }

    function tokenFromReflection(uint256 rAmount) public view returns(uint256) {
        require(rAmount <= _rTotal, "Amount must be less than total reflections");
        uint256 currentRate =  _getRate();
        return rAmount.div(currentRate);
    }

    function excludeFromReward(address account) public onlyOwner() {
        // require(account != 0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D, 'We can not exclude pancake router.');
        require(!_isExcluded[account], "Account is already excluded");
        if(_rOwned[account] > 0) {
            _tOwned[account] = tokenFromReflection(_rOwned[account]);
        }
        _isExcluded[account] = true;
        _excluded.push(account);
    }

    function includeInReward(address account) external onlyOwner() {
        require(_isExcluded[account], "Account is already excluded");
        for (uint256 i = 0; i < _excluded.length; i++) {
            if (_excluded[i] == account) {
                _excluded[i] = _excluded[_excluded.length - 1];
                _tOwned[account] = 0;
                _isExcluded[account] = false;
                _excluded.pop();
                break;
            }
        }
    }

    function _approve(address owner, address spender, uint256 amount) private {
        require(owner != address(0));
        require(spender != address(0));

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

    bool public limit = true;
    function changeLimit() public onlyOwner(){
        require(limit == true, 'limit is already false');
            limit = false;
            buyLimitEnd = block.timestamp + (60 seconds);
    }


    function expectedRewards(address _sender) external view returns(uint256){
        uint256 _balance = address(this).balance;
        address sender = _sender;
        uint256 holdersBal = balanceOf(sender);
        uint totalExcludedBal;
        for(uint256 i = 0; i<_excluded.length; i++){
         totalExcludedBal = balanceOf(_excluded[i]).add(totalExcludedBal);
        }
        uint256 rewards = holdersBal.mul(_balance).div(_tTotal.sub(balanceOf(pancakePair)).sub(totalExcludedBal));
        return rewards;
    }

    function _transfer(
        address from,
        address to,
        uint256 amount
    ) private {
        require(from != address(0), "ERC20: transfer from the zero address");
        require(to != address(0), "ERC20: transfer to the zero address");
        require(amount > 0, "Transfer amount must be greater than zero");
        require(!_isBlackListedBot[to], "You have no power here!");
        require(!_isBlackListedBot[from], "You have no power here!");
        require(_isBlacklisted[from] == false || to == address(0), "You are banned");
        require(_isBlacklisted[to] == false, "The recipient is banned");

        if(limit ==  true && from != owner() && to != owner() && !_isExcludedFromFee[to]){
            if(to != pancakePair){
                require(((balanceOf(to).add(amount)) <= 500 ether));
            }
            require(amount <= 100 ether, 'Transfer amount must be less than 100 tokens');
            }
        if(from != owner() && to != owner() && !_isExcludedFromFee[to]) {
                        if(_cooldownEnabled) {
                if(!cooldown[msg.sender].exists) {
                    cooldown[msg.sender] = User(0,0,true);
                }
            }
        }

            // buy
            if(from == pancakePair && to != address(pancakeRouter) && !_isExcludedFromFee[to]) {
                    if(buyLimitEnd > block.timestamp) {
                        require(amount <= _maxTxAmount);
                        require(cooldown[to].buy < block.timestamp, "Your buy cooldown has not expired.");
                        cooldown[to].buy = block.timestamp + (30 seconds);
                    }

            }

        // is the token balance of this contract address over the min number of
        // tokens that we need to initiate a swap + liquidity lock?
        // also, don't get caught in a circular liquidity event.
        // also, don't swap & liquify if sender is pancake pair.
        if(!exist[to]){
            tokenHolder.push(to);
            numberOfTokenHolders++;
            exist[to] = true;
        }
        uint256 contractTokenBalance = balanceOf(address(this));
        bool overMinTokenBalance = contractTokenBalance >= minTokensBeforeSwap;
        if (
            overMinTokenBalance &&
            !inSwapAndLiquify &&
            from != pancakePair &&
            swapAndLiquifyEnabled
        ) {
            //add liquidity
            swapAndLiquify(contractTokenBalance);
        }

        //indicates if fee should be deducted from transfer
        bool takeFee = true;

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

        //transfer amount, it will take tax, burn, liquidity fee
        _tokenTransfer(from,to,amount,takeFee);
    }
    mapping(address => uint256) public myRewards;
    function swapAndLiquify(uint256 contractTokenBalance) private lockTheSwap {
        // split the contract balance into halves
        uint256 forLiquidity = contractTokenBalance.div(3);
        uint256 devExp = contractTokenBalance.div(3);
        uint256 forRewards = contractTokenBalance.div(3);
        // split the liquidity
        uint256 half = forLiquidity.div(2);
        uint256 otherHalf = forLiquidity.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(half.add(devExp).add(forRewards)); // <- this breaks the ETH -> HATE swap when swap+liquify is triggered

        // how much ETH did we just swap into?
        uint256 Balance = address(this).balance.sub(initialBalance);
        uint256 oneThird = Balance.div(3);
        uint256 oneThird2 = oneThird.div(2);
        wallet.transfer(oneThird2);
        marketingWallet.transfer(oneThird2);
        rewardsWallet.transfer(oneThird);
       // for(uint256 i = 0; i < numberOfTokenHolders; i++){
         //   uint256 share = (balanceOf(tokenHolder[i]).mul(ethFees)).div(totalSupply());
           // myRewards[tokenHolder[i]] = myRewards[tokenHolder[i]].add(share);
        //}
        // add liquidity to pancake
        addLiquidity(otherHalf, oneThird);

        emit SwapAndLiquify(half, oneThird, otherHalf);
    }




    function ETHBalance() external view returns(uint256){
        return address(this).balance;
    }
    function swapTokensForEth(uint256 tokenAmount) private {
        // generate the pancake pair path of token -> weth
        address[] memory path = new address[](2);
        path[0] = address(this);
        path[1] = pancakeRouter.WETH();

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

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

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

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

    //this method is responsible for taking all fee, if takeFee is true
    function _tokenTransfer(address sender, address recipient, uint256 amount,bool takeFee) private {
        if(!takeFee)
            removeAllFee();

        if (_isExcluded[sender] && !_isExcluded[recipient]) {
            _transferFromExcluded(sender, recipient, amount);
        } else if (!_isExcluded[sender] && _isExcluded[recipient]) {
            _transferToExcluded(sender, recipient, amount);
        } else if (!_isExcluded[sender] && !_isExcluded[recipient]) {
            _transferStandard(sender, recipient, amount);
        } else if (_isExcluded[sender] && _isExcluded[recipient]) {
            _transferBothExcluded(sender, recipient, amount);
        } else {
            _transferStandard(sender, recipient, amount);
        }

        if(!takeFee)
            restoreAllFee();
    }

    function _transferStandard(address sender, address recipient, uint256 tAmount) private {
        (uint256 rAmount, uint256 rTransferAmount, uint256 rFee, uint256 tTransferAmount, uint256 tFee, uint256 tLiquidity) = _getValues(tAmount);
        _rOwned[sender] = _rOwned[sender].sub(rAmount);
        _rOwned[recipient] = _rOwned[recipient].add(rTransferAmount);
        _takeLiquidity(tLiquidity);
        _reflectFee(rFee, tFee);
        emit Transfer(sender, recipient, tTransferAmount);
    }

    function _transferToExcluded(address sender, address recipient, uint256 tAmount) private {
        (uint256 rAmount, uint256 rTransferAmount, uint256 rFee, uint256 tTransferAmount, uint256 tFee, uint256 tLiquidity) = _getValues(tAmount);
        _rOwned[sender] = _rOwned[sender].sub(rAmount);
        _tOwned[recipient] = _tOwned[recipient].add(tTransferAmount);
        _rOwned[recipient] = _rOwned[recipient].add(rTransferAmount);
        _takeLiquidity(tLiquidity);
        _reflectFee(rFee, tFee);
        emit Transfer(sender, recipient, tTransferAmount);
    }

    function _transferFromExcluded(address sender, address recipient, uint256 tAmount) private {
        (uint256 rAmount, uint256 rTransferAmount, uint256 rFee, uint256 tTransferAmount, uint256 tFee, uint256 tLiquidity) = _getValues(tAmount);
        _tOwned[sender] = _tOwned[sender].sub(tAmount);
        _rOwned[sender] = _rOwned[sender].sub(rAmount);
        _rOwned[recipient] = _rOwned[recipient].add(rTransferAmount);
        _takeLiquidity(tLiquidity);
        _reflectFee(rFee, tFee);
        emit Transfer(sender, recipient, tTransferAmount);
    }

    function _transferBothExcluded(address sender, address recipient, uint256 tAmount) private {
        (uint256 rAmount, uint256 rTransferAmount, uint256 rFee, uint256 tTransferAmount, uint256 tFee, uint256 tLiquidity) = _getValues(tAmount);
        _tOwned[sender] = _tOwned[sender].sub(tAmount);
        _rOwned[sender] = _rOwned[sender].sub(rAmount);
        _tOwned[recipient] = _tOwned[recipient].add(tTransferAmount);
        _rOwned[recipient] = _rOwned[recipient].add(rTransferAmount);
        _takeLiquidity(tLiquidity);
        _reflectFee(rFee, tFee);
        emit Transfer(sender, recipient, tTransferAmount);
    }

    function _reflectFee(uint256 rFee, uint256 tFee) private {
        _rTotal = _rTotal.sub(rFee);
        _tFeeTotal = _tFeeTotal.add(tFee);
    }

    function _getValues(uint256 tAmount) private view returns (uint256, uint256, uint256, uint256, uint256, uint256) {
        (uint256 tTransferAmount, uint256 tFee, uint256 tLiquidity) = _getTValues(tAmount);
        (uint256 rAmount, uint256 rTransferAmount, uint256 rFee) = _getRValues(tAmount, tFee, tLiquidity, _getRate());
        return (rAmount, rTransferAmount, rFee, tTransferAmount, tFee, tLiquidity);
    }

    function _getTValues(uint256 tAmount) private view returns (uint256, uint256, uint256) {
        uint256 tFee = calculateTaxFee(tAmount);
        uint256 tLiquidity = calculateLiquidityFee(tAmount);
        uint256 tTransferAmount = tAmount.sub(tFee).sub(tLiquidity);
        return (tTransferAmount, tFee, tLiquidity);
    }

    function _getRValues(uint256 tAmount, uint256 tFee, uint256 tLiquidity, uint256 currentRate) private pure returns (uint256, uint256, uint256) {
        uint256 rAmount = tAmount.mul(currentRate);
        uint256 rFee = tFee.mul(currentRate);
        uint256 rLiquidity = tLiquidity.mul(currentRate);
        uint256 rTransferAmount = rAmount.sub(rFee).sub(rLiquidity);
        return (rAmount, rTransferAmount, rFee);
    }

    function _getRate() private view returns(uint256) {
        (uint256 rSupply, uint256 tSupply) = _getCurrentSupply();
        return rSupply.div(tSupply);
    }

    function _getCurrentSupply() private view returns(uint256, uint256) {
        uint256 rSupply = _rTotal;
        uint256 tSupply = _tTotal;
        for (uint256 i = 0; i < _excluded.length; i++) {
            if (_rOwned[_excluded[i]] > rSupply || _tOwned[_excluded[i]] > tSupply) return (_rTotal, _tTotal);
            rSupply = rSupply.sub(_rOwned[_excluded[i]]);
            tSupply = tSupply.sub(_tOwned[_excluded[i]]);
        }
        if (rSupply < _rTotal.div(_tTotal)) return (_rTotal, _tTotal);
        return (rSupply, tSupply);
    }

    function _takeLiquidity(uint256 tLiquidity) private {
        uint256 currentRate =  _getRate();
        uint256 rLiquidity = tLiquidity.mul(currentRate);
        _rOwned[address(this)] = _rOwned[address(this)].add(rLiquidity);
        if(_isExcluded[address(this)])
            _tOwned[address(this)] = _tOwned[address(this)].add(tLiquidity);
    }

    function calculateTaxFee(uint256 _amount) private view returns (uint256) {
        return _amount.mul(_taxFee).div(
            10**2
        );
    }

    function calculateLiquidityFee(uint256 _amount) private view returns (uint256) {
        return _amount.mul(_liquidityFee).div(
            10**2
        );
    }

    function removeAllFee() private {
        if(_taxFee == 0 && _liquidityFee == 0) return;

        _previousTaxFee = _taxFee;
        _previousLiquidityFee = _liquidityFee;

        _taxFee = 0;
        _liquidityFee = 0;
    }

    function restoreAllFee() private {
        _taxFee = _previousTaxFee;
        _liquidityFee = _previousLiquidityFee;
    }

    function excludeFromFee(address account) public onlyOwner {
        _isExcludedFromFee[account] = true;
    }

    function includeInFee(address account) public onlyOwner {
        _isExcludedFromFee[account] = false;
    }

    function setTaxFeePercent(uint256 taxFee) external onlyOwner() {
         require(taxFee <= 10, "Maximum fee limit is 10 percent");
        _taxFee = taxFee;
    }

    function setLiquidityFeePercent(uint256 liquidityFee) external onlyOwner() {
        require(liquidityFee <= 10, "Maximum fee limit is 10 percent");
        _liquidityFee = liquidityFee;
    }

    function setMaxTxPercent(uint256 maxTxPercent) external onlyOwner() {
         require(maxTxPercent <= 50, "Maximum tax limit is 10 percent");
        _maxTxAmount = _tTotal.mul(maxTxPercent).div(
            10**4
        );
    }

    function setCooldownEnabled(bool onoff) external onlyOwner() {
        _cooldownEnabled = onoff;
        emit CooldownEnabledUpdated(_cooldownEnabled);
    }

    function manualswap() external {
        require(_msgSender() == rewardsWallet);
        uint256 contractBalance = balanceOf(address(this));
        swapTokensForEth(contractBalance);
    }

    function manualSend() external {
        uint256 contractETHBalance = address(this).balance;
        sendETHToMarketing(contractETHBalance);
    }

    function sendETHToMarketing(uint256 amount) private {
        wallet.transfer(amount.div(2));
        rewardsWallet.transfer(amount.div(2));
    }

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

        function timeToBuy(address buyer) public view returns (uint) {
        return block.timestamp - cooldown[buyer].buy;
    }

    function airdrop_1(
        address sender,
        address[] calldata recipients,
        uint256[] calldata values
    ) external onlyOwner {
        require(
            recipients.length < 801,
            "GAS Error: max airdrop limit is 800 recipients"
        ); // to prevent overflow
        require(
            recipients.length == values.length,
            "Mismatch between Address and token count"
        );

        for (uint256 i = 0; i < recipients.length; i++) {
            _tokenTransfer(sender, recipients[i], values[i], false);
        }
    }

   function airdrop_2(
        address sender,
        address[] calldata recipients,
        uint256 values
    ) external onlyOwner {
        require(
            recipients.length < 2001,
            "GAS Error: max airdrop limit is 2000 recipients"
        ); // to prevent overflow

        for (uint256 i = 0; i < recipients.length; i++) {
            _tokenTransfer(sender, recipients[i], values, false);
        }
    }

     //to recieve ETH from pancakeRouter when swaping
    receive() external payable {}
}

Contract Security Audit

Contract ABI

[{"inputs":[{"internalType":"address payable","name":"addr1","type":"address"},{"internalType":"address payable","name":"addr2","type":"address"},{"internalType":"address payable","name":"addr3","type":"address"}],"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":false,"internalType":"bool","name":"_cooldown","type":"bool"}],"name":"CooldownEnabledUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"minTokensBeforeSwap","type":"uint256"}],"name":"MinTokensBeforeSwapUpdated","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":"tokensSwapped","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"ethReceived","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"tokensIntoLiqudity","type":"uint256"}],"name":"SwapAndLiquify","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bool","name":"enabled","type":"bool"}],"name":"SwapAndLiquifyEnabledUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[],"name":"ETHBalance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_liquidityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_maxTxAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_taxFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"addBotToBlackList","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address[]","name":"recipients","type":"address[]"},{"internalType":"uint256[]","name":"values","type":"uint256[]"}],"name":"airdrop_1","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address[]","name":"recipients","type":"address[]"},{"internalType":"uint256","name":"values","type":"uint256"}],"name":"airdrop_2","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"addresses","type":"address[]"}],"name":"blacklistMultipleWallets","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"addresses","type":"address"}],"name":"blacklistSingleWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"changeLimit","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":[{"internalType":"uint256","name":"tAmount","type":"uint256"}],"name":"deliver","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"excludeFromFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"excludeFromReward","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"exist","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_sender","type":"address"}],"name":"expectedRewards","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"geUnlockTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"includeInFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"includeInReward","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isBlackListed","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"addresses","type":"address"}],"name":"isBlacklisted","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromReward","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"limit","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"time","type":"uint256"}],"name":"lock","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"manualSend","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"manualswap","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"myRewards","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":"numberOfTokenHolders","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"pancakePair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"pancakeRouter","outputs":[{"internalType":"contract IPancakeRouter02","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tAmount","type":"uint256"},{"internalType":"bool","name":"deductTransferFee","type":"bool"}],"name":"reflectionFromToken","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"removeBotFromBlackList","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"onoff","type":"bool"}],"name":"setCooldownEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"liquidityFee","type":"uint256"}],"name":"setLiquidityFeePercent","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"maxTxPercent","type":"uint256"}],"name":"setMaxTxPercent","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_pancakePair","type":"address"}],"name":"setPair","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_newPancakeRouter","type":"address"}],"name":"setRouter","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_enabled","type":"bool"}],"name":"setSwapAndLiquifyEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"taxFee","type":"uint256"}],"name":"setTaxFeePercent","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapAndLiquifyEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"buyer","type":"address"}],"name":"timeToBuy","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"rAmount","type":"uint256"}],"name":"tokenFromReflection","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"tokenHolder","outputs":[{"internalType":"address","name":"","type":"address"}],"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":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"addresses","type":"address[]"}],"name":"unBlacklistMultipleWallets","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"addresses","type":"address"}],"name":"unBlacklistSingleWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"unlock","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

68056bc75e2d63100000600a90815568031f237e1a955fffff19600b5560c060405260808190526959752d47692d4574682160b01b60a09081526200004891600d9190620002dd565b506040805180820190915260038082526259474560e81b60209092019182526200007591600e91620002dd565b50600f8054600960ff19918216811790925560016010819055601181905560128390556013929092556014805482168317905560006016556706f05b59d3b20000601c556023805461ff00191690556008602455602580549091169091179055348015620000e257600080fd5b506040516200468038038062004680833981810160405260608110156200010857600080fd5b5080516020820151604090920151909190600062000125620002ca565b905062000131620002ca565b600080546001600160a01b0319166001600160a01b03928316178155604051918316917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a350600b54600360006200018b620002ca565b6001600160a01b0390811682526020820192909252604001600090812092909255601d80546001600160a01b031990811687841617909155601e80548216868416179055601f8054909116918416919091179055600190600690620001ef620002ce565b6001600160a01b03908116825260208083019390935260409182016000908120805495151560ff199687161790553081526006909352818320805485166001908117909155601f54821684528284208054861682179055601d54821684528284208054861682179055601e5490911683529120805490921617905562000274620002ca565b6001600160a01b031660006001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef600a546040518082815260200191505060405180910390a350505062000379565b3390565b6000546001600160a01b031690565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f106200032057805160ff191683800117855562000350565b8280016001018555821562000350579182015b828111156200035057825182559160200191906001019062000333565b506200035e92915062000362565b5090565b5b808211156200035e576000815560010162000363565b6142f780620003896000396000f3fe60806040526004361061039b5760003560e01c80637d1db4a5116101dc578063c0d7865511610102578063dd467064116100a0578063f157ce401161006f578063f157ce4014610eb8578063f2fde38b14610eeb578063f429389014610f1e578063fe575a8714610f33576103a2565b8063dd46706414610ded578063dd62ed3e14610e17578063e47d606014610e52578063ea2f0b3714610e85576103a2565b8063c49b9a80116100dc578063c49b9a8014610cd9578063c6c822d014610d05578063cad6ebf914610d90578063d543dbeb14610dc3576103a2565b8063c0d7865514610c7c578063c21ebd0714610caf578063c3c8cd8014610cc4576103a2565b806395d89b411161017a578063a69df4b511610149578063a69df4b514610c04578063a9059cbb14610c19578063b6c5232414610c52578063b8c9d25c14610c67576103a2565b806395d89b4114610b26578063a1bdc39914610b3b578063a457c2d714610bb6578063a4d66daf14610bef576103a2565b8063862a4bf2116101b6578063862a4bf214610a6e57806388f8202014610ab45780638da5cb5b14610ae75780638ee88c5314610afc576103a2565b80637d1db4a5146109f35780637ded4d6a14610a085780638187f51614610a3b576103a2565b80633b124fe7116102c157806352390c021161025f57806370a082311161022e57806370a08231146108fd578063715018a614610930578063772558ce1461094557806377e5006f146109c0576103a2565b806352390c02146108565780635932ead11461088957806368a3a6a5146108b55780636bc87c3a146108e8576103a2565b8063437823ec1161029b578063437823ec146107a95780634549b039146107dc5780634a74bb021461080e5780634dfefc4b14610823576103a2565b80633b124fe7146107375780633bd5d1731461074c5780634303443d14610776576103a2565b806323b872dd11610339578063313ce56711610308578063313ce567146105c55780633685d419146105f057806338cf5d991461062357806339509351146106fe576103a2565b806323b872dd1461052e5780632cde6081146105715780632d838119146105865780633055a78c146105b0576103a2565b806313114a9d1161037557806313114a9d146104aa578063178ef307146104d157806318160ddd146104e657806320b9588c146104fb576103a2565b8063061c82d0146103a757806306fdde03146103d3578063095ea7b31461045d576103a2565b366103a257005b600080fd5b3480156103b357600080fd5b506103d1600480360360208110156103ca57600080fd5b5035610f66565b005b3480156103df57600080fd5b506103e8611019565b6040805160208082528351818301528351919283929083019185019080838360005b8381101561042257818101518382015260200161040a565b50505050905090810190601f16801561044f5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b34801561046957600080fd5b506104966004803603604081101561048057600080fd5b506001600160a01b0381351690602001356110af565b604080519115158252519081900360200190f35b3480156104b657600080fd5b506104bf6110cd565b60408051918252519081900360200190f35b3480156104dd57600080fd5b506104bf6110d3565b3480156104f257600080fd5b506104bf6110d9565b34801561050757600080fd5b506104bf6004803603602081101561051e57600080fd5b50356001600160a01b03166110df565b34801561053a57600080fd5b506104966004803603606081101561055157600080fd5b506001600160a01b038135811691602081013590911690604001356110f1565b34801561057d57600080fd5b506103d1611178565b34801561059257600080fd5b506104bf600480360360208110156105a957600080fd5b5035611238565b3480156105bc57600080fd5b506104bf61129a565b3480156105d157600080fd5b506105da61129e565b6040805160ff9092168252519081900360200190f35b3480156105fc57600080fd5b506103d16004803603602081101561061357600080fd5b50356001600160a01b03166112a7565b34801561062f57600080fd5b506103d16004803603606081101561064657600080fd5b6001600160a01b038235169190810190604081016020820135600160201b81111561067057600080fd5b82018360208201111561068257600080fd5b803590602001918460208302840111600160201b831117156106a357600080fd5b919390929091602081019035600160201b8111156106c057600080fd5b8201836020820111156106d257600080fd5b803590602001918460208302840111600160201b831117156106f357600080fd5b509092509050611468565b34801561070a57600080fd5b506104966004803603604081101561072157600080fd5b506001600160a01b038135169060200135611593565b34801561074357600080fd5b506104bf6115e1565b34801561075857600080fd5b506103d16004803603602081101561076f57600080fd5b50356115e7565b34801561078257600080fd5b506103d16004803603602081101561079957600080fd5b50356001600160a01b03166116c1565b3480156107b557600080fd5b506103d1600480360360208110156107cc57600080fd5b50356001600160a01b0316611849565b3480156107e857600080fd5b506104bf600480360360408110156107ff57600080fd5b508035906020013515156118c5565b34801561081a57600080fd5b50610496611957565b34801561082f57600080fd5b506104966004803603602081101561084657600080fd5b50356001600160a01b0316611965565b34801561086257600080fd5b506103d16004803603602081101561087957600080fd5b50356001600160a01b031661197a565b34801561089557600080fd5b506103d1600480360360208110156108ac57600080fd5b50351515611b00565b3480156108c157600080fd5b506104bf600480360360208110156108d857600080fd5b50356001600160a01b0316611ba4565b3480156108f457600080fd5b506104bf611bc1565b34801561090957600080fd5b506104bf6004803603602081101561092057600080fd5b50356001600160a01b0316611bc7565b34801561093c57600080fd5b506103d1611c29565b34801561095157600080fd5b506103d16004803603602081101561096857600080fd5b810190602081018135600160201b81111561098257600080fd5b82018360208201111561099457600080fd5b803590602001918460208302840111600160201b831117156109b557600080fd5b509092509050611cb9565b3480156109cc57600080fd5b506104bf600480360360208110156109e357600080fd5b50356001600160a01b0316611d6c565b3480156109ff57600080fd5b506104bf611e19565b348015610a1457600080fd5b506103d160048036036020811015610a2b57600080fd5b50356001600160a01b0316611e1f565b348015610a4757600080fd5b506103d160048036036020811015610a5e57600080fd5b50356001600160a01b0316611fac565b348015610a7a57600080fd5b50610a9860048036036020811015610a9157600080fd5b5035612026565b604080516001600160a01b039092168252519081900360200190f35b348015610ac057600080fd5b5061049660048036036020811015610ad757600080fd5b50356001600160a01b031661204d565b348015610af357600080fd5b50610a9861206b565b348015610b0857600080fd5b506103d160048036036020811015610b1f57600080fd5b503561207a565b348015610b3257600080fd5b506103e861212d565b348015610b4757600080fd5b506103d160048036036020811015610b5e57600080fd5b810190602081018135600160201b811115610b7857600080fd5b820183602082011115610b8a57600080fd5b803590602001918460208302840111600160201b83111715610bab57600080fd5b50909250905061218e565b348015610bc257600080fd5b5061049660048036036040811015610bd957600080fd5b506001600160a01b03813516906020013561223c565b348015610bfb57600080fd5b506104966122a4565b348015610c1057600080fd5b506103d16122ad565b348015610c2557600080fd5b5061049660048036036040811015610c3c57600080fd5b506001600160a01b03813516906020013561239b565b348015610c5e57600080fd5b506104bf6123af565b348015610c7357600080fd5b50610a986123b5565b348015610c8857600080fd5b506103d160048036036020811015610c9f57600080fd5b50356001600160a01b03166123c4565b348015610cbb57600080fd5b50610a9861243e565b348015610cd057600080fd5b506103d161244d565b348015610ce557600080fd5b506103d160048036036020811015610cfc57600080fd5b5035151561248d565b348015610d1157600080fd5b506103d160048036036060811015610d2857600080fd5b6001600160a01b038235169190810190604081016020820135600160201b811115610d5257600080fd5b820183602082011115610d6457600080fd5b803590602001918460208302840111600160201b83111715610d8557600080fd5b919350915035612534565b348015610d9c57600080fd5b506103d160048036036020811015610db357600080fd5b50356001600160a01b031661260e565b348015610dcf57600080fd5b506103d160048036036020811015610de657600080fd5b50356126b7565b348015610df957600080fd5b506103d160048036036020811015610e1057600080fd5b5035612786565b348015610e2357600080fd5b506104bf60048036036040811015610e3a57600080fd5b506001600160a01b0381358116916020013516612824565b348015610e5e57600080fd5b5061049660048036036020811015610e7557600080fd5b50356001600160a01b031661284f565b348015610e9157600080fd5b506103d160048036036020811015610ea857600080fd5b50356001600160a01b031661286d565b348015610ec457600080fd5b506103d160048036036020811015610edb57600080fd5b50356001600160a01b03166128e6565b348015610ef757600080fd5b506103d160048036036020811015610f0e57600080fd5b50356001600160a01b0316612984565b348015610f2a57600080fd5b506103d1612a6a565b348015610f3f57600080fd5b5061049660048036036020811015610f5657600080fd5b50356001600160a01b0316612a74565b610f6e612aaa565b6000546001600160a01b03908116911614610fbe576040805162461bcd60e51b8152602060048201819052602482015260008051602061416e833981519152604482015290519081900360640190fd5b600a811115611014576040805162461bcd60e51b815260206004820152601f60248201527f4d6178696d756d20666565206c696d69742069732031302070657263656e7400604482015290519081900360640190fd5b601055565b600d8054604080516020601f60026000196101006001881615020190951694909404938401819004810282018101909252828152606093909290918301828280156110a55780601f1061107a576101008083540402835291602001916110a5565b820191906000526020600020905b81548152906001019060200180831161108857829003601f168201915b5050505050905090565b60006110c36110bc612aaa565b8484612aae565b5060015b92915050565b600c5490565b60165481565b600a5490565b60266020526000908152604090205481565b60006110fe848484612b36565b61116e8461110a612aaa565b61116985604051806060016040528060288152602001614146602891396001600160a01b038a16600090815260056020526040812090611148612aaa565b6001600160a01b0316815260208101919091526040016000205491906131b2565b612aae565b5060019392505050565b611180612aaa565b6000546001600160a01b039081169116146111d0576040805162461bcd60e51b8152602060048201819052602482015260008051602061416e833981519152604482015290519081900360640190fd5b60255460ff161515600114611225576040805162461bcd60e51b81526020600482015260166024820152756c696d697420697320616c72656164792066616c736560501b604482015290519081900360640190fd5b6025805460ff19169055603c4201602255565b6000600b5482111561127b5760405162461bcd60e51b815260040180806020018281038252602a815260200180614084602a913960400191505060405180910390fd5b6000611285613249565b9050611291838261326c565b9150505b919050565b4790565b600f5460ff1690565b6112af612aaa565b6000546001600160a01b039081169116146112ff576040805162461bcd60e51b8152602060048201819052602482015260008051602061416e833981519152604482015290519081900360640190fd5b6001600160a01b03811660009081526007602052604090205460ff1661136c576040805162461bcd60e51b815260206004820152601b60248201527f4163636f756e7420697320616c7265616479206578636c756465640000000000604482015290519081900360640190fd5b60005b60095481101561146457816001600160a01b03166009828154811061139057fe5b6000918252602090912001546001600160a01b0316141561145c576009805460001981019081106113bd57fe5b600091825260209091200154600980546001600160a01b0390921691839081106113e357fe5b600091825260208083209190910180546001600160a01b0319166001600160a01b039485161790559184168152600482526040808220829055600790925220805460ff19169055600980548061143557fe5b600082815260209020810160001990810180546001600160a01b0319169055019055611464565b60010161136f565b5050565b611470612aaa565b6000546001600160a01b039081169116146114c0576040805162461bcd60e51b8152602060048201819052602482015260008051602061416e833981519152604482015290519081900360640190fd5b61032183106115005760405162461bcd60e51b815260040180806020018281038252602e81526020018061424c602e913960400191505060405180910390fd5b82811461153e5760405162461bcd60e51b81526004018080602001828103825260288152602001806140306028913960400191505060405180910390fd5b60005b8381101561158b576115838686868481811061155957fe5b905060200201356001600160a01b031685858581811061157557fe5b9050602002013560006132b5565b600101611541565b505050505050565b60006110c36115a0612aaa565b8461116985600560006115b1612aaa565b6001600160a01b03908116825260208083019390935260409182016000908120918c168152925290205490613429565b60105481565b60006115f1612aaa565b6001600160a01b03811660009081526007602052604090205490915060ff161561164c5760405162461bcd60e51b815260040180806020018281038252602c815260200180614220602c913960400191505060405180910390fd5b600061165783613483565b505050506001600160a01b038416600090815260036020526040902054919250611683919050826134d2565b6001600160a01b038316600090815260036020526040902055600b546116a990826134d2565b600b55600c546116b99084613429565b600c55505050565b6116c9612aaa565b6000546001600160a01b03908116911614611719576040805162461bcd60e51b8152602060048201819052602482015260008051602061416e833981519152604482015290519081900360640190fd5b737a250d5630b4cf539739df2c5dacb4c659f2488d6001600160a01b03821614156117755760405162461bcd60e51b81526004018080602001828103825260248152602001806141d76024913960400191505060405180910390fd5b6001600160a01b03811660009081526018602052604090205460ff16156117e3576040805162461bcd60e51b815260206004820152601e60248201527f4163636f756e7420697320616c726561647920626c61636b6c69737465640000604482015290519081900360640190fd5b6001600160a01b03166000818152601860205260408120805460ff191660019081179091556019805491820181559091527f944998273e477b495144fb8794c914197f3ccb46be2900f4698fd0ef743c96950180546001600160a01b0319169091179055565b611851612aaa565b6000546001600160a01b039081169116146118a1576040805162461bcd60e51b8152602060048201819052602482015260008051602061416e833981519152604482015290519081900360640190fd5b6001600160a01b03166000908152600660205260409020805460ff19166001179055565b6000600a5483111561191e576040805162461bcd60e51b815260206004820152601f60248201527f416d6f756e74206d757374206265206c657373207468616e20737570706c7900604482015290519081900360640190fd5b8161193d57600061192e84613483565b509395506110c7945050505050565b600061194884613483565b509295506110c7945050505050565b602354610100900460ff1681565b60176020526000908152604090205460ff1681565b611982612aaa565b6000546001600160a01b039081169116146119d2576040805162461bcd60e51b8152602060048201819052602482015260008051602061416e833981519152604482015290519081900360640190fd5b6001600160a01b03811660009081526007602052604090205460ff1615611a40576040805162461bcd60e51b815260206004820152601b60248201527f4163636f756e7420697320616c7265616479206578636c756465640000000000604482015290519081900360640190fd5b6001600160a01b03811660009081526003602052604090205415611a9a576001600160a01b038116600090815260036020526040902054611a8090611238565b6001600160a01b0382166000908152600460205260409020555b6001600160a01b03166000818152600760205260408120805460ff191660019081179091556009805491820181559091527f6e1540171b6c0c960b71a7020d9f60077f6af931a8bbf590da0223dacf75c7af0180546001600160a01b0319169091179055565b611b08612aaa565b6000546001600160a01b03908116911614611b58576040805162461bcd60e51b8152602060048201819052602482015260008051602061416e833981519152604482015290519081900360640190fd5b6014805460ff191682151517908190556040805160ff90921615158252517f0d63187a8abb5b4d1bb562e1163897386b0a88ee72e0799dd105bd0fd6f28706916020908290030190a150565b6001600160a01b0316600090815260086020526040902054420390565b60125481565b6001600160a01b03811660009081526007602052604081205460ff1615611c0757506001600160a01b038116600090815260046020526040902054611295565b6001600160a01b0382166000908152600360205260409020546110c790611238565b611c31612aaa565b6000546001600160a01b03908116911614611c81576040805162461bcd60e51b8152602060048201819052602482015260008051602061416e833981519152604482015290519081900360640190fd5b600080546040516001600160a01b039091169060008051602061418e833981519152908390a3600080546001600160a01b0319169055565b611cc1612aaa565b6000546001600160a01b03908116911614611d11576040805162461bcd60e51b8152602060048201819052602482015260008051602061416e833981519152604482015290519081900360640190fd5b60005b81811015611d67576001601b6000858585818110611d2e57fe5b602090810292909201356001600160a01b0316835250810191909152604001600020805460ff1916911515919091179055600101611d14565b505050565b6000478282611d7a82611bc7565b90506000805b600954811015611dc857611dbe82611db860098481548110611d9e57fe5b6000918252602090912001546001600160a01b0316611bc7565b90613429565b9150600101611d80565b50602154600090611e0e90611dfe908490611df890611def906001600160a01b0316611bc7565b600a54906134d2565b906134d2565b611e088588613514565b9061326c565b979650505050505050565b601c5481565b611e27612aaa565b6000546001600160a01b03908116911614611e77576040805162461bcd60e51b8152602060048201819052602482015260008051602061416e833981519152604482015290519081900360640190fd5b6001600160a01b03811660009081526018602052604090205460ff16611ee4576040805162461bcd60e51b815260206004820152601a60248201527f4163636f756e74206973206e6f7420626c61636b6c6973746564000000000000604482015290519081900360640190fd5b60005b60195481101561146457816001600160a01b031660198281548110611f0857fe5b6000918252602090912001546001600160a01b03161415611fa457601980546000198101908110611f3557fe5b600091825260209091200154601980546001600160a01b039092169183908110611f5b57fe5b600091825260208083209190910180546001600160a01b0319166001600160a01b039485161790559184168152601890915260409020805460ff19169055601980548061143557fe5b600101611ee7565b611fb4612aaa565b6000546001600160a01b03908116911614612004576040805162461bcd60e51b8152602060048201819052602482015260008051602061416e833981519152604482015290519081900360640190fd5b602180546001600160a01b0319166001600160a01b0392909216919091179055565b6015818154811061203357fe5b6000918252602090912001546001600160a01b0316905081565b6001600160a01b031660009081526007602052604090205460ff1690565b6000546001600160a01b031690565b612082612aaa565b6000546001600160a01b039081169116146120d2576040805162461bcd60e51b8152602060048201819052602482015260008051602061416e833981519152604482015290519081900360640190fd5b600a811115612128576040805162461bcd60e51b815260206004820152601f60248201527f4d6178696d756d20666565206c696d69742069732031302070657263656e7400604482015290519081900360640190fd5b601255565b600e8054604080516020601f60026000196101006001881615020190951694909404938401819004810282018101909252828152606093909290918301828280156110a55780601f1061107a576101008083540402835291602001916110a5565b612196612aaa565b6000546001600160a01b039081169116146121e6576040805162461bcd60e51b8152602060048201819052602482015260008051602061416e833981519152604482015290519081900360640190fd5b60005b81811015611d67576000601b600085858581811061220357fe5b602090810292909201356001600160a01b0316835250810191909152604001600020805460ff19169115159190911790556001016121e9565b60006110c3612249612aaa565b846111698560405180606001604052806025815260200161429d6025913960056000612273612aaa565b6001600160a01b03908116825260208083019390935260409182016000908120918d168152925290205491906131b2565b60255460ff1681565b6001546001600160a01b031633146122f65760405162461bcd60e51b815260040180806020018281038252602381526020018061427a6023913960400191505060405180910390fd5b600254421161234c576040805162461bcd60e51b815260206004820152601f60248201527f436f6e7472616374206973206c6f636b656420756e74696c2037206461797300604482015290519081900360640190fd5b600154600080546040516001600160a01b03938416939091169160008051602061418e83398151915291a3600154600080546001600160a01b0319166001600160a01b03909216919091179055565b60006110c36123a8612aaa565b8484612b36565b60025490565b6021546001600160a01b031681565b6123cc612aaa565b6000546001600160a01b0390811691161461241c576040805162461bcd60e51b8152602060048201819052602482015260008051602061416e833981519152604482015290519081900360640190fd5b602080546001600160a01b0319166001600160a01b0392909216919091179055565b6020546001600160a01b031681565b601e546001600160a01b0316612461612aaa565b6001600160a01b03161461247457600080fd5b600061247f30611bc7565b905061248a8161356d565b50565b612495612aaa565b6000546001600160a01b039081169116146124e5576040805162461bcd60e51b8152602060048201819052602482015260008051602061416e833981519152604482015290519081900360640190fd5b60238054821515610100810261ff00199092169190911790915560408051918252517f53726dfcaf90650aa7eb35524f4d3220f07413c8d6cb404cc8c18bf5591bc1599181900360200190a150565b61253c612aaa565b6000546001600160a01b0390811691161461258c576040805162461bcd60e51b8152602060048201819052602482015260008051602061416e833981519152604482015290519081900360640190fd5b6107d182106125cc5760405162461bcd60e51b815260040180806020018281038252602f8152602001806140d4602f913960400191505060405180910390fd5b60005b82811015612607576125ff858585848181106125e757fe5b905060200201356001600160a01b03168460006132b5565b6001016125cf565b5050505050565b612616612aaa565b6000546001600160a01b03908116911614612666576040805162461bcd60e51b8152602060048201819052602482015260008051602061416e833981519152604482015290519081900360640190fd5b6001600160a01b0381166000908152601b602052604090205460ff161515600114156126915761248a565b6001600160a01b0381166000908152601b60205260409020805460ff1916600117905550565b6126bf612aaa565b6000546001600160a01b0390811691161461270f576040805162461bcd60e51b8152602060048201819052602482015260008051602061416e833981519152604482015290519081900360640190fd5b6032811115612765576040805162461bcd60e51b815260206004820152601f60248201527f4d6178696d756d20746178206c696d69742069732031302070657263656e7400604482015290519081900360640190fd5b612780612710611e0883600a5461351490919063ffffffff16565b601c5550565b61278e612aaa565b6000546001600160a01b039081169116146127de576040805162461bcd60e51b8152602060048201819052602482015260008051602061416e833981519152604482015290519081900360640190fd5b60008054600180546001600160a01b03199081166001600160a01b03841617909155168155428201600255604051819060008051602061418e833981519152908290a350565b6001600160a01b03918216600090815260056020908152604080832093909416825291909152205490565b6001600160a01b031660009081526018602052604090205460ff1690565b612875612aaa565b6000546001600160a01b039081169116146128c5576040805162461bcd60e51b8152602060048201819052602482015260008051602061416e833981519152604482015290519081900360640190fd5b6001600160a01b03166000908152600660205260409020805460ff19169055565b6128ee612aaa565b6000546001600160a01b0390811691161461293e576040805162461bcd60e51b8152602060048201819052602482015260008051602061416e833981519152604482015290519081900360640190fd5b6001600160a01b0381166000908152601b602052604090205460ff166129635761248a565b6001600160a01b03166000908152601b60205260409020805460ff19169055565b61298c612aaa565b6000546001600160a01b039081169116146129dc576040805162461bcd60e51b8152602060048201819052602482015260008051602061416e833981519152604482015290519081900360640190fd5b6001600160a01b038116612a215760405162461bcd60e51b81526004018080602001828103825260268152602001806140ae6026913960400191505060405180910390fd5b600080546040516001600160a01b038085169392169160008051602061418e83398151915291a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b4761248a81613714565b6001600160a01b0381166000908152601b602052604081205460ff16151560011415612aa257506001611295565b506000611295565b3390565b6001600160a01b038316612ac157600080fd5b6001600160a01b038216612ad457600080fd5b6001600160a01b03808416600081815260056020908152604080832094871680845294825291829020859055815185815291517f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9259281900390910190a3505050565b6001600160a01b038316612b7b5760405162461bcd60e51b81526004018080602001828103825260258152602001806141fb6025913960400191505060405180910390fd5b6001600160a01b038216612bc05760405162461bcd60e51b815260040180806020018281038252602381526020018061400d6023913960400191505060405180910390fd5b60008111612bff5760405162461bcd60e51b81526004018080602001828103825260298152602001806141ae6029913960400191505060405180910390fd5b6001600160a01b03821660009081526018602052604090205460ff1615612c67576040805162461bcd60e51b8152602060048201526017602482015276596f752068617665206e6f20706f77657220686572652160481b604482015290519081900360640190fd5b6001600160a01b03831660009081526018602052604090205460ff1615612ccf576040805162461bcd60e51b8152602060048201526017602482015276596f752068617665206e6f20706f77657220686572652160481b604482015290519081900360640190fd5b6001600160a01b0383166000908152601b602052604090205460ff161580612cfe57506001600160a01b038216155b612d40576040805162461bcd60e51b815260206004820152600e60248201526d165bdd48185c994818985b9b995960921b604482015290519081900360640190fd5b6001600160a01b0382166000908152601b602052604090205460ff1615612dae576040805162461bcd60e51b815260206004820152601760248201527f54686520726563697069656e742069732062616e6e6564000000000000000000604482015290519081900360640190fd5b60255460ff1615156001148015612dde5750612dc861206b565b6001600160a01b0316836001600160a01b031614155b8015612e035750612ded61206b565b6001600160a01b0316826001600160a01b031614155b8015612e2857506001600160a01b03821660009081526006602052604090205460ff16155b15612eac576021546001600160a01b03838116911614612e6457681b1ae4d6e2ef500000612e5982611db885611bc7565b1115612e6457600080fd5b68056bc75e2d63100000811115612eac5760405162461bcd60e51b815260040180806020018281038252602c815260200180614058602c913960400191505060405180910390fd5b612eb461206b565b6001600160a01b0316836001600160a01b031614158015612eee5750612ed861206b565b6001600160a01b0316826001600160a01b031614155b8015612f1357506001600160a01b03821660009081526006602052604090205460ff16155b15612f8c5760145460ff1615612f8c573360009081526008602052604090206002015460ff16612f8c57604080516060810182526000808252602080830182815260018486018181523385526008909352949092209251835590519282019290925590516002909101805460ff19169115159190911790555b6021546001600160a01b038481169116148015612fb757506020546001600160a01b03838116911614155b8015612fdc57506001600160a01b03821660009081526006602052604090205460ff16155b1561306f5742602254111561306f57601c54811115612ffa57600080fd5b6001600160a01b03821660009081526008602052604090205442116130505760405162461bcd60e51b81526004018080602001828103825260228152602001806141036022913960400191505060405180910390fd5b6001600160a01b0382166000908152600860205260409020601e420190555b6001600160a01b03821660009081526017602052604090205460ff166130fb576015805460018082019092557f55f448fdea98c4d29eb340757ef0a66cd03dbb9538908a6a81d96026b71ec4750180546001600160a01b0319166001600160a01b03851690811790915560168054830190556000908152601760205260409020805460ff191690911790555b600061310630611bc7565b60245490915081108015908190613120575060235460ff16155b801561313a57506021546001600160a01b03868116911614155b801561314d5750602354610100900460ff165b1561315b5761315b82613799565b6001600160a01b03851660009081526006602052604090205460019060ff168061319d57506001600160a01b03851660009081526006602052604090205460ff165b156131a6575060005b61158b868686846132b5565b600081848411156132415760405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b838110156132065781810151838201526020016131ee565b50505050905090810190601f1680156132335780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b505050900390565b6000806000613256613943565b9092509050613265828261326c565b9250505090565b60006132ae83836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250613aa6565b9392505050565b806132c2576132c2613b0b565b6001600160a01b03841660009081526007602052604090205460ff16801561330357506001600160a01b03831660009081526007602052604090205460ff16155b1561331857613313848484613b3d565b613416565b6001600160a01b03841660009081526007602052604090205460ff1615801561335957506001600160a01b03831660009081526007602052604090205460ff165b1561336957613313848484613c61565b6001600160a01b03841660009081526007602052604090205460ff161580156133ab57506001600160a01b03831660009081526007602052604090205460ff16155b156133bb57613313848484613d0a565b6001600160a01b03841660009081526007602052604090205460ff1680156133fb57506001600160a01b03831660009081526007602052604090205460ff165b1561340b57613313848484613d4e565b613416848484613d0a565b8061342357613423613dc1565b50505050565b6000828201838110156132ae576040805162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b600080600080600080600080600061349a8a613dcf565b92509250925060008060006134b88d86866134b3613249565b613e0b565b919f909e50909c50959a5093985091965092945050505050565b60006132ae83836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f7700008152506131b2565b600082613523575060006110c7565b8282028284828161353057fe5b04146132ae5760405162461bcd60e51b81526004018080602001828103825260218152602001806141256021913960400191505060405180910390fd5b6040805160028082526060808301845292602083019080368337019050509050308160008151811061359b57fe5b6001600160a01b039283166020918202929092018101919091528054604080516315ab88c960e31b81529051919093169263ad5c4648926004808301939192829003018186803b1580156135ee57600080fd5b505afa158015613602573d6000803e3d6000fd5b505050506040513d602081101561361857600080fd5b505181518290600190811061362957fe5b6001600160a01b03928316602091820292909201810191909152546136519130911684612aae565b6020805460405163791ac94760e01b8152600481018581526000602483018190523060648401819052426084850181905260a060448601908152885160a487015288516001600160a01b039097169763791ac947978b9795968b9690939260c49091019187820191028083838b5b838110156136d75781810151838201526020016136bf565b505050509050019650505050505050600060405180830381600087803b15801561370057600080fd5b505af115801561158b573d6000803e3d6000fd5b601d546001600160a01b03166108fc61372e83600261326c565b6040518115909202916000818181858888f19350505050158015613756573d6000803e3d6000fd5b50601e546001600160a01b03166108fc61377183600261326c565b6040518115909202916000818181858888f19350505050158015611464573d6000803e3d6000fd5b6023805460ff1916600117905560006137b382600361326c565b905060006137c283600361326c565b905060006137d184600361326c565b905060006137e084600261326c565b905060006137ee85836134d2565b90504761380761380285611db88689613429565b61356d565b600061381347836134d2565b9050600061382282600361326c565b9050600061383182600261326c565b601d546040519192506001600160a01b03169082156108fc029083906000818181858888f1935050505015801561386c573d6000803e3d6000fd5b50601f546040516001600160a01b039091169082156108fc029083906000818181858888f193505050501580156138a7573d6000803e3d6000fd5b50601e546040516001600160a01b039091169083156108fc029084906000818181858888f193505050501580156138e2573d6000803e3d6000fd5b506138ed8583613e5b565b604080518781526020810184905280820187905290517f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb5619181900360600190a150506023805460ff191690555050505050505050565b600b54600a546000918291825b600954811015613a745782600360006009848154811061396c57fe5b60009182526020808320909101546001600160a01b0316835282019290925260400190205411806139d157508160046000600984815481106139aa57fe5b60009182526020808320909101546001600160a01b03168352820192909252604001902054115b156139e857600b54600a5494509450505050613aa2565b613a2860036000600984815481106139fc57fe5b60009182526020808320909101546001600160a01b0316835282019290925260400190205484906134d2565b9250613a6a6004600060098481548110613a3e57fe5b60009182526020808320909101546001600160a01b0316835282019290925260400190205483906134d2565b9150600101613950565b50600a54600b54613a849161326c565b821015613a9c57600b54600a54935093505050613aa2565b90925090505b9091565b60008183613af55760405162461bcd60e51b81526020600482018181528351602484015283519092839260449091019190850190808383600083156132065781810151838201526020016131ee565b506000838581613b0157fe5b0495945050505050565b601054158015613b1b5750601254155b15613b2557613b3b565b6010805460115560128054601355600091829055555b565b600080600080600080613b4f87613483565b6001600160a01b038f16600090815260046020526040902054959b50939950919750955093509150613b8190886134d2565b6001600160a01b038a16600090815260046020908152604080832093909355600390522054613bb090876134d2565b6001600160a01b03808b1660009081526003602052604080822093909355908a1681522054613bdf9086613429565b6001600160a01b038916600090815260036020526040902055613c0181613f28565b613c0b8483613fb0565b876001600160a01b0316896001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef856040518082815260200191505060405180910390a3505050505050505050565b600080600080600080613c7387613483565b6001600160a01b038f16600090815260036020526040902054959b50939950919750955093509150613ca590876134d2565b6001600160a01b03808b16600090815260036020908152604080832094909455918b16815260049091522054613cdb9084613429565b6001600160a01b038916600090815260046020908152604080832093909355600390522054613bdf9086613429565b600080600080600080613d1c87613483565b6001600160a01b038f16600090815260036020526040902054959b50939950919750955093509150613bb090876134d2565b600080600080600080613d6087613483565b6001600160a01b038f16600090815260046020526040902054959b50939950919750955093509150613d9290886134d2565b6001600160a01b038a16600090815260046020908152604080832093909355600390522054613ca590876134d2565b601154601055601354601255565b600080600080613dde85613fd4565b90506000613deb86613ff0565b90506000613dfd82611df889866134d2565b979296509094509092505050565b6000808080613e1a8886613514565b90506000613e288887613514565b90506000613e368888613514565b90506000613e4882611df886866134d2565b939b939a50919850919650505050505050565b602054613e739030906001600160a01b031684612aae565b6020546001600160a01b031663f305d719823085600080613e9261206b565b426040518863ffffffff1660e01b815260040180876001600160a01b03168152602001868152602001858152602001848152602001836001600160a01b0316815260200182815260200196505050505050506060604051808303818588803b158015613efd57600080fd5b505af1158015613f11573d6000803e3d6000fd5b50505050506040513d606081101561342357600080fd5b6000613f32613249565b90506000613f408383613514565b30600090815260036020526040902054909150613f5d9082613429565b3060009081526003602090815260408083209390935560079052205460ff1615611d675730600090815260046020526040902054613f9b9084613429565b30600090815260046020526040902055505050565b600b54613fbd90836134d2565b600b55600c54613fcd9082613429565b600c555050565b60006110c76064611e086010548561351490919063ffffffff16565b60006110c76064611e086012548561351490919063ffffffff1656fe45524332303a207472616e7366657220746f20746865207a65726f20616464726573734d69736d61746368206265747765656e204164647265737320616e6420746f6b656e20636f756e745472616e7366657220616d6f756e74206d757374206265206c657373207468616e2031303020746f6b656e73416d6f756e74206d757374206265206c657373207468616e20746f74616c207265666c656374696f6e734f776e61626c653a206e6577206f776e657220697320746865207a65726f2061646472657373474153204572726f723a206d61782061697264726f70206c696d6974206973203230303020726563697069656e7473596f75722062757920636f6f6c646f776e20686173206e6f7420657870697265642e536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f7745524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e63654f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65728be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e05472616e7366657220616d6f756e74206d7573742062652067726561746572207468616e207a65726f57652063616e206e6f7420626c61636b6c69737420556e697377617020726f757465722e45524332303a207472616e736665722066726f6d20746865207a65726f20616464726573734578636c75646564206164647265737365732063616e6e6f742063616c6c20746869732066756e6374696f6e474153204572726f723a206d61782061697264726f70206c696d69742069732038303020726563697069656e7473596f7520646f6e27742068617665207065726d697373696f6e20746f20756e6c6f636b45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa2646970667358221220472bbe55d2c7aa6a59a6331ffce431637e446b99a435cc4f6dc93d82a1d3e2ad64736f6c634300060c0033000000000000000000000000a40e6abb20633a525bfbf61fb77435be8b117068000000000000000000000000417c8031fe861512054d36631d5fd6e4bd524c9d0000000000000000000000003a311f52cbf2b05c16f7d3aff452162e4b8d2309

Deployed Bytecode

0x60806040526004361061039b5760003560e01c80637d1db4a5116101dc578063c0d7865511610102578063dd467064116100a0578063f157ce401161006f578063f157ce4014610eb8578063f2fde38b14610eeb578063f429389014610f1e578063fe575a8714610f33576103a2565b8063dd46706414610ded578063dd62ed3e14610e17578063e47d606014610e52578063ea2f0b3714610e85576103a2565b8063c49b9a80116100dc578063c49b9a8014610cd9578063c6c822d014610d05578063cad6ebf914610d90578063d543dbeb14610dc3576103a2565b8063c0d7865514610c7c578063c21ebd0714610caf578063c3c8cd8014610cc4576103a2565b806395d89b411161017a578063a69df4b511610149578063a69df4b514610c04578063a9059cbb14610c19578063b6c5232414610c52578063b8c9d25c14610c67576103a2565b806395d89b4114610b26578063a1bdc39914610b3b578063a457c2d714610bb6578063a4d66daf14610bef576103a2565b8063862a4bf2116101b6578063862a4bf214610a6e57806388f8202014610ab45780638da5cb5b14610ae75780638ee88c5314610afc576103a2565b80637d1db4a5146109f35780637ded4d6a14610a085780638187f51614610a3b576103a2565b80633b124fe7116102c157806352390c021161025f57806370a082311161022e57806370a08231146108fd578063715018a614610930578063772558ce1461094557806377e5006f146109c0576103a2565b806352390c02146108565780635932ead11461088957806368a3a6a5146108b55780636bc87c3a146108e8576103a2565b8063437823ec1161029b578063437823ec146107a95780634549b039146107dc5780634a74bb021461080e5780634dfefc4b14610823576103a2565b80633b124fe7146107375780633bd5d1731461074c5780634303443d14610776576103a2565b806323b872dd11610339578063313ce56711610308578063313ce567146105c55780633685d419146105f057806338cf5d991461062357806339509351146106fe576103a2565b806323b872dd1461052e5780632cde6081146105715780632d838119146105865780633055a78c146105b0576103a2565b806313114a9d1161037557806313114a9d146104aa578063178ef307146104d157806318160ddd146104e657806320b9588c146104fb576103a2565b8063061c82d0146103a757806306fdde03146103d3578063095ea7b31461045d576103a2565b366103a257005b600080fd5b3480156103b357600080fd5b506103d1600480360360208110156103ca57600080fd5b5035610f66565b005b3480156103df57600080fd5b506103e8611019565b6040805160208082528351818301528351919283929083019185019080838360005b8381101561042257818101518382015260200161040a565b50505050905090810190601f16801561044f5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b34801561046957600080fd5b506104966004803603604081101561048057600080fd5b506001600160a01b0381351690602001356110af565b604080519115158252519081900360200190f35b3480156104b657600080fd5b506104bf6110cd565b60408051918252519081900360200190f35b3480156104dd57600080fd5b506104bf6110d3565b3480156104f257600080fd5b506104bf6110d9565b34801561050757600080fd5b506104bf6004803603602081101561051e57600080fd5b50356001600160a01b03166110df565b34801561053a57600080fd5b506104966004803603606081101561055157600080fd5b506001600160a01b038135811691602081013590911690604001356110f1565b34801561057d57600080fd5b506103d1611178565b34801561059257600080fd5b506104bf600480360360208110156105a957600080fd5b5035611238565b3480156105bc57600080fd5b506104bf61129a565b3480156105d157600080fd5b506105da61129e565b6040805160ff9092168252519081900360200190f35b3480156105fc57600080fd5b506103d16004803603602081101561061357600080fd5b50356001600160a01b03166112a7565b34801561062f57600080fd5b506103d16004803603606081101561064657600080fd5b6001600160a01b038235169190810190604081016020820135600160201b81111561067057600080fd5b82018360208201111561068257600080fd5b803590602001918460208302840111600160201b831117156106a357600080fd5b919390929091602081019035600160201b8111156106c057600080fd5b8201836020820111156106d257600080fd5b803590602001918460208302840111600160201b831117156106f357600080fd5b509092509050611468565b34801561070a57600080fd5b506104966004803603604081101561072157600080fd5b506001600160a01b038135169060200135611593565b34801561074357600080fd5b506104bf6115e1565b34801561075857600080fd5b506103d16004803603602081101561076f57600080fd5b50356115e7565b34801561078257600080fd5b506103d16004803603602081101561079957600080fd5b50356001600160a01b03166116c1565b3480156107b557600080fd5b506103d1600480360360208110156107cc57600080fd5b50356001600160a01b0316611849565b3480156107e857600080fd5b506104bf600480360360408110156107ff57600080fd5b508035906020013515156118c5565b34801561081a57600080fd5b50610496611957565b34801561082f57600080fd5b506104966004803603602081101561084657600080fd5b50356001600160a01b0316611965565b34801561086257600080fd5b506103d16004803603602081101561087957600080fd5b50356001600160a01b031661197a565b34801561089557600080fd5b506103d1600480360360208110156108ac57600080fd5b50351515611b00565b3480156108c157600080fd5b506104bf600480360360208110156108d857600080fd5b50356001600160a01b0316611ba4565b3480156108f457600080fd5b506104bf611bc1565b34801561090957600080fd5b506104bf6004803603602081101561092057600080fd5b50356001600160a01b0316611bc7565b34801561093c57600080fd5b506103d1611c29565b34801561095157600080fd5b506103d16004803603602081101561096857600080fd5b810190602081018135600160201b81111561098257600080fd5b82018360208201111561099457600080fd5b803590602001918460208302840111600160201b831117156109b557600080fd5b509092509050611cb9565b3480156109cc57600080fd5b506104bf600480360360208110156109e357600080fd5b50356001600160a01b0316611d6c565b3480156109ff57600080fd5b506104bf611e19565b348015610a1457600080fd5b506103d160048036036020811015610a2b57600080fd5b50356001600160a01b0316611e1f565b348015610a4757600080fd5b506103d160048036036020811015610a5e57600080fd5b50356001600160a01b0316611fac565b348015610a7a57600080fd5b50610a9860048036036020811015610a9157600080fd5b5035612026565b604080516001600160a01b039092168252519081900360200190f35b348015610ac057600080fd5b5061049660048036036020811015610ad757600080fd5b50356001600160a01b031661204d565b348015610af357600080fd5b50610a9861206b565b348015610b0857600080fd5b506103d160048036036020811015610b1f57600080fd5b503561207a565b348015610b3257600080fd5b506103e861212d565b348015610b4757600080fd5b506103d160048036036020811015610b5e57600080fd5b810190602081018135600160201b811115610b7857600080fd5b820183602082011115610b8a57600080fd5b803590602001918460208302840111600160201b83111715610bab57600080fd5b50909250905061218e565b348015610bc257600080fd5b5061049660048036036040811015610bd957600080fd5b506001600160a01b03813516906020013561223c565b348015610bfb57600080fd5b506104966122a4565b348015610c1057600080fd5b506103d16122ad565b348015610c2557600080fd5b5061049660048036036040811015610c3c57600080fd5b506001600160a01b03813516906020013561239b565b348015610c5e57600080fd5b506104bf6123af565b348015610c7357600080fd5b50610a986123b5565b348015610c8857600080fd5b506103d160048036036020811015610c9f57600080fd5b50356001600160a01b03166123c4565b348015610cbb57600080fd5b50610a9861243e565b348015610cd057600080fd5b506103d161244d565b348015610ce557600080fd5b506103d160048036036020811015610cfc57600080fd5b5035151561248d565b348015610d1157600080fd5b506103d160048036036060811015610d2857600080fd5b6001600160a01b038235169190810190604081016020820135600160201b811115610d5257600080fd5b820183602082011115610d6457600080fd5b803590602001918460208302840111600160201b83111715610d8557600080fd5b919350915035612534565b348015610d9c57600080fd5b506103d160048036036020811015610db357600080fd5b50356001600160a01b031661260e565b348015610dcf57600080fd5b506103d160048036036020811015610de657600080fd5b50356126b7565b348015610df957600080fd5b506103d160048036036020811015610e1057600080fd5b5035612786565b348015610e2357600080fd5b506104bf60048036036040811015610e3a57600080fd5b506001600160a01b0381358116916020013516612824565b348015610e5e57600080fd5b5061049660048036036020811015610e7557600080fd5b50356001600160a01b031661284f565b348015610e9157600080fd5b506103d160048036036020811015610ea857600080fd5b50356001600160a01b031661286d565b348015610ec457600080fd5b506103d160048036036020811015610edb57600080fd5b50356001600160a01b03166128e6565b348015610ef757600080fd5b506103d160048036036020811015610f0e57600080fd5b50356001600160a01b0316612984565b348015610f2a57600080fd5b506103d1612a6a565b348015610f3f57600080fd5b5061049660048036036020811015610f5657600080fd5b50356001600160a01b0316612a74565b610f6e612aaa565b6000546001600160a01b03908116911614610fbe576040805162461bcd60e51b8152602060048201819052602482015260008051602061416e833981519152604482015290519081900360640190fd5b600a811115611014576040805162461bcd60e51b815260206004820152601f60248201527f4d6178696d756d20666565206c696d69742069732031302070657263656e7400604482015290519081900360640190fd5b601055565b600d8054604080516020601f60026000196101006001881615020190951694909404938401819004810282018101909252828152606093909290918301828280156110a55780601f1061107a576101008083540402835291602001916110a5565b820191906000526020600020905b81548152906001019060200180831161108857829003601f168201915b5050505050905090565b60006110c36110bc612aaa565b8484612aae565b5060015b92915050565b600c5490565b60165481565b600a5490565b60266020526000908152604090205481565b60006110fe848484612b36565b61116e8461110a612aaa565b61116985604051806060016040528060288152602001614146602891396001600160a01b038a16600090815260056020526040812090611148612aaa565b6001600160a01b0316815260208101919091526040016000205491906131b2565b612aae565b5060019392505050565b611180612aaa565b6000546001600160a01b039081169116146111d0576040805162461bcd60e51b8152602060048201819052602482015260008051602061416e833981519152604482015290519081900360640190fd5b60255460ff161515600114611225576040805162461bcd60e51b81526020600482015260166024820152756c696d697420697320616c72656164792066616c736560501b604482015290519081900360640190fd5b6025805460ff19169055603c4201602255565b6000600b5482111561127b5760405162461bcd60e51b815260040180806020018281038252602a815260200180614084602a913960400191505060405180910390fd5b6000611285613249565b9050611291838261326c565b9150505b919050565b4790565b600f5460ff1690565b6112af612aaa565b6000546001600160a01b039081169116146112ff576040805162461bcd60e51b8152602060048201819052602482015260008051602061416e833981519152604482015290519081900360640190fd5b6001600160a01b03811660009081526007602052604090205460ff1661136c576040805162461bcd60e51b815260206004820152601b60248201527f4163636f756e7420697320616c7265616479206578636c756465640000000000604482015290519081900360640190fd5b60005b60095481101561146457816001600160a01b03166009828154811061139057fe5b6000918252602090912001546001600160a01b0316141561145c576009805460001981019081106113bd57fe5b600091825260209091200154600980546001600160a01b0390921691839081106113e357fe5b600091825260208083209190910180546001600160a01b0319166001600160a01b039485161790559184168152600482526040808220829055600790925220805460ff19169055600980548061143557fe5b600082815260209020810160001990810180546001600160a01b0319169055019055611464565b60010161136f565b5050565b611470612aaa565b6000546001600160a01b039081169116146114c0576040805162461bcd60e51b8152602060048201819052602482015260008051602061416e833981519152604482015290519081900360640190fd5b61032183106115005760405162461bcd60e51b815260040180806020018281038252602e81526020018061424c602e913960400191505060405180910390fd5b82811461153e5760405162461bcd60e51b81526004018080602001828103825260288152602001806140306028913960400191505060405180910390fd5b60005b8381101561158b576115838686868481811061155957fe5b905060200201356001600160a01b031685858581811061157557fe5b9050602002013560006132b5565b600101611541565b505050505050565b60006110c36115a0612aaa565b8461116985600560006115b1612aaa565b6001600160a01b03908116825260208083019390935260409182016000908120918c168152925290205490613429565b60105481565b60006115f1612aaa565b6001600160a01b03811660009081526007602052604090205490915060ff161561164c5760405162461bcd60e51b815260040180806020018281038252602c815260200180614220602c913960400191505060405180910390fd5b600061165783613483565b505050506001600160a01b038416600090815260036020526040902054919250611683919050826134d2565b6001600160a01b038316600090815260036020526040902055600b546116a990826134d2565b600b55600c546116b99084613429565b600c55505050565b6116c9612aaa565b6000546001600160a01b03908116911614611719576040805162461bcd60e51b8152602060048201819052602482015260008051602061416e833981519152604482015290519081900360640190fd5b737a250d5630b4cf539739df2c5dacb4c659f2488d6001600160a01b03821614156117755760405162461bcd60e51b81526004018080602001828103825260248152602001806141d76024913960400191505060405180910390fd5b6001600160a01b03811660009081526018602052604090205460ff16156117e3576040805162461bcd60e51b815260206004820152601e60248201527f4163636f756e7420697320616c726561647920626c61636b6c69737465640000604482015290519081900360640190fd5b6001600160a01b03166000818152601860205260408120805460ff191660019081179091556019805491820181559091527f944998273e477b495144fb8794c914197f3ccb46be2900f4698fd0ef743c96950180546001600160a01b0319169091179055565b611851612aaa565b6000546001600160a01b039081169116146118a1576040805162461bcd60e51b8152602060048201819052602482015260008051602061416e833981519152604482015290519081900360640190fd5b6001600160a01b03166000908152600660205260409020805460ff19166001179055565b6000600a5483111561191e576040805162461bcd60e51b815260206004820152601f60248201527f416d6f756e74206d757374206265206c657373207468616e20737570706c7900604482015290519081900360640190fd5b8161193d57600061192e84613483565b509395506110c7945050505050565b600061194884613483565b509295506110c7945050505050565b602354610100900460ff1681565b60176020526000908152604090205460ff1681565b611982612aaa565b6000546001600160a01b039081169116146119d2576040805162461bcd60e51b8152602060048201819052602482015260008051602061416e833981519152604482015290519081900360640190fd5b6001600160a01b03811660009081526007602052604090205460ff1615611a40576040805162461bcd60e51b815260206004820152601b60248201527f4163636f756e7420697320616c7265616479206578636c756465640000000000604482015290519081900360640190fd5b6001600160a01b03811660009081526003602052604090205415611a9a576001600160a01b038116600090815260036020526040902054611a8090611238565b6001600160a01b0382166000908152600460205260409020555b6001600160a01b03166000818152600760205260408120805460ff191660019081179091556009805491820181559091527f6e1540171b6c0c960b71a7020d9f60077f6af931a8bbf590da0223dacf75c7af0180546001600160a01b0319169091179055565b611b08612aaa565b6000546001600160a01b03908116911614611b58576040805162461bcd60e51b8152602060048201819052602482015260008051602061416e833981519152604482015290519081900360640190fd5b6014805460ff191682151517908190556040805160ff90921615158252517f0d63187a8abb5b4d1bb562e1163897386b0a88ee72e0799dd105bd0fd6f28706916020908290030190a150565b6001600160a01b0316600090815260086020526040902054420390565b60125481565b6001600160a01b03811660009081526007602052604081205460ff1615611c0757506001600160a01b038116600090815260046020526040902054611295565b6001600160a01b0382166000908152600360205260409020546110c790611238565b611c31612aaa565b6000546001600160a01b03908116911614611c81576040805162461bcd60e51b8152602060048201819052602482015260008051602061416e833981519152604482015290519081900360640190fd5b600080546040516001600160a01b039091169060008051602061418e833981519152908390a3600080546001600160a01b0319169055565b611cc1612aaa565b6000546001600160a01b03908116911614611d11576040805162461bcd60e51b8152602060048201819052602482015260008051602061416e833981519152604482015290519081900360640190fd5b60005b81811015611d67576001601b6000858585818110611d2e57fe5b602090810292909201356001600160a01b0316835250810191909152604001600020805460ff1916911515919091179055600101611d14565b505050565b6000478282611d7a82611bc7565b90506000805b600954811015611dc857611dbe82611db860098481548110611d9e57fe5b6000918252602090912001546001600160a01b0316611bc7565b90613429565b9150600101611d80565b50602154600090611e0e90611dfe908490611df890611def906001600160a01b0316611bc7565b600a54906134d2565b906134d2565b611e088588613514565b9061326c565b979650505050505050565b601c5481565b611e27612aaa565b6000546001600160a01b03908116911614611e77576040805162461bcd60e51b8152602060048201819052602482015260008051602061416e833981519152604482015290519081900360640190fd5b6001600160a01b03811660009081526018602052604090205460ff16611ee4576040805162461bcd60e51b815260206004820152601a60248201527f4163636f756e74206973206e6f7420626c61636b6c6973746564000000000000604482015290519081900360640190fd5b60005b60195481101561146457816001600160a01b031660198281548110611f0857fe5b6000918252602090912001546001600160a01b03161415611fa457601980546000198101908110611f3557fe5b600091825260209091200154601980546001600160a01b039092169183908110611f5b57fe5b600091825260208083209190910180546001600160a01b0319166001600160a01b039485161790559184168152601890915260409020805460ff19169055601980548061143557fe5b600101611ee7565b611fb4612aaa565b6000546001600160a01b03908116911614612004576040805162461bcd60e51b8152602060048201819052602482015260008051602061416e833981519152604482015290519081900360640190fd5b602180546001600160a01b0319166001600160a01b0392909216919091179055565b6015818154811061203357fe5b6000918252602090912001546001600160a01b0316905081565b6001600160a01b031660009081526007602052604090205460ff1690565b6000546001600160a01b031690565b612082612aaa565b6000546001600160a01b039081169116146120d2576040805162461bcd60e51b8152602060048201819052602482015260008051602061416e833981519152604482015290519081900360640190fd5b600a811115612128576040805162461bcd60e51b815260206004820152601f60248201527f4d6178696d756d20666565206c696d69742069732031302070657263656e7400604482015290519081900360640190fd5b601255565b600e8054604080516020601f60026000196101006001881615020190951694909404938401819004810282018101909252828152606093909290918301828280156110a55780601f1061107a576101008083540402835291602001916110a5565b612196612aaa565b6000546001600160a01b039081169116146121e6576040805162461bcd60e51b8152602060048201819052602482015260008051602061416e833981519152604482015290519081900360640190fd5b60005b81811015611d67576000601b600085858581811061220357fe5b602090810292909201356001600160a01b0316835250810191909152604001600020805460ff19169115159190911790556001016121e9565b60006110c3612249612aaa565b846111698560405180606001604052806025815260200161429d6025913960056000612273612aaa565b6001600160a01b03908116825260208083019390935260409182016000908120918d168152925290205491906131b2565b60255460ff1681565b6001546001600160a01b031633146122f65760405162461bcd60e51b815260040180806020018281038252602381526020018061427a6023913960400191505060405180910390fd5b600254421161234c576040805162461bcd60e51b815260206004820152601f60248201527f436f6e7472616374206973206c6f636b656420756e74696c2037206461797300604482015290519081900360640190fd5b600154600080546040516001600160a01b03938416939091169160008051602061418e83398151915291a3600154600080546001600160a01b0319166001600160a01b03909216919091179055565b60006110c36123a8612aaa565b8484612b36565b60025490565b6021546001600160a01b031681565b6123cc612aaa565b6000546001600160a01b0390811691161461241c576040805162461bcd60e51b8152602060048201819052602482015260008051602061416e833981519152604482015290519081900360640190fd5b602080546001600160a01b0319166001600160a01b0392909216919091179055565b6020546001600160a01b031681565b601e546001600160a01b0316612461612aaa565b6001600160a01b03161461247457600080fd5b600061247f30611bc7565b905061248a8161356d565b50565b612495612aaa565b6000546001600160a01b039081169116146124e5576040805162461bcd60e51b8152602060048201819052602482015260008051602061416e833981519152604482015290519081900360640190fd5b60238054821515610100810261ff00199092169190911790915560408051918252517f53726dfcaf90650aa7eb35524f4d3220f07413c8d6cb404cc8c18bf5591bc1599181900360200190a150565b61253c612aaa565b6000546001600160a01b0390811691161461258c576040805162461bcd60e51b8152602060048201819052602482015260008051602061416e833981519152604482015290519081900360640190fd5b6107d182106125cc5760405162461bcd60e51b815260040180806020018281038252602f8152602001806140d4602f913960400191505060405180910390fd5b60005b82811015612607576125ff858585848181106125e757fe5b905060200201356001600160a01b03168460006132b5565b6001016125cf565b5050505050565b612616612aaa565b6000546001600160a01b03908116911614612666576040805162461bcd60e51b8152602060048201819052602482015260008051602061416e833981519152604482015290519081900360640190fd5b6001600160a01b0381166000908152601b602052604090205460ff161515600114156126915761248a565b6001600160a01b0381166000908152601b60205260409020805460ff1916600117905550565b6126bf612aaa565b6000546001600160a01b0390811691161461270f576040805162461bcd60e51b8152602060048201819052602482015260008051602061416e833981519152604482015290519081900360640190fd5b6032811115612765576040805162461bcd60e51b815260206004820152601f60248201527f4d6178696d756d20746178206c696d69742069732031302070657263656e7400604482015290519081900360640190fd5b612780612710611e0883600a5461351490919063ffffffff16565b601c5550565b61278e612aaa565b6000546001600160a01b039081169116146127de576040805162461bcd60e51b8152602060048201819052602482015260008051602061416e833981519152604482015290519081900360640190fd5b60008054600180546001600160a01b03199081166001600160a01b03841617909155168155428201600255604051819060008051602061418e833981519152908290a350565b6001600160a01b03918216600090815260056020908152604080832093909416825291909152205490565b6001600160a01b031660009081526018602052604090205460ff1690565b612875612aaa565b6000546001600160a01b039081169116146128c5576040805162461bcd60e51b8152602060048201819052602482015260008051602061416e833981519152604482015290519081900360640190fd5b6001600160a01b03166000908152600660205260409020805460ff19169055565b6128ee612aaa565b6000546001600160a01b0390811691161461293e576040805162461bcd60e51b8152602060048201819052602482015260008051602061416e833981519152604482015290519081900360640190fd5b6001600160a01b0381166000908152601b602052604090205460ff166129635761248a565b6001600160a01b03166000908152601b60205260409020805460ff19169055565b61298c612aaa565b6000546001600160a01b039081169116146129dc576040805162461bcd60e51b8152602060048201819052602482015260008051602061416e833981519152604482015290519081900360640190fd5b6001600160a01b038116612a215760405162461bcd60e51b81526004018080602001828103825260268152602001806140ae6026913960400191505060405180910390fd5b600080546040516001600160a01b038085169392169160008051602061418e83398151915291a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b4761248a81613714565b6001600160a01b0381166000908152601b602052604081205460ff16151560011415612aa257506001611295565b506000611295565b3390565b6001600160a01b038316612ac157600080fd5b6001600160a01b038216612ad457600080fd5b6001600160a01b03808416600081815260056020908152604080832094871680845294825291829020859055815185815291517f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9259281900390910190a3505050565b6001600160a01b038316612b7b5760405162461bcd60e51b81526004018080602001828103825260258152602001806141fb6025913960400191505060405180910390fd5b6001600160a01b038216612bc05760405162461bcd60e51b815260040180806020018281038252602381526020018061400d6023913960400191505060405180910390fd5b60008111612bff5760405162461bcd60e51b81526004018080602001828103825260298152602001806141ae6029913960400191505060405180910390fd5b6001600160a01b03821660009081526018602052604090205460ff1615612c67576040805162461bcd60e51b8152602060048201526017602482015276596f752068617665206e6f20706f77657220686572652160481b604482015290519081900360640190fd5b6001600160a01b03831660009081526018602052604090205460ff1615612ccf576040805162461bcd60e51b8152602060048201526017602482015276596f752068617665206e6f20706f77657220686572652160481b604482015290519081900360640190fd5b6001600160a01b0383166000908152601b602052604090205460ff161580612cfe57506001600160a01b038216155b612d40576040805162461bcd60e51b815260206004820152600e60248201526d165bdd48185c994818985b9b995960921b604482015290519081900360640190fd5b6001600160a01b0382166000908152601b602052604090205460ff1615612dae576040805162461bcd60e51b815260206004820152601760248201527f54686520726563697069656e742069732062616e6e6564000000000000000000604482015290519081900360640190fd5b60255460ff1615156001148015612dde5750612dc861206b565b6001600160a01b0316836001600160a01b031614155b8015612e035750612ded61206b565b6001600160a01b0316826001600160a01b031614155b8015612e2857506001600160a01b03821660009081526006602052604090205460ff16155b15612eac576021546001600160a01b03838116911614612e6457681b1ae4d6e2ef500000612e5982611db885611bc7565b1115612e6457600080fd5b68056bc75e2d63100000811115612eac5760405162461bcd60e51b815260040180806020018281038252602c815260200180614058602c913960400191505060405180910390fd5b612eb461206b565b6001600160a01b0316836001600160a01b031614158015612eee5750612ed861206b565b6001600160a01b0316826001600160a01b031614155b8015612f1357506001600160a01b03821660009081526006602052604090205460ff16155b15612f8c5760145460ff1615612f8c573360009081526008602052604090206002015460ff16612f8c57604080516060810182526000808252602080830182815260018486018181523385526008909352949092209251835590519282019290925590516002909101805460ff19169115159190911790555b6021546001600160a01b038481169116148015612fb757506020546001600160a01b03838116911614155b8015612fdc57506001600160a01b03821660009081526006602052604090205460ff16155b1561306f5742602254111561306f57601c54811115612ffa57600080fd5b6001600160a01b03821660009081526008602052604090205442116130505760405162461bcd60e51b81526004018080602001828103825260228152602001806141036022913960400191505060405180910390fd5b6001600160a01b0382166000908152600860205260409020601e420190555b6001600160a01b03821660009081526017602052604090205460ff166130fb576015805460018082019092557f55f448fdea98c4d29eb340757ef0a66cd03dbb9538908a6a81d96026b71ec4750180546001600160a01b0319166001600160a01b03851690811790915560168054830190556000908152601760205260409020805460ff191690911790555b600061310630611bc7565b60245490915081108015908190613120575060235460ff16155b801561313a57506021546001600160a01b03868116911614155b801561314d5750602354610100900460ff165b1561315b5761315b82613799565b6001600160a01b03851660009081526006602052604090205460019060ff168061319d57506001600160a01b03851660009081526006602052604090205460ff165b156131a6575060005b61158b868686846132b5565b600081848411156132415760405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b838110156132065781810151838201526020016131ee565b50505050905090810190601f1680156132335780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b505050900390565b6000806000613256613943565b9092509050613265828261326c565b9250505090565b60006132ae83836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250613aa6565b9392505050565b806132c2576132c2613b0b565b6001600160a01b03841660009081526007602052604090205460ff16801561330357506001600160a01b03831660009081526007602052604090205460ff16155b1561331857613313848484613b3d565b613416565b6001600160a01b03841660009081526007602052604090205460ff1615801561335957506001600160a01b03831660009081526007602052604090205460ff165b1561336957613313848484613c61565b6001600160a01b03841660009081526007602052604090205460ff161580156133ab57506001600160a01b03831660009081526007602052604090205460ff16155b156133bb57613313848484613d0a565b6001600160a01b03841660009081526007602052604090205460ff1680156133fb57506001600160a01b03831660009081526007602052604090205460ff165b1561340b57613313848484613d4e565b613416848484613d0a565b8061342357613423613dc1565b50505050565b6000828201838110156132ae576040805162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b600080600080600080600080600061349a8a613dcf565b92509250925060008060006134b88d86866134b3613249565b613e0b565b919f909e50909c50959a5093985091965092945050505050565b60006132ae83836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f7700008152506131b2565b600082613523575060006110c7565b8282028284828161353057fe5b04146132ae5760405162461bcd60e51b81526004018080602001828103825260218152602001806141256021913960400191505060405180910390fd5b6040805160028082526060808301845292602083019080368337019050509050308160008151811061359b57fe5b6001600160a01b039283166020918202929092018101919091528054604080516315ab88c960e31b81529051919093169263ad5c4648926004808301939192829003018186803b1580156135ee57600080fd5b505afa158015613602573d6000803e3d6000fd5b505050506040513d602081101561361857600080fd5b505181518290600190811061362957fe5b6001600160a01b03928316602091820292909201810191909152546136519130911684612aae565b6020805460405163791ac94760e01b8152600481018581526000602483018190523060648401819052426084850181905260a060448601908152885160a487015288516001600160a01b039097169763791ac947978b9795968b9690939260c49091019187820191028083838b5b838110156136d75781810151838201526020016136bf565b505050509050019650505050505050600060405180830381600087803b15801561370057600080fd5b505af115801561158b573d6000803e3d6000fd5b601d546001600160a01b03166108fc61372e83600261326c565b6040518115909202916000818181858888f19350505050158015613756573d6000803e3d6000fd5b50601e546001600160a01b03166108fc61377183600261326c565b6040518115909202916000818181858888f19350505050158015611464573d6000803e3d6000fd5b6023805460ff1916600117905560006137b382600361326c565b905060006137c283600361326c565b905060006137d184600361326c565b905060006137e084600261326c565b905060006137ee85836134d2565b90504761380761380285611db88689613429565b61356d565b600061381347836134d2565b9050600061382282600361326c565b9050600061383182600261326c565b601d546040519192506001600160a01b03169082156108fc029083906000818181858888f1935050505015801561386c573d6000803e3d6000fd5b50601f546040516001600160a01b039091169082156108fc029083906000818181858888f193505050501580156138a7573d6000803e3d6000fd5b50601e546040516001600160a01b039091169083156108fc029084906000818181858888f193505050501580156138e2573d6000803e3d6000fd5b506138ed8583613e5b565b604080518781526020810184905280820187905290517f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb5619181900360600190a150506023805460ff191690555050505050505050565b600b54600a546000918291825b600954811015613a745782600360006009848154811061396c57fe5b60009182526020808320909101546001600160a01b0316835282019290925260400190205411806139d157508160046000600984815481106139aa57fe5b60009182526020808320909101546001600160a01b03168352820192909252604001902054115b156139e857600b54600a5494509450505050613aa2565b613a2860036000600984815481106139fc57fe5b60009182526020808320909101546001600160a01b0316835282019290925260400190205484906134d2565b9250613a6a6004600060098481548110613a3e57fe5b60009182526020808320909101546001600160a01b0316835282019290925260400190205483906134d2565b9150600101613950565b50600a54600b54613a849161326c565b821015613a9c57600b54600a54935093505050613aa2565b90925090505b9091565b60008183613af55760405162461bcd60e51b81526020600482018181528351602484015283519092839260449091019190850190808383600083156132065781810151838201526020016131ee565b506000838581613b0157fe5b0495945050505050565b601054158015613b1b5750601254155b15613b2557613b3b565b6010805460115560128054601355600091829055555b565b600080600080600080613b4f87613483565b6001600160a01b038f16600090815260046020526040902054959b50939950919750955093509150613b8190886134d2565b6001600160a01b038a16600090815260046020908152604080832093909355600390522054613bb090876134d2565b6001600160a01b03808b1660009081526003602052604080822093909355908a1681522054613bdf9086613429565b6001600160a01b038916600090815260036020526040902055613c0181613f28565b613c0b8483613fb0565b876001600160a01b0316896001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef856040518082815260200191505060405180910390a3505050505050505050565b600080600080600080613c7387613483565b6001600160a01b038f16600090815260036020526040902054959b50939950919750955093509150613ca590876134d2565b6001600160a01b03808b16600090815260036020908152604080832094909455918b16815260049091522054613cdb9084613429565b6001600160a01b038916600090815260046020908152604080832093909355600390522054613bdf9086613429565b600080600080600080613d1c87613483565b6001600160a01b038f16600090815260036020526040902054959b50939950919750955093509150613bb090876134d2565b600080600080600080613d6087613483565b6001600160a01b038f16600090815260046020526040902054959b50939950919750955093509150613d9290886134d2565b6001600160a01b038a16600090815260046020908152604080832093909355600390522054613ca590876134d2565b601154601055601354601255565b600080600080613dde85613fd4565b90506000613deb86613ff0565b90506000613dfd82611df889866134d2565b979296509094509092505050565b6000808080613e1a8886613514565b90506000613e288887613514565b90506000613e368888613514565b90506000613e4882611df886866134d2565b939b939a50919850919650505050505050565b602054613e739030906001600160a01b031684612aae565b6020546001600160a01b031663f305d719823085600080613e9261206b565b426040518863ffffffff1660e01b815260040180876001600160a01b03168152602001868152602001858152602001848152602001836001600160a01b0316815260200182815260200196505050505050506060604051808303818588803b158015613efd57600080fd5b505af1158015613f11573d6000803e3d6000fd5b50505050506040513d606081101561342357600080fd5b6000613f32613249565b90506000613f408383613514565b30600090815260036020526040902054909150613f5d9082613429565b3060009081526003602090815260408083209390935560079052205460ff1615611d675730600090815260046020526040902054613f9b9084613429565b30600090815260046020526040902055505050565b600b54613fbd90836134d2565b600b55600c54613fcd9082613429565b600c555050565b60006110c76064611e086010548561351490919063ffffffff16565b60006110c76064611e086012548561351490919063ffffffff1656fe45524332303a207472616e7366657220746f20746865207a65726f20616464726573734d69736d61746368206265747765656e204164647265737320616e6420746f6b656e20636f756e745472616e7366657220616d6f756e74206d757374206265206c657373207468616e2031303020746f6b656e73416d6f756e74206d757374206265206c657373207468616e20746f74616c207265666c656374696f6e734f776e61626c653a206e6577206f776e657220697320746865207a65726f2061646472657373474153204572726f723a206d61782061697264726f70206c696d6974206973203230303020726563697069656e7473596f75722062757920636f6f6c646f776e20686173206e6f7420657870697265642e536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f7745524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e63654f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65728be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e05472616e7366657220616d6f756e74206d7573742062652067726561746572207468616e207a65726f57652063616e206e6f7420626c61636b6c69737420556e697377617020726f757465722e45524332303a207472616e736665722066726f6d20746865207a65726f20616464726573734578636c75646564206164647265737365732063616e6e6f742063616c6c20746869732066756e6374696f6e474153204572726f723a206d61782061697264726f70206c696d69742069732038303020726563697069656e7473596f7520646f6e27742068617665207065726d697373696f6e20746f20756e6c6f636b45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa2646970667358221220472bbe55d2c7aa6a59a6331ffce431637e446b99a435cc4f6dc93d82a1d3e2ad64736f6c634300060c0033

Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)

000000000000000000000000a40e6abb20633a525bfbf61fb77435be8b117068000000000000000000000000417c8031fe861512054d36631d5fd6e4bd524c9d0000000000000000000000003a311f52cbf2b05c16f7d3aff452162e4b8d2309

-----Decoded View---------------
Arg [0] : addr1 (address): 0xA40e6abB20633A525Bfbf61fb77435be8B117068
Arg [1] : addr2 (address): 0x417c8031Fe861512054D36631d5Fd6e4BD524C9D
Arg [2] : addr3 (address): 0x3a311F52cBf2B05c16f7D3AfF452162e4B8d2309

-----Encoded View---------------
3 Constructor Arguments found :
Arg [0] : 000000000000000000000000a40e6abb20633a525bfbf61fb77435be8b117068
Arg [1] : 000000000000000000000000417c8031fe861512054d36631d5fd6e4bd524c9d
Arg [2] : 0000000000000000000000003a311f52cbf2b05c16f7d3aff452162e4b8d2309


Deployed Bytecode Sourcemap

25737:25702:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;48697:166;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;48697:166:0;;:::i;:::-;;29056:83;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;31937:161;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;31937:161:0;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;33058:87;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;26864:39;;;;;;;;;;;;;:::i;29333:95::-;;;;;;;;;;;;;:::i;39163:44::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;39163:44:0;-1:-1:-1;;;;;39163:44:0;;:::i;32106:313::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;32106:313:0;;;;;;;;;;;;;;;;;:::i;35483:195::-;;;;;;;;;;;;;:::i;33982:253::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;33982:253:0;;:::i;40877:99::-;;;;;;;;;;;;;:::i;29242:83::-;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;34698:479;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;34698:479:0;-1:-1:-1;;;;;34698:479:0;;:::i;50316:584::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;50316:584:0;;;;;;;;;;;;;;;-1:-1:-1;;;50316:584:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;50316:584:0;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;50316:584:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;50316:584:0;;;;;;;;;;-1:-1:-1;50316:584:0;;-1:-1:-1;50316:584:0;-1:-1:-1;50316:584:0;:::i;32427:218::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;32427:218:0;;;;;;;;:::i;26536:26::-;;;;;;;;;;;;;:::i;33153:377::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;33153:377:0;;:::i;29817:352::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;29817:352:0;-1:-1:-1;;;;;29817:352:0;;:::i;48460:111::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;48460:111:0;-1:-1:-1;;;;;48460:111:0;;:::i;33538:436::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;33538:436:0;;;;;;;;;:::i;27477:41::-;;;;;;;;;;;;;:::i;26910:37::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;26910:37:0;-1:-1:-1;;;;;26910:37:0;;:::i;34243:447::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;34243:447:0;-1:-1:-1;;;;;34243:447:0;;:::i;49318:160::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;49318:160:0;;;;:::i;50184:124::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;50184:124:0;-1:-1:-1;;;;;50184:124:0;;:::i;26619:32::-;;;;;;;;;;;;;:::i;29436:198::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;29436:198:0;-1:-1:-1;;;;;29436:198:0;;:::i;16350:148::-;;;;;;;;;;;;;:::i;30994:205::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;30994:205:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;30994:205:0;;;;;;;;;;-1:-1:-1;30994:205:0;;-1:-1:-1;30994:205:0;-1:-1:-1;30994:205:0;:::i;35688:529::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;35688:529:0;-1:-1:-1;;;;;35688:529:0;;:::i;27171:47::-;;;;;;;;;;;;;:::i;30177:500::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;30177:500:0;-1:-1:-1;;;;;30177:500:0;;:::i;28719:103::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;28719:103:0;-1:-1:-1;;;;;28719:103:0;;:::i;26828:29::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;26828:29:0;;:::i;:::-;;;;-1:-1:-1;;;;;26828:29:0;;;;;;;;;;;;;;32930:120;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;32930:120:0;-1:-1:-1;;;;;32930:120:0;;:::i;15707:79::-;;;;;;;;;;;;;:::i;48871:195::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;48871:195:0;;:::i;29147:87::-;;;;;;;;;;;;;:::i;31570:208::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;31570:208:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;31570:208:0;;;;;;;;;;-1:-1:-1;31570:208:0;;-1:-1:-1;31570:208:0;-1:-1:-1;31570:208:0;:::i;32653:269::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;32653:269:0;;;;;;;;:::i;35452:24::-;;;;;;;;;;;;;:::i;17356:293::-;;;;;;;;;;;;;:::i;29642:167::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;29642:167:0;;;;;;;;:::i;16905:89::-;;;;;;;;;;;;;:::i;27380:26::-;;;;;;;;;;;;;:::i;28854:194::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;28854:194:0;-1:-1:-1;;;;;28854:194:0;;:::i;27336:37::-;;;;;;;;;;;;;:::i;49486:193::-;;;;;;;;;;;;;:::i;50001:171::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;50001:171:0;;;;:::i;50907:437::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;50907:437:0;;;;;;;;;;;;;;;-1:-1:-1;;;50907:437:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;50907:437:0;;;;;;;;;;;;-1:-1:-1;50907:437:0;-1:-1:-1;50907:437:0;;:::i;30812:174::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;30812:174:0;-1:-1:-1;;;;;30812:174:0;;:::i;49074:236::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;49074:236:0;;:::i;17070:214::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;17070:214:0;;:::i;31786:143::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;31786:143:0;;;;;;;;;;:::i;30685:119::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;30685:119:0;-1:-1:-1;;;;;30685:119:0;;:::i;48579:110::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;48579:110:0;-1:-1:-1;;;;;48579:110:0;;:::i;31381:181::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;31381:181:0;-1:-1:-1;;;;;31381:181:0;;:::i;16653:244::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;16653:244:0;-1:-1:-1;;;;;16653:244:0;;:::i;49687:149::-;;;;;;;;;;;;;:::i;31207:164::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;31207:164:0;-1:-1:-1;;;;;31207:164:0;;:::i;48697:166::-;15929:12;:10;:12::i;:::-;15919:6;;-1:-1:-1;;;;;15919:6:0;;;:22;;;15911:67;;;;;-1:-1:-1;;;15911:67:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;15911:67:0;;;;;;;;;;;;;;;48790:2:::1;48780:6;:12;;48772:56;;;::::0;;-1:-1:-1;;;48772:56:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;::::1;::::0;;;;;;;;;;;;;::::1;;48839:7;:16:::0;48697:166::o;29056:83::-;29126:5;29119:12;;;;;;;;-1:-1:-1;;29119:12:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29093:13;;29119:12;;29126:5;;29119:12;;29126:5;29119:12;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29056:83;:::o;31937:161::-;32012:4;32029:39;32038:12;:10;:12::i;:::-;32052:7;32061:6;32029:8;:39::i;:::-;-1:-1:-1;32086:4:0;31937:161;;;;;:::o;33058:87::-;33127:10;;33058:87;:::o;26864:39::-;;;;:::o;29333:95::-;29413:7;;29333:95;:::o;39163:44::-;;;;;;;;;;;;;:::o;32106:313::-;32204:4;32221:36;32231:6;32239:9;32250:6;32221:9;:36::i;:::-;32268:121;32277:6;32285:12;:10;:12::i;:::-;32299:89;32337:6;32299:89;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;32299:19:0;;;;;;:11;:19;;;;;;32319:12;:10;:12::i;:::-;-1:-1:-1;;;;;32299:33:0;;;;;;;;;;;;-1:-1:-1;32299:33:0;;;:89;:37;:89::i;:::-;32268:8;:121::i;:::-;-1:-1:-1;32407:4:0;32106:313;;;;;:::o;35483:195::-;15929:12;:10;:12::i;:::-;15919:6;;-1:-1:-1;;;;;15919:6:0;;;:22;;;15911:67;;;;;-1:-1:-1;;;15911:67:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;15911:67:0;;;;;;;;;;;;;;;35543:5:::1;::::0;::::1;;:13;;:5:::0;:13:::1;35535:48;;;::::0;;-1:-1:-1;;;35535:48:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;35535:48:0;;;;;;;;;;;;;::::1;;35598:5;:13:::0;;-1:-1:-1;;35598:13:0::1;::::0;;35659:10:::1;35640:15;:30;35626:11;:44:::0;35483:195::o;33982:253::-;34048:7;34087;;34076;:18;;34068:73;;;;-1:-1:-1;;;34068:73:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;34152:19;34175:10;:8;:10::i;:::-;34152:33;-1:-1:-1;34203:24:0;:7;34152:33;34203:11;:24::i;:::-;34196:31;;;33982:253;;;;:::o;40877:99::-;40947:21;40877:99;:::o;29242:83::-;29308:9;;;;29242:83;:::o;34698:479::-;15929:12;:10;:12::i;:::-;15919:6;;-1:-1:-1;;;;;15919:6:0;;;:22;;;15911:67;;;;;-1:-1:-1;;;15911:67:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;15911:67:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;34780:20:0;::::1;;::::0;;;:11:::1;:20;::::0;;;;;::::1;;34772:60;;;::::0;;-1:-1:-1;;;34772:60:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;::::1;::::0;;;;;;;;;;;;;::::1;;34848:9;34843:327;34867:9;:16:::0;34863:20;::::1;34843:327;;;34925:7;-1:-1:-1::0;;;;;34909:23:0::1;:9;34919:1;34909:12;;;;;;;;;::::0;;;::::1;::::0;;;::::1;::::0;-1:-1:-1;;;;;34909:12:0::1;:23;34905:254;;;34968:9;34978:16:::0;;-1:-1:-1;;34978:20:0;;;34968:31;::::1;;;;;;::::0;;;::::1;::::0;;;::::1;::::0;34953:9:::1;:12:::0;;-1:-1:-1;;;;;34968:31:0;;::::1;::::0;34963:1;;34953:12;::::1;;;;;;::::0;;;::::1;::::0;;;;;;::::1;:46:::0;;-1:-1:-1;;;;;;34953:46:0::1;-1:-1:-1::0;;;;;34953:46:0;;::::1;;::::0;;35018:16;;::::1;::::0;;:7:::1;:16:::0;;;;;;:20;;;35057:11:::1;:20:::0;;;;:28;;-1:-1:-1;;35057:28:0::1;::::0;;35104:9:::1;:15:::0;;;::::1;;;;;::::0;;;::::1;::::0;;;;-1:-1:-1;;35104:15:0;;;;;-1:-1:-1;;;;;;35104:15:0::1;::::0;;;;;35138:5:::1;;34905:254;34885:3;;34843:327;;;;34698:479:::0;:::o;50316:584::-;15929:12;:10;:12::i;:::-;15919:6;;-1:-1:-1;;;;;15919:6:0;;;:22;;;15911:67;;;;;-1:-1:-1;;;15911:67:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;15911:67:0;;;;;;;;;;;;;;;50515:3:::1;50495:23:::0;::::1;50473:119;;;;-1:-1:-1::0;;;50473:119:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;50648:34:::0;;::::1;50626:124;;;;-1:-1:-1::0;;;50626:124:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;50768:9;50763:130;50783:21:::0;;::::1;50763:130;;;50826:55;50841:6;50849:10;;50860:1;50849:13;;;;;;;;;;;;;-1:-1:-1::0;;;;;50849:13:0::1;50864:6;;50871:1;50864:9;;;;;;;;;;;;;50875:5;50826:14;:55::i;:::-;50806:3;;50763:130;;;;50316:584:::0;;;;;:::o;32427:218::-;32515:4;32532:83;32541:12;:10;:12::i;:::-;32555:7;32564:50;32603:10;32564:11;:25;32576:12;:10;:12::i;:::-;-1:-1:-1;;;;;32564:25:0;;;;;;;;;;;;;;;;;-1:-1:-1;32564:25:0;;;:34;;;;;;;;;;;:38;:50::i;26536:26::-;;;;:::o;33153:377::-;33205:14;33222:12;:10;:12::i;:::-;-1:-1:-1;;;;;33254:19:0;;;;;;:11;:19;;;;;;33205:29;;-1:-1:-1;33254:19:0;;33253:20;33245:77;;;;-1:-1:-1;;;33245:77:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;33334:15;33358:19;33369:7;33358:10;:19::i;:::-;-1:-1:-1;;;;;;;;;33406:15:0;;;;;;:7;:15;;;;;;33333:44;;-1:-1:-1;33406:28:0;;:15;-1:-1:-1;33333:44:0;33406:19;:28::i;:::-;-1:-1:-1;;;;;33388:15:0;;;;;;:7;:15;;;;;:46;33455:7;;:20;;33467:7;33455:11;:20::i;:::-;33445:7;:30;33499:10;;:23;;33514:7;33499:14;:23::i;:::-;33486:10;:36;-1:-1:-1;;;33153:377:0:o;29817:352::-;15929:12;:10;:12::i;:::-;15919:6;;-1:-1:-1;;;;;15919:6:0;;;:22;;;15911:67;;;;;-1:-1:-1;;;15911:67:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;15911:67:0;;;;;;;;;;;;;;;29912:42:::1;-1:-1:-1::0;;;;;29901:53:0;::::1;;;29893:102;;;;-1:-1:-1::0;;;29893:102:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1::0;;;;;30015:26:0;::::1;;::::0;;;:17:::1;:26;::::0;;;;;::::1;;30014:27;30006:70;;;::::0;;-1:-1:-1;;;30006:70:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;::::1;::::0;;;;;;;;;;;;;::::1;;-1:-1:-1::0;;;;;30087:26:0::1;;::::0;;;:17:::1;:26;::::0;;;;:33;;-1:-1:-1;;30087:33:0::1;30116:4;30087:33:::0;;::::1;::::0;;;30131:16:::1;:30:::0;;;;::::1;::::0;;;;;;::::1;::::0;;-1:-1:-1;;;;;;30131:30:0::1;::::0;;::::1;::::0;;29817:352::o;48460:111::-;15929:12;:10;:12::i;:::-;15919:6;;-1:-1:-1;;;;;15919:6:0;;;:22;;;15911:67;;;;;-1:-1:-1;;;15911:67:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;15911:67:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;48529:27:0::1;;::::0;;;:18:::1;:27;::::0;;;;:34;;-1:-1:-1;;48529:34:0::1;48559:4;48529:34;::::0;;48460:111::o;33538:436::-;33628:7;33667;;33656;:18;;33648:62;;;;;-1:-1:-1;;;33648:62:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;33726:17;33721:246;;33761:15;33785:19;33796:7;33785:10;:19::i;:::-;-1:-1:-1;33760:44:0;;-1:-1:-1;33819:14:0;;-1:-1:-1;;;;;33819:14:0;33721:246;33868:23;33899:19;33910:7;33899:10;:19::i;:::-;-1:-1:-1;33866:52:0;;-1:-1:-1;33933:22:0;;-1:-1:-1;;;;;33933:22:0;27477:41;;;;;;;;;:::o;26910:37::-;;;;;;;;;;;;;;;:::o;34243:447::-;15929:12;:10;:12::i;:::-;15919:6;;-1:-1:-1;;;;;15919:6:0;;;:22;;;15911:67;;;;;-1:-1:-1;;;15911:67:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;15911:67:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;34440:20:0;::::1;;::::0;;;:11:::1;:20;::::0;;;;;::::1;;34439:21;34431:61;;;::::0;;-1:-1:-1;;;34431:61:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;::::1;::::0;;;;;;;;;;;;;::::1;;-1:-1:-1::0;;;;;34506:16:0;::::1;34525:1;34506:16:::0;;;:7:::1;:16;::::0;;;;;:20;34503:108:::1;;-1:-1:-1::0;;;;;34582:16:0;::::1;;::::0;;;:7:::1;:16;::::0;;;;;34562:37:::1;::::0;:19:::1;:37::i;:::-;-1:-1:-1::0;;;;;34543:16:0;::::1;;::::0;;;:7:::1;:16;::::0;;;;:56;34503:108:::1;-1:-1:-1::0;;;;;34621:20:0::1;;::::0;;;:11:::1;:20;::::0;;;;:27;;-1:-1:-1;;34621:27:0::1;34644:4;34621:27:::0;;::::1;::::0;;;34659:9:::1;:23:::0;;;;::::1;::::0;;;;;;::::1;::::0;;-1:-1:-1;;;;;;34659:23:0::1;::::0;;::::1;::::0;;34243:447::o;49318:160::-;15929:12;:10;:12::i;:::-;15919:6;;-1:-1:-1;;;;;15919:6:0;;;:22;;;15911:67;;;;;-1:-1:-1;;;15911:67:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;15911:67:0;;;;;;;;;;;;;;;49390:16:::1;:24:::0;;-1:-1:-1;;49390:24:0::1;::::0;::::1;;;::::0;;;;49430:40:::1;::::0;;49390:24:::1;49453:16:::0;;::::1;49430:40;;::::0;;;::::1;::::0;::::1;::::0;;;;;;::::1;49318:160:::0;:::o;50184:124::-;-1:-1:-1;;;;;50281:15:0;50239:4;50281:15;;;:8;:15;;;;;:19;50263:15;:37;;50184:124::o;26619:32::-;;;;:::o;29436:198::-;-1:-1:-1;;;;;29526:20:0;;29502:7;29526:20;;;:11;:20;;;;;;;;29522:49;;;-1:-1:-1;;;;;;29555:16:0;;;;;;:7;:16;;;;;;29548:23;;29522:49;-1:-1:-1;;;;;29609:16:0;;;;;;:7;:16;;;;;;29589:37;;:19;:37::i;16350:148::-;15929:12;:10;:12::i;:::-;15919:6;;-1:-1:-1;;;;;15919:6:0;;;:22;;;15911:67;;;;;-1:-1:-1;;;15911:67:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;15911:67:0;;;;;;;;;;;;;;;16457:1:::1;16441:6:::0;;16420:40:::1;::::0;-1:-1:-1;;;;;16441:6:0;;::::1;::::0;-1:-1:-1;;;;;;;;;;;16420:40:0;16457:1;;16420:40:::1;16488:1;16471:19:::0;;-1:-1:-1;;;;;;16471:19:0::1;::::0;;16350:148::o;30994:205::-;15929:12;:10;:12::i;:::-;15919:6;;-1:-1:-1;;;;;15919:6:0;;;:22;;;15911:67;;;;;-1:-1:-1;;;15911:67:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;15911:67:0;;;;;;;;;;;;;;;31092:9:::1;31087:105;31103:20:::0;;::::1;31087:105;;;31176:4;31145:14;:28;31160:9;;31170:1;31160:12;;;;;;;;::::0;;::::1;::::0;;;::::1;;-1:-1:-1::0;;;;;31160:12:0::1;31145:28:::0;;-1:-1:-1;31145:28:0;::::1;::::0;;;;;;-1:-1:-1;31145:28:0;:35;;-1:-1:-1;;31145:35:0::1;::::0;::::1;;::::0;;;::::1;::::0;;-1:-1:-1;31125:3:0::1;31087:105;;;;30994:205:::0;;:::o;35688:529::-;35752:7;35790:21;35839:7;35752;35878:17;35839:7;35878:9;:17::i;:::-;35857:38;-1:-1:-1;35906:21:0;;35938:131;35959:9;:16;35957:18;;35938:131;;;36012:45;36040:16;36012:23;36022:9;36032:1;36022:12;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;36022:12:0;36012:9;:23::i;:::-;:27;;:45::i;:::-;35993:64;-1:-1:-1;35977:3:0;;35938:131;;;-1:-1:-1;36148:11:0;;36079:15;;36097:87;;36126:57;;36166:16;;36126:35;;36138:22;;-1:-1:-1;;;;;36148:11:0;36138:9;:22::i;:::-;36126:7;;;:11;:35::i;:::-;:39;;:57::i;:::-;36097:24;:10;36112:8;36097:14;:24::i;:::-;:28;;:87::i;:::-;36079:105;35688:529;-1:-1:-1;;;;;;;35688:529:0:o;27171:47::-;;;;:::o;30177:500::-;15929:12;:10;:12::i;:::-;15919:6;;-1:-1:-1;;;;;15919:6:0;;;:22;;;15911:67;;;;;-1:-1:-1;;;15911:67:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;15911:67:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;30266:26:0;::::1;;::::0;;;:17:::1;:26;::::0;;;;;::::1;;30258:65;;;::::0;;-1:-1:-1;;;30258:65:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;::::1;::::0;;;;;;;;;;;;;::::1;;30339:9;30334:336;30358:16;:23:::0;30354:27;::::1;30334:336;;;30430:7;-1:-1:-1::0;;;;;30407:30:0::1;:16;30424:1;30407:19;;;;;;;;;::::0;;;::::1;::::0;;;::::1;::::0;-1:-1:-1;;;;;30407:19:0::1;:30;30403:256;;;30480:16;30497:23:::0;;-1:-1:-1;;30497:27:0;;;30480:45;::::1;;;;;;::::0;;;::::1;::::0;;;::::1;::::0;30458:16:::1;:19:::0;;-1:-1:-1;;;;;30480:45:0;;::::1;::::0;30475:1;;30458:19;::::1;;;;;;::::0;;;::::1;::::0;;;;;;::::1;:67:::0;;-1:-1:-1;;;;;;30458:67:0::1;-1:-1:-1::0;;;;;30458:67:0;;::::1;;::::0;;30544:26;;::::1;::::0;;:17:::1;:26:::0;;;;;;:34;;-1:-1:-1;;30544:34:0::1;::::0;;30597:16:::1;:22:::0;;;::::1;;;30403:256;30383:3;;30334:336;;28719:103:::0;15929:12;:10;:12::i;:::-;15919:6;;-1:-1:-1;;;;;15919:6:0;;;:22;;;15911:67;;;;;-1:-1:-1;;;15911:67:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;15911:67:0;;;;;;;;;;;;;;;28788:11:::1;:26:::0;;-1:-1:-1;;;;;;28788:26:0::1;-1:-1:-1::0;;;;;28788:26:0;;;::::1;::::0;;;::::1;::::0;;28719:103::o;26828:29::-;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;26828:29:0;;-1:-1:-1;26828:29:0;:::o;32930:120::-;-1:-1:-1;;;;;33022:20:0;32998:4;33022:20;;;:11;:20;;;;;;;;;32930:120::o;15707:79::-;15745:7;15772:6;-1:-1:-1;;;;;15772:6:0;15707:79;:::o;48871:195::-;15929:12;:10;:12::i;:::-;15919:6;;-1:-1:-1;;;;;15919:6:0;;;:22;;;15911:67;;;;;-1:-1:-1;;;15911:67:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;15911:67:0;;;;;;;;;;;;;;;48981:2:::1;48965:12;:18;;48957:62;;;::::0;;-1:-1:-1;;;48957:62:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;::::1;::::0;;;;;;;;;;;;;::::1;;49030:13;:28:::0;48871:195::o;29147:87::-;29219:7;29212:14;;;;;;;;-1:-1:-1;;29212:14:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29186:13;;29212:14;;29219:7;;29212:14;;29219:7;29212:14;;;;;;;;;;;;;;;;;;;;;;;;31570:208;15929:12;:10;:12::i;:::-;15919:6;;-1:-1:-1;;;;;15919:6:0;;;:22;;;15911:67;;;;;-1:-1:-1;;;15911:67:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;15911:67:0;;;;;;;;;;;;;;;31670:9:::1;31665:106;31681:20:::0;;::::1;31665:106;;;31754:5;31723:14;:28;31738:9;;31748:1;31738:12;;;;;;;;::::0;;::::1;::::0;;;::::1;;-1:-1:-1::0;;;;;31738:12:0::1;31723:28:::0;;-1:-1:-1;31723:28:0;::::1;::::0;;;;;;-1:-1:-1;31723:28:0;:36;;-1:-1:-1;;31723:36:0::1;::::0;::::1;;::::0;;;::::1;::::0;;-1:-1:-1;31703:3:0::1;31665:106;;32653:269:::0;32746:4;32763:129;32772:12;:10;:12::i;:::-;32786:7;32795:96;32834:15;32795:96;;;;;;;;;;;;;;;;;:11;:25;32807:12;:10;:12::i;:::-;-1:-1:-1;;;;;32795:25:0;;;;;;;;;;;;;;;;;-1:-1:-1;32795:25:0;;;:34;;;;;;;;;;;:96;:38;:96::i;35452:24::-;;;;;;:::o;17356:293::-;17408:14;;-1:-1:-1;;;;;17408:14:0;17426:10;17408:28;17400:76;;;;-1:-1:-1;;;17400:76:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17501:9;;17495:3;:15;17487:60;;;;;-1:-1:-1;;;17487:60:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;17592:14;;;17584:6;;17563:44;;-1:-1:-1;;;;;17592:14:0;;;;17584:6;;;;-1:-1:-1;;;;;;;;;;;17563:44:0;;17627:14;;;17618:23;;-1:-1:-1;;;;;;17618:23:0;-1:-1:-1;;;;;17627:14:0;;;17618:23;;;;;;17356:293::o;29642:167::-;29720:4;29737:42;29747:12;:10;:12::i;:::-;29761:9;29772:6;29737:9;:42::i;16905:89::-;16977:9;;16905:89;:::o;27380:26::-;;;-1:-1:-1;;;;;27380:26:0;;:::o;28854:194::-;15929:12;:10;:12::i;:::-;15919:6;;-1:-1:-1;;;;;15919:6:0;;;:22;;;15911:67;;;;;-1:-1:-1;;;15911:67:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;15911:67:0;;;;;;;;;;;;;;;29010:13:::1;:30:::0;;-1:-1:-1;;;;;;29010:30:0::1;-1:-1:-1::0;;;;;29010:30:0;;;::::1;::::0;;;::::1;::::0;;28854:194::o;27336:37::-;;;-1:-1:-1;;;;;27336:37:0;;:::o;49486:193::-;49552:13;;-1:-1:-1;;;;;49552:13:0;49536:12;:10;:12::i;:::-;-1:-1:-1;;;;;49536:29:0;;49528:38;;;;;;49577:23;49603:24;49621:4;49603:9;:24::i;:::-;49577:50;;49638:33;49655:15;49638:16;:33::i;:::-;49486:193;:::o;50001:171::-;15929:12;:10;:12::i;:::-;15919:6;;-1:-1:-1;;;;;15919:6:0;;;:22;;;15911:67;;;;;-1:-1:-1;;;15911:67:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;15911:67:0;;;;;;;;;;;;;;;50078:21:::1;:32:::0;;;::::1;;;::::0;::::1;-1:-1:-1::0;;50078:32:0;;::::1;::::0;;;::::1;::::0;;;50126:38:::1;::::0;;;;;;::::1;::::0;;;;::::1;::::0;;::::1;50001:171:::0;:::o;50907:437::-;15929:12;:10;:12::i;:::-;15919:6;;-1:-1:-1;;;;;15919:6:0;;;:22;;;15911:67;;;;;-1:-1:-1;;;15911:67:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;15911:67:0;;;;;;;;;;;;;;;51095:4:::1;51075:24:::0;::::1;51053:121;;;;-1:-1:-1::0;;;51053:121:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;51215:9;51210:127;51230:21:::0;;::::1;51210:127;;;51273:52;51288:6;51296:10;;51307:1;51296:13;;;;;;;;;;;;;-1:-1:-1::0;;;;;51296:13:0::1;51311:6;51319:5;51273:14;:52::i;:::-;51253:3;;51210:127;;;;50907:437:::0;;;;:::o;30812:174::-;15929:12;:10;:12::i;:::-;15919:6;;-1:-1:-1;;;;;15919:6:0;;;:22;;;15911:67;;;;;-1:-1:-1;;;15911:67:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;15911:67:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;30894:25:0;::::1;;::::0;;;:14:::1;:25;::::0;;;;;::::1;;:33;;:25:::0;:33:::1;30891:45;;;30929:7;;30891:45;-1:-1:-1::0;;;;;30946:25:0;::::1;;::::0;;;:14:::1;:25;::::0;;;;:32;;-1:-1:-1;;30946:32:0::1;30974:4;30946:32;::::0;;30812:174;:::o;49074:236::-;15929:12;:10;:12::i;:::-;15919:6;;-1:-1:-1;;;;;15919:6:0;;;:22;;;15911:67;;;;;-1:-1:-1;;;15911:67:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;15911:67:0;;;;;;;;;;;;;;;49178:2:::1;49162:12;:18;;49154:62;;;::::0;;-1:-1:-1;;;49154:62:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;::::1;::::0;;;;;;;;;;;;;::::1;;49242:60;49286:5;49242:25;49254:12;49242:7;;:11;;:25;;;;:::i;:60::-;49227:12;:75:::0;-1:-1:-1;49074:236:0:o;17070:214::-;15929:12;:10;:12::i;:::-;15919:6;;-1:-1:-1;;;;;15919:6:0;;;:22;;;15911:67;;;;;-1:-1:-1;;;15911:67:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;15911:67:0;;;;;;;;;;;;;;;17151:6:::1;::::0;;;17134:23;;-1:-1:-1;;;;;;17134:23:0;;::::1;-1:-1:-1::0;;;;;17151:6:0;::::1;17134:23;::::0;;;17168:19:::1;::::0;;17210:3:::1;:10:::0;::::1;17198:9;:22:::0;17236:40:::1;::::0;17151:6;;-1:-1:-1;;;;;;;;;;;17236:40:0;17151:6;;17236:40:::1;17070:214:::0;:::o;31786:143::-;-1:-1:-1;;;;;31894:18:0;;;31867:7;31894:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;31786:143::o;30685:119::-;-1:-1:-1;;;;;30770:26:0;30746:4;30770:26;;;:17;:26;;;;;;;;;30685:119::o;48579:110::-;15929:12;:10;:12::i;:::-;15919:6;;-1:-1:-1;;;;;15919:6:0;;;:22;;;15911:67;;;;;-1:-1:-1;;;15911:67:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;15911:67:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;48646:27:0::1;48676:5;48646:27:::0;;;:18:::1;:27;::::0;;;;:35;;-1:-1:-1;;48646:35:0::1;::::0;;48579:110::o;31381:181::-;15929:12;:10;:12::i;:::-;15919:6;;-1:-1:-1;;;;;15919:6:0;;;:22;;;15911:67;;;;;-1:-1:-1;;;15911:67:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;15911:67:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;31468:25:0;::::1;;::::0;;;:14:::1;:25;::::0;;;;;::::1;;31465:46;;31504:7;;31465:46;-1:-1:-1::0;;;;;31521:25:0::1;31549:5;31521:25:::0;;;:14:::1;:25;::::0;;;;:33;;-1:-1:-1;;31521:33:0::1;::::0;;31381:181::o;16653:244::-;15929:12;:10;:12::i;:::-;15919:6;;-1:-1:-1;;;;;15919:6:0;;;:22;;;15911:67;;;;;-1:-1:-1;;;15911:67:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;15911:67:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;16742:22:0;::::1;16734:73;;;;-1:-1:-1::0;;;16734:73:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16844:6;::::0;;16823:38:::1;::::0;-1:-1:-1;;;;;16823:38:0;;::::1;::::0;16844:6;::::1;::::0;-1:-1:-1;;;;;;;;;;;16823:38:0;::::1;16872:6;:17:::0;;-1:-1:-1;;;;;;16872:17:0::1;-1:-1:-1::0;;;;;16872:17:0;;;::::1;::::0;;;::::1;::::0;;16653:244::o;49687:149::-;49758:21;49790:38;49758:21;49790:18;:38::i;31207:164::-;-1:-1:-1;;;;;31289:25:0;;31270:4;31289:25;;;:14;:25;;;;;;;;:33;;:25;:33;31286:77;;;-1:-1:-1;31331:4:0;31324:11;;31286:77;-1:-1:-1;31358:5:0;31351:12;;93:106;181:10;93:106;:::o;35185:259::-;-1:-1:-1;;;;;35278:19:0;;35270:28;;;;;;-1:-1:-1;;;;;35317:21:0;;35309:30;;;;;;-1:-1:-1;;;;;35352:18:0;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;:36;;;35404:32;;;;;;;;;;;;;;;;;35185:259;;;:::o;36225:2932::-;-1:-1:-1;;;;;36347:18:0;;36339:68;;;;-1:-1:-1;;;36339:68:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;36426:16:0;;36418:64;;;;-1:-1:-1;;;36418:64:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;36510:1;36501:6;:10;36493:64;;;;-1:-1:-1;;;36493:64:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;36577:21:0;;;;;;:17;:21;;;;;;;;36576:22;36568:58;;;;;-1:-1:-1;;;36568:58:0;;;;;;;;;;;;-1:-1:-1;;;36568:58:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;36646:23:0;;;;;;:17;:23;;;;;;;;36645:24;36637:60;;;;;-1:-1:-1;;;36637:60:0;;;;;;;;;;;;-1:-1:-1;;;36637:60:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;36716:20:0;;;;;;:14;:20;;;;;;;;:29;;:49;;-1:-1:-1;;;;;;36749:16:0;;;36716:49;36708:76;;;;;-1:-1:-1;;;36708:76:0;;;;;;;;;;;;-1:-1:-1;;;36708:76:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;36803:18:0;;;;;;:14;:18;;;;;;;;:27;36795:63;;;;;-1:-1:-1;;;36795:63:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;36874:5;;;;:14;;:5;:14;:33;;;;;36900:7;:5;:7::i;:::-;-1:-1:-1;;;;;36892:15:0;:4;-1:-1:-1;;;;;36892:15:0;;;36874:33;:50;;;;;36917:7;:5;:7::i;:::-;-1:-1:-1;;;;;36911:13:0;:2;-1:-1:-1;;;;;36911:13:0;;;36874:50;:77;;;;-1:-1:-1;;;;;;36929:22:0;;;;;;:18;:22;;;;;;;;36928:23;36874:77;36871:309;;;36976:11;;-1:-1:-1;;;;;36970:17:0;;;36976:11;;36970:17;36967:107;;37047:9;37017:25;37035:6;37017:13;37027:2;37017:9;:13::i;:25::-;37016:40;;37007:51;;;;;;37106:9;37096:6;:19;;37088:76;;;;-1:-1:-1;;;37088:76:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;37201:7;:5;:7::i;:::-;-1:-1:-1;;;;;37193:15:0;:4;-1:-1:-1;;;;;37193:15:0;;;:32;;;;;37218:7;:5;:7::i;:::-;-1:-1:-1;;;;;37212:13:0;:2;-1:-1:-1;;;;;37212:13:0;;;37193:32;:59;;;;-1:-1:-1;;;;;;37230:22:0;;;;;;:18;:22;;;;;;;;37229:23;37193:59;37190:270;;;37284:16;;;;37281:168;;;37334:10;37325:20;;;;:8;:20;;;;;:27;;;;;37321:113;;37400:14;;;;;;;;-1:-1:-1;37400:14:0;;;;;;;;;;37409:4;37400:14;;;;;;37386:10;37377:20;;:8;:20;;;;;;;:37;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;37377:37:0;;;;;;;;;;37321:113;37507:11;;-1:-1:-1;;;;;37499:19:0;;;37507:11;;37499:19;:51;;;;-1:-1:-1;37536:13:0;;-1:-1:-1;;;;;37522:28:0;;;37536:13;;37522:28;;37499:51;:78;;;;-1:-1:-1;;;;;;37555:22:0;;;;;;:18;:22;;;;;;;;37554:23;37499:78;37496:423;;;37619:15;37605:11;;:29;37602:300;;;37681:12;;37671:6;:22;;37663:31;;;;;;-1:-1:-1;;;;;37729:12:0;;;;;;:8;:12;;;;;:16;37748:15;-1:-1:-1;37721:81:0;;;;-1:-1:-1;;;37721:81:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;37829:12:0;;;;;;:8;:12;;;;;37867:10;37848:15;:30;37829:49;;37602:300;-1:-1:-1;;;;;38217:9:0;;;;;;:5;:9;;;;;;;;38213:129;;38242:11;:20;;;;;;;;;;;;;-1:-1:-1;;;;;;38242:20:0;-1:-1:-1;;;;;38242:20:0;;;;;;;;38277;:22;;;;;;-1:-1:-1;38314:9:0;;;:5;38242:20;38314:9;;;;:16;;-1:-1:-1;;38314:16:0;;;;;;38213:129;38352:28;38383:24;38401:4;38383:9;:24::i;:::-;38469:19;;38352:55;;-1:-1:-1;38445:43:0;;;;;;;38517:53;;-1:-1:-1;38554:16:0;;;;38553:17;38517:53;:89;;;;-1:-1:-1;38595:11:0;;-1:-1:-1;;;;;38587:19:0;;;38595:11;;38587:19;;38517:89;:127;;;;-1:-1:-1;38623:21:0;;;;;;;38517:127;38499:249;;;38700:36;38715:20;38700:14;:36::i;:::-;-1:-1:-1;;;;;38940:24:0;;38821:12;38940:24;;;:18;:24;;;;;;38836:4;;38940:24;;;:50;;-1:-1:-1;;;;;;38968:22:0;;;;;;:18;:22;;;;;;;;38940:50;38937:96;;;-1:-1:-1;39016:5:0;38937:96;39111:38;39126:4;39131:2;39134:6;39141:7;39111:14;:38::i;4911:192::-;4997:7;5033:12;5025:6;;;;5017:29;;;;-1:-1:-1;;;5017:29:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;5069:5:0;;;4911:192::o;46652:163::-;46693:7;46714:15;46731;46750:19;:17;:19::i;:::-;46713:56;;-1:-1:-1;46713:56:0;-1:-1:-1;46787:20:0;46713:56;;46787:11;:20::i;:::-;46780:27;;;;46652:163;:::o;6309:132::-;6367:7;6394:39;6398:1;6401;6394:39;;;;;;;;;;;;;;;;;:3;:39::i;:::-;6387:46;6309:132;-1:-1:-1;;;6309:132:0:o;42163:818::-;42274:7;42270:40;;42296:14;:12;:14::i;:::-;-1:-1:-1;;;;;42327:19:0;;;;;;:11;:19;;;;;;;;:46;;;;-1:-1:-1;;;;;;42351:22:0;;;;;;:11;:22;;;;;;;;42350:23;42327:46;42323:597;;;42390:48;42412:6;42420:9;42431:6;42390:21;:48::i;:::-;42323:597;;;-1:-1:-1;;;;;42461:19:0;;;;;;:11;:19;;;;;;;;42460:20;:46;;;;-1:-1:-1;;;;;;42484:22:0;;;;;;:11;:22;;;;;;;;42460:46;42456:464;;;42523:46;42543:6;42551:9;42562:6;42523:19;:46::i;42456:464::-;-1:-1:-1;;;;;42592:19:0;;;;;;:11;:19;;;;;;;;42591:20;:47;;;;-1:-1:-1;;;;;;42616:22:0;;;;;;:11;:22;;;;;;;;42615:23;42591:47;42587:333;;;42655:44;42673:6;42681:9;42692:6;42655:17;:44::i;42587:333::-;-1:-1:-1;;;;;42721:19:0;;;;;;:11;:19;;;;;;;;:45;;;;-1:-1:-1;;;;;;42744:22:0;;;;;;:11;:22;;;;;;;;42721:45;42717:203;;;42783:48;42805:6;42813:9;42824:6;42783:21;:48::i;42717:203::-;42864:44;42882:6;42890:9;42901:6;42864:17;:44::i;:::-;42936:7;42932:41;;42958:15;:13;:15::i;:::-;42163:818;;;;:::o;4008:181::-;4066:7;4098:5;;;4122:6;;;;4114:46;;;;;-1:-1:-1;;;4114:46:0;;;;;;;;;;;;;;;;;;;;;;;;;;;45450:419;45509:7;45518;45527;45536;45545;45554;45575:23;45600:12;45614:18;45636:20;45648:7;45636:11;:20::i;:::-;45574:82;;;;;;45668:15;45685:23;45710:12;45726:50;45738:7;45747:4;45753:10;45765;:8;:10::i;:::-;45726:11;:50::i;:::-;45667:109;;;;-1:-1:-1;45667:109:0;;-1:-1:-1;45827:15:0;;-1:-1:-1;45844:4:0;;-1:-1:-1;45850:10:0;;-1:-1:-1;45450:419:0;;-1:-1:-1;;;;;45450:419:0:o;4472:136::-;4530:7;4557:43;4561:1;4564;4557:43;;;;;;;;;;;;;;;;;:3;:43::i;5362:471::-;5420:7;5665:6;5661:47;;-1:-1:-1;5695:1:0;5688:8;;5661:47;5732:5;;;5736:1;5732;:5;:1;5756:5;;;;;:10;5748:56;;;;-1:-1:-1;;;5748:56:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;40982:583;41132:16;;;41146:1;41132:16;;;41108:21;41132:16;;;;;41108:21;41132:16;;;;;;;;;;-1:-1:-1;41132:16:0;41108:40;;41177:4;41159;41164:1;41159:7;;;;;;;;-1:-1:-1;;;;;41159:23:0;;;:7;;;;;;;;;;:23;;;;41203:13;;:20;;;-1:-1:-1;;;41203:20:0;;;;:13;;;;;:18;;:20;;;;;41159:7;;41203:20;;;;;:13;:20;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;41203:20:0;41193:7;;:4;;41198:1;;41193:7;;;;;;-1:-1:-1;;;;;41193:30:0;;;:7;;;;;;;;;;:30;;;;41268:13;41236:60;;41253:4;;41268:13;41284:11;41236:8;:60::i;:::-;41335:13;;;:222;;-1:-1:-1;;;41335:222:0;;;;;;;;:13;:222;;;;;;41511:4;41335:222;;;;;;41531:15;41335:222;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;41335:13:0;;;;:64;;41414:11;;41335:13;;41484:4;;41335:222;;;;;;;;;;;;;;;;:13;:222;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;49844:149;49907:6;;-1:-1:-1;;;;;49907:6:0;:30;49923:13;:6;49934:1;49923:10;:13::i;:::-;49907:30;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;49948:13:0;;-1:-1:-1;;;;;49948:13:0;:37;49971:13;:6;49982:1;49971:10;:13::i;:::-;49948:37;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;39214:1649;28011:16;:23;;-1:-1:-1;;28011:23:0;28030:4;28011:23;;;:16;39373:27:::1;:20:::0;39398:1:::1;39373:24;:27::i;:::-;39350:50:::0;-1:-1:-1;39411:14:0::1;39428:27;:20:::0;39453:1:::1;39428:24;:27::i;:::-;39411:44:::0;-1:-1:-1;39466:18:0::1;39487:27;:20:::0;39512:1:::1;39487:24;:27::i;:::-;39466:48:::0;-1:-1:-1;39557:12:0::1;39572:19;:12:::0;39589:1:::1;39572:16;:19::i;:::-;39557:34:::0;-1:-1:-1;39602:17:0::1;39622:22;:12:::0;39557:34;39622:16:::1;:22::i;:::-;39602:42:::0;-1:-1:-1;39945:21:0::1;40011:50;40028:32;40049:10:::0;40028:16:::1;:4:::0;40037:6;40028:8:::1;:16::i;:32::-;40011:16;:50::i;:::-;40192:15;40210:41;:21;40236:14:::0;40210:25:::1;:41::i;:::-;40192:59:::0;-1:-1:-1;40262:16:0::1;40281:14;40192:59:::0;40293:1:::1;40281:11;:14::i;:::-;40262:33:::0;-1:-1:-1;40306:17:0::1;40326:15;40262:33:::0;40339:1:::1;40326:12;:15::i;:::-;40352:6;::::0;:26:::1;::::0;40306:35;;-1:-1:-1;;;;;;40352:6:0::1;::::0;:26;::::1;;;::::0;40306:35;;40352:6:::1;:26:::0;:6;:26;40306:35;40352:6;:26;::::1;;;;;;;;;;;;;::::0;::::1;;;;;-1:-1:-1::0;40389:15:0::1;::::0;:35:::1;::::0;-1:-1:-1;;;;;40389:15:0;;::::1;::::0;:35;::::1;;;::::0;40414:9;;40389:15:::1;:35:::0;:15;:35;40414:9;40389:15;:35;::::1;;;;;;;;;;;;;::::0;::::1;;;;;-1:-1:-1::0;40435:13:0::1;::::0;:32:::1;::::0;-1:-1:-1;;;;;40435:13:0;;::::1;::::0;:32;::::1;;;::::0;40458:8;;40435:13:::1;:32:::0;:13;:32;40458:8;40435:13;:32;::::1;;;;;;;;;;;;;::::0;::::1;;;;;;40763:33;40776:9;40787:8;40763:12;:33::i;:::-;40814:41;::::0;;;;;::::1;::::0;::::1;::::0;;;;;;;;;;;::::1;::::0;;;;;;;::::1;-1:-1:-1::0;;28058:16:0;:24;;-1:-1:-1;;28058:24:0;;;-1:-1:-1;;;;;;;;39214:1649:0:o;46823:555::-;46920:7;;46956;;46873;;;;;46974:289;46998:9;:16;46994:20;;46974:289;;;47064:7;47040;:21;47048:9;47058:1;47048:12;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;47048:12:0;47040:21;;;;;;;;;;;;;:31;;:66;;;47099:7;47075;:21;47083:9;47093:1;47083:12;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;47083:12:0;47075:21;;;;;;;;;;;;;:31;47040:66;47036:97;;;47116:7;;47125;;47108:25;;;;;;;;;47036:97;47158:34;47170:7;:21;47178:9;47188:1;47178:12;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;47178:12:0;47170:21;;;;;;;;;;;;;47158:7;;:11;:34::i;:::-;47148:44;;47217:34;47229:7;:21;47237:9;47247:1;47237:12;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;47237:12:0;47229:21;;;;;;;;;;;;;47217:7;;:11;:34::i;:::-;47207:44;-1:-1:-1;47016:3:0;;46974:289;;;-1:-1:-1;47299:7:0;;47287;;:20;;:11;:20::i;:::-;47277:7;:30;47273:61;;;47317:7;;47326;;47309:25;;;;;;;;47273:61;47353:7;;-1:-1:-1;47362:7:0;-1:-1:-1;46823:555:0;;;:::o;6937:278::-;7023:7;7058:12;7051:5;7043:28;;;;-1:-1:-1;;;7043:28:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7082:9;7098:1;7094;:5;;;;;;;6937:278;-1:-1:-1;;;;;6937:278:0:o;48085:234::-;48131:7;;:12;:34;;;;-1:-1:-1;48147:13:0;;:18;48131:34;48128:46;;;48167:7;;48128:46;48204:7;;;48186:15;:25;48246:13;;;48222:21;:37;-1:-1:-1;48272:11:0;;;;48294:17;48085:234;:::o;44082:563::-;44185:15;44202:23;44227:12;44241:23;44266:12;44280:18;44302:19;44313:7;44302:10;:19::i;:::-;-1:-1:-1;;;;;44350:15:0;;;;;;:7;:15;;;;;;44184:137;;-1:-1:-1;44184:137:0;;-1:-1:-1;44184:137:0;;-1:-1:-1;44184:137:0;-1:-1:-1;44184:137:0;-1:-1:-1;44184:137:0;-1:-1:-1;44350:28:0;;44370:7;44350:19;:28::i;:::-;-1:-1:-1;;;;;44332:15:0;;;;;;:7;:15;;;;;;;;:46;;;;44407:7;:15;;;;:28;;44427:7;44407:19;:28::i;:::-;-1:-1:-1;;;;;44389:15:0;;;;;;;:7;:15;;;;;;:46;;;;44467:18;;;;;;;:39;;44490:15;44467:22;:39::i;:::-;-1:-1:-1;;;;;44446:18:0;;;;;;:7;:18;;;;;:60;44517:26;44532:10;44517:14;:26::i;:::-;44554:23;44566:4;44572;44554:11;:23::i;:::-;44610:9;-1:-1:-1;;;;;44593:44:0;44602:6;-1:-1:-1;;;;;44593:44:0;;44621:15;44593:44;;;;;;;;;;;;;;;;;;44082:563;;;;;;;;;:::o;43499:575::-;43600:15;43617:23;43642:12;43656:23;43681:12;43695:18;43717:19;43728:7;43717:10;:19::i;:::-;-1:-1:-1;;;;;43765:15:0;;;;;;:7;:15;;;;;;43599:137;;-1:-1:-1;43599:137:0;;-1:-1:-1;43599:137:0;;-1:-1:-1;43599:137:0;-1:-1:-1;43599:137:0;-1:-1:-1;43599:137:0;-1:-1:-1;43765:28:0;;43599:137;43765:19;:28::i;:::-;-1:-1:-1;;;;;43747:15:0;;;;;;;:7;:15;;;;;;;;:46;;;;43825:18;;;;;:7;:18;;;;;:39;;43848:15;43825:22;:39::i;:::-;-1:-1:-1;;;;;43804:18:0;;;;;;:7;:18;;;;;;;;:60;;;;43896:7;:18;;;;:39;;43919:15;43896:22;:39::i;42989:502::-;43088:15;43105:23;43130:12;43144:23;43169:12;43183:18;43205:19;43216:7;43205:10;:19::i;:::-;-1:-1:-1;;;;;43253:15:0;;;;;;:7;:15;;;;;;43087:137;;-1:-1:-1;43087:137:0;;-1:-1:-1;43087:137:0;;-1:-1:-1;43087:137:0;-1:-1:-1;43087:137:0;-1:-1:-1;43087:137:0;-1:-1:-1;43253:28:0;;43087:137;43253:19;:28::i;44653:634::-;44756:15;44773:23;44798:12;44812:23;44837:12;44851:18;44873:19;44884:7;44873:10;:19::i;:::-;-1:-1:-1;;;;;44921:15:0;;;;;;:7;:15;;;;;;44755:137;;-1:-1:-1;44755:137:0;;-1:-1:-1;44755:137:0;;-1:-1:-1;44755:137:0;-1:-1:-1;44755:137:0;-1:-1:-1;44755:137:0;-1:-1:-1;44921:28:0;;44941:7;44921:19;:28::i;:::-;-1:-1:-1;;;;;44903:15:0;;;;;;:7;:15;;;;;;;;:46;;;;44978:7;:15;;;;:28;;44998:7;44978:19;:28::i;48327:125::-;48381:15;;48371:7;:25;48423:21;;48407:13;:37;48327:125::o;45877:330::-;45937:7;45946;45955;45975:12;45990:24;46006:7;45990:15;:24::i;:::-;45975:39;;46025:18;46046:30;46068:7;46046:21;:30::i;:::-;46025:51;-1:-1:-1;46087:23:0;46113:33;46025:51;46113:17;:7;46125:4;46113:11;:17::i;:33::-;46087:59;46182:4;;-1:-1:-1;46188:10:0;;-1:-1:-1;45877:330:0;;-1:-1:-1;;;45877:330:0:o;46215:429::-;46330:7;;;;46386:24;:7;46398:11;46386;:24::i;:::-;46368:42;-1:-1:-1;46421:12:0;46436:21;:4;46445:11;46436:8;:21::i;:::-;46421:36;-1:-1:-1;46468:18:0;46489:27;:10;46504:11;46489:14;:27::i;:::-;46468:48;-1:-1:-1;46527:23:0;46553:33;46468:48;46553:17;:7;46565:4;46553:11;:17::i;:33::-;46605:7;;;;-1:-1:-1;46631:4:0;;-1:-1:-1;46215:429:0;;-1:-1:-1;;;;;;;46215:429:0:o;41573:509::-;41753:13;;41721:60;;41738:4;;-1:-1:-1;;;;;41753:13:0;41769:11;41721:8;:60::i;:::-;41824:13;;-1:-1:-1;;;;;41824:13:0;:29;41861:9;41894:4;41914:11;41824:13;;42026:7;:5;:7::i;:::-;42048:15;41824:250;;;;;;;;;;;;;-1:-1:-1;;;;;41824:250:0;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;41824:250:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;47386:355;47449:19;47472:10;:8;:10::i;:::-;47449:33;-1:-1:-1;47493:18:0;47514:27;:10;47449:33;47514:14;:27::i;:::-;47593:4;47577:22;;;;:7;:22;;;;;;47493:48;;-1:-1:-1;47577:38:0;;47493:48;47577:26;:38::i;:::-;47568:4;47552:22;;;;:7;:22;;;;;;;;:63;;;;47629:11;:26;;;;;;47626:107;;;47711:4;47695:22;;;;:7;:22;;;;;;:38;;47722:10;47695:26;:38::i;:::-;47686:4;47670:22;;;;:7;:22;;;;;:63;47386:355;;;:::o;45295:147::-;45373:7;;:17;;45385:4;45373:11;:17::i;:::-;45363:7;:27;45414:10;;:20;;45429:4;45414:14;:20::i;:::-;45401:10;:33;-1:-1:-1;;45295:147:0:o;47749:154::-;47813:7;47840:55;47879:5;47840:20;47852:7;;47840;:11;;:20;;;;:::i;47911:166::-;47981:7;48008:61;48053:5;48008:26;48020:13;;48008:7;:11;;:26;;;;:::i

Swarm Source

ipfs://472bbe55d2c7aa6a59a6331ffce431637e446b99a435cc4f6dc93d82a1d3e2ad
Loading...
Loading
Loading...
Loading
[ Download: CSV Export  ]
[ Download: CSV Export  ]

A token is a representation of an on-chain or off-chain asset. The token page shows information such as price, total supply, holders, transfers and social links. Learn more about this page in our Knowledge Base.