ETH Price: $3,854.19 (-1.47%)
Gas: 5.96 Gwei

Token

ERC-20: Apollo Three (APT)
 

Overview

Max Total Supply

1,000,000,000,000 APT

Holders

101

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 9 Decimals)

Balance
1,560,981.723136377 APT

Value
$0.00
0x7103d02E4a4c0Aa3370E7a7C5158ff1b16d768F1
Loading...
Loading
Loading...
Loading
Loading...
Loading

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

Contract Source Code Verified (Exact Match)

Contract Name:
Apollo_Three

Compiler Version
v0.8.12+commit.f00d7308

Optimization Enabled:
Yes with 1000 runs

Other Settings:
default evmVersion, None license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2022-05-02
*/

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

    function totalSupply() external view returns (uint256);

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

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

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

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

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

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

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


    /**
     * @dev Wrappers over Solidity's arithmetic operations with added overflow
     * checks.
     *
     * Arithmetic operations in Solidity wrap on overflow. This can easily result
     * in bugs, because programmers usually assume that an overflow raises an
     * error, which is the standard behavior in high level programming languages.
     * `SafeMath` restores this intuition by reverting the transaction when an
     * operation overflows.
     *
    * Using this library instead of the unchecked operations eliminates an entire
    * class of bugs, so it's recommended to use it always.
    */
 
    library SafeMath {
    /**
     * @dev Returns the addition of two unsigned integers, reverting on
     * overflow.
     *
     * Counterpart to Solidity's `+` operator.
     *
     * Requirements:
     *
     * - Addition cannot overflow.
     */
    function add(uint256 a, uint256 b) internal pure returns (uint256) {
        uint256 c = a + b;
        require(c >= a, "SafeMath: addition overflow");

        return c;
    }

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

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

        return c;
    }

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

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

        return c;
    }

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

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

        return c;
    }

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

    //Locks the contract for owner for the amount of time provided
    function lock(uint256 time) public virtual onlyOwner {
        _previousOwner = _owner;
        _owner = address(0);
        _lockTime = block.timestamp + time;
        emit OwnershipTransferred(_owner, address(0));
    }
    
    //Unlocks the contract for owner when _lockTime is exceeds
    function unlock() public virtual {
        require(_previousOwner == msg.sender, "You don't have permission to unlock");
        require(block.timestamp > _lockTime , "Contract is locked until 7 days");
        emit OwnershipTransferred(_owner, _previousOwner);
        _owner = _previousOwner;
    }
    }
   


    // pragma solidity >=0.5.0;

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

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

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

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

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


    // pragma solidity >=0.5.0;

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

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

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

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

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

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

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

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

    function initialize(address, address) external;
    }

    // pragma solidity >=0.6.2;

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

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

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



    // pragma solidity >=0.6.2;

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

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

    }

    contract Apollo_Three is Context, IERC20, Ownable {
    
    using SafeMath for uint256;
    using Address for address;
    
    
    mapping (address => uint256) private _rOwned;
    mapping (address => uint256) private _tOwned;
    mapping (address => bool) public preTrader; 
    mapping (address => mapping (address => uint256)) private _allowances;
    mapping (address => uint256)  private _tLocked;
    mapping (address => uint256) private _balances;
    mapping (address => bool) private _isExcludedFromFee;
    mapping (address => bool) private _isExcludedFromMaxTx;
    mapping (address => bool) private _isExcludedFromMaxWallet;
    mapping (address => bool) private _isExcluded;
    mapping (address => uint256) private _purchaseHistory;

    address[] private _excluded;

    address payable  _developerAddress;
    address payable  _marketingAddress;
    
   
    uint256 private constant MAX = ~uint256(0);
    uint256 private _totalSupply = 1000000000000  * 10**9;
    uint256 private _rTotal = (MAX - (MAX % _totalSupply));
    uint256 private _tFeeTotal;
    uint256 private launchBlock = 0;

    
    
    string private _name = "Apollo Three";
    string private _symbol = "APT";
    uint8 private _decimals = 9;
    
  
    uint256 public _taxFee = 0; 
    uint256 private _previousTaxFee = _taxFee;
    //LP will be turned on after day 0 to 1  
    uint256 public _liquidityFee = 0;
    uint256 private _previousLiquidityFee = _liquidityFee;
    
    uint256 public _developerFee = 3; //Hype Apes 
    uint256 private _previousDeveloperFee = _developerFee;
    
    uint256 public _marketingFee = 7; //Apollo
    uint256 private _previousMarketingFee = _marketingFee;
    
    IUniswapV2Router02 public immutable uniswapV2Router;
    address public immutable uniswapV2Pair;
    
    bool inSwapAndLiquify;
    bool public swapAndLiquifyEnabled = true;
    bool private tradingOpen;

    
    uint256 public _maxWallet = 15000000000000 * 10**9; //1.5% of TS
    uint256 public _maxTxAmount = 5000000000000 * 10**9; //0.5% of TS
    // set this number to adjust the rate of swaps
    uint256 public numTokensSellToAddToLiquidity = 250000 * 10**9;
	
	uint256 private _rateLimitSeconds = 5;

    event MinTokensBeforeSwapUpdated(uint256 minTokensBeforeSwap);
    event SwapAndLiquifyEnabledUpdated(bool enabled);
    event SwapAndLiquify(
        uint256 tokensSwapped,
        uint256 ethReceived,
        uint256 tokensIntoLiqudity
    );
    
    event SwapAndSend(
        uint256 tokensSwapped,
        uint256 ethReceived,
        uint256 tokens
    );
    
    
    modifier lockTheSwap {
        inSwapAndLiquify = true;
        _;
        inSwapAndLiquify = false;
    }
    
    constructor () {
        _rOwned[_msgSender()] = _rTotal;
        
        // IUniswapV2Router02 _uniswapV2Router = IUniswapV2Router02(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D);    // KOVAN
         IUniswapV2Router02 _uniswapV2Router = IUniswapV2Router02(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D);    // MAINNET
        // IUniswapV2Router02 _uniswapV2Router = IUniswapV2Router02(0x9Ac64Cc6e4415144C455BD8E4837Fea55603e5c3);    // TESTNET
        // Create a uniswap pair for this new token
        uniswapV2Pair = IUniswapV2Factory(_uniswapV2Router.factory())
            .createPair(address(this), _uniswapV2Router.WETH());

        // set the rest of the contract variables
        uniswapV2Router = _uniswapV2Router;
        
        //exclude owner and this contract from fee
        _isExcludedFromFee[owner()] = true;
        _isExcludedFromFee[address(this)] = true;
        
        // Add all the tokens created to the creator of the token
         _balances[msg.sender] = _totalSupply;

        // Emit an Transfer event to notify the blockchain that an Transfer has occured
        emit Transfer(address(0), msg.sender, _totalSupply);
     

        // Exclude from max tx
        _isExcludedFromMaxTx[owner()] = true;
        _isExcludedFromMaxTx[address(this)] = true;
        _isExcludedFromMaxTx[address(0x000000000000000000000000000000000000dEaD)] = true;
        _isExcludedFromMaxTx[address(0)] = true;

        emit Transfer(address(0), _msgSender(), _totalSupply);
    }
    
    
    
    
    function lockTimeOfWallet() public view returns (uint256) {
        return _tLocked[_msgSender()];
    }

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

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

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

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

    function balanceOf(address account) public view override returns (uint256) {
        if (_isExcluded[account]) return _tOwned[account];
        return tokenFromReflection(_rOwned[account]);
    }
    
    function transfer(address recipient, uint256 amount) public override returns (bool) {
        require(block.timestamp > _tLocked[_msgSender()] , "Wallet is still locked");
        _transfer(_msgSender(), recipient, amount);
        return true;
    }

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

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

    function transferFrom(address sender, address recipient, uint256 amount) public override returns (bool) {
        require(block.timestamp > _tLocked[sender] , "Wallet is still locked");
        _transfer(sender, recipient, amount);
        _approve(sender, _msgSender(), _allowances[sender][_msgSender()].sub(amount, "ERC20: transfer amount exceeds allowance"));
        return true;
    }

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

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

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

    function totalFees() public view returns (uint256) {
        return _tFeeTotal;
    }
    
    function lockWallet(uint256 time) public  {
        _tLocked[_msgSender()] = block.timestamp + time;
    }
    
     

    function setMaxTxAmount(uint256 maxTxAmount) external onlyOwner() {
        _maxTxAmount = maxTxAmount;
    }
    
    function setMaxTx(uint256 maxTx) external onlyOwner() {
        _maxTxAmount = maxTx * 10 ** 9;
    }

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

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

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

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

    function includeInReward(address account) external onlyOwner() {
        require(_isExcluded[account], "Account is already excluded");
        for (uint256 i = 0; i < _excluded.length; i++) {
            if (_excluded[i] == account) {
                _excluded[i] = _excluded[_excluded.length - 1];
                _tOwned[account] = 0;
                _isExcluded[account] = false;
                _excluded.pop();
                break;
            }
        }
    }
    
    function _transferBothExcluded(address sender, address recipient, uint256 tAmount) private {
        (uint256 rAmount, uint256 rTransferAmount, uint256 rFee, uint256 tTransferAmount, uint256 tFee, uint256 tLiquidity) = _getValues(tAmount);
        _tOwned[sender] = _tOwned[sender].sub(tAmount);
        _rOwned[sender] = _rOwned[sender].sub(rAmount);
        _tOwned[recipient] = _tOwned[recipient].add(tTransferAmount);
        _rOwned[recipient] = _rOwned[recipient].add(rTransferAmount);        
        _takeLiquidity(tLiquidity);
        _reflectFee(rFee, tFee);
        emit Transfer(sender, recipient, tTransferAmount);
    }
    
    function excludeFromFee(address account) public onlyOwner {
        _isExcludedFromFee[account] = true;
    }
    
    function isExcludedFromMaxTx(address account) public view returns(bool) {
        return _isExcludedFromMaxTx[account];
    }

    function excludeOrIncludeFromMaxTx(address account, bool exclude) public onlyOwner {
        _isExcludedFromMaxTx[account] = exclude;
    }

    function setDeveloperAddress(address payable developer) public onlyOwner {
        _developerAddress = developer;
    }
    
    function setMarketingAddress(address payable marketing) public onlyOwner {
        _marketingAddress = marketing;
    }
    
    function setMinTokensToSwap(uint256 _minTokens) external onlyOwner() {
        numTokensSellToAddToLiquidity = _minTokens * 10 ** 9;
    }

    function showDeveloperAddress() public view returns(address payable) {
        return _developerAddress;
    }
    
    function showMarketingaddress() public view returns(address payable) {
        return _marketingAddress;
    }
    
    function includeInFee(address account) public onlyOwner {
        _isExcludedFromFee[account] = false;
    }
    
    function setDeveloperFeePercent(uint256 developerFee) external onlyOwner {
        _developerFee = 0;
        if(developerFee <= 10) {
	        _developerFee = developerFee;
	    }  
    }
    
    function setTaxFeePercent(uint256 taxFee) external onlyOwner {
        _taxFee = 0;
        if(taxFee <= 10) {
	        _taxFee = taxFee;
	    }  
    }
    
    function setMarketingFeePercent(uint256 marketingFee) external onlyOwner {
        _marketingFee = 0;
        if(marketingFee <= 10) {
	        _marketingFee = marketingFee;
	    }  
    }
    
    function setLiquidityFeePercent(uint256 liquidityFee) external onlyOwner {
        _liquidityFee = 0;
        if(liquidityFee <= 10) {
	        _liquidityFee = liquidityFee;
	    }  
    }
    
    function setSwapAndLiquifyEnabled(bool _enabled) public onlyOwner {
        swapAndLiquifyEnabled = _enabled;
        emit SwapAndLiquifyEnabledUpdated(_enabled);
    }
    
    
     //to recieve ETH from uniswapV2Router when swaping
    receive() external payable {}

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

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

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

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

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

    function _getCurrentSupply() private view returns(uint256, uint256) {
        uint256 rSupply = _rTotal;
        uint256 tSupply = _totalSupply;      
        for (uint256 i = 0; i < _excluded.length; i++) {
            if (_rOwned[_excluded[i]] > rSupply || _tOwned[_excluded[i]] > tSupply) return (_rTotal, _totalSupply);
            rSupply = rSupply.sub(_rOwned[_excluded[i]]);
            tSupply = tSupply.sub(_tOwned[_excluded[i]]);
        }
        if (rSupply < _rTotal.div(_totalSupply)) return (_rTotal, _totalSupply);
        return (rSupply, tSupply);
    }
    
    function _takeLiquidity(uint256 tLiquidity) private {
        uint256 currentRate =  _getRate();
        uint256 rLiquidity = tLiquidity.mul(currentRate);
        _rOwned[address(this)] = _rOwned[address(this)].add(rLiquidity);
        if(_isExcluded[address(this)])
            _tOwned[address(this)] = _tOwned[address(this)].add(tLiquidity);
    }
    
    function calculateTaxFee(uint256 _amount) private view returns (uint256) {
        return _amount.mul(_taxFee).div(
            10**2
        );
    }

    function calculateLiquidityPlusFees(uint256 _amount) private view returns (uint256) {
        return _amount.mul(_liquidityFee + _developerFee + _marketingFee).div(
            10**2
        );
    }
    
    
    function removeAllFee() private {
        if(_taxFee == 0 && _liquidityFee == 0 && _marketingFee == 0 && _developerFee == 0) return;
        
        _previousTaxFee = _taxFee;
        _previousLiquidityFee = _liquidityFee;
        _previousDeveloperFee = _developerFee;
        _previousMarketingFee = _marketingFee;
        
        _taxFee = 0;
        _liquidityFee = 0;
        _developerFee = 0;
        _marketingFee = 0;
    }
    
    function restoreAllFee() private {
        _taxFee = _previousTaxFee;
        _liquidityFee = _previousLiquidityFee;
        _developerFee = _previousDeveloperFee;
        _marketingFee = _previousMarketingFee;
    }
    
    function isExcludedFromFee(address account) public 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");

         if (from != owner() && to != owner() && !preTrader[from] && !preTrader[to]) {
            
            //Trade start check
        if (!tradingOpen) {
            require(preTrader[from], "TOKEN: This account cannot send tokens until trading is enabled");
            }
        }

        if (_isExcludedFromMaxTx[from] == false && _isExcludedFromMaxTx[to] == false && _isExcludedFromMaxWallet[from] == false && _isExcludedFromMaxWallet[to] == false && to != uniswapV2Pair) {
            require(amount <= _maxTxAmount, "Transfer amount exceeds the maxTxAmount.");

            uint256 contractBalanceRecepient = balanceOf(to);
            require(contractBalanceRecepient + amount <= _maxWallet, "Exceeds maximum wallet token amount.");
			
			checkBot(from,to);
        }

        // is the token balance of this contract address over the min number of
        // tokens that we need to initiate a swap + liquidity lock?
        // also, don't get caught in a circular liquidity event.
        // also, don't swap & liquify if sender is uniswap pair.
        uint256 contractTokenBalance = balanceOf(address(this));
        
        if(contractTokenBalance >= _maxTxAmount)
        {
            contractTokenBalance = _maxTxAmount;
        }
        
        bool overMinTokenBalance = contractTokenBalance >= numTokensSellToAddToLiquidity;
        if (
            overMinTokenBalance &&
            !inSwapAndLiquify &&
            from != uniswapV2Pair &&
            swapAndLiquifyEnabled
        ) {
            contractTokenBalance = numTokensSellToAddToLiquidity;
            //add liquidity
            swapAndLiquify(contractTokenBalance);
        }
        
        //indicates if fee should be deducted from transfer
        bool takeFee = true;
        
        //if any account belongs to _isExcludedFromFee account then remove the fee
        if(_isExcludedFromFee[from] || _isExcludedFromFee[to]){
            takeFee = false;
        }
        
        //transfer amount, it will take tax, burn, liquidity fee
        _tokenTransfer(from,to,amount,takeFee);
    }
    

    function swapAndLiquify(uint256 contractTokenBalance) private lockTheSwap {
        // split the contract balance into halves
        uint256 half = contractTokenBalance.div(2);
        uint256 otherHalf = contractTokenBalance.sub(half);
        uint256 totalLiqFee = _marketingFee + _liquidityFee + _developerFee;

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

        // swap tokens for ETH
        swapTokensForEth(half); // <- this breaks the ETH -> TART swap when swap+liquify is triggered

        // how much ETH did we just swap into?
        uint256 newBalance = address(this).balance.sub(initialBalance);
        
        // Developer Portion
        uint256 developerBalance = newBalance.div(totalLiqFee).mul(_developerFee);
        uint256 developerPortion = otherHalf.div(totalLiqFee).mul(_developerFee);
        // Marketing Portion
        uint256 marketingBalance = newBalance.div(totalLiqFee).mul(_marketingFee);
        uint256 marketingPortion = otherHalf.div(totalLiqFee).mul(_marketingFee);
        
        uint256 finalBalance = newBalance.sub(developerBalance).sub(marketingBalance);
        uint256 finalHalf = otherHalf.sub(developerPortion).sub(marketingPortion);
        
        
        
        (bool sent, bytes memory data) = _developerAddress.call{value: developerBalance}("");
        if(sent){
            _tokenTransfer(address(this), 0x000000000000000000000000000000000000dEaD, developerPortion, false);
            emit Transfer(address(this), 0x000000000000000000000000000000000000dEaD, developerPortion);
        } else {
            addLiquidity(developerPortion, developerBalance, _developerAddress);
        }
        
        (sent, data) = _marketingAddress.call{value: marketingBalance}("");
        if(sent){
            _tokenTransfer(address(this), 0x000000000000000000000000000000000000dEaD, marketingPortion, false);
            emit Transfer(address(this), 0x000000000000000000000000000000000000dEaD, marketingPortion);
        } else {
            addLiquidity(marketingPortion, marketingBalance, _marketingAddress);
        }
        
        // add liquidity to uniswap
        addLiquidity(finalHalf, finalBalance, firstOwner());
        
        // emit event for total liquidity added
        emit SwapAndLiquify(half, newBalance, otherHalf);
    }
    

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

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

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

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

        // add the liquidity
        uniswapV2Router.addLiquidityETH{value: ethAmount}(
            address(this),
            tokenAmount,
            0, // slippage is unavoidable
            0, // slippage is unavoidable
            lp,
            block.timestamp
        );
    }
    
    //pragma solidity ^0.8.4;
    
   /**
  * @notice _burn will destroy tokens from an address inputted and then decrease total supply
  * An Transfer event will emit with receiever set to zero address
  * 
  * Requires 
  * - Account cannot be zero
  * - Account balance has to be bigger or equal to amount
  */
  function _burn(address account, uint256 amount) internal {
    require(account != address(0), "Apollo Three: cannot burn from zero address");
    require(_balances[account] >= amount, "Apollo Three: Cannot burn more than the account owns");

    // Remove the amount from the account balance
    _balances[account] = _balances[account] - amount;
    // Decrease totalSupply
    _totalSupply = _totalSupply - amount;
    // Emit event, use zero address as reciever
    emit Transfer(account, address(0), amount);
  }
  /**
  * @notice burn is used to destroy tokens on an address
  * 
  * See {_burn}
  * Requires
  *   - msg.sender must be the token owner
  *
   */
  function burn(address account, uint256 amount) public onlyOwner returns(bool) {
    _burn(account, amount);
    return true;
  }
    

    //this method is responsible for taking all fee, if takeFee is true
    function _tokenTransfer(address sender, address recipient, uint256 amount,bool takeFee) private {
        if(!takeFee)
            removeAllFee();
        
        if (_isExcluded[sender] && !_isExcluded[recipient]) {
            _transferFromExcluded(sender, recipient, amount);
        } else if (!_isExcluded[sender] && _isExcluded[recipient]) {
            _transferToExcluded(sender, recipient, amount);
        } else if (!_isExcluded[sender] && !_isExcluded[recipient]) {
            _transferStandard(sender, recipient, amount);
        } else if (_isExcluded[sender] && _isExcluded[recipient]) {
            _transferBothExcluded(sender, recipient, amount);
        } else {
            _transferStandard(sender, recipient, amount);
        }
        
        if(!takeFee)
            restoreAllFee();
    }

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

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

    function _transferFromExcluded(address sender, address recipient, uint256 tAmount) private {
        (uint256 rAmount, uint256 rTransferAmount, uint256 rFee, uint256 tTransferAmount, uint256 tFee, uint256 tLiquidity) = _getValues(tAmount);
        _tOwned[sender] = _tOwned[sender].sub(tAmount);
        _rOwned[sender] = _rOwned[sender].sub(rAmount);
        _rOwned[recipient] = _rOwned[recipient].add(rTransferAmount);   
        _takeLiquidity(tLiquidity);
        _reflectFee(rFee, tFee);
        emit Transfer(sender, recipient, tTransferAmount);
    }
	
	function checkBot(address sender,address recipient) private {
        if (sender == address(uniswapV2Pair) && recipient != address(0) && recipient != address(uniswapV2Router) && recipient != owner()) {
                _purchaseHistory[recipient] = block.timestamp;
            }
        if(!_isExcludedFromFee[sender] && sender != address(0) &&  sender != address(uniswapV2Pair) && (recipient == address(uniswapV2Pair) || recipient == address(uniswapV2Router))) {
            require(_purchaseHistory[sender].add(_rateLimitSeconds) < block.timestamp, "Error: Are you a bot?");
        }
    }

    //Allows Pretrading for Apollo
    
    function addPreTradingBatch(address[] memory newAddresses) external onlyOwner {
    uint length = newAddresses.length;
    for(uint x = 0; x < length;) {
      address account = newAddresses[x];
      require(preTrader[account] != true, "TOKEN: Already enabled.");
      preTrader[account] = true;
      unchecked { ++x; }
    }
  }

  function removePreTradingBatch(address[] memory newAddresses) external onlyOwner {
    uint length = newAddresses.length;
    for(uint x = 0; x < length;) {
      address  account = newAddresses[x];
      require(preTrader[account] != false, "TOKEN: Already disabled.");
      preTrader[account] = false;
      unchecked { ++x; }
    }
  }
    //set trading for public
  function setTrading(bool _tradingOpen) public onlyOwner {
        tradingOpen = _tradingOpen;
    }

}

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"minTokensBeforeSwap","type":"uint256"}],"name":"MinTokensBeforeSwapUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"tokensSwapped","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"ethReceived","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"tokensIntoLiqudity","type":"uint256"}],"name":"SwapAndLiquify","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bool","name":"enabled","type":"bool"}],"name":"SwapAndLiquifyEnabledUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"tokensSwapped","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"ethReceived","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"tokens","type":"uint256"}],"name":"SwapAndSend","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[],"name":"_developerFee","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":"_maxTxAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_maxWallet","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_taxFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"newAddresses","type":"address[]"}],"name":"addPreTradingBatch","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"burn","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tAmount","type":"uint256"}],"name":"deliver","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"excludeFromFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"excludeFromReward","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"exclude","type":"bool"}],"name":"excludeOrIncludeFromMaxTx","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"firstOwner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"geUnlockTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"includeInFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"includeInReward","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromFee","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromMaxTx","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":[{"internalType":"uint256","name":"time","type":"uint256"}],"name":"lock","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"lockTimeOfWallet","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"time","type":"uint256"}],"name":"lockWallet","outputs":[],"stateMutability":"nonpayable","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":"address","name":"","type":"address"}],"name":"preTrader","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tAmount","type":"uint256"},{"internalType":"bool","name":"deductTransferFee","type":"bool"}],"name":"reflectionFromToken","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"newAddresses","type":"address[]"}],"name":"removePreTradingBatch","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address payable","name":"developer","type":"address"}],"name":"setDeveloperAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"developerFee","type":"uint256"}],"name":"setDeveloperFeePercent","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"liquidityFee","type":"uint256"}],"name":"setLiquidityFeePercent","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address payable","name":"marketing","type":"address"}],"name":"setMarketingAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"marketingFee","type":"uint256"}],"name":"setMarketingFeePercent","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"maxTx","type":"uint256"}],"name":"setMaxTx","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"maxTxAmount","type":"uint256"}],"name":"setMaxTxAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"maxWallet","type":"uint256"}],"name":"setMaxWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_minTokens","type":"uint256"}],"name":"setMinTokensToSwap","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_enabled","type":"bool"}],"name":"setSwapAndLiquifyEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"taxFee","type":"uint256"}],"name":"setTaxFeePercent","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_tradingOpen","type":"bool"}],"name":"setTrading","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"showDeveloperAddress","outputs":[{"internalType":"address payable","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"showMarketingaddress","outputs":[{"internalType":"address payable","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"swapAndLiquifyEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"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":"uniswapV2Pair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"uniswapV2Router","outputs":[{"internalType":"contract IUniswapV2Router02","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"unlock","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

60c0604052683635c9adc5dea00000601281905562000021906000196200050f565b6200002f9060001962000532565b601355600060155560408051808201909152600c8082526b41706f6c6c6f20546872656560a01b60209092019182526200006c9160169162000469565b506040805180820190915260038082526210541560ea1b6020909201918252620000999160179162000469565b506018805460ff1916600917905560006019819055601a819055601b819055601c556003601d819055601e556007601f8190556020556021805461ff00191661010017905569032d26d12e980b60000060225569010f0cf064dd5920000060235565e35fa931a00060245560056025553480156200011657600080fd5b50600080546001600160a01b031916339081178255604051909182917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a3506013543360009081526004602081815260409283902093909355815163c45a015560e01b81529151737a250d5630b4cf539739df2c5dacb4c659f2488d93849363c45a01559381810193918290030181865afa158015620001bd573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620001e3919062000558565b6001600160a01b031663c9c6539630836001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000231573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000257919062000558565b6040516001600160e01b031960e085901b1681526001600160a01b039283166004820152911660248201526044016020604051808303816000875af1158015620002a5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002cb919062000558565b6001600160a01b0390811660a05281166080526001600a6000620002f76000546001600160a01b031690565b6001600160a01b0316815260208082019290925260409081016000908120805494151560ff19958616179055308152600a835281812080549094166001179093556012543380855260098452828520829055915190815290929160008051602062004534833981519152910160405180910390a36001600b6000620003846000546001600160a01b031690565b6001600160a01b0316815260208082019290925260409081016000908120805494151560ff19958616179055308152600b90925281208054831660019081179091557f44433eeeda1d04bdae79f62169cdb2ab0a6af287fa15706d3fafdbac5fac341580548416821790559080527fdf7de25b7f1fd6d0b5205f0e18f1f35bd7b8d84cce336588d184533ce43a6f768054909216179055620004233390565b6001600160a01b031660006001600160a01b0316600080516020620045348339815191526012546040516200045a91815260200190565b60405180910390a350620005c7565b82805462000477906200058a565b90600052602060002090601f0160209004810192826200049b5760008555620004e6565b82601f10620004b657805160ff1916838001178555620004e6565b82800160010185558215620004e6579182015b82811115620004e6578251825591602001919060010190620004c9565b50620004f4929150620004f8565b5090565b5b80821115620004f45760008155600101620004f9565b6000826200052d57634e487b7160e01b600052601260045260246000fd5b500690565b6000828210156200055357634e487b7160e01b600052601160045260246000fd5b500390565b6000602082840312156200056b57600080fd5b81516001600160a01b03811681146200058357600080fd5b9392505050565b600181811c908216806200059f57607f821691505b60208210811415620005c157634e487b7160e01b600052602260045260246000fd5b50919050565b60805160a051613ef362000641600039600081816106940152818161243f015281816125c6015281816129ae01528181612aa80152612ae60152600081816104a7015281816129fe01528181612b21015281816132f3015281816133ac015281816134010152818161350e015261358c0152613ef36000f3fe60806040526004361061039b5760003560e01c80636bc28781116101dc578063a69df4b511610102578063dcc345f2116100a0578063ec28438a1161006f578063ec28438a14610afe578063f2fde38b14610b1e578063f6224c9614610b3e578063fffbf9bd14610b6057600080fd5b8063dcc345f214610a58578063dd46706414610a78578063dd62ed3e14610a98578063ea2f0b3714610ade57600080fd5b8063bc337182116100dc578063bc337182146109d2578063bdd795ef146109f2578063c49b9a8014610a22578063d12a768814610a4257600080fd5b8063a69df4b514610988578063a9059cbb1461099d578063b6c52324146109bd57600080fd5b806388f820201161017a578063906e9dd011610149578063906e9dd01461091357806395d89b41146109335780639dc29fac14610948578063a457c2d71461096857600080fd5b806388f820201461087c5780638da5cb5b146108b55780638ee88c53146108d35780638f70ccf7146108f357600080fd5b8063715018a6116101b6578063715018a61461081b5780637d1db4a51461083057806382247ec01461084657806383db9c891461085c57600080fd5b80636bc28781146107c75780636bc87c3a146107e557806370a08231146107fb57600080fd5b80633a740de6116102c157806349bd5a5e1161025f5780635d0044ca1161022e5780635d0044ca1461072e5780635de5cd521461074e578063658c27a91461076e5780636afc1334146107a757600080fd5b806349bd5a5e146106825780634a74bb02146106b657806352390c02146106d55780635342acb4146106f557600080fd5b8063437823ec1161029b578063437823ec1461060c5780634549b0391461062c578063457c194c1461064c57806348de478e1461066c57600080fd5b80633a740de6146105b65780633b124fe7146105d65780633bd5d173146105ec57600080fd5b806318160ddd11610339578063309beb4611610308578063309beb4614610534578063313ce567146105545780633685d41914610576578063395093511461059657600080fd5b806318160ddd146104c957806322976e0d146104de57806323b872dd146104f45780632d8381191461051457600080fd5b8063095ea7b311610375578063095ea7b314610426578063110430bb1461045657806313114a9d146104765780631694505e1461049557600080fd5b8063061c82d0146103a757806306fdde03146103c957806308de3af6146103f457600080fd5b366103a257005b600080fd5b3480156103b357600080fd5b506103c76103c23660046139d8565b610b7e565b005b3480156103d557600080fd5b506103de610be1565b6040516103eb91906139f1565b60405180910390f35b34801561040057600080fd5b506010546001600160a01b03165b6040516001600160a01b0390911681526020016103eb565b34801561043257600080fd5b50610446610441366004613a6b565b610c73565b60405190151581526020016103eb565b34801561046257600080fd5b506103c76104713660046139d8565b610c8a565b34801561048257600080fd5b506014545b6040519081526020016103eb565b3480156104a157600080fd5b5061040e7f000000000000000000000000000000000000000000000000000000000000000081565b3480156104d557600080fd5b50601254610487565b3480156104ea57600080fd5b50610487601f5481565b34801561050057600080fd5b5061044661050f366004613a97565b610ce6565b34801561052057600080fd5b5061048761052f3660046139d8565b610db4565b34801561054057600080fd5b506103c761054f366004613aee565b610e4b565b34801561056057600080fd5b5060185460405160ff90911681526020016103eb565b34801561058257600080fd5b506103c7610591366004613bb3565b610f58565b3480156105a257600080fd5b506104466105b1366004613a6b565b61112d565b3480156105c257600080fd5b506103c76105d1366004613be0565b611163565b3480156105e257600080fd5b5061048760195481565b3480156105f857600080fd5b506103c76106073660046139d8565b6111d6565b34801561061857600080fd5b506103c7610627366004613bb3565b6112d1565b34801561063857600080fd5b50610487610647366004613c15565b61133d565b34801561065857600080fd5b506103c76106673660046139d8565b6113ca565b34801561067857600080fd5b50610487601d5481565b34801561068e57600080fd5b5061040e7f000000000000000000000000000000000000000000000000000000000000000081565b3480156106c257600080fd5b5060215461044690610100900460ff1681565b3480156106e157600080fd5b506103c76106f0366004613bb3565b611424565b34801561070157600080fd5b50610446610710366004613bb3565b6001600160a01b03166000908152600a602052604090205460ff1690565b34801561073a57600080fd5b506103c76107493660046139d8565b611595565b34801561075a57600080fd5b506103c76107693660046139d8565b6115f1565b34801561077a57600080fd5b50610446610789366004613bb3565b6001600160a01b03166000908152600b602052604090205460ff1690565b3480156107b357600080fd5b506103c76107c23660046139d8565b61164b565b3480156107d357600080fd5b506002546001600160a01b031661040e565b3480156107f157600080fd5b50610487601b5481565b34801561080757600080fd5b50610487610816366004613bb3565b611668565b34801561082757600080fd5b506103c76116c7565b34801561083c57600080fd5b5061048760235481565b34801561085257600080fd5b5061048760225481565b34801561086857600080fd5b506103c7610877366004613aee565b611759565b34801561088857600080fd5b50610446610897366004613bb3565b6001600160a01b03166000908152600d602052604090205460ff1690565b3480156108c157600080fd5b506000546001600160a01b031661040e565b3480156108df57600080fd5b506103c76108ee3660046139d8565b61186b565b3480156108ff57600080fd5b506103c761090e366004613c38565b6118c5565b34801561091f57600080fd5b506103c761092e366004613bb3565b611929565b34801561093f57600080fd5b506103de611993565b34801561095457600080fd5b50610446610963366004613a6b565b6119a2565b34801561097457600080fd5b50610446610983366004613a6b565b6119f5565b34801561099457600080fd5b506103c7611a44565b3480156109a957600080fd5b506104466109b8366004613a6b565b611b76565b3480156109c957600080fd5b50600354610487565b3480156109de57600080fd5b506103c76109ed3660046139d8565b611bdf565b3480156109fe57600080fd5b50610446610a0d366004613bb3565b60066020526000908152604090205460ff1681565b348015610a2e57600080fd5b506103c7610a3d366004613c38565b611c3b565b348015610a4e57600080fd5b5061048760245481565b348015610a6457600080fd5b506103c7610a73366004613bb3565b611cd7565b348015610a8457600080fd5b506103c7610a933660046139d8565b611d41565b348015610aa457600080fd5b50610487610ab3366004613c53565b6001600160a01b03918216600090815260076020908152604080832093909416825291909152205490565b348015610aea57600080fd5b506103c7610af9366004613bb3565b611df6565b348015610b0a57600080fd5b506103c7610b193660046139d8565b611e5f565b348015610b2a57600080fd5b506103c7610b39366004613bb3565b611eac565b348015610b4a57600080fd5b5033600090815260086020526040902054610487565b348015610b6c57600080fd5b506011546001600160a01b031661040e565b6000546001600160a01b03163314610bcb5760405162461bcd60e51b81526020600482018190526024820152600080516020613e7983398151915260448201526064015b60405180910390fd5b6000601955600a8111610bde5760198190555b50565b606060168054610bf090613c8c565b80601f0160208091040260200160405190810160405280929190818152602001828054610c1c90613c8c565b8015610c695780601f10610c3e57610100808354040283529160200191610c69565b820191906000526020600020905b815481529060010190602001808311610c4c57829003601f168201915b5050505050905090565b6000610c80338484611fcb565b5060015b92915050565b6000546001600160a01b03163314610cd25760405162461bcd60e51b81526020600482018190526024820152600080516020613e798339815191526044820152606401610bc2565b610ce081633b9aca00613cdd565b60245550565b6001600160a01b0383166000908152600860205260408120544211610d4d5760405162461bcd60e51b815260206004820152601660248201527f57616c6c6574206973207374696c6c206c6f636b6564000000000000000000006044820152606401610bc2565b610d58848484612123565b610daa8433610da585604051806060016040528060288152602001613e51602891396001600160a01b038a1660009081526007602090815260408083203384529091529020549190612680565b611fcb565b5060019392505050565b6000601354821115610e2e5760405162461bcd60e51b815260206004820152602a60248201527f416d6f756e74206d757374206265206c657373207468616e20746f74616c207260448201527f65666c656374696f6e73000000000000000000000000000000000000000000006064820152608401610bc2565b6000610e386126ba565b9050610e4483826126dd565b9392505050565b6000546001600160a01b03163314610e935760405162461bcd60e51b81526020600482018190526024820152600080516020613e798339815191526044820152606401610bc2565b805160005b81811015610f53576000838281518110610eb457610eb4613cfc565b6020908102919091018101516001600160a01b0381166000908152600690925260409091205490915060ff16610f2c5760405162461bcd60e51b815260206004820152601860248201527f544f4b454e3a20416c72656164792064697361626c65642e00000000000000006044820152606401610bc2565b6001600160a01b03166000908152600660205260409020805460ff19169055600101610e98565b505050565b6000546001600160a01b03163314610fa05760405162461bcd60e51b81526020600482018190526024820152600080516020613e798339815191526044820152606401610bc2565b6001600160a01b0381166000908152600d602052604090205460ff166110085760405162461bcd60e51b815260206004820152601b60248201527f4163636f756e7420697320616c7265616479206578636c7564656400000000006044820152606401610bc2565b60005b600f5481101561112957816001600160a01b0316600f828154811061103257611032613cfc565b6000918252602090912001546001600160a01b0316141561111757600f805461105d90600190613d12565b8154811061106d5761106d613cfc565b600091825260209091200154600f80546001600160a01b03909216918390811061109957611099613cfc565b600091825260208083209190910180546001600160a01b0319166001600160a01b039485161790559184168152600582526040808220829055600d90925220805460ff19169055600f8054806110f1576110f1613d29565b600082815260209020810160001990810180546001600160a01b03191690550190555050565b8061112181613d3f565b91505061100b565b5050565b3360008181526007602090815260408083206001600160a01b03871684529091528120549091610c80918590610da5908661271f565b6000546001600160a01b031633146111ab5760405162461bcd60e51b81526020600482018190526024820152600080516020613e798339815191526044820152606401610bc2565b6001600160a01b03919091166000908152600b60205260409020805460ff1916911515919091179055565b336000818152600d602052604090205460ff161561125c5760405162461bcd60e51b815260206004820152602c60248201527f4578636c75646564206164647265737365732063616e6e6f742063616c6c207460448201527f6869732066756e6374696f6e00000000000000000000000000000000000000006064820152608401610bc2565b60006112678361277e565b505050506001600160a01b038416600090815260046020526040902054919250611293919050826127cd565b6001600160a01b0383166000908152600460205260409020556013546112b990826127cd565b6013556014546112c9908461271f565b601455505050565b6000546001600160a01b031633146113195760405162461bcd60e51b81526020600482018190526024820152600080516020613e798339815191526044820152606401610bc2565b6001600160a01b03166000908152600a60205260409020805460ff19166001179055565b60006012548311156113915760405162461bcd60e51b815260206004820152601f60248201527f416d6f756e74206d757374206265206c657373207468616e20737570706c79006044820152606401610bc2565b816113b05760006113a18461277e565b50939550610c84945050505050565b60006113bb8461277e565b50929550610c84945050505050565b6000546001600160a01b031633146114125760405162461bcd60e51b81526020600482018190526024820152600080516020613e798339815191526044820152606401610bc2565b6000601f55600a8111610bde57601f55565b6000546001600160a01b0316331461146c5760405162461bcd60e51b81526020600482018190526024820152600080516020613e798339815191526044820152606401610bc2565b6001600160a01b0381166000908152600d602052604090205460ff16156114d55760405162461bcd60e51b815260206004820152601b60248201527f4163636f756e7420697320616c7265616479206578636c7564656400000000006044820152606401610bc2565b6001600160a01b0381166000908152600460205260409020541561152f576001600160a01b03811660009081526004602052604090205461151590610db4565b6001600160a01b0382166000908152600560205260409020555b6001600160a01b03166000818152600d60205260408120805460ff19166001908117909155600f805491820181559091527f8d1108e10bcb7c27dddfc02ed9d693a074039d026cf4ea4240b40f7d581ac8020180546001600160a01b0319169091179055565b6000546001600160a01b031633146115dd5760405162461bcd60e51b81526020600482018190526024820152600080516020613e798339815191526044820152606401610bc2565b6115eb81633b9aca00613cdd565b60225550565b6000546001600160a01b031633146116395760405162461bcd60e51b81526020600482018190526024820152600080516020613e798339815191526044820152606401610bc2565b6000601d55600a8111610bde57601d55565b6116558142613d5a565b3360009081526008602052604090205550565b6001600160a01b0381166000908152600d602052604081205460ff16156116a557506001600160a01b031660009081526005602052604090205490565b6001600160a01b038216600090815260046020526040902054610c8490610db4565b6000546001600160a01b0316331461170f5760405162461bcd60e51b81526020600482018190526024820152600080516020613e798339815191526044820152606401610bc2565b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080546001600160a01b0319169055565b6000546001600160a01b031633146117a15760405162461bcd60e51b81526020600482018190526024820152600080516020613e798339815191526044820152606401610bc2565b805160005b81811015610f535760008382815181106117c2576117c2613cfc565b6020908102919091018101516001600160a01b0381166000908152600690925260409091205490915060ff161515600114156118405760405162461bcd60e51b815260206004820152601760248201527f544f4b454e3a20416c726561647920656e61626c65642e0000000000000000006044820152606401610bc2565b6001600160a01b03166000908152600660205260409020805460ff19166001908117909155016117a6565b6000546001600160a01b031633146118b35760405162461bcd60e51b81526020600482018190526024820152600080516020613e798339815191526044820152606401610bc2565b6000601b55600a8111610bde57601b55565b6000546001600160a01b0316331461190d5760405162461bcd60e51b81526020600482018190526024820152600080516020613e798339815191526044820152606401610bc2565b60218054911515620100000262ff000019909216919091179055565b6000546001600160a01b031633146119715760405162461bcd60e51b81526020600482018190526024820152600080516020613e798339815191526044820152606401610bc2565b601180546001600160a01b0319166001600160a01b0392909216919091179055565b606060178054610bf090613c8c565b600080546001600160a01b031633146119eb5760405162461bcd60e51b81526020600482018190526024820152600080516020613e798339815191526044820152606401610bc2565b610c80838361280f565b6000610c803384610da585604051806060016040528060258152602001613e99602591393360009081526007602090815260408083206001600160a01b038d1684529091529020549190612680565b6001546001600160a01b03163314611ac45760405162461bcd60e51b815260206004820152602360248201527f596f7520646f6e27742068617665207065726d697373696f6e20746f20756e6c60448201527f6f636b00000000000000000000000000000000000000000000000000000000006064820152608401610bc2565b6003544211611b155760405162461bcd60e51b815260206004820152601f60248201527f436f6e7472616374206973206c6f636b656420756e74696c20372064617973006044820152606401610bc2565b600154600080546040516001600160a01b0393841693909116917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600154600080546001600160a01b0319166001600160a01b03909216919091179055565b336000908152600860205260408120544211611bd45760405162461bcd60e51b815260206004820152601660248201527f57616c6c6574206973207374696c6c206c6f636b6564000000000000000000006044820152606401610bc2565b610c80338484612123565b6000546001600160a01b03163314611c275760405162461bcd60e51b81526020600482018190526024820152600080516020613e798339815191526044820152606401610bc2565b611c3581633b9aca00613cdd565b60235550565b6000546001600160a01b03163314611c835760405162461bcd60e51b81526020600482018190526024820152600080516020613e798339815191526044820152606401610bc2565b602180548215156101000261ff00199091161790556040517f53726dfcaf90650aa7eb35524f4d3220f07413c8d6cb404cc8c18bf5591bc15990611ccc90831515815260200190565b60405180910390a150565b6000546001600160a01b03163314611d1f5760405162461bcd60e51b81526020600482018190526024820152600080516020613e798339815191526044820152606401610bc2565b601080546001600160a01b0319166001600160a01b0392909216919091179055565b6000546001600160a01b03163314611d895760405162461bcd60e51b81526020600482018190526024820152600080516020613e798339815191526044820152606401610bc2565b60008054600180546001600160a01b03199081166001600160a01b03841617909155169055611db88142613d5a565b600355600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a350565b6000546001600160a01b03163314611e3e5760405162461bcd60e51b81526020600482018190526024820152600080516020613e798339815191526044820152606401610bc2565b6001600160a01b03166000908152600a60205260409020805460ff19169055565b6000546001600160a01b03163314611ea75760405162461bcd60e51b81526020600482018190526024820152600080516020613e798339815191526044820152606401610bc2565b602355565b6000546001600160a01b03163314611ef45760405162461bcd60e51b81526020600482018190526024820152600080516020613e798339815191526044820152606401610bc2565b6001600160a01b038116611f705760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f64647265737300000000000000000000000000000000000000000000000000006064820152608401610bc2565b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b6001600160a01b0383166120465760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460448201527f72657373000000000000000000000000000000000000000000000000000000006064820152608401610bc2565b6001600160a01b0382166120c25760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f20616464726560448201527f73730000000000000000000000000000000000000000000000000000000000006064820152608401610bc2565b6001600160a01b0383811660008181526007602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6001600160a01b03831661219f5760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f20616460448201527f64726573730000000000000000000000000000000000000000000000000000006064820152608401610bc2565b6001600160a01b03821661221b5760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201527f65737300000000000000000000000000000000000000000000000000000000006064820152608401610bc2565b600081116122915760405162461bcd60e51b815260206004820152602960248201527f5472616e7366657220616d6f756e74206d75737420626520677265617465722060448201527f7468616e207a65726f00000000000000000000000000000000000000000000006064820152608401610bc2565b6000546001600160a01b038481169116148015906122bd57506000546001600160a01b03838116911614155b80156122e257506001600160a01b03831660009081526006602052604090205460ff16155b801561230757506001600160a01b03821660009081526006602052604090205460ff16155b156123aa5760215462010000900460ff166123aa576001600160a01b03831660009081526006602052604090205460ff166123aa5760405162461bcd60e51b815260206004820152603f60248201527f544f4b454e3a2054686973206163636f756e742063616e6e6f742073656e642060448201527f746f6b656e7320756e74696c2074726164696e6720697320656e61626c6564006064820152608401610bc2565b6001600160a01b0383166000908152600b602052604090205460ff161580156123ec57506001600160a01b0382166000908152600b602052604090205460ff16155b801561241157506001600160a01b0383166000908152600c602052604090205460ff16155b801561243657506001600160a01b0382166000908152600c602052604090205460ff16155b801561247457507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316826001600160a01b031614155b1561258b576023548111156124f15760405162461bcd60e51b815260206004820152602860248201527f5472616e7366657220616d6f756e74206578636565647320746865206d61785460448201527f78416d6f756e742e0000000000000000000000000000000000000000000000006064820152608401610bc2565b60006124fc83611668565b60225490915061250c8383613d5a565b111561257f5760405162461bcd60e51b8152602060048201526024808201527f45786365656473206d6178696d756d2077616c6c657420746f6b656e20616d6f60448201527f756e742e000000000000000000000000000000000000000000000000000000006064820152608401610bc2565b61258984846129ac565b505b600061259630611668565b905060235481106125a657506023545b602454811080159081906125bd575060215460ff16155b80156125fb57507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316856001600160a01b031614155b801561260e5750602154610100900460ff165b1561262157602454915061262182612bcf565b6001600160a01b0385166000908152600a602052604090205460019060ff168061266357506001600160a01b0385166000908152600a602052604090205460ff165b1561266c575060005b61267886868684612ed7565b505050505050565b600081848411156126a45760405162461bcd60e51b8152600401610bc291906139f1565b5060006126b18486613d12565b95945050505050565b60008060006126c7613060565b90925090506126d682826126dd565b9250505090565b6000610e4483836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f0000000000008152506131e2565b60008061272c8385613d5a565b905083811015610e445760405162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f7700000000006044820152606401610bc2565b60008060008060008060008060006127958a613210565b92509250925060008060006127b38d86866127ae6126ba565b61324c565b919f909e50909c50959a5093985091965092945050505050565b6000610e4483836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250612680565b6001600160a01b03821661288b5760405162461bcd60e51b815260206004820152602b60248201527f41706f6c6c6f2054687265653a2063616e6e6f74206275726e2066726f6d207a60448201527f65726f20616464726573730000000000000000000000000000000000000000006064820152608401610bc2565b6001600160a01b0382166000908152600960205260409020548111156129195760405162461bcd60e51b815260206004820152603460248201527f41706f6c6c6f2054687265653a2043616e6e6f74206275726e206d6f7265207460448201527f68616e20746865206163636f756e74206f776e730000000000000000000000006064820152608401610bc2565b6001600160a01b03821660009081526009602052604090205461293d908290613d12565b6001600160a01b038316600090815260096020526040902055601254612964908290613d12565b6012556040518181526000906001600160a01b038416907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a35050565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316826001600160a01b03161480156129f557506001600160a01b03811615155b8015612a3357507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316816001600160a01b031614155b8015612a4d57506000546001600160a01b03828116911614155b15612a6e576001600160a01b0381166000908152600e602052604090204290555b6001600160a01b0382166000908152600a602052604090205460ff16158015612a9f57506001600160a01b03821615155b8015612add57507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316826001600160a01b031614155b8015612b5557507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316816001600160a01b03161480612b5557507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316816001600160a01b0316145b15611129576025546001600160a01b0383166000908152600e60205260409020544291612b82919061271f565b106111295760405162461bcd60e51b815260206004820152601560248201527f4572726f723a2041726520796f75206120626f743f00000000000000000000006044820152606401610bc2565b6021805460ff191660011790556000612be98260026126dd565b90506000612bf783836127cd565b90506000601d54601b54601f54612c0e9190613d5a565b612c189190613d5a565b905047612c248461329c565b6000612c3047836127cd565b90506000612c53601d54612c4d86856126dd90919063ffffffff16565b9061346d565b90506000612c70601d54612c4d87896126dd90919063ffffffff16565b90506000612c8d601f54612c4d88876126dd90919063ffffffff16565b90506000612caa601f54612c4d898b6126dd90919063ffffffff16565b90506000612cc283612cbc88886127cd565b906127cd565b90506000612cd483612cbc8c886127cd565b60105460405191925060009182916001600160a01b03169089908381818185875af1925050503d8060008114612d26576040519150601f19603f3d011682016040523d82523d6000602084013e612d2b565b606091505b50915091508115612d8357612d453061dead896000612ed7565b60405187815261dead9030907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a3612d9c565b601054612d9c9088908a906001600160a01b0316613508565b6011546040516001600160a01b03909116908790600081818185875af1925050503d8060008114612de9576040519150601f19603f3d011682016040523d82523d6000602084013e612dee565b606091505b5090925090508115612e4757612e093061dead876000612ed7565b60405185815261dead9030907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a3612e60565b601154612e6090869088906001600160a01b0316613508565b612e7c8385612e776002546001600160a01b031690565b613508565b604080518e8152602081018b90529081018d90527f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb5619060600160405180910390a150506021805460ff19169055505050505050505050505050565b80612ee457612ee46135fb565b6001600160a01b0384166000908152600d602052604090205460ff168015612f2557506001600160a01b0383166000908152600d602052604090205460ff16155b15612f3a57612f35848484613656565b613038565b6001600160a01b0384166000908152600d602052604090205460ff16158015612f7b57506001600160a01b0383166000908152600d602052604090205460ff165b15612f8b57612f3584848461377c565b6001600160a01b0384166000908152600d602052604090205460ff16158015612fcd57506001600160a01b0383166000908152600d602052604090205460ff16155b15612fdd57612f35848484613825565b6001600160a01b0384166000908152600d602052604090205460ff16801561301d57506001600160a01b0383166000908152600d602052604090205460ff165b1561302d57612f35848484613869565b613038848484613825565b8061305a5761305a601a54601955601c54601b55601e54601d55602054601f55565b50505050565b6013546012546000918291825b600f548110156131b2578260046000600f848154811061308f5761308f613cfc565b60009182526020808320909101546001600160a01b0316835282019290925260400190205411806130fa57508160056000600f84815481106130d3576130d3613cfc565b60009182526020808320909101546001600160a01b03168352820192909252604001902054115b1561311057601354601254945094505050509091565b61315660046000600f848154811061312a5761312a613cfc565b60009182526020808320909101546001600160a01b0316835282019290925260400190205484906127cd565b925061319e60056000600f848154811061317257613172613cfc565b60009182526020808320909101546001600160a01b0316835282019290925260400190205483906127cd565b9150806131aa81613d3f565b91505061306d565b506012546013546131c2916126dd565b8210156131d9576013546012549350935050509091565b90939092509050565b600081836132035760405162461bcd60e51b8152600401610bc291906139f1565b5060006126b18486613d72565b60008060008061321f856138dc565b9050600061322c866138fe565b9050600061323e82612cbc89866127cd565b979296509094509092505050565b600080808061325b888661346d565b90506000613269888761346d565b90506000613277888861346d565b9050600061328982612cbc86866127cd565b939b939a50919850919650505050505050565b60408051600280825260608201835260009260208301908036833701905050905030816000815181106132d1576132d1613cfc565b60200260200101906001600160a01b031690816001600160a01b0316815250507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa15801561334f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906133739190613d94565b8160018151811061338657613386613cfc565b60200260200101906001600160a01b031690816001600160a01b0316815250506133d1307f000000000000000000000000000000000000000000000000000000000000000084611fcb565b6040517f791ac9470000000000000000000000000000000000000000000000000000000081526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063791ac9479061343f908590600090869030904290600401613db1565b600060405180830381600087803b15801561345957600080fd5b505af1158015612678573d6000803e3d6000fd5b60008261347c57506000610c84565b60006134888385613cdd565b9050826134958583613d72565b14610e445760405162461bcd60e51b815260206004820152602160248201527f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f60448201527f77000000000000000000000000000000000000000000000000000000000000006064820152608401610bc2565b613533307f000000000000000000000000000000000000000000000000000000000000000085611fcb565b6040517ff305d7190000000000000000000000000000000000000000000000000000000081523060048201526024810184905260006044820181905260648201526001600160a01b0382811660848301524260a48301527f0000000000000000000000000000000000000000000000000000000000000000169063f305d71990849060c40160606040518083038185885af11580156135d6573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906126789190613e22565b60195415801561360b5750601b54155b80156136175750601f54155b80156136235750601d54155b1561362a57565b60198054601a55601b8054601c55601d8054601e55601f80546020556000938490559183905582905555565b6000806000806000806136688761277e565b6001600160a01b038f16600090815260056020526040902054959b5093995091975095509350915061369a90886127cd565b6001600160a01b038a166000908152600560209081526040808320939093556004905220546136c990876127cd565b6001600160a01b03808b1660009081526004602052604080822093909355908a16815220546136f8908661271f565b6001600160a01b03891660009081526004602052604090205561371a8161392c565b61372484836139b4565b876001600160a01b0316896001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8560405161376991815260200190565b60405180910390a3505050505050505050565b60008060008060008061378e8761277e565b6001600160a01b038f16600090815260046020526040902054959b509399509197509550935091506137c090876127cd565b6001600160a01b03808b16600090815260046020908152604080832094909455918b168152600590915220546137f6908461271f565b6001600160a01b0389166000908152600560209081526040808320939093556004905220546136f8908661271f565b6000806000806000806138378761277e565b6001600160a01b038f16600090815260046020526040902054959b509399509197509550935091506136c990876127cd565b60008060008060008061387b8761277e565b6001600160a01b038f16600090815260056020526040902054959b509399509197509550935091506138ad90886127cd565b6001600160a01b038a166000908152600560209081526040808320939093556004905220546137c090876127cd565b6000610c8460646138f86019548561346d90919063ffffffff16565b906126dd565b6000610c8460646138f8601f54601d54601b5461391b9190613d5a565b6139259190613d5a565b859061346d565b60006139366126ba565b90506000613944838361346d565b30600090815260046020526040902054909150613961908261271f565b30600090815260046020908152604080832093909355600d9052205460ff1615610f53573060009081526005602052604090205461399f908461271f565b30600090815260056020526040902055505050565b6013546139c190836127cd565b6013556014546139d1908261271f565b6014555050565b6000602082840312156139ea57600080fd5b5035919050565b600060208083528351808285015260005b81811015613a1e57858101830151858201604001528201613a02565b81811115613a30576000604083870101525b50601f01601f1916929092016040019392505050565b6001600160a01b0381168114610bde57600080fd5b8035613a6681613a46565b919050565b60008060408385031215613a7e57600080fd5b8235613a8981613a46565b946020939093013593505050565b600080600060608486031215613aac57600080fd5b8335613ab781613a46565b92506020840135613ac781613a46565b929592945050506040919091013590565b634e487b7160e01b600052604160045260246000fd5b60006020808385031215613b0157600080fd5b823567ffffffffffffffff80821115613b1957600080fd5b818501915085601f830112613b2d57600080fd5b813581811115613b3f57613b3f613ad8565b8060051b604051601f19603f83011681018181108582111715613b6457613b64613ad8565b604052918252848201925083810185019188831115613b8257600080fd5b938501935b82851015613ba757613b9885613a5b565b84529385019392850192613b87565b98975050505050505050565b600060208284031215613bc557600080fd5b8135610e4481613a46565b80358015158114613a6657600080fd5b60008060408385031215613bf357600080fd5b8235613bfe81613a46565b9150613c0c60208401613bd0565b90509250929050565b60008060408385031215613c2857600080fd5b82359150613c0c60208401613bd0565b600060208284031215613c4a57600080fd5b610e4482613bd0565b60008060408385031215613c6657600080fd5b8235613c7181613a46565b91506020830135613c8181613a46565b809150509250929050565b600181811c90821680613ca057607f821691505b60208210811415613cc157634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052601160045260246000fd5b6000816000190483118215151615613cf757613cf7613cc7565b500290565b634e487b7160e01b600052603260045260246000fd5b600082821015613d2457613d24613cc7565b500390565b634e487b7160e01b600052603160045260246000fd5b6000600019821415613d5357613d53613cc7565b5060010190565b60008219821115613d6d57613d6d613cc7565b500190565b600082613d8f57634e487b7160e01b600052601260045260246000fd5b500490565b600060208284031215613da657600080fd5b8151610e4481613a46565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b81811015613e015784516001600160a01b031683529383019391830191600101613ddc565b50506001600160a01b03969096166060850152505050608001529392505050565b600080600060608486031215613e3757600080fd5b835192506020840151915060408401519050925092509256fe45524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e63654f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657245524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa2646970667358221220e014647458fdc707a6d6a12923eb3f7d4b01307cd304be047b6596d61c0c652064736f6c634300080c0033ddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef

Deployed Bytecode

0x60806040526004361061039b5760003560e01c80636bc28781116101dc578063a69df4b511610102578063dcc345f2116100a0578063ec28438a1161006f578063ec28438a14610afe578063f2fde38b14610b1e578063f6224c9614610b3e578063fffbf9bd14610b6057600080fd5b8063dcc345f214610a58578063dd46706414610a78578063dd62ed3e14610a98578063ea2f0b3714610ade57600080fd5b8063bc337182116100dc578063bc337182146109d2578063bdd795ef146109f2578063c49b9a8014610a22578063d12a768814610a4257600080fd5b8063a69df4b514610988578063a9059cbb1461099d578063b6c52324146109bd57600080fd5b806388f820201161017a578063906e9dd011610149578063906e9dd01461091357806395d89b41146109335780639dc29fac14610948578063a457c2d71461096857600080fd5b806388f820201461087c5780638da5cb5b146108b55780638ee88c53146108d35780638f70ccf7146108f357600080fd5b8063715018a6116101b6578063715018a61461081b5780637d1db4a51461083057806382247ec01461084657806383db9c891461085c57600080fd5b80636bc28781146107c75780636bc87c3a146107e557806370a08231146107fb57600080fd5b80633a740de6116102c157806349bd5a5e1161025f5780635d0044ca1161022e5780635d0044ca1461072e5780635de5cd521461074e578063658c27a91461076e5780636afc1334146107a757600080fd5b806349bd5a5e146106825780634a74bb02146106b657806352390c02146106d55780635342acb4146106f557600080fd5b8063437823ec1161029b578063437823ec1461060c5780634549b0391461062c578063457c194c1461064c57806348de478e1461066c57600080fd5b80633a740de6146105b65780633b124fe7146105d65780633bd5d173146105ec57600080fd5b806318160ddd11610339578063309beb4611610308578063309beb4614610534578063313ce567146105545780633685d41914610576578063395093511461059657600080fd5b806318160ddd146104c957806322976e0d146104de57806323b872dd146104f45780632d8381191461051457600080fd5b8063095ea7b311610375578063095ea7b314610426578063110430bb1461045657806313114a9d146104765780631694505e1461049557600080fd5b8063061c82d0146103a757806306fdde03146103c957806308de3af6146103f457600080fd5b366103a257005b600080fd5b3480156103b357600080fd5b506103c76103c23660046139d8565b610b7e565b005b3480156103d557600080fd5b506103de610be1565b6040516103eb91906139f1565b60405180910390f35b34801561040057600080fd5b506010546001600160a01b03165b6040516001600160a01b0390911681526020016103eb565b34801561043257600080fd5b50610446610441366004613a6b565b610c73565b60405190151581526020016103eb565b34801561046257600080fd5b506103c76104713660046139d8565b610c8a565b34801561048257600080fd5b506014545b6040519081526020016103eb565b3480156104a157600080fd5b5061040e7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d81565b3480156104d557600080fd5b50601254610487565b3480156104ea57600080fd5b50610487601f5481565b34801561050057600080fd5b5061044661050f366004613a97565b610ce6565b34801561052057600080fd5b5061048761052f3660046139d8565b610db4565b34801561054057600080fd5b506103c761054f366004613aee565b610e4b565b34801561056057600080fd5b5060185460405160ff90911681526020016103eb565b34801561058257600080fd5b506103c7610591366004613bb3565b610f58565b3480156105a257600080fd5b506104466105b1366004613a6b565b61112d565b3480156105c257600080fd5b506103c76105d1366004613be0565b611163565b3480156105e257600080fd5b5061048760195481565b3480156105f857600080fd5b506103c76106073660046139d8565b6111d6565b34801561061857600080fd5b506103c7610627366004613bb3565b6112d1565b34801561063857600080fd5b50610487610647366004613c15565b61133d565b34801561065857600080fd5b506103c76106673660046139d8565b6113ca565b34801561067857600080fd5b50610487601d5481565b34801561068e57600080fd5b5061040e7f000000000000000000000000119ac0c754f4e7277f1b0bfea2951415a0dc1f1281565b3480156106c257600080fd5b5060215461044690610100900460ff1681565b3480156106e157600080fd5b506103c76106f0366004613bb3565b611424565b34801561070157600080fd5b50610446610710366004613bb3565b6001600160a01b03166000908152600a602052604090205460ff1690565b34801561073a57600080fd5b506103c76107493660046139d8565b611595565b34801561075a57600080fd5b506103c76107693660046139d8565b6115f1565b34801561077a57600080fd5b50610446610789366004613bb3565b6001600160a01b03166000908152600b602052604090205460ff1690565b3480156107b357600080fd5b506103c76107c23660046139d8565b61164b565b3480156107d357600080fd5b506002546001600160a01b031661040e565b3480156107f157600080fd5b50610487601b5481565b34801561080757600080fd5b50610487610816366004613bb3565b611668565b34801561082757600080fd5b506103c76116c7565b34801561083c57600080fd5b5061048760235481565b34801561085257600080fd5b5061048760225481565b34801561086857600080fd5b506103c7610877366004613aee565b611759565b34801561088857600080fd5b50610446610897366004613bb3565b6001600160a01b03166000908152600d602052604090205460ff1690565b3480156108c157600080fd5b506000546001600160a01b031661040e565b3480156108df57600080fd5b506103c76108ee3660046139d8565b61186b565b3480156108ff57600080fd5b506103c761090e366004613c38565b6118c5565b34801561091f57600080fd5b506103c761092e366004613bb3565b611929565b34801561093f57600080fd5b506103de611993565b34801561095457600080fd5b50610446610963366004613a6b565b6119a2565b34801561097457600080fd5b50610446610983366004613a6b565b6119f5565b34801561099457600080fd5b506103c7611a44565b3480156109a957600080fd5b506104466109b8366004613a6b565b611b76565b3480156109c957600080fd5b50600354610487565b3480156109de57600080fd5b506103c76109ed3660046139d8565b611bdf565b3480156109fe57600080fd5b50610446610a0d366004613bb3565b60066020526000908152604090205460ff1681565b348015610a2e57600080fd5b506103c7610a3d366004613c38565b611c3b565b348015610a4e57600080fd5b5061048760245481565b348015610a6457600080fd5b506103c7610a73366004613bb3565b611cd7565b348015610a8457600080fd5b506103c7610a933660046139d8565b611d41565b348015610aa457600080fd5b50610487610ab3366004613c53565b6001600160a01b03918216600090815260076020908152604080832093909416825291909152205490565b348015610aea57600080fd5b506103c7610af9366004613bb3565b611df6565b348015610b0a57600080fd5b506103c7610b193660046139d8565b611e5f565b348015610b2a57600080fd5b506103c7610b39366004613bb3565b611eac565b348015610b4a57600080fd5b5033600090815260086020526040902054610487565b348015610b6c57600080fd5b506011546001600160a01b031661040e565b6000546001600160a01b03163314610bcb5760405162461bcd60e51b81526020600482018190526024820152600080516020613e7983398151915260448201526064015b60405180910390fd5b6000601955600a8111610bde5760198190555b50565b606060168054610bf090613c8c565b80601f0160208091040260200160405190810160405280929190818152602001828054610c1c90613c8c565b8015610c695780601f10610c3e57610100808354040283529160200191610c69565b820191906000526020600020905b815481529060010190602001808311610c4c57829003601f168201915b5050505050905090565b6000610c80338484611fcb565b5060015b92915050565b6000546001600160a01b03163314610cd25760405162461bcd60e51b81526020600482018190526024820152600080516020613e798339815191526044820152606401610bc2565b610ce081633b9aca00613cdd565b60245550565b6001600160a01b0383166000908152600860205260408120544211610d4d5760405162461bcd60e51b815260206004820152601660248201527f57616c6c6574206973207374696c6c206c6f636b6564000000000000000000006044820152606401610bc2565b610d58848484612123565b610daa8433610da585604051806060016040528060288152602001613e51602891396001600160a01b038a1660009081526007602090815260408083203384529091529020549190612680565b611fcb565b5060019392505050565b6000601354821115610e2e5760405162461bcd60e51b815260206004820152602a60248201527f416d6f756e74206d757374206265206c657373207468616e20746f74616c207260448201527f65666c656374696f6e73000000000000000000000000000000000000000000006064820152608401610bc2565b6000610e386126ba565b9050610e4483826126dd565b9392505050565b6000546001600160a01b03163314610e935760405162461bcd60e51b81526020600482018190526024820152600080516020613e798339815191526044820152606401610bc2565b805160005b81811015610f53576000838281518110610eb457610eb4613cfc565b6020908102919091018101516001600160a01b0381166000908152600690925260409091205490915060ff16610f2c5760405162461bcd60e51b815260206004820152601860248201527f544f4b454e3a20416c72656164792064697361626c65642e00000000000000006044820152606401610bc2565b6001600160a01b03166000908152600660205260409020805460ff19169055600101610e98565b505050565b6000546001600160a01b03163314610fa05760405162461bcd60e51b81526020600482018190526024820152600080516020613e798339815191526044820152606401610bc2565b6001600160a01b0381166000908152600d602052604090205460ff166110085760405162461bcd60e51b815260206004820152601b60248201527f4163636f756e7420697320616c7265616479206578636c7564656400000000006044820152606401610bc2565b60005b600f5481101561112957816001600160a01b0316600f828154811061103257611032613cfc565b6000918252602090912001546001600160a01b0316141561111757600f805461105d90600190613d12565b8154811061106d5761106d613cfc565b600091825260209091200154600f80546001600160a01b03909216918390811061109957611099613cfc565b600091825260208083209190910180546001600160a01b0319166001600160a01b039485161790559184168152600582526040808220829055600d90925220805460ff19169055600f8054806110f1576110f1613d29565b600082815260209020810160001990810180546001600160a01b03191690550190555050565b8061112181613d3f565b91505061100b565b5050565b3360008181526007602090815260408083206001600160a01b03871684529091528120549091610c80918590610da5908661271f565b6000546001600160a01b031633146111ab5760405162461bcd60e51b81526020600482018190526024820152600080516020613e798339815191526044820152606401610bc2565b6001600160a01b03919091166000908152600b60205260409020805460ff1916911515919091179055565b336000818152600d602052604090205460ff161561125c5760405162461bcd60e51b815260206004820152602c60248201527f4578636c75646564206164647265737365732063616e6e6f742063616c6c207460448201527f6869732066756e6374696f6e00000000000000000000000000000000000000006064820152608401610bc2565b60006112678361277e565b505050506001600160a01b038416600090815260046020526040902054919250611293919050826127cd565b6001600160a01b0383166000908152600460205260409020556013546112b990826127cd565b6013556014546112c9908461271f565b601455505050565b6000546001600160a01b031633146113195760405162461bcd60e51b81526020600482018190526024820152600080516020613e798339815191526044820152606401610bc2565b6001600160a01b03166000908152600a60205260409020805460ff19166001179055565b60006012548311156113915760405162461bcd60e51b815260206004820152601f60248201527f416d6f756e74206d757374206265206c657373207468616e20737570706c79006044820152606401610bc2565b816113b05760006113a18461277e565b50939550610c84945050505050565b60006113bb8461277e565b50929550610c84945050505050565b6000546001600160a01b031633146114125760405162461bcd60e51b81526020600482018190526024820152600080516020613e798339815191526044820152606401610bc2565b6000601f55600a8111610bde57601f55565b6000546001600160a01b0316331461146c5760405162461bcd60e51b81526020600482018190526024820152600080516020613e798339815191526044820152606401610bc2565b6001600160a01b0381166000908152600d602052604090205460ff16156114d55760405162461bcd60e51b815260206004820152601b60248201527f4163636f756e7420697320616c7265616479206578636c7564656400000000006044820152606401610bc2565b6001600160a01b0381166000908152600460205260409020541561152f576001600160a01b03811660009081526004602052604090205461151590610db4565b6001600160a01b0382166000908152600560205260409020555b6001600160a01b03166000818152600d60205260408120805460ff19166001908117909155600f805491820181559091527f8d1108e10bcb7c27dddfc02ed9d693a074039d026cf4ea4240b40f7d581ac8020180546001600160a01b0319169091179055565b6000546001600160a01b031633146115dd5760405162461bcd60e51b81526020600482018190526024820152600080516020613e798339815191526044820152606401610bc2565b6115eb81633b9aca00613cdd565b60225550565b6000546001600160a01b031633146116395760405162461bcd60e51b81526020600482018190526024820152600080516020613e798339815191526044820152606401610bc2565b6000601d55600a8111610bde57601d55565b6116558142613d5a565b3360009081526008602052604090205550565b6001600160a01b0381166000908152600d602052604081205460ff16156116a557506001600160a01b031660009081526005602052604090205490565b6001600160a01b038216600090815260046020526040902054610c8490610db4565b6000546001600160a01b0316331461170f5760405162461bcd60e51b81526020600482018190526024820152600080516020613e798339815191526044820152606401610bc2565b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080546001600160a01b0319169055565b6000546001600160a01b031633146117a15760405162461bcd60e51b81526020600482018190526024820152600080516020613e798339815191526044820152606401610bc2565b805160005b81811015610f535760008382815181106117c2576117c2613cfc565b6020908102919091018101516001600160a01b0381166000908152600690925260409091205490915060ff161515600114156118405760405162461bcd60e51b815260206004820152601760248201527f544f4b454e3a20416c726561647920656e61626c65642e0000000000000000006044820152606401610bc2565b6001600160a01b03166000908152600660205260409020805460ff19166001908117909155016117a6565b6000546001600160a01b031633146118b35760405162461bcd60e51b81526020600482018190526024820152600080516020613e798339815191526044820152606401610bc2565b6000601b55600a8111610bde57601b55565b6000546001600160a01b0316331461190d5760405162461bcd60e51b81526020600482018190526024820152600080516020613e798339815191526044820152606401610bc2565b60218054911515620100000262ff000019909216919091179055565b6000546001600160a01b031633146119715760405162461bcd60e51b81526020600482018190526024820152600080516020613e798339815191526044820152606401610bc2565b601180546001600160a01b0319166001600160a01b0392909216919091179055565b606060178054610bf090613c8c565b600080546001600160a01b031633146119eb5760405162461bcd60e51b81526020600482018190526024820152600080516020613e798339815191526044820152606401610bc2565b610c80838361280f565b6000610c803384610da585604051806060016040528060258152602001613e99602591393360009081526007602090815260408083206001600160a01b038d1684529091529020549190612680565b6001546001600160a01b03163314611ac45760405162461bcd60e51b815260206004820152602360248201527f596f7520646f6e27742068617665207065726d697373696f6e20746f20756e6c60448201527f6f636b00000000000000000000000000000000000000000000000000000000006064820152608401610bc2565b6003544211611b155760405162461bcd60e51b815260206004820152601f60248201527f436f6e7472616374206973206c6f636b656420756e74696c20372064617973006044820152606401610bc2565b600154600080546040516001600160a01b0393841693909116917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600154600080546001600160a01b0319166001600160a01b03909216919091179055565b336000908152600860205260408120544211611bd45760405162461bcd60e51b815260206004820152601660248201527f57616c6c6574206973207374696c6c206c6f636b6564000000000000000000006044820152606401610bc2565b610c80338484612123565b6000546001600160a01b03163314611c275760405162461bcd60e51b81526020600482018190526024820152600080516020613e798339815191526044820152606401610bc2565b611c3581633b9aca00613cdd565b60235550565b6000546001600160a01b03163314611c835760405162461bcd60e51b81526020600482018190526024820152600080516020613e798339815191526044820152606401610bc2565b602180548215156101000261ff00199091161790556040517f53726dfcaf90650aa7eb35524f4d3220f07413c8d6cb404cc8c18bf5591bc15990611ccc90831515815260200190565b60405180910390a150565b6000546001600160a01b03163314611d1f5760405162461bcd60e51b81526020600482018190526024820152600080516020613e798339815191526044820152606401610bc2565b601080546001600160a01b0319166001600160a01b0392909216919091179055565b6000546001600160a01b03163314611d895760405162461bcd60e51b81526020600482018190526024820152600080516020613e798339815191526044820152606401610bc2565b60008054600180546001600160a01b03199081166001600160a01b03841617909155169055611db88142613d5a565b600355600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a350565b6000546001600160a01b03163314611e3e5760405162461bcd60e51b81526020600482018190526024820152600080516020613e798339815191526044820152606401610bc2565b6001600160a01b03166000908152600a60205260409020805460ff19169055565b6000546001600160a01b03163314611ea75760405162461bcd60e51b81526020600482018190526024820152600080516020613e798339815191526044820152606401610bc2565b602355565b6000546001600160a01b03163314611ef45760405162461bcd60e51b81526020600482018190526024820152600080516020613e798339815191526044820152606401610bc2565b6001600160a01b038116611f705760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f64647265737300000000000000000000000000000000000000000000000000006064820152608401610bc2565b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b6001600160a01b0383166120465760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460448201527f72657373000000000000000000000000000000000000000000000000000000006064820152608401610bc2565b6001600160a01b0382166120c25760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f20616464726560448201527f73730000000000000000000000000000000000000000000000000000000000006064820152608401610bc2565b6001600160a01b0383811660008181526007602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6001600160a01b03831661219f5760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f20616460448201527f64726573730000000000000000000000000000000000000000000000000000006064820152608401610bc2565b6001600160a01b03821661221b5760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201527f65737300000000000000000000000000000000000000000000000000000000006064820152608401610bc2565b600081116122915760405162461bcd60e51b815260206004820152602960248201527f5472616e7366657220616d6f756e74206d75737420626520677265617465722060448201527f7468616e207a65726f00000000000000000000000000000000000000000000006064820152608401610bc2565b6000546001600160a01b038481169116148015906122bd57506000546001600160a01b03838116911614155b80156122e257506001600160a01b03831660009081526006602052604090205460ff16155b801561230757506001600160a01b03821660009081526006602052604090205460ff16155b156123aa5760215462010000900460ff166123aa576001600160a01b03831660009081526006602052604090205460ff166123aa5760405162461bcd60e51b815260206004820152603f60248201527f544f4b454e3a2054686973206163636f756e742063616e6e6f742073656e642060448201527f746f6b656e7320756e74696c2074726164696e6720697320656e61626c6564006064820152608401610bc2565b6001600160a01b0383166000908152600b602052604090205460ff161580156123ec57506001600160a01b0382166000908152600b602052604090205460ff16155b801561241157506001600160a01b0383166000908152600c602052604090205460ff16155b801561243657506001600160a01b0382166000908152600c602052604090205460ff16155b801561247457507f000000000000000000000000119ac0c754f4e7277f1b0bfea2951415a0dc1f126001600160a01b0316826001600160a01b031614155b1561258b576023548111156124f15760405162461bcd60e51b815260206004820152602860248201527f5472616e7366657220616d6f756e74206578636565647320746865206d61785460448201527f78416d6f756e742e0000000000000000000000000000000000000000000000006064820152608401610bc2565b60006124fc83611668565b60225490915061250c8383613d5a565b111561257f5760405162461bcd60e51b8152602060048201526024808201527f45786365656473206d6178696d756d2077616c6c657420746f6b656e20616d6f60448201527f756e742e000000000000000000000000000000000000000000000000000000006064820152608401610bc2565b61258984846129ac565b505b600061259630611668565b905060235481106125a657506023545b602454811080159081906125bd575060215460ff16155b80156125fb57507f000000000000000000000000119ac0c754f4e7277f1b0bfea2951415a0dc1f126001600160a01b0316856001600160a01b031614155b801561260e5750602154610100900460ff165b1561262157602454915061262182612bcf565b6001600160a01b0385166000908152600a602052604090205460019060ff168061266357506001600160a01b0385166000908152600a602052604090205460ff165b1561266c575060005b61267886868684612ed7565b505050505050565b600081848411156126a45760405162461bcd60e51b8152600401610bc291906139f1565b5060006126b18486613d12565b95945050505050565b60008060006126c7613060565b90925090506126d682826126dd565b9250505090565b6000610e4483836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f0000000000008152506131e2565b60008061272c8385613d5a565b905083811015610e445760405162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f7700000000006044820152606401610bc2565b60008060008060008060008060006127958a613210565b92509250925060008060006127b38d86866127ae6126ba565b61324c565b919f909e50909c50959a5093985091965092945050505050565b6000610e4483836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250612680565b6001600160a01b03821661288b5760405162461bcd60e51b815260206004820152602b60248201527f41706f6c6c6f2054687265653a2063616e6e6f74206275726e2066726f6d207a60448201527f65726f20616464726573730000000000000000000000000000000000000000006064820152608401610bc2565b6001600160a01b0382166000908152600960205260409020548111156129195760405162461bcd60e51b815260206004820152603460248201527f41706f6c6c6f2054687265653a2043616e6e6f74206275726e206d6f7265207460448201527f68616e20746865206163636f756e74206f776e730000000000000000000000006064820152608401610bc2565b6001600160a01b03821660009081526009602052604090205461293d908290613d12565b6001600160a01b038316600090815260096020526040902055601254612964908290613d12565b6012556040518181526000906001600160a01b038416907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a35050565b7f000000000000000000000000119ac0c754f4e7277f1b0bfea2951415a0dc1f126001600160a01b0316826001600160a01b03161480156129f557506001600160a01b03811615155b8015612a3357507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d6001600160a01b0316816001600160a01b031614155b8015612a4d57506000546001600160a01b03828116911614155b15612a6e576001600160a01b0381166000908152600e602052604090204290555b6001600160a01b0382166000908152600a602052604090205460ff16158015612a9f57506001600160a01b03821615155b8015612add57507f000000000000000000000000119ac0c754f4e7277f1b0bfea2951415a0dc1f126001600160a01b0316826001600160a01b031614155b8015612b5557507f000000000000000000000000119ac0c754f4e7277f1b0bfea2951415a0dc1f126001600160a01b0316816001600160a01b03161480612b5557507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d6001600160a01b0316816001600160a01b0316145b15611129576025546001600160a01b0383166000908152600e60205260409020544291612b82919061271f565b106111295760405162461bcd60e51b815260206004820152601560248201527f4572726f723a2041726520796f75206120626f743f00000000000000000000006044820152606401610bc2565b6021805460ff191660011790556000612be98260026126dd565b90506000612bf783836127cd565b90506000601d54601b54601f54612c0e9190613d5a565b612c189190613d5a565b905047612c248461329c565b6000612c3047836127cd565b90506000612c53601d54612c4d86856126dd90919063ffffffff16565b9061346d565b90506000612c70601d54612c4d87896126dd90919063ffffffff16565b90506000612c8d601f54612c4d88876126dd90919063ffffffff16565b90506000612caa601f54612c4d898b6126dd90919063ffffffff16565b90506000612cc283612cbc88886127cd565b906127cd565b90506000612cd483612cbc8c886127cd565b60105460405191925060009182916001600160a01b03169089908381818185875af1925050503d8060008114612d26576040519150601f19603f3d011682016040523d82523d6000602084013e612d2b565b606091505b50915091508115612d8357612d453061dead896000612ed7565b60405187815261dead9030907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a3612d9c565b601054612d9c9088908a906001600160a01b0316613508565b6011546040516001600160a01b03909116908790600081818185875af1925050503d8060008114612de9576040519150601f19603f3d011682016040523d82523d6000602084013e612dee565b606091505b5090925090508115612e4757612e093061dead876000612ed7565b60405185815261dead9030907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a3612e60565b601154612e6090869088906001600160a01b0316613508565b612e7c8385612e776002546001600160a01b031690565b613508565b604080518e8152602081018b90529081018d90527f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb5619060600160405180910390a150506021805460ff19169055505050505050505050505050565b80612ee457612ee46135fb565b6001600160a01b0384166000908152600d602052604090205460ff168015612f2557506001600160a01b0383166000908152600d602052604090205460ff16155b15612f3a57612f35848484613656565b613038565b6001600160a01b0384166000908152600d602052604090205460ff16158015612f7b57506001600160a01b0383166000908152600d602052604090205460ff165b15612f8b57612f3584848461377c565b6001600160a01b0384166000908152600d602052604090205460ff16158015612fcd57506001600160a01b0383166000908152600d602052604090205460ff16155b15612fdd57612f35848484613825565b6001600160a01b0384166000908152600d602052604090205460ff16801561301d57506001600160a01b0383166000908152600d602052604090205460ff165b1561302d57612f35848484613869565b613038848484613825565b8061305a5761305a601a54601955601c54601b55601e54601d55602054601f55565b50505050565b6013546012546000918291825b600f548110156131b2578260046000600f848154811061308f5761308f613cfc565b60009182526020808320909101546001600160a01b0316835282019290925260400190205411806130fa57508160056000600f84815481106130d3576130d3613cfc565b60009182526020808320909101546001600160a01b03168352820192909252604001902054115b1561311057601354601254945094505050509091565b61315660046000600f848154811061312a5761312a613cfc565b60009182526020808320909101546001600160a01b0316835282019290925260400190205484906127cd565b925061319e60056000600f848154811061317257613172613cfc565b60009182526020808320909101546001600160a01b0316835282019290925260400190205483906127cd565b9150806131aa81613d3f565b91505061306d565b506012546013546131c2916126dd565b8210156131d9576013546012549350935050509091565b90939092509050565b600081836132035760405162461bcd60e51b8152600401610bc291906139f1565b5060006126b18486613d72565b60008060008061321f856138dc565b9050600061322c866138fe565b9050600061323e82612cbc89866127cd565b979296509094509092505050565b600080808061325b888661346d565b90506000613269888761346d565b90506000613277888861346d565b9050600061328982612cbc86866127cd565b939b939a50919850919650505050505050565b60408051600280825260608201835260009260208301908036833701905050905030816000815181106132d1576132d1613cfc565b60200260200101906001600160a01b031690816001600160a01b0316815250507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d6001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa15801561334f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906133739190613d94565b8160018151811061338657613386613cfc565b60200260200101906001600160a01b031690816001600160a01b0316815250506133d1307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d84611fcb565b6040517f791ac9470000000000000000000000000000000000000000000000000000000081526001600160a01b037f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d169063791ac9479061343f908590600090869030904290600401613db1565b600060405180830381600087803b15801561345957600080fd5b505af1158015612678573d6000803e3d6000fd5b60008261347c57506000610c84565b60006134888385613cdd565b9050826134958583613d72565b14610e445760405162461bcd60e51b815260206004820152602160248201527f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f60448201527f77000000000000000000000000000000000000000000000000000000000000006064820152608401610bc2565b613533307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d85611fcb565b6040517ff305d7190000000000000000000000000000000000000000000000000000000081523060048201526024810184905260006044820181905260648201526001600160a01b0382811660848301524260a48301527f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d169063f305d71990849060c40160606040518083038185885af11580156135d6573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906126789190613e22565b60195415801561360b5750601b54155b80156136175750601f54155b80156136235750601d54155b1561362a57565b60198054601a55601b8054601c55601d8054601e55601f80546020556000938490559183905582905555565b6000806000806000806136688761277e565b6001600160a01b038f16600090815260056020526040902054959b5093995091975095509350915061369a90886127cd565b6001600160a01b038a166000908152600560209081526040808320939093556004905220546136c990876127cd565b6001600160a01b03808b1660009081526004602052604080822093909355908a16815220546136f8908661271f565b6001600160a01b03891660009081526004602052604090205561371a8161392c565b61372484836139b4565b876001600160a01b0316896001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8560405161376991815260200190565b60405180910390a3505050505050505050565b60008060008060008061378e8761277e565b6001600160a01b038f16600090815260046020526040902054959b509399509197509550935091506137c090876127cd565b6001600160a01b03808b16600090815260046020908152604080832094909455918b168152600590915220546137f6908461271f565b6001600160a01b0389166000908152600560209081526040808320939093556004905220546136f8908661271f565b6000806000806000806138378761277e565b6001600160a01b038f16600090815260046020526040902054959b509399509197509550935091506136c990876127cd565b60008060008060008061387b8761277e565b6001600160a01b038f16600090815260056020526040902054959b509399509197509550935091506138ad90886127cd565b6001600160a01b038a166000908152600560209081526040808320939093556004905220546137c090876127cd565b6000610c8460646138f86019548561346d90919063ffffffff16565b906126dd565b6000610c8460646138f8601f54601d54601b5461391b9190613d5a565b6139259190613d5a565b859061346d565b60006139366126ba565b90506000613944838361346d565b30600090815260046020526040902054909150613961908261271f565b30600090815260046020908152604080832093909355600d9052205460ff1615610f53573060009081526005602052604090205461399f908461271f565b30600090815260056020526040902055505050565b6013546139c190836127cd565b6013556014546139d1908261271f565b6014555050565b6000602082840312156139ea57600080fd5b5035919050565b600060208083528351808285015260005b81811015613a1e57858101830151858201604001528201613a02565b81811115613a30576000604083870101525b50601f01601f1916929092016040019392505050565b6001600160a01b0381168114610bde57600080fd5b8035613a6681613a46565b919050565b60008060408385031215613a7e57600080fd5b8235613a8981613a46565b946020939093013593505050565b600080600060608486031215613aac57600080fd5b8335613ab781613a46565b92506020840135613ac781613a46565b929592945050506040919091013590565b634e487b7160e01b600052604160045260246000fd5b60006020808385031215613b0157600080fd5b823567ffffffffffffffff80821115613b1957600080fd5b818501915085601f830112613b2d57600080fd5b813581811115613b3f57613b3f613ad8565b8060051b604051601f19603f83011681018181108582111715613b6457613b64613ad8565b604052918252848201925083810185019188831115613b8257600080fd5b938501935b82851015613ba757613b9885613a5b565b84529385019392850192613b87565b98975050505050505050565b600060208284031215613bc557600080fd5b8135610e4481613a46565b80358015158114613a6657600080fd5b60008060408385031215613bf357600080fd5b8235613bfe81613a46565b9150613c0c60208401613bd0565b90509250929050565b60008060408385031215613c2857600080fd5b82359150613c0c60208401613bd0565b600060208284031215613c4a57600080fd5b610e4482613bd0565b60008060408385031215613c6657600080fd5b8235613c7181613a46565b91506020830135613c8181613a46565b809150509250929050565b600181811c90821680613ca057607f821691505b60208210811415613cc157634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052601160045260246000fd5b6000816000190483118215151615613cf757613cf7613cc7565b500290565b634e487b7160e01b600052603260045260246000fd5b600082821015613d2457613d24613cc7565b500390565b634e487b7160e01b600052603160045260246000fd5b6000600019821415613d5357613d53613cc7565b5060010190565b60008219821115613d6d57613d6d613cc7565b500190565b600082613d8f57634e487b7160e01b600052601260045260246000fd5b500490565b600060208284031215613da657600080fd5b8151610e4481613a46565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b81811015613e015784516001600160a01b031683529383019391830191600101613ddc565b50506001600160a01b03969096166060850152505050608001529392505050565b600080600060608486031215613e3757600080fd5b835192506020840151915060408401519050925092509256fe45524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e63654f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657245524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa2646970667358221220e014647458fdc707a6d6a12923eb3f7d4b01307cd304be047b6596d61c0c652064736f6c634300080c0033

Deployed Bytecode Sourcemap

25749:27754:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;37100:157;;;;;;;;;;-1:-1:-1;37100:157:0;;;;;:::i;:::-;;:::i;:::-;;30212:83;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;36525:112;;;;;;;;;;-1:-1:-1;36612:17:0;;-1:-1:-1;;;;;36612:17:0;36525:112;;;-1:-1:-1;;;;;981:55:1;;;963:74;;951:2;936:18;36525:112:0;801:242:1;31220:161:0;;;;;;;;;;-1:-1:-1;31220:161:0;;;;;:::i;:::-;;:::i;:::-;;;1831:14:1;;1824:22;1806:41;;1794:2;1779:18;31220:161:0;1666:187:1;36377:140:0;;;;;;;;;;-1:-1:-1;36377:140:0;;;;;:::i;:::-;;:::i;32422:87::-;;;;;;;;;;-1:-1:-1;32491:10:0;;32422:87;;;2004:25:1;;;1992:2;1977:18;32422:87:0;1858:177:1;27497:51:0;;;;;;;;;;;;;;;30489:100;;;;;;;;;;-1:-1:-1;30569:12:0;;30489:100;;27383:32;;;;;;;;;;;;;;;;31389:394;;;;;;;;;;-1:-1:-1;31389:394:0;;;;;:::i;:::-;;:::i;33843:253::-;;;;;;;;;;-1:-1:-1;33843:253:0;;;;;:::i;:::-;;:::i;53016:347::-;;;;;;;;;;-1:-1:-1;53016:347:0;;;;;:::i;:::-;;:::i;30398:83::-;;;;;;;;;;-1:-1:-1;30464:9:0;;30398:83;;30464:9;;;;4216:36:1;;4204:2;4189:18;30398:83:0;4074:184:1;34559:479:0;;;;;;;;;;-1:-1:-1;34559:479:0;;;;;:::i;:::-;;:::i;31791:218::-;;;;;;;;;;-1:-1:-1;31791:218:0;;;;;:::i;:::-;;:::i;35962:141::-;;;;;;;;;;-1:-1:-1;35962:141:0;;;;;:::i;:::-;;:::i;27031:26::-;;;;;;;;;;;;;;;;33009:377;;;;;;;;;;-1:-1:-1;33009:377:0;;;;;:::i;:::-;;:::i;35704:111::-;;;;;;;;;;-1:-1:-1;35704:111:0;;;;;:::i;:::-;;:::i;33394:441::-;;;;;;;;;;-1:-1:-1;33394:441:0;;;;;:::i;:::-;;:::i;37269:193::-;;;;;;;;;;-1:-1:-1;37269:193:0;;;;;:::i;:::-;;:::i;27265:32::-;;;;;;;;;;;;;;;;27555:38;;;;;;;;;;;;;;;27634:40;;;;;;;;;;-1:-1:-1;27634:40:0;;;;;;;;;;;34104:447;;;;;;;;;;-1:-1:-1;34104:447:0;;;;;:::i;:::-;;:::i;41535:123::-;;;;;;;;;;-1:-1:-1;41535:123:0;;;;;:::i;:::-;-1:-1:-1;;;;;41623:27:0;41599:4;41623:27;;;:18;:27;;;;;;;;;41535:123;32884:113;;;;;;;;;;-1:-1:-1;32884:113:0;;;;;:::i;:::-;;:::i;36895:193::-;;;;;;;;;;-1:-1:-1;36895:193:0;;;;;:::i;:::-;;:::i;35827:127::-;;;;;;;;;;-1:-1:-1;35827:127:0;;;;;:::i;:::-;-1:-1:-1;;;;;35917:29:0;35893:4;35917:29;;;:20;:29;;;;;;;;;35827:127;32521:108;;;;;;;;;;-1:-1:-1;32521:108:0;;;;;:::i;:::-;;:::i;15605:90::-;;;;;;;;;;-1:-1:-1;15676:11:0;;-1:-1:-1;;;;;15676:11:0;15605:90;;27160:32;;;;;;;;;;;;;;;;30597:198;;;;;;;;;;-1:-1:-1;30597:198:0;;;;;:::i;:::-;;:::i;16257:148::-;;;;;;;;;;;;;:::i;27790:51::-;;;;;;;;;;;;;;;;27720:50;;;;;;;;;;;;;;;;52670:340;;;;;;;;;;-1:-1:-1;52670:340:0;;;;;:::i;:::-;;:::i;32294:120::-;;;;;;;;;;-1:-1:-1;32294:120:0;;;;;:::i;:::-;-1:-1:-1;;;;;32386:20:0;32362:4;32386:20;;;:11;:20;;;;;;;;;32294:120;15508:79;;;;;;;;;;-1:-1:-1;15546:7:0;15573:6;-1:-1:-1;;;;;15573:6:0;15508:79;;37474:193;;;;;;;;;;-1:-1:-1;37474:193:0;;;;;:::i;:::-;;:::i;53397:101::-;;;;;;;;;;-1:-1:-1;53397:101:0;;;;;:::i;:::-;;:::i;36244:121::-;;;;;;;;;;-1:-1:-1;36244:121:0;;;;;:::i;:::-;;:::i;30303:87::-;;;;;;;;;;;;;:::i;49285:131::-;;;;;;;;;;-1:-1:-1;49285:131:0;;;;;:::i;:::-;;:::i;32017:269::-;;;;;;;;;;-1:-1:-1;32017:269:0;;;;;:::i;:::-;;:::i;17279:305::-;;;;;;;;;;;;;:::i;30807:254::-;;;;;;;;;;-1:-1:-1;30807:254:0;;;;;:::i;:::-;;:::i;16812:89::-;;;;;;;;;;-1:-1:-1;16884:9:0;;16812:89;;32773:103;;;;;;;;;;-1:-1:-1;32773:103:0;;;;;:::i;:::-;;:::i;25991:42::-;;;;;;;;;;-1:-1:-1;25991:42:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;37679:171;;;;;;;;;;-1:-1:-1;37679:171:0;;;;;:::i;:::-;;:::i;27913:61::-;;;;;;;;;;;;;;;;36111:121;;;;;;;;;;-1:-1:-1;36111:121:0;;;;;:::i;:::-;;:::i;16977:226::-;;;;;;;;;;-1:-1:-1;16977:226:0;;;;;:::i;:::-;;:::i;31069:143::-;;;;;;;;;;-1:-1:-1;31069:143:0;;;;;:::i;:::-;-1:-1:-1;;;;;31177:18:0;;;31150:7;31177:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;31069:143;36773:110;;;;;;;;;;-1:-1:-1;36773:110:0;;;;;:::i;:::-;;:::i;32650:111::-;;;;;;;;;;-1:-1:-1;32650:111:0;;;;;:::i;:::-;;:::i;16560:244::-;;;;;;;;;;-1:-1:-1;16560:244:0;;;;;:::i;:::-;;:::i;30098:106::-;;;;;;;;;;-1:-1:-1;8145:10:0;30147:7;30174:22;;;:8;:22;;;;;;30098:106;;36649:112;;;;;;;;;;-1:-1:-1;36736:17:0;;-1:-1:-1;;;;;36736:17:0;36649:112;;37100:157;15828:6;;-1:-1:-1;;;;;15828:6:0;8145:10;15828:22;15820:67;;;;-1:-1:-1;;;15820:67:0;;6524:2:1;15820:67:0;;;6506:21:1;;;6543:18;;;6536:30;-1:-1:-1;;;;;;;;;;;6582:18:1;;;6575:62;6654:18;;15820:67:0;;;;;;;;;37182:1:::1;37172:7;:11:::0;37207:2:::1;37197:12:::0;::::1;37194:54;;37223:7;:16:::0;;;37194:54:::1;37100:157:::0;:::o;30212:83::-;30249:13;30282:5;30275:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30212:83;:::o;31220:161::-;31295:4;31312:39;8145:10;31335:7;31344:6;31312:8;:39::i;:::-;-1:-1:-1;31369:4:0;31220:161;;;;;:::o;36377:140::-;15828:6;;-1:-1:-1;;;;;15828:6:0;8145:10;15828:22;15820:67;;;;-1:-1:-1;;;15820:67:0;;6524:2:1;15820:67:0;;;6506:21:1;;;6543:18;;;6536:30;-1:-1:-1;;;;;;;;;;;6582:18:1;;;6575:62;6654:18;;15820:67:0;6322:356:1;15820:67:0;36489:20:::1;:10:::0;36502:7:::1;36489:20;:::i;:::-;36457:29;:52:::0;-1:-1:-1;36377:140:0:o;31389:394::-;-1:-1:-1;;;;;31530:16:0;;31487:4;31530:16;;;:8;:16;;;;;;31512:15;:34;31504:70;;;;-1:-1:-1;;;31504:70:0;;7689:2:1;31504:70:0;;;7671:21:1;7728:2;7708:18;;;7701:30;7767:24;7747:18;;;7740:52;7809:18;;31504:70:0;7487:346:1;31504:70:0;31585:36;31595:6;31603:9;31614:6;31585:9;:36::i;:::-;31632:121;31641:6;8145:10;31663:89;31701:6;31663:89;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;31663:19:0;;;;;;:11;:19;;;;;;;;8145:10;31663:33;;;;;;;;;;:37;:89::i;:::-;31632:8;:121::i;:::-;-1:-1:-1;31771:4:0;31389:394;;;;;:::o;33843:253::-;33909:7;33948;;33937;:18;;33929:73;;;;-1:-1:-1;;;33929:73:0;;8040:2:1;33929:73:0;;;8022:21:1;8079:2;8059:18;;;8052:30;8118:34;8098:18;;;8091:62;8189:12;8169:18;;;8162:40;8219:19;;33929:73:0;7838:406:1;33929:73:0;34013:19;34036:10;:8;:10::i;:::-;34013:33;-1:-1:-1;34064:24:0;:7;34013:33;34064:11;:24::i;:::-;34057:31;33843:253;-1:-1:-1;;;33843:253:0:o;53016:347::-;15828:6;;-1:-1:-1;;;;;15828:6:0;8145:10;15828:22;15820:67;;;;-1:-1:-1;;;15820:67:0;;6524:2:1;15820:67:0;;;6506:21:1;;;6543:18;;;6536:30;-1:-1:-1;;;;;;;;;;;6582:18:1;;;6575:62;6654:18;;15820:67:0;6322:356:1;15820:67:0;53118:19;;53104:11:::1;53144:214;53164:6;53160:1;:10;53144:214;;;53182:16;53201:12;53214:1;53201:15;;;;;;;;:::i;:::-;;::::0;;::::1;::::0;;;;;;;-1:-1:-1;;;;;53233:18:0;::::1;;::::0;;;:9:::1;:18:::0;;;;;;;;53201:15;;-1:-1:-1;53233:18:0::1;;53225:64;;;::::0;-1:-1:-1;;;53225:64:0;;8640:2:1;53225:64:0::1;::::0;::::1;8622:21:1::0;8679:2;8659:18;;;8652:30;8718:26;8698:18;;;8691:54;8762:18;;53225:64:0::1;8438:348:1::0;53225:64:0::1;-1:-1:-1::0;;;;;53298:18:0::1;53319:5;53298:18:::0;;;:9:::1;:18;::::0;;;;:26;;-1:-1:-1;;53298:26:0::1;::::0;;;53345:3:::1;53144:214;;;;53097:266;53016:347:::0;:::o;34559:479::-;15828:6;;-1:-1:-1;;;;;15828:6:0;8145:10;15828:22;15820:67;;;;-1:-1:-1;;;15820:67:0;;6524:2:1;15820:67:0;;;6506:21:1;;;6543:18;;;6536:30;-1:-1:-1;;;;;;;;;;;6582:18:1;;;6575:62;6654:18;;15820:67:0;6322:356:1;15820:67:0;-1:-1:-1;;;;;34641:20:0;::::1;;::::0;;;:11:::1;:20;::::0;;;;;::::1;;34633:60;;;::::0;-1:-1:-1;;;34633:60:0;;8993:2:1;34633:60:0::1;::::0;::::1;8975:21:1::0;9032:2;9012:18;;;9005:30;9071:29;9051:18;;;9044:57;9118:18;;34633:60:0::1;8791:351:1::0;34633:60:0::1;34709:9;34704:327;34728:9;:16:::0;34724:20;::::1;34704:327;;;34786:7;-1:-1:-1::0;;;;;34770:23:0::1;:9;34780:1;34770:12;;;;;;;;:::i;:::-;;::::0;;;::::1;::::0;;;::::1;::::0;-1:-1:-1;;;;;34770:12:0::1;:23;34766:254;;;34829:9;34839:16:::0;;:20:::1;::::0;34858:1:::1;::::0;34839:20:::1;:::i;:::-;34829:31;;;;;;;;:::i;:::-;;::::0;;;::::1;::::0;;;::::1;::::0;34814:9:::1;:12:::0;;-1:-1:-1;;;;;34829:31:0;;::::1;::::0;34824:1;;34814:12;::::1;;;;;:::i;:::-;;::::0;;;::::1;::::0;;;;;;::::1;:46:::0;;-1:-1:-1;;;;;;34814:46:0::1;-1:-1:-1::0;;;;;34814:46:0;;::::1;;::::0;;34879:16;;::::1;::::0;;:7:::1;:16:::0;;;;;;:20;;;34918:11:::1;:20:::0;;;;:28;;-1:-1:-1;;34918:28:0::1;::::0;;34965:9:::1;:15:::0;;;::::1;;;;:::i;:::-;;::::0;;;::::1;::::0;;;;-1:-1:-1;;34965:15:0;;;;;-1:-1:-1;;;;;;34965:15:0::1;::::0;;;;;34704:327:::1;34559:479:::0;:::o;34766:254::-:1;34746:3:::0;::::1;::::0;::::1;:::i;:::-;;;;34704:327;;;;34559:479:::0;:::o;31791:218::-;8145:10;31879:4;31928:25;;;:11;:25;;;;;;;;-1:-1:-1;;;;;31928:34:0;;;;;;;;;;31879:4;;31896:83;;31919:7;;31928:50;;31967:10;31928:38;:50::i;35962:141::-;15828:6;;-1:-1:-1;;;;;15828:6:0;8145:10;15828:22;15820:67;;;;-1:-1:-1;;;15820:67:0;;6524:2:1;15820:67:0;;;6506:21:1;;;6543:18;;;6536:30;-1:-1:-1;;;;;;;;;;;6582:18:1;;;6575:62;6654:18;;15820:67:0;6322:356:1;15820:67:0;-1:-1:-1;;;;;36056:29:0;;;::::1;;::::0;;;:20:::1;:29;::::0;;;;:39;;-1:-1:-1;;36056:39:0::1;::::0;::::1;;::::0;;;::::1;::::0;;35962:141::o;33009:377::-;8145:10;33061:14;33110:19;;;:11;:19;;;;;;;;33109:20;33101:77;;;;-1:-1:-1;;;33101:77:0;;9808:2:1;33101:77:0;;;9790:21:1;9847:2;9827:18;;;9820:30;9886:34;9866:18;;;9859:62;9957:14;9937:18;;;9930:42;9989:19;;33101:77:0;9606:408:1;33101:77:0;33190:15;33214:19;33225:7;33214:10;:19::i;:::-;-1:-1:-1;;;;;;;;;33262:15:0;;;;;;:7;:15;;;;;;33189:44;;-1:-1:-1;33262:28:0;;:15;-1:-1:-1;33189:44:0;33262:19;:28::i;:::-;-1:-1:-1;;;;;33244:15:0;;;;;;:7;:15;;;;;:46;33311:7;;:20;;33323:7;33311:11;:20::i;:::-;33301:7;:30;33355:10;;:23;;33370:7;33355:14;:23::i;:::-;33342:10;:36;-1:-1:-1;;;33009:377:0:o;35704:111::-;15828:6;;-1:-1:-1;;;;;15828:6:0;8145:10;15828:22;15820:67;;;;-1:-1:-1;;;15820:67:0;;6524:2:1;15820:67:0;;;6506:21:1;;;6543:18;;;6536:30;-1:-1:-1;;;;;;;;;;;6582:18:1;;;6575:62;6654:18;;15820:67:0;6322:356:1;15820:67:0;-1:-1:-1;;;;;35773:27:0::1;;::::0;;;:18:::1;:27;::::0;;;;:34;;-1:-1:-1;;35773:34:0::1;35803:4;35773:34;::::0;;35704:111::o;33394:441::-;33484:7;33523:12;;33512:7;:23;;33504:67;;;;-1:-1:-1;;;33504:67:0;;10221:2:1;33504:67:0;;;10203:21:1;10260:2;10240:18;;;10233:30;10299:33;10279:18;;;10272:61;10350:18;;33504:67:0;10019:355:1;33504:67:0;33587:17;33582:246;;33622:15;33646:19;33657:7;33646:10;:19::i;:::-;-1:-1:-1;33621:44:0;;-1:-1:-1;33680:14:0;;-1:-1:-1;;;;;33680:14:0;33582:246;33729:23;33760:19;33771:7;33760:10;:19::i;:::-;-1:-1:-1;33727:52:0;;-1:-1:-1;33794:22:0;;-1:-1:-1;;;;;33794:22:0;37269:193;15828:6;;-1:-1:-1;;;;;15828:6:0;8145:10;15828:22;15820:67;;;;-1:-1:-1;;;15820:67:0;;6524:2:1;15820:67:0;;;6506:21:1;;;6543:18;;;6536:30;-1:-1:-1;;;;;;;;;;;6582:18:1;;;6575:62;6654:18;;15820:67:0;6322:356:1;15820:67:0;37369:1:::1;37353:13;:17:::0;37400:2:::1;37384:18:::0;::::1;37381:72;;37416:13;:28:::0;37269:193::o;34104:447::-;15828:6;;-1:-1:-1;;;;;15828:6:0;8145:10;15828:22;15820:67;;;;-1:-1:-1;;;15820:67:0;;6524:2:1;15820:67:0;;;6506:21:1;;;6543:18;;;6536:30;-1:-1:-1;;;;;;;;;;;6582:18:1;;;6575:62;6654:18;;15820:67:0;6322:356:1;15820:67:0;-1:-1:-1;;;;;34301:20:0;::::1;;::::0;;;:11:::1;:20;::::0;;;;;::::1;;34300:21;34292:61;;;::::0;-1:-1:-1;;;34292:61:0;;8993:2:1;34292:61:0::1;::::0;::::1;8975:21:1::0;9032:2;9012:18;;;9005:30;9071:29;9051:18;;;9044:57;9118:18;;34292:61:0::1;8791:351:1::0;34292:61:0::1;-1:-1:-1::0;;;;;34367:16:0;::::1;34386:1;34367:16:::0;;;:7:::1;:16;::::0;;;;;:20;34364:108:::1;;-1:-1:-1::0;;;;;34443:16:0;::::1;;::::0;;;:7:::1;:16;::::0;;;;;34423:37:::1;::::0;:19:::1;:37::i;:::-;-1:-1:-1::0;;;;;34404:16:0;::::1;;::::0;;;:7:::1;:16;::::0;;;;:56;34364:108:::1;-1:-1:-1::0;;;;;34482:20:0::1;;::::0;;;:11:::1;:20;::::0;;;;:27;;-1:-1:-1;;34482:27:0::1;34505:4;34482:27:::0;;::::1;::::0;;;34520:9:::1;:23:::0;;;;::::1;::::0;;;;;;::::1;::::0;;-1:-1:-1;;;;;;34520:23:0::1;::::0;;::::1;::::0;;34104:447::o;32884:113::-;15828:6;;-1:-1:-1;;;;;15828:6:0;8145:10;15828:22;15820:67;;;;-1:-1:-1;;;15820:67:0;;6524:2:1;15820:67:0;;;6506:21:1;;;6543:18;;;6536:30;-1:-1:-1;;;;;;;;;;;6582:18:1;;;6575:62;6654:18;;15820:67:0;6322:356:1;15820:67:0;32970:19:::1;:9:::0;32982:7:::1;32970:19;:::i;:::-;32957:10;:32:::0;-1:-1:-1;32884:113:0:o;36895:193::-;15828:6;;-1:-1:-1;;;;;15828:6:0;8145:10;15828:22;15820:67;;;;-1:-1:-1;;;15820:67:0;;6524:2:1;15820:67:0;;;6506:21:1;;;6543:18;;;6536:30;-1:-1:-1;;;;;;;;;;;6582:18:1;;;6575:62;6654:18;;15820:67:0;6322:356:1;15820:67:0;36995:1:::1;36979:13;:17:::0;37026:2:::1;37010:18:::0;::::1;37007:72;;37042:13;:28:::0;36895:193::o;32521:108::-;32599:22;32617:4;32599:15;:22;:::i;:::-;8145:10;32574:22;;;;:8;:22;;;;;:47;-1:-1:-1;32521:108:0:o;30597:198::-;-1:-1:-1;;;;;30687:20:0;;30663:7;30687:20;;;:11;:20;;;;;;;;30683:49;;;-1:-1:-1;;;;;;30716:16:0;;;;;:7;:16;;;;;;;30597:198::o;30683:49::-;-1:-1:-1;;;;;30770:16:0;;;;;;:7;:16;;;;;;30750:37;;:19;:37::i;16257:148::-;15828:6;;-1:-1:-1;;;;;15828:6:0;8145:10;15828:22;15820:67;;;;-1:-1:-1;;;15820:67:0;;6524:2:1;15820:67:0;;;6506:21:1;;;6543:18;;;6536:30;-1:-1:-1;;;;;;;;;;;6582:18:1;;;6575:62;6654:18;;15820:67:0;6322:356:1;15820:67:0;16364:1:::1;16348:6:::0;;16327:40:::1;::::0;-1:-1:-1;;;;;16348:6:0;;::::1;::::0;16327:40:::1;::::0;16364:1;;16327:40:::1;16395:1;16378:19:::0;;-1:-1:-1;;;;;;16378:19:0::1;::::0;;16257:148::o;52670:340::-;15828:6;;-1:-1:-1;;;;;15828:6:0;8145:10;15828:22;15820:67;;;;-1:-1:-1;;;15820:67:0;;6524:2:1;15820:67:0;;;6506:21:1;;;6543:18;;;6536:30;-1:-1:-1;;;;;;;;;;;6582:18:1;;;6575:62;6654:18;;15820:67:0;6322:356:1;15820:67:0;52769:19;;52755:11:::1;52795:210;52815:6;52811:1;:10;52795:210;;;52833:15;52851:12;52864:1;52851:15;;;;;;;;:::i;:::-;;::::0;;::::1;::::0;;;;;;;-1:-1:-1;;;;;52883:18:0;::::1;;::::0;;;:9:::1;:18:::0;;;;;;;;52851:15;;-1:-1:-1;52883:18:0::1;;:26;;:18:::0;:26:::1;;52875:62;;;::::0;-1:-1:-1;;;52875:62:0;;10714:2:1;52875:62:0::1;::::0;::::1;10696:21:1::0;10753:2;10733:18;;;10726:30;10792:25;10772:18;;;10765:53;10835:18;;52875:62:0::1;10512:347:1::0;52875:62:0::1;-1:-1:-1::0;;;;;52946:18:0::1;;::::0;;;:9:::1;:18;::::0;;;;:25;;-1:-1:-1;;52946:25:0::1;52967:4;52946:25:::0;;::::1;::::0;;;52992:3:::1;52795:210;;37474:193:::0;15828:6;;-1:-1:-1;;;;;15828:6:0;8145:10;15828:22;15820:67;;;;-1:-1:-1;;;15820:67:0;;6524:2:1;15820:67:0;;;6506:21:1;;;6543:18;;;6536:30;-1:-1:-1;;;;;;;;;;;6582:18:1;;;6575:62;6654:18;;15820:67:0;6322:356:1;15820:67:0;37574:1:::1;37558:13;:17:::0;37605:2:::1;37589:18:::0;::::1;37586:72;;37621:13;:28:::0;37474:193::o;53397:101::-;15828:6;;-1:-1:-1;;;;;15828:6:0;8145:10;15828:22;15820:67;;;;-1:-1:-1;;;15820:67:0;;6524:2:1;15820:67:0;;;6506:21:1;;;6543:18;;;6536:30;-1:-1:-1;;;;;;;;;;;6582:18:1;;;6575:62;6654:18;;15820:67:0;6322:356:1;15820:67:0;53464:11:::1;:26:::0;;;::::1;;::::0;::::1;-1:-1:-1::0;;53464:26:0;;::::1;::::0;;;::::1;::::0;;53397:101::o;36244:121::-;15828:6;;-1:-1:-1;;;;;15828:6:0;8145:10;15828:22;15820:67;;;;-1:-1:-1;;;15820:67:0;;6524:2:1;15820:67:0;;;6506:21:1;;;6543:18;;;6536:30;-1:-1:-1;;;;;;;;;;;6582:18:1;;;6575:62;6654:18;;15820:67:0;6322:356:1;15820:67:0;36328:17:::1;:29:::0;;-1:-1:-1;;;;;;36328:29:0::1;-1:-1:-1::0;;;;;36328:29:0;;;::::1;::::0;;;::::1;::::0;;36244:121::o;30303:87::-;30342:13;30375:7;30368:14;;;;;:::i;49285:131::-;49357:4;15828:6;;-1:-1:-1;;;;;15828:6:0;8145:10;15828:22;15820:67;;;;-1:-1:-1;;;15820:67:0;;6524:2:1;15820:67:0;;;6506:21:1;;;6543:18;;;6536:30;-1:-1:-1;;;;;;;;;;;6582:18:1;;;6575:62;6654:18;;15820:67:0;6322:356:1;15820:67:0;49370:22:::1;49376:7;49385:6;49370:5;:22::i;32017:269::-:0;32110:4;32127:129;8145:10;32150:7;32159:96;32198:15;32159:96;;;;;;;;;;;;;;;;;8145:10;32159:25;;;;:11;:25;;;;;;;;-1:-1:-1;;;;;32159:34:0;;;;;;;;;;;;:38;:96::i;17279:305::-;17331:14;;-1:-1:-1;;;;;17331:14:0;17349:10;17331:28;17323:76;;;;-1:-1:-1;;;17323:76:0;;11066:2:1;17323:76:0;;;11048:21:1;11105:2;11085:18;;;11078:30;11144:34;11124:18;;;11117:62;11215:5;11195:18;;;11188:33;11238:19;;17323:76:0;10864:399:1;17323:76:0;17436:9;;17418:15;:27;17410:72;;;;-1:-1:-1;;;17410:72:0;;11470:2:1;17410:72:0;;;11452:21:1;11509:2;11489:18;;;11482:30;11548:33;11528:18;;;11521:61;11599:18;;17410:72:0;11268:355:1;17410:72:0;17527:14;;;17519:6;;17498:44;;-1:-1:-1;;;;;17527:14:0;;;;17519:6;;;;17498:44;;;17562:14;;;17553:23;;-1:-1:-1;;;;;;17553:23:0;-1:-1:-1;;;;;17562:14:0;;;17553:23;;;;;;17279:305::o;30807:254::-;8145:10;30885:4;30928:22;;;:8;:22;;;;;;30910:15;:40;30902:76;;;;-1:-1:-1;;;30902:76:0;;7689:2:1;30902:76:0;;;7671:21:1;7728:2;7708:18;;;7701:30;7767:24;7747:18;;;7740:52;7809:18;;30902:76:0;7487:346:1;30902:76:0;30989:42;8145:10;31013:9;31024:6;30989:9;:42::i;32773:103::-;15828:6;;-1:-1:-1;;;;;15828:6:0;8145:10;15828:22;15820:67;;;;-1:-1:-1;;;15820:67:0;;6524:2:1;15820:67:0;;;6506:21:1;;;6543:18;;;6536:30;-1:-1:-1;;;;;;;;;;;6582:18:1;;;6575:62;6654:18;;15820:67:0;6322:356:1;15820:67:0;32853:15:::1;:5:::0;32861:7:::1;32853:15;:::i;:::-;32838:12;:30:::0;-1:-1:-1;32773:103:0:o;37679:171::-;15828:6;;-1:-1:-1;;;;;15828:6:0;8145:10;15828:22;15820:67;;;;-1:-1:-1;;;15820:67:0;;6524:2:1;15820:67:0;;;6506:21:1;;;6543:18;;;6536:30;-1:-1:-1;;;;;;;;;;;6582:18:1;;;6575:62;6654:18;;15820:67:0;6322:356:1;15820:67:0;37756:21:::1;:32:::0;;;::::1;;;;-1:-1:-1::0;;37756:32:0;;::::1;;::::0;;37804:38:::1;::::0;::::1;::::0;::::1;::::0;37780:8;1831:14:1;1824:22;1806:41;;1794:2;1779:18;;1666:187;37804:38:0::1;;;;;;;;37679:171:::0;:::o;36111:121::-;15828:6;;-1:-1:-1;;;;;15828:6:0;8145:10;15828:22;15820:67;;;;-1:-1:-1;;;15820:67:0;;6524:2:1;15820:67:0;;;6506:21:1;;;6543:18;;;6536:30;-1:-1:-1;;;;;;;;;;;6582:18:1;;;6575:62;6654:18;;15820:67:0;6322:356:1;15820:67:0;36195:17:::1;:29:::0;;-1:-1:-1;;;;;;36195:29:0::1;-1:-1:-1::0;;;;;36195:29:0;;;::::1;::::0;;;::::1;::::0;;36111:121::o;16977:226::-;15828:6;;-1:-1:-1;;;;;15828:6:0;8145:10;15828:22;15820:67;;;;-1:-1:-1;;;15820:67:0;;6524:2:1;15820:67:0;;;6506:21:1;;;6543:18;;;6536:30;-1:-1:-1;;;;;;;;;;;6582:18:1;;;6575:62;6654:18;;15820:67:0;6322:356:1;15820:67:0;17058:6:::1;::::0;;;17041:23;;-1:-1:-1;;;;;;17041:23:0;;::::1;-1:-1:-1::0;;;;;17058:6:0;::::1;17041:23;::::0;;;17075:19:::1;::::0;;17117:22:::1;17135:4:::0;17117:15:::1;:22;:::i;:::-;17105:9;:34:::0;17192:1:::1;17176:6:::0;;17155:40:::1;::::0;-1:-1:-1;;;;;17176:6:0;;::::1;::::0;17155:40:::1;::::0;17192:1;;17155:40:::1;16977:226:::0;:::o;36773:110::-;15828:6;;-1:-1:-1;;;;;15828:6:0;8145:10;15828:22;15820:67;;;;-1:-1:-1;;;15820:67:0;;6524:2:1;15820:67:0;;;6506:21:1;;;6543:18;;;6536:30;-1:-1:-1;;;;;;;;;;;6582:18:1;;;6575:62;6654:18;;15820:67:0;6322:356:1;15820:67:0;-1:-1:-1;;;;;36840:27:0::1;36870:5;36840:27:::0;;;:18:::1;:27;::::0;;;;:35;;-1:-1:-1;;36840:35:0::1;::::0;;36773:110::o;32650:111::-;15828:6;;-1:-1:-1;;;;;15828:6:0;8145:10;15828:22;15820:67;;;;-1:-1:-1;;;15820:67:0;;6524:2:1;15820:67:0;;;6506:21:1;;;6543:18;;;6536:30;-1:-1:-1;;;;;;;;;;;6582:18:1;;;6575:62;6654:18;;15820:67:0;6322:356:1;15820:67:0;32727:12:::1;:26:::0;32650:111::o;16560:244::-;15828:6;;-1:-1:-1;;;;;15828:6:0;8145:10;15828:22;15820:67;;;;-1:-1:-1;;;15820:67:0;;6524:2:1;15820:67:0;;;6506:21:1;;;6543:18;;;6536:30;-1:-1:-1;;;;;;;;;;;6582:18:1;;;6575:62;6654:18;;15820:67:0;6322:356:1;15820:67:0;-1:-1:-1;;;;;16649:22:0;::::1;16641:73;;;::::0;-1:-1:-1;;;16641:73:0;;11830:2:1;16641:73:0::1;::::0;::::1;11812:21:1::0;11869:2;11849:18;;;11842:30;11908:34;11888:18;;;11881:62;11979:8;11959:18;;;11952:36;12005:19;;16641:73:0::1;11628:402:1::0;16641:73:0::1;16751:6;::::0;;16730:38:::1;::::0;-1:-1:-1;;;;;16730:38:0;;::::1;::::0;16751:6;::::1;::::0;16730:38:::1;::::0;::::1;16779:6;:17:::0;;-1:-1:-1;;;;;;16779:17:0::1;-1:-1:-1::0;;;;;16779:17:0;;;::::1;::::0;;;::::1;::::0;;16560:244::o;41666:337::-;-1:-1:-1;;;;;41759:19:0;;41751:68;;;;-1:-1:-1;;;41751:68:0;;12237:2:1;41751:68:0;;;12219:21:1;12276:2;12256:18;;;12249:30;12315:34;12295:18;;;12288:62;12386:6;12366:18;;;12359:34;12410:19;;41751:68:0;12035:400:1;41751:68:0;-1:-1:-1;;;;;41838:21:0;;41830:68;;;;-1:-1:-1;;;41830:68:0;;12642:2:1;41830:68:0;;;12624:21:1;12681:2;12661:18;;;12654:30;12720:34;12700:18;;;12693:62;12791:4;12771:18;;;12764:32;12813:19;;41830:68:0;12440:398:1;41830:68:0;-1:-1:-1;;;;;41911:18:0;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;:36;;;41963:32;;2004:25:1;;;41963:32:0;;1977:18:1;41963:32:0;;;;;;;41666:337;;;:::o;42011:2478::-;-1:-1:-1;;;;;42133:18:0;;42125:68;;;;-1:-1:-1;;;42125:68:0;;13045:2:1;42125:68:0;;;13027:21:1;13084:2;13064:18;;;13057:30;13123:34;13103:18;;;13096:62;13194:7;13174:18;;;13167:35;13219:19;;42125:68:0;12843:401:1;42125:68:0;-1:-1:-1;;;;;42212:16:0;;42204:64;;;;-1:-1:-1;;;42204:64:0;;13451:2:1;42204:64:0;;;13433:21:1;13490:2;13470:18;;;13463:30;13529:34;13509:18;;;13502:62;13600:5;13580:18;;;13573:33;13623:19;;42204:64:0;13249:399:1;42204:64:0;42296:1;42287:6;:10;42279:64;;;;-1:-1:-1;;;42279:64:0;;13855:2:1;42279:64:0;;;13837:21:1;13894:2;13874:18;;;13867:30;13933:34;13913:18;;;13906:62;14004:11;13984:18;;;13977:39;14033:19;;42279:64:0;13653:405:1;42279:64:0;15546:7;15573:6;-1:-1:-1;;;;;42361:15:0;;;15573:6;;42361:15;;;;:32;;-1:-1:-1;15546:7:0;15573:6;-1:-1:-1;;;;;42380:13:0;;;15573:6;;42380:13;;42361:32;:52;;;;-1:-1:-1;;;;;;42398:15:0;;;;;;:9;:15;;;;;;;;42397:16;42361:52;:70;;;;-1:-1:-1;;;;;;42418:13:0;;;;;;:9;:13;;;;;;;;42417:14;42361:70;42357:285;;;42496:11;;;;;;;42491:140;;-1:-1:-1;;;;;42532:15:0;;;;;;:9;:15;;;;;;;;42524:91;;;;-1:-1:-1;;;42524:91:0;;14265:2:1;42524:91:0;;;14247:21:1;14304:2;14284:18;;;14277:30;14343:34;14323:18;;;14316:62;14414:33;14394:18;;;14387:61;14465:19;;42524:91:0;14063:427:1;42524:91:0;-1:-1:-1;;;;;42658:26:0;;;;;;:20;:26;;;;;;;;:35;;;:72;;-1:-1:-1;;;;;;42697:24:0;;;;;;:20;:24;;;;;;;;:33;42658:72;:115;;;;-1:-1:-1;;;;;;42734:30:0;;;;;;:24;:30;;;;;;;;:39;42658:115;:156;;;;-1:-1:-1;;;;;;42777:28:0;;;;;;:24;:28;;;;;;;;:37;42658:156;:179;;;;;42824:13;-1:-1:-1;;;;;42818:19:0;:2;-1:-1:-1;;;;;42818:19:0;;;42658:179;42654:491;;;42872:12;;42862:6;:22;;42854:75;;;;-1:-1:-1;;;42854:75:0;;14697:2:1;42854:75:0;;;14679:21:1;14736:2;14716:18;;;14709:30;14775:34;14755:18;;;14748:62;14846:10;14826:18;;;14819:38;14874:19;;42854:75:0;14495:404:1;42854:75:0;42946:32;42981:13;42991:2;42981:9;:13::i;:::-;43054:10;;42946:48;;-1:-1:-1;43017:33:0;43044:6;42946:48;43017:33;:::i;:::-;:47;;43009:96;;;;-1:-1:-1;;;43009:96:0;;15106:2:1;43009:96:0;;;15088:21:1;15145:2;15125:18;;;15118:30;15184:34;15164:18;;;15157:62;15255:6;15235:18;;;15228:34;15279:19;;43009:96:0;14904:400:1;43009:96:0;43116:17;43125:4;43130:2;43116:8;:17::i;:::-;42839:306;42654:491;43439:28;43470:24;43488:4;43470:9;:24::i;:::-;43439:55;;43542:12;;43518:20;:36;43515:112;;-1:-1:-1;43603:12:0;;43515:112;43698:29;;43674:53;;;;;;;43756;;-1:-1:-1;43793:16:0;;;;43792:17;43756:53;:91;;;;;43834:13;-1:-1:-1;;;;;43826:21:0;:4;-1:-1:-1;;;;;43826:21:0;;;43756:91;:129;;;;-1:-1:-1;43864:21:0;;;;;;;43756:129;43738:318;;;43935:29;;43912:52;;44008:36;44023:20;44008:14;:36::i;:::-;-1:-1:-1;;;;;44264:24:0;;44137:12;44264:24;;;:18;:24;;;;;;44152:4;;44264:24;;;:50;;-1:-1:-1;;;;;;44292:22:0;;;;;;:18;:22;;;;;;;;44264:50;44261:96;;;-1:-1:-1;44340:5:0;44261:96;44443:38;44458:4;44463:2;44466:6;44473:7;44443:14;:38::i;:::-;42114:2375;;;42011:2478;;;:::o;4471:192::-;4557:7;4593:12;4585:6;;;;4577:29;;;;-1:-1:-1;;;4577:29:0;;;;;;;;:::i;:::-;-1:-1:-1;4617:9:0;4629:5;4633:1;4629;:5;:::i;:::-;4617:17;4471:192;-1:-1:-1;;;;;4471:192:0:o;39330:163::-;39371:7;39392:15;39409;39428:19;:17;:19::i;:::-;39391:56;;-1:-1:-1;39391:56:0;-1:-1:-1;39465:20:0;39391:56;;39465:11;:20::i;:::-;39458:27;;;;39330:163;:::o;5869:132::-;5927:7;5954:39;5958:1;5961;5954:39;;;;;;;;;;;;;;;;;:3;:39::i;3568:181::-;3626:7;;3658:5;3662:1;3658;:5;:::i;:::-;3646:17;;3687:1;3682;:6;;3674:46;;;;-1:-1:-1;;;3674:46:0;;15511:2:1;3674:46:0;;;15493:21:1;15550:2;15530:18;;;15523:30;15589:29;15569:18;;;15562:57;15636:18;;3674:46:0;15309:351:1;38123:419:0;38182:7;38191;38200;38209;38218;38227;38248:23;38273:12;38287:18;38309:20;38321:7;38309:11;:20::i;:::-;38247:82;;;;;;38341:15;38358:23;38383:12;38399:50;38411:7;38420:4;38426:10;38438;:8;:10::i;:::-;38399:11;:50::i;:::-;38340:109;;;;-1:-1:-1;38340:109:0;;-1:-1:-1;38500:15:0;;-1:-1:-1;38517:4:0;;-1:-1:-1;38523:10:0;;-1:-1:-1;38123:419:0;;-1:-1:-1;;;;;38123:419:0:o;4032:136::-;4090:7;4117:43;4121:1;4124;4117:43;;;;;;;;;;;;;;;;;:3;:43::i;48598:525::-;-1:-1:-1;;;;;48670:21:0;;48662:77;;;;-1:-1:-1;;;48662:77:0;;15867:2:1;48662:77:0;;;15849:21:1;15906:2;15886:18;;;15879:30;15945:34;15925:18;;;15918:62;16016:13;15996:18;;;15989:41;16047:19;;48662:77:0;15665:407:1;48662:77:0;-1:-1:-1;;;;;48754:18:0;;;;;;:9;:18;;;;;;:28;-1:-1:-1;48754:28:0;48746:93;;;;-1:-1:-1;;;48746:93:0;;16279:2:1;48746:93:0;;;16261:21:1;16318:2;16298:18;;;16291:30;16357:34;16337:18;;;16330:62;16428:22;16408:18;;;16401:50;16468:19;;48746:93:0;16077:416:1;48746:93:0;-1:-1:-1;;;;;48920:18:0;;;;;;:9;:18;;;;;;:27;;48941:6;;48920:27;:::i;:::-;-1:-1:-1;;;;;48899:18:0;;;;;;:9;:18;;;;;:48;48998:12;;:21;;49013:6;;48998:21;:::i;:::-;48983:12;:36;49080:37;;2004:25:1;;;49106:1:0;;-1:-1:-1;;;;;49080:37:0;;;;;1992:2:1;1977:18;49080:37:0;;;;;;;48598:525;;:::o;52021:599::-;52114:13;-1:-1:-1;;;;;52096:32:0;:6;-1:-1:-1;;;;;52096:32:0;;:59;;;;-1:-1:-1;;;;;;52132:23:0;;;;52096:59;:100;;;;;52180:15;-1:-1:-1;;;;;52159:37:0;:9;-1:-1:-1;;;;;52159:37:0;;;52096:100;:124;;;;-1:-1:-1;15546:7:0;15573:6;-1:-1:-1;;;;;52200:20:0;;;15573:6;;52200:20;;52096:124;52092:210;;;-1:-1:-1;;;;;52241:27:0;;;;;;:16;:27;;;;;52271:15;52241:45;;52092:210;-1:-1:-1;;;;;52316:26:0;;;;;;:18;:26;;;;;;;;52315:27;:51;;;;-1:-1:-1;;;;;;52346:20:0;;;;52315:51;:88;;;;;52389:13;-1:-1:-1;;;;;52371:32:0;:6;-1:-1:-1;;;;;52371:32:0;;;52315:88;:170;;;;;52429:13;-1:-1:-1;;;;;52408:35:0;:9;-1:-1:-1;;;;;52408:35:0;;:76;;;;52468:15;-1:-1:-1;;;;;52447:37:0;:9;-1:-1:-1;;;;;52447:37:0;;52408:76;52312:301;;;52539:17;;-1:-1:-1;;;;;52510:24:0;;;;;;:16;:24;;;;;;52560:15;;52510:47;;:24;:28;:47::i;:::-;:65;52502:99;;;;-1:-1:-1;;;52502:99:0;;16700:2:1;52502:99:0;;;16682:21:1;16739:2;16719:18;;;16712:30;16778:23;16758:18;;;16751:51;16819:18;;52502:99:0;16498:345:1;44503:2630:0;28451:16;:23;;-1:-1:-1;;28451:23:0;28470:4;28451:23;;;:16;44654:27:::1;:20:::0;44679:1:::1;44654:24;:27::i;:::-;44639:42:::0;-1:-1:-1;44692:17:0::1;44712:30;:20:::0;44639:42;44712:24:::1;:30::i;:::-;44692:50;;44753:19;44807:13;;44791;;44775;;:29;;;;:::i;:::-;:45;;;;:::i;:::-;44753:67:::0;-1:-1:-1;45123:21:0::1;45189:22;45206:4:::0;45189:16:::1;:22::i;:::-;45342:18;45363:41;:21;45389:14:::0;45363:25:::1;:41::i;:::-;45342:62;;45455:24;45482:46;45514:13;;45482:27;45497:11;45482:10;:14;;:27;;;;:::i;:::-;:31:::0;::::1;:46::i;:::-;45455:73;;45539:24;45566:45;45597:13;;45566:26;45580:11;45566:9;:13;;:26;;;;:::i;:45::-;45539:72;;45652:24;45679:46;45711:13;;45679:27;45694:11;45679:10;:14;;:27;;;;:::i;:46::-;45652:73;;45736:24;45763:45;45794:13;;45763:26;45777:11;45763:9;:13;;:26;;;;:::i;:45::-;45736:72:::0;-1:-1:-1;45829:20:0::1;45852:54;45889:16:::0;45852:32:::1;:10:::0;45867:16;45852:14:::1;:32::i;:::-;:36:::0;::::1;:54::i;:::-;45829:77:::0;-1:-1:-1;45917:17:0::1;45937:53;45973:16:::0;45937:31:::1;:9:::0;45951:16;45937:13:::1;:31::i;:53::-;46064:17;::::0;:51:::1;::::0;45917:73;;-1:-1:-1;46032:9:0::1;::::0;;;-1:-1:-1;;;;;46064:17:0::1;::::0;46094:16;;46032:9;46064:51;46032:9;46064:51;46094:16;46064:17;:51:::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;46031:84;;;;46129:4;46126:338;;;46149:98;46172:4;46179:42;46223:16;46241:5;46149:14;:98::i;:::-;46267:85;::::0;2004:25:1;;;46291:42:0::1;::::0;46284:4:::1;::::0;46267:85:::1;::::0;1992:2:1;1977:18;46267:85:0::1;;;;;;;46126:338;;;46434:17;::::0;46385:67:::1;::::0;46398:16;;46416;;-1:-1:-1;;;;;46434:17:0::1;46385:12;:67::i;:::-;46499:17;::::0;:51:::1;::::0;-1:-1:-1;;;;;46499:17:0;;::::1;::::0;46529:16;;46499:51:::1;::::0;;;46529:16;46499:17;:51:::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1::0;46484:66:0;;-1:-1:-1;46484:66:0;-1:-1:-1;46561:338:0;::::1;;;46584:98;46607:4;46614:42;46658:16;46676:5;46584:14;:98::i;:::-;46702:85;::::0;2004:25:1;;;46726:42:0::1;::::0;46719:4:::1;::::0;46702:85:::1;::::0;1992:2:1;1977:18;46702:85:0::1;;;;;;;46561:338;;;46869:17;::::0;46820:67:::1;::::0;46833:16;;46851;;-1:-1:-1;;;;;46869:17:0::1;46820:12;:67::i;:::-;46956:51;46969:9;46980:12;46994;15676:11:::0;;-1:-1:-1;;;;;15676:11:0;;15605:90;46994:12:::1;46956;:51::i;:::-;47082:43;::::0;;17260:25:1;;;17316:2;17301:18;;17294:34;;;17344:18;;;17337:34;;;47082:43:0::1;::::0;17248:2:1;17233:18;47082:43:0::1;;;;;;;-1:-1:-1::0;;28497:16:0;:24;;-1:-1:-1;;28497:24:0;;;-1:-1:-1;;;;;;;;;;;;44503:2630:0:o;49503:834::-;49614:7;49610:40;;49636:14;:12;:14::i;:::-;-1:-1:-1;;;;;49675:19:0;;;;;;:11;:19;;;;;;;;:46;;;;-1:-1:-1;;;;;;49699:22:0;;;;;;:11;:22;;;;;;;;49698:23;49675:46;49671:597;;;49738:48;49760:6;49768:9;49779:6;49738:21;:48::i;:::-;49671:597;;;-1:-1:-1;;;;;49809:19:0;;;;;;:11;:19;;;;;;;;49808:20;:46;;;;-1:-1:-1;;;;;;49832:22:0;;;;;;:11;:22;;;;;;;;49808:46;49804:464;;;49871:46;49891:6;49899:9;49910:6;49871:19;:46::i;49804:464::-;-1:-1:-1;;;;;49940:19:0;;;;;;:11;:19;;;;;;;;49939:20;:47;;;;-1:-1:-1;;;;;;49964:22:0;;;;;;:11;:22;;;;;;;;49963:23;49939:47;49935:333;;;50003:44;50021:6;50029:9;50040:6;50003:17;:44::i;49935:333::-;-1:-1:-1;;;;;50069:19:0;;;;;;:11;:19;;;;;;;;:45;;;;-1:-1:-1;;;;;;50092:22:0;;;;;;:11;:22;;;;;;;;50069:45;50065:203;;;50131:48;50153:6;50161:9;50172:6;50131:21;:48::i;50065:203::-;50212:44;50230:6;50238:9;50249:6;50212:17;:44::i;:::-;50292:7;50288:41;;50314:15;41356;;41346:7;:25;41398:21;;41382:13;:37;41446:21;;41430:13;:37;41494:21;;41478:13;:37;41302:221;50314:15;49503:834;;;;:::o;39501:581::-;39598:7;;39634:12;;39551:7;;;;;39663:294;39687:9;:16;39683:20;;39663:294;;;39753:7;39729;:21;39737:9;39747:1;39737:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;39737:12:0;39729:21;;;;;;;;;;;;;:31;;:66;;;39788:7;39764;:21;39772:9;39782:1;39772:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;39772:12:0;39764:21;;;;;;;;;;;;;:31;39729:66;39725:102;;;39805:7;;39814:12;;39797:30;;;;;;;39501:581;;:::o;39725:102::-;39852:34;39864:7;:21;39872:9;39882:1;39872:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;39872:12:0;39864:21;;;;;;;;;;;;;39852:7;;:11;:34::i;:::-;39842:44;;39911:34;39923:7;:21;39931:9;39941:1;39931:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;39931:12:0;39923:21;;;;;;;;;;;;;39911:7;;:11;:34::i;:::-;39901:44;-1:-1:-1;39705:3:0;;;;:::i;:::-;;;;39663:294;;;-1:-1:-1;39993:12:0;;39981:7;;:25;;:11;:25::i;:::-;39971:7;:35;39967:71;;;40016:7;;40025:12;;40008:30;;;;;;39501:581;;:::o;39967:71::-;40057:7;;40066;;-1:-1:-1;39501:581:0;-1:-1:-1;39501:581:0:o;6497:278::-;6583:7;6618:12;6611:5;6603:28;;;;-1:-1:-1;;;6603:28:0;;;;;;;;:::i;:::-;-1:-1:-1;6642:9:0;6654:5;6658:1;6654;:5;:::i;38550:335::-;38610:7;38619;38628;38648:12;38663:24;38679:7;38663:15;:24::i;:::-;38648:39;;38698:18;38719:35;38746:7;38719:26;:35::i;:::-;38698:56;-1:-1:-1;38765:23:0;38791:33;38698:56;38791:17;:7;38803:4;38791:11;:17::i;:33::-;38765:59;38860:4;;-1:-1:-1;38866:10:0;;-1:-1:-1;38550:335:0;;-1:-1:-1;;;38550:335:0:o;38893:429::-;39008:7;;;;39064:24;:7;39076:11;39064;:24::i;:::-;39046:42;-1:-1:-1;39099:12:0;39114:21;:4;39123:11;39114:8;:21::i;:::-;39099:36;-1:-1:-1;39146:18:0;39167:27;:10;39182:11;39167:14;:27::i;:::-;39146:48;-1:-1:-1;39205:23:0;39231:33;39146:48;39231:17;:7;39243:4;39231:11;:17::i;:33::-;39283:7;;;;-1:-1:-1;39309:4:0;;-1:-1:-1;38893:429:0;;-1:-1:-1;;;;;;;38893:429:0:o;47147:589::-;47297:16;;;47311:1;47297:16;;;;;;;;47273:21;;47297:16;;;;;;;;;;-1:-1:-1;47297:16:0;47273:40;;47342:4;47324;47329:1;47324:7;;;;;;;;:::i;:::-;;;;;;:23;-1:-1:-1;;;;;47324:23:0;;;-1:-1:-1;;;;;47324:23:0;;;;;47368:15;-1:-1:-1;;;;;47368:20:0;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;47358:4;47363:1;47358:7;;;;;;;;:::i;:::-;;;;;;:32;-1:-1:-1;;;;;47358:32:0;;;-1:-1:-1;;;;;47358:32:0;;;;;47403:62;47420:4;47435:15;47453:11;47403:8;:62::i;:::-;47504:224;;;;;-1:-1:-1;;;;;47504:15:0;:66;;;;:224;;47585:11;;47611:1;;47655:4;;47682;;47702:15;;47504:224;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4922:471;4980:7;5225:6;5221:47;;-1:-1:-1;5255:1:0;5248:8;;5221:47;5280:9;5292:5;5296:1;5292;:5;:::i;:::-;5280:17;-1:-1:-1;5325:1:0;5316:5;5320:1;5280:17;5316:5;:::i;:::-;:10;5308:56;;;;-1:-1:-1;;;5308:56:0;;19150:2:1;5308:56:0;;;19132:21:1;19189:2;19169:18;;;19162:30;19228:34;19208:18;;;19201:62;19299:3;19279:18;;;19272:31;19320:19;;5308:56:0;18948:397:1;47744:520:0;47904:62;47921:4;47936:15;47954:11;47904:8;:62::i;:::-;48009:247;;;;;48081:4;48009:247;;;19714:34:1;19764:18;;;19757:34;;;48127:1:0;19807:18:1;;;19800:34;;;19850:18;;;19843:34;-1:-1:-1;;;;;19914:15:1;;;19893:19;;;19886:44;48230:15:0;19946:19:1;;;19939:35;48009:15:0;:31;;;;48048:9;;19625:19:1;;48009:247:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;40844:446::-;40890:7;;:12;:34;;;;-1:-1:-1;40906:13:0;;:18;40890:34;:56;;;;-1:-1:-1;40928:13:0;;:18;40890:56;:78;;;;-1:-1:-1;40950:13:0;;:18;40890:78;40887:90;;;40844:446::o;40887:90::-;41015:7;;;40997:15;:25;41057:13;;;41033:21;:37;41105:13;;;41081:21;:37;41153:13;;;41129:21;:37;-1:-1:-1;41187:11:0;;;;41209:17;;;;41237;;;41265;40844:446::o;51449:566::-;51552:15;51569:23;51594:12;51608:23;51633:12;51647:18;51669:19;51680:7;51669:10;:19::i;:::-;-1:-1:-1;;;;;51717:15:0;;;;;;:7;:15;;;;;;51551:137;;-1:-1:-1;51551:137:0;;-1:-1:-1;51551:137:0;;-1:-1:-1;51551:137:0;-1:-1:-1;51551:137:0;-1:-1:-1;51551:137:0;-1:-1:-1;51717:28:0;;51737:7;51717:19;:28::i;:::-;-1:-1:-1;;;;;51699:15:0;;;;;;:7;:15;;;;;;;;:46;;;;51774:7;:15;;;;:28;;51794:7;51774:19;:28::i;:::-;-1:-1:-1;;;;;51756:15:0;;;;;;;:7;:15;;;;;;:46;;;;51834:18;;;;;;;:39;;51857:15;51834:22;:39::i;:::-;-1:-1:-1;;;;;51813:18:0;;;;;;:7;:18;;;;;:60;51887:26;51902:10;51887:14;:26::i;:::-;51924:23;51936:4;51942;51924:11;:23::i;:::-;51980:9;-1:-1:-1;;;;;51963:44:0;51972:6;-1:-1:-1;;;;;51963:44:0;;51991:15;51963:44;;;;2004:25:1;;1992:2;1977:18;;1858:177;51963:44:0;;;;;;;;51540:475;;;;;;51449:566;;;:::o;50855:586::-;50956:15;50973:23;50998:12;51012:23;51037:12;51051:18;51073:19;51084:7;51073:10;:19::i;:::-;-1:-1:-1;;;;;51121:15:0;;;;;;:7;:15;;;;;;50955:137;;-1:-1:-1;50955:137:0;;-1:-1:-1;50955:137:0;;-1:-1:-1;50955:137:0;-1:-1:-1;50955:137:0;-1:-1:-1;50955:137:0;-1:-1:-1;51121:28:0;;50955:137;51121:19;:28::i;:::-;-1:-1:-1;;;;;51103:15:0;;;;;;;:7;:15;;;;;;;;:46;;;;51181:18;;;;;:7;:18;;;;;:39;;51204:15;51181:22;:39::i;:::-;-1:-1:-1;;;;;51160:18:0;;;;;;:7;:18;;;;;;;;:60;;;;51252:7;:18;;;;:39;;51275:15;51252:22;:39::i;50345:502::-;50444:15;50461:23;50486:12;50500:23;50525:12;50539:18;50561:19;50572:7;50561:10;:19::i;:::-;-1:-1:-1;;;;;50609:15:0;;;;;;:7;:15;;;;;;50443:137;;-1:-1:-1;50443:137:0;;-1:-1:-1;50443:137:0;;-1:-1:-1;50443:137:0;-1:-1:-1;50443:137:0;-1:-1:-1;50443:137:0;-1:-1:-1;50609:28:0;;50443:137;50609:19;:28::i;35050:642::-;35153:15;35170:23;35195:12;35209:23;35234:12;35248:18;35270:19;35281:7;35270:10;:19::i;:::-;-1:-1:-1;;;;;35318:15:0;;;;;;:7;:15;;;;;;35152:137;;-1:-1:-1;35152:137:0;;-1:-1:-1;35152:137:0;;-1:-1:-1;35152:137:0;-1:-1:-1;35152:137:0;-1:-1:-1;35152:137:0;-1:-1:-1;35318:28:0;;35338:7;35318:19;:28::i;:::-;-1:-1:-1;;;;;35300:15:0;;;;;;:7;:15;;;;;;;;:46;;;;35375:7;:15;;;;:28;;35395:7;35375:19;:28::i;40461:154::-;40525:7;40552:55;40591:5;40552:20;40564:7;;40552;:11;;:20;;;;:::i;:::-;:24;;:55::i;40623:203::-;40698:7;40725:93;40802:5;40725:58;40769:13;;40753;;40737;;:29;;;;:::i;:::-;:45;;;;:::i;:::-;40725:7;;:11;:58::i;40094:355::-;40157:19;40180:10;:8;:10::i;:::-;40157:33;-1:-1:-1;40201:18:0;40222:27;:10;40157:33;40222:14;:27::i;:::-;40301:4;40285:22;;;;:7;:22;;;;;;40201:48;;-1:-1:-1;40285:38:0;;40201:48;40285:26;:38::i;:::-;40276:4;40260:22;;;;:7;:22;;;;;;;;:63;;;;40337:11;:26;;;;;;40334:107;;;40419:4;40403:22;;;;:7;:22;;;;;;:38;;40430:10;40403:26;:38::i;:::-;40394:4;40378:22;;;;:7;:22;;;;;:63;40146:303;;40094:355;:::o;37968:147::-;38046:7;;:17;;38058:4;38046:11;:17::i;:::-;38036:7;:27;38087:10;;:20;;38102:4;38087:14;:20::i;:::-;38074:10;:33;-1:-1:-1;;37968:147:0:o;14:180:1:-;73:6;126:2;114:9;105:7;101:23;97:32;94:52;;;142:1;139;132:12;94:52;-1:-1:-1;165:23:1;;14:180;-1:-1:-1;14:180:1:o;199:597::-;311:4;340:2;369;358:9;351:21;401:6;395:13;444:6;439:2;428:9;424:18;417:34;469:1;479:140;493:6;490:1;487:13;479:140;;;588:14;;;584:23;;578:30;554:17;;;573:2;550:26;543:66;508:10;;479:140;;;637:6;634:1;631:13;628:91;;;707:1;702:2;693:6;682:9;678:22;674:31;667:42;628:91;-1:-1:-1;780:2:1;759:15;-1:-1:-1;;755:29:1;740:45;;;;787:2;736:54;;199:597;-1:-1:-1;;;199:597:1:o;1048:154::-;-1:-1:-1;;;;;1127:5:1;1123:54;1116:5;1113:65;1103:93;;1192:1;1189;1182:12;1207:134;1275:20;;1304:31;1275:20;1304:31;:::i;:::-;1207:134;;;:::o;1346:315::-;1414:6;1422;1475:2;1463:9;1454:7;1450:23;1446:32;1443:52;;;1491:1;1488;1481:12;1443:52;1530:9;1517:23;1549:31;1574:5;1549:31;:::i;:::-;1599:5;1651:2;1636:18;;;;1623:32;;-1:-1:-1;;;1346:315:1:o;2298:456::-;2375:6;2383;2391;2444:2;2432:9;2423:7;2419:23;2415:32;2412:52;;;2460:1;2457;2450:12;2412:52;2499:9;2486:23;2518:31;2543:5;2518:31;:::i;:::-;2568:5;-1:-1:-1;2625:2:1;2610:18;;2597:32;2638:33;2597:32;2638:33;:::i;:::-;2298:456;;2690:7;;-1:-1:-1;;;2744:2:1;2729:18;;;;2716:32;;2298:456::o;2759:184::-;-1:-1:-1;;;2808:1:1;2801:88;2908:4;2905:1;2898:15;2932:4;2929:1;2922:15;2948:1121;3032:6;3063:2;3106;3094:9;3085:7;3081:23;3077:32;3074:52;;;3122:1;3119;3112:12;3074:52;3162:9;3149:23;3191:18;3232:2;3224:6;3221:14;3218:34;;;3248:1;3245;3238:12;3218:34;3286:6;3275:9;3271:22;3261:32;;3331:7;3324:4;3320:2;3316:13;3312:27;3302:55;;3353:1;3350;3343:12;3302:55;3389:2;3376:16;3411:2;3407;3404:10;3401:36;;;3417:18;;:::i;:::-;3463:2;3460:1;3456:10;3495:2;3489:9;3558:2;3554:7;3549:2;3545;3541:11;3537:25;3529:6;3525:38;3613:6;3601:10;3598:22;3593:2;3581:10;3578:18;3575:46;3572:72;;;3624:18;;:::i;:::-;3660:2;3653:22;3710:18;;;3744:15;;;;-1:-1:-1;3786:11:1;;;3782:20;;;3814:19;;;3811:39;;;3846:1;3843;3836:12;3811:39;3870:11;;;;3890:148;3906:6;3901:3;3898:15;3890:148;;;3972:23;3991:3;3972:23;:::i;:::-;3960:36;;3923:12;;;;4016;;;;3890:148;;;4057:6;2948:1121;-1:-1:-1;;;;;;;;2948:1121:1:o;4263:247::-;4322:6;4375:2;4363:9;4354:7;4350:23;4346:32;4343:52;;;4391:1;4388;4381:12;4343:52;4430:9;4417:23;4449:31;4474:5;4449:31;:::i;4515:160::-;4580:20;;4636:13;;4629:21;4619:32;;4609:60;;4665:1;4662;4655:12;4680:315;4745:6;4753;4806:2;4794:9;4785:7;4781:23;4777:32;4774:52;;;4822:1;4819;4812:12;4774:52;4861:9;4848:23;4880:31;4905:5;4880:31;:::i;:::-;4930:5;-1:-1:-1;4954:35:1;4985:2;4970:18;;4954:35;:::i;:::-;4944:45;;4680:315;;;;;:::o;5000:248::-;5065:6;5073;5126:2;5114:9;5105:7;5101:23;5097:32;5094:52;;;5142:1;5139;5132:12;5094:52;5178:9;5165:23;5155:33;;5207:35;5238:2;5227:9;5223:18;5207:35;:::i;5484:180::-;5540:6;5593:2;5581:9;5572:7;5568:23;5564:32;5561:52;;;5609:1;5606;5599:12;5561:52;5632:26;5648:9;5632:26;:::i;5929:388::-;5997:6;6005;6058:2;6046:9;6037:7;6033:23;6029:32;6026:52;;;6074:1;6071;6064:12;6026:52;6113:9;6100:23;6132:31;6157:5;6132:31;:::i;:::-;6182:5;-1:-1:-1;6239:2:1;6224:18;;6211:32;6252:33;6211:32;6252:33;:::i;:::-;6304:7;6294:17;;;5929:388;;;;;:::o;6683:437::-;6762:1;6758:12;;;;6805;;;6826:61;;6880:4;6872:6;6868:17;6858:27;;6826:61;6933:2;6925:6;6922:14;6902:18;6899:38;6896:218;;;-1:-1:-1;;;6967:1:1;6960:88;7071:4;7068:1;7061:15;7099:4;7096:1;7089:15;6896:218;;6683:437;;;:::o;7125:184::-;-1:-1:-1;;;7174:1:1;7167:88;7274:4;7271:1;7264:15;7298:4;7295:1;7288:15;7314:168;7354:7;7420:1;7416;7412:6;7408:14;7405:1;7402:21;7397:1;7390:9;7383:17;7379:45;7376:71;;;7427:18;;:::i;:::-;-1:-1:-1;7467:9:1;;7314:168::o;8249:184::-;-1:-1:-1;;;8298:1:1;8291:88;8398:4;8395:1;8388:15;8422:4;8419:1;8412:15;9147:125;9187:4;9215:1;9212;9209:8;9206:34;;;9220:18;;:::i;:::-;-1:-1:-1;9257:9:1;;9147:125::o;9277:184::-;-1:-1:-1;;;9326:1:1;9319:88;9426:4;9423:1;9416:15;9450:4;9447:1;9440:15;9466:135;9505:3;-1:-1:-1;;9526:17:1;;9523:43;;;9546:18;;:::i;:::-;-1:-1:-1;9593:1:1;9582:13;;9466:135::o;10379:128::-;10419:3;10450:1;10446:6;10443:1;10440:13;10437:39;;;10456:18;;:::i;:::-;-1:-1:-1;10492:9:1;;10379:128::o;17382:274::-;17422:1;17448;17438:189;;-1:-1:-1;;;17480:1:1;17473:88;17584:4;17581:1;17574:15;17612:4;17609:1;17602:15;17438:189;-1:-1:-1;17641:9:1;;17382:274::o;17661:251::-;17731:6;17784:2;17772:9;17763:7;17759:23;17755:32;17752:52;;;17800:1;17797;17790:12;17752:52;17832:9;17826:16;17851:31;17876:5;17851:31;:::i;17917:1026::-;18179:4;18227:3;18216:9;18212:19;18258:6;18247:9;18240:25;18284:2;18322:6;18317:2;18306:9;18302:18;18295:34;18365:3;18360:2;18349:9;18345:18;18338:31;18389:6;18424;18418:13;18455:6;18447;18440:22;18493:3;18482:9;18478:19;18471:26;;18532:2;18524:6;18520:15;18506:29;;18553:1;18563:218;18577:6;18574:1;18571:13;18563:218;;;18642:13;;-1:-1:-1;;;;;18638:62:1;18626:75;;18756:15;;;;18721:12;;;;18599:1;18592:9;18563:218;;;-1:-1:-1;;;;;;;18837:55:1;;;;18832:2;18817:18;;18810:83;-1:-1:-1;;;18924:3:1;18909:19;18902:35;18798:3;17917:1026;-1:-1:-1;;;17917:1026:1:o;19985:306::-;20073:6;20081;20089;20142:2;20130:9;20121:7;20117:23;20113:32;20110:52;;;20158:1;20155;20148:12;20110:52;20187:9;20181:16;20171:26;;20237:2;20226:9;20222:18;20216:25;20206:35;;20281:2;20270:9;20266:18;20260:25;20250:35;;19985:306;;;;;:::o

Swarm Source

ipfs://e014647458fdc707a6d6a12923eb3f7d4b01307cd304be047b6596d61c0c6520
Loading...
Loading
Loading...
Loading
[ Download: CSV Export  ]
[ Download: CSV Export  ]

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