ETH Price: $3,014.67 (+4.29%)
Gas: 10 Gwei

Token

Empire Token (EMPIRE)
 

Overview

Max Total Supply

1,000,000,000 EMPIRE

Holders

878 ( 0.569%)

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

$0.00

Other Info

Token Contract (WITH 9 Decimals)

Balance
7,299.762307965 EMPIRE

Value
$0.00
0x2fd852673bb2c5cf62fff319f4304419fe8e14ef
Loading...
Loading
Loading...
Loading
Loading...
Loading

OVERVIEW

Empire is building an ecosystem of market-driven decentralized applications to facilitate the growth of all DeFi users. We focus on bringing decentralization to the mainstream and helping people get started with DeFi by equipping them with the tools they need.

Market

Volume (24H):$0.00
Market Capitalization:$0.00
Circulating Supply:0.00 EMPIRE
Market Data Source: Coinmarketcap

# Exchange Pair Price  24H Volume % Volume
1
Gate.io
EMPIRE-USDT$0.0006
0.0000002 Eth
$19,777.74
35,558,823.350 EMPIRE
50.5050%
2
Gate.io
EMPIRE-ETH$0.0006
0.0000002 Eth
$9,563.06
17,008,540.343 EMPIRE
24.1576%
3
Uniswap V2 (Ethereum)
0X9A2AF0ABB12BEE5369B180976BE01E8C80D0E7B6-0XC02AAA39B223FE8D0A0E5C4F27EAD9083C756CC2$0.0005
0.0000002 Eth
$5,986.36
11,818,846.653 0X9A2AF0ABB12BEE5369B180976BE01E8C80D0E7B6
16.7866%
4
MEXC
EMPIRE-USDT$0.0006
0.0000002 Eth
$3,550.60
6,020,359.050 EMPIRE
8.5508%

Contract Source Code Verified (Exact Match)

Contract Name:
EmpireToken

Compiler Version
v0.8.15+commit.e14f2714

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2023-02-24
*/

// File: @openzeppelin/contracts/utils/math/SafeMath.sol


// OpenZeppelin Contracts (last updated v4.6.0) (utils/math/SafeMath.sol)

pragma solidity ^0.8.0;

// CAUTION
// This version of SafeMath should only be used with Solidity 0.8 or later,
// because it relies on the compiler's built in overflow checks.

/**
 * @dev Wrappers over Solidity's arithmetic operations.
 *
 * NOTE: `SafeMath` is generally not needed starting with Solidity 0.8, since the compiler
 * now has built in overflow checking.
 */
library SafeMath {
    /**
     * @dev Returns the addition of two unsigned integers, with an overflow flag.
     *
     * _Available since v3.4._
     */
    function tryAdd(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        unchecked {
            uint256 c = a + b;
            if (c < a) return (false, 0);
            return (true, c);
        }
    }

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

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

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

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

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

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

    /**
     * @dev Returns the multiplication of two unsigned integers, reverting on
     * overflow.
     *
     * Counterpart to Solidity's `*` operator.
     *
     * Requirements:
     *
     * - Multiplication cannot overflow.
     */
    function mul(uint256 a, uint256 b) internal pure returns (uint256) {
        return a * b;
    }

    /**
     * @dev Returns the integer division of two unsigned integers, reverting on
     * division by zero. The result is rounded towards zero.
     *
     * Counterpart to Solidity's `/` operator.
     *
     * Requirements:
     *
     * - The divisor cannot be zero.
     */
    function div(uint256 a, uint256 b) internal pure returns (uint256) {
        return a / b;
    }

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

    /**
     * @dev Returns the subtraction of two unsigned integers, reverting with custom message on
     * overflow (when the result is negative).
     *
     * CAUTION: This function is deprecated because it requires allocating memory for the error
     * message unnecessarily. For custom revert reasons use {trySub}.
     *
     * Counterpart to Solidity's `-` operator.
     *
     * Requirements:
     *
     * - Subtraction cannot overflow.
     */
    function sub(
        uint256 a,
        uint256 b,
        string memory errorMessage
    ) internal pure returns (uint256) {
        unchecked {
            require(b <= a, errorMessage);
            return a - b;
        }
    }

    /**
     * @dev Returns the integer division of two unsigned integers, reverting with custom message on
     * division by zero. The result is rounded towards zero.
     *
     * 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) {
        unchecked {
            require(b > 0, errorMessage);
            return a / b;
        }
    }

    /**
     * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),
     * reverting with custom message when dividing by zero.
     *
     * CAUTION: This function is deprecated because it requires allocating memory for the error
     * message unnecessarily. For custom revert reasons use {tryMod}.
     *
     * Counterpart to Solidity's `%` operator. This function uses a `revert`
     * opcode (which leaves remaining gas untouched) while Solidity uses an
     * invalid opcode to revert (consuming all remaining gas).
     *
     * Requirements:
     *
     * - The divisor cannot be zero.
     */
    function mod(
        uint256 a,
        uint256 b,
        string memory errorMessage
    ) internal pure returns (uint256) {
        unchecked {
            require(b > 0, errorMessage);
            return a % b;
        }
    }
}

// File: @openzeppelin/contracts/utils/Context.sol


// OpenZeppelin Contracts v4.4.1 (utils/Context.sol)

pragma solidity ^0.8.0;

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

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

// File: @openzeppelin/contracts/access/Ownable.sol


// OpenZeppelin Contracts (last updated v4.7.0) (access/Ownable.sol)

pragma solidity ^0.8.0;


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

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

    /**
     * @dev Initializes the contract setting the deployer as the initial owner.
     */
    constructor() {
        _transferOwnership(_msgSender());
    }

    /**
     * @dev Throws if called by any account other than the owner.
     */
    modifier onlyOwner() {
        _checkOwner();
        _;
    }

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

    /**
     * @dev Throws if the sender is not the owner.
     */
    function _checkOwner() internal view virtual {
        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 {
        _transferOwnership(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");
        _transferOwnership(newOwner);
    }

    /**
     * @dev Transfers ownership of the contract to a new account (`newOwner`).
     * Internal function without access restriction.
     */
    function _transferOwnership(address newOwner) internal virtual {
        address oldOwner = _owner;
        _owner = newOwner;
        emit OwnershipTransferred(oldOwner, newOwner);
    }
}

// File: @openzeppelin/contracts/token/ERC20/IERC20.sol


// OpenZeppelin Contracts (last updated v4.6.0) (token/ERC20/IERC20.sol)

pragma solidity ^0.8.0;

/**
 * @dev Interface of the ERC20 standard as defined in the EIP.
 */
interface IERC20 {
    /**
     * @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 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 `to`.
     *
     * Returns a boolean value indicating whether the operation succeeded.
     *
     * Emits a {Transfer} event.
     */
    function transfer(address to, 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 `from` to `to` 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 from,
        address to,
        uint256 amount
    ) external returns (bool);
}

// File: contracts/35_EmpireToken.sol



pragma solidity 0.8.15;







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

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

    function WETH() external pure returns (address);

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

interface IUniswapV2Router02 is IUniswapV2Router01 {
    function swapExactTokensForETHSupportingFeeOnTransferTokens(
        uint256 amountIn,
        uint256 amountOutMin,
        address[] calldata path,
        address to,
        uint256 deadline
    ) external;
}

contract EmpireToken is IERC20, Ownable{
    using SafeMath for uint256;

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

    mapping(address => bool) public automatedMarketMakerPairs;

    mapping(address => bool) private _isExcludedFromFee;

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

    struct BuyFee {
        uint256 autoLp;
        uint256 burn;
        uint256 marketing;
        uint256 tax;
        uint256 team;
    }

    struct SellFee {
        uint256 autoLp;
        uint256 burn;
        uint256 marketing;
        uint256 tax;
        uint256 team;
    }

    BuyFee public buyFee;
    SellFee public sellFee;

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

    string private constant _name = "Empire Token";
    string private constant _symbol = "EMPIRE";
    uint8 private constant _decimals = 9;

    uint256 public _taxFee = 0;
    uint256 public _liquidityFee = 0;
    uint256 public _burnFee = 0;
    uint256 public _marketingFee = 0;
    uint256 public _teamFee = 0;

    address public marketingWallet;
    address public immutable burnWallet;
    address public liquidityWallet;
    address public teamWallet;

    // to accommodate lock or unlock balance by bridge
    address public bridgeVault;

    IUniswapV2Router02 public uniswapV2Router;

    address public bridge;

    bool private inSwapAndLiquify;
    bool private shouldTakeFee = false;
    bool public swapAndLiquifyEnabled = true;
    bool public isTradingEnabled;

    uint256 public numTokensSellToAddToLiquidity = 8000 * 10**9;

    event LogSetAutomatedMarketMakerPair(
        address indexed setter,
        address pair,
        bool enabled
    );
    event LogSwapAndLiquify(
        uint256 tokensSwapped,
        uint256 ethReceived,
        uint256 tokensIntoLiquidity
    );
    event LogSwapAndDistribute(
        uint256 forMarketing,
        uint256 forLiquidity,
        uint256 forBurn,
        uint256 forTeam
    );
    event LogSwapAndLiquifyEnabledUpdated(address indexed setter, bool enabled);
    event LogSetBridge(address indexed setter, address bridge);
    event LogSetSwapTokensAmount(address indexed setter, uint256 amount);
    event LogSetExcludeFromFee(
        address indexed setter,
        address account,
        bool enabled
    );
    event LogTransfer(address from, address to, uint amount);
    event LogExcludeFromReward(address indexed account);
    event LogIncludeInReward(address indexed account);
    event LogFallback(address from, uint256 amount);
    event LogReceive(address from, uint256 amount);
    event LogSetEnableTrading(bool enabled);
    event LogSetMarketingWallet(
        address indexed setter,
        address marketingWallet
    );
    
    event LogSetTeamWallet(address indexed setter, address teamWallet);
    event LogSetBuyFees(address indexed setter, BuyFee buyFee);
    event LogSetSellFees(address indexed setter, SellFee sellFee);
    event LogSetRouterAddress(address indexed setter, address router);
    event LogUpdateLiquidityWallet(
        address indexed setter,
        address liquidityWallet
    );
    event LogWithdrawalETH(address indexed recipient, uint256 amount);
    event LogWithdrawToken(
        address indexed token,
        address indexed recipient,
        uint256 amount
    );
    event LogWithdrawal(address indexed recipient, uint256 tAmount);
    event LogLockByBridge(address indexed account, uint256 tAmount);
    event LogUnlockByBridge(address indexed account, uint256 tAmount);
    event LogSetBridgeVault(address setter, address _bridgeVault);
    event LogDeliver(address indexed from, uint256 tAmount);


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

    constructor(
        address _router,
        address _marketingWallet,
        address _teamWallet,
        address _bridgeVault
    ) payable {
        _rOwned[_msgSender()] = _rTotal;
        
        require(_router!=address(0) &&  _marketingWallet!=address(0) && _teamWallet!=address(0) && _bridgeVault!=address(0), "Zero address");

        marketingWallet = _marketingWallet;
        burnWallet = address(0xdead);
        liquidityWallet = owner();
        teamWallet = _teamWallet;

        // exclude bridge Vault from receive reflection
        bridgeVault = _bridgeVault;
        _isExcluded[bridgeVault] = true;
        _excluded.push(bridgeVault);


        // exclude burn address from receive reflection
        _isExcluded[burnWallet] = true;
        _excluded.push(burnWallet);


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

        setAutomatedMarketMakerPair(pair, true);

        // set the rest of the contract variables
        uniswapV2Router = _uniswapV2Router;

        _isExcludedFromFee[address(this)] = true;
        _isExcludedFromFee[owner()] = true;

        buyFee.autoLp = 4;
        buyFee.burn = 0;
        buyFee.marketing = 3;
        buyFee.tax = 2;
        buyFee.team = 1;

        sellFee.autoLp = 4;
        sellFee.burn = 0;
        sellFee.marketing = 3;
        sellFee.tax = 2;
        sellFee.team = 1;

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

    function setAutomatedMarketMakerPair(address pair, bool enabled)
        public
        onlyOwner
    {   
        require(automatedMarketMakerPairs[pair] != enabled, "Pair Already Enabled");
        automatedMarketMakerPairs[pair] = enabled;

        emit LogSetAutomatedMarketMakerPair(msg.sender, pair, enabled);
    }

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

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

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

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

    /**
     * @dev because bridgeVault not receive reward
     */
    function circulatingSupply() external view returns (uint256) {
        return _tTotal.sub(_tOwned[bridgeVault]).sub(_tOwned[burnWallet]);
    }

    /**
     * @dev Returns the subtraction of two unsigned integers, reverting with custom message on
     * overflow (when the result is negative). Referenced from SafeMath library to preserve transaction integrity.
     */
    function balanceCheck(
        uint256 a,
        uint256 b,
        string memory errorMessage
    ) internal pure returns (uint256) {
        require(b <= a, errorMessage);
        uint256 c = a.sub(b);

        return c;
    }

    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) 
        external
        override
        returns (bool)
    {

        _transfer(_msgSender(), recipient, amount);
        emit LogTransfer(_msgSender(), recipient, amount);
        return true;
    }

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

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

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

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

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

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

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

     // reflection by action of volunteer
    function deliver(uint256 tAmount) external {
        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);

        emit LogDeliver(msg.sender, tAmount);
    }

    function reflectionFromToken(uint256 tAmount, bool deductTransferFee)
        external
        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) external onlyOwner {
        require(!_isExcluded[account], "Account is already excluded");
        if (_rOwned[account] > 0) {
            _tOwned[account] = tokenFromReflection(_rOwned[account]);
        }
        _isExcluded[account] = true;
        _excluded.push(account);

        emit LogExcludeFromReward(account);
    }

    function includeInReward(address account) external onlyOwner {
        require(account != bridgeVault, "Bridge Vault can't receive reward");
        require(_isExcluded[account], "Account is already included");
        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;
            }
        }

        emit LogIncludeInReward(account);
    }

    //to receive ETH from uniswapV2Router when swapping
    receive() external payable {
        emit LogReceive(msg.sender, msg.value);
    }

    fallback() external payable {
        emit LogFallback(msg.sender, msg.value);
    }
    

    // reflection
    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,
            uint256 tMarketing,
            uint256 tBurn
        ) = _getTValues(tAmount);
        (uint256 rAmount, uint256 rTransferAmount, uint256 rFee) = _getRValues(
            tAmount,
            tFee,
            tLiquidity,
            tMarketing,
            tBurn,
            _getRate()
        );
        return (
            rAmount,
            rTransferAmount,
            rFee,
            tTransferAmount,
            tFee,
            tLiquidity
        );
    }

    function _getTValues(uint256 tAmount)
        private
        view
        returns (
            uint256,
            uint256,
            uint256,
            uint256,
            uint256
        )
    {
        uint256 tFee = calculateTaxFee(tAmount);
        uint256 tLiquidity = calculateLiquidityFee(tAmount);
        uint256 tMarketing = calculateMarketingFee(tAmount);
        uint256 tBurn = calculateBurnFee(tAmount);
        uint256 tTeam = calculateTeamFee(tAmount);
        uint256 tTransferAmount = tAmount.sub(tFee).sub(tLiquidity);
        tTransferAmount = tTransferAmount.sub(tMarketing).sub(tBurn).sub(tTeam);
        return (tTransferAmount, tFee, tLiquidity, tMarketing, tBurn);
    }

    function _getRValues(
        uint256 tAmount,
        uint256 tFee,
        uint256 tLiquidity,
        uint256 tMarketing,
        uint256 tBurn,
        uint256 currentRate
    )
        private
        view
        returns (
            uint256,
            uint256,
            uint256
        )
    {
        uint256 rAmount = tAmount.mul(currentRate);
        uint256 rFee = tFee.mul(currentRate);
        uint256 rLiquidity = tLiquidity.mul(currentRate);
        uint256 rMarketing = tMarketing.mul(currentRate);
        uint256 rBurn = tBurn.mul(currentRate);
        uint256 tTeam = calculateTeamFee(tAmount);
        uint256 rTeam = tTeam.mul(currentRate);
        uint256 totalDeduction = rFee.add(rLiquidity).add(rMarketing).add(rBurn).add(rTeam);
        uint256 rTransferAmount = rAmount.sub(totalDeduction);
        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 _takeTeam(uint256 tTeam) private {
        uint256 currentRate = _getRate();
        uint256 rTeam = tTeam.mul(currentRate);
        _rOwned[address(this)] = _rOwned[address(this)].add(rTeam);
        if (_isExcluded[address(this)])
            _tOwned[address(this)] = _tOwned[address(this)].add(tTeam);
    }

    function _takeMarketingAndBurn(uint256 tMarketing, uint256 tBurn) private {
        uint256 currentRate = _getRate();
        uint256 rMarketing = tMarketing.mul(currentRate);
        uint256 rBurn = tBurn.mul(currentRate);
        _rOwned[address(this)] = _rOwned[address(this)].add(rBurn).add(rMarketing);
        if (_isExcluded[address(this)])
            _tOwned[address(this)] =
                _tOwned[address(this)] +
                (tMarketing + tBurn);
    }

    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 calculateBurnFee(uint256 _amount) private view returns (uint256) {
        return _amount.mul(_burnFee).div(10**2);
    }

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

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

    function restoreAllFee() private {
        _taxFee = 0;
        _liquidityFee = 0;
        _marketingFee = 0;
        _burnFee = 0;
        _teamFee = 0;
    }

    function setBuyFee() private {
        _taxFee = buyFee.tax;
        _liquidityFee = buyFee.autoLp;
        _marketingFee = buyFee.marketing;
        _burnFee = buyFee.burn;
        _teamFee = buyFee.team;
    }

    function setSellFee() private {
        _taxFee = sellFee.tax;
        _liquidityFee = sellFee.autoLp;
        _marketingFee = sellFee.marketing;
        _burnFee = sellFee.burn;
        _teamFee = sellFee.team;
    }

    function setEnableTrading(bool enable) external onlyOwner {
        require(isTradingEnabled != enable, "Already set Enable");
        isTradingEnabled = enable;

        emit LogSetEnableTrading(isTradingEnabled);
    }

    function setBridgeVault (address _bridgeVault) external onlyOwner {
        require(_bridgeVault != address(0), "Invalid address");
        require(bridgeVault != _bridgeVault, "Already set to this value");
        bridgeVault = _bridgeVault;
        emit LogSetBridgeVault(msg.sender, bridgeVault);
    }

    function isExcludedFromFee(address account) external view returns (bool) {
        return _isExcludedFromFee[account];
    }

    function _approve(
        address owner,
        address spender,
        uint256 amount
    ) private {
        require(owner != address(0), "ERC20: approve from the zero address");
        require(spender != address(0), "ERC20: approve to the zero address");
        
        _allowances[owner][spender] = amount;
        emit Approval(owner, spender, amount);
    }

    function _transfer(
        address from,
        address to,
        uint256 amount
    ) private {
        require(from != address(0), "ERC20: transfer from the zero address");
        require(to != address(0), "ERC20: transfer to the zero address");
        require(amount > 0, "Transfer amount must be greater than zero");

        uint256 contractTokenBalance = balanceOf(address(this));
        bool overMinTokenBalance = contractTokenBalance >=
            numTokensSellToAddToLiquidity;
        if (
            overMinTokenBalance &&
            !inSwapAndLiquify &&
            !automatedMarketMakerPairs[from] &&
            swapAndLiquifyEnabled &&
            from != liquidityWallet &&
            to != liquidityWallet
        ) {
            contractTokenBalance = numTokensSellToAddToLiquidity;

            swapAndDistribute(contractTokenBalance);
        }

        //transfer amount, it will take tax, Burn, liquidity fee
        _tokenTransfer(from, to, amount);
    }

    function swapAndDistribute(uint256 contractTokenBalance)
        private
        lockTheSwap
    {
        uint256 total = buyFee.marketing
            .add(sellFee.marketing)
            .add(buyFee.autoLp)
            .add(sellFee.autoLp)
            .add(buyFee.burn)
            .add(sellFee.burn)
            .add(buyFee.team)
            .add(sellFee.team);
            
        uint256 lp = buyFee.autoLp + sellFee.autoLp;
        uint256 forLiquidity = contractTokenBalance.mul(lp).div(total);
        swapAndLiquify(forLiquidity);

        uint256 totalBurn = buyFee.burn + sellFee.burn;
        uint256 forBurn = contractTokenBalance.mul(totalBurn).div(total);
        sendToBurn(forBurn);

        uint256 marketingFee = buyFee.marketing + sellFee.marketing;
        uint256 forMarketing = contractTokenBalance.mul(marketingFee).div(total);
        sendToMarketing(forMarketing);

        uint256 teamFee = buyFee.team + sellFee.team;
        uint256 forTeam = contractTokenBalance.mul(teamFee).div(total);
        sendToTeam(forTeam);

        emit LogSwapAndDistribute(forMarketing, forLiquidity, forBurn, forTeam);
    }

    function sendToBurn(uint256 tBurn) private {
        uint256 currentRate = _getRate();
        uint256 rBurn = tBurn.mul(currentRate);

        _rOwned[burnWallet] = _rOwned[burnWallet].add(rBurn);
        _rOwned[address(this)] = _rOwned[address(this)].sub(rBurn);

        if (_isExcluded[burnWallet])
            _tOwned[burnWallet] = _tOwned[burnWallet].add(tBurn);

        if (_isExcluded[address(this)])
            _tOwned[address(this)] = _tOwned[address(this)].sub(tBurn);

        emit Transfer(address(this), burnWallet, tBurn);
    }

    function sendToTeam(uint256 tTeam) private {
        uint256 currentRate = _getRate();
        uint256 rTeam = tTeam.mul(currentRate);

        _rOwned[teamWallet] = _rOwned[teamWallet].add(rTeam);
        _rOwned[address(this)] = _rOwned[address(this)].sub(rTeam);

        if (_isExcluded[teamWallet])
            _tOwned[teamWallet] = _tOwned[teamWallet].add(tTeam);

        if (_isExcluded[address(this)])
            _tOwned[address(this)] = _tOwned[address(this)].sub(tTeam);

        emit Transfer(address(this), teamWallet, tTeam);
    }

    function sendToMarketing(uint256 tMarketing) private {
        uint256 currentRate = _getRate();
        uint256 rMarketing = tMarketing.mul(currentRate);

        _rOwned[marketingWallet] = _rOwned[marketingWallet].add(rMarketing);
        _rOwned[address(this)] = _rOwned[address(this)].sub(rMarketing);

        if (_isExcluded[marketingWallet])
            _tOwned[marketingWallet] = _tOwned[marketingWallet].add(tMarketing);

        if (_isExcluded[address(this)])
            _tOwned[address(this)] = _tOwned[address(this)].sub(tMarketing);

        emit Transfer(address(this), marketingWallet, tMarketing);
    }

    function swapAndLiquify(uint256 tokens) private {
        uint256 half = tokens.div(2);
        uint256 otherHalf = tokens.sub(half);

        uint256 initialBalance = address(this).balance;

        swapTokensForETH(half);

        uint256 newBalance = address(this).balance.sub(initialBalance);

        addLiquidity(otherHalf, newBalance);

        emit LogSwapAndLiquify(half, newBalance, otherHalf);
    }

    function swapTokensForETH(uint256 tokenAmount) private {
        address[] memory path = new address[](2);
        path[0] = address(this);
        path[1] = uniswapV2Router.WETH();

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

        uniswapV2Router.swapExactTokensForETHSupportingFeeOnTransferTokens(
            tokenAmount,
            0,
            path,
            address(this),
            block.timestamp
        );
    }

    function addLiquidity(uint256 tokenAmount, uint256 ethAmount) private {
        _approve(address(this), address(uniswapV2Router), tokenAmount);

        uniswapV2Router.addLiquidityETH{value: ethAmount}(
            address(this),
            tokenAmount,
            0,
            0,
            liquidityWallet,
            block.timestamp
        );
    }

    function _tokenTransfer(
        address sender,
        address recipient,
        uint256 amount
    ) private {
        if (!_isExcludedFromFee[sender] && !_isExcludedFromFee[recipient]) {
            require(isTradingEnabled, "Trading is disabled");

            if (automatedMarketMakerPairs[sender] == true) {
                shouldTakeFee = true;
                setBuyFee();
            } else if (automatedMarketMakerPairs[recipient] == true) {
                shouldTakeFee = true;
                setSellFee();
            }
        }

        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]) {
            _transferBothExcluded(sender, recipient, amount);
        } else {
            _transferStandard(sender, recipient, amount);
        }

        if (shouldTakeFee == true) {
            shouldTakeFee = false;
            restoreAllFee();
        }
    }

    function _takeFee(
        address sender,
        uint256 tAmount,
        uint256 tLiquidity,
        uint256 tFee,
        uint256 rFee
    ) private {
        if (shouldTakeFee == true) {
            uint256 tMarketing = calculateMarketingFee(tAmount);
            uint256 tBurn = calculateBurnFee(tAmount);
            uint256 tTeam = calculateTeamFee(tAmount);

            _takeLiquidity(tLiquidity);
            _takeMarketingAndBurn(tMarketing, tBurn);
            _takeTeam(tTeam);
            // reflection
            _reflectFee(rFee, tFee);

            // rFee, tFee
            // `tFee` will miss Transfer event and then with the `tFee`, reflect to all token holders.
            emit Transfer(
                sender,
                address(this),
                tLiquidity + tMarketing + tBurn + tTeam
            );
        }
    }

    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);
        _takeFee(sender, tAmount, tLiquidity, tFee, rFee);
        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);
        _takeFee(sender, tAmount, tLiquidity, tFee, rFee);
        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);
        _takeFee(sender, tAmount, tLiquidity, tFee, rFee);
        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);
        _takeFee(sender, tAmount, tLiquidity, tFee, rFee);
        emit Transfer(sender, recipient, tTransferAmount);
    }

    function setExcludeFromFee(address account, bool enabled)
        external
        onlyOwner
    {
        require(account != address(0),"Zero Address");
        require(_isExcludedFromFee[account] != enabled,"Already enabled");
        _isExcludedFromFee[account] = enabled;
        emit LogSetExcludeFromFee(msg.sender, account, enabled);
    }

    function setMarketingWallet(address newWallet) external onlyOwner {
        require(newWallet != address(0), "Zero Address");
        require(newWallet != marketingWallet, "Same Address");
        marketingWallet = newWallet;
        emit LogSetMarketingWallet(msg.sender, marketingWallet);
    }

    function setTeamWallet(address newWallet) external onlyOwner {
        require(newWallet != address(0), "Zero Address");
        require(newWallet != teamWallet, "Same Address");
        teamWallet = newWallet;
        emit LogSetTeamWallet(msg.sender, teamWallet);
    }

    function setBuyFees(
        uint256 _lp,
        uint256 _marketing,
        uint256 _burn,
        uint256 _tax,
        uint256 _team
    ) external onlyOwner {
        require(_lp + _marketing + _burn + _tax + _team <= 50, "Max total fee is 50%");
        require(!(buyFee.autoLp == _lp && buyFee.marketing == _marketing && buyFee.burn == _burn && buyFee.tax == _tax &&  buyFee.team == _team), "Nothing is changed");
        buyFee.autoLp = _lp;
        buyFee.marketing = _marketing;
        buyFee.burn = _burn;
        buyFee.tax = _tax;
        buyFee.team = _team;

        emit LogSetBuyFees(msg.sender, buyFee);
    }

    function setSellFees(
        uint256 _lp,
        uint256 _marketing,
        uint256 _burn,
        uint256 _tax,
        uint256 _team
    ) external onlyOwner {
        require(_lp + _marketing + _burn + _tax + _team <= 50, "Max total fee is 50%");
        sellFee.autoLp = _lp;
        sellFee.marketing = _marketing;
        sellFee.burn = _burn;
        sellFee.tax = _tax;
        sellFee.team = _team;

        emit LogSetSellFees(msg.sender, sellFee);
    }

    function setRouterAddress(address newRouter) external onlyOwner {
        require(newRouter != address(0), "Zero Address");
        require(newRouter != address(uniswapV2Router), "Same Address");
        uniswapV2Router = IUniswapV2Router02(newRouter);

        emit LogSetRouterAddress(msg.sender, newRouter);
    }

    function setSwapAndLiquifyEnabled(bool _enabled) external onlyOwner {
        require(_enabled != swapAndLiquifyEnabled, "Already enabled");
        swapAndLiquifyEnabled = _enabled;

        emit LogSwapAndLiquifyEnabledUpdated(msg.sender, _enabled);
    }

    function setSwapTokensAmount(uint256 amount) external onlyOwner {
        require(amount != numTokensSellToAddToLiquidity, "Same Amount");
        numTokensSellToAddToLiquidity = amount;

        emit LogSetSwapTokensAmount(msg.sender, amount);
    }

    function updateLiquidityWallet(address newLiquidityWallet)
        external
        onlyOwner
    {
        require(newLiquidityWallet != address(0), "Zero Address");
        require(newLiquidityWallet != liquidityWallet,"The liquidity wallet is already this address" );
        liquidityWallet = newLiquidityWallet;

        emit LogUpdateLiquidityWallet(msg.sender, newLiquidityWallet);
    }

    function withdrawETH(address payable recipient, uint256 amount)
        external
        onlyOwner
    {
        require(recipient != address(0), "Zero Address");
        require(amount <= (address(this)).balance, "Incufficient funds");
        recipient.transfer(amount);
        emit LogWithdrawalETH(recipient, amount);
    }

    /**
     * @notice  Should not be withdrawn scam token or this Empire token.
     *          Use `withdraw` function to withdraw this Empire token.
     */
    function withdrawToken(
        IERC20 token,
        address recipient,
        uint256 amount
    ) external onlyOwner {
        require(address(token) != address(0), "Zero Address of Token");
        require(recipient != address(0), "Zero Address of Recepient");
        require(amount <= token.balanceOf(address(this)), "Incufficient funds");
        require(token.transfer(recipient, amount), "Transfer Fail");

        emit LogWithdrawToken(address(token), recipient, amount);
    }

    /**
     * @notice  The onlyOwner will withdraw this token to `recipient`.
     */
    function withdraw(address recipient, uint256 tAmount) external onlyOwner {
        require(recipient != address(0), "Zero Address");
        require(tAmount > 0, "Withdrawal amount must be greater than zero");

        if (_isExcluded[address(this)] && !_isExcluded[recipient]) {
            _transferFromExcluded(address(this), recipient, tAmount);
        } else if (!_isExcluded[address(this)] && _isExcluded[recipient]) {
            _transferToExcluded(address(this), recipient, tAmount);
        } else if (_isExcluded[address(this)] && _isExcluded[recipient]) {
            _transferBothExcluded(address(this), recipient, tAmount);
        } else {
            _transferStandard(address(this), recipient, tAmount);
        }

        emit LogWithdrawal(recipient, tAmount);
    }

    modifier onlyBridge() {
        require(msg.sender == bridge, "Only bridge can perform this action");
        _;
    }

    function setBridge(address _bridge) external onlyOwner {
        require(_bridge != address(0), "Zero Address");
        require(bridge != _bridge, "Same Bridge!");
        bridge = _bridge;

        emit LogSetBridge(msg.sender, bridge);
    }

    /**
     * @dev need approval from account
     */
    function lock(address account, uint256 tAmount) external onlyBridge {
        require(account != address(0), "Zero address");
        require(tAmount > 0, "Lock amount must be greater than zero");
        require(tAmount <= balanceOf(account), "Incufficient funds");
        require(_allowances[account][_msgSender()] >= tAmount, "ERC20: transfer amount exceeds allowance");

        if (!_isExcluded[account]) {
            _transferToExcluded(account, bridgeVault, tAmount);
        } else {
            _transferBothExcluded(account, bridgeVault, tAmount);
        }


        emit LogLockByBridge(account, tAmount);
    }

    /**
     * @dev no need approval, because bridgeVault balance is controlled by EMPIRE
     */
    function unlock(address account, uint256 tAmount) external onlyBridge {
        require(account != address(0), "Zero address");
        require(tAmount > 0, "Unlock amount must be greater than zero");
        require(tAmount <= balanceOf(bridgeVault), "Incufficient funds");


        if (!_isExcluded[account]) {
            _transferFromExcluded(bridgeVault, account, tAmount);
        } else {
            _transferBothExcluded(bridgeVault, account, tAmount);
        }

        emit LogUnlockByBridge(account, tAmount);
    }
}

Contract Security Audit

Contract ABI

[{"inputs":[{"internalType":"address","name":"_router","type":"address"},{"internalType":"address","name":"_marketingWallet","type":"address"},{"internalType":"address","name":"_teamWallet","type":"address"},{"internalType":"address","name":"_bridgeVault","type":"address"}],"stateMutability":"payable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":false,"internalType":"uint256","name":"tAmount","type":"uint256"}],"name":"LogDeliver","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"}],"name":"LogExcludeFromReward","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"from","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"LogFallback","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"}],"name":"LogIncludeInReward","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"uint256","name":"tAmount","type":"uint256"}],"name":"LogLockByBridge","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"from","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"LogReceive","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"setter","type":"address"},{"indexed":false,"internalType":"address","name":"pair","type":"address"},{"indexed":false,"internalType":"bool","name":"enabled","type":"bool"}],"name":"LogSetAutomatedMarketMakerPair","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"setter","type":"address"},{"indexed":false,"internalType":"address","name":"bridge","type":"address"}],"name":"LogSetBridge","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"setter","type":"address"},{"indexed":false,"internalType":"address","name":"_bridgeVault","type":"address"}],"name":"LogSetBridgeVault","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"setter","type":"address"},{"components":[{"internalType":"uint256","name":"autoLp","type":"uint256"},{"internalType":"uint256","name":"burn","type":"uint256"},{"internalType":"uint256","name":"marketing","type":"uint256"},{"internalType":"uint256","name":"tax","type":"uint256"},{"internalType":"uint256","name":"team","type":"uint256"}],"indexed":false,"internalType":"struct EmpireToken.BuyFee","name":"buyFee","type":"tuple"}],"name":"LogSetBuyFees","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bool","name":"enabled","type":"bool"}],"name":"LogSetEnableTrading","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"setter","type":"address"},{"indexed":false,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"bool","name":"enabled","type":"bool"}],"name":"LogSetExcludeFromFee","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"setter","type":"address"},{"indexed":false,"internalType":"address","name":"marketingWallet","type":"address"}],"name":"LogSetMarketingWallet","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"setter","type":"address"},{"indexed":false,"internalType":"address","name":"router","type":"address"}],"name":"LogSetRouterAddress","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"setter","type":"address"},{"components":[{"internalType":"uint256","name":"autoLp","type":"uint256"},{"internalType":"uint256","name":"burn","type":"uint256"},{"internalType":"uint256","name":"marketing","type":"uint256"},{"internalType":"uint256","name":"tax","type":"uint256"},{"internalType":"uint256","name":"team","type":"uint256"}],"indexed":false,"internalType":"struct EmpireToken.SellFee","name":"sellFee","type":"tuple"}],"name":"LogSetSellFees","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"setter","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"LogSetSwapTokensAmount","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"setter","type":"address"},{"indexed":false,"internalType":"address","name":"teamWallet","type":"address"}],"name":"LogSetTeamWallet","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"forMarketing","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"forLiquidity","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"forBurn","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"forTeam","type":"uint256"}],"name":"LogSwapAndDistribute","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":"tokensIntoLiquidity","type":"uint256"}],"name":"LogSwapAndLiquify","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"setter","type":"address"},{"indexed":false,"internalType":"bool","name":"enabled","type":"bool"}],"name":"LogSwapAndLiquifyEnabledUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"from","type":"address"},{"indexed":false,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"LogTransfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"uint256","name":"tAmount","type":"uint256"}],"name":"LogUnlockByBridge","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"setter","type":"address"},{"indexed":false,"internalType":"address","name":"liquidityWallet","type":"address"}],"name":"LogUpdateLiquidityWallet","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"token","type":"address"},{"indexed":true,"internalType":"address","name":"recipient","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"LogWithdrawToken","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"recipient","type":"address"},{"indexed":false,"internalType":"uint256","name":"tAmount","type":"uint256"}],"name":"LogWithdrawal","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"recipient","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"LogWithdrawalETH","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"stateMutability":"payable","type":"fallback"},{"inputs":[],"name":"_burnFee","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":"_marketingFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_taxFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_teamFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"automatedMarketMakerPairs","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"bridge","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"bridgeVault","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"burnWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyFee","outputs":[{"internalType":"uint256","name":"autoLp","type":"uint256"},{"internalType":"uint256","name":"burn","type":"uint256"},{"internalType":"uint256","name":"marketing","type":"uint256"},{"internalType":"uint256","name":"tax","type":"uint256"},{"internalType":"uint256","name":"team","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"circulatingSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tAmount","type":"uint256"}],"name":"deliver","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"excludeFromReward","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":"isExcludedFromFee","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":"isTradingEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"liquidityWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"uint256","name":"tAmount","type":"uint256"}],"name":"lock","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"marketingWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"numTokensSellToAddToLiquidity","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","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":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"sellFee","outputs":[{"internalType":"uint256","name":"autoLp","type":"uint256"},{"internalType":"uint256","name":"burn","type":"uint256"},{"internalType":"uint256","name":"marketing","type":"uint256"},{"internalType":"uint256","name":"tax","type":"uint256"},{"internalType":"uint256","name":"team","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pair","type":"address"},{"internalType":"bool","name":"enabled","type":"bool"}],"name":"setAutomatedMarketMakerPair","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_bridge","type":"address"}],"name":"setBridge","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_bridgeVault","type":"address"}],"name":"setBridgeVault","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_lp","type":"uint256"},{"internalType":"uint256","name":"_marketing","type":"uint256"},{"internalType":"uint256","name":"_burn","type":"uint256"},{"internalType":"uint256","name":"_tax","type":"uint256"},{"internalType":"uint256","name":"_team","type":"uint256"}],"name":"setBuyFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"enable","type":"bool"}],"name":"setEnableTrading","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"enabled","type":"bool"}],"name":"setExcludeFromFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newWallet","type":"address"}],"name":"setMarketingWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newRouter","type":"address"}],"name":"setRouterAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_lp","type":"uint256"},{"internalType":"uint256","name":"_marketing","type":"uint256"},{"internalType":"uint256","name":"_burn","type":"uint256"},{"internalType":"uint256","name":"_tax","type":"uint256"},{"internalType":"uint256","name":"_team","type":"uint256"}],"name":"setSellFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_enabled","type":"bool"}],"name":"setSwapAndLiquifyEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"setSwapTokensAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newWallet","type":"address"}],"name":"setTeamWallet","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":[],"name":"teamWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"rAmount","type":"uint256"}],"name":"tokenFromReflection","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"uniswapV2Router","outputs":[{"internalType":"contract IUniswapV2Router02","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"uint256","name":"tAmount","type":"uint256"}],"name":"unlock","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newLiquidityWallet","type":"address"}],"name":"updateLiquidityWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"tAmount","type":"uint256"}],"name":"withdraw","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address payable","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"withdrawETH","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"contract IERC20","name":"token","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"withdrawToken","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

60a06040526200001a670de0b6b3a76400006000196200062a565b62000028906000196200064d565b60125560006014819055601581905560168190556017819055601855601e805461ffff60a81b1916600160b01b179055650746a5288000601f5560405162004bbb38819003908190833981016040819052620000849162000690565b6200008f336200049b565b601254336000908152600160205260409020556001600160a01b03841615801590620000c357506001600160a01b03831615155b8015620000d857506001600160a01b03821615155b8015620000ed57506001600160a01b03811615155b6200012e5760405162461bcd60e51b815260206004820152600c60248201526b5a65726f206164647265737360a01b60448201526064015b60405180910390fd5b601980546001600160a01b0319166001600160a01b03851617905561dead608052620001626000546001600160a01b031690565b601a80546001600160a01b039283166001600160a01b031991821617909155601b8054858416908316179055601c8054848416908316811782556000908152600660209081526040808320805460ff19908116600190811790925594546007805480840182557fa66cc928b5edb82af9bd49922954155ab7b0942694bea4ce44661d9a8736c68890810180548a16938b1693909317909255608051891680875284872080549098168417909755805492830181558552018054909516909317909355815163c45a015560e01b81529151889491939185169263c45a01559260048083019391928290030181865afa15801562000262573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002889190620006ed565b6001600160a01b031663c9c6539630846001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015620002d6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002fc9190620006ed565b6040516001600160e01b031960e085901b1681526001600160a01b039283166004820152911660248201526044016020604051808303816000875af11580156200034a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620003709190620006ed565b90506200037f816001620004eb565b601d80546001600160a01b0319166001600160a01b0384161790553060009081526005602081905260408220805460ff1916600190811790915591620003cd6000546001600160a01b031690565b6001600160a01b0316815260208101919091526040016000908120805460ff1916921515929092179091556004600881905560098290556003600a8190556002600b8190556001600c819055600d93909355600e93909355600f55601091909155601155620004393390565b6001600160a01b031660006001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef670de0b6b3a76400006040516200048791815260200190565b60405180910390a350505050505062000712565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b620004f5620005cc565b6001600160a01b03821660009081526004602052604090205481151560ff909116151503620005675760405162461bcd60e51b815260206004820152601460248201527f5061697220416c726561647920456e61626c6564000000000000000000000000604482015260640162000125565b6001600160a01b038216600081815260046020908152604091829020805460ff191685151590811790915582519384529083015233917fac0b2958c680afbcacee16a4305170e8004cf74c8270ac3edd2abc61b919e8ea910160405180910390a25050565b6000546001600160a01b03163314620006285760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640162000125565b565b6000826200064857634e487b7160e01b600052601260045260246000fd5b500690565b6000828210156200066e57634e487b7160e01b600052601160045260246000fd5b500390565b80516001600160a01b03811681146200068b57600080fd5b919050565b60008060008060808587031215620006a757600080fd5b620006b28562000673565b9350620006c26020860162000673565b9250620006d26040860162000673565b9150620006e26060860162000673565b905092959194509250565b6000602082840312156200070057600080fd5b6200070b8262000673565b9392505050565b60805161445c6200075f6000396000818161043901528181611e5e0152818161369d015281816136e30152818161373d0152818161377f015281816137c20152613845015261445c6000f3fe6080604052600436106103905760003560e01c80635d098b38116101dc578063ac03e9f011610102578063d12a7688116100a0578063e78cea921161006f578063e78cea9214610b97578063ebcb0b7a14610bb7578063f2fde38b14610bd7578063f3fef3a314610bf7576103d0565b8063d12a768814610afb578063d469801614610b11578063dd62ed3e14610b31578063e37ba8f914610b77576103d0565b8063b92ebd5f116100dc578063b92ebd5f14610a85578063c0b0fda214610aa5578063c1cf53c414610abb578063c49b9a8014610adb576103d0565b8063ac03e9f014610a15578063af9549e014610a35578063b62496f514610a55576103d0565b80638da5cb5b1161017a5780639a7a23d6116101495780639a7a23d61461099f5780639eb942e5146109bf578063a457c2d7146109d5578063a9059cbb146109f5576103d0565b80638da5cb5b1461091d5780638dd148021461093b5780639358928b1461095b57806395d89b4114610970576103d0565b8063715018a6116101b6578063715018a61461088f57806375f0a874146108a45780637eee288d146108c457806388f82020146108e4576103d0565b80635d098b38146108395780636bc87c3a1461085957806370a082311461086f576103d0565b8063313ce567116102c15780634549b0391161025f5780634a74bb021161022e5780634a74bb021461079f57806352390c02146107c05780635342acb4146107e05780635992704414610819576103d0565b80634549b0391461071857806347062402146107385780634782f7791461075f57806347a28b791461077f576103d0565b80633b124fe71161029b5780633b124fe7146106a25780633bd5d173146106b857806341cb87fc146106d857806343e716fe146106f8576103d0565b8063313ce567146106465780633685d419146106625780633950935114610682576103d0565b80631694505e1161032e57806323b872dd1161030857806323b872dd14610597578063282d3fdf146105b75780632b14ca56146105d75780632d83811914610626576103d0565b80631694505e1461054657806318160ddd1461056657806322976e0d14610581576103d0565b806306fdde031161036a57806306fdde03146104a9578063095ea7b3146104e757806313114a9d146105075780631525ff7d14610526576103d0565b806301e33667146104055780630622874914610427578063064a59d014610478576103d0565b366103d057604080513381523460208201527f98c44cd71a4f8250380570aaf8bf1f0fd2a19bc3428a18a782e9e4d6c1928b1391015b60405180910390a1005b604080513381523460208201527fc04e16d4878a87a7d627a5fb8c387ac4a2169e45f86d1935cc739c196c8a571591016103c6565b34801561041157600080fd5b50610425610420366004613f22565b610c17565b005b34801561043357600080fd5b5061045b7f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b0390911681526020015b60405180910390f35b34801561048457600080fd5b50601e5461049990600160b81b900460ff1681565b604051901515815260200161046f565b3480156104b557600080fd5b5060408051808201909152600c81526b22b6b834b932902a37b5b2b760a11b60208201525b60405161046f9190613f63565b3480156104f357600080fd5b50610499610502366004613fb8565b610e50565b34801561051357600080fd5b506013545b60405190815260200161046f565b34801561053257600080fd5b50610425610541366004613fe4565b610e67565b34801561055257600080fd5b50601d5461045b906001600160a01b031681565b34801561057257600080fd5b50670de0b6b3a7640000610518565b34801561058d57600080fd5b5061051860175481565b3480156105a357600080fd5b506104996105b2366004613f22565b610f1a565b3480156105c357600080fd5b506104256105d2366004613fb8565b610f98565b3480156105e357600080fd5b50600d54600e54600f546010546011546105fe949392919085565b604080519586526020860194909452928401919091526060830152608082015260a00161046f565b34801561063257600080fd5b50610518610641366004614001565b6111ad565b34801561065257600080fd5b506040516009815260200161046f565b34801561066e57600080fd5b5061042561067d366004613fe4565b611231565b34801561068e57600080fd5b5061049961069d366004613fb8565b611462565b3480156106ae57600080fd5b5061051860145481565b3480156106c457600080fd5b506104256106d3366004614001565b611498565b3480156106e457600080fd5b506104256106f3366004613fe4565b6115b7565b34801561070457600080fd5b50610425610713366004614001565b611663565b34801561072457600080fd5b50610518610733366004614028565b6116e1565b34801561074457600080fd5b50600854600954600a54600b54600c546105fe949392919085565b34801561076b57600080fd5b5061042561077a366004613fb8565b611774565b34801561078b57600080fd5b5061042561079a366004614058565b611835565b3480156107ab57600080fd5b50601e5461049990600160b01b900460ff1681565b3480156107cc57600080fd5b506104256107db366004613fe4565b611983565b3480156107ec57600080fd5b506104996107fb366004613fe4565b6001600160a01b031660009081526005602052604090205460ff1690565b34801561082557600080fd5b50601b5461045b906001600160a01b031681565b34801561084557600080fd5b50610425610854366004613fe4565b611ada565b34801561086557600080fd5b5061051860155481565b34801561087b57600080fd5b5061051861088a366004613fe4565b611b86565b34801561089b57600080fd5b50610425611be5565b3480156108b057600080fd5b5060195461045b906001600160a01b031681565b3480156108d057600080fd5b506104256108df366004613fb8565b611bf9565b3480156108f057600080fd5b506104996108ff366004613fe4565b6001600160a01b031660009081526006602052604090205460ff1690565b34801561092957600080fd5b506000546001600160a01b031661045b565b34801561094757600080fd5b50610425610956366004613fe4565b611d8a565b34801561096757600080fd5b50610518611e54565b34801561097c57600080fd5b50604080518082019091526006815265454d5049524560d01b60208201526104da565b3480156109ab57600080fd5b506104256109ba366004614093565b611ebe565b3480156109cb57600080fd5b5061051860185481565b3480156109e157600080fd5b506104996109f0366004613fb8565b611f8b565b348015610a0157600080fd5b50610499610a10366004613fb8565b611fda565b348015610a2157600080fd5b50601c5461045b906001600160a01b031681565b348015610a4157600080fd5b50610425610a50366004614093565b612038565b348015610a6157600080fd5b50610499610a70366004613fe4565b60046020526000908152604090205460ff1681565b348015610a9157600080fd5b50610425610aa03660046140c1565b612126565b348015610ab157600080fd5b5061051860165481565b348015610ac757600080fd5b50610425610ad6366004614058565b6121e1565b348015610ae757600080fd5b50610425610af63660046140c1565b6122a5565b348015610b0757600080fd5b50610518601f5481565b348015610b1d57600080fd5b50601a5461045b906001600160a01b031681565b348015610b3d57600080fd5b50610518610b4c3660046140de565b6001600160a01b03918216600090815260036020908152604080832093909416825291909152205490565b348015610b8357600080fd5b50610425610b92366004613fe4565b61234d565b348015610ba357600080fd5b50601e5461045b906001600160a01b031681565b348015610bc357600080fd5b50610425610bd2366004613fe4565b61243e565b348015610be357600080fd5b50610425610bf2366004613fe4565b612540565b348015610c0357600080fd5b50610425610c12366004613fb8565b6125b9565b610c1f61276d565b6001600160a01b038316610c725760405162461bcd60e51b81526020600482015260156024820152742d32b9379020b2323932b9b99037b3102a37b5b2b760591b60448201526064015b60405180910390fd5b6001600160a01b038216610cc85760405162461bcd60e51b815260206004820152601960248201527f5a65726f2041646472657373206f6620526563657069656e74000000000000006044820152606401610c69565b6040516370a0823160e01b81523060048201526001600160a01b038416906370a0823190602401602060405180830381865afa158015610d0c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d30919061410c565b811115610d4f5760405162461bcd60e51b8152600401610c6990614125565b60405163a9059cbb60e01b81526001600160a01b0383811660048301526024820183905284169063a9059cbb906044016020604051808303816000875af1158015610d9e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610dc29190614151565b610dfe5760405162461bcd60e51b815260206004820152600d60248201526c151c985b9cd9995c8811985a5b609a1b6044820152606401610c69565b816001600160a01b0316836001600160a01b03167f46ae78bc7b198b8b534ca0070d125569ac5f955976841c4343223079f3abf0de83604051610e4391815260200190565b60405180910390a3505050565b6000610e5d3384846127c7565b5060015b92915050565b610e6f61276d565b6001600160a01b038116610e955760405162461bcd60e51b8152600401610c699061416e565b601b546001600160a01b0390811690821603610ec35760405162461bcd60e51b8152600401610c6990614194565b601b80546001600160a01b0319166001600160a01b03831690811790915560405190815233907f6b23cabdb8b55d4883cb406993a5f14492a2c4c86e5ce8debed487c4dc5a45e6906020015b60405180910390a250565b6000610f278484846128e3565b610f8e84336001600160a01b0387166000908152600360205260408120610f8991336001600160a01b03166001600160a01b0316815260200190815260200160002054866040518060600160405280602881526020016143ba60289139612aca565b6127c7565b5060019392505050565b601e546001600160a01b03163314610fc25760405162461bcd60e51b8152600401610c69906141ba565b6001600160a01b0382166110075760405162461bcd60e51b815260206004820152600c60248201526b5a65726f206164647265737360a01b6044820152606401610c69565b600081116110655760405162461bcd60e51b815260206004820152602560248201527f4c6f636b20616d6f756e74206d7573742062652067726561746572207468616e604482015264207a65726f60d81b6064820152608401610c69565b61106e82611b86565b81111561108d5760405162461bcd60e51b8152600401610c6990614125565b6001600160a01b03821660009081526003602090815260408083203384529091529020548111156111115760405162461bcd60e51b815260206004820152602860248201527f45524332303a207472616e7366657220616d6f756e74206578636565647320616044820152676c6c6f77616e636560c01b6064820152608401610c69565b6001600160a01b03821660009081526006602052604090205460ff1661114e57601c546111499083906001600160a01b031683612b04565b611166565b601c546111669083906001600160a01b031683612c19565b816001600160a01b03167fd67292b41a781140f5a0da0649c6028bd549f6e3335f570c31cdd202db9fc0cf826040516111a191815260200190565b60405180910390a25050565b60006012548211156112145760405162461bcd60e51b815260206004820152602a60248201527f416d6f756e74206d757374206265206c657373207468616e20746f74616c207260448201526965666c656374696f6e7360b01b6064820152608401610c69565b600061121e612c8c565b905061122a8382612caf565b9392505050565b61123961276d565b601c546001600160a01b03908116908216036112a15760405162461bcd60e51b815260206004820152602160248201527f427269646765205661756c742063616e277420726563656976652072657761726044820152601960fa1b6064820152608401610c69565b6001600160a01b03811660009081526006602052604090205460ff166113095760405162461bcd60e51b815260206004820152601b60248201527f4163636f756e7420697320616c726561647920696e636c7564656400000000006044820152606401610c69565b60005b60075481101561142a57816001600160a01b031660078281548110611333576113336141fd565b6000918252602090912001546001600160a01b031603611418576007805461135d90600190614229565b8154811061136d5761136d6141fd565b600091825260209091200154600780546001600160a01b039092169183908110611399576113996141fd565b600091825260208083209190910180546001600160a01b0319166001600160a01b039485161790559184168152600282526040808220829055600690925220805460ff1916905560078054806113f1576113f1614240565b600082815260209020810160001990810180546001600160a01b031916905501905561142a565b8061142281614256565b91505061130c565b506040516001600160a01b038216907f5f05034ac7f3d648bc123a1fa9e17b8b56758b33c45ad85f418b7125cf0b9ce590600090a250565b3360008181526003602090815260408083206001600160a01b03871684529091528120549091610e5d918590610f899086612cbb565b3360008181526006602052604090205460ff161561150d5760405162461bcd60e51b815260206004820152602c60248201527f4578636c75646564206164647265737365732063616e6e6f742063616c6c207460448201526b3434b990333ab731ba34b7b760a11b6064820152608401610c69565b600061151883612cc7565b505050506001600160a01b03841660009081526001602052604090205491925061154491905082612d23565b6001600160a01b03831660009081526001602052604090205560125461156a9082612d23565b60125560135461157a9084612cbb565b60135560405183815233907f9745995e0db679b62281d9ca9200fed9b3cc7ee9ff131b05a3fb642b5d43dcc49060200160405180910390a2505050565b6115bf61276d565b6001600160a01b0381166115e55760405162461bcd60e51b8152600401610c699061416e565b601d546001600160a01b03908116908216036116135760405162461bcd60e51b8152600401610c6990614194565b601d80546001600160a01b0319166001600160a01b03831690811790915560405190815233907fac059041d07fde13bf50242296de370c33ddecff1f8ecb4d5ae0836f1ebe365d90602001610f0f565b61166b61276d565b601f5481036116aa5760405162461bcd60e51b815260206004820152600b60248201526a14d85b5948105b5bdd5b9d60aa1b6044820152606401610c69565b601f81905560405181815233907f9dcafbd759717e12afc2978cb500b553016b707cc2c3497e2d05f528ee77796190602001610f0f565b6000670de0b6b3a764000083111561173b5760405162461bcd60e51b815260206004820152601f60248201527f416d6f756e74206d757374206265206c657373207468616e20737570706c79006044820152606401610c69565b8161175a57600061174b84612cc7565b50939550610e61945050505050565b600061176584612cc7565b50929550610e61945050505050565b61177c61276d565b6001600160a01b0382166117a25760405162461bcd60e51b8152600401610c699061416e565b30318111156117c35760405162461bcd60e51b8152600401610c6990614125565b6040516001600160a01b0383169082156108fc029083906000818181858888f193505050501580156117f9573d6000803e3d6000fd5b50816001600160a01b03167f4d8420592b5127331542602906f9907d197ec28af2dfd4daa72324bcfadcc600826040516111a191815260200190565b61183d61276d565b603281838561184c888a61426f565b611856919061426f565b611860919061426f565b61186a919061426f565b11156118af5760405162461bcd60e51b81526020600482015260146024820152734d617820746f74616c206665652069732035302560601b6044820152606401610c69565b600854851480156118c15750600a5484145b80156118ce575060095483145b80156118db5750600b5482145b80156118e85750600c5481145b1561192a5760405162461bcd60e51b8152602060048201526012602482015271139bdd1a1a5b99c81a5cc818da185b99d95960721b6044820152606401610c69565b6008858155600a8590556009849055600b839055600c82905560405133917f5ed6fe211f244075ad220436a1126097caaea93ebdab2a44c01339432c70aa2d916119749190614287565b60405180910390a25050505050565b61198b61276d565b6001600160a01b03811660009081526006602052604090205460ff16156119f45760405162461bcd60e51b815260206004820152601b60248201527f4163636f756e7420697320616c7265616479206578636c7564656400000000006044820152606401610c69565b6001600160a01b03811660009081526001602052604090205415611a4e576001600160a01b038116600090815260016020526040902054611a34906111ad565b6001600160a01b0382166000908152600260205260409020555b6001600160a01b038116600081815260066020526040808220805460ff1916600190811790915560078054918201815583527fa66cc928b5edb82af9bd49922954155ab7b0942694bea4ce44661d9a8736c6880180546001600160a01b03191684179055517f4940d2d27c97c0426162178d4249cafef4a4e9ce874280d41948dc95ef4d79759190a250565b611ae261276d565b6001600160a01b038116611b085760405162461bcd60e51b8152600401610c699061416e565b6019546001600160a01b0390811690821603611b365760405162461bcd60e51b8152600401610c6990614194565b601980546001600160a01b0319166001600160a01b03831690811790915560405190815233907f1f8c951d17767e852874d7e6bc407c7e0bcf18713d8d8bbf1b562740ca43a47490602001610f0f565b6001600160a01b03811660009081526006602052604081205460ff1615611bc357506001600160a01b031660009081526002602052604090205490565b6001600160a01b038216600090815260016020526040902054610e61906111ad565b611bed61276d565b611bf76000612d2f565b565b601e546001600160a01b03163314611c235760405162461bcd60e51b8152600401610c69906141ba565b6001600160a01b038216611c685760405162461bcd60e51b815260206004820152600c60248201526b5a65726f206164647265737360a01b6044820152606401610c69565b60008111611cc85760405162461bcd60e51b815260206004820152602760248201527f556e6c6f636b20616d6f756e74206d7573742062652067726561746572207468604482015266616e207a65726f60c81b6064820152608401610c69565b601c54611cdd906001600160a01b0316611b86565b811115611cfc5760405162461bcd60e51b8152600401610c6990614125565b6001600160a01b03821660009081526006602052604090205460ff16611d3857601c54611d33906001600160a01b03168383612d7f565b611d4f565b601c54611d4f906001600160a01b03168383612c19565b816001600160a01b03167f6910e0daf9e4cb68a38b4c1a459b879944b8eb161a86c8f354d96e5a54faf0c0826040516111a191815260200190565b611d9261276d565b6001600160a01b038116611db85760405162461bcd60e51b8152600401610c699061416e565b601e546001600160a01b03808316911603611e045760405162461bcd60e51b815260206004820152600c60248201526b53616d65204272696467652160a01b6044820152606401610c69565b601e80546001600160a01b0319166001600160a01b03831690811790915560405190815233907fd94e52c58cb5870958c05be7a6183038f705e88c54604590d15d3986cf12a2c990602001610f0f565b6001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000811660009081526002602052604080822054601c5490931682528120549091611eb991611eb390670de0b6b3a764000090612d23565b90612d23565b905090565b611ec661276d565b6001600160a01b03821660009081526004602052604090205481151560ff909116151503611f2d5760405162461bcd60e51b815260206004820152601460248201527314185a5c88105b1c9958591e48115b98589b195960621b6044820152606401610c69565b6001600160a01b038216600081815260046020908152604091829020805460ff191685151590811790915582519384529083015233917fac0b2958c680afbcacee16a4305170e8004cf74c8270ac3edd2abc61b919e8ea91016111a1565b3360008181526003602090815260408083206001600160a01b038716845282528083205481516060810190925260258083529394610e5d9490938893610f899392899261440290830139612aca565b6000611fe73384846128e3565b604080513381526001600160a01b038516602082015280820184905290517f0a85107a334eae0d22d21cdf13af0f8e8125039ec60baaa843d2c4c5b06801749181900360600190a150600192915050565b61204061276d565b6001600160a01b0382166120665760405162461bcd60e51b8152600401610c699061416e565b6001600160a01b03821660009081526005602052604090205481151560ff9091161515036120c85760405162461bcd60e51b815260206004820152600f60248201526e105b1c9958591e48195b98589b1959608a1b6044820152606401610c69565b6001600160a01b038216600081815260056020908152604091829020805460ff191685151590811790915582519384529083015233917f76f22305305903e16255cd5e7860e85c184833a5d910944a72f17fec284b8e1f91016111a1565b61212e61276d565b801515601e60179054906101000a900460ff161515036121855760405162461bcd60e51b8152602060048201526012602482015271416c72656164792073657420456e61626c6560701b6044820152606401610c69565b601e805460ff60b81b1916600160b81b8315158102919091179182905560405160ff9190920416151581527f31bb29a860273cd60e45bfd8d53a143941df649ed22e5681a416fab2500c8b12906020015b60405180910390a150565b6121e961276d565b60328183856121f8888a61426f565b612202919061426f565b61220c919061426f565b612216919061426f565b111561225b5760405162461bcd60e51b81526020600482015260146024820152734d617820746f74616c206665652069732035302560601b6044820152606401610c69565b600d858155600f859055600e8490556010839055601182905560405133917feeafcf7f0f07b512f79535e74a0088e915295e3ba562933b8a5d5dcf4b0b5354916119749190614287565b6122ad61276d565b601e54600160b01b900460ff161515811515036122fe5760405162461bcd60e51b815260206004820152600f60248201526e105b1c9958591e48195b98589b1959608a1b6044820152606401610c69565b601e8054821515600160b01b0260ff60b01b1990911617905560405133907fb318bd8ba266a5ee667ec4d0326bb4b0be9a30e8aadeaa85fef0cdeac50d723690610f0f90841515815260200190565b61235561276d565b6001600160a01b03811661237b5760405162461bcd60e51b8152600401610c699061416e565b601a546001600160a01b03908116908216036123ee5760405162461bcd60e51b815260206004820152602c60248201527f546865206c69717569646974792077616c6c657420697320616c72656164792060448201526b74686973206164647265737360a01b6064820152608401610c69565b601a80546001600160a01b0319166001600160a01b03831690811790915560405190815233907f99cf746968302d2ab01f9f9b0f5410586a666bb17b3fe690b309f5d6e16f6cd390602001610f0f565b61244661276d565b6001600160a01b03811661248e5760405162461bcd60e51b815260206004820152600f60248201526e496e76616c6964206164647265737360881b6044820152606401610c69565b601c546001600160a01b038083169116036124eb5760405162461bcd60e51b815260206004820152601960248201527f416c72656164792073657420746f20746869732076616c7565000000000000006044820152606401610c69565b601c80546001600160a01b0319166001600160a01b0383169081179091556040805133815260208101929092527fb97f7a2535e0e53d65a1db2e5691bf70f020b2a06dcc9419e93976fa79e2b4ec91016121d6565b61254861276d565b6001600160a01b0381166125ad5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610c69565b6125b681612d2f565b50565b6125c161276d565b6001600160a01b0382166125e75760405162461bcd60e51b8152600401610c699061416e565b6000811161264b5760405162461bcd60e51b815260206004820152602b60248201527f5769746864726177616c20616d6f756e74206d7573742062652067726561746560448201526a72207468616e207a65726f60a81b6064820152608401610c69565b3060009081526006602052604090205460ff16801561268357506001600160a01b03821660009081526006602052604090205460ff16155b1561269857612693308383612d7f565b612732565b3060009081526006602052604090205460ff161580156126d057506001600160a01b03821660009081526006602052604090205460ff165b156126e057612693308383612b04565b3060009081526006602052604090205460ff16801561271757506001600160a01b03821660009081526006602052604090205460ff165b1561272757612693308383612c19565b612732308383612e21565b816001600160a01b03167fb4214c8c54fc7442f36d3682f59aebaf09358a4431835b30efb29d52cf9e1e91826040516111a191815260200190565b6000546001600160a01b03163314611bf75760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610c69565b6001600160a01b0383166128295760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610c69565b6001600160a01b03821661288a5760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610c69565b6001600160a01b0383811660008181526003602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9259101610e43565b6001600160a01b0383166129475760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b6064820152608401610c69565b6001600160a01b0382166129a95760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b6064820152608401610c69565b60008111612a0b5760405162461bcd60e51b815260206004820152602960248201527f5472616e7366657220616d6f756e74206d7573742062652067726561746572206044820152687468616e207a65726f60b81b6064820152608401610c69565b6000612a1630611b86565b601f5490915081108015908190612a375750601e54600160a01b900460ff16155b8015612a5c57506001600160a01b03851660009081526004602052604090205460ff16155b8015612a715750601e54600160b01b900460ff165b8015612a8b5750601a546001600160a01b03868116911614155b8015612aa55750601a546001600160a01b03858116911614155b15612ab857601f549150612ab882612e65565b612ac3858585612fdf565b5050505050565b60008184841115612aee5760405162461bcd60e51b8152600401610c699190613f63565b506000612afb8585612d23565b95945050505050565b600080600080600080612b1687612cc7565b6001600160a01b038f16600090815260016020526040902054959b50939950919750955093509150612b489087612d23565b6001600160a01b03808b16600090815260016020908152604080832094909455918b16815260029091522054612b7e9084612cbb565b6001600160a01b038916600090815260026020908152604080832093909355600190522054612bad9086612cbb565b6001600160a01b038916600090815260016020526040902055612bd38988838588613278565b876001600160a01b0316896001600160a01b03166000805160206143e283398151915285604051612c0691815260200190565b60405180910390a3505050505050505050565b600080600080600080612c2b87612cc7565b6001600160a01b038f16600090815260026020526040902054959b50939950919750955093509150612c5d9088612d23565b6001600160a01b038a16600090815260026020908152604080832093909355600190522054612b489087612d23565b6000806000612c99613330565b9092509050612ca88282612caf565b9250505090565b600061122a82846142bc565b600061122a828461426f565b6000806000806000806000806000806000612ce18c6134c8565b945094509450945094506000806000612d058f88888888612d00612c8c565b613546565b919f509d509b50969950949750929550505050505091939550919395565b600061122a8284614229565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b600080600080600080612d9187612cc7565b6001600160a01b038f16600090815260026020526040902054959b50939950919750955093509150612dc39088612d23565b6001600160a01b038a16600090815260026020908152604080832093909355600190522054612df29087612d23565b6001600160a01b03808b1660009081526001602052604080822093909355908a1681522054612bad9086612cbb565b600080600080600080612e3387612cc7565b6001600160a01b038f16600090815260016020526040902054959b50939950919750955093509150612df29087612d23565b601e805460ff60a01b1916600160a01b179055601154600c54600e54600954600d54600854600f54600a54600097612eb8979096612eb29691958795919486948593849290918391612cbb565b90612cbb565b600d54600854919250600091612ece919061426f565b90506000612ee683612ee086856135e8565b90612caf565b9050612ef1816135f4565b600e54600954600091612f039161426f565b90506000612f1585612ee088856135e8565b9050612f208161367b565b600f54600a54600091612f329161426f565b90506000612f4487612ee08a856135e8565b9050612f4f81613880565b601154600c54600091612f619161426f565b90506000612f7389612ee08c856135e8565b9050612f7e816139d3565b6040805184815260208101899052908101869052606081018290527fab43d64ef8bfe74393a308a718f49af9d2f845de3bdc8f5e3cb528b4ffec85f79060800160405180910390a15050601e805460ff60a01b191690555050505050505050565b6001600160a01b03831660009081526005602052604090205460ff1615801561302157506001600160a01b03821660009081526005602052604090205460ff16155b1561313057601e54600160b81b900460ff166130755760405162461bcd60e51b8152602060048201526013602482015272151c98591a5b99c81a5cc8191a5cd8589b1959606a1b6044820152606401610c69565b6001600160a01b03831660009081526004602052604090205460ff1615156001036130d557601e805460ff60a81b1916600160a81b1790556130d0600b54601455600854601555600a54601755600954601655600c54601855565b613130565b6001600160a01b03821660009081526004602052604090205460ff16151560010361313057601e805460ff60a81b1916600160a81b179055613130601054601455600d54601555600f54601755600e54601655601154601855565b6001600160a01b03831660009081526006602052604090205460ff16801561317157506001600160a01b03821660009081526006602052604090205460ff16155b1561318657613181838383612d7f565b613232565b6001600160a01b03831660009081526006602052604090205460ff161580156131c757506001600160a01b03821660009081526006602052604090205460ff165b156131d757613181838383612b04565b6001600160a01b03831660009081526006602052604090205460ff16801561321757506001600160a01b03821660009081526006602052604090205460ff165b1561322757613181838383612c19565b613232838383612e21565b601e54600160a81b900460ff16151560010361327357601e805460ff60a81b1916905561327360006014819055601581905560178190556016819055601855565b505050565b601e54600160a81b900460ff161515600103612ac357600061329985613b26565b905060006132a686613b42565b905060006132b387613b5e565b90506132be86613b7a565b6132c88383613c02565b6132d181613b7a565b6132db8486613caa565b306001600160a01b0389166000805160206143e28339815191528385613301888c61426f565b61330b919061426f565b613315919061426f565b60405190815260200160405180910390a35050505050505050565b6012546000908190670de0b6b3a7640000825b60075481101561348d57826001600060078481548110613365576133656141fd565b60009182526020808320909101546001600160a01b0316835282019290925260400190205411806133d057508160026000600784815481106133a9576133a96141fd565b60009182526020808320909101546001600160a01b03168352820192909252604001902054115b156133eb57505060125493670de0b6b3a76400009350915050565b6134316001600060078481548110613405576134056141fd565b60009182526020808320909101546001600160a01b031683528201929092526040019020548490612d23565b9250613479600260006007848154811061344d5761344d6141fd565b60009182526020808320909101546001600160a01b031683528201929092526040019020548390612d23565b91508061348581614256565b915050613343565b506012546134a390670de0b6b3a7640000612caf565b8210156134bf57505060125492670de0b6b3a764000092509050565b90939092509050565b6000806000806000806134da87613cce565b905060006134e788613cea565b905060006134f489613b26565b905060006135018a613b42565b9050600061350e8b613b5e565b9050600061352085611eb38e89612d23565b905061353282611eb385818589612d23565b9c959b509399509197509550919350505050565b60008080806135558a866135e8565b905060006135638a876135e8565b905060006135718a886135e8565b9050600061357f8a896135e8565b9050600061358d8a8a6135e8565b9050600061359a8f613b5e565b905060006135a8828c6135e8565b905060006135be82612eb2868189818d8d612cbb565b905060006135cc8983612d23565b989b509799509597505050505050505096509650969350505050565b600061122a82846142de565b6000613601826002612caf565b9050600061360f8383612d23565b90504761361b83613d06565b60006136274783612d23565b90506136338382613e60565b60408051858152602081018390529081018490527f9d1cc8269ebbe9c8a971dd4c72fe5f591a00d412092c504fabeacee79732ac119060600160405180910390a15050505050565b6000613685612c8c565b9050600061369383836135e8565b6001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000166000908152600160205260409020549091506136d99082612cbb565b6001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000166000908152600160205260408082209290925530815220546137259082612d23565b306000908152600160209081526040808320939093557f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316825260069052205460ff16156137f2576001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000166000908152600260205260409020546137b89084612cbb565b6001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000166000908152600260205260409020555b3060009081526006602052604090205460ff161561383557306000908152600260205260409020546138249084612d23565b306000908152600260205260409020555b6040518381526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169030906000805160206143e283398151915290602001610e43565b600061388a612c8c565b9050600061389883836135e8565b6019546001600160a01b03166000908152600160205260409020549091506138c09082612cbb565b6019546001600160a01b03166000908152600160205260408082209290925530815220546138ee9082612d23565b306000908152600160209081526040808320939093556019546001600160a01b0316825260069052205460ff1615613961576019546001600160a01b03166000908152600260205260409020546139459084612cbb565b6019546001600160a01b03166000908152600260205260409020555b3060009081526006602052604090205460ff16156139a457306000908152600260205260409020546139939084612d23565b306000908152600260205260409020555b6019546040518481526001600160a01b039091169030906000805160206143e283398151915290602001610e43565b60006139dd612c8c565b905060006139eb83836135e8565b601b546001600160a01b0316600090815260016020526040902054909150613a139082612cbb565b601b546001600160a01b0316600090815260016020526040808220929092553081522054613a419082612d23565b30600090815260016020908152604080832093909355601b546001600160a01b0316825260069052205460ff1615613ab457601b546001600160a01b0316600090815260026020526040902054613a989084612cbb565b601b546001600160a01b03166000908152600260205260409020555b3060009081526006602052604090205460ff1615613af75730600090815260026020526040902054613ae69084612d23565b306000908152600260205260409020555b601b546040518481526001600160a01b039091169030906000805160206143e283398151915290602001610e43565b6000610e616064612ee0601754856135e890919063ffffffff16565b6000610e616064612ee0601654856135e890919063ffffffff16565b6000610e616064612ee0601854856135e890919063ffffffff16565b6000613b84612c8c565b90506000613b9283836135e8565b30600090815260016020526040902054909150613baf9082612cbb565b3060009081526001602090815260408083209390935560069052205460ff16156132735730600090815260026020526040902054613bed9084612cbb565b30600090815260026020526040902055505050565b6000613c0c612c8c565b90506000613c1a84836135e8565b90506000613c2884846135e8565b30600090815260016020526040902054909150613c4b908390612eb29084612cbb565b3060009081526001602090815260408083209390935560069052205460ff1615612ac357613c79848661426f565b30600090815260026020526040902054613c93919061426f565b306000908152600260205260409020555050505050565b601254613cb79083612d23565b601255601354613cc79082612cbb565b6013555050565b6000610e616064612ee0601454856135e890919063ffffffff16565b6000610e616064612ee0601554856135e890919063ffffffff16565b6040805160028082526060820183526000926020830190803683370190505090503081600081518110613d3b57613d3b6141fd565b6001600160a01b03928316602091820292909201810191909152601d54604080516315ab88c960e31b81529051919093169263ad5c46489260048083019391928290030181865afa158015613d94573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613db891906142fd565b81600181518110613dcb57613dcb6141fd565b6001600160a01b039283166020918202929092010152601d54613df191309116846127c7565b601d5460405163791ac94760e01b81526001600160a01b039091169063791ac94790613e2a90859060009086903090429060040161431a565b600060405180830381600087803b158015613e4457600080fd5b505af1158015613e58573d6000803e3d6000fd5b505050505050565b601d54613e789030906001600160a01b0316846127c7565b601d54601a5460405163f305d71960e01b81523060048201526024810185905260006044820181905260648201526001600160a01b0391821660848201524260a482015291169063f305d71990839060c40160606040518083038185885af1158015613ee8573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190612ac3919061438b565b6001600160a01b03811681146125b657600080fd5b600080600060608486031215613f3757600080fd5b8335613f4281613f0d565b92506020840135613f5281613f0d565b929592945050506040919091013590565b600060208083528351808285015260005b81811015613f9057858101830151858201604001528201613f74565b81811115613fa2576000604083870101525b50601f01601f1916929092016040019392505050565b60008060408385031215613fcb57600080fd5b8235613fd681613f0d565b946020939093013593505050565b600060208284031215613ff657600080fd5b813561122a81613f0d565b60006020828403121561401357600080fd5b5035919050565b80151581146125b657600080fd5b6000806040838503121561403b57600080fd5b82359150602083013561404d8161401a565b809150509250929050565b600080600080600060a0868803121561407057600080fd5b505083359560208501359550604085013594606081013594506080013592509050565b600080604083850312156140a657600080fd5b82356140b181613f0d565b9150602083013561404d8161401a565b6000602082840312156140d357600080fd5b813561122a8161401a565b600080604083850312156140f157600080fd5b82356140fc81613f0d565b9150602083013561404d81613f0d565b60006020828403121561411e57600080fd5b5051919050565b602080825260129082015271496e63756666696369656e742066756e647360701b604082015260600190565b60006020828403121561416357600080fd5b815161122a8161401a565b6020808252600c908201526b5a65726f204164647265737360a01b604082015260600190565b6020808252600c908201526b53616d65204164647265737360a01b604082015260600190565b60208082526023908201527f4f6e6c79206272696467652063616e20706572666f726d20746869732061637460408201526234b7b760e91b606082015260800190565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b60008282101561423b5761423b614213565b500390565b634e487b7160e01b600052603160045260246000fd5b60006001820161426857614268614213565b5060010190565b6000821982111561428257614282614213565b500190565b815481526001820154602082015260028201546040820152600382015460608201526004820154608082015260a08101610e61565b6000826142d957634e487b7160e01b600052601260045260246000fd5b500490565b60008160001904831182151516156142f8576142f8614213565b500290565b60006020828403121561430f57600080fd5b815161122a81613f0d565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b8181101561436a5784516001600160a01b031683529383019391830191600101614345565b50506001600160a01b03969096166060850152505050608001529392505050565b6000806000606084860312156143a057600080fd5b835192506020840151915060408401519050925092509256fe45524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e6365ddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa26469706673582212208b76c3abc8074058bd6eb1af9b97726ea5880cc2726e3f0ccfef8a5a2659b82164736f6c634300080f00330000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d000000000000000000000000ebaecbc9f43eee833feddea0a7f9b8df0d99af19000000000000000000000000ebaecbc9f43eee833feddea0a7f9b8df0d99af19000000000000000000000000343def46f3424d10df63668fe548e38ae4924644

Deployed Bytecode

0x6080604052600436106103905760003560e01c80635d098b38116101dc578063ac03e9f011610102578063d12a7688116100a0578063e78cea921161006f578063e78cea9214610b97578063ebcb0b7a14610bb7578063f2fde38b14610bd7578063f3fef3a314610bf7576103d0565b8063d12a768814610afb578063d469801614610b11578063dd62ed3e14610b31578063e37ba8f914610b77576103d0565b8063b92ebd5f116100dc578063b92ebd5f14610a85578063c0b0fda214610aa5578063c1cf53c414610abb578063c49b9a8014610adb576103d0565b8063ac03e9f014610a15578063af9549e014610a35578063b62496f514610a55576103d0565b80638da5cb5b1161017a5780639a7a23d6116101495780639a7a23d61461099f5780639eb942e5146109bf578063a457c2d7146109d5578063a9059cbb146109f5576103d0565b80638da5cb5b1461091d5780638dd148021461093b5780639358928b1461095b57806395d89b4114610970576103d0565b8063715018a6116101b6578063715018a61461088f57806375f0a874146108a45780637eee288d146108c457806388f82020146108e4576103d0565b80635d098b38146108395780636bc87c3a1461085957806370a082311461086f576103d0565b8063313ce567116102c15780634549b0391161025f5780634a74bb021161022e5780634a74bb021461079f57806352390c02146107c05780635342acb4146107e05780635992704414610819576103d0565b80634549b0391461071857806347062402146107385780634782f7791461075f57806347a28b791461077f576103d0565b80633b124fe71161029b5780633b124fe7146106a25780633bd5d173146106b857806341cb87fc146106d857806343e716fe146106f8576103d0565b8063313ce567146106465780633685d419146106625780633950935114610682576103d0565b80631694505e1161032e57806323b872dd1161030857806323b872dd14610597578063282d3fdf146105b75780632b14ca56146105d75780632d83811914610626576103d0565b80631694505e1461054657806318160ddd1461056657806322976e0d14610581576103d0565b806306fdde031161036a57806306fdde03146104a9578063095ea7b3146104e757806313114a9d146105075780631525ff7d14610526576103d0565b806301e33667146104055780630622874914610427578063064a59d014610478576103d0565b366103d057604080513381523460208201527f98c44cd71a4f8250380570aaf8bf1f0fd2a19bc3428a18a782e9e4d6c1928b1391015b60405180910390a1005b604080513381523460208201527fc04e16d4878a87a7d627a5fb8c387ac4a2169e45f86d1935cc739c196c8a571591016103c6565b34801561041157600080fd5b50610425610420366004613f22565b610c17565b005b34801561043357600080fd5b5061045b7f000000000000000000000000000000000000000000000000000000000000dead81565b6040516001600160a01b0390911681526020015b60405180910390f35b34801561048457600080fd5b50601e5461049990600160b81b900460ff1681565b604051901515815260200161046f565b3480156104b557600080fd5b5060408051808201909152600c81526b22b6b834b932902a37b5b2b760a11b60208201525b60405161046f9190613f63565b3480156104f357600080fd5b50610499610502366004613fb8565b610e50565b34801561051357600080fd5b506013545b60405190815260200161046f565b34801561053257600080fd5b50610425610541366004613fe4565b610e67565b34801561055257600080fd5b50601d5461045b906001600160a01b031681565b34801561057257600080fd5b50670de0b6b3a7640000610518565b34801561058d57600080fd5b5061051860175481565b3480156105a357600080fd5b506104996105b2366004613f22565b610f1a565b3480156105c357600080fd5b506104256105d2366004613fb8565b610f98565b3480156105e357600080fd5b50600d54600e54600f546010546011546105fe949392919085565b604080519586526020860194909452928401919091526060830152608082015260a00161046f565b34801561063257600080fd5b50610518610641366004614001565b6111ad565b34801561065257600080fd5b506040516009815260200161046f565b34801561066e57600080fd5b5061042561067d366004613fe4565b611231565b34801561068e57600080fd5b5061049961069d366004613fb8565b611462565b3480156106ae57600080fd5b5061051860145481565b3480156106c457600080fd5b506104256106d3366004614001565b611498565b3480156106e457600080fd5b506104256106f3366004613fe4565b6115b7565b34801561070457600080fd5b50610425610713366004614001565b611663565b34801561072457600080fd5b50610518610733366004614028565b6116e1565b34801561074457600080fd5b50600854600954600a54600b54600c546105fe949392919085565b34801561076b57600080fd5b5061042561077a366004613fb8565b611774565b34801561078b57600080fd5b5061042561079a366004614058565b611835565b3480156107ab57600080fd5b50601e5461049990600160b01b900460ff1681565b3480156107cc57600080fd5b506104256107db366004613fe4565b611983565b3480156107ec57600080fd5b506104996107fb366004613fe4565b6001600160a01b031660009081526005602052604090205460ff1690565b34801561082557600080fd5b50601b5461045b906001600160a01b031681565b34801561084557600080fd5b50610425610854366004613fe4565b611ada565b34801561086557600080fd5b5061051860155481565b34801561087b57600080fd5b5061051861088a366004613fe4565b611b86565b34801561089b57600080fd5b50610425611be5565b3480156108b057600080fd5b5060195461045b906001600160a01b031681565b3480156108d057600080fd5b506104256108df366004613fb8565b611bf9565b3480156108f057600080fd5b506104996108ff366004613fe4565b6001600160a01b031660009081526006602052604090205460ff1690565b34801561092957600080fd5b506000546001600160a01b031661045b565b34801561094757600080fd5b50610425610956366004613fe4565b611d8a565b34801561096757600080fd5b50610518611e54565b34801561097c57600080fd5b50604080518082019091526006815265454d5049524560d01b60208201526104da565b3480156109ab57600080fd5b506104256109ba366004614093565b611ebe565b3480156109cb57600080fd5b5061051860185481565b3480156109e157600080fd5b506104996109f0366004613fb8565b611f8b565b348015610a0157600080fd5b50610499610a10366004613fb8565b611fda565b348015610a2157600080fd5b50601c5461045b906001600160a01b031681565b348015610a4157600080fd5b50610425610a50366004614093565b612038565b348015610a6157600080fd5b50610499610a70366004613fe4565b60046020526000908152604090205460ff1681565b348015610a9157600080fd5b50610425610aa03660046140c1565b612126565b348015610ab157600080fd5b5061051860165481565b348015610ac757600080fd5b50610425610ad6366004614058565b6121e1565b348015610ae757600080fd5b50610425610af63660046140c1565b6122a5565b348015610b0757600080fd5b50610518601f5481565b348015610b1d57600080fd5b50601a5461045b906001600160a01b031681565b348015610b3d57600080fd5b50610518610b4c3660046140de565b6001600160a01b03918216600090815260036020908152604080832093909416825291909152205490565b348015610b8357600080fd5b50610425610b92366004613fe4565b61234d565b348015610ba357600080fd5b50601e5461045b906001600160a01b031681565b348015610bc357600080fd5b50610425610bd2366004613fe4565b61243e565b348015610be357600080fd5b50610425610bf2366004613fe4565b612540565b348015610c0357600080fd5b50610425610c12366004613fb8565b6125b9565b610c1f61276d565b6001600160a01b038316610c725760405162461bcd60e51b81526020600482015260156024820152742d32b9379020b2323932b9b99037b3102a37b5b2b760591b60448201526064015b60405180910390fd5b6001600160a01b038216610cc85760405162461bcd60e51b815260206004820152601960248201527f5a65726f2041646472657373206f6620526563657069656e74000000000000006044820152606401610c69565b6040516370a0823160e01b81523060048201526001600160a01b038416906370a0823190602401602060405180830381865afa158015610d0c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d30919061410c565b811115610d4f5760405162461bcd60e51b8152600401610c6990614125565b60405163a9059cbb60e01b81526001600160a01b0383811660048301526024820183905284169063a9059cbb906044016020604051808303816000875af1158015610d9e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610dc29190614151565b610dfe5760405162461bcd60e51b815260206004820152600d60248201526c151c985b9cd9995c8811985a5b609a1b6044820152606401610c69565b816001600160a01b0316836001600160a01b03167f46ae78bc7b198b8b534ca0070d125569ac5f955976841c4343223079f3abf0de83604051610e4391815260200190565b60405180910390a3505050565b6000610e5d3384846127c7565b5060015b92915050565b610e6f61276d565b6001600160a01b038116610e955760405162461bcd60e51b8152600401610c699061416e565b601b546001600160a01b0390811690821603610ec35760405162461bcd60e51b8152600401610c6990614194565b601b80546001600160a01b0319166001600160a01b03831690811790915560405190815233907f6b23cabdb8b55d4883cb406993a5f14492a2c4c86e5ce8debed487c4dc5a45e6906020015b60405180910390a250565b6000610f278484846128e3565b610f8e84336001600160a01b0387166000908152600360205260408120610f8991336001600160a01b03166001600160a01b0316815260200190815260200160002054866040518060600160405280602881526020016143ba60289139612aca565b6127c7565b5060019392505050565b601e546001600160a01b03163314610fc25760405162461bcd60e51b8152600401610c69906141ba565b6001600160a01b0382166110075760405162461bcd60e51b815260206004820152600c60248201526b5a65726f206164647265737360a01b6044820152606401610c69565b600081116110655760405162461bcd60e51b815260206004820152602560248201527f4c6f636b20616d6f756e74206d7573742062652067726561746572207468616e604482015264207a65726f60d81b6064820152608401610c69565b61106e82611b86565b81111561108d5760405162461bcd60e51b8152600401610c6990614125565b6001600160a01b03821660009081526003602090815260408083203384529091529020548111156111115760405162461bcd60e51b815260206004820152602860248201527f45524332303a207472616e7366657220616d6f756e74206578636565647320616044820152676c6c6f77616e636560c01b6064820152608401610c69565b6001600160a01b03821660009081526006602052604090205460ff1661114e57601c546111499083906001600160a01b031683612b04565b611166565b601c546111669083906001600160a01b031683612c19565b816001600160a01b03167fd67292b41a781140f5a0da0649c6028bd549f6e3335f570c31cdd202db9fc0cf826040516111a191815260200190565b60405180910390a25050565b60006012548211156112145760405162461bcd60e51b815260206004820152602a60248201527f416d6f756e74206d757374206265206c657373207468616e20746f74616c207260448201526965666c656374696f6e7360b01b6064820152608401610c69565b600061121e612c8c565b905061122a8382612caf565b9392505050565b61123961276d565b601c546001600160a01b03908116908216036112a15760405162461bcd60e51b815260206004820152602160248201527f427269646765205661756c742063616e277420726563656976652072657761726044820152601960fa1b6064820152608401610c69565b6001600160a01b03811660009081526006602052604090205460ff166113095760405162461bcd60e51b815260206004820152601b60248201527f4163636f756e7420697320616c726561647920696e636c7564656400000000006044820152606401610c69565b60005b60075481101561142a57816001600160a01b031660078281548110611333576113336141fd565b6000918252602090912001546001600160a01b031603611418576007805461135d90600190614229565b8154811061136d5761136d6141fd565b600091825260209091200154600780546001600160a01b039092169183908110611399576113996141fd565b600091825260208083209190910180546001600160a01b0319166001600160a01b039485161790559184168152600282526040808220829055600690925220805460ff1916905560078054806113f1576113f1614240565b600082815260209020810160001990810180546001600160a01b031916905501905561142a565b8061142281614256565b91505061130c565b506040516001600160a01b038216907f5f05034ac7f3d648bc123a1fa9e17b8b56758b33c45ad85f418b7125cf0b9ce590600090a250565b3360008181526003602090815260408083206001600160a01b03871684529091528120549091610e5d918590610f899086612cbb565b3360008181526006602052604090205460ff161561150d5760405162461bcd60e51b815260206004820152602c60248201527f4578636c75646564206164647265737365732063616e6e6f742063616c6c207460448201526b3434b990333ab731ba34b7b760a11b6064820152608401610c69565b600061151883612cc7565b505050506001600160a01b03841660009081526001602052604090205491925061154491905082612d23565b6001600160a01b03831660009081526001602052604090205560125461156a9082612d23565b60125560135461157a9084612cbb565b60135560405183815233907f9745995e0db679b62281d9ca9200fed9b3cc7ee9ff131b05a3fb642b5d43dcc49060200160405180910390a2505050565b6115bf61276d565b6001600160a01b0381166115e55760405162461bcd60e51b8152600401610c699061416e565b601d546001600160a01b03908116908216036116135760405162461bcd60e51b8152600401610c6990614194565b601d80546001600160a01b0319166001600160a01b03831690811790915560405190815233907fac059041d07fde13bf50242296de370c33ddecff1f8ecb4d5ae0836f1ebe365d90602001610f0f565b61166b61276d565b601f5481036116aa5760405162461bcd60e51b815260206004820152600b60248201526a14d85b5948105b5bdd5b9d60aa1b6044820152606401610c69565b601f81905560405181815233907f9dcafbd759717e12afc2978cb500b553016b707cc2c3497e2d05f528ee77796190602001610f0f565b6000670de0b6b3a764000083111561173b5760405162461bcd60e51b815260206004820152601f60248201527f416d6f756e74206d757374206265206c657373207468616e20737570706c79006044820152606401610c69565b8161175a57600061174b84612cc7565b50939550610e61945050505050565b600061176584612cc7565b50929550610e61945050505050565b61177c61276d565b6001600160a01b0382166117a25760405162461bcd60e51b8152600401610c699061416e565b30318111156117c35760405162461bcd60e51b8152600401610c6990614125565b6040516001600160a01b0383169082156108fc029083906000818181858888f193505050501580156117f9573d6000803e3d6000fd5b50816001600160a01b03167f4d8420592b5127331542602906f9907d197ec28af2dfd4daa72324bcfadcc600826040516111a191815260200190565b61183d61276d565b603281838561184c888a61426f565b611856919061426f565b611860919061426f565b61186a919061426f565b11156118af5760405162461bcd60e51b81526020600482015260146024820152734d617820746f74616c206665652069732035302560601b6044820152606401610c69565b600854851480156118c15750600a5484145b80156118ce575060095483145b80156118db5750600b5482145b80156118e85750600c5481145b1561192a5760405162461bcd60e51b8152602060048201526012602482015271139bdd1a1a5b99c81a5cc818da185b99d95960721b6044820152606401610c69565b6008858155600a8590556009849055600b839055600c82905560405133917f5ed6fe211f244075ad220436a1126097caaea93ebdab2a44c01339432c70aa2d916119749190614287565b60405180910390a25050505050565b61198b61276d565b6001600160a01b03811660009081526006602052604090205460ff16156119f45760405162461bcd60e51b815260206004820152601b60248201527f4163636f756e7420697320616c7265616479206578636c7564656400000000006044820152606401610c69565b6001600160a01b03811660009081526001602052604090205415611a4e576001600160a01b038116600090815260016020526040902054611a34906111ad565b6001600160a01b0382166000908152600260205260409020555b6001600160a01b038116600081815260066020526040808220805460ff1916600190811790915560078054918201815583527fa66cc928b5edb82af9bd49922954155ab7b0942694bea4ce44661d9a8736c6880180546001600160a01b03191684179055517f4940d2d27c97c0426162178d4249cafef4a4e9ce874280d41948dc95ef4d79759190a250565b611ae261276d565b6001600160a01b038116611b085760405162461bcd60e51b8152600401610c699061416e565b6019546001600160a01b0390811690821603611b365760405162461bcd60e51b8152600401610c6990614194565b601980546001600160a01b0319166001600160a01b03831690811790915560405190815233907f1f8c951d17767e852874d7e6bc407c7e0bcf18713d8d8bbf1b562740ca43a47490602001610f0f565b6001600160a01b03811660009081526006602052604081205460ff1615611bc357506001600160a01b031660009081526002602052604090205490565b6001600160a01b038216600090815260016020526040902054610e61906111ad565b611bed61276d565b611bf76000612d2f565b565b601e546001600160a01b03163314611c235760405162461bcd60e51b8152600401610c69906141ba565b6001600160a01b038216611c685760405162461bcd60e51b815260206004820152600c60248201526b5a65726f206164647265737360a01b6044820152606401610c69565b60008111611cc85760405162461bcd60e51b815260206004820152602760248201527f556e6c6f636b20616d6f756e74206d7573742062652067726561746572207468604482015266616e207a65726f60c81b6064820152608401610c69565b601c54611cdd906001600160a01b0316611b86565b811115611cfc5760405162461bcd60e51b8152600401610c6990614125565b6001600160a01b03821660009081526006602052604090205460ff16611d3857601c54611d33906001600160a01b03168383612d7f565b611d4f565b601c54611d4f906001600160a01b03168383612c19565b816001600160a01b03167f6910e0daf9e4cb68a38b4c1a459b879944b8eb161a86c8f354d96e5a54faf0c0826040516111a191815260200190565b611d9261276d565b6001600160a01b038116611db85760405162461bcd60e51b8152600401610c699061416e565b601e546001600160a01b03808316911603611e045760405162461bcd60e51b815260206004820152600c60248201526b53616d65204272696467652160a01b6044820152606401610c69565b601e80546001600160a01b0319166001600160a01b03831690811790915560405190815233907fd94e52c58cb5870958c05be7a6183038f705e88c54604590d15d3986cf12a2c990602001610f0f565b6001600160a01b037f000000000000000000000000000000000000000000000000000000000000dead811660009081526002602052604080822054601c5490931682528120549091611eb991611eb390670de0b6b3a764000090612d23565b90612d23565b905090565b611ec661276d565b6001600160a01b03821660009081526004602052604090205481151560ff909116151503611f2d5760405162461bcd60e51b815260206004820152601460248201527314185a5c88105b1c9958591e48115b98589b195960621b6044820152606401610c69565b6001600160a01b038216600081815260046020908152604091829020805460ff191685151590811790915582519384529083015233917fac0b2958c680afbcacee16a4305170e8004cf74c8270ac3edd2abc61b919e8ea91016111a1565b3360008181526003602090815260408083206001600160a01b038716845282528083205481516060810190925260258083529394610e5d9490938893610f899392899261440290830139612aca565b6000611fe73384846128e3565b604080513381526001600160a01b038516602082015280820184905290517f0a85107a334eae0d22d21cdf13af0f8e8125039ec60baaa843d2c4c5b06801749181900360600190a150600192915050565b61204061276d565b6001600160a01b0382166120665760405162461bcd60e51b8152600401610c699061416e565b6001600160a01b03821660009081526005602052604090205481151560ff9091161515036120c85760405162461bcd60e51b815260206004820152600f60248201526e105b1c9958591e48195b98589b1959608a1b6044820152606401610c69565b6001600160a01b038216600081815260056020908152604091829020805460ff191685151590811790915582519384529083015233917f76f22305305903e16255cd5e7860e85c184833a5d910944a72f17fec284b8e1f91016111a1565b61212e61276d565b801515601e60179054906101000a900460ff161515036121855760405162461bcd60e51b8152602060048201526012602482015271416c72656164792073657420456e61626c6560701b6044820152606401610c69565b601e805460ff60b81b1916600160b81b8315158102919091179182905560405160ff9190920416151581527f31bb29a860273cd60e45bfd8d53a143941df649ed22e5681a416fab2500c8b12906020015b60405180910390a150565b6121e961276d565b60328183856121f8888a61426f565b612202919061426f565b61220c919061426f565b612216919061426f565b111561225b5760405162461bcd60e51b81526020600482015260146024820152734d617820746f74616c206665652069732035302560601b6044820152606401610c69565b600d858155600f859055600e8490556010839055601182905560405133917feeafcf7f0f07b512f79535e74a0088e915295e3ba562933b8a5d5dcf4b0b5354916119749190614287565b6122ad61276d565b601e54600160b01b900460ff161515811515036122fe5760405162461bcd60e51b815260206004820152600f60248201526e105b1c9958591e48195b98589b1959608a1b6044820152606401610c69565b601e8054821515600160b01b0260ff60b01b1990911617905560405133907fb318bd8ba266a5ee667ec4d0326bb4b0be9a30e8aadeaa85fef0cdeac50d723690610f0f90841515815260200190565b61235561276d565b6001600160a01b03811661237b5760405162461bcd60e51b8152600401610c699061416e565b601a546001600160a01b03908116908216036123ee5760405162461bcd60e51b815260206004820152602c60248201527f546865206c69717569646974792077616c6c657420697320616c72656164792060448201526b74686973206164647265737360a01b6064820152608401610c69565b601a80546001600160a01b0319166001600160a01b03831690811790915560405190815233907f99cf746968302d2ab01f9f9b0f5410586a666bb17b3fe690b309f5d6e16f6cd390602001610f0f565b61244661276d565b6001600160a01b03811661248e5760405162461bcd60e51b815260206004820152600f60248201526e496e76616c6964206164647265737360881b6044820152606401610c69565b601c546001600160a01b038083169116036124eb5760405162461bcd60e51b815260206004820152601960248201527f416c72656164792073657420746f20746869732076616c7565000000000000006044820152606401610c69565b601c80546001600160a01b0319166001600160a01b0383169081179091556040805133815260208101929092527fb97f7a2535e0e53d65a1db2e5691bf70f020b2a06dcc9419e93976fa79e2b4ec91016121d6565b61254861276d565b6001600160a01b0381166125ad5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610c69565b6125b681612d2f565b50565b6125c161276d565b6001600160a01b0382166125e75760405162461bcd60e51b8152600401610c699061416e565b6000811161264b5760405162461bcd60e51b815260206004820152602b60248201527f5769746864726177616c20616d6f756e74206d7573742062652067726561746560448201526a72207468616e207a65726f60a81b6064820152608401610c69565b3060009081526006602052604090205460ff16801561268357506001600160a01b03821660009081526006602052604090205460ff16155b1561269857612693308383612d7f565b612732565b3060009081526006602052604090205460ff161580156126d057506001600160a01b03821660009081526006602052604090205460ff165b156126e057612693308383612b04565b3060009081526006602052604090205460ff16801561271757506001600160a01b03821660009081526006602052604090205460ff165b1561272757612693308383612c19565b612732308383612e21565b816001600160a01b03167fb4214c8c54fc7442f36d3682f59aebaf09358a4431835b30efb29d52cf9e1e91826040516111a191815260200190565b6000546001600160a01b03163314611bf75760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610c69565b6001600160a01b0383166128295760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610c69565b6001600160a01b03821661288a5760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610c69565b6001600160a01b0383811660008181526003602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9259101610e43565b6001600160a01b0383166129475760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b6064820152608401610c69565b6001600160a01b0382166129a95760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b6064820152608401610c69565b60008111612a0b5760405162461bcd60e51b815260206004820152602960248201527f5472616e7366657220616d6f756e74206d7573742062652067726561746572206044820152687468616e207a65726f60b81b6064820152608401610c69565b6000612a1630611b86565b601f5490915081108015908190612a375750601e54600160a01b900460ff16155b8015612a5c57506001600160a01b03851660009081526004602052604090205460ff16155b8015612a715750601e54600160b01b900460ff165b8015612a8b5750601a546001600160a01b03868116911614155b8015612aa55750601a546001600160a01b03858116911614155b15612ab857601f549150612ab882612e65565b612ac3858585612fdf565b5050505050565b60008184841115612aee5760405162461bcd60e51b8152600401610c699190613f63565b506000612afb8585612d23565b95945050505050565b600080600080600080612b1687612cc7565b6001600160a01b038f16600090815260016020526040902054959b50939950919750955093509150612b489087612d23565b6001600160a01b03808b16600090815260016020908152604080832094909455918b16815260029091522054612b7e9084612cbb565b6001600160a01b038916600090815260026020908152604080832093909355600190522054612bad9086612cbb565b6001600160a01b038916600090815260016020526040902055612bd38988838588613278565b876001600160a01b0316896001600160a01b03166000805160206143e283398151915285604051612c0691815260200190565b60405180910390a3505050505050505050565b600080600080600080612c2b87612cc7565b6001600160a01b038f16600090815260026020526040902054959b50939950919750955093509150612c5d9088612d23565b6001600160a01b038a16600090815260026020908152604080832093909355600190522054612b489087612d23565b6000806000612c99613330565b9092509050612ca88282612caf565b9250505090565b600061122a82846142bc565b600061122a828461426f565b6000806000806000806000806000806000612ce18c6134c8565b945094509450945094506000806000612d058f88888888612d00612c8c565b613546565b919f509d509b50969950949750929550505050505091939550919395565b600061122a8284614229565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b600080600080600080612d9187612cc7565b6001600160a01b038f16600090815260026020526040902054959b50939950919750955093509150612dc39088612d23565b6001600160a01b038a16600090815260026020908152604080832093909355600190522054612df29087612d23565b6001600160a01b03808b1660009081526001602052604080822093909355908a1681522054612bad9086612cbb565b600080600080600080612e3387612cc7565b6001600160a01b038f16600090815260016020526040902054959b50939950919750955093509150612df29087612d23565b601e805460ff60a01b1916600160a01b179055601154600c54600e54600954600d54600854600f54600a54600097612eb8979096612eb29691958795919486948593849290918391612cbb565b90612cbb565b600d54600854919250600091612ece919061426f565b90506000612ee683612ee086856135e8565b90612caf565b9050612ef1816135f4565b600e54600954600091612f039161426f565b90506000612f1585612ee088856135e8565b9050612f208161367b565b600f54600a54600091612f329161426f565b90506000612f4487612ee08a856135e8565b9050612f4f81613880565b601154600c54600091612f619161426f565b90506000612f7389612ee08c856135e8565b9050612f7e816139d3565b6040805184815260208101899052908101869052606081018290527fab43d64ef8bfe74393a308a718f49af9d2f845de3bdc8f5e3cb528b4ffec85f79060800160405180910390a15050601e805460ff60a01b191690555050505050505050565b6001600160a01b03831660009081526005602052604090205460ff1615801561302157506001600160a01b03821660009081526005602052604090205460ff16155b1561313057601e54600160b81b900460ff166130755760405162461bcd60e51b8152602060048201526013602482015272151c98591a5b99c81a5cc8191a5cd8589b1959606a1b6044820152606401610c69565b6001600160a01b03831660009081526004602052604090205460ff1615156001036130d557601e805460ff60a81b1916600160a81b1790556130d0600b54601455600854601555600a54601755600954601655600c54601855565b613130565b6001600160a01b03821660009081526004602052604090205460ff16151560010361313057601e805460ff60a81b1916600160a81b179055613130601054601455600d54601555600f54601755600e54601655601154601855565b6001600160a01b03831660009081526006602052604090205460ff16801561317157506001600160a01b03821660009081526006602052604090205460ff16155b1561318657613181838383612d7f565b613232565b6001600160a01b03831660009081526006602052604090205460ff161580156131c757506001600160a01b03821660009081526006602052604090205460ff165b156131d757613181838383612b04565b6001600160a01b03831660009081526006602052604090205460ff16801561321757506001600160a01b03821660009081526006602052604090205460ff165b1561322757613181838383612c19565b613232838383612e21565b601e54600160a81b900460ff16151560010361327357601e805460ff60a81b1916905561327360006014819055601581905560178190556016819055601855565b505050565b601e54600160a81b900460ff161515600103612ac357600061329985613b26565b905060006132a686613b42565b905060006132b387613b5e565b90506132be86613b7a565b6132c88383613c02565b6132d181613b7a565b6132db8486613caa565b306001600160a01b0389166000805160206143e28339815191528385613301888c61426f565b61330b919061426f565b613315919061426f565b60405190815260200160405180910390a35050505050505050565b6012546000908190670de0b6b3a7640000825b60075481101561348d57826001600060078481548110613365576133656141fd565b60009182526020808320909101546001600160a01b0316835282019290925260400190205411806133d057508160026000600784815481106133a9576133a96141fd565b60009182526020808320909101546001600160a01b03168352820192909252604001902054115b156133eb57505060125493670de0b6b3a76400009350915050565b6134316001600060078481548110613405576134056141fd565b60009182526020808320909101546001600160a01b031683528201929092526040019020548490612d23565b9250613479600260006007848154811061344d5761344d6141fd565b60009182526020808320909101546001600160a01b031683528201929092526040019020548390612d23565b91508061348581614256565b915050613343565b506012546134a390670de0b6b3a7640000612caf565b8210156134bf57505060125492670de0b6b3a764000092509050565b90939092509050565b6000806000806000806134da87613cce565b905060006134e788613cea565b905060006134f489613b26565b905060006135018a613b42565b9050600061350e8b613b5e565b9050600061352085611eb38e89612d23565b905061353282611eb385818589612d23565b9c959b509399509197509550919350505050565b60008080806135558a866135e8565b905060006135638a876135e8565b905060006135718a886135e8565b9050600061357f8a896135e8565b9050600061358d8a8a6135e8565b9050600061359a8f613b5e565b905060006135a8828c6135e8565b905060006135be82612eb2868189818d8d612cbb565b905060006135cc8983612d23565b989b509799509597505050505050505096509650969350505050565b600061122a82846142de565b6000613601826002612caf565b9050600061360f8383612d23565b90504761361b83613d06565b60006136274783612d23565b90506136338382613e60565b60408051858152602081018390529081018490527f9d1cc8269ebbe9c8a971dd4c72fe5f591a00d412092c504fabeacee79732ac119060600160405180910390a15050505050565b6000613685612c8c565b9050600061369383836135e8565b6001600160a01b037f000000000000000000000000000000000000000000000000000000000000dead166000908152600160205260409020549091506136d99082612cbb565b6001600160a01b037f000000000000000000000000000000000000000000000000000000000000dead166000908152600160205260408082209290925530815220546137259082612d23565b306000908152600160209081526040808320939093557f000000000000000000000000000000000000000000000000000000000000dead6001600160a01b0316825260069052205460ff16156137f2576001600160a01b037f000000000000000000000000000000000000000000000000000000000000dead166000908152600260205260409020546137b89084612cbb565b6001600160a01b037f000000000000000000000000000000000000000000000000000000000000dead166000908152600260205260409020555b3060009081526006602052604090205460ff161561383557306000908152600260205260409020546138249084612d23565b306000908152600260205260409020555b6040518381526001600160a01b037f000000000000000000000000000000000000000000000000000000000000dead169030906000805160206143e283398151915290602001610e43565b600061388a612c8c565b9050600061389883836135e8565b6019546001600160a01b03166000908152600160205260409020549091506138c09082612cbb565b6019546001600160a01b03166000908152600160205260408082209290925530815220546138ee9082612d23565b306000908152600160209081526040808320939093556019546001600160a01b0316825260069052205460ff1615613961576019546001600160a01b03166000908152600260205260409020546139459084612cbb565b6019546001600160a01b03166000908152600260205260409020555b3060009081526006602052604090205460ff16156139a457306000908152600260205260409020546139939084612d23565b306000908152600260205260409020555b6019546040518481526001600160a01b039091169030906000805160206143e283398151915290602001610e43565b60006139dd612c8c565b905060006139eb83836135e8565b601b546001600160a01b0316600090815260016020526040902054909150613a139082612cbb565b601b546001600160a01b0316600090815260016020526040808220929092553081522054613a419082612d23565b30600090815260016020908152604080832093909355601b546001600160a01b0316825260069052205460ff1615613ab457601b546001600160a01b0316600090815260026020526040902054613a989084612cbb565b601b546001600160a01b03166000908152600260205260409020555b3060009081526006602052604090205460ff1615613af75730600090815260026020526040902054613ae69084612d23565b306000908152600260205260409020555b601b546040518481526001600160a01b039091169030906000805160206143e283398151915290602001610e43565b6000610e616064612ee0601754856135e890919063ffffffff16565b6000610e616064612ee0601654856135e890919063ffffffff16565b6000610e616064612ee0601854856135e890919063ffffffff16565b6000613b84612c8c565b90506000613b9283836135e8565b30600090815260016020526040902054909150613baf9082612cbb565b3060009081526001602090815260408083209390935560069052205460ff16156132735730600090815260026020526040902054613bed9084612cbb565b30600090815260026020526040902055505050565b6000613c0c612c8c565b90506000613c1a84836135e8565b90506000613c2884846135e8565b30600090815260016020526040902054909150613c4b908390612eb29084612cbb565b3060009081526001602090815260408083209390935560069052205460ff1615612ac357613c79848661426f565b30600090815260026020526040902054613c93919061426f565b306000908152600260205260409020555050505050565b601254613cb79083612d23565b601255601354613cc79082612cbb565b6013555050565b6000610e616064612ee0601454856135e890919063ffffffff16565b6000610e616064612ee0601554856135e890919063ffffffff16565b6040805160028082526060820183526000926020830190803683370190505090503081600081518110613d3b57613d3b6141fd565b6001600160a01b03928316602091820292909201810191909152601d54604080516315ab88c960e31b81529051919093169263ad5c46489260048083019391928290030181865afa158015613d94573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613db891906142fd565b81600181518110613dcb57613dcb6141fd565b6001600160a01b039283166020918202929092010152601d54613df191309116846127c7565b601d5460405163791ac94760e01b81526001600160a01b039091169063791ac94790613e2a90859060009086903090429060040161431a565b600060405180830381600087803b158015613e4457600080fd5b505af1158015613e58573d6000803e3d6000fd5b505050505050565b601d54613e789030906001600160a01b0316846127c7565b601d54601a5460405163f305d71960e01b81523060048201526024810185905260006044820181905260648201526001600160a01b0391821660848201524260a482015291169063f305d71990839060c40160606040518083038185885af1158015613ee8573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190612ac3919061438b565b6001600160a01b03811681146125b657600080fd5b600080600060608486031215613f3757600080fd5b8335613f4281613f0d565b92506020840135613f5281613f0d565b929592945050506040919091013590565b600060208083528351808285015260005b81811015613f9057858101830151858201604001528201613f74565b81811115613fa2576000604083870101525b50601f01601f1916929092016040019392505050565b60008060408385031215613fcb57600080fd5b8235613fd681613f0d565b946020939093013593505050565b600060208284031215613ff657600080fd5b813561122a81613f0d565b60006020828403121561401357600080fd5b5035919050565b80151581146125b657600080fd5b6000806040838503121561403b57600080fd5b82359150602083013561404d8161401a565b809150509250929050565b600080600080600060a0868803121561407057600080fd5b505083359560208501359550604085013594606081013594506080013592509050565b600080604083850312156140a657600080fd5b82356140b181613f0d565b9150602083013561404d8161401a565b6000602082840312156140d357600080fd5b813561122a8161401a565b600080604083850312156140f157600080fd5b82356140fc81613f0d565b9150602083013561404d81613f0d565b60006020828403121561411e57600080fd5b5051919050565b602080825260129082015271496e63756666696369656e742066756e647360701b604082015260600190565b60006020828403121561416357600080fd5b815161122a8161401a565b6020808252600c908201526b5a65726f204164647265737360a01b604082015260600190565b6020808252600c908201526b53616d65204164647265737360a01b604082015260600190565b60208082526023908201527f4f6e6c79206272696467652063616e20706572666f726d20746869732061637460408201526234b7b760e91b606082015260800190565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b60008282101561423b5761423b614213565b500390565b634e487b7160e01b600052603160045260246000fd5b60006001820161426857614268614213565b5060010190565b6000821982111561428257614282614213565b500190565b815481526001820154602082015260028201546040820152600382015460608201526004820154608082015260a08101610e61565b6000826142d957634e487b7160e01b600052601260045260246000fd5b500490565b60008160001904831182151516156142f8576142f8614213565b500290565b60006020828403121561430f57600080fd5b815161122a81613f0d565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b8181101561436a5784516001600160a01b031683529383019391830191600101614345565b50506001600160a01b03969096166060850152505050608001529392505050565b6000806000606084860312156143a057600080fd5b835192506020840151915060408401519050925092509256fe45524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e6365ddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa26469706673582212208b76c3abc8074058bd6eb1af9b97726ea5880cc2726e3f0ccfef8a5a2659b82164736f6c634300080f0033

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

0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d000000000000000000000000ebaecbc9f43eee833feddea0a7f9b8df0d99af19000000000000000000000000ebaecbc9f43eee833feddea0a7f9b8df0d99af19000000000000000000000000343def46f3424d10df63668fe548e38ae4924644

-----Decoded View---------------
Arg [0] : _router (address): 0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D
Arg [1] : _marketingWallet (address): 0xebaEcbc9f43eEe833fedDEa0A7f9B8Df0D99AF19
Arg [2] : _teamWallet (address): 0xebaEcbc9f43eEe833fedDEa0A7f9B8Df0D99AF19
Arg [3] : _bridgeVault (address): 0x343dEf46f3424D10Df63668Fe548e38aE4924644

-----Encoded View---------------
4 Constructor Arguments found :
Arg [0] : 0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d
Arg [1] : 000000000000000000000000ebaecbc9f43eee833feddea0a7f9b8df0d99af19
Arg [2] : 000000000000000000000000ebaecbc9f43eee833feddea0a7f9b8df0d99af19
Arg [3] : 000000000000000000000000343def46f3424d10df63668fe548e38ae4924644


Deployed Bytecode Sourcemap

14547:36482:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26655:33;;;26666:10;188:51:1;;26678:9:0;270:2:1;255:18;;248:34;26655:33:0;;161:18:1;26655:33:0;;;;;;;;14547:36482;;26748:34;;;26760:10;188:51:1;;26772:9:0;270:2:1;255:18;;248:34;26748::0;;161:18:1;26748:34:0;14:274:1;47885:499:0;;;;;;;;;;-1:-1:-1;47885:499:0;;;;;:::i;:::-;;:::i;:::-;;15938:35;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;1092:32:1;;;1074:51;;1062:2;1047:18;15938:35:0;;;;;;;;16346:28;;;;;;;;;;-1:-1:-1;16346:28:0;;;;-1:-1:-1;;;16346:28:0;;;;;;;;;1301:14:1;;1294:22;1276:41;;1264:2;1249:18;16346:28:0;1136:187:1;20766:85:0;;;;;;;;;;-1:-1:-1;20838:5:0;;;;;;;;;;;;-1:-1:-1;;;20838:5:0;;;;20766:85;;;;;;;:::i;22525:195::-;;;;;;;;;;-1:-1:-1;22525:195:0;;;;;:::i;:::-;;:::i;24120:89::-;;;;;;;;;;-1:-1:-1;24191:10:0;;24120:89;;;2404:25:1;;;2392:2;2377:18;24120:89:0;2258:177:1;44677:276:0;;;;;;;;;;-1:-1:-1;44677:276:0;;;;;:::i;:::-;;:::i;16142:41::-;;;;;;;;;;-1:-1:-1;16142:41:0;;;;-1:-1:-1;;;;;16142:41:0;;;21049:97;;;;;;;;;;-1:-1:-1;15462:13:0;21049:97;;15826:32;;;;;;;;;;;;;;;;22728:475;;;;;;;;;;-1:-1:-1;22728:475:0;;;;;:::i;:::-;;:::i;49736:639::-;;;;;;;;;;-1:-1:-1;49736:639:0;;;;;:::i;:::-;;:::i;15347:22::-;;;;;;;;;;-1:-1:-1;15347:22:0;;;;;;;;;;;;;;;;;;;;;;3670:25:1;;;3726:2;3711:18;;3704:34;;;;3754:18;;;3747:34;;;;3812:2;3797:18;;3790:34;3855:3;3840:19;;3833:35;3657:3;3642:19;15347:22:0;3411:463:1;25227:322:0;;;;;;;;;;-1:-1:-1;25227:322:0;;;;;:::i;:::-;;:::i;20956:85::-;;;;;;;;;;-1:-1:-1;20956:85:0;;15710:1;4206:36:1;;4194:2;4179:18;20956:85:0;4064:184:1;25946:601:0;;;;;;;;;;-1:-1:-1;25946:601:0;;;;;:::i;:::-;;:::i;23211:302::-;;;;;;;;;;-1:-1:-1;23211:302:0;;;;;:::i;:::-;;:::i;15720:26::-;;;;;;;;;;;;;;;;24260:470;;;;;;;;;;-1:-1:-1;24260:470:0;;;;;:::i;:::-;;:::i;46103:322::-;;;;;;;;;;-1:-1:-1;46103:322:0;;;;;:::i;:::-;;:::i;46703:255::-;;;;;;;;;;-1:-1:-1;46703:255:0;;;;;:::i;:::-;;:::i;24738:481::-;;;;;;;;;;-1:-1:-1;24738:481:0;;;;;:::i;:::-;;:::i;15320:20::-;;;;;;;;;;-1:-1:-1;15320:20:0;;;;;;;;;;;;;;;;;;47377:336;;;;;;;;;;-1:-1:-1;47377:336:0;;;;;:::i;:::-;;:::i;44961:644::-;;;;;;;;;;-1:-1:-1;44961:644:0;;;;;:::i;:::-;;:::i;16299:40::-;;;;;;;;;;-1:-1:-1;16299:40:0;;;;-1:-1:-1;;;16299:40:0;;;;;;25557:381;;;;;;;;;;-1:-1:-1;25557:381:0;;;;;:::i;:::-;;:::i;33406:126::-;;;;;;;;;;-1:-1:-1;33406:126:0;;;;;:::i;:::-;-1:-1:-1;;;;;33497:27:0;33473:4;33497:27;;;:18;:27;;;;;;;;;33406:126;16017:25;;;;;;;;;;-1:-1:-1;16017:25:0;;;;-1:-1:-1;;;;;16017:25:0;;;44368:301;;;;;;;;;;-1:-1:-1;44368:301:0;;;;;:::i;:::-;;:::i;15753:32::-;;;;;;;;;;;;;;;;21853:198;;;;;;;;;;-1:-1:-1;21853:198:0;;;;;:::i;:::-;;:::i;9817:103::-;;;;;;;;;;;;;:::i;15901:30::-;;;;;;;;;;-1:-1:-1;15901:30:0;;;;-1:-1:-1;;;;;15901:30:0;;;50484:542;;;;;;;;;;-1:-1:-1;50484:542:0;;;;;:::i;:::-;;:::i;23958:154::-;;;;;;;;;;-1:-1:-1;23958:154:0;;;;;:::i;:::-;-1:-1:-1;;;;;24084:20:0;24055:4;24084:20;;;:11;:20;;;;;;;;;23958:154;9169:87;;;;;;;;;;-1:-1:-1;9215:7:0;9242:6;-1:-1:-1;;;;;9242:6:0;9169:87;;49420:250;;;;;;;;;;-1:-1:-1;49420:250:0;;;;;:::i;:::-;;:::i;21224:145::-;;;;;;;;;;;;;:::i;20859:89::-;;;;;;;;;;-1:-1:-1;20933:7:0;;;;;;;;;;;;-1:-1:-1;;;20933:7:0;;;;20859:89;;20429:329;;;;;;;;;;-1:-1:-1;20429:329:0;;;;;:::i;:::-;;:::i;15865:27::-;;;;;;;;;;;;;;;;23521:429;;;;;;;;;;-1:-1:-1;23521:429:0;;;;;:::i;:::-;;:::i;22059:264::-;;;;;;;;;;-1:-1:-1;22059:264:0;;;;;:::i;:::-;;:::i;16107:26::-;;;;;;;;;;-1:-1:-1;16107:26:0;;;;-1:-1:-1;;;;;16107:26:0;;;44006:354;;;;;;;;;;-1:-1:-1;44006:354:0;;;;;:::i;:::-;;:::i;14804:57::-;;;;;;;;;;-1:-1:-1;14804:57:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;32855:225;;;;;;;;;;-1:-1:-1;32855:225:0;;;;;:::i;:::-;;:::i;15792:27::-;;;;;;;;;;;;;;;;45613:482;;;;;;;;;;-1:-1:-1;45613:482:0;;;;;:::i;:::-;;:::i;46433:262::-;;;;;;;;;;-1:-1:-1;46433:262:0;;;;;:::i;:::-;;:::i;16383:59::-;;;;;;;;;;;;;;;;15980:30;;;;;;;;;;-1:-1:-1;15980:30:0;;;;-1:-1:-1;;;;;15980:30:0;;;22331:186;;;;;;;;;;-1:-1:-1;22331:186:0;;;;;:::i;:::-;-1:-1:-1;;;;;22482:18:0;;;22450:7;22482:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;22331:186;46966:403;;;;;;;;;;-1:-1:-1;46966:403:0;;;;;:::i;:::-;;:::i;16192:21::-;;;;;;;;;;-1:-1:-1;16192:21:0;;;;-1:-1:-1;;;;;16192:21:0;;;33088:310;;;;;;;;;;-1:-1:-1;33088:310:0;;;;;:::i;:::-;;:::i;10075:201::-;;;;;;;;;;-1:-1:-1;10075:201:0;;;;;:::i;:::-;;:::i;48482:801::-;;;;;;;;;;-1:-1:-1;48482:801:0;;;;;:::i;:::-;;:::i;47885:499::-;9055:13;:11;:13::i;:::-;-1:-1:-1;;;;;48029:28:0;::::1;48021:62;;;::::0;-1:-1:-1;;;48021:62:0;;6737:2:1;48021:62:0::1;::::0;::::1;6719:21:1::0;6776:2;6756:18;;;6749:30;-1:-1:-1;;;6795:18:1;;;6788:51;6856:18;;48021:62:0::1;;;;;;;;;-1:-1:-1::0;;;;;48102:23:0;::::1;48094:61;;;::::0;-1:-1:-1;;;48094:61:0;;7087:2:1;48094:61:0::1;::::0;::::1;7069:21:1::0;7126:2;7106:18;;;7099:30;7165:27;7145:18;;;7138:55;7210:18;;48094:61:0::1;6885:349:1::0;48094:61:0::1;48184:30;::::0;-1:-1:-1;;;48184:30:0;;48208:4:::1;48184:30;::::0;::::1;1074:51:1::0;-1:-1:-1;;;;;48184:15:0;::::1;::::0;::::1;::::0;1047:18:1;;48184:30:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;48174:6;:40;;48166:71;;;;-1:-1:-1::0;;;48166:71:0::1;;;;;;;:::i;:::-;48256:33;::::0;-1:-1:-1;;;48256:33:0;;-1:-1:-1;;;;;206:32:1;;;48256:33:0::1;::::0;::::1;188:51:1::0;255:18;;;248:34;;;48256:14:0;::::1;::::0;::::1;::::0;161:18:1;;48256:33:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;48248:59;;;::::0;-1:-1:-1;;;48248:59:0;;8227:2:1;48248:59:0::1;::::0;::::1;8209:21:1::0;8266:2;8246:18;;;8239:30;-1:-1:-1;;;8285:18:1;;;8278:43;8338:18;;48248:59:0::1;8025:337:1::0;48248:59:0::1;48358:9;-1:-1:-1::0;;;;;48325:51:0::1;48350:5;-1:-1:-1::0;;;;;48325:51:0::1;;48369:6;48325:51;;;;2404:25:1::0;;2392:2;2377:18;;2258:177;48325:51:0::1;;;;;;;;47885:499:::0;;;:::o;22525:195::-;22629:4;22651:39;7800:10;22674:7;22683:6;22651:8;:39::i;:::-;-1:-1:-1;22708:4:0;22525:195;;;;;:::o;44677:276::-;9055:13;:11;:13::i;:::-;-1:-1:-1;;;;;44757:23:0;::::1;44749:48;;;;-1:-1:-1::0;;;44749:48:0::1;;;;;;;:::i;:::-;44829:10;::::0;-1:-1:-1;;;;;44829:10:0;;::::1;44816:23:::0;;::::1;::::0;44808:48:::1;;;;-1:-1:-1::0;;;44808:48:0::1;;;;;;;:::i;:::-;44867:10;:22:::0;;-1:-1:-1;;;;;;44867:22:0::1;-1:-1:-1::0;;;;;44867:22:0;::::1;::::0;;::::1;::::0;;;44905:40:::1;::::0;1074:51:1;;;44922:10:0::1;::::0;44905:40:::1;::::0;1062:2:1;1047:18;44905:40:0::1;;;;;;;;44677:276:::0;:::o;22728:475::-;22862:4;22879:36;22889:6;22897:9;22908:6;22879:9;:36::i;:::-;22926:247;22949:6;7800:10;-1:-1:-1;;;;;23028:19:0;;;;;;:11;:19;;;;;22997:165;;7800:10;-1:-1:-1;;;;;23028:33:0;-1:-1:-1;;;;;23028:33:0;;;;;;;;;;;;;23080:6;22997:165;;;;;;;;;;;;;;;;;:12;:165::i;:::-;22926:8;:247::i;:::-;-1:-1:-1;23191:4:0;22728:475;;;;;:::o;49736:639::-;49346:6;;-1:-1:-1;;;;;49346:6:0;49332:10;:20;49324:68;;;;-1:-1:-1;;;49324:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;49823:21:0;::::1;49815:46;;;::::0;-1:-1:-1;;;49815:46:0;;9655:2:1;49815:46:0::1;::::0;::::1;9637:21:1::0;9694:2;9674:18;;;9667:30;-1:-1:-1;;;9713:18:1;;;9706:42;9765:18;;49815:46:0::1;9453:336:1::0;49815:46:0::1;49890:1;49880:7;:11;49872:61;;;::::0;-1:-1:-1;;;49872:61:0;;9996:2:1;49872:61:0::1;::::0;::::1;9978:21:1::0;10035:2;10015:18;;;10008:30;10074:34;10054:18;;;10047:62;-1:-1:-1;;;10125:18:1;;;10118:35;10170:19;;49872:61:0::1;9794:401:1::0;49872:61:0::1;49963:18;49973:7;49963:9;:18::i;:::-;49952:7;:29;;49944:60;;;;-1:-1:-1::0;;;49944:60:0::1;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;50023:20:0;::::1;;::::0;;;:11:::1;:20;::::0;;;;;;;7800:10;50023:34;;;;;;;;:45;-1:-1:-1;50023:45:0::1;50015:98;;;::::0;-1:-1:-1;;;50015:98:0;;10402:2:1;50015:98:0::1;::::0;::::1;10384:21:1::0;10441:2;10421:18;;;10414:30;10480:34;10460:18;;;10453:62;-1:-1:-1;;;10531:18:1;;;10524:38;10579:19;;50015:98:0::1;10200:404:1::0;50015:98:0::1;-1:-1:-1::0;;;;;50131:20:0;::::1;;::::0;;;:11:::1;:20;::::0;;;;;::::1;;50126:189;;50197:11;::::0;50168:50:::1;::::0;50188:7;;-1:-1:-1;;;;;50197:11:0::1;50210:7:::0;50168:19:::1;:50::i;:::-;50126:189;;;50282:11;::::0;50251:52:::1;::::0;50273:7;;-1:-1:-1;;;;;50282:11:0::1;50295:7:::0;50251:21:::1;:52::i;:::-;50350:7;-1:-1:-1::0;;;;;50334:33:0::1;;50359:7;50334:33;;;;2404:25:1::0;;2392:2;2377:18;;2258:177;50334:33:0::1;;;;;;;;49736:639:::0;;:::o;25227:322::-;25321:7;25379;;25368;:18;;25346:110;;;;-1:-1:-1;;;25346:110:0;;10811:2:1;25346:110:0;;;10793:21:1;10850:2;10830:18;;;10823:30;10889:34;10869:18;;;10862:62;-1:-1:-1;;;10940:18:1;;;10933:40;10990:19;;25346:110:0;10609:406:1;25346:110:0;25467:19;25489:10;:8;:10::i;:::-;25467:32;-1:-1:-1;25517:24:0;:7;25467:32;25517:11;:24::i;:::-;25510:31;25227:322;-1:-1:-1;;;25227:322:0:o;25946:601::-;9055:13;:11;:13::i;:::-;26037:11:::1;::::0;-1:-1:-1;;;;;26037:11:0;;::::1;26026:22:::0;;::::1;::::0;26018:68:::1;;;::::0;-1:-1:-1;;;26018:68:0;;11222:2:1;26018:68:0::1;::::0;::::1;11204:21:1::0;11261:2;11241:18;;;11234:30;11300:34;11280:18;;;11273:62;-1:-1:-1;;;11351:18:1;;;11344:31;11392:19;;26018:68:0::1;11020:397:1::0;26018:68:0::1;-1:-1:-1::0;;;;;26105:20:0;::::1;;::::0;;;:11:::1;:20;::::0;;;;;::::1;;26097:60;;;::::0;-1:-1:-1;;;26097:60:0;;11624:2:1;26097:60:0::1;::::0;::::1;11606:21:1::0;11663:2;11643:18;;;11636:30;11702:29;11682:18;;;11675:57;11749:18;;26097:60:0::1;11422:351:1::0;26097:60:0::1;26173:9;26168:327;26192:9;:16:::0;26188:20;::::1;26168:327;;;26250:7;-1:-1:-1::0;;;;;26234:23:0::1;:9;26244:1;26234:12;;;;;;;;:::i;:::-;;::::0;;;::::1;::::0;;;::::1;::::0;-1:-1:-1;;;;;26234:12:0::1;:23:::0;26230:254:::1;;26293:9;26303:16:::0;;:20:::1;::::0;26322:1:::1;::::0;26303:20:::1;:::i;:::-;26293:31;;;;;;;;:::i;:::-;;::::0;;;::::1;::::0;;;::::1;::::0;26278:9:::1;:12:::0;;-1:-1:-1;;;;;26293:31:0;;::::1;::::0;26288:1;;26278:12;::::1;;;;;:::i;:::-;;::::0;;;::::1;::::0;;;;;;::::1;:46:::0;;-1:-1:-1;;;;;;26278:46:0::1;-1:-1:-1::0;;;;;26278:46:0;;::::1;;::::0;;26343:16;;::::1;::::0;;:7:::1;:16:::0;;;;;;:20;;;26382:11:::1;:20:::0;;;;:28;;-1:-1:-1;;26382:28:0::1;::::0;;26429:9:::1;:15:::0;;;::::1;;;;:::i;:::-;;::::0;;;::::1;::::0;;;;-1:-1:-1;;26429:15:0;;;;;-1:-1:-1;;;;;;26429:15:0::1;::::0;;;;;26463:5:::1;;26230:254;26210:3:::0;::::1;::::0;::::1;:::i;:::-;;;;26168:327;;;-1:-1:-1::0;26512:27:0::1;::::0;-1:-1:-1;;;;;26512:27:0;::::1;::::0;::::1;::::0;;;::::1;25946:601:::0;:::o;23211:302::-;7800:10;23328:4;23422:25;;;:11;:25;;;;;;;;-1:-1:-1;;;;;23422:34:0;;;;;;;;;;23328:4;;23350:133;;23400:7;;23422:50;;23461:10;23422:38;:50::i;24260:470::-;7800:10;24314:14;24377:19;;;:11;:19;;;;;;;;24376:20;24354:114;;;;-1:-1:-1;;;24354:114:0;;12646:2:1;24354:114:0;;;12628:21:1;12685:2;12665:18;;;12658:30;12724:34;12704:18;;;12697:62;-1:-1:-1;;;12775:18:1;;;12768:42;12827:19;;24354:114:0;12444:408:1;24354:114:0;24480:15;24509:19;24520:7;24509:10;:19::i;:::-;-1:-1:-1;;;;;;;;;24557:15:0;;;;;;:7;:15;;;;;;24479:49;;-1:-1:-1;24557:28:0;;:15;-1:-1:-1;24479:49:0;24557:19;:28::i;:::-;-1:-1:-1;;;;;24539:15:0;;;;;;:7;:15;;;;;:46;24606:7;;:20;;24618:7;24606:11;:20::i;:::-;24596:7;:30;24650:10;;:23;;24665:7;24650:14;:23::i;:::-;24637:10;:36;24691:31;;2404:25:1;;;24702:10:0;;24691:31;;2392:2:1;2377:18;24691:31:0;;;;;;;24303:427;;24260:470;:::o;46103:322::-;9055:13;:11;:13::i;:::-;-1:-1:-1;;;;;46186:23:0;::::1;46178:48;;;;-1:-1:-1::0;;;46178:48:0::1;;;;;;;:::i;:::-;46266:15;::::0;-1:-1:-1;;;;;46266:15:0;;::::1;46245:37:::0;;::::1;::::0;46237:62:::1;;;;-1:-1:-1::0;;;46237:62:0::1;;;;;;;:::i;:::-;46310:15;:47:::0;;-1:-1:-1;;;;;;46310:47:0::1;-1:-1:-1::0;;;;;46310:47:0;::::1;::::0;;::::1;::::0;;;46375:42:::1;::::0;1074:51:1;;;46395:10:0::1;::::0;46375:42:::1;::::0;1062:2:1;1047:18;46375:42:0::1;928:203:1::0;46703:255:0;9055:13;:11;:13::i;:::-;46796:29:::1;;46786:6;:39:::0;46778:63:::1;;;::::0;-1:-1:-1;;;46778:63:0;;13059:2:1;46778:63:0::1;::::0;::::1;13041:21:1::0;13098:2;13078:18;;;13071:30;-1:-1:-1;;;13117:18:1;;;13110:41;13168:18;;46778:63:0::1;12857:335:1::0;46778:63:0::1;46852:29;:38:::0;;;46908:42:::1;::::0;2404:25:1;;;46931:10:0::1;::::0;46908:42:::1;::::0;2392:2:1;2377:18;46908:42:0::1;2258:177:1::0;24738:481:0;24858:7;15462:13;24891:7;:18;;24883:62;;;;-1:-1:-1;;;24883:62:0;;13399:2:1;24883:62:0;;;13381:21:1;13438:2;13418:18;;;13411:30;13477:33;13457:18;;;13450:61;13528:18;;24883:62:0;13197:355:1;24883:62:0;24961:17;24956:256;;24996:15;25025:19;25036:7;25025:10;:19::i;:::-;-1:-1:-1;24995:49:0;;-1:-1:-1;25059:14:0;;-1:-1:-1;;;;;25059:14:0;24956:256;25109:23;25144:19;25155:7;25144:10;:19::i;:::-;-1:-1:-1;25106:57:0;;-1:-1:-1;25178:22:0;;-1:-1:-1;;;;;25178:22:0;47377:336;9055:13;:11;:13::i;:::-;-1:-1:-1;;;;;47502:23:0;::::1;47494:48;;;;-1:-1:-1::0;;;47494:48:0::1;;;;;;;:::i;:::-;47580:4;47571:23;47561:33:::0;::::1;;47553:64;;;;-1:-1:-1::0;;;47553:64:0::1;;;;;;;:::i;:::-;47628:26;::::0;-1:-1:-1;;;;;47628:18:0;::::1;::::0;:26;::::1;;;::::0;47647:6;;47628:26:::1;::::0;;;47647:6;47628:18;:26;::::1;;;;;;;;;;;;;::::0;::::1;;;;;;47687:9;-1:-1:-1::0;;;;;47670:35:0::1;;47698:6;47670:35;;;;2404:25:1::0;;2392:2;2377:18;;2258:177;44961:644:0;9055:13;:11;:13::i;:::-;45191:2:::1;45182:5:::0;45175:4;45167:5;45148:16:::1;45154:10:::0;45148:3;:16:::1;:::i;:::-;:24;;;;:::i;:::-;:31;;;;:::i;:::-;:39;;;;:::i;:::-;:45;;45140:78;;;::::0;-1:-1:-1;;;45140:78:0;;13892:2:1;45140:78:0::1;::::0;::::1;13874:21:1::0;13931:2;13911:18;;;13904:30;-1:-1:-1;;;13950:18:1;;;13943:50;14010:18;;45140:78:0::1;13690:344:1::0;45140:78:0::1;45239:6;:13:::0;:20;::::1;:54:::0;::::1;;;-1:-1:-1::0;45263:16:0;;:30;::::1;45239:54;:78;;;;-1:-1:-1::0;45297:11:0;;:20;::::1;45239:78;:100;;;;-1:-1:-1::0;45321:10:0;;:18;::::1;45239:100;:125;;;;-1:-1:-1::0;45344:11:0;;:20;::::1;45239:125;45237:128;45229:159;;;::::0;-1:-1:-1;;;45229:159:0;;14241:2:1;45229:159:0::1;::::0;::::1;14223:21:1::0;14280:2;14260:18;;;14253:30;-1:-1:-1;;;14299:18:1;;;14292:48;14357:18;;45229:159:0::1;14039:342:1::0;45229:159:0::1;45399:6;:19:::0;;;45429:16;:29;;;45469:11;:19;;;45499:10;:17;;;45527:11;:19;;;45564:33:::1;::::0;45578:10:::1;::::0;45564:33:::1;::::0;::::1;::::0;45399:6;45564:33:::1;:::i;:::-;;;;;;;;44961:644:::0;;;;;:::o;25557:381::-;9055:13;:11;:13::i;:::-;-1:-1:-1;;;;;25640:20:0;::::1;;::::0;;;:11:::1;:20;::::0;;;;;::::1;;25639:21;25631:61;;;::::0;-1:-1:-1;;;25631:61:0;;15168:2:1;25631:61:0::1;::::0;::::1;15150:21:1::0;15207:2;15187:18;;;15180:30;15246:29;15226:18;;;15219:57;15293:18;;25631:61:0::1;14966:351:1::0;25631:61:0::1;-1:-1:-1::0;;;;;25707:16:0;::::1;25726:1;25707:16:::0;;;:7:::1;:16;::::0;;;;;:20;25703:109:::1;;-1:-1:-1::0;;;;;25783:16:0;::::1;;::::0;;;:7:::1;:16;::::0;;;;;25763:37:::1;::::0;:19:::1;:37::i;:::-;-1:-1:-1::0;;;;;25744:16:0;::::1;;::::0;;;:7:::1;:16;::::0;;;;:56;25703:109:::1;-1:-1:-1::0;;;;;25822:20:0;::::1;;::::0;;;:11:::1;:20;::::0;;;;;:27;;-1:-1:-1;;25822:27:0::1;25845:4;25822:27:::0;;::::1;::::0;;;25860:9:::1;:23:::0;;;;::::1;::::0;;;;;::::1;::::0;;-1:-1:-1;;;;;;25860:23:0::1;::::0;::::1;::::0;;25901:29;::::1;::::0;25822:20;25901:29:::1;25557:381:::0;:::o;44368:301::-;9055:13;:11;:13::i;:::-;-1:-1:-1;;;;;44453:23:0;::::1;44445:48;;;;-1:-1:-1::0;;;44445:48:0::1;;;;;;;:::i;:::-;44525:15;::::0;-1:-1:-1;;;;;44525:15:0;;::::1;44512:28:::0;;::::1;::::0;44504:53:::1;;;;-1:-1:-1::0;;;44504:53:0::1;;;;;;;:::i;:::-;44568:15;:27:::0;;-1:-1:-1;;;;;;44568:27:0::1;-1:-1:-1::0;;;;;44568:27:0;::::1;::::0;;::::1;::::0;;;44611:50:::1;::::0;1074:51:1;;;44633:10:0::1;::::0;44611:50:::1;::::0;1062:2:1;1047:18;44611:50:0::1;928:203:1::0;21853:198:0;-1:-1:-1;;;;;21943:20:0;;21919:7;21943:20;;;:11;:20;;;;;;;;21939:49;;;-1:-1:-1;;;;;;21972:16:0;;;;;:7;:16;;;;;;;21853:198::o;21939:49::-;-1:-1:-1;;;;;22026:16:0;;;;;;:7;:16;;;;;;22006:37;;:19;:37::i;9817:103::-;9055:13;:11;:13::i;:::-;9882:30:::1;9909:1;9882:18;:30::i;:::-;9817:103::o:0;50484:542::-;49346:6;;-1:-1:-1;;;;;49346:6:0;49332:10;:20;49324:68;;;;-1:-1:-1;;;49324:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;50573:21:0;::::1;50565:46;;;::::0;-1:-1:-1;;;50565:46:0;;9655:2:1;50565:46:0::1;::::0;::::1;9637:21:1::0;9694:2;9674:18;;;9667:30;-1:-1:-1;;;9713:18:1;;;9706:42;9765:18;;50565:46:0::1;9453:336:1::0;50565:46:0::1;50640:1;50630:7;:11;50622:63;;;::::0;-1:-1:-1;;;50622:63:0;;15524:2:1;50622:63:0::1;::::0;::::1;15506:21:1::0;15563:2;15543:18;;;15536:30;15602:34;15582:18;;;15575:62;-1:-1:-1;;;15653:18:1;;;15646:37;15700:19;;50622:63:0::1;15322:403:1::0;50622:63:0::1;50725:11;::::0;50715:22:::1;::::0;-1:-1:-1;;;;;50725:11:0::1;50715:9;:22::i;:::-;50704:7;:33;;50696:64;;;;-1:-1:-1::0;;;50696:64:0::1;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;50780:20:0;::::1;;::::0;;;:11:::1;:20;::::0;;;;;::::1;;50775:191;;50839:11;::::0;50817:52:::1;::::0;-1:-1:-1;;;;;50839:11:0::1;50852:7:::0;50861;50817:21:::1;:52::i;:::-;50775:191;;;50924:11;::::0;50902:52:::1;::::0;-1:-1:-1;;;;;50924:11:0::1;50937:7:::0;50946;50902:21:::1;:52::i;:::-;51001:7;-1:-1:-1::0;;;;;50983:35:0::1;;51010:7;50983:35;;;;2404:25:1::0;;2392:2;2377:18;;2258:177;49420:250:0;9055:13;:11;:13::i;:::-;-1:-1:-1;;;;;49494:21:0;::::1;49486:46;;;;-1:-1:-1::0;;;49486:46:0::1;;;;;;;:::i;:::-;49551:6;::::0;-1:-1:-1;;;;;49551:17:0;;::::1;:6:::0;::::1;:17:::0;49543:42:::1;;;::::0;-1:-1:-1;;;49543:42:0;;15932:2:1;49543:42:0::1;::::0;::::1;15914:21:1::0;15971:2;15951:18;;;15944:30;-1:-1:-1;;;15990:18:1;;;15983:42;16042:18;;49543:42:0::1;15730:336:1::0;49543:42:0::1;49596:6;:16:::0;;-1:-1:-1;;;;;;49596:16:0::1;-1:-1:-1::0;;;;;49596:16:0;::::1;::::0;;::::1;::::0;;;49630:32:::1;::::0;1074:51:1;;;49643:10:0::1;::::0;49630:32:::1;::::0;1062:2:1;1047:18;49630:32:0::1;928:203:1::0;21224:145:0;-1:-1:-1;;;;;21349:10:0;21341:19;;21276:7;21341:19;;;:7;:19;;;;;;;21323:11;;;;;21315:20;;;;;21276:7;;21303:58;;:33;;15462:13;;21303:11;:33::i;:::-;:37;;:58::i;:::-;21296:65;;21224:145;:::o;20429:329::-;9055:13;:11;:13::i;:::-;-1:-1:-1;;;;;20556:31:0;::::1;;::::0;;;:25:::1;:31;::::0;;;;;:42;::::1;;:31;::::0;;::::1;:42;;::::0;20548:75:::1;;;::::0;-1:-1:-1;;;20548:75:0;;16273:2:1;20548:75:0::1;::::0;::::1;16255:21:1::0;16312:2;16292:18;;;16285:30;-1:-1:-1;;;16331:18:1;;;16324:50;16391:18;;20548:75:0::1;16071:344:1::0;20548:75:0::1;-1:-1:-1::0;;;;;20634:31:0;::::1;;::::0;;;:25:::1;:31;::::0;;;;;;;;:41;;-1:-1:-1;;20634:41:0::1;::::0;::::1;;::::0;;::::1;::::0;;;20693:57;;16588:51:1;;;16655:18;;;16648:50;20724:10:0::1;::::0;20693:57:::1;::::0;16561:18:1;20693:57:0::1;16420:284:1::0;23521:429:0;7800:10;23643:4;23768:25;;;:11;:25;;;;;;;;-1:-1:-1;;;;;23768:34:0;;;;;;;;;;23737:172;;;;;;;;;;;;23643:4;;23665:255;;7800:10;;23715:7;;23737:172;;23768:34;23821:15;;23737:172;;;;;:12;:172::i;22059:264::-;22167:4;22191:42;7800:10;22215:9;22226:6;22191:9;:42::i;:::-;22249:44;;;7800:10;16949:34:1;;-1:-1:-1;;;;;17019:15:1;;17014:2;16999:18;;16992:43;17051:18;;;17044:34;;;22249:44:0;;;;;;;16899:2:1;22249:44:0;;;-1:-1:-1;22311:4:0;22059:264;;;;:::o;44006:354::-;9055:13;:11;:13::i;:::-;-1:-1:-1;;;;;44125:21:0;::::1;44117:45;;;;-1:-1:-1::0;;;44117:45:0::1;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;44181:27:0;::::1;;::::0;;;:18:::1;:27;::::0;;;;;:38;::::1;;:27;::::0;;::::1;:38;;::::0;44173:65:::1;;;::::0;-1:-1:-1;;;44173:65:0;;17291:2:1;44173:65:0::1;::::0;::::1;17273:21:1::0;17330:2;17310:18;;;17303:30;-1:-1:-1;;;17349:18:1;;;17342:45;17404:18;;44173:65:0::1;17089:339:1::0;44173:65:0::1;-1:-1:-1::0;;;;;44249:27:0;::::1;;::::0;;;:18:::1;:27;::::0;;;;;;;;:37;;-1:-1:-1;;44249:37:0::1;::::0;::::1;;::::0;;::::1;::::0;;;44302:50;;16588:51:1;;;16655:18;;;16648:50;44323:10:0::1;::::0;44302:50:::1;::::0;16561:18:1;44302:50:0::1;16420:284:1::0;32855:225:0;9055:13;:11;:13::i;:::-;32952:6:::1;32932:26;;:16;;;;;;;;;;;:26;;::::0;32924:57:::1;;;::::0;-1:-1:-1;;;32924:57:0;;17635:2:1;32924:57:0::1;::::0;::::1;17617:21:1::0;17674:2;17654:18;;;17647:30;-1:-1:-1;;;17693:18:1;;;17686:48;17751:18;;32924:57:0::1;17433:342:1::0;32924:57:0::1;32992:16;:25:::0;;-1:-1:-1;;;;32992:25:0::1;-1:-1:-1::0;;;32992:25:0;::::1;;::::0;::::1;::::0;;;::::1;::::0;;;;33035:37:::1;::::0;32992:25:::1;33055:16:::0;;;::::1;;1301:14:1::0;1294:22;1276:41;;33035:37:0::1;::::0;1264:2:1;1249:18;33035:37:0::1;;;;;;;;32855:225:::0;:::o;45613:482::-;9055:13;:11;:13::i;:::-;45844:2:::1;45835:5:::0;45828:4;45820:5;45801:16:::1;45807:10:::0;45801:3;:16:::1;:::i;:::-;:24;;;;:::i;:::-;:31;;;;:::i;:::-;:39;;;;:::i;:::-;:45;;45793:78;;;::::0;-1:-1:-1;;;45793:78:0;;13892:2:1;45793:78:0::1;::::0;::::1;13874:21:1::0;13931:2;13911:18;;;13904:30;-1:-1:-1;;;13950:18:1;;;13943:50;14010:18;;45793:78:0::1;13690:344:1::0;45793:78:0::1;45882:7;:20:::0;;;45913:17;:30;;;45954:12;:20;;;45985:11;:18;;;46014:12;:20;;;46052:35:::1;::::0;46067:10:::1;::::0;46052:35:::1;::::0;::::1;::::0;45882:7;46052:35:::1;:::i;46433:262::-:0;9055:13;:11;:13::i;:::-;46532:21:::1;::::0;-1:-1:-1;;;46532:21:0;::::1;;;46520:33;;::::0;::::1;;::::0;46512:61:::1;;;::::0;-1:-1:-1;;;46512:61:0;;17291:2:1;46512:61:0::1;::::0;::::1;17273:21:1::0;17330:2;17310:18;;;17303:30;-1:-1:-1;;;17349:18:1;;;17342:45;17404:18;;46512:61:0::1;17089:339:1::0;46512:61:0::1;46584:21;:32:::0;;;::::1;;-1:-1:-1::0;;;46584:32:0::1;-1:-1:-1::0;;;;46584:32:0;;::::1;;::::0;;46634:53:::1;::::0;46666:10:::1;::::0;46634:53:::1;::::0;::::1;::::0;46608:8;1301:14:1;1294:22;1276:41;;1264:2;1249:18;;1136:187;46966:403:0;9055:13;:11;:13::i;:::-;-1:-1:-1;;;;;47086:32:0;::::1;47078:57;;;;-1:-1:-1::0;;;47078:57:0::1;;;;;;;:::i;:::-;47176:15;::::0;-1:-1:-1;;;;;47176:15:0;;::::1;47154:37:::0;;::::1;::::0;47146:94:::1;;;::::0;-1:-1:-1;;;47146:94:0;;18236:2:1;47146:94:0::1;::::0;::::1;18218:21:1::0;18275:2;18255:18;;;18248:30;18314:34;18294:18;;;18287:62;-1:-1:-1;;;18365:18:1;;;18358:42;18417:19;;47146:94:0::1;18034:408:1::0;47146:94:0::1;47251:15;:36:::0;;-1:-1:-1;;;;;;47251:36:0::1;-1:-1:-1::0;;;;;47251:36:0;::::1;::::0;;::::1;::::0;;;47305:56:::1;::::0;1074:51:1;;;47330:10:0::1;::::0;47305:56:::1;::::0;1062:2:1;1047:18;47305:56:0::1;928:203:1::0;33088:310:0;9055:13;:11;:13::i;:::-;-1:-1:-1;;;;;33173:26:0;::::1;33165:54;;;::::0;-1:-1:-1;;;33165:54:0;;18649:2:1;33165:54:0::1;::::0;::::1;18631:21:1::0;18688:2;18668:18;;;18661:30;-1:-1:-1;;;18707:18:1;;;18700:45;18762:18;;33165:54:0::1;18447:339:1::0;33165:54:0::1;33238:11;::::0;-1:-1:-1;;;;;33238:27:0;;::::1;:11:::0;::::1;:27:::0;33230:65:::1;;;::::0;-1:-1:-1;;;33230:65:0;;18993:2:1;33230:65:0::1;::::0;::::1;18975:21:1::0;19032:2;19012:18;;;19005:30;19071:27;19051:18;;;19044:55;19116:18;;33230:65:0::1;18791:349:1::0;33230:65:0::1;33306:11;:26:::0;;-1:-1:-1;;;;;;33306:26:0::1;-1:-1:-1::0;;;;;33306:26:0;::::1;::::0;;::::1;::::0;;;33348:42:::1;::::0;;33366:10:::1;19357:34:1::0;;19422:2;19407:18;;19400:43;;;;33348:42:0::1;::::0;19292:18:1;33348:42:0::1;19145:304:1::0;10075:201:0;9055:13;:11;:13::i;:::-;-1:-1:-1;;;;;10164:22:0;::::1;10156:73;;;::::0;-1:-1:-1;;;10156:73:0;;19656:2:1;10156:73:0::1;::::0;::::1;19638:21:1::0;19695:2;19675:18;;;19668:30;19734:34;19714:18;;;19707:62;-1:-1:-1;;;19785:18:1;;;19778:36;19831:19;;10156:73:0::1;19454:402:1::0;10156:73:0::1;10240:28;10259:8;10240:18;:28::i;:::-;10075:201:::0;:::o;48482:801::-;9055:13;:11;:13::i;:::-;-1:-1:-1;;;;;48574:23:0;::::1;48566:48;;;;-1:-1:-1::0;;;48566:48:0::1;;;;;;;:::i;:::-;48643:1;48633:7;:11;48625:67;;;::::0;-1:-1:-1;;;48625:67:0;;20063:2:1;48625:67:0::1;::::0;::::1;20045:21:1::0;20102:2;20082:18;;;20075:30;20141:34;20121:18;;;20114:62;-1:-1:-1;;;20192:18:1;;;20185:41;20243:19;;48625:67:0::1;19861:407:1::0;48625:67:0::1;48729:4;48709:26;::::0;;;:11:::1;:26;::::0;;;;;::::1;;:53:::0;::::1;;;-1:-1:-1::0;;;;;;48740:22:0;::::1;;::::0;;;:11:::1;:22;::::0;;;;;::::1;;48739:23;48709:53;48705:520;;;48779:56;48809:4;48816:9;48827:7;48779:21;:56::i;:::-;48705:520;;;48878:4;48858:26;::::0;;;:11:::1;:26;::::0;;;;;::::1;;48857:27;:53:::0;::::1;;;-1:-1:-1::0;;;;;;48888:22:0;::::1;;::::0;;;:11:::1;:22;::::0;;;;;::::1;;48857:53;48853:372;;;48927:54;48955:4;48962:9;48973:7;48927:19;:54::i;48853:372::-;49023:4;49003:26;::::0;;;:11:::1;:26;::::0;;;;;::::1;;:52:::0;::::1;;;-1:-1:-1::0;;;;;;49033:22:0;::::1;;::::0;;;:11:::1;:22;::::0;;;;;::::1;;49003:52;48999:226;;;49072:56;49102:4;49109:9;49120:7;49072:21;:56::i;48999:226::-;49161:52;49187:4;49194:9;49205:7;49161:17;:52::i;:::-;49256:9;-1:-1:-1::0;;;;;49242:33:0::1;;49267:7;49242:33;;;;2404:25:1::0;;2392:2;2377:18;;2258:177;9334:132:0;9215:7;9242:6;-1:-1:-1;;;;;9242:6:0;7800:10;9398:23;9390:68;;;;-1:-1:-1;;;9390:68:0;;20475:2:1;9390:68:0;;;20457:21:1;;;20494:18;;;20487:30;20553:34;20533:18;;;20526:62;20605:18;;9390:68:0;20273:356:1;33540:379:0;-1:-1:-1;;;;;33667:19:0;;33659:68;;;;-1:-1:-1;;;33659:68:0;;20836:2:1;33659:68:0;;;20818:21:1;20875:2;20855:18;;;20848:30;20914:34;20894:18;;;20887:62;-1:-1:-1;;;20965:18:1;;;20958:34;21009:19;;33659:68:0;20634:400:1;33659:68:0;-1:-1:-1;;;;;33746:21:0;;33738:68;;;;-1:-1:-1;;;33738:68:0;;21241:2:1;33738:68:0;;;21223:21:1;21280:2;21260:18;;;21253:30;21319:34;21299:18;;;21292:62;-1:-1:-1;;;21370:18:1;;;21363:32;21412:19;;33738:68:0;21039:398:1;33738:68:0;-1:-1:-1;;;;;33827:18:0;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;:36;;;33879:32;;2404:25:1;;;33879:32:0;;2377:18:1;33879:32:0;2258:177:1;33927:1016:0;-1:-1:-1;;;;;34049:18:0;;34041:68;;;;-1:-1:-1;;;34041:68:0;;21644:2:1;34041:68:0;;;21626:21:1;21683:2;21663:18;;;21656:30;21722:34;21702:18;;;21695:62;-1:-1:-1;;;21773:18:1;;;21766:35;21818:19;;34041:68:0;21442:401:1;34041:68:0;-1:-1:-1;;;;;34128:16:0;;34120:64;;;;-1:-1:-1;;;34120:64:0;;22050:2:1;34120:64:0;;;22032:21:1;22089:2;22069:18;;;22062:30;22128:34;22108:18;;;22101:62;-1:-1:-1;;;22179:18:1;;;22172:33;22222:19;;34120:64:0;21848:399:1;34120:64:0;34212:1;34203:6;:10;34195:64;;;;-1:-1:-1;;;34195:64:0;;22454:2:1;34195:64:0;;;22436:21:1;22493:2;22473:18;;;22466:30;22532:34;22512:18;;;22505:62;-1:-1:-1;;;22583:18:1;;;22576:39;22632:19;;34195:64:0;22252:405:1;34195:64:0;34272:28;34303:24;34321:4;34303:9;:24::i;:::-;34402:29;;34272:55;;-1:-1:-1;34365:66:0;;;;;;;34460:53;;-1:-1:-1;34497:16:0;;-1:-1:-1;;;34497:16:0;;;;34496:17;34460:53;:102;;;;-1:-1:-1;;;;;;34531:31:0;;;;;;:25;:31;;;;;;;;34530:32;34460:102;:140;;;;-1:-1:-1;34579:21:0;;-1:-1:-1;;;34579:21:0;;;;34460:140;:180;;;;-1:-1:-1;34625:15:0;;-1:-1:-1;;;;;34617:23:0;;;34625:15;;34617:23;;34460:180;:218;;;;-1:-1:-1;34663:15:0;;-1:-1:-1;;;;;34657:21:0;;;34663:15;;34657:21;;34460:218;34442:383;;;34728:29;;34705:52;;34774:39;34792:20;34774:17;:39::i;:::-;34903:32;34918:4;34924:2;34928:6;34903:14;:32::i;:::-;34030:913;;33927:1016;;;:::o;21607:238::-;21736:7;21772:12;21764:6;;;;21756:29;;;;-1:-1:-1;;;21756:29:0;;;;;;;;:::i;:::-;-1:-1:-1;21796:9:0;21808:8;:1;21814;21808:5;:8::i;:::-;21796:20;21607:238;-1:-1:-1;;;;;21607:238:0:o;41874:687::-;42023:15;42053:23;42091:12;42118:23;42156:12;42183:18;42215:19;42226:7;42215:10;:19::i;:::-;-1:-1:-1;;;;;42263:15:0;;;;;;:7;:15;;;;;;42008:226;;-1:-1:-1;42008:226:0;;-1:-1:-1;42008:226:0;;-1:-1:-1;42008:226:0;-1:-1:-1;42008:226:0;-1:-1:-1;42008:226:0;-1:-1:-1;42263:28:0;;42008:226;42263:19;:28::i;:::-;-1:-1:-1;;;;;42245:15:0;;;;;;;:7;:15;;;;;;;;:46;;;;42323:18;;;;;:7;:18;;;;;:39;;42346:15;42323:22;:39::i;:::-;-1:-1:-1;;;;;42302:18:0;;;;;;:7;:18;;;;;;;;:60;;;;42394:7;:18;;;;:39;;42417:15;42394:22;:39::i;:::-;-1:-1:-1;;;;;42373:18:0;;;;;;:7;:18;;;;;:60;42444:49;42453:6;42461:7;42470:10;42482:4;42488;42444:8;:49::i;:::-;42526:9;-1:-1:-1;;;;;42509:44:0;42518:6;-1:-1:-1;;;;;42509:44:0;-1:-1:-1;;;;;;;;;;;42537:15:0;42509:44;;;;2404:25:1;;2392:2;2377:18;;2258:177;42509:44:0;;;;;;;;41997:564;;;;;;41874:687;;;:::o;43252:746::-;43403:15;43433:23;43471:12;43498:23;43536:12;43563:18;43595:19;43606:7;43595:10;:19::i;:::-;-1:-1:-1;;;;;43643:15:0;;;;;;:7;:15;;;;;;43388:226;;-1:-1:-1;43388:226:0;;-1:-1:-1;43388:226:0;;-1:-1:-1;43388:226:0;-1:-1:-1;43388:226:0;-1:-1:-1;43388:226:0;-1:-1:-1;43643:28:0;;43663:7;43643:19;:28::i;:::-;-1:-1:-1;;;;;43625:15:0;;;;;;:7;:15;;;;;;;;:46;;;;43700:7;:15;;;;:28;;43720:7;43700:19;:28::i;29477:164::-;29519:7;29540:15;29557;29576:19;:17;:19::i;:::-;29539:56;;-1:-1:-1;29539:56:0;-1:-1:-1;29613:20:0;29539:56;;29613:11;:20::i;:::-;29606:27;;;;29477:164;:::o;4013:98::-;4071:7;4098:5;4102:1;4098;:5;:::i;2876:98::-;2934:7;2961:5;2965:1;2961;:5;:::i;26978:848::-;27078:7;27100;27122;27144;27166;27188;27238:23;27276:12;27303:18;27336;27369:13;27396:20;27408:7;27396:11;:20::i;:::-;27223:193;;;;;;;;;;27428:15;27445:23;27470:12;27486:158;27512:7;27534:4;27553:10;27578;27603:5;27623:10;:8;:10::i;:::-;27486:11;:158::i;:::-;27427:217;;-1:-1:-1;27427:217:0;-1:-1:-1;27427:217:0;-1:-1:-1;27748:15:0;;-1:-1:-1;27778:4:0;;-1:-1:-1;27797:10:0;;-1:-1:-1;;;;;;26978:848:0;;;;;;;:::o;3257:98::-;3315:7;3342:5;3346:1;3342;:5;:::i;10436:191::-;10510:16;10529:6;;-1:-1:-1;;;;;10546:17:0;;;-1:-1:-1;;;;;;10546:17:0;;;;;;10579:40;;10529:6;;;;;;;10579:40;;10510:16;10579:40;10499:128;10436:191;:::o;42569:675::-;42720:15;42750:23;42788:12;42815:23;42853:12;42880:18;42912:19;42923:7;42912:10;:19::i;:::-;-1:-1:-1;;;;;42960:15:0;;;;;;:7;:15;;;;;;42705:226;;-1:-1:-1;42705:226:0;;-1:-1:-1;42705:226:0;;-1:-1:-1;42705:226:0;-1:-1:-1;42705:226:0;-1:-1:-1;42705:226:0;-1:-1:-1;42960:28:0;;42980:7;42960:19;:28::i;:::-;-1:-1:-1;;;;;42942:15:0;;;;;;:7;:15;;;;;;;;:46;;;;43017:7;:15;;;;:28;;43037:7;43017:19;:28::i;:::-;-1:-1:-1;;;;;42999:15:0;;;;;;;:7;:15;;;;;;:46;;;;43077:18;;;;;;;:39;;43100:15;43077:22;:39::i;41252:614::-;41399:15;41429:23;41467:12;41494:23;41532:12;41559:18;41591:19;41602:7;41591:10;:19::i;:::-;-1:-1:-1;;;;;41639:15:0;;;;;;:7;:15;;;;;;41384:226;;-1:-1:-1;41384:226:0;;-1:-1:-1;41384:226:0;;-1:-1:-1;41384:226:0;-1:-1:-1;41384:226:0;-1:-1:-1;41384:226:0;-1:-1:-1;41639:28:0;;41384:226;41639:19;:28::i;34951:1164::-;18629:16;:23;;-1:-1:-1;;;;18629:23:0;-1:-1:-1;;;18629:23:0;;;35311:12;;35280:11;;35248:12;;35217:11;;35311:7:::1;35183:14:::0;35280:6:::1;35150:13:::0;35113:17;;35078:16;;18629:23;;35078:246:::1;::::0;35311:12;;35078:214:::1;::::0;35280:11;;35078:214;;35248:12;;35078:214;;;;;;35150:13;;35078:214;;:34:::1;:53::i;:::-;:71:::0;::::1;:86::i;:246::-;35378:7;:14:::0;35362:6:::1;:13:::0;35062:262;;-1:-1:-1;35349:10:0::1;::::0;35362:30:::1;::::0;35378:14;35362:30:::1;:::i;:::-;35349:43:::0;-1:-1:-1;35403:20:0::1;35426:39;35459:5:::0;35426:28:::1;:20:::0;35349:43;35426:24:::1;:28::i;:::-;:32:::0;::::1;:39::i;:::-;35403:62;;35476:28;35491:12;35476:14;:28::i;:::-;35551:12:::0;;35537:11;;35517:17:::1;::::0;35537:26:::1;::::0;::::1;:::i;:::-;35517:46:::0;-1:-1:-1;35574:15:0::1;35592:46;35632:5:::0;35592:35:::1;:20:::0;35517:46;35592:24:::1;:35::i;:46::-;35574:64;;35649:19;35660:7;35649:10;:19::i;:::-;35723:17:::0;;35704:16;;35681:20:::1;::::0;35704:36:::1;::::0;::::1;:::i;:::-;35681:59:::0;-1:-1:-1;35751:20:0::1;35774:49;35817:5:::0;35774:38:::1;:20:::0;35681:59;35774:24:::1;:38::i;:49::-;35751:72;;35834:29;35850:12;35834:15;:29::i;:::-;35908:12:::0;;35894:11;;35876:15:::1;::::0;35894:26:::1;::::0;::::1;:::i;:::-;35876:44:::0;-1:-1:-1;35931:15:0::1;35949:44;35987:5:::0;35949:33:::1;:20:::0;35876:44;35949:24:::1;:33::i;:44::-;35931:62;;36004:19;36015:7;36004:10;:19::i;:::-;36041:66;::::0;;23115:25:1;;;23171:2;23156:18;;23149:34;;;23199:18;;;23192:34;;;23257:2;23242:18;;23235:34;;;36041:66:0::1;::::0;23102:3:1;23087:19;36041:66:0::1;;;;;;;-1:-1:-1::0;;18675:16:0;:24;;-1:-1:-1;;;;18675:24:0;;;-1:-1:-1;;;;;;;;34951:1164:0:o;39194:1163::-;-1:-1:-1;;;;;39327:26:0;;;;;;:18;:26;;;;;;;;39326:27;:61;;;;-1:-1:-1;;;;;;39358:29:0;;;;;;:18;:29;;;;;;;;39357:30;39326:61;39322:432;;;39412:16;;-1:-1:-1;;;39412:16:0;;;;39404:48;;;;-1:-1:-1;;;39404:48:0;;23482:2:1;39404:48:0;;;23464:21:1;23521:2;23501:18;;;23494:30;-1:-1:-1;;;23540:18:1;;;23533:49;23599:18;;39404:48:0;23280:343:1;39404:48:0;-1:-1:-1;;;;;39473:33:0;;;;;;:25;:33;;;;;;;;:41;;:33;:41;39469:274;;39535:13;:20;;-1:-1:-1;;;;39535:20:0;-1:-1:-1;;;39535:20:0;;;39574:11;32449:10;;32439:7;:20;32449:6;32486:13;32470;:29;32526:16;;32510:13;:32;32564:11;;32553:8;:22;32597:11;;32586:8;:22;32399:217;39574:11;39469:274;;;-1:-1:-1;;;;;39611:36:0;;;;;;:25;:36;;;;;;;;:44;;:36;:44;39607:136;;39676:13;:20;;-1:-1:-1;;;;39676:20:0;-1:-1:-1;;;39676:20:0;;;39715:12;32675:11;;32665:7;:21;32675:7;32713:14;32697:13;:30;32754:17;;32738:13;:33;32793:12;;32782:8;:23;32827:12;;32816:8;:23;32624:223;39715:12;-1:-1:-1;;;;;39770:19:0;;;;;;:11;:19;;;;;;;;:46;;;;-1:-1:-1;;;;;;39794:22:0;;;;;;:11;:22;;;;;;;;39793:23;39770:46;39766:467;;;39833:48;39855:6;39863:9;39874:6;39833:21;:48::i;:::-;39766:467;;;-1:-1:-1;;;;;39904:19:0;;;;;;:11;:19;;;;;;;;39903:20;:46;;;;-1:-1:-1;;;;;;39927:22:0;;;;;;:11;:22;;;;;;;;39903:46;39899:334;;;39966:46;39986:6;39994:9;40005:6;39966:19;:46::i;39899:334::-;-1:-1:-1;;;;;40034:19:0;;;;;;:11;:19;;;;;;;;:45;;;;-1:-1:-1;;;;;;40057:22:0;;;;;;:11;:22;;;;;;;;40034:45;40030:203;;;40096:48;40118:6;40126:9;40137:6;40096:21;:48::i;40030:203::-;40177:44;40195:6;40203:9;40214:6;40177:17;:44::i;:::-;40249:13;;-1:-1:-1;;;40249:13:0;;;;:21;;40266:4;40249:21;40245:105;;40287:13;:21;;-1:-1:-1;;;;40287:21:0;;;40323:15;32280:1;32270:7;:11;;;32292:13;:17;;;32320:13;:17;;;32348:8;:12;;;32371:8;:12;32226:165;40323:15;39194:1163;;;:::o;40365:879::-;40539:13;;-1:-1:-1;;;40539:13:0;;;;:21;;40556:4;40539:21;40535:702;;40577:18;40598:30;40620:7;40598:21;:30::i;:::-;40577:51;;40643:13;40659:25;40676:7;40659:16;:25::i;:::-;40643:41;;40699:13;40715:25;40732:7;40715:16;:25::i;:::-;40699:41;;40757:26;40772:10;40757:14;:26::i;:::-;40798:40;40820:10;40832:5;40798:21;:40::i;:::-;40853:16;40863:5;40853:9;:16::i;:::-;40911:23;40923:4;40929;40911:11;:23::i;:::-;41147:4;-1:-1:-1;;;;;41087:138:0;;-1:-1:-1;;;;;;;;;;;41205:5:0;41197;41171:23;41184:10;41171;:23;:::i;:::-;:31;;;;:::i;:::-;:39;;;;:::i;:::-;41087:138;;2404:25:1;;;2392:2;2377:18;41087:138:0;;;;;;;40562:675;;;40365:879;;;;;:::o;29649:605::-;29747:7;;29700;;;;15462:13;29700:7;29801:338;29825:9;:16;29821:20;;29801:338;;;29909:7;29885;:21;29893:9;29903:1;29893:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;29893:12:0;29885:21;;;;;;;;;;;;;:31;;:83;;;29961:7;29937;:21;29945:9;29955:1;29945:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;29945:12:0;29937:21;;;;;;;;;;;;;:31;29885:83;29863:146;;;-1:-1:-1;;29992:7:0;;;15462:13;;-1:-1:-1;29649:605:0;-1:-1:-1;;29649:605:0:o;29863:146::-;30034:34;30046:7;:21;30054:9;30064:1;30054:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;30054:12:0;30046:21;;;;;;;;;;;;;30034:7;;:11;:34::i;:::-;30024:44;;30093:34;30105:7;:21;30113:9;30123:1;30113:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;30113:12:0;30105:21;;;;;;;;;;;;;30093:7;;:11;:34::i;:::-;30083:44;-1:-1:-1;29843:3:0;;;;:::i;:::-;;;;29801:338;;;-1:-1:-1;30163:7:0;;:20;;15462:13;30163:11;:20::i;:::-;30153:7;:30;30149:61;;;-1:-1:-1;;30193:7:0;;;15462:13;;-1:-1:-1;29649:605:0;-1:-1:-1;29649:605:0:o;30149:61::-;30229:7;;30238;;-1:-1:-1;29649:605:0;-1:-1:-1;29649:605:0:o;27834:723::-;27935:7;27957;27979;28001;28023;28058:12;28073:24;28089:7;28073:15;:24::i;:::-;28058:39;;28108:18;28129:30;28151:7;28129:21;:30::i;:::-;28108:51;;28170:18;28191:30;28213:7;28191:21;:30::i;:::-;28170:51;;28232:13;28248:25;28265:7;28248:16;:25::i;:::-;28232:41;;28284:13;28300:25;28317:7;28300:16;:25::i;:::-;28284:41;-1:-1:-1;28336:23:0;28362:33;28384:10;28362:17;:7;28374:4;28362:11;:17::i;:33::-;28336:59;-1:-1:-1;28424:53:0;28471:5;28424:42;28460:5;28424:42;28336:59;28444:10;28424:19;:31::i;:53::-;28406:71;28513:4;;-1:-1:-1;28519:10:0;;-1:-1:-1;28531:10:0;;-1:-1:-1;28531:10:0;-1:-1:-1;27834:723:0;;-1:-1:-1;;;;27834:723:0:o;28565:904::-;28817:7;;;;28914:24;:7;28926:11;28914;:24::i;:::-;28896:42;-1:-1:-1;28949:12:0;28964:21;:4;28973:11;28964:8;:21::i;:::-;28949:36;-1:-1:-1;28996:18:0;29017:27;:10;29032:11;29017:14;:27::i;:::-;28996:48;-1:-1:-1;29055:18:0;29076:27;:10;29091:11;29076:14;:27::i;:::-;29055:48;-1:-1:-1;29114:13:0;29130:22;:5;29140:11;29130:9;:22::i;:::-;29114:38;;29163:13;29179:25;29196:7;29179:16;:25::i;:::-;29163:41;-1:-1:-1;29215:13:0;29231:22;29163:41;29241:11;29231:9;:22::i;:::-;29215:38;-1:-1:-1;29264:22:0;29289:58;29215:38;29289:47;29330:5;29289:47;29314:10;29289:47;:4;29298:10;29289:8;:20::i;:58::-;29264:83;-1:-1:-1;29358:23:0;29384:27;:7;29264:83;29384:11;:27::i;:::-;29430:7;;-1:-1:-1;29358:53:0;;-1:-1:-1;29456:4:0;;-1:-1:-1;;;;;;;;28565:904:0;;;;;;;;;;:::o;3614:98::-;3672:7;3699:5;3703:1;3699;:5;:::i;37902:423::-;37961:12;37976:13;:6;37987:1;37976:10;:13::i;:::-;37961:28;-1:-1:-1;38000:17:0;38020:16;:6;37961:28;38020:10;:16::i;:::-;38000:36;-1:-1:-1;38074:21:0;38108:22;38125:4;38108:16;:22::i;:::-;38143:18;38164:41;:21;38190:14;38164:25;:41::i;:::-;38143:62;;38218:35;38231:9;38242:10;38218:12;:35::i;:::-;38271:46;;;24003:25:1;;;24059:2;24044:18;;24037:34;;;24087:18;;;24080:34;;;38271:46:0;;23991:2:1;23976:18;38271:46:0;;;;;;;37950:375;;;;37902:423;:::o;36123:560::-;36177:19;36199:10;:8;:10::i;:::-;36177:32;-1:-1:-1;36220:13:0;36236:22;:5;36177:32;36236:9;:22::i;:::-;-1:-1:-1;;;;;36301:10:0;36293:19;;;;;:7;:19;;;;;;36220:38;;-1:-1:-1;36293:30:0;;36220:38;36293:23;:30::i;:::-;-1:-1:-1;;;;;36279:10:0;36271:19;;;;;:7;:19;;;;;;:52;;;;36375:4;36359:22;;;;:33;;36386:5;36359:26;:33::i;:::-;36350:4;36334:22;;;;:7;:22;;;;;;;;:58;;;;36421:10;-1:-1:-1;;;;;36409:23:0;;;:11;:23;;;;;;36405:94;;;-1:-1:-1;;;;;36477:10:0;36469:19;;;;;:7;:19;;;;;;:30;;36493:5;36469:23;:30::i;:::-;-1:-1:-1;;;;;36455:10:0;36447:19;;;;;:7;:19;;;;;:52;36405:94;36536:4;36516:26;;;;:11;:26;;;;;;;;36512:103;;;36598:4;36582:22;;;;:7;:22;;;;;;:33;;36609:5;36582:26;:33::i;:::-;36573:4;36557:22;;;;:7;:22;;;;;:58;36512:103;36633:42;;2404:25:1;;;-1:-1:-1;;;;;36657:10:0;36633:42;;36650:4;;-1:-1:-1;;;;;;;;;;;36633:42:0;2392:2:1;2377:18;36633:42:0;2258:177:1;37259:635:0;37323:19;37345:10;:8;:10::i;:::-;37323:32;-1:-1:-1;37366:18:0;37387:27;:10;37323:32;37387:14;:27::i;:::-;37462:15;;-1:-1:-1;;;;;37462:15:0;37454:24;;;;:7;:24;;;;;;37366:48;;-1:-1:-1;37454:40:0;;37366:48;37454:28;:40::i;:::-;37435:15;;-1:-1:-1;;;;;37435:15:0;37427:24;;;;:7;:24;;;;;;:67;;;;37546:4;37530:22;;;;:38;;37557:10;37530:26;:38::i;:::-;37521:4;37505:22;;;;:7;:22;;;;;;;;:63;;;;37597:15;;-1:-1:-1;;;;;37597:15:0;37585:28;;:11;:28;;;;;;37581:114;;;37663:15;;-1:-1:-1;;;;;37663:15:0;37655:24;;;;:7;:24;;;;;;:40;;37684:10;37655:28;:40::i;:::-;37636:15;;-1:-1:-1;;;;;37636:15:0;37628:24;;;;:7;:24;;;;;:67;37581:114;37732:4;37712:26;;;;:11;:26;;;;;;;;37708:108;;;37794:4;37778:22;;;;:7;:22;;;;;;:38;;37805:10;37778:26;:38::i;:::-;37769:4;37753:22;;;;:7;:22;;;;;:63;37708:108;37858:15;;37834:52;;2404:25:1;;;-1:-1:-1;;;;;37858:15:0;;;;37851:4;;-1:-1:-1;;;;;;;;;;;37834:52:0;2392:2:1;2377:18;37834:52:0;2258:177:1;36691:560:0;36745:19;36767:10;:8;:10::i;:::-;36745:32;-1:-1:-1;36788:13:0;36804:22;:5;36745:32;36804:9;:22::i;:::-;36869:10;;-1:-1:-1;;;;;36869:10:0;36861:19;;;;:7;:19;;;;;;36788:38;;-1:-1:-1;36861:30:0;;36788:38;36861:23;:30::i;:::-;36847:10;;-1:-1:-1;;;;;36847:10:0;36839:19;;;;:7;:19;;;;;;:52;;;;36943:4;36927:22;;;;:33;;36954:5;36927:26;:33::i;:::-;36918:4;36902:22;;;;:7;:22;;;;;;;;:58;;;;36989:10;;-1:-1:-1;;;;;36989:10:0;36977:23;;:11;:23;;;;;;36973:94;;;37045:10;;-1:-1:-1;;;;;37045:10:0;37037:19;;;;:7;:19;;;;;;:30;;37061:5;37037:23;:30::i;:::-;37023:10;;-1:-1:-1;;;;;37023:10:0;37015:19;;;;:7;:19;;;;;:52;36973:94;37104:4;37084:26;;;;:11;:26;;;;;;;;37080:103;;;37166:4;37150:22;;;;:7;:22;;;;;;:33;;37177:5;37150:26;:33::i;:::-;37141:4;37125:22;;;;:7;:22;;;;;:58;37080:103;37225:10;;37201:42;;2404:25:1;;;-1:-1:-1;;;;;37225:10:0;;;;37218:4;;-1:-1:-1;;;;;;;;;;;37201:42:0;2392:2:1;2377:18;37201:42:0;2258:177:1;31904:174:0;32001:7;32033:37;32064:5;32033:26;32045:13;;32033:7;:11;;:26;;;;:::i;31764:132::-;31829:7;31856:32;31882:5;31856:21;31868:8;;31856:7;:11;;:21;;;;:::i;32086:132::-;32151:7;32178:32;32204:5;32178:21;32190:8;;32178:7;:11;;:21;;;;:::i;30262:355::-;30325:19;30347:10;:8;:10::i;:::-;30325:32;-1:-1:-1;30368:18:0;30389:27;:10;30325:32;30389:14;:27::i;:::-;30468:4;30452:22;;;;:7;:22;;;;;;30368:48;;-1:-1:-1;30452:38:0;;30368:48;30452:26;:38::i;:::-;30443:4;30427:22;;;;:7;:22;;;;;;;;:63;;;;30505:11;:26;;;;;;30501:108;;;30587:4;30571:22;;;;:7;:22;;;;;;:38;;30598:10;30571:26;:38::i;:::-;30562:4;30546:22;;;;:7;:22;;;;;:63;30314:303;;30262:355;:::o;30958:478::-;31043:19;31065:10;:8;:10::i;:::-;31043:32;-1:-1:-1;31086:18:0;31107:27;:10;31043:32;31107:14;:27::i;:::-;31086:48;-1:-1:-1;31145:13:0;31161:22;:5;31171:11;31161:9;:22::i;:::-;31235:4;31219:22;;;;:7;:22;;;;;;31145:38;;-1:-1:-1;31219:49:0;;31257:10;;31219:33;;31145:38;31219:26;:33::i;:49::-;31210:4;31194:22;;;;:7;:22;;;;;;;;:74;;;;31283:11;:26;;;;;;31279:149;;;31409:18;31422:5;31409:10;:18;:::i;:::-;31382:4;31366:22;;;;:7;:22;;;;;;:62;;;;:::i;:::-;31340:4;31324:22;;;;:7;:22;;;;;:104;31032:404;;;30958:478;;:::o;26823:147::-;26901:7;;:17;;26913:4;26901:11;:17::i;:::-;26891:7;:27;26942:10;;:20;;26957:4;26942:14;:20::i;:::-;26929:10;:33;-1:-1:-1;;26823:147:0:o;31444:130::-;31508:7;31535:31;31560:5;31535:20;31547:7;;31535;:11;;:20;;;;:::i;31582:174::-;31679:7;31711:37;31742:5;31711:26;31723:13;;31711:7;:11;;:26;;;;:::i;38333:475::-;38423:16;;;38437:1;38423:16;;;;;;;;38399:21;;38423:16;;;;;;;;;;-1:-1:-1;38423:16:0;38399:40;;38468:4;38450;38455:1;38450:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;38450:23:0;;;:7;;;;;;;;;;:23;;;;38494:15;;:22;;;-1:-1:-1;;;38494:22:0;;;;:15;;;;;:20;;:22;;;;;38450:7;;38494:22;;;;;:15;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;38484:4;38489:1;38484:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;38484:32:0;;;:7;;;;;;;;;:32;38561:15;;38529:62;;38546:4;;38561:15;38579:11;38529:8;:62::i;:::-;38604:15;;:196;;-1:-1:-1;;;38604:196:0;;-1:-1:-1;;;;;38604:15:0;;;;:66;;:196;;38685:11;;38604:15;;38727:4;;38754;;38774:15;;38604:196;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;38388:420;38333:475;:::o;38816:370::-;38929:15;;38897:62;;38914:4;;-1:-1:-1;;;;;38929:15:0;38947:11;38897:8;:62::i;:::-;38972:15;;39122;;38972:206;;-1:-1:-1;;;38972:206:0;;39044:4;38972:206;;;25847:34:1;25897:18;;;25890:34;;;38972:15:0;25940:18:1;;;25933:34;;;25983:18;;;25976:34;-1:-1:-1;;;;;39122:15:0;;;26026:19:1;;;26019:44;39152:15:0;26079:19:1;;;26072:35;38972:15:0;;;:31;;39011:9;;25781:19:1;;38972:206:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;293:139:1:-;-1:-1:-1;;;;;376:31:1;;366:42;;356:70;;422:1;419;412:12;437:486;528:6;536;544;597:2;585:9;576:7;572:23;568:32;565:52;;;613:1;610;603:12;565:52;652:9;639:23;671:39;704:5;671:39;:::i;:::-;729:5;-1:-1:-1;786:2:1;771:18;;758:32;799:41;758:32;799:41;:::i;:::-;437:486;;859:7;;-1:-1:-1;;;913:2:1;898:18;;;;885:32;;437:486::o;1328:597::-;1440:4;1469:2;1498;1487:9;1480:21;1530:6;1524:13;1573:6;1568:2;1557:9;1553:18;1546:34;1598:1;1608:140;1622:6;1619:1;1616:13;1608:140;;;1717:14;;;1713:23;;1707:30;1683:17;;;1702:2;1679:26;1672:66;1637:10;;1608:140;;;1766:6;1763:1;1760:13;1757:91;;;1836:1;1831:2;1822:6;1811:9;1807:22;1803:31;1796:42;1757:91;-1:-1:-1;1909:2:1;1888:15;-1:-1:-1;;1884:29:1;1869:45;;;;1916:2;1865:54;;1328:597;-1:-1:-1;;;1328:597:1:o;1930:323::-;1998:6;2006;2059:2;2047:9;2038:7;2034:23;2030:32;2027:52;;;2075:1;2072;2065:12;2027:52;2114:9;2101:23;2133:39;2166:5;2133:39;:::i;:::-;2191:5;2243:2;2228:18;;;;2215:32;;-1:-1:-1;;;1930:323:1:o;2440:255::-;2499:6;2552:2;2540:9;2531:7;2527:23;2523:32;2520:52;;;2568:1;2565;2558:12;2520:52;2607:9;2594:23;2626:39;2659:5;2626:39;:::i;3879:180::-;3938:6;3991:2;3979:9;3970:7;3966:23;3962:32;3959:52;;;4007:1;4004;3997:12;3959:52;-1:-1:-1;4030:23:1;;3879:180;-1:-1:-1;3879:180:1:o;4253:118::-;4339:5;4332:13;4325:21;4318:5;4315:32;4305:60;;4361:1;4358;4351:12;4376:309;4441:6;4449;4502:2;4490:9;4481:7;4477:23;4473:32;4470:52;;;4518:1;4515;4508:12;4470:52;4554:9;4541:23;4531:33;;4614:2;4603:9;4599:18;4586:32;4627:28;4649:5;4627:28;:::i;:::-;4674:5;4664:15;;;4376:309;;;;;:::o;5026:454::-;5121:6;5129;5137;5145;5153;5206:3;5194:9;5185:7;5181:23;5177:33;5174:53;;;5223:1;5220;5213:12;5174:53;-1:-1:-1;;5246:23:1;;;5316:2;5301:18;;5288:32;;-1:-1:-1;5367:2:1;5352:18;;5339:32;;5418:2;5403:18;;5390:32;;-1:-1:-1;5469:3:1;5454:19;5441:33;;-1:-1:-1;5026:454:1;-1:-1:-1;5026:454:1:o;5485:390::-;5550:6;5558;5611:2;5599:9;5590:7;5586:23;5582:32;5579:52;;;5627:1;5624;5617:12;5579:52;5666:9;5653:23;5685:39;5718:5;5685:39;:::i;:::-;5743:5;-1:-1:-1;5800:2:1;5785:18;;5772:32;5813:30;5772:32;5813:30;:::i;5880:241::-;5936:6;5989:2;5977:9;5968:7;5964:23;5960:32;5957:52;;;6005:1;6002;5995:12;5957:52;6044:9;6031:23;6063:28;6085:5;6063:28;:::i;6126:404::-;6194:6;6202;6255:2;6243:9;6234:7;6230:23;6226:32;6223:52;;;6271:1;6268;6261:12;6223:52;6310:9;6297:23;6329:39;6362:5;6329:39;:::i;:::-;6387:5;-1:-1:-1;6444:2:1;6429:18;;6416:32;6457:41;6416:32;6457:41;:::i;7239:184::-;7309:6;7362:2;7350:9;7341:7;7337:23;7333:32;7330:52;;;7378:1;7375;7368:12;7330:52;-1:-1:-1;7401:16:1;;7239:184;-1:-1:-1;7239:184:1:o;7428:342::-;7630:2;7612:21;;;7669:2;7649:18;;;7642:30;-1:-1:-1;;;7703:2:1;7688:18;;7681:48;7761:2;7746:18;;7428:342::o;7775:245::-;7842:6;7895:2;7883:9;7874:7;7870:23;7866:32;7863:52;;;7911:1;7908;7901:12;7863:52;7943:9;7937:16;7962:28;7984:5;7962:28;:::i;8367:336::-;8569:2;8551:21;;;8608:2;8588:18;;;8581:30;-1:-1:-1;;;8642:2:1;8627:18;;8620:42;8694:2;8679:18;;8367:336::o;8708:::-;8910:2;8892:21;;;8949:2;8929:18;;;8922:30;-1:-1:-1;;;8983:2:1;8968:18;;8961:42;9035:2;9020:18;;8708:336::o;9049:399::-;9251:2;9233:21;;;9290:2;9270:18;;;9263:30;9329:34;9324:2;9309:18;;9302:62;-1:-1:-1;;;9395:2:1;9380:18;;9373:33;9438:3;9423:19;;9049:399::o;11778:127::-;11839:10;11834:3;11830:20;11827:1;11820:31;11870:4;11867:1;11860:15;11894:4;11891:1;11884:15;11910:127;11971:10;11966:3;11962:20;11959:1;11952:31;12002:4;11999:1;11992:15;12026:4;12023:1;12016:15;12042:125;12082:4;12110:1;12107;12104:8;12101:34;;;12115:18;;:::i;:::-;-1:-1:-1;12152:9:1;;12042:125::o;12172:127::-;12233:10;12228:3;12224:20;12221:1;12214:31;12264:4;12261:1;12254:15;12288:4;12285:1;12278:15;12304:135;12343:3;12364:17;;;12361:43;;12384:18;;:::i;:::-;-1:-1:-1;12431:1:1;12420:13;;12304:135::o;13557:128::-;13597:3;13628:1;13624:6;13621:1;13618:13;13615:39;;;13634:18;;:::i;:::-;-1:-1:-1;13670:9:1;;13557:128::o;14714:247::-;14466:12;;14454:25;;14528:4;14517:16;;14511:23;14504:4;14495:14;;14488:47;14584:4;14573:16;;14567:23;14560:4;14551:14;;14544:47;14640:4;14629:16;;14623:23;14616:4;14607:14;;14600:47;14696:4;14685:16;;14679:23;14672:4;14663:14;;14656:47;14891:3;14876:19;;14904:51;14386:323;22662:217;22702:1;22728;22718:132;;22772:10;22767:3;22763:20;22760:1;22753:31;22807:4;22804:1;22797:15;22835:4;22832:1;22825:15;22718:132;-1:-1:-1;22864:9:1;;22662:217::o;23628:168::-;23668:7;23734:1;23730;23726:6;23722:14;23719:1;23716:21;23711:1;23704:9;23697:17;23693:45;23690:71;;;23741:18;;:::i;:::-;-1:-1:-1;23781:9:1;;23628:168::o;24257:259::-;24327:6;24380:2;24368:9;24359:7;24355:23;24351:32;24348:52;;;24396:1;24393;24386:12;24348:52;24428:9;24422:16;24447:39;24480:5;24447:39;:::i;24521:980::-;24783:4;24831:3;24820:9;24816:19;24862:6;24851:9;24844:25;24888:2;24926:6;24921:2;24910:9;24906:18;24899:34;24969:3;24964:2;24953:9;24949:18;24942:31;24993:6;25028;25022:13;25059:6;25051;25044:22;25097:3;25086:9;25082:19;25075:26;;25136:2;25128:6;25124:15;25110:29;;25157:1;25167:195;25181:6;25178:1;25175:13;25167:195;;;25246:13;;-1:-1:-1;;;;;25242:39:1;25230:52;;25337:15;;;;25302:12;;;;25278:1;25196:9;25167:195;;;-1:-1:-1;;;;;;;25418:32:1;;;;25413:2;25398:18;;25391:60;-1:-1:-1;;;25482:3:1;25467:19;25460:35;25379:3;24521:980;-1:-1:-1;;;24521:980:1:o;26118:306::-;26206:6;26214;26222;26275:2;26263:9;26254:7;26250:23;26246:32;26243:52;;;26291:1;26288;26281:12;26243:52;26320:9;26314:16;26304:26;;26370:2;26359:9;26355:18;26349:25;26339:35;;26414:2;26403:9;26399:18;26393:25;26383:35;;26118:306;;;;;:::o

Swarm Source

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