ETH Price: $3,045.93 (+0.73%)
Gas: 3 Gwei

Token

SHINJADOGE (SHINDOGE)
 

Overview

Max Total Supply

1,000,000,000,000 SHINDOGE

Holders

189

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 9 Decimals)

Filtered by Token Holder
41096.eth
Balance
5.486514637 SHINDOGE

Value
$0.00
0x46ca528fb5c75554b855e0d324c43ca9b5fc1b69
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:
Shinjadoge

Compiler Version
v0.8.11+commit.d7f03943

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, None license

Contract Source Code (Solidity)

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

/*
SHINJADOGE (SHINDOGE) v3

Telegram: https://t.me/Shindoge
Website: https://www.shindoge.com/
Twitter: https://twitter.com/ShindogeETH

      ::::::::       :::    :::       :::::::::::       ::::    :::      :::::::::::           :::        :::::::::       ::::::::       ::::::::       :::::::::: 
    :+:    :+:      :+:    :+:           :+:           :+:+:   :+:          :+:             :+: :+:      :+:    :+:     :+:    :+:     :+:    :+:      :+:         
   +:+             +:+    +:+           +:+           :+:+:+  +:+          +:+            +:+   +:+     +:+    +:+     +:+    +:+     +:+             +:+          
  +#++:++#++      +#++:++#++           +#+           +#+ +:+ +#+          +#+           +#++:++#++:    +#+    +:+     +#+    +:+     :#:             +#++:++#      
        +#+      +#+    +#+           +#+           +#+  +#+#+#          +#+           +#+     +#+    +#+    +#+     +#+    +#+     +#+   +#+#      +#+            
#+#    #+#      #+#    #+#           #+#           #+#   #+#+#      #+# #+#           #+#     #+#    #+#    #+#     #+#    #+#     #+#    #+#      #+#             
########       ###    ###       ###########       ###    ####       #####            ###     ###    #########       ########       ########       ##########       


                       -**+=                 .::-===+*  .::                     
                      -#**+=+-       .:-=++*******##*==++++#.                   
                      #*%@%*+=+.:=+******###########+++*#%#*=                   
                     :##@@@%*****+**#################*#@@@#*-                   
                     =*#%%#*++**###################***%@@%*#.                   
                     +*#*+++*########################*+*%#+*                    
                     *#+++*###########################*+**#:                    
                    :+===+++++++**********************+++++.                    
                    +-**********************************++-=                    
                    +-=++++******************************+-=                    
                    +=***********************************+-=                    
                    .=*+++*+==++**#############*++=-=++++*+=.                   
                     :*+-======+++++========++++++======+#***=.                 
                     .#+==++++%-@#++++*****++++#=%#+++-*+#--+*+=:               
                      #+**=+++#@@*+*#@@@%#%%*++#@@*++=#**#*=.-+*++-             
                      +*+##+=++**###%@@@@@@@###**++=+##****+=. :+*+=            
                      -*+###########%%%%%%#############**-**==  :**==           
                      .#+*############%################**.=*=+   **+=.          
                       +*+#############################+* +*=+   ***==          
                       .#+*###########################**- +*=+   +**++          
                        :****########################+:   +*=+   -**+=.         
                          :=****##################*=.    .+*=+   .***==.        
                             .-+***#############+:       .+++=-   .=**===:      
                                 .-=*########*-           +====-    :=++====:.  
                                      :=+####+             ..:::      :==+=--==:

*/

// SPDX-License-Identifier: Unlicensed

pragma solidity 0.8.11;


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

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

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

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
     * address(0) 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 address(0).
     */
    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);
}

interface IDEXPair {
    function getReserves() external view returns (uint112 reserve0, uint112 reserve1, uint32 blockTimestampLast);
}

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

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

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

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

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

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

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

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

interface IAntiSnipe {
  function setTokenOwner(address owner, address pair) external;

  function onPreTransferCheck(
    address from,
    address to,
    uint256 amount
  ) external returns (bool checked);
}

contract Shinjadoge is IERC20, Ownable {
    using Address for address;
    
    address constant DEAD = 0x000000000000000000000000000000000000dEaD;

    string constant _name = "SHINJADOGE";
    string constant _symbol = "SHINDOGE";
    uint8 constant _decimals = 9;

    uint256 constant _totalSupply = 1_000_000_000_000 * (10 ** _decimals);

    //For ease to the end-user these checks do not adjust for burnt tokens and should be set accordingly.
    uint256 public _maxTxAmount = (_totalSupply * 1) / 222; //~0.45%
    uint256 public _maxWalletSize = (_totalSupply * 1) / 200; //0.5%

    mapping (address => uint256) _balances;
    mapping (address => mapping (address => uint256)) _allowances;
    mapping (address => uint256) lastBuy;
    mapping (address => uint256) lastSell;
    mapping (address => uint256) lastSellAmount;

    mapping (address => bool) isFeeExempt;
    mapping (address => bool) isTxLimitExempt;

    uint256 liquidityFee = 30;
    uint256 marketingFee = 50;
    uint256 devFee = 40;
    uint256 totalFee = 120;
    uint256 sellBias = 0;

    //Higher tax for a period of time from the first purchase only, per address
    uint256 sellPercent = 200;
    uint256 sellPeriod = 24 hours;

    uint256 antiDumpTax = 300;
    uint256 antiDumpPeriod = 30 minutes;
    uint256 antiDumpThreshold = 21;
    bool antiDumpReserve0 = true;
    uint256 feeDenominator = 1000;

    address public immutable liquidityReceiver;
    address payable public immutable marketingReceiver;
    address payable public immutable devReceiver;

    uint256 targetLiquidity = 40;
    uint256 targetLiquidityDenominator = 100;

    IDEXRouter public immutable router;
    
    address constant routerAddress = 0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D;

    mapping (address => bool) liquidityPools;
    mapping (address => bool) liquidityProviders;

    address public immutable pair;

    uint256 public launchedAt;
    uint256 public launchedTime;
 
    IAntiSnipe public antisnipe;
    bool public protectionEnabled = true;
    bool public protectionDisabled = false;

    bool public swapEnabled = true;
    uint256 public swapThreshold = _totalSupply / 400; //0.25%
    uint256 public swapMinimum = _totalSupply / 10000; //0.01%
    bool inSwap;
    modifier swapping() { inSwap = true; _; inSwap = false; }

    constructor (address _lp, address _marketing, address _dev) {
        //Suggest setting liquidity receiver to DEAD to lock funds in the project and avoid centralization
        liquidityReceiver = _lp;
        marketingReceiver = payable(_marketing);
        devReceiver = payable(_dev);

        router = IDEXRouter(routerAddress);
        pair = IDEXFactory(router.factory()).createPair(router.WETH(), address(this));
        liquidityPools[pair] = true;
        _allowances[owner()][routerAddress] = type(uint256).max;
        _allowances[address(this)][routerAddress] = type(uint256).max;
        
        isFeeExempt[owner()] = true;
        liquidityProviders[owner()] = true;

        isTxLimitExempt[address(this)] = true;
        isTxLimitExempt[owner()] = true;
        isTxLimitExempt[routerAddress] = true;

        _balances[owner()] = _totalSupply;
        emit Transfer(address(0), owner(), _totalSupply);
    }

    receive() external payable { }

    function totalSupply() external pure override returns (uint256) { return _totalSupply; }
    function decimals() external pure returns (uint8) { return _decimals; }
    function symbol() external pure returns (string memory) { return _symbol; }
    function name() external pure returns (string memory) { return _name; }
    function getOwner() external view returns (address) { return owner(); }
    function balanceOf(address account) public view override returns (uint256) { return _balances[account]; }
    function allowance(address holder, address spender) external view override returns (uint256) { return _allowances[holder][spender]; }

    function approve(address spender, uint256 amount) public override returns (bool) {
        _allowances[msg.sender][spender] = amount;
        emit Approval(msg.sender, spender, amount);
        return true;
    }

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

    function decreaseAllowance(address spender, uint256 subtractedValue) external virtual returns (bool) {
        uint256 currentAllowance = _allowances[msg.sender][spender];
        require(currentAllowance >= subtractedValue, "ERC20: decreased allowance below address(0)");
        unchecked {
            _approve(msg.sender, spender, currentAllowance - subtractedValue);
        }

        return true;
    }

    function _approve(address owner, address spender, uint256 amount) internal virtual {
        require(owner != address(0), "ERC20: approve from the address(0) address");
        require(spender != address(0), "ERC20: approve to the address(0) address");

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

    function approveMax(address spender) external returns (bool) {
        return approve(spender, type(uint256).max);
    }

    function transfer(address recipient, uint256 amount) external override returns (bool) {
        return _transferFrom(msg.sender, recipient, amount);
    }

    function transferFrom(address sender, address recipient, uint256 amount) external override returns (bool) {
        if(_allowances[sender][msg.sender] != type(uint256).max){
            _allowances[sender][msg.sender] = _allowances[sender][msg.sender] - amount;
        }

        return _transferFrom(sender, recipient, amount);
    }

    function _transferFrom(address sender, address recipient, uint256 amount) internal returns (bool) {
        require(_balances[sender] >= amount, "Insufficient balance");
        require(amount > 0, "address(0) amount transferred");

        if(inSwap){ return _basicTransfer(sender, recipient, amount); }

        checkTxLimit(sender, amount);
        
        if (!liquidityPools[recipient] && recipient != DEAD) {
            if (!isTxLimitExempt[recipient]) checkWalletLimit(recipient, amount);
        }

        if(!launched()){ require(liquidityProviders[sender] || liquidityProviders[recipient], "Contract not launched yet."); }

        _balances[sender] -= amount;

        uint256 amountReceived = shouldTakeFee(sender) && shouldTakeFee(recipient) ? takeFee(sender, recipient, amount) : amount;
        
        if(shouldSwapBack(recipient)){ if (amount > 0) swapBack(amount); }
        
        _balances[recipient] += amountReceived;
            
        if(launched() && protectionEnabled)
            antisnipe.onPreTransferCheck(sender, recipient, amount);

        emit Transfer(sender, recipient, amountReceived);
        return true;
    }

    function _basicTransfer(address sender, address recipient, uint256 amount) internal returns (bool) {
        _balances[sender] -= amount;
        _balances[recipient] += amount;
        emit Transfer(sender, recipient, amount);
        return true;
    }
    
    function checkWalletLimit(address recipient, uint256 amount) internal view {
        uint256 walletLimit = _maxWalletSize;
        require(_balances[recipient] + amount <= walletLimit, "Transfer amount exceeds the bag size.");
    }

    function checkTxLimit(address sender, uint256 amount) internal view {
        require(amount <= _maxTxAmount || isTxLimitExempt[sender], "TX Limit Exceeded");
    }

    function shouldTakeFee(address sender) internal view returns (bool) {
        return !isFeeExempt[sender];
    }

    function getTotalFee(bool selling, bool inHighPeriod) public view returns (uint256) {
        if(launchedAt == block.number){ return feeDenominator - 1; }
        if (selling) return inHighPeriod ? (totalFee * sellPercent) / 100 : totalFee + sellBias;
        return inHighPeriod ? (totalFee * sellPercent) / 100 : totalFee - sellBias;
    }

    function takeFee(address sender, address recipient, uint256 amount) internal returns (uint256) {
        uint256 feeAmount = 0;
        bool highSellPeriod = !liquidityPools[sender] && lastBuy[sender] + sellPeriod > block.timestamp;
        if(liquidityPools[recipient] && antiDumpTax > 0) {
            (uint112 reserve0, uint112 reserve1,) = IDEXPair(pair).getReserves();
            uint256 impactEstimate = amount * 1000 / ((antiDumpReserve0 ? reserve0 : reserve1) + amount);
            
            if (block.timestamp > lastSell[sender] + antiDumpPeriod) {
                lastSell[sender] = block.timestamp;
                lastSellAmount[sender] = 0;
            }
            
            lastSellAmount[sender] += impactEstimate;
            
            if (lastSellAmount[sender] >= antiDumpThreshold) {
                feeAmount = ((amount * totalFee * antiDumpTax) / 100) / feeDenominator;
            }
        }

        if (feeAmount == 0)
            feeAmount = (amount * getTotalFee(liquidityPools[recipient], highSellPeriod)) / feeDenominator;
        
        if (liquidityPools[sender] && lastBuy[recipient] == 0)
            lastBuy[recipient] = block.timestamp;

        _balances[address(this)] += feeAmount;
        emit Transfer(sender, address(this), feeAmount);

        return amount - feeAmount;
    }

    function shouldSwapBack(address recipient) internal view returns (bool) {
        return !liquidityPools[msg.sender]
        && !isFeeExempt[msg.sender]
        && !inSwap
        && swapEnabled
        && liquidityPools[recipient]
        && _balances[address(this)] >= swapMinimum &&
        totalFee > 0;
    }

    function swapBack(uint256 amount) internal swapping {
        uint256 amountToSwap = amount < swapThreshold ? amount : swapThreshold;
        if (_balances[address(this)] < amountToSwap) amountToSwap = _balances[address(this)];
        uint256 dynamicLiquidityFee = isOverLiquified(targetLiquidity, targetLiquidityDenominator) ? 0 : liquidityFee;
        uint256 amountToLiquify = ((amountToSwap * dynamicLiquidityFee) / totalFee) / 2;
        amountToSwap -= amountToLiquify;

        address[] memory path = new address[](2);
        path[0] = address(this);
        path[1] = router.WETH();
        
        //Guaranteed swap desired to prevent trade blockages
        router.swapExactTokensForETHSupportingFeeOnTransferTokens(
            amountToSwap,
            0,
            path,
            address(this),
            block.timestamp
        );

        uint256 contractBalance = address(this).balance;
        uint256 totalETHFee = totalFee - dynamicLiquidityFee / 2;

        uint256 amountLiquidity = (contractBalance * dynamicLiquidityFee) / totalETHFee / 2;
        uint256 amountMarketing = (contractBalance * marketingFee) / totalETHFee;
        uint256 amountDev = contractBalance - (amountLiquidity + amountMarketing);

        if(amountToLiquify > 0) {
            //Guaranteed swap desired to prevent trade blockages, return values ignored
            router.addLiquidityETH{value: amountLiquidity}(
                address(this),
                amountToLiquify,
                0,
                0,
                liquidityReceiver,
                block.timestamp
            );
            emit AutoLiquify(amountLiquidity, amountToLiquify);
        }
        
        if (amountMarketing > 0)
            marketingReceiver.transfer(amountMarketing);
            
        if (amountDev > 0)
            devReceiver.transfer(amountDev);

    }

    function launched() internal view returns (bool) {
        return launchedAt != 0;
    }

    function getCirculatingSupply() public view returns (uint256) {
        return _totalSupply - (balanceOf(DEAD) + balanceOf(address(0)));
    }

    function getLiquidityBacking(uint256 accuracy) public view returns (uint256) {
        return (accuracy * balanceOf(pair)) / getCirculatingSupply();
    }

    function isOverLiquified(uint256 target, uint256 accuracy) public view returns (bool) {
        return getLiquidityBacking(accuracy) > target;
    }

    function transferOwnership(address newOwner) public virtual override onlyOwner {
        isFeeExempt[owner()] = false;
        isTxLimitExempt[owner()] = false;
        liquidityProviders[owner()] = false;
        _allowances[owner()][routerAddress] = 0;
        super.transferOwnership(newOwner);
        isFeeExempt[newOwner] = true;
        isTxLimitExempt[newOwner] = true;
        liquidityProviders[newOwner] = true;
        _allowances[newOwner][routerAddress] = type(uint256).max;
    }

    function renounceOwnership() public virtual override onlyOwner {
        isFeeExempt[owner()] = false;
        isTxLimitExempt[owner()] = false;
        liquidityProviders[owner()] = false;
        _allowances[owner()][routerAddress] = 0;
        super.renounceOwnership();
    }

    function setProtectionEnabled(bool _protect) external onlyOwner {
        if (_protect)
            require(!protectionDisabled, "Protection disabled");
        protectionEnabled = _protect;
        emit ProtectionToggle(_protect);
    }
    
    function setProtection(address _protection, bool _call) external onlyOwner {
        if (_protection != address(antisnipe)){
            require(!protectionDisabled, "Protection disabled");
            antisnipe = IAntiSnipe(_protection);
        }
        if (_call)
            antisnipe.setTokenOwner(address(this), pair);
        
        emit ProtectionSet(_protection);
    }
    
    function disableProtection() external onlyOwner {
        protectionDisabled = true;
        emit ProtectionDisabled();
    }
    
    function setLiquidityProvider(address _provider) external onlyOwner {
        require(_provider != pair && _provider != routerAddress, "Can't alter trading contracts in this manner.");
        isFeeExempt[_provider] = true;
        liquidityProviders[_provider] = true;
        isTxLimitExempt[_provider] = true;
        emit LiquidityProviderSet(_provider);
    }

    function setSellPeriod(uint256 _sellPercentIncrease, uint256 _period) external onlyOwner {
        require((totalFee * _sellPercentIncrease) / 100 <= 400, "Sell tax too high");
        require(_sellPercentIncrease >= 100, "Can't make sells cheaper with this");
        require(antiDumpTax == 0 || _sellPercentIncrease <= antiDumpTax, "High period tax clashes with anti-dump tax");
        require(_period <= 7 days, "Sell period too long");
        sellPercent = _sellPercentIncrease;
        sellPeriod = _period;
        emit SellPeriodSet(_sellPercentIncrease, _period);
    }

    function setAntiDumpTax(uint256 _tax, uint256 _period, uint256 _threshold, bool _reserve0) external onlyOwner {
        require(_threshold >= 10 && _tax <= 400 && (_tax == 0 || _tax >= sellPercent) && _period <= 1 hours, "Parameters out of bounds");
        antiDumpTax = _tax;
        antiDumpPeriod = _period;
        antiDumpThreshold = _threshold;
        antiDumpReserve0 = _reserve0;
        emit AntiDumpTaxSet(_tax, _period, _threshold);
    }

    function launch() external onlyOwner {
        require (launchedAt == 0);
        launchedAt = block.number;
        launchedTime = block.timestamp;
        emit TradingLaunched();
    }

    function setTxLimit(uint256 numerator, uint256 divisor) external onlyOwner {
        require(numerator > 0 && divisor > 0 && (numerator * 1000) / divisor >= 5, "Transaction limits too low");
        _maxTxAmount = (_totalSupply * numerator) / divisor;
        emit TransactionLimitSet(_maxTxAmount);
    }
    
    function setMaxWallet(uint256 numerator, uint256 divisor) external onlyOwner() {
        require(divisor > 0 && divisor <= 10000, "Divisor must be greater than 0");
        _maxWalletSize = (_totalSupply * numerator) / divisor;
        emit MaxWalletSet(_maxWalletSize);
    }

    function setIsFeeExempt(address holder, bool exempt) external onlyOwner {
        require(holder != address(0), "Invalid address");
        isFeeExempt[holder] = exempt;
        emit FeeExemptSet(holder, exempt);
    }

    function setIsTxLimitExempt(address holder, bool exempt) external onlyOwner {
        require(holder != address(0), "Invalid address");
        isTxLimitExempt[holder] = exempt;
        emit TrasactionLimitExemptSet(holder, exempt);
    }

    function setFees(uint256 _liquidityFee, uint256 _marketingFee, uint256 _devFee, uint256 _sellBias, uint256 _feeDenominator) external onlyOwner {
        require((_liquidityFee / 2) * 2 == _liquidityFee, "Liquidity fee must be an even number due to rounding");
        liquidityFee = _liquidityFee;
        marketingFee = _marketingFee;
        devFee = _devFee;
        sellBias = _sellBias;
        totalFee = _liquidityFee + _marketingFee + _devFee;
        feeDenominator = _feeDenominator;
        require(totalFee <= feeDenominator / 4, "Fees too high");
        require(sellBias <= totalFee, "Incorrect sell bias");
        emit FeesSet(totalFee, feeDenominator, sellBias);
    }

    function setSwapBackSettings(bool _enabled, uint256 _denominator, uint256 _denominatorMin) external onlyOwner {
        require(_denominator > 0 && _denominatorMin > 0, "Denominators must be greater than 0");
        swapEnabled = _enabled;
        swapMinimum = _totalSupply / _denominatorMin;
        swapThreshold = _totalSupply / _denominator;
        emit SwapSettingsSet(swapMinimum, swapThreshold, swapEnabled);
    }

    function setTargetLiquidity(uint256 _target, uint256 _denominator) external onlyOwner {
        targetLiquidity = _target;
        targetLiquidityDenominator = _denominator;
        emit TargetLiquiditySet(_target * 100 / _denominator);
    }

    function addLiquidityPool(address _pool, bool _enabled) external onlyOwner {
        require(_pool != address(0), "Invalid address");
        liquidityPools[_pool] = _enabled;
        emit LiquidityPoolSet(_pool, _enabled);
    }

	function airdrop(address[] calldata _addresses, uint256[] calldata _amount) external onlyOwner
    {
        require(_addresses.length == _amount.length, "Array lengths don't match");
        bool previousSwap = swapEnabled;
        swapEnabled = false;
        //This function may run out of gas intentionally to prevent partial airdrops
        for (uint256 i = 0; i < _addresses.length; i++) {
            require(!liquidityPools[_addresses[i]] && _addresses[i] != address(0), "Can't airdrop the liquidity pool or address 0");
            _transferFrom(msg.sender, _addresses[i], _amount[i] * (10 ** _decimals));
            lastBuy[_addresses[i]] = block.timestamp;
        }
        swapEnabled = previousSwap;
        emit AirdropSent(msg.sender);
    }

    event AutoLiquify(uint256 amount, uint256 amountToken);
    event ProtectionSet(address indexed protection);
    event ProtectionDisabled();
    event LiquidityProviderSet(address indexed provider);
    event SellPeriodSet(uint256 percent, uint256 period);
    event TradingLaunched();
    event TransactionLimitSet(uint256 limit);
    event MaxWalletSet(uint256 limit);
    event FeeExemptSet(address indexed wallet, bool isExempt);
    event TrasactionLimitExemptSet(address indexed wallet, bool isExempt);
    event FeesSet(uint256 totalFees, uint256 denominator, uint256 sellBias);
    event SwapSettingsSet(uint256 minimum, uint256 maximum, bool enabled);
    event LiquidityPoolSet(address indexed pool, bool enabled);
    event AirdropSent(address indexed from);
    event AntiDumpTaxSet(uint256 rate, uint256 period, uint256 threshold);
    event TargetLiquiditySet(uint256 percent);
    event ProtectionToggle(bool isEnabled);
}

Contract Security Audit

Contract ABI

[{"inputs":[{"internalType":"address","name":"_lp","type":"address"},{"internalType":"address","name":"_marketing","type":"address"},{"internalType":"address","name":"_dev","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"}],"name":"AirdropSent","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"rate","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"period","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"threshold","type":"uint256"}],"name":"AntiDumpTaxSet","type":"event"},{"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":"amount","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"amountToken","type":"uint256"}],"name":"AutoLiquify","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"wallet","type":"address"},{"indexed":false,"internalType":"bool","name":"isExempt","type":"bool"}],"name":"FeeExemptSet","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"totalFees","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"denominator","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"sellBias","type":"uint256"}],"name":"FeesSet","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pool","type":"address"},{"indexed":false,"internalType":"bool","name":"enabled","type":"bool"}],"name":"LiquidityPoolSet","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"provider","type":"address"}],"name":"LiquidityProviderSet","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"limit","type":"uint256"}],"name":"MaxWalletSet","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":[],"name":"ProtectionDisabled","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"protection","type":"address"}],"name":"ProtectionSet","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bool","name":"isEnabled","type":"bool"}],"name":"ProtectionToggle","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"percent","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"period","type":"uint256"}],"name":"SellPeriodSet","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"minimum","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"maximum","type":"uint256"},{"indexed":false,"internalType":"bool","name":"enabled","type":"bool"}],"name":"SwapSettingsSet","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"percent","type":"uint256"}],"name":"TargetLiquiditySet","type":"event"},{"anonymous":false,"inputs":[],"name":"TradingLaunched","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"limit","type":"uint256"}],"name":"TransactionLimitSet","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"wallet","type":"address"},{"indexed":false,"internalType":"bool","name":"isExempt","type":"bool"}],"name":"TrasactionLimitExemptSet","type":"event"},{"inputs":[],"name":"_maxTxAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_maxWalletSize","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_pool","type":"address"},{"internalType":"bool","name":"_enabled","type":"bool"}],"name":"addLiquidityPool","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"_addresses","type":"address[]"},{"internalType":"uint256[]","name":"_amount","type":"uint256[]"}],"name":"airdrop","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"holder","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"antisnipe","outputs":[{"internalType":"contract IAntiSnipe","name":"","type":"address"}],"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":"spender","type":"address"}],"name":"approveMax","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":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"devReceiver","outputs":[{"internalType":"address payable","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"disableProtection","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"getCirculatingSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"accuracy","type":"uint256"}],"name":"getLiquidityBacking","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getOwner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bool","name":"selling","type":"bool"},{"internalType":"bool","name":"inHighPeriod","type":"bool"}],"name":"getTotalFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"target","type":"uint256"},{"internalType":"uint256","name":"accuracy","type":"uint256"}],"name":"isOverLiquified","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"launch","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"launchedAt","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"launchedTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"liquidityReceiver","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"marketingReceiver","outputs":[{"internalType":"address payable","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"pair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"protectionDisabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"protectionEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"router","outputs":[{"internalType":"contract IDEXRouter","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_tax","type":"uint256"},{"internalType":"uint256","name":"_period","type":"uint256"},{"internalType":"uint256","name":"_threshold","type":"uint256"},{"internalType":"bool","name":"_reserve0","type":"bool"}],"name":"setAntiDumpTax","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_liquidityFee","type":"uint256"},{"internalType":"uint256","name":"_marketingFee","type":"uint256"},{"internalType":"uint256","name":"_devFee","type":"uint256"},{"internalType":"uint256","name":"_sellBias","type":"uint256"},{"internalType":"uint256","name":"_feeDenominator","type":"uint256"}],"name":"setFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"holder","type":"address"},{"internalType":"bool","name":"exempt","type":"bool"}],"name":"setIsFeeExempt","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"holder","type":"address"},{"internalType":"bool","name":"exempt","type":"bool"}],"name":"setIsTxLimitExempt","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_provider","type":"address"}],"name":"setLiquidityProvider","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"numerator","type":"uint256"},{"internalType":"uint256","name":"divisor","type":"uint256"}],"name":"setMaxWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_protection","type":"address"},{"internalType":"bool","name":"_call","type":"bool"}],"name":"setProtection","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_protect","type":"bool"}],"name":"setProtectionEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_sellPercentIncrease","type":"uint256"},{"internalType":"uint256","name":"_period","type":"uint256"}],"name":"setSellPeriod","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_enabled","type":"bool"},{"internalType":"uint256","name":"_denominator","type":"uint256"},{"internalType":"uint256","name":"_denominatorMin","type":"uint256"}],"name":"setSwapBackSettings","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_target","type":"uint256"},{"internalType":"uint256","name":"_denominator","type":"uint256"}],"name":"setTargetLiquidity","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"numerator","type":"uint256"},{"internalType":"uint256","name":"divisor","type":"uint256"}],"name":"setTxLimit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"swapMinimum","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"swapThreshold","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"pure","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"},{"stateMutability":"payable","type":"receive"}]

61012060405260de620000156009600a620006dd565b620000269064e8d4a51000620006f5565b62000033906001620006f5565b6200003f919062000717565b60015560c8620000526009600a620006dd565b620000639064e8d4a51000620006f5565b62000070906001620006f5565b6200007c919062000717565b600255601e600a9081556032600b556028600c8190556078600d556000600e5560c8600f556201518060105561012c601155610708601255601560138190556014805460ff191660011790556103e890556016556064601755601c80546201000160a01b62ffffff60a01b19909116179055610190906200010090600990620006dd565b620001119064e8d4a51000620006f5565b6200011d919062000717565b601d55612710620001316009600a620006dd565b620001429064e8d4a51000620006f5565b6200014e919062000717565b601e553480156200015e57600080fd5b506040516200416238038062004162833981016040819052620001819162000757565b600080546001600160a01b031916339081178255604051909182917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a3506001600160a01b0380841660805282811660a052811660c052737a250d5630b4cf539739df2c5dacb4c659f2488d60e08190526040805163c45a015560e01b8152905163c45a0155916004808201926020929091908290030181865afa15801562000231573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002579190620007a1565b6001600160a01b031663c9c6539660e0516001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015620002a6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002cc9190620007a1565b6040516001600160e01b031960e084901b1681526001600160a01b0390911660048201523060248201526044016020604051808303816000875af115801562000319573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200033f9190620007a1565b6001600160a01b03166101008190526000908152601860205260408120805460ff1916600117905560001990600490620003816000546001600160a01b031690565b6001600160a01b0316815260208082019290925260409081016000908120737a250d5630b4cf539739df2c5dacb4c659f2488d80835290845282822094909455308152600483528181209381529290915281206000199055600190600890620003f26000546001600160a01b031690565b6001600160a01b0316815260208101919091526040016000908120805460ff191692151592909217909155600190601990620004366000546001600160a01b031690565b6001600160a01b0316815260208082019290925260409081016000908120805494151560ff19958616179055308152600992839052908120805490931660019081179093556200048e6000546001600160a01b031690565b6001600160a01b031681526020808201929092526040016000908120805493151560ff19948516179055737a250d5630b4cf539739df2c5dacb4c659f2488d90526009908190527fbaa441ac52505693dd98c7dd2f5bbf8f9349b7da9de72f9d52e5cac70e7da8ce80549092166001179091556200050e90600a620006dd565b6200051f9064e8d4a51000620006f5565b60036000620005366000546001600160a01b031690565b6001600160a01b03168152602081019190915260400160002055620005636000546001600160a01b031690565b6001600160a01b031660007fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef6200059d6009600a620006dd565b620005ae9064e8d4a51000620006f5565b60405190815260200160405180910390a3505050620007bf565b634e487b7160e01b600052601160045260246000fd5b600181815b808511156200061f578160001904821115620006035762000603620005c8565b808516156200061157918102915b93841c9390800290620005e3565b509250929050565b6000826200063857506001620006d7565b816200064757506000620006d7565b81600181146200066057600281146200066b576200068b565b6001915050620006d7565b60ff8411156200067f576200067f620005c8565b50506001821b620006d7565b5060208310610133831016604e8410600b8410161715620006b0575081810a620006d7565b620006bc8383620005de565b8060001904821115620006d357620006d3620005c8565b0290505b92915050565b6000620006ee60ff84168362000627565b9392505050565b6000816000190483118215151615620007125762000712620005c8565b500290565b6000826200073557634e487b7160e01b600052601260045260246000fd5b500490565b80516001600160a01b03811681146200075257600080fd5b919050565b6000806000606084860312156200076d57600080fd5b62000778846200073a565b925062000788602085016200073a565b915062000798604085016200073a565b90509250925092565b600060208284031215620007b457600080fd5b620006ee826200073a565b60805160a05160c05160e051610100516139186200084a600039600081816107bf01528181611c8801528181611d9c01528181611e660152612a5a0152600081816109a601528181612ec201528181612f7a01526130cc01526000818161063001526131e901526000818161078b015261318b0152600081816104a7015261309e01526139186000f3fe6080604052600436106102e85760003560e01c806370a0823111610190578063abe57e70116100dc578063d5d035f511610095578063f2fde38b1161006f578063f2fde38b1461093e578063f84ba65d1461095e578063f8821a621461097e578063f887ea401461099457600080fd5b8063d5d035f5146108b8578063dd62ed3e146108d8578063e624c4bc1461091e57600080fd5b8063abe57e7014610801578063bf56b37114610821578063c5363caa14610837578063ceafd6da14610858578063d088935814610878578063d51ed1c81461089857600080fd5b80638da5cb5b11610149578063a457c2d711610123578063a457c2d714610759578063a5949bcf14610779578063a8aa1b31146107ad578063a9059cbb146107e157600080fd5b80638da5cb5b146106f45780638f9a55c01461071257806395d89b411461072857600080fd5b806370a0823114610652578063715018a6146106885780637516baec1461069d5780637d1db4a5146106be578063882cfb3f146106d4578063893d20e8146106f457600080fd5b8063264d26dd1161024f578063571ac8b011610208578063658d4b7f116101e2578063658d4b7f146105bd57806367243482146105dd5780636ddd1713146105fd5780636f9a880e1461061e57600080fd5b8063571ac8b0146105675780635804f1e4146105875780636419b6f91461059d57600080fd5b8063264d26dd146104955780632b112e49146104e1578063313ce567146104f65780633950935114610512578063421dd7c714610532578063492a937b1461054757600080fd5b80630f4f7bfe116102a15780630f4f7bfe146103e05780631161ae391461040057806318160ddd146104205780631faf723b14610435578063201e79911461045557806323b872dd1461047557600080fd5b806301339c21146102f45780630445b6671461030b57806304a66b481461033457806306fdde0314610354578063095ea7b3146103905780630e049c54146103c057600080fd5b366102ef57005b600080fd5b34801561030057600080fd5b506103096109c8565b005b34801561031757600080fd5b50610321601d5481565b6040519081526020015b60405180910390f35b34801561034057600080fd5b5061030961034f36600461324a565b610a3b565b34801561036057600080fd5b5060408051808201909152600a8152695348494e4a41444f474560b01b60208201525b60405161032b9190613285565b34801561039c57600080fd5b506103b06103ab3660046132f2565b610bfb565b604051901515815260200161032b565b3480156103cc57600080fd5b506103096103db36600461332c565b610c68565b3480156103ec57600080fd5b506103096103fb36600461336d565b610d79565b34801561040c57600080fd5b506103b061041b36600461336d565b610f60565b34801561042c57600080fd5b50610321610f74565b34801561044157600080fd5b5061030961045036600461336d565b610f96565b34801561046157600080fd5b5061030961047036600461336d565b6110a5565b34801561048157600080fd5b506103b061049036600461338f565b61111e565b3480156104a157600080fd5b506104c97f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b03909116815260200161032b565b3480156104ed57600080fd5b506103216111b3565b34801561050257600080fd5b506040516009815260200161032b565b34801561051e57600080fd5b506103b061052d3660046132f2565b611234565b34801561053e57600080fd5b50610309611279565b34801561055357600080fd5b506103096105623660046133d0565b6112e1565b34801561057357600080fd5b506103b0610582366004613409565b611391565b34801561059357600080fd5b50610321601b5481565b3480156105a957600080fd5b506103216105b8366004613426565b61139f565b3480156105c957600080fd5b506103096105d83660046133d0565b611433565b3480156105e957600080fd5b506103096105f8366004613490565b6114db565b34801561060957600080fd5b50601c546103b090600160b01b900460ff1681565b34801561062a57600080fd5b506104c97f000000000000000000000000000000000000000000000000000000000000000081565b34801561065e57600080fd5b5061032161066d366004613409565b6001600160a01b031660009081526003602052604090205490565b34801561069457600080fd5b50610309611761565b3480156106a957600080fd5b50601c546103b090600160a01b900460ff1681565b3480156106ca57600080fd5b5061032160015481565b3480156106e057600080fd5b50601c546104c9906001600160a01b031681565b34801561070057600080fd5b506000546001600160a01b03166104c9565b34801561071e57600080fd5b5061032160025481565b34801561073457600080fd5b506040805180820190915260088152675348494e444f474560c01b6020820152610383565b34801561076557600080fd5b506103b06107743660046132f2565b6118ae565b34801561078557600080fd5b506104c97f000000000000000000000000000000000000000000000000000000000000000081565b3480156107b957600080fd5b506104c97f000000000000000000000000000000000000000000000000000000000000000081565b3480156107ed57600080fd5b506103b06107fc3660046132f2565b61194d565b34801561080d57600080fd5b5061030961081c36600461336d565b61195a565b34801561082d57600080fd5b50610321601a5481565b34801561084357600080fd5b50601c546103b090600160a81b900460ff1681565b34801561086457600080fd5b506103096108733660046134fc565b611a48565b34801561088457600080fd5b50610309610893366004613519565b611b20565b3480156108a457600080fd5b506103216108b336600461354e565b611c74565b3480156108c457600080fd5b506103096108d33660046133d0565b611ccb565b3480156108e457600080fd5b506103216108f3366004613567565b6001600160a01b03918216600090815260046020908152604080832093909416825291909152205490565b34801561092a57600080fd5b50610309610939366004613409565b611e3a565b34801561094a57600080fd5b50610309610959366004613409565b611f97565b34801561096a57600080fd5b506103096109793660046133d0565b612156565b34801561098a57600080fd5b50610321601e5481565b3480156109a057600080fd5b506104c97f000000000000000000000000000000000000000000000000000000000000000081565b6000546001600160a01b031633146109fb5760405162461bcd60e51b81526004016109f290613595565b60405180910390fd5b601a5415610a0857600080fd5b43601a5542601b556040517fdd6364d871cb6036ca605660d590886ab96eb55b7dbb0051be1901a75794641590600090a1565b6000546001600160a01b03163314610a655760405162461bcd60e51b81526004016109f290613595565b84610a716002826135e0565b610a7c906002613602565b14610ae65760405162461bcd60e51b815260206004820152603460248201527f4c697175696469747920666565206d75737420626520616e206576656e206e756044820152736d6265722064756520746f20726f756e64696e6760601b60648201526084016109f2565b600a859055600b849055600c839055600e82905582610b058587613621565b610b0f9190613621565b600d556015819055610b226004826135e0565b600d541115610b635760405162461bcd60e51b815260206004820152600d60248201526c08ccacae640e8dede40d0d2ced609b1b60448201526064016109f2565b600d54600e541115610bad5760405162461bcd60e51b8152602060048201526013602482015272496e636f72726563742073656c6c206269617360681b60448201526064016109f2565b600d54601554600e5460408051938452602084019290925282820152517f01bae858246c904512695a3f6d48ab88abb7a0192fdd7c53b043e60317795f459181900360600190a15050505050565b3360008181526004602090815260408083206001600160a01b038716808552925280832085905551919290917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92590610c569086815260200190565b60405180910390a35060015b92915050565b6000546001600160a01b03163314610c925760405162461bcd60e51b81526004016109f290613595565b600a8210158015610ca557506101908411155b8015610cbb5750831580610cbb5750600f548410155b8015610cc95750610e108311155b610d155760405162461bcd60e51b815260206004820152601860248201527f506172616d6574657273206f7574206f6620626f756e6473000000000000000060448201526064016109f2565b6011849055601283905560138290556014805460ff191682151517905560408051858152602081018590529081018390527fafe6c6a9d14f1da6e5642b5fa6236c37e9783e34bfe9c08cee0529af4c17bce59060600160405180910390a150505050565b6000546001600160a01b03163314610da35760405162461bcd60e51b81526004016109f290613595565b610190606483600d54610db69190613602565b610dc091906135e0565b1115610e025760405162461bcd60e51b81526020600482015260116024820152700a6cad8d840e8c2f040e8dede40d0d2ced607b1b60448201526064016109f2565b6064821015610e5e5760405162461bcd60e51b815260206004820152602260248201527f43616e2774206d616b652073656c6c7320636865617065722077697468207468604482015261697360f01b60648201526084016109f2565b6011541580610e6f57506011548211155b610ece5760405162461bcd60e51b815260206004820152602a60248201527f4869676820706572696f642074617820636c6173686573207769746820616e746044820152690d25ac8eadae040e8c2f60b31b60648201526084016109f2565b62093a80811115610f185760405162461bcd60e51b815260206004820152601460248201527353656c6c20706572696f6420746f6f206c6f6e6760601b60448201526064016109f2565b600f829055601081905560408051838152602081018390527fb45fbcb6061be03b34994516d5d8d4e38b21641de36e23c8f81217f153a4dbd891015b60405180910390a15050565b600082610f6c83611c74565b119392505050565b6000610f826009600a61371d565b610f919064e8d4a51000613602565b905090565b6000546001600160a01b03163314610fc05760405162461bcd60e51b81526004016109f290613595565b600082118015610fd05750600081115b8015610ff35750600581610fe6846103e8613602565b610ff091906135e0565b10155b61103f5760405162461bcd60e51b815260206004820152601a60248201527f5472616e73616374696f6e206c696d69747320746f6f206c6f7700000000000060448201526064016109f2565b808261104d6009600a61371d565b61105c9064e8d4a51000613602565b6110669190613602565b61107091906135e0565b60018190556040519081527f87d6222e218f03ac3f7ce8a320052f10fc0c196c444a04e403ccc4bbfb6a362490602001610f54565b6000546001600160a01b031633146110cf5760405162461bcd60e51b81526004016109f290613595565b601682905560178190557fcbbf6bb708b8b7c4daa8d4e1088db9965d8167c3fcb6bc1a21147bbca33c12cf81611106846064613602565b61111091906135e0565b604051908152602001610f54565b6001600160a01b03831660009081526004602090815260408083203384529091528120546000191461119e576001600160a01b038416600090815260046020908152604080832033845290915290205461117990839061372c565b6001600160a01b03851660009081526004602090815260408083203384529091529020555b6111a98484846121fe565b90505b9392505050565b60036020527f3617319a054d772f909f7c479a2cebe5066e836a939412e32403c99029b92eff5461dead60009081527f262bb27bbdd95c1cdc8e16957e36e38579ea44f7f6413dd7a9c75939def06b2c54909161120f91613621565b61121b6009600a61371d565b61122a9064e8d4a51000613602565b610f91919061372c565b3360008181526004602090815260408083206001600160a01b0387168452909152812054909161127091859061126b908690613621565b612591565b50600192915050565b6000546001600160a01b031633146112a35760405162461bcd60e51b81526004016109f290613595565b601c805460ff60a81b1916600160a81b1790556040517fdd849d4f0ff64ab5cfef73f22ec29822c2713550b40bcded093282cc28f86c6090600090a1565b6000546001600160a01b0316331461130b5760405162461bcd60e51b81526004016109f290613595565b6001600160a01b0382166113315760405162461bcd60e51b81526004016109f290613743565b6001600160a01b038216600081815260186020908152604091829020805460ff191685151590811790915591519182527ffa4a2b2457d2065452473bed7d55c8fa2f65fc4a1eff1ebdaf14a1b7281e777391015b60405180910390a25050565b6000610c6282600019610bfb565b600043601a5414156113c15760016015546113ba919061372c565b9050610c62565b82156113fd57816113e157600e54600d546113dc9190613621565b6113ba565b6064600f54600d546113f39190613602565b6113ba91906135e0565b8161141757600e54600d54611412919061372c565b6111ac565b6064600f54600d546114299190613602565b6111ac91906135e0565b6000546001600160a01b0316331461145d5760405162461bcd60e51b81526004016109f290613595565b6001600160a01b0382166114835760405162461bcd60e51b81526004016109f290613743565b6001600160a01b038216600081815260086020908152604091829020805460ff191685151590811790915591519182527f5a8cf666a272afd6dec6788d33967c676fffa92e289eee1b38172982c4b4914d9101611385565b6000546001600160a01b031633146115055760405162461bcd60e51b81526004016109f290613595565b8281146115545760405162461bcd60e51b815260206004820152601960248201527f4172726179206c656e6774687320646f6e2774206d617463680000000000000060448201526064016109f2565b601c805460ff60b01b198116909155600160b01b900460ff1660005b84811015611717576018600087878481811061158e5761158e61376c565b90506020020160208101906115a39190613409565b6001600160a01b0316815260208101919091526040016000205460ff161580156115fd575060008686838181106115dc576115dc61376c565b90506020020160208101906115f19190613409565b6001600160a01b031614155b61165f5760405162461bcd60e51b815260206004820152602d60248201527f43616e27742061697264726f7020746865206c697175696469747920706f6f6c60448201526c0206f722061646472657373203609c1b60648201526084016109f2565b6116be338787848181106116755761167561376c565b905060200201602081019061168a9190613409565b6116966009600a61371d565b8787868181106116a8576116a861376c565b905060200201356116b99190613602565b6121fe565b5042600560008888858181106116d6576116d661376c565b90506020020160208101906116eb9190613409565b6001600160a01b031681526020810191909152604001600020558061170f81613782565b915050611570565b50601c805460ff60b01b1916600160b01b8315150217905560405133907faf1f3c8f96bb5b6a68b1ca0c51b6ba0250cf4a56f5d088071f5fcf710707727390600090a25050505050565b6000546001600160a01b0316331461178b5760405162461bcd60e51b81526004016109f290613595565b6000600860006117a36000546001600160a01b031690565b6001600160a01b0316815260208101919091526040016000908120805492151560ff19909316929092179091556009816117e56000546001600160a01b031690565b6001600160a01b0316815260208101919091526040016000908120805492151560ff19909316929092179091556019816118276000546001600160a01b031690565b6001600160a01b0316815260208101919091526040016000908120805492151560ff19909316929092179091556004816118696000546001600160a01b031690565b6001600160a01b0316815260208082019290925260409081016000908120737a250d5630b4cf539739df2c5dacb4c659f2488d82529092529020556118ac6126c2565b565b3360009081526004602090815260408083206001600160a01b0386168452909152812054828110156119365760405162461bcd60e51b815260206004820152602b60248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760448201526a206164647265737328302960a81b60648201526084016109f2565b6119433385858403612591565b5060019392505050565b60006111ac3384846121fe565b6000546001600160a01b031633146119845760405162461bcd60e51b81526004016109f290613595565b60008111801561199657506127108111155b6119e25760405162461bcd60e51b815260206004820152601e60248201527f44697669736f72206d7573742062652067726561746572207468616e2030000060448201526064016109f2565b80826119f06009600a61371d565b6119ff9064e8d4a51000613602565b611a099190613602565b611a1391906135e0565b60028190556040519081527fee4f0b388531b3b3cbe9a0fc02e17997304dcde94d38db4c65a1e896f7aca78890602001610f54565b6000546001600160a01b03163314611a725760405162461bcd60e51b81526004016109f290613595565b8015611ac857601c54600160a81b900460ff1615611ac85760405162461bcd60e51b8152602060048201526013602482015272141c9bdd1958dd1a5bdb88191a5cd8589b1959606a1b60448201526064016109f2565b601c8054821515600160a01b0260ff60a01b199091161790556040517f96b2bfe55fa5f4032b9b4d922bd97bb17a7f025fce7fcecaefc955fd0111a96690611b1590831515815260200190565b60405180910390a150565b6000546001600160a01b03163314611b4a5760405162461bcd60e51b81526004016109f290613595565b600082118015611b5a5750600081115b611bb25760405162461bcd60e51b815260206004820152602360248201527f44656e6f6d696e61746f7273206d75737420626520677265617465722074686160448201526206e20360ec1b60648201526084016109f2565b601c805460ff60b01b1916600160b01b8515150217905580611bd66009600a61371d565b611be59064e8d4a51000613602565b611bef91906135e0565b601e5581611bff6009600a61371d565b611c0e9064e8d4a51000613602565b611c1891906135e0565b601d819055601e54601c5460408051928352602083019390935260ff600160b01b9091041615158183015290517faa199f5aab08ad4ddee0140c8e7d13a4bebb822550aeb3d16e5f7bc485fba0f99181900360600190a1505050565b6000611c7e6111b3565b6001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016600090815260036020526040902054611cc19084613602565b610c6291906135e0565b6000546001600160a01b03163314611cf55760405162461bcd60e51b81526004016109f290613595565b601c546001600160a01b03838116911614611d7657601c54600160a81b900460ff1615611d5a5760405162461bcd60e51b8152602060048201526013602482015272141c9bdd1958dd1a5bdb88191a5cd8589b1959606a1b60448201526064016109f2565b601c80546001600160a01b0319166001600160a01b0384161790555b8015611e0257601c546040516366812dbb60e11b81523060048201526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000811660248301529091169063cd025b7690604401600060405180830381600087803b158015611de957600080fd5b505af1158015611dfd573d6000803e3d6000fd5b505050505b6040516001600160a01b038316907f1ccf813789899d0a52466f1f5c4cabc2820e6818ad4eaca73837528653d00c3c90600090a25050565b6000546001600160a01b03163314611e645760405162461bcd60e51b81526004016109f290613595565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316816001600160a01b031614158015611ec357506001600160a01b038116737a250d5630b4cf539739df2c5dacb4c659f2488d14155b611f255760405162461bcd60e51b815260206004820152602d60248201527f43616e277420616c7465722074726164696e6720636f6e74726163747320696e60448201526c103a3434b99036b0b73732b91760991b60648201526084016109f2565b6001600160a01b03811660008181526008602090815260408083208054600160ff1991821681179092556019845282852080548216831790556009909352818420805490931617909155517f96aa4fc7394e306de889dcb1b2730f2ff39e53b54dd11275bf141447c97802299190a250565b6000546001600160a01b03163314611fc15760405162461bcd60e51b81526004016109f290613595565b600060086000611fd96000546001600160a01b031690565b6001600160a01b0316815260208101919091526040016000908120805492151560ff199093169290921790915560098161201b6000546001600160a01b031690565b6001600160a01b0316815260208101919091526040016000908120805492151560ff199093169290921790915560198161205d6000546001600160a01b031690565b6001600160a01b0316815260208101919091526040016000908120805492151560ff199093169290921790915560048161209f6000546001600160a01b031690565b6001600160a01b0316815260208082019290925260409081016000908120737a250d5630b4cf539739df2c5dacb4c659f2488d82529092529020556120e381612736565b6001600160a01b031660009081526008602090815260408083208054600160ff199182168117909255600984528285208054821683179055601984528285208054909116909117905560048252808320737a250d5630b4cf539739df2c5dacb4c659f2488d845290915290206000199055565b6000546001600160a01b031633146121805760405162461bcd60e51b81526004016109f290613595565b6001600160a01b0382166121a65760405162461bcd60e51b81526004016109f290613743565b6001600160a01b038216600081815260096020908152604091829020805460ff191685151590811790915591519182527fe00fbc488e0ecd4458af11cf15f84d29b2cf621662aa8f46a48f3d29de95123d9101611385565b6001600160a01b03831660009081526003602052604081205482111561225d5760405162461bcd60e51b8152602060048201526014602482015273496e73756666696369656e742062616c616e636560601b60448201526064016109f2565b600082116122ad5760405162461bcd60e51b815260206004820152601d60248201527f6164647265737328302920616d6f756e74207472616e7366657272656400000060448201526064016109f2565b601f5460ff16156122ca576122c3848484612826565b90506111ac565b6122d484836128db565b6001600160a01b03831660009081526018602052604090205460ff1615801561230857506001600160a01b03831661dead14155b15612337576001600160a01b03831660009081526009602052604090205460ff16612337576123378383612948565b601a546123c9576001600160a01b03841660009081526019602052604090205460ff168061237d57506001600160a01b03831660009081526019602052604090205460ff165b6123c95760405162461bcd60e51b815260206004820152601a60248201527f436f6e7472616374206e6f74206c61756e63686564207965742e00000000000060448201526064016109f2565b6001600160a01b038416600090815260036020526040812080548492906123f190849061372c565b90915550506001600160a01b03841660009081526008602052604081205460ff1615801561243857506001600160a01b03841660009081526008602052604090205460ff16155b612442578261244d565b61244d8585856129d2565b905061245884612d1b565b1561246c57821561246c5761246c83612dc3565b6001600160a01b03841660009081526003602052604081208054839290612494908490613621565b9091555050601a54151580156124b35750601c54600160a01b900460ff165b1561253957601c5460405163090ec10b60e31b81526001600160a01b038781166004830152868116602483015260448201869052909116906348760858906064016020604051808303816000875af1158015612513573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612537919061379d565b505b836001600160a01b0316856001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405161257e91815260200190565b60405180910390a3506001949350505050565b6001600160a01b0383166125fa5760405162461bcd60e51b815260206004820152602a60248201527f45524332303a20617070726f76652066726f6d207468652061646472657373286044820152693029206164647265737360b01b60648201526084016109f2565b6001600160a01b0382166126615760405162461bcd60e51b815260206004820152602860248201527f45524332303a20617070726f766520746f207468652061646472657373283029604482015267206164647265737360c01b60648201526084016109f2565b6001600160a01b0383811660008181526004602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6000546001600160a01b031633146126ec5760405162461bcd60e51b81526004016109f290613595565b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080546001600160a01b0319169055565b6000546001600160a01b031633146127605760405162461bcd60e51b81526004016109f290613595565b6001600160a01b0381166127cb5760405162461bcd60e51b815260206004820152602c60248201527f4f776e61626c653a206e6577206f776e6572206973207468652061646472657360448201526b73283029206164647265737360a01b60648201526084016109f2565b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b6001600160a01b03831660009081526003602052604081208054839190839061285090849061372c565b90915550506001600160a01b0383166000908152600360205260408120805484929061287d908490613621565b92505081905550826001600160a01b0316846001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516128c991815260200190565b60405180910390a35060019392505050565b6001548111158061290457506001600160a01b03821660009081526009602052604090205460ff165b6129445760405162461bcd60e51b8152602060048201526011602482015270151608131a5b5a5d08115e18d959591959607a1b60448201526064016109f2565b5050565b6002546001600160a01b0383166000908152600360205260409020548190612971908490613621565b11156129cd5760405162461bcd60e51b815260206004820152602560248201527f5472616e7366657220616d6f756e74206578636565647320746865206261672060448201526439b4bd329760d91b60648201526084016109f2565b505050565b6001600160a01b0383166000908152601860205260408120548190819060ff16158015612a2357506010546001600160a01b0387166000908152600560205260409020544291612a2191613621565b115b6001600160a01b03861660009081526018602052604090205490915060ff168015612a5057506000601154115b15612bff576000807f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316630902f1ac6040518163ffffffff1660e01b8152600401606060405180830381865afa158015612ab6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612ada91906137d6565b506014549193509150600090879060ff16612af55782612af7565b835b6001600160701b0316612b0a9190613621565b612b16886103e8613602565b612b2091906135e0565b6012546001600160a01b038b16600090815260066020526040902054919250612b4891613621565b421115612b76576001600160a01b038916600090815260066020908152604080832042905560079091528120555b6001600160a01b03891660009081526007602052604081208054839290612b9e908490613621565b90915550506013546001600160a01b038a1660009081526007602052604090205410612bfb576015546064601154600d548a612bda9190613602565b612be49190613602565b612bee91906135e0565b612bf891906135e0565b94505b5050505b81612c44576015546001600160a01b038616600090815260186020526040902054612c2d9060ff168361139f565b612c379086613602565b612c4191906135e0565b91505b6001600160a01b03861660009081526018602052604090205460ff168015612c8257506001600160a01b038516600090815260056020526040902054155b15612ca3576001600160a01b03851660009081526005602052604090204290555b3060009081526003602052604081208054849290612cc2908490613621565b909155505060405182815230906001600160a01b038816907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a3612d11828561372c565b9695505050505050565b3360009081526018602052604081205460ff16158015612d4b57503360009081526008602052604090205460ff16155b8015612d5a5750601f5460ff16155b8015612d6f5750601c54600160b01b900460ff165b8015612d9357506001600160a01b03821660009081526018602052604090205460ff165b8015612db05750601e543060009081526003602052604090205410155b8015610c6257506000600d541192915050565b601f805460ff19166001179055601d546000908210612de457601d54612de6565b815b30600090815260036020526040902054909150811115612e125750306000908152600360205260409020545b6000612e22601654601754610f60565b612e2e57600a54612e31565b60005b905060006002600d548385612e469190613602565b612e5091906135e0565b612e5a91906135e0565b9050612e66818461372c565b60408051600280825260608201835292955060009290916020830190803683370190505090503081600081518110612ea057612ea061376c565b60200260200101906001600160a01b031690816001600160a01b0316815250507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015612f1e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612f429190613826565b81600181518110612f5557612f5561376c565b6001600160a01b03928316602091820292909201015260405163791ac94760e01b81527f00000000000000000000000000000000000000000000000000000000000000009091169063791ac94790612fba908790600090869030904290600401613843565b600060405180830381600087803b158015612fd457600080fd5b505af1158015612fe8573d6000803e3d6000fd5b5047925060009150612ffd90506002866135e0565b600d5461300a919061372c565b9050600060028261301b8886613602565b61302591906135e0565b61302f91906135e0565b9050600082600b54856130429190613602565b61304c91906135e0565b9050600061305a8284613621565b613064908661372c565b905086156131785760405163f305d71960e01b81523060048201526024810188905260006044820181905260648201526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000811660848301524260a48301527f0000000000000000000000000000000000000000000000000000000000000000169063f305d71990859060c40160606040518083038185885af1158015613116573d6000803e3d6000fd5b50505050506040513d601f19601f8201168201806040525081019061313b91906138b4565b505060408051858152602081018a90527f424db2872186fa7e7afa7a5e902ed3b49a2ef19c2f5431e672462495dd6b450692500160405180910390a15b81156131d6576040516001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169083156108fc029084906000818181858888f193505050501580156131d4573d6000803e3d6000fd5b505b8015613234576040516001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169082156108fc029083906000818181858888f19350505050158015613232573d6000803e3d6000fd5b505b5050601f805460ff191690555050505050505050565b600080600080600060a0868803121561326257600080fd5b505083359560208501359550604085013594606081013594506080013592509050565b600060208083528351808285015260005b818110156132b257858101830151858201604001528201613296565b818111156132c4576000604083870101525b50601f01601f1916929092016040019392505050565b6001600160a01b03811681146132ef57600080fd5b50565b6000806040838503121561330557600080fd5b8235613310816132da565b946020939093013593505050565b80151581146132ef57600080fd5b6000806000806080858703121561334257600080fd5b84359350602085013592506040850135915060608501356133628161331e565b939692955090935050565b6000806040838503121561338057600080fd5b50508035926020909101359150565b6000806000606084860312156133a457600080fd5b83356133af816132da565b925060208401356133bf816132da565b929592945050506040919091013590565b600080604083850312156133e357600080fd5b82356133ee816132da565b915060208301356133fe8161331e565b809150509250929050565b60006020828403121561341b57600080fd5b81356111ac816132da565b6000806040838503121561343957600080fd5b82356133ee8161331e565b60008083601f84011261345657600080fd5b50813567ffffffffffffffff81111561346e57600080fd5b6020830191508360208260051b850101111561348957600080fd5b9250929050565b600080600080604085870312156134a657600080fd5b843567ffffffffffffffff808211156134be57600080fd5b6134ca88838901613444565b909650945060208701359150808211156134e357600080fd5b506134f087828801613444565b95989497509550505050565b60006020828403121561350e57600080fd5b81356111ac8161331e565b60008060006060848603121561352e57600080fd5b83356135398161331e565b95602085013595506040909401359392505050565b60006020828403121561356057600080fd5b5035919050565b6000806040838503121561357a57600080fd5b8235613585816132da565b915060208301356133fe816132da565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b634e487b7160e01b600052601160045260246000fd5b6000826135fd57634e487b7160e01b600052601260045260246000fd5b500490565b600081600019048311821515161561361c5761361c6135ca565b500290565b60008219821115613634576136346135ca565b500190565b600181815b8085111561367457816000190482111561365a5761365a6135ca565b8085161561366757918102915b93841c939080029061363e565b509250929050565b60008261368b57506001610c62565b8161369857506000610c62565b81600181146136ae57600281146136b8576136d4565b6001915050610c62565b60ff8411156136c9576136c96135ca565b50506001821b610c62565b5060208310610133831016604e8410600b84101617156136f7575081810a610c62565b6137018383613639565b8060001904821115613715576137156135ca565b029392505050565b60006111ac60ff84168361367c565b60008282101561373e5761373e6135ca565b500390565b6020808252600f908201526e496e76616c6964206164647265737360881b604082015260600190565b634e487b7160e01b600052603260045260246000fd5b6000600019821415613796576137966135ca565b5060010190565b6000602082840312156137af57600080fd5b81516111ac8161331e565b80516001600160701b03811681146137d157600080fd5b919050565b6000806000606084860312156137eb57600080fd5b6137f4846137ba565b9250613802602085016137ba565b9150604084015163ffffffff8116811461381b57600080fd5b809150509250925092565b60006020828403121561383857600080fd5b81516111ac816132da565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b818110156138935784516001600160a01b03168352938301939183019160010161386e565b50506001600160a01b03969096166060850152505050608001529392505050565b6000806000606084860312156138c957600080fd5b835192506020840151915060408401519050925092509256fea264697066735822122091b43d90ebe6c1d6297d93bcd2e30774f8acb078ef6e4b35398c003d9613a44164736f6c634300080b0033000000000000000000000000728ca792fde16d60adabb44a0320b1b3b6922389000000000000000000000000acd694daf33b159d212f79f92141d247d109ca5a000000000000000000000000b7d0050d16a92a4eb89479ace1b87ff3504eb4e3

Deployed Bytecode

0x6080604052600436106102e85760003560e01c806370a0823111610190578063abe57e70116100dc578063d5d035f511610095578063f2fde38b1161006f578063f2fde38b1461093e578063f84ba65d1461095e578063f8821a621461097e578063f887ea401461099457600080fd5b8063d5d035f5146108b8578063dd62ed3e146108d8578063e624c4bc1461091e57600080fd5b8063abe57e7014610801578063bf56b37114610821578063c5363caa14610837578063ceafd6da14610858578063d088935814610878578063d51ed1c81461089857600080fd5b80638da5cb5b11610149578063a457c2d711610123578063a457c2d714610759578063a5949bcf14610779578063a8aa1b31146107ad578063a9059cbb146107e157600080fd5b80638da5cb5b146106f45780638f9a55c01461071257806395d89b411461072857600080fd5b806370a0823114610652578063715018a6146106885780637516baec1461069d5780637d1db4a5146106be578063882cfb3f146106d4578063893d20e8146106f457600080fd5b8063264d26dd1161024f578063571ac8b011610208578063658d4b7f116101e2578063658d4b7f146105bd57806367243482146105dd5780636ddd1713146105fd5780636f9a880e1461061e57600080fd5b8063571ac8b0146105675780635804f1e4146105875780636419b6f91461059d57600080fd5b8063264d26dd146104955780632b112e49146104e1578063313ce567146104f65780633950935114610512578063421dd7c714610532578063492a937b1461054757600080fd5b80630f4f7bfe116102a15780630f4f7bfe146103e05780631161ae391461040057806318160ddd146104205780631faf723b14610435578063201e79911461045557806323b872dd1461047557600080fd5b806301339c21146102f45780630445b6671461030b57806304a66b481461033457806306fdde0314610354578063095ea7b3146103905780630e049c54146103c057600080fd5b366102ef57005b600080fd5b34801561030057600080fd5b506103096109c8565b005b34801561031757600080fd5b50610321601d5481565b6040519081526020015b60405180910390f35b34801561034057600080fd5b5061030961034f36600461324a565b610a3b565b34801561036057600080fd5b5060408051808201909152600a8152695348494e4a41444f474560b01b60208201525b60405161032b9190613285565b34801561039c57600080fd5b506103b06103ab3660046132f2565b610bfb565b604051901515815260200161032b565b3480156103cc57600080fd5b506103096103db36600461332c565b610c68565b3480156103ec57600080fd5b506103096103fb36600461336d565b610d79565b34801561040c57600080fd5b506103b061041b36600461336d565b610f60565b34801561042c57600080fd5b50610321610f74565b34801561044157600080fd5b5061030961045036600461336d565b610f96565b34801561046157600080fd5b5061030961047036600461336d565b6110a5565b34801561048157600080fd5b506103b061049036600461338f565b61111e565b3480156104a157600080fd5b506104c97f000000000000000000000000728ca792fde16d60adabb44a0320b1b3b692238981565b6040516001600160a01b03909116815260200161032b565b3480156104ed57600080fd5b506103216111b3565b34801561050257600080fd5b506040516009815260200161032b565b34801561051e57600080fd5b506103b061052d3660046132f2565b611234565b34801561053e57600080fd5b50610309611279565b34801561055357600080fd5b506103096105623660046133d0565b6112e1565b34801561057357600080fd5b506103b0610582366004613409565b611391565b34801561059357600080fd5b50610321601b5481565b3480156105a957600080fd5b506103216105b8366004613426565b61139f565b3480156105c957600080fd5b506103096105d83660046133d0565b611433565b3480156105e957600080fd5b506103096105f8366004613490565b6114db565b34801561060957600080fd5b50601c546103b090600160b01b900460ff1681565b34801561062a57600080fd5b506104c97f000000000000000000000000b7d0050d16a92a4eb89479ace1b87ff3504eb4e381565b34801561065e57600080fd5b5061032161066d366004613409565b6001600160a01b031660009081526003602052604090205490565b34801561069457600080fd5b50610309611761565b3480156106a957600080fd5b50601c546103b090600160a01b900460ff1681565b3480156106ca57600080fd5b5061032160015481565b3480156106e057600080fd5b50601c546104c9906001600160a01b031681565b34801561070057600080fd5b506000546001600160a01b03166104c9565b34801561071e57600080fd5b5061032160025481565b34801561073457600080fd5b506040805180820190915260088152675348494e444f474560c01b6020820152610383565b34801561076557600080fd5b506103b06107743660046132f2565b6118ae565b34801561078557600080fd5b506104c97f000000000000000000000000acd694daf33b159d212f79f92141d247d109ca5a81565b3480156107b957600080fd5b506104c97f00000000000000000000000006791743bbd2e7c2ae513b05c88162a4d495db5781565b3480156107ed57600080fd5b506103b06107fc3660046132f2565b61194d565b34801561080d57600080fd5b5061030961081c36600461336d565b61195a565b34801561082d57600080fd5b50610321601a5481565b34801561084357600080fd5b50601c546103b090600160a81b900460ff1681565b34801561086457600080fd5b506103096108733660046134fc565b611a48565b34801561088457600080fd5b50610309610893366004613519565b611b20565b3480156108a457600080fd5b506103216108b336600461354e565b611c74565b3480156108c457600080fd5b506103096108d33660046133d0565b611ccb565b3480156108e457600080fd5b506103216108f3366004613567565b6001600160a01b03918216600090815260046020908152604080832093909416825291909152205490565b34801561092a57600080fd5b50610309610939366004613409565b611e3a565b34801561094a57600080fd5b50610309610959366004613409565b611f97565b34801561096a57600080fd5b506103096109793660046133d0565b612156565b34801561098a57600080fd5b50610321601e5481565b3480156109a057600080fd5b506104c97f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d81565b6000546001600160a01b031633146109fb5760405162461bcd60e51b81526004016109f290613595565b60405180910390fd5b601a5415610a0857600080fd5b43601a5542601b556040517fdd6364d871cb6036ca605660d590886ab96eb55b7dbb0051be1901a75794641590600090a1565b6000546001600160a01b03163314610a655760405162461bcd60e51b81526004016109f290613595565b84610a716002826135e0565b610a7c906002613602565b14610ae65760405162461bcd60e51b815260206004820152603460248201527f4c697175696469747920666565206d75737420626520616e206576656e206e756044820152736d6265722064756520746f20726f756e64696e6760601b60648201526084016109f2565b600a859055600b849055600c839055600e82905582610b058587613621565b610b0f9190613621565b600d556015819055610b226004826135e0565b600d541115610b635760405162461bcd60e51b815260206004820152600d60248201526c08ccacae640e8dede40d0d2ced609b1b60448201526064016109f2565b600d54600e541115610bad5760405162461bcd60e51b8152602060048201526013602482015272496e636f72726563742073656c6c206269617360681b60448201526064016109f2565b600d54601554600e5460408051938452602084019290925282820152517f01bae858246c904512695a3f6d48ab88abb7a0192fdd7c53b043e60317795f459181900360600190a15050505050565b3360008181526004602090815260408083206001600160a01b038716808552925280832085905551919290917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92590610c569086815260200190565b60405180910390a35060015b92915050565b6000546001600160a01b03163314610c925760405162461bcd60e51b81526004016109f290613595565b600a8210158015610ca557506101908411155b8015610cbb5750831580610cbb5750600f548410155b8015610cc95750610e108311155b610d155760405162461bcd60e51b815260206004820152601860248201527f506172616d6574657273206f7574206f6620626f756e6473000000000000000060448201526064016109f2565b6011849055601283905560138290556014805460ff191682151517905560408051858152602081018590529081018390527fafe6c6a9d14f1da6e5642b5fa6236c37e9783e34bfe9c08cee0529af4c17bce59060600160405180910390a150505050565b6000546001600160a01b03163314610da35760405162461bcd60e51b81526004016109f290613595565b610190606483600d54610db69190613602565b610dc091906135e0565b1115610e025760405162461bcd60e51b81526020600482015260116024820152700a6cad8d840e8c2f040e8dede40d0d2ced607b1b60448201526064016109f2565b6064821015610e5e5760405162461bcd60e51b815260206004820152602260248201527f43616e2774206d616b652073656c6c7320636865617065722077697468207468604482015261697360f01b60648201526084016109f2565b6011541580610e6f57506011548211155b610ece5760405162461bcd60e51b815260206004820152602a60248201527f4869676820706572696f642074617820636c6173686573207769746820616e746044820152690d25ac8eadae040e8c2f60b31b60648201526084016109f2565b62093a80811115610f185760405162461bcd60e51b815260206004820152601460248201527353656c6c20706572696f6420746f6f206c6f6e6760601b60448201526064016109f2565b600f829055601081905560408051838152602081018390527fb45fbcb6061be03b34994516d5d8d4e38b21641de36e23c8f81217f153a4dbd891015b60405180910390a15050565b600082610f6c83611c74565b119392505050565b6000610f826009600a61371d565b610f919064e8d4a51000613602565b905090565b6000546001600160a01b03163314610fc05760405162461bcd60e51b81526004016109f290613595565b600082118015610fd05750600081115b8015610ff35750600581610fe6846103e8613602565b610ff091906135e0565b10155b61103f5760405162461bcd60e51b815260206004820152601a60248201527f5472616e73616374696f6e206c696d69747320746f6f206c6f7700000000000060448201526064016109f2565b808261104d6009600a61371d565b61105c9064e8d4a51000613602565b6110669190613602565b61107091906135e0565b60018190556040519081527f87d6222e218f03ac3f7ce8a320052f10fc0c196c444a04e403ccc4bbfb6a362490602001610f54565b6000546001600160a01b031633146110cf5760405162461bcd60e51b81526004016109f290613595565b601682905560178190557fcbbf6bb708b8b7c4daa8d4e1088db9965d8167c3fcb6bc1a21147bbca33c12cf81611106846064613602565b61111091906135e0565b604051908152602001610f54565b6001600160a01b03831660009081526004602090815260408083203384529091528120546000191461119e576001600160a01b038416600090815260046020908152604080832033845290915290205461117990839061372c565b6001600160a01b03851660009081526004602090815260408083203384529091529020555b6111a98484846121fe565b90505b9392505050565b60036020527f3617319a054d772f909f7c479a2cebe5066e836a939412e32403c99029b92eff5461dead60009081527f262bb27bbdd95c1cdc8e16957e36e38579ea44f7f6413dd7a9c75939def06b2c54909161120f91613621565b61121b6009600a61371d565b61122a9064e8d4a51000613602565b610f91919061372c565b3360008181526004602090815260408083206001600160a01b0387168452909152812054909161127091859061126b908690613621565b612591565b50600192915050565b6000546001600160a01b031633146112a35760405162461bcd60e51b81526004016109f290613595565b601c805460ff60a81b1916600160a81b1790556040517fdd849d4f0ff64ab5cfef73f22ec29822c2713550b40bcded093282cc28f86c6090600090a1565b6000546001600160a01b0316331461130b5760405162461bcd60e51b81526004016109f290613595565b6001600160a01b0382166113315760405162461bcd60e51b81526004016109f290613743565b6001600160a01b038216600081815260186020908152604091829020805460ff191685151590811790915591519182527ffa4a2b2457d2065452473bed7d55c8fa2f65fc4a1eff1ebdaf14a1b7281e777391015b60405180910390a25050565b6000610c6282600019610bfb565b600043601a5414156113c15760016015546113ba919061372c565b9050610c62565b82156113fd57816113e157600e54600d546113dc9190613621565b6113ba565b6064600f54600d546113f39190613602565b6113ba91906135e0565b8161141757600e54600d54611412919061372c565b6111ac565b6064600f54600d546114299190613602565b6111ac91906135e0565b6000546001600160a01b0316331461145d5760405162461bcd60e51b81526004016109f290613595565b6001600160a01b0382166114835760405162461bcd60e51b81526004016109f290613743565b6001600160a01b038216600081815260086020908152604091829020805460ff191685151590811790915591519182527f5a8cf666a272afd6dec6788d33967c676fffa92e289eee1b38172982c4b4914d9101611385565b6000546001600160a01b031633146115055760405162461bcd60e51b81526004016109f290613595565b8281146115545760405162461bcd60e51b815260206004820152601960248201527f4172726179206c656e6774687320646f6e2774206d617463680000000000000060448201526064016109f2565b601c805460ff60b01b198116909155600160b01b900460ff1660005b84811015611717576018600087878481811061158e5761158e61376c565b90506020020160208101906115a39190613409565b6001600160a01b0316815260208101919091526040016000205460ff161580156115fd575060008686838181106115dc576115dc61376c565b90506020020160208101906115f19190613409565b6001600160a01b031614155b61165f5760405162461bcd60e51b815260206004820152602d60248201527f43616e27742061697264726f7020746865206c697175696469747920706f6f6c60448201526c0206f722061646472657373203609c1b60648201526084016109f2565b6116be338787848181106116755761167561376c565b905060200201602081019061168a9190613409565b6116966009600a61371d565b8787868181106116a8576116a861376c565b905060200201356116b99190613602565b6121fe565b5042600560008888858181106116d6576116d661376c565b90506020020160208101906116eb9190613409565b6001600160a01b031681526020810191909152604001600020558061170f81613782565b915050611570565b50601c805460ff60b01b1916600160b01b8315150217905560405133907faf1f3c8f96bb5b6a68b1ca0c51b6ba0250cf4a56f5d088071f5fcf710707727390600090a25050505050565b6000546001600160a01b0316331461178b5760405162461bcd60e51b81526004016109f290613595565b6000600860006117a36000546001600160a01b031690565b6001600160a01b0316815260208101919091526040016000908120805492151560ff19909316929092179091556009816117e56000546001600160a01b031690565b6001600160a01b0316815260208101919091526040016000908120805492151560ff19909316929092179091556019816118276000546001600160a01b031690565b6001600160a01b0316815260208101919091526040016000908120805492151560ff19909316929092179091556004816118696000546001600160a01b031690565b6001600160a01b0316815260208082019290925260409081016000908120737a250d5630b4cf539739df2c5dacb4c659f2488d82529092529020556118ac6126c2565b565b3360009081526004602090815260408083206001600160a01b0386168452909152812054828110156119365760405162461bcd60e51b815260206004820152602b60248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760448201526a206164647265737328302960a81b60648201526084016109f2565b6119433385858403612591565b5060019392505050565b60006111ac3384846121fe565b6000546001600160a01b031633146119845760405162461bcd60e51b81526004016109f290613595565b60008111801561199657506127108111155b6119e25760405162461bcd60e51b815260206004820152601e60248201527f44697669736f72206d7573742062652067726561746572207468616e2030000060448201526064016109f2565b80826119f06009600a61371d565b6119ff9064e8d4a51000613602565b611a099190613602565b611a1391906135e0565b60028190556040519081527fee4f0b388531b3b3cbe9a0fc02e17997304dcde94d38db4c65a1e896f7aca78890602001610f54565b6000546001600160a01b03163314611a725760405162461bcd60e51b81526004016109f290613595565b8015611ac857601c54600160a81b900460ff1615611ac85760405162461bcd60e51b8152602060048201526013602482015272141c9bdd1958dd1a5bdb88191a5cd8589b1959606a1b60448201526064016109f2565b601c8054821515600160a01b0260ff60a01b199091161790556040517f96b2bfe55fa5f4032b9b4d922bd97bb17a7f025fce7fcecaefc955fd0111a96690611b1590831515815260200190565b60405180910390a150565b6000546001600160a01b03163314611b4a5760405162461bcd60e51b81526004016109f290613595565b600082118015611b5a5750600081115b611bb25760405162461bcd60e51b815260206004820152602360248201527f44656e6f6d696e61746f7273206d75737420626520677265617465722074686160448201526206e20360ec1b60648201526084016109f2565b601c805460ff60b01b1916600160b01b8515150217905580611bd66009600a61371d565b611be59064e8d4a51000613602565b611bef91906135e0565b601e5581611bff6009600a61371d565b611c0e9064e8d4a51000613602565b611c1891906135e0565b601d819055601e54601c5460408051928352602083019390935260ff600160b01b9091041615158183015290517faa199f5aab08ad4ddee0140c8e7d13a4bebb822550aeb3d16e5f7bc485fba0f99181900360600190a1505050565b6000611c7e6111b3565b6001600160a01b037f00000000000000000000000006791743bbd2e7c2ae513b05c88162a4d495db5716600090815260036020526040902054611cc19084613602565b610c6291906135e0565b6000546001600160a01b03163314611cf55760405162461bcd60e51b81526004016109f290613595565b601c546001600160a01b03838116911614611d7657601c54600160a81b900460ff1615611d5a5760405162461bcd60e51b8152602060048201526013602482015272141c9bdd1958dd1a5bdb88191a5cd8589b1959606a1b60448201526064016109f2565b601c80546001600160a01b0319166001600160a01b0384161790555b8015611e0257601c546040516366812dbb60e11b81523060048201526001600160a01b037f00000000000000000000000006791743bbd2e7c2ae513b05c88162a4d495db57811660248301529091169063cd025b7690604401600060405180830381600087803b158015611de957600080fd5b505af1158015611dfd573d6000803e3d6000fd5b505050505b6040516001600160a01b038316907f1ccf813789899d0a52466f1f5c4cabc2820e6818ad4eaca73837528653d00c3c90600090a25050565b6000546001600160a01b03163314611e645760405162461bcd60e51b81526004016109f290613595565b7f00000000000000000000000006791743bbd2e7c2ae513b05c88162a4d495db576001600160a01b0316816001600160a01b031614158015611ec357506001600160a01b038116737a250d5630b4cf539739df2c5dacb4c659f2488d14155b611f255760405162461bcd60e51b815260206004820152602d60248201527f43616e277420616c7465722074726164696e6720636f6e74726163747320696e60448201526c103a3434b99036b0b73732b91760991b60648201526084016109f2565b6001600160a01b03811660008181526008602090815260408083208054600160ff1991821681179092556019845282852080548216831790556009909352818420805490931617909155517f96aa4fc7394e306de889dcb1b2730f2ff39e53b54dd11275bf141447c97802299190a250565b6000546001600160a01b03163314611fc15760405162461bcd60e51b81526004016109f290613595565b600060086000611fd96000546001600160a01b031690565b6001600160a01b0316815260208101919091526040016000908120805492151560ff199093169290921790915560098161201b6000546001600160a01b031690565b6001600160a01b0316815260208101919091526040016000908120805492151560ff199093169290921790915560198161205d6000546001600160a01b031690565b6001600160a01b0316815260208101919091526040016000908120805492151560ff199093169290921790915560048161209f6000546001600160a01b031690565b6001600160a01b0316815260208082019290925260409081016000908120737a250d5630b4cf539739df2c5dacb4c659f2488d82529092529020556120e381612736565b6001600160a01b031660009081526008602090815260408083208054600160ff199182168117909255600984528285208054821683179055601984528285208054909116909117905560048252808320737a250d5630b4cf539739df2c5dacb4c659f2488d845290915290206000199055565b6000546001600160a01b031633146121805760405162461bcd60e51b81526004016109f290613595565b6001600160a01b0382166121a65760405162461bcd60e51b81526004016109f290613743565b6001600160a01b038216600081815260096020908152604091829020805460ff191685151590811790915591519182527fe00fbc488e0ecd4458af11cf15f84d29b2cf621662aa8f46a48f3d29de95123d9101611385565b6001600160a01b03831660009081526003602052604081205482111561225d5760405162461bcd60e51b8152602060048201526014602482015273496e73756666696369656e742062616c616e636560601b60448201526064016109f2565b600082116122ad5760405162461bcd60e51b815260206004820152601d60248201527f6164647265737328302920616d6f756e74207472616e7366657272656400000060448201526064016109f2565b601f5460ff16156122ca576122c3848484612826565b90506111ac565b6122d484836128db565b6001600160a01b03831660009081526018602052604090205460ff1615801561230857506001600160a01b03831661dead14155b15612337576001600160a01b03831660009081526009602052604090205460ff16612337576123378383612948565b601a546123c9576001600160a01b03841660009081526019602052604090205460ff168061237d57506001600160a01b03831660009081526019602052604090205460ff165b6123c95760405162461bcd60e51b815260206004820152601a60248201527f436f6e7472616374206e6f74206c61756e63686564207965742e00000000000060448201526064016109f2565b6001600160a01b038416600090815260036020526040812080548492906123f190849061372c565b90915550506001600160a01b03841660009081526008602052604081205460ff1615801561243857506001600160a01b03841660009081526008602052604090205460ff16155b612442578261244d565b61244d8585856129d2565b905061245884612d1b565b1561246c57821561246c5761246c83612dc3565b6001600160a01b03841660009081526003602052604081208054839290612494908490613621565b9091555050601a54151580156124b35750601c54600160a01b900460ff165b1561253957601c5460405163090ec10b60e31b81526001600160a01b038781166004830152868116602483015260448201869052909116906348760858906064016020604051808303816000875af1158015612513573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612537919061379d565b505b836001600160a01b0316856001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405161257e91815260200190565b60405180910390a3506001949350505050565b6001600160a01b0383166125fa5760405162461bcd60e51b815260206004820152602a60248201527f45524332303a20617070726f76652066726f6d207468652061646472657373286044820152693029206164647265737360b01b60648201526084016109f2565b6001600160a01b0382166126615760405162461bcd60e51b815260206004820152602860248201527f45524332303a20617070726f766520746f207468652061646472657373283029604482015267206164647265737360c01b60648201526084016109f2565b6001600160a01b0383811660008181526004602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6000546001600160a01b031633146126ec5760405162461bcd60e51b81526004016109f290613595565b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080546001600160a01b0319169055565b6000546001600160a01b031633146127605760405162461bcd60e51b81526004016109f290613595565b6001600160a01b0381166127cb5760405162461bcd60e51b815260206004820152602c60248201527f4f776e61626c653a206e6577206f776e6572206973207468652061646472657360448201526b73283029206164647265737360a01b60648201526084016109f2565b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b6001600160a01b03831660009081526003602052604081208054839190839061285090849061372c565b90915550506001600160a01b0383166000908152600360205260408120805484929061287d908490613621565b92505081905550826001600160a01b0316846001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516128c991815260200190565b60405180910390a35060019392505050565b6001548111158061290457506001600160a01b03821660009081526009602052604090205460ff165b6129445760405162461bcd60e51b8152602060048201526011602482015270151608131a5b5a5d08115e18d959591959607a1b60448201526064016109f2565b5050565b6002546001600160a01b0383166000908152600360205260409020548190612971908490613621565b11156129cd5760405162461bcd60e51b815260206004820152602560248201527f5472616e7366657220616d6f756e74206578636565647320746865206261672060448201526439b4bd329760d91b60648201526084016109f2565b505050565b6001600160a01b0383166000908152601860205260408120548190819060ff16158015612a2357506010546001600160a01b0387166000908152600560205260409020544291612a2191613621565b115b6001600160a01b03861660009081526018602052604090205490915060ff168015612a5057506000601154115b15612bff576000807f00000000000000000000000006791743bbd2e7c2ae513b05c88162a4d495db576001600160a01b0316630902f1ac6040518163ffffffff1660e01b8152600401606060405180830381865afa158015612ab6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612ada91906137d6565b506014549193509150600090879060ff16612af55782612af7565b835b6001600160701b0316612b0a9190613621565b612b16886103e8613602565b612b2091906135e0565b6012546001600160a01b038b16600090815260066020526040902054919250612b4891613621565b421115612b76576001600160a01b038916600090815260066020908152604080832042905560079091528120555b6001600160a01b03891660009081526007602052604081208054839290612b9e908490613621565b90915550506013546001600160a01b038a1660009081526007602052604090205410612bfb576015546064601154600d548a612bda9190613602565b612be49190613602565b612bee91906135e0565b612bf891906135e0565b94505b5050505b81612c44576015546001600160a01b038616600090815260186020526040902054612c2d9060ff168361139f565b612c379086613602565b612c4191906135e0565b91505b6001600160a01b03861660009081526018602052604090205460ff168015612c8257506001600160a01b038516600090815260056020526040902054155b15612ca3576001600160a01b03851660009081526005602052604090204290555b3060009081526003602052604081208054849290612cc2908490613621565b909155505060405182815230906001600160a01b038816907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a3612d11828561372c565b9695505050505050565b3360009081526018602052604081205460ff16158015612d4b57503360009081526008602052604090205460ff16155b8015612d5a5750601f5460ff16155b8015612d6f5750601c54600160b01b900460ff165b8015612d9357506001600160a01b03821660009081526018602052604090205460ff165b8015612db05750601e543060009081526003602052604090205410155b8015610c6257506000600d541192915050565b601f805460ff19166001179055601d546000908210612de457601d54612de6565b815b30600090815260036020526040902054909150811115612e125750306000908152600360205260409020545b6000612e22601654601754610f60565b612e2e57600a54612e31565b60005b905060006002600d548385612e469190613602565b612e5091906135e0565b612e5a91906135e0565b9050612e66818461372c565b60408051600280825260608201835292955060009290916020830190803683370190505090503081600081518110612ea057612ea061376c565b60200260200101906001600160a01b031690816001600160a01b0316815250507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d6001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015612f1e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612f429190613826565b81600181518110612f5557612f5561376c565b6001600160a01b03928316602091820292909201015260405163791ac94760e01b81527f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d9091169063791ac94790612fba908790600090869030904290600401613843565b600060405180830381600087803b158015612fd457600080fd5b505af1158015612fe8573d6000803e3d6000fd5b5047925060009150612ffd90506002866135e0565b600d5461300a919061372c565b9050600060028261301b8886613602565b61302591906135e0565b61302f91906135e0565b9050600082600b54856130429190613602565b61304c91906135e0565b9050600061305a8284613621565b613064908661372c565b905086156131785760405163f305d71960e01b81523060048201526024810188905260006044820181905260648201526001600160a01b037f000000000000000000000000728ca792fde16d60adabb44a0320b1b3b6922389811660848301524260a48301527f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d169063f305d71990859060c40160606040518083038185885af1158015613116573d6000803e3d6000fd5b50505050506040513d601f19601f8201168201806040525081019061313b91906138b4565b505060408051858152602081018a90527f424db2872186fa7e7afa7a5e902ed3b49a2ef19c2f5431e672462495dd6b450692500160405180910390a15b81156131d6576040516001600160a01b037f000000000000000000000000acd694daf33b159d212f79f92141d247d109ca5a169083156108fc029084906000818181858888f193505050501580156131d4573d6000803e3d6000fd5b505b8015613234576040516001600160a01b037f000000000000000000000000b7d0050d16a92a4eb89479ace1b87ff3504eb4e3169082156108fc029083906000818181858888f19350505050158015613232573d6000803e3d6000fd5b505b5050601f805460ff191690555050505050505050565b600080600080600060a0868803121561326257600080fd5b505083359560208501359550604085013594606081013594506080013592509050565b600060208083528351808285015260005b818110156132b257858101830151858201604001528201613296565b818111156132c4576000604083870101525b50601f01601f1916929092016040019392505050565b6001600160a01b03811681146132ef57600080fd5b50565b6000806040838503121561330557600080fd5b8235613310816132da565b946020939093013593505050565b80151581146132ef57600080fd5b6000806000806080858703121561334257600080fd5b84359350602085013592506040850135915060608501356133628161331e565b939692955090935050565b6000806040838503121561338057600080fd5b50508035926020909101359150565b6000806000606084860312156133a457600080fd5b83356133af816132da565b925060208401356133bf816132da565b929592945050506040919091013590565b600080604083850312156133e357600080fd5b82356133ee816132da565b915060208301356133fe8161331e565b809150509250929050565b60006020828403121561341b57600080fd5b81356111ac816132da565b6000806040838503121561343957600080fd5b82356133ee8161331e565b60008083601f84011261345657600080fd5b50813567ffffffffffffffff81111561346e57600080fd5b6020830191508360208260051b850101111561348957600080fd5b9250929050565b600080600080604085870312156134a657600080fd5b843567ffffffffffffffff808211156134be57600080fd5b6134ca88838901613444565b909650945060208701359150808211156134e357600080fd5b506134f087828801613444565b95989497509550505050565b60006020828403121561350e57600080fd5b81356111ac8161331e565b60008060006060848603121561352e57600080fd5b83356135398161331e565b95602085013595506040909401359392505050565b60006020828403121561356057600080fd5b5035919050565b6000806040838503121561357a57600080fd5b8235613585816132da565b915060208301356133fe816132da565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b634e487b7160e01b600052601160045260246000fd5b6000826135fd57634e487b7160e01b600052601260045260246000fd5b500490565b600081600019048311821515161561361c5761361c6135ca565b500290565b60008219821115613634576136346135ca565b500190565b600181815b8085111561367457816000190482111561365a5761365a6135ca565b8085161561366757918102915b93841c939080029061363e565b509250929050565b60008261368b57506001610c62565b8161369857506000610c62565b81600181146136ae57600281146136b8576136d4565b6001915050610c62565b60ff8411156136c9576136c96135ca565b50506001821b610c62565b5060208310610133831016604e8410600b84101617156136f7575081810a610c62565b6137018383613639565b8060001904821115613715576137156135ca565b029392505050565b60006111ac60ff84168361367c565b60008282101561373e5761373e6135ca565b500390565b6020808252600f908201526e496e76616c6964206164647265737360881b604082015260600190565b634e487b7160e01b600052603260045260246000fd5b6000600019821415613796576137966135ca565b5060010190565b6000602082840312156137af57600080fd5b81516111ac8161331e565b80516001600160701b03811681146137d157600080fd5b919050565b6000806000606084860312156137eb57600080fd5b6137f4846137ba565b9250613802602085016137ba565b9150604084015163ffffffff8116811461381b57600080fd5b809150509250925092565b60006020828403121561383857600080fd5b81516111ac816132da565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b818110156138935784516001600160a01b03168352938301939183019160010161386e565b50506001600160a01b03969096166060850152505050608001529392505050565b6000806000606084860312156138c957600080fd5b835192506020840151915060408401519050925092509256fea264697066735822122091b43d90ebe6c1d6297d93bcd2e30774f8acb078ef6e4b35398c003d9613a44164736f6c634300080b0033

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

000000000000000000000000728ca792fde16d60adabb44a0320b1b3b6922389000000000000000000000000acd694daf33b159d212f79f92141d247d109ca5a000000000000000000000000b7d0050d16a92a4eb89479ace1b87ff3504eb4e3

-----Decoded View---------------
Arg [0] : _lp (address): 0x728ca792FDE16D60AdabB44A0320b1b3B6922389
Arg [1] : _marketing (address): 0xacd694dAf33B159d212F79f92141d247d109cA5a
Arg [2] : _dev (address): 0xb7D0050d16a92a4EB89479Ace1b87ff3504EB4E3

-----Encoded View---------------
3 Constructor Arguments found :
Arg [0] : 000000000000000000000000728ca792fde16d60adabb44a0320b1b3b6922389
Arg [1] : 000000000000000000000000acd694daf33b159d212f79f92141d247d109ca5a
Arg [2] : 000000000000000000000000b7d0050d16a92a4eb89479ace1b87ff3504eb4e3


Deployed Bytecode Sourcemap

16517:20168:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;32029:191;;;;;;;;;;;;;:::i;:::-;;18697:49;;;;;;;;;;;;;;;;;;;160:25:1;;;148:2;133:18;18697:49:0;;;;;;;;33317:696;;;;;;;;;;-1:-1:-1;33317:696:0;;;;;:::i;:::-;;:::i;20153:71::-;;;;;;;;;;-1:-1:-1;20216:5:0;;;;;;;;;;;;-1:-1:-1;;;20216:5:0;;;;20153:71;;;;;;;:::i;20559:216::-;;;;;;;;;;-1:-1:-1;20559:216:0;;;;;:::i;:::-;;:::i;:::-;;;1878:14:1;;1871:22;1853:41;;1841:2;1826:18;20559:216:0;1713:187:1;31563:458:0;;;;;;;;;;-1:-1:-1;31563:458:0;;;;;:::i;:::-;;:::i;30968:587::-;;;;;;;;;;-1:-1:-1;30968:587:0;;;;;:::i;:::-;;:::i;28831:150::-;;;;;;;;;;-1:-1:-1;28831:150:0;;;;;:::i;:::-;;:::i;19901:88::-;;;;;;;;;;;;;:::i;32228:309::-;;;;;;;;;;-1:-1:-1;32228:309:0;;;;;:::i;:::-;;:::i;34459:246::-;;;;;;;;;;-1:-1:-1;34459:246:0;;;;;:::i;:::-;;:::i;22089:341::-;;;;;;;;;;-1:-1:-1;22089:341:0;;;;;:::i;:::-;;:::i;17955:42::-;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;3357:32:1;;;3339:51;;3327:2;3312:18;17955:42:0;3193:203:1;28515:144:0;;;;;;;;;;;;;:::i;19995:71::-;;;;;;;;;;-1:-1:-1;19995:71:0;;16789:1;3543:36:1;;3531:2;3516:18;19995:71:0;3401:184:1;20783:213:0;;;;;;;;;;-1:-1:-1;20783:213:0;;;;;:::i;:::-;;:::i;30450:128::-;;;;;;;;;;;;;:::i;34713:233::-;;;;;;;;;;-1:-1:-1;34713:233:0;;;;;:::i;:::-;;:::i;21795:122::-;;;;;;;;;;-1:-1:-1;21795:122:0;;;;;:::i;:::-;;:::i;18499:27::-;;;;;;;;;;;;;;;;24440:345;;;;;;;;;;-1:-1:-1;24440:345:0;;;;;:::i;:::-;;:::i;32837:222::-;;;;;;;;;;-1:-1:-1;32837:222:0;;;;;:::i;:::-;;:::i;34951:772::-;;;;;;;;;;-1:-1:-1;34951:772:0;;;;;:::i;:::-;;:::i;18660:30::-;;;;;;;;;;-1:-1:-1;18660:30:0;;;;-1:-1:-1;;;18660:30:0;;;;;;18061:44;;;;;;;;;;;;;;;20307:105;;;;;;;;;;-1:-1:-1;20307:105:0;;;;;:::i;:::-;-1:-1:-1;;;;;20391:18:0;20373:7;20391:18;;;:9;:18;;;;;;;20307:105;29501:285;;;;;;;;;;;;;:::i;18570:36::-;;;;;;;;;;-1:-1:-1;18570:36:0;;;;-1:-1:-1;;;18570:36:0;;;;;;16984:54;;;;;;;;;;;;;;;;18536:27;;;;;;;;;;-1:-1:-1;18536:27:0;;;;-1:-1:-1;;;;;18536:27:0;;;20230:71;;;;;;;;;;-1:-1:-1;20273:7:0;15159:6;-1:-1:-1;;;;;15159:6:0;20230:71;19901:88;17054:56;;;;;;;;;;;;;;;;20072:75;;;;;;;;;;-1:-1:-1;20137:7:0;;;;;;;;;;;;-1:-1:-1;;;20137:7:0;;;;20072:75;;21004:417;;;;;;;;;;-1:-1:-1;21004:417:0;;;;;:::i;:::-;;:::i;18004:50::-;;;;;;;;;;;;;;;18429:29;;;;;;;;;;;;;;;21925:156;;;;;;;;;;-1:-1:-1;21925:156:0;;;;;:::i;:::-;;:::i;32549:280::-;;;;;;;;;;-1:-1:-1;32549:280:0;;;;;:::i;:::-;;:::i;18467:25::-;;;;;;;;;;;;;;;;18613:38;;;;;;;;;;-1:-1:-1;18613:38:0;;;;-1:-1:-1;;;18613:38:0;;;;;;29794:242;;;;;;;;;;-1:-1:-1;29794:242:0;;;;;:::i;:::-;;:::i;34021:430::-;;;;;;;;;;-1:-1:-1;34021:430:0;;;;;:::i;:::-;;:::i;28667:156::-;;;;;;;;;;-1:-1:-1;28667:156:0;;;;;:::i;:::-;;:::i;30048:390::-;;;;;;;;;;-1:-1:-1;30048:390:0;;;;;:::i;:::-;;:::i;20418:133::-;;;;;;;;;;-1:-1:-1;20418:133:0;;;;;:::i;:::-;-1:-1:-1;;;;;20520:19:0;;;20502:7;20520:19;;;:11;:19;;;;;;;;:28;;;;;;;;;;;;;20418:133;30590:370;;;;;;;;;;-1:-1:-1;30590:370:0;;;;;:::i;:::-;;:::i;28989:504::-;;;;;;;;;;-1:-1:-1;28989:504:0;;;;;:::i;:::-;;:::i;33067:242::-;;;;;;;;;;-1:-1:-1;33067:242:0;;;;;:::i;:::-;;:::i;18761:49::-;;;;;;;;;;;;;;;;18198:34;;;;;;;;;;;;;;;32029:191;15306:6;;-1:-1:-1;;;;;15306:6:0;9642:10;15306:22;15298:67;;;;-1:-1:-1;;;15298:67:0;;;;;;;:::i;:::-;;;;;;;;;32086:10:::1;::::0;:15;32077:25:::1;;;::::0;::::1;;32126:12;32113:10;:25:::0;32164:15:::1;32149:12;:30:::0;32195:17:::1;::::0;::::1;::::0;-1:-1:-1;;32195:17:0::1;32029:191::o:0;33317:696::-;15306:6;;-1:-1:-1;;;;;15306:6:0;9642:10;15306:22;15298:67;;;;-1:-1:-1;;;15298:67:0;;;;;;;:::i;:::-;33506:13;33480:17:::1;33496:1;33506:13:::0;33480:17:::1;:::i;:::-;33479:23;::::0;33501:1:::1;33479:23;:::i;:::-;:40;33471:105;;;::::0;-1:-1:-1;;;33471:105:0;;8732:2:1;33471:105:0::1;::::0;::::1;8714:21:1::0;8771:2;8751:18;;;8744:30;8810:34;8790:18;;;8783:62;-1:-1:-1;;;8861:18:1;;;8854:50;8921:19;;33471:105:0::1;8530:416:1::0;33471:105:0::1;33587:12;:28:::0;;;33626:12:::1;:28:::0;;;33665:6:::1;:16:::0;;;33692:8:::1;:20:::0;;;33674:7;33734:29:::1;33641:13:::0;33602;33734:29:::1;:::i;:::-;:39;;;;:::i;:::-;33723:8;:50:::0;33784:14:::1;:32:::0;;;33847:18:::1;33864:1;33801:15:::0;33847:18:::1;:::i;:::-;33835:8;;:30;;33827:56;;;::::0;-1:-1:-1;;;33827:56:0;;9286:2:1;33827:56:0::1;::::0;::::1;9268:21:1::0;9325:2;9305:18;;;9298:30;-1:-1:-1;;;9344:18:1;;;9337:43;9397:18;;33827:56:0::1;9084:337:1::0;33827:56:0::1;33914:8;;33902;;:20;;33894:52;;;::::0;-1:-1:-1;;;33894:52:0;;9628:2:1;33894:52:0::1;::::0;::::1;9610:21:1::0;9667:2;9647:18;;;9640:30;-1:-1:-1;;;9686:18:1;;;9679:49;9745:18;;33894:52:0::1;9426:343:1::0;33894:52:0::1;33970:8;::::0;33980:14:::1;::::0;33996:8:::1;::::0;33962:43:::1;::::0;;9976:25:1;;;10032:2;10017:18;;10010:34;;;;10060:18;;;10053:34;33962:43:0;::::1;::::0;;;;9964:2:1;33962:43:0;;::::1;33317:696:::0;;;;;:::o;20559:216::-;20663:10;20634:4;20651:23;;;:11;:23;;;;;;;;-1:-1:-1;;;;;20651:32:0;;;;;;;;;;:41;;;20708:37;20634:4;;20651:32;;20708:37;;;;20686:6;160:25:1;;148:2;133:18;;14:177;20708:37:0;;;;;;;;-1:-1:-1;20763:4:0;20559:216;;;;;:::o;31563:458::-;15306:6;;-1:-1:-1;;;;;15306:6:0;9642:10;15306:22;15298:67;;;;-1:-1:-1;;;15298:67:0;;;;;;;:::i;:::-;31706:2:::1;31692:10;:16;;:31;;;;;31720:3;31712:4;:11;;31692:31;:69;;;;-1:-1:-1::0;31728:9:0;;;:32:::1;;;31749:11;;31741:4;:19;;31728:32;31692:91;;;;;31776:7;31765;:18;;31692:91;31684:128;;;::::0;-1:-1:-1;;;31684:128:0;;10300:2:1;31684:128:0::1;::::0;::::1;10282:21:1::0;10339:2;10319:18;;;10312:30;10378:26;10358:18;;;10351:54;10422:18;;31684:128:0::1;10098:348:1::0;31684:128:0::1;31823:11;:18:::0;;;31852:14:::1;:24:::0;;;31887:17:::1;:30:::0;;;31928:16:::1;:28:::0;;-1:-1:-1;;31928:28:0::1;::::0;::::1;;;::::0;;31972:41:::1;::::0;;9976:25:1;;;10032:2;10017:18;;10010:34;;;10060:18;;;10053:34;;;31972:41:0::1;::::0;9964:2:1;9949:18;31972:41:0::1;;;;;;;31563:458:::0;;;;:::o;30968:587::-;15306:6;;-1:-1:-1;;;;;15306:6:0;9642:10;15306:22;15298:67;;;;-1:-1:-1;;;15298:67:0;;;;;;;:::i;:::-;31119:3:::1;31112;31088:20;31077:8;;:31;;;;:::i;:::-;31076:39;;;;:::i;:::-;:46;;31068:76;;;::::0;-1:-1:-1;;;31068:76:0;;10653:2:1;31068:76:0::1;::::0;::::1;10635:21:1::0;10692:2;10672:18;;;10665:30;-1:-1:-1;;;10711:18:1;;;10704:47;10768:18;;31068:76:0::1;10451:341:1::0;31068:76:0::1;31187:3;31163:20;:27;;31155:74;;;::::0;-1:-1:-1;;;31155:74:0;;10999:2:1;31155:74:0::1;::::0;::::1;10981:21:1::0;11038:2;11018:18;;;11011:30;11077:34;11057:18;;;11050:62;-1:-1:-1;;;11128:18:1;;;11121:32;11170:19;;31155:74:0::1;10797:398:1::0;31155:74:0::1;31248:11;::::0;:16;;:55:::1;;;31292:11;;31268:20;:35;;31248:55;31240:110;;;::::0;-1:-1:-1;;;31240:110:0;;11402:2:1;31240:110:0::1;::::0;::::1;11384:21:1::0;11441:2;11421:18;;;11414:30;11480:34;11460:18;;;11453:62;-1:-1:-1;;;11531:18:1;;;11524:40;11581:19;;31240:110:0::1;11200:406:1::0;31240:110:0::1;31380:6;31369:7;:17;;31361:50;;;::::0;-1:-1:-1;;;31361:50:0;;11813:2:1;31361:50:0::1;::::0;::::1;11795:21:1::0;11852:2;11832:18;;;11825:30;-1:-1:-1;;;11871:18:1;;;11864:50;11931:18;;31361:50:0::1;11611:344:1::0;31361:50:0::1;31422:11;:34:::0;;;31467:10:::1;:20:::0;;;31503:44:::1;::::0;;12134:25:1;;;12190:2;12175:18;;12168:34;;;31503:44:0::1;::::0;12107:18:1;31503:44:0::1;;;;;;;;30968:587:::0;;:::o;28831:150::-;28911:4;28967:6;28935:29;28955:8;28935:19;:29::i;:::-;:38;;28831:150;-1:-1:-1;;;28831:150:0:o;19901:88::-;19956:7;16852:15;16789:1;16852:2;:15;:::i;:::-;16831:37;;:17;:37;:::i;:::-;19967:19;;19901:88;:::o;32228:309::-;15306:6;;-1:-1:-1;;;;;15306:6:0;9642:10;15306:22;15298:67;;;;-1:-1:-1;;;15298:67:0;;;;;;;:::i;:::-;32334:1:::1;32322:9;:13;:28;;;;;32349:1;32339:7;:11;32322:28;:65;;;;-1:-1:-1::0;32386:1:0::1;32375:7:::0;32355:16:::1;:9:::0;32367:4:::1;32355:16;:::i;:::-;32354:28;;;;:::i;:::-;:33;;32322:65;32314:104;;;::::0;-1:-1:-1;;;32314:104:0;;13798:2:1;32314:104:0::1;::::0;::::1;13780:21:1::0;13837:2;13817:18;;;13810:30;13876:28;13856:18;;;13849:56;13922:18;;32314:104:0::1;13596:350:1::0;32314:104:0::1;32473:7:::0;32460:9;16852:15:::1;16789:1;16852:2;:15;:::i;:::-;16831:37;::::0;:17:::1;:37;:::i;:::-;32445:24;;;;:::i;:::-;32444:36;;;;:::i;:::-;32429:12;:51:::0;;;32496:33:::1;::::0;160:25:1;;;32496:33:0::1;::::0;148:2:1;133:18;32496:33:0::1;14:177:1::0;34459:246:0;15306:6;;-1:-1:-1;;;;;15306:6:0;9642:10;15306:22;15298:67;;;;-1:-1:-1;;;15298:67:0;;;;;;;:::i;:::-;34556:15:::1;:25:::0;;;34592:26:::1;:41:::0;;;34649:48:::1;34621:12:::0;34668:13:::1;34574:7:::0;34678:3:::1;34668:13;:::i;:::-;:28;;;;:::i;:::-;34649:48;::::0;160:25:1;;;148:2;133:18;34649:48:0::1;14:177:1::0;22089:341:0;-1:-1:-1;;;;;22209:19:0;;22189:4;22209:19;;;:11;:19;;;;;;;;22229:10;22209:31;;;;;;;;-1:-1:-1;;22209:52:0;22206:157;;-1:-1:-1;;;;;22311:19:0;;;;;;:11;:19;;;;;;;;22331:10;22311:31;;;;;;;;:40;;22345:6;;22311:40;:::i;:::-;-1:-1:-1;;;;;22277:19:0;;;;;;:11;:19;;;;;;;;22297:10;22277:31;;;;;;;:74;22206:157;22382:40;22396:6;22404:9;22415:6;22382:13;:40::i;:::-;22375:47;;22089:341;;;;;;:::o;28515:144::-;20391:9;:18;;;;16625:42;28568:7;20391:18;;;;;28568:7;;28611:39;;;:::i;:::-;16852:15;16789:1;16852:2;:15;:::i;:::-;16831:37;;:17;:37;:::i;:::-;28595:56;;;;:::i;20783:213::-;20899:10;20873:4;20920:23;;;:11;:23;;;;;;;;-1:-1:-1;;;;;20920:32:0;;;;;;;;;;20873:4;;20890:76;;20911:7;;20920:45;;20955:10;;20920:45;:::i;:::-;20890:8;:76::i;:::-;-1:-1:-1;20984:4:0;20783:213;;;;:::o;30450:128::-;15306:6;;-1:-1:-1;;;;;15306:6:0;9642:10;15306:22;15298:67;;;;-1:-1:-1;;;15298:67:0;;;;;;;:::i;:::-;30509:18:::1;:25:::0;;-1:-1:-1;;;;30509:25:0::1;-1:-1:-1::0;;;30509:25:0::1;::::0;;30550:20:::1;::::0;::::1;::::0;30509:25;;30550:20:::1;30450:128::o:0;34713:233::-;15306:6;;-1:-1:-1;;;;;15306:6:0;9642:10;15306:22;15298:67;;;;-1:-1:-1;;;15298:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;34807:19:0;::::1;34799:47;;;;-1:-1:-1::0;;;34799:47:0::1;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;34857:21:0;::::1;;::::0;;;:14:::1;:21;::::0;;;;;;;;:32;;-1:-1:-1;;34857:32:0::1;::::0;::::1;;::::0;;::::1;::::0;;;34905:33;;1853:41:1;;;34905:33:0::1;::::0;1826:18:1;34905:33:0::1;;;;;;;;34713:233:::0;;:::o;21795:122::-;21850:4;21874:35;21882:7;-1:-1:-1;;21874:7:0;:35::i;24440:345::-;24515:7;24552:12;24538:10;;:26;24535:60;;;24591:1;24574:14;;:18;;;;:::i;:::-;24567:25;;;;24535:60;24609:7;24605:87;;;24625:12;:67;;24684:8;;24673;;:19;;;;:::i;:::-;24625:67;;;24667:3;24652:11;;24641:8;;:22;;;;:::i;:::-;24640:30;;;;:::i;24605:87::-;24710:12;:67;;24769:8;;24758;;:19;;;;:::i;:::-;24710:67;;;24752:3;24737:11;;24726:8;;:22;;;;:::i;:::-;24725:30;;;;:::i;32837:222::-;15306:6;;-1:-1:-1;;;;;15306:6:0;9642:10;15306:22;15298:67;;;;-1:-1:-1;;;15298:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;32928:20:0;::::1;32920:48;;;;-1:-1:-1::0;;;32920:48:0::1;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;32979:19:0;::::1;;::::0;;;:11:::1;:19;::::0;;;;;;;;:28;;-1:-1:-1;;32979:28:0::1;::::0;::::1;;::::0;;::::1;::::0;;;33023;;1853:41:1;;;33023:28:0::1;::::0;1826:18:1;33023:28:0::1;1713:187:1::0;34951:772:0;15306:6;;-1:-1:-1;;;;;15306:6:0;9642:10;15306:22;15298:67;;;;-1:-1:-1;;;15298:67:0;;;;;;;:::i;:::-;35070:35;;::::1;35062:73;;;::::0;-1:-1:-1;;;35062:73:0;;14627:2:1;35062:73:0::1;::::0;::::1;14609:21:1::0;14666:2;14646:18;;;14639:30;14705:27;14685:18;;;14678:55;14750:18;;35062:73:0::1;14425:349:1::0;35062:73:0::1;35166:11;::::0;;-1:-1:-1;;;;35188:19:0;::::1;::::0;;;-1:-1:-1;;;35166:11:0;::::1;;;-1:-1:-1::0;35304:336:0::1;35324:21:::0;;::::1;35304:336;;;35376:14;:29;35391:10;;35402:1;35391:13;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;35376:29:0::1;::::0;;::::1;::::0;::::1;::::0;;;;;;-1:-1:-1;35376:29:0;;::::1;;35375:30;:61:::0;::::1;;;-1:-1:-1::0;35434:1:0::1;35409:10:::0;;35420:1;35409:13;;::::1;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;35409:27:0::1;;;35375:61;35367:119;;;::::0;-1:-1:-1;;;35367:119:0;;15113:2:1;35367:119:0::1;::::0;::::1;15095:21:1::0;15152:2;15132:18;;;15125:30;15191:34;15171:18;;;15164:62;-1:-1:-1;;;15242:18:1;;;15235:43;15295:19;;35367:119:0::1;14911:409:1::0;35367:119:0::1;35501:72;35515:10;35527;;35538:1;35527:13;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;35556:15;16789:1;35556:2;:15;:::i;:::-;35542:7;;35550:1;35542:10;;;;;;;:::i;:::-;;;;;;;:30;;;;:::i;:::-;35501:13;:72::i;:::-;;35613:15;35588:7;:22;35596:10;;35607:1;35596:13;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;35588:22:0::1;::::0;;::::1;::::0;::::1;::::0;;;;;;-1:-1:-1;35588:22:0;:40;35347:3;::::1;::::0;::::1;:::i;:::-;;;;35304:336;;;-1:-1:-1::0;35650:11:0::1;:26:::0;;-1:-1:-1;;;;35650:26:0::1;-1:-1:-1::0;;;35650:26:0;::::1;;;;::::0;;35692:23:::1;::::0;35704:10:::1;::::0;35692:23:::1;::::0;-1:-1:-1;;35692:23:0::1;35051:672;34951:772:::0;;;;:::o;29501:285::-;15306:6;;-1:-1:-1;;;;;15306:6:0;9642:10;15306:22;15298:67;;;;-1:-1:-1;;;15298:67:0;;;;;;;:::i;:::-;29598:5:::1;29575:11;:20;29587:7;15132::::0;15159:6;-1:-1:-1;;;;;15159:6:0;;15094:79;29587:7:::1;-1:-1:-1::0;;;;;29575:20:0::1;::::0;;::::1;::::0;::::1;::::0;;;;;;-1:-1:-1;29575:20:0;;;:28;;;::::1;;-1:-1:-1::0;;29575:28:0;;::::1;::::0;;;::::1;::::0;;;29614:15:::1;-1:-1:-1::0;29630:7:0::1;15132::::0;15159:6;-1:-1:-1;;;;;15159:6:0;;15094:79;29630:7:::1;-1:-1:-1::0;;;;;29614:24:0::1;::::0;;::::1;::::0;::::1;::::0;;;;;;-1:-1:-1;29614:24:0;;;:32;;;::::1;;-1:-1:-1::0;;29614:32:0;;::::1;::::0;;;::::1;::::0;;;29657:18:::1;-1:-1:-1::0;29676:7:0::1;15132::::0;15159:6;-1:-1:-1;;;;;15159:6:0;;15094:79;29676:7:::1;-1:-1:-1::0;;;;;29657:27:0::1;::::0;;::::1;::::0;::::1;::::0;;;;;;-1:-1:-1;29657:27:0;;;:35;;;::::1;;-1:-1:-1::0;;29657:35:0;;::::1;::::0;;;::::1;::::0;;;29703:11:::1;-1:-1:-1::0;29715:7:0::1;15132::::0;15159:6;-1:-1:-1;;;;;15159:6:0;;15094:79;29715:7:::1;-1:-1:-1::0;;;;;29703:20:0::1;::::0;;::::1;::::0;;::::1;::::0;;;;;;;;-1:-1:-1;29703:20:0;;;18278:42:::1;29703:35:::0;;;;;;;:39;29753:25:::1;:23;:25::i;:::-;29501:285::o:0;21004:417::-;21155:10;21099:4;21143:23;;;:11;:23;;;;;;;;-1:-1:-1;;;;;21143:32:0;;;;;;;;;;21194:35;;;;21186:91;;;;-1:-1:-1;;;21186:91:0;;15667:2:1;21186:91:0;;;15649:21:1;15706:2;15686:18;;;15679:30;15745:34;15725:18;;;15718:62;-1:-1:-1;;;15796:18:1;;;15789:41;15847:19;;21186:91:0;15465:407:1;21186:91:0;21313:65;21322:10;21334:7;21362:15;21343:16;:34;21313:8;:65::i;:::-;-1:-1:-1;21409:4:0;;21004:417;-1:-1:-1;;;21004:417:0:o;21925:156::-;22005:4;22029:44;22043:10;22055:9;22066:6;22029:13;:44::i;32549:280::-;15306:6;;-1:-1:-1;;;;;15306:6:0;9642:10;15306:22;15298:67;;;;-1:-1:-1;;;15298:67:0;;;;;;;:::i;:::-;32657:1:::1;32647:7;:11;:31;;;;;32673:5;32662:7;:16;;32647:31;32639:74;;;::::0;-1:-1:-1;;;32639:74:0;;16079:2:1;32639:74:0::1;::::0;::::1;16061:21:1::0;16118:2;16098:18;;;16091:30;16157:32;16137:18;;;16130:60;16207:18;;32639:74:0::1;15877:354:1::0;32639:74:0::1;32770:7:::0;32757:9;16852:15:::1;16789:1;16852:2;:15;:::i;:::-;16831:37;::::0;:17:::1;:37;:::i;:::-;32742:24;;;;:::i;:::-;32741:36;;;;:::i;:::-;32724:14;:53:::0;;;32793:28:::1;::::0;160:25:1;;;32793:28:0::1;::::0;148:2:1;133:18;32793:28:0::1;14:177:1::0;29794:242:0;15306:6;;-1:-1:-1;;;;;15306:6:0;9642:10;15306:22;15298:67;;;;-1:-1:-1;;;15298:67:0;;;;;;;:::i;:::-;29873:8:::1;29869:78;;;29905:18;::::0;-1:-1:-1;;;29905:18:0;::::1;;;29904:19;29896:51;;;::::0;-1:-1:-1;;;29896:51:0;;16438:2:1;29896:51:0::1;::::0;::::1;16420:21:1::0;16477:2;16457:18;;;16450:30;-1:-1:-1;;;16496:18:1;;;16489:49;16555:18;;29896:51:0::1;16236:343:1::0;29896:51:0::1;29958:17;:28:::0;;;::::1;;-1:-1:-1::0;;;29958:28:0::1;-1:-1:-1::0;;;;29958:28:0;;::::1;;::::0;;30002:26:::1;::::0;::::1;::::0;::::1;::::0;29978:8;1878:14:1;1871:22;1853:41;;1841:2;1826:18;;1713:187;30002:26:0::1;;;;;;;;29794:242:::0;:::o;34021:430::-;15306:6;;-1:-1:-1;;;;;15306:6:0;9642:10;15306:22;15298:67;;;;-1:-1:-1;;;15298:67:0;;;;;;;:::i;:::-;34165:1:::1;34150:12;:16;:39;;;;;34188:1;34170:15;:19;34150:39;34142:87;;;::::0;-1:-1:-1;;;34142:87:0;;16786:2:1;34142:87:0::1;::::0;::::1;16768:21:1::0;16825:2;16805:18;;;16798:30;16864:34;16844:18;;;16837:62;-1:-1:-1;;;16915:18:1;;;16908:33;16958:19;;34142:87:0::1;16584:399:1::0;34142:87:0::1;34240:11;:22:::0;;-1:-1:-1;;;;34240:22:0::1;-1:-1:-1::0;;;34240:22:0;::::1;;;;::::0;;34302:15;16852::::1;16789:1;16852:2;:15;:::i;:::-;16831:37;::::0;:17:::1;:37;:::i;:::-;34287:30;;;;:::i;:::-;34273:11;:44:::0;34359:12;16852:15:::1;16789:1;16852:2;:15;:::i;:::-;16831:37;::::0;:17:::1;:37;:::i;:::-;34344:27;;;;:::i;:::-;34328:13;:43:::0;;;34403:11:::1;::::0;34431::::1;::::0;34387:56:::1;::::0;;17184:25:1;;;17240:2;17225:18;;17218:34;;;;34431:11:0::1;-1:-1:-1::0;;;34431:11:0;;::::1;;17295:14:1::0;17288:22;17268:18;;;17261:50;34387:56:0;;::::1;::::0;;;;17172:2:1;34387:56:0;;::::1;34021:430:::0;;;:::o;28667:156::-;28735:7;28793:22;:20;:22::i;:::-;-1:-1:-1;;;;;28784:4:0;20391:18;20373:7;20391:18;;;:9;:18;;;;;;28763:26;;:8;:26;:::i;:::-;28762:53;;;;:::i;30048:390::-;15306:6;;-1:-1:-1;;;;;15306:6:0;9642:10;15306:22;15298:67;;;;-1:-1:-1;;;15298:67:0;;;;;;;:::i;:::-;30161:9:::1;::::0;-1:-1:-1;;;;;30138:33:0;;::::1;30161:9:::0;::::1;30138:33;30134:166;;30196:18;::::0;-1:-1:-1;;;30196:18:0;::::1;;;30195:19;30187:51;;;::::0;-1:-1:-1;;;30187:51:0;;16438:2:1;30187:51:0::1;::::0;::::1;16420:21:1::0;16477:2;16457:18;;;16450:30;-1:-1:-1;;;16496:18:1;;;16489:49;16555:18;;30187:51:0::1;16236:343:1::0;30187:51:0::1;30253:9;:35:::0;;-1:-1:-1;;;;;;30253:35:0::1;-1:-1:-1::0;;;;;30253:35:0;::::1;;::::0;;30134:166:::1;30314:5;30310:68;;;30334:9;::::0;:44:::1;::::0;-1:-1:-1;;;30334:44:0;;30366:4:::1;30334:44;::::0;::::1;17534:34:1::0;-1:-1:-1;;;;;30373:4:0::1;17604:15:1::0;;17584:18;;;17577:43;30334:9:0;;::::1;::::0;:23:::1;::::0;17469:18:1;;30334:44:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;30310:68;30404:26;::::0;-1:-1:-1;;;;;30404:26:0;::::1;::::0;::::1;::::0;;;::::1;30048:390:::0;;:::o;30590:370::-;15306:6;;-1:-1:-1;;;;;15306:6:0;9642:10;15306:22;15298:67;;;;-1:-1:-1;;;15298:67:0;;;;;;;:::i;:::-;30690:4:::1;-1:-1:-1::0;;;;;30677:17:0::1;:9;-1:-1:-1::0;;;;;30677:17:0::1;;;:47;;;;-1:-1:-1::0;;;;;;30698:26:0;::::1;18278:42;30698:26;;30677:47;30669:105;;;::::0;-1:-1:-1;;;30669:105:0;;17833:2:1;30669:105:0::1;::::0;::::1;17815:21:1::0;17872:2;17852:18;;;17845:30;17911:34;17891:18;;;17884:62;-1:-1:-1;;;17962:18:1;;;17955:43;18015:19;;30669:105:0::1;17631:409:1::0;30669:105:0::1;-1:-1:-1::0;;;;;30785:22:0;::::1;;::::0;;;:11:::1;:22;::::0;;;;;;;:29;;30810:4:::1;-1:-1:-1::0;;30785:29:0;;::::1;::::0;::::1;::::0;;;30825:18:::1;:29:::0;;;;;:36;;;::::1;::::0;::::1;::::0;;30872:15:::1;:26:::0;;;;;;:33;;;;::::1;;::::0;;;30921:31;::::1;::::0;30785:22;30921:31:::1;30590:370:::0;:::o;28989:504::-;15306:6;;-1:-1:-1;;;;;15306:6:0;9642:10;15306:22;15298:67;;;;-1:-1:-1;;;15298:67:0;;;;;;;:::i;:::-;29102:5:::1;29079:11;:20;29091:7;15132::::0;15159:6;-1:-1:-1;;;;;15159:6:0;;15094:79;29091:7:::1;-1:-1:-1::0;;;;;29079:20:0::1;::::0;;::::1;::::0;::::1;::::0;;;;;;-1:-1:-1;29079:20:0;;;:28;;;::::1;;-1:-1:-1::0;;29079:28:0;;::::1;::::0;;;::::1;::::0;;;29118:15:::1;-1:-1:-1::0;29134:7:0::1;15132::::0;15159:6;-1:-1:-1;;;;;15159:6:0;;15094:79;29134:7:::1;-1:-1:-1::0;;;;;29118:24:0::1;::::0;;::::1;::::0;::::1;::::0;;;;;;-1:-1:-1;29118:24:0;;;:32;;;::::1;;-1:-1:-1::0;;29118:32:0;;::::1;::::0;;;::::1;::::0;;;29161:18:::1;-1:-1:-1::0;29180:7:0::1;15132::::0;15159:6;-1:-1:-1;;;;;15159:6:0;;15094:79;29180:7:::1;-1:-1:-1::0;;;;;29161:27:0::1;::::0;;::::1;::::0;::::1;::::0;;;;;;-1:-1:-1;29161:27:0;;;:35;;;::::1;;-1:-1:-1::0;;29161:35:0;;::::1;::::0;;;::::1;::::0;;;29207:11:::1;-1:-1:-1::0;29219:7:0::1;15132::::0;15159:6;-1:-1:-1;;;;;15159:6:0;;15094:79;29219:7:::1;-1:-1:-1::0;;;;;29207:20:0::1;::::0;;::::1;::::0;;::::1;::::0;;;;;;;;-1:-1:-1;29207:20:0;;;18278:42:::1;29207:35:::0;;;;;;;:39;29257:33:::1;29281:8:::0;29257:23:::1;:33::i;:::-;-1:-1:-1::0;;;;;29301:21:0::1;;::::0;;;:11:::1;:21;::::0;;;;;;;:28;;29325:4:::1;-1:-1:-1::0;;29301:28:0;;::::1;::::0;::::1;::::0;;;29340:15:::1;:25:::0;;;;;:32;;;::::1;::::0;::::1;::::0;;29383:18:::1;:28:::0;;;;;:35;;;;::::1;::::0;;::::1;::::0;;29429:11:::1;:21:::0;;;;;18278:42:::1;29429:36:::0;;;;;;;-1:-1:-1;;29429:56:0;;28989:504::o;33067:242::-;15306:6;;-1:-1:-1;;;;;15306:6:0;9642:10;15306:22;15298:67;;;;-1:-1:-1;;;15298:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;33162:20:0;::::1;33154:48;;;;-1:-1:-1::0;;;33154:48:0::1;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;33213:23:0;::::1;;::::0;;;:15:::1;:23;::::0;;;;;;;;:32;;-1:-1:-1;;33213:32:0::1;::::0;::::1;;::::0;;::::1;::::0;;;33261:40;;1853:41:1;;;33261:40:0::1;::::0;1826:18:1;33261:40:0::1;1713:187:1::0;22438:1184:0;-1:-1:-1;;;;;22555:17:0;;22530:4;22555:17;;;:9;:17;;;;;;:27;-1:-1:-1;22555:27:0;22547:60;;;;-1:-1:-1;;;22547:60:0;;18247:2:1;22547:60:0;;;18229:21:1;18286:2;18266:18;;;18259:30;-1:-1:-1;;;18305:18:1;;;18298:50;18365:18;;22547:60:0;18045:344:1;22547:60:0;22635:1;22626:6;:10;22618:52;;;;-1:-1:-1;;;22618:52:0;;18596:2:1;22618:52:0;;;18578:21:1;18635:2;18615:18;;;18608:30;18674:31;18654:18;;;18647:59;18723:18;;22618:52:0;18394:353:1;22618:52:0;22686:6;;;;22683:63;;;22702:41;22717:6;22725:9;22736:6;22702:14;:41::i;:::-;22695:48;;;;22683:63;22758:28;22771:6;22779;22758:12;:28::i;:::-;-1:-1:-1;;;;;22812:25:0;;;;;;:14;:25;;;;;;;;22811:26;:47;;;;-1:-1:-1;;;;;;22841:17:0;;16625:42;22841:17;;22811:47;22807:148;;;-1:-1:-1;;;;;22880:26:0;;;;;;:15;:26;;;;;;;;22875:68;;22908:35;22925:9;22936:6;22908:16;:35::i;:::-;28484:10;;22967:118;;-1:-1:-1;;;;;22992:26:0;;;;;;:18;:26;;;;;;;;;:59;;-1:-1:-1;;;;;;23022:29:0;;;;;;:18;:29;;;;;;;;22992:59;22984:98;;;;-1:-1:-1;;;22984:98:0;;18954:2:1;22984:98:0;;;18936:21:1;18993:2;18973:18;;;18966:30;19032:28;19012:18;;;19005:56;19078:18;;22984:98:0;18752:350:1;22984:98:0;-1:-1:-1;;;;;23097:17:0;;;;;;:9;:17;;;;;:27;;23118:6;;23097:17;:27;;23118:6;;23097:27;:::i;:::-;;;;-1:-1:-1;;;;;;;24405:19:0;;23137:22;24405:19;;;:11;:19;;;;;;;;24404:20;23162:49;;;;-1:-1:-1;;;;;;24405:19:0;;24380:4;24405:19;;;:11;:19;;;;;;;;24404:20;23187:24;23162:95;;23251:6;23162:95;;;23214:34;23222:6;23230:9;23241:6;23214:7;:34::i;:::-;23137:120;;23281:25;23296:9;23281:14;:25::i;:::-;23278:66;;;23313:10;;23309:32;;23325:16;23334:6;23325:8;:16::i;:::-;-1:-1:-1;;;;;23364:20:0;;;;;;:9;:20;;;;;:38;;23388:14;;23364:20;:38;;23388:14;;23364:38;:::i;:::-;;;;-1:-1:-1;;28484:10:0;;:15;;23430:31;;;;-1:-1:-1;23444:17:0;;-1:-1:-1;;;23444:17:0;;;;23430:31;23427:104;;;23476:9;;:55;;-1:-1:-1;;;23476:55:0;;-1:-1:-1;;;;;19365:15:1;;;23476:55:0;;;19347:34:1;19417:15;;;19397:18;;;19390:43;19449:18;;;19442:34;;;23476:9:0;;;;:28;;19282:18:1;;23476:55:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;23427:104;23566:9;-1:-1:-1;;;;;23549:43:0;23558:6;-1:-1:-1;;;;;23549:43:0;;23577:14;23549:43;;;;160:25:1;;148:2;133:18;;14:177;23549:43:0;;;;;;;;-1:-1:-1;23610:4:0;;22438:1184;-1:-1:-1;;;;22438:1184:0:o;21429:358::-;-1:-1:-1;;;;;21531:19:0;;21523:74;;;;-1:-1:-1;;;21523:74:0;;19939:2:1;21523:74:0;;;19921:21:1;19978:2;19958:18;;;19951:30;20017:34;19997:18;;;19990:62;-1:-1:-1;;;20068:18:1;;;20061:40;20118:19;;21523:74:0;19737:406:1;21523:74:0;-1:-1:-1;;;;;21616:21:0;;21608:74;;;;-1:-1:-1;;;21608:74:0;;20350:2:1;21608:74:0;;;20332:21:1;20389:2;20369:18;;;20362:30;20428:34;20408:18;;;20401:62;-1:-1:-1;;;20479:18:1;;;20472:38;20527:19;;21608:74:0;20148:404:1;21608:74:0;-1:-1:-1;;;;;21695:18:0;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;:36;;;21747:32;;160:25:1;;;21747:32:0;;133:18:1;21747:32:0;;;;;;;21429:358;;;:::o;15735:148::-;15306:6;;-1:-1:-1;;;;;15306:6:0;9642:10;15306:22;15298:67;;;;-1:-1:-1;;;15298:67:0;;;;;;;:::i;:::-;15842:1:::1;15826:6:::0;;15805:40:::1;::::0;-1:-1:-1;;;;;15826:6:0;;::::1;::::0;15805:40:::1;::::0;15842:1;;15805:40:::1;15873:1;15856:19:::0;;-1:-1:-1;;;;;;15856:19:0::1;::::0;;15735:148::o;16038:250::-;15306:6;;-1:-1:-1;;;;;15306:6:0;9642:10;15306:22;15298:67;;;;-1:-1:-1;;;15298:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;16127:22:0;::::1;16119:79;;;::::0;-1:-1:-1;;;16119:79:0;;20759:2:1;16119:79:0::1;::::0;::::1;20741:21:1::0;20798:2;20778:18;;;20771:30;20837:34;20817:18;;;20810:62;-1:-1:-1;;;20888:18:1;;;20881:42;20940:19;;16119:79:0::1;20557:408:1::0;16119:79:0::1;16235:6;::::0;;16214:38:::1;::::0;-1:-1:-1;;;;;16214:38:0;;::::1;::::0;16235:6;::::1;::::0;16214:38:::1;::::0;::::1;16263:6;:17:::0;;-1:-1:-1;;;;;;16263:17:0::1;-1:-1:-1::0;;;;;16263:17:0;;;::::1;::::0;;;::::1;::::0;;16038:250::o;23630:259::-;-1:-1:-1;;;;;23740:17:0;;23723:4;23740:17;;;:9;:17;;;;;:27;;23761:6;;23740:17;23723:4;;23740:27;;23761:6;;23740:27;:::i;:::-;;;;-1:-1:-1;;;;;;;23778:20:0;;;;;;:9;:20;;;;;:30;;23802:6;;23778:20;:30;;23802:6;;23778:30;:::i;:::-;;;;;;;;23841:9;-1:-1:-1;;;;;23824:35:0;23833:6;-1:-1:-1;;;;;23824:35:0;;23852:6;23824:35;;;;160:25:1;;148:2;133:18;;14:177;23824:35:0;;;;;;;;-1:-1:-1;23877:4:0;23630:259;;;;;:::o;24144:166::-;24241:12;;24231:6;:22;;:49;;;-1:-1:-1;;;;;;24257:23:0;;;;;;:15;:23;;;;;;;;24231:49;24223:79;;;;-1:-1:-1;;;24223:79:0;;21172:2:1;24223:79:0;;;21154:21:1;21211:2;21191:18;;;21184:30;-1:-1:-1;;;21230:18:1;;;21223:47;21287:18;;24223:79:0;20970:341:1;24223:79:0;24144:166;;:::o;23901:235::-;24009:14;;-1:-1:-1;;;;;24042:20:0;;23987:19;24042:20;;;:9;:20;;;;;;24009:14;;24042:29;;24065:6;;24042:29;:::i;:::-;:44;;24034:94;;;;-1:-1:-1;;;24034:94:0;;21518:2:1;24034:94:0;;;21500:21:1;21557:2;21537:18;;;21530:30;21596:34;21576:18;;;21569:62;-1:-1:-1;;;21647:18:1;;;21640:35;21692:19;;24034:94:0;21316:401:1;24034:94:0;23976:160;23901:235;;:::o;24793:1363::-;-1:-1:-1;;;;;24954:22:0;;24879:7;24954:22;;;:14;:22;;;;;;24879:7;;;;24954:22;;24953:23;:73;;;;-1:-1:-1;24998:10:0;;-1:-1:-1;;;;;24980:15:0;;;;;;:7;:15;;;;;;25011;;24980:28;;;:::i;:::-;:46;24953:73;-1:-1:-1;;;;;25040:25:0;;;;;;:14;:25;;;;;;24931:95;;-1:-1:-1;25040:25:0;;:44;;;;;25083:1;25069:11;;:15;25040:44;25037:701;;;25102:16;25120;25150:4;-1:-1:-1;;;;;25141:26:0;;:28;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;25227:16:0;;25101:68;;-1:-1:-1;25101:68:0;-1:-1:-1;25184:22:0;;25269:6;;25227:16;;:38;;25257:8;25227:38;;;25246:8;25227:38;-1:-1:-1;;;;;25226:49:0;;;;;:::i;:::-;25209:13;:6;25218:4;25209:13;:::i;:::-;:67;;;;:::i;:::-;25346:14;;-1:-1:-1;;;;;25327:16:0;;;;;;:8;:16;;;;;;25184:92;;-1:-1:-1;25327:33:0;;;:::i;:::-;25309:15;:51;25305:171;;;-1:-1:-1;;;;;25381:16:0;;;;;;:8;:16;;;;;;;;25400:15;25381:34;;25434:14;:22;;;;;:26;25305:171;-1:-1:-1;;;;;25504:22:0;;;;;;:14;:22;;;;;:40;;25530:14;;25504:22;:40;;25530:14;;25504:40;:::i;:::-;;;;-1:-1:-1;;25603:17:0;;-1:-1:-1;;;;;25577:22:0;;;;;;:14;:22;;;;;;:43;25573:154;;25697:14;;25690:3;25675:11;;25664:8;;25655:6;:17;;;;:::i;:::-;:31;;;;:::i;:::-;25654:39;;;;:::i;:::-;25653:58;;;;:::i;:::-;25641:70;;25573:154;25086:652;;;25037:701;25754:14;25750:127;;25863:14;;-1:-1:-1;;;;;25817:25:0;;;;;;:14;:25;;;;;;25805:54;;25817:25;;25844:14;25805:11;:54::i;:::-;25796:63;;:6;:63;:::i;:::-;25795:82;;;;:::i;:::-;25783:94;;25750:127;-1:-1:-1;;;;;25902:22:0;;;;;;:14;:22;;;;;;;;:49;;;;-1:-1:-1;;;;;;25928:18:0;;;;;;:7;:18;;;;;;:23;25902:49;25898:104;;;-1:-1:-1;;;;;25966:18:0;;;;;;:7;:18;;;;;25987:15;25966:36;;25898:104;26033:4;26015:24;;;;:9;:24;;;;;:37;;26043:9;;26015:24;:37;;26043:9;;26015:37;:::i;:::-;;;;-1:-1:-1;;26068:42:0;;160:25:1;;;26093:4:0;;-1:-1:-1;;;;;26068:42:0;;;;;148:2:1;133:18;26068:42:0;;;;;;;26130:18;26139:9;26130:6;:18;:::i;:::-;26123:25;24793:1363;-1:-1:-1;;;;;;24793:1363:0:o;26164:321::-;26270:10;26230:4;26255:26;;;:14;:26;;;;;;;;26254:27;:64;;;;-1:-1:-1;26307:10:0;26295:23;;;;:11;:23;;;;;;;;26294:24;26254:64;:84;;;;-1:-1:-1;26332:6:0;;;;26331:7;26254:84;:108;;;;-1:-1:-1;26351:11:0;;-1:-1:-1;;;26351:11:0;;;;26254:108;:146;;;;-1:-1:-1;;;;;;26375:25:0;;;;;;:14;:25;;;;;;;;26254:146;:198;;;;-1:-1:-1;26441:11:0;;26431:4;26413:24;;;;:9;:24;;;;;;:39;;26254:198;:223;;;;;26476:1;26465:8;;:12;26247:230;26164:321;-1:-1:-1;;26164:321:0:o;26493:1916::-;18865:6;:13;;-1:-1:-1;;18865:13:0;18874:4;18865:13;;;26588::::1;::::0;18865:6;;26579:22;::::1;:47;;26613:13;;26579:47;;;26604:6;26579:47;26659:4;26641:24;::::0;;;:9:::1;:24;::::0;;;;;26556:70;;-1:-1:-1;26641:39:0;-1:-1:-1;26637:84:0::1;;;-1:-1:-1::0;26715:4:0::1;26697:24;::::0;;;:9:::1;:24;::::0;;;;;26637:84:::1;26732:27;26762:60;26778:15;;26795:26;;26762:15;:60::i;:::-;:79;;26829:12;;26762:79;;;26825:1;26762:79;26732:109;;26852:23;26930:1;26918:8;;26895:19;26880:12;:34;;;;:::i;:::-;26879:47;;;;:::i;:::-;26878:53;;;;:::i;:::-;26852:79:::0;-1:-1:-1;26942:31:0::1;26852:79:::0;26942:31;::::1;:::i;:::-;27010:16;::::0;;27024:1:::1;27010:16:::0;;;;;::::1;::::0;;26942:31;;-1:-1:-1;26986:21:0::1;::::0;27010:16;;::::1;::::0;::::1;::::0;;::::1;::::0;::::1;;::::0;-1:-1:-1;27010:16:0::1;26986:40;;27055:4;27037;27042:1;27037:7;;;;;;;;:::i;:::-;;;;;;:23;-1:-1:-1::0;;;;;27037:23:0::1;;;-1:-1:-1::0;;;;;27037:23:0::1;;;::::0;::::1;27081:6;-1:-1:-1::0;;;;;27081:11:0::1;;:13;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;27071:4;27076:1;27071:7;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;27071:23:0;;::::1;:7;::::0;;::::1;::::0;;;;;:23;27177:188:::1;::::0;-1:-1:-1;;;27177:188:0;;:6:::1;:57:::0;;::::1;::::0;::::1;::::0;:188:::1;::::0;27249:12;;27276:1:::1;::::0;27292:4;;27319::::1;::::0;27339:15:::1;::::0;27177:188:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;-1:-1:-1::0;27404:21:0::1;::::0;-1:-1:-1;27378:23:0::1;::::0;-1:-1:-1;27469:23:0::1;::::0;-1:-1:-1;27491:1:0::1;27469:19:::0;:23:::1;:::i;:::-;27458:8;;:34;;;;:::i;:::-;27436:56:::0;-1:-1:-1;27505:23:0::1;27587:1;27436:56:::0;27532:37:::1;27550:19:::0;27532:15;:37:::1;:::i;:::-;27531:53;;;;:::i;:::-;:57;;;;:::i;:::-;27505:83;;27599:23;27660:11;27644:12;;27626:15;:30;;;;:::i;:::-;27625:46;;;;:::i;:::-;27599:72:::0;-1:-1:-1;27682:17:0::1;27721:33;27599:72:::0;27721:15;:33:::1;:::i;:::-;27702:53;::::0;:15;:53:::1;:::i;:::-;27682:73:::0;-1:-1:-1;27771:19:0;;27768:442:::1;;27896:237;::::0;-1:-1:-1;;;27896:237:0;;27969:4:::1;27896:237;::::0;::::1;24084:34:1::0;24134:18;;;24127:34;;;-1:-1:-1;24177:18:1;;;24170:34;;;24220:18;;;24213:34;-1:-1:-1;;;;;28067:17:0::1;24284:15:1::0;;24263:19;;;24256:44;28103:15:0::1;24316:19:1::0;;;24309:35;27896:6:0::1;:22;::::0;::::1;::::0;27926:15;;24018:19:1;;27896:237:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;28153:45:0::1;::::0;;12134:25:1;;;12190:2;12175:18;;12168:34;;;28153:45:0::1;::::0;-1:-1:-1;12107:18:1;28153:45:0::1;;;;;;;27768:442;28234:19:::0;;28230:81:::1;;28268:43;::::0;-1:-1:-1;;;;;28268:17:0::1;:26;::::0;:43;::::1;;;::::0;28295:15;;28268:43:::1;::::0;;;28295:15;28268:26;:43;::::1;;;;;;;;;;;;;::::0;::::1;;;;;;28230:81;28340:13:::0;;28336:63:::1;;28368:31;::::0;-1:-1:-1;;;;;28368:11:0::1;:20;::::0;:31;::::1;;;::::0;28389:9;;28368:31:::1;::::0;;;28389:9;28368:20;:31;::::1;;;;;;;;;;;;;::::0;::::1;;;;;;28336:63;-1:-1:-1::0;;18883:6:0;:14;;-1:-1:-1;;18883:14:0;;;-1:-1:-1;;;;;;;;26493:1916:0:o;196:454:1:-;291:6;299;307;315;323;376:3;364:9;355:7;351:23;347:33;344:53;;;393:1;390;383:12;344:53;-1:-1:-1;;416:23:1;;;486:2;471:18;;458:32;;-1:-1:-1;537:2:1;522:18;;509:32;;588:2;573:18;;560:32;;-1:-1:-1;639:3:1;624:19;611:33;;-1:-1:-1;196:454:1;-1:-1:-1;196:454:1:o;655:597::-;767:4;796:2;825;814:9;807:21;857:6;851:13;900:6;895:2;884:9;880:18;873:34;925:1;935:140;949:6;946:1;943:13;935:140;;;1044:14;;;1040:23;;1034:30;1010:17;;;1029:2;1006:26;999:66;964:10;;935:140;;;1093:6;1090:1;1087:13;1084:91;;;1163:1;1158:2;1149:6;1138:9;1134:22;1130:31;1123:42;1084:91;-1:-1:-1;1236:2:1;1215:15;-1:-1:-1;;1211:29:1;1196:45;;;;1243:2;1192:54;;655:597;-1:-1:-1;;;655:597:1:o;1257:131::-;-1:-1:-1;;;;;1332:31:1;;1322:42;;1312:70;;1378:1;1375;1368:12;1312:70;1257:131;:::o;1393:315::-;1461:6;1469;1522:2;1510:9;1501:7;1497:23;1493:32;1490:52;;;1538:1;1535;1528:12;1490:52;1577:9;1564:23;1596:31;1621:5;1596:31;:::i;:::-;1646:5;1698:2;1683:18;;;;1670:32;;-1:-1:-1;;;1393:315:1:o;1905:118::-;1991:5;1984:13;1977:21;1970:5;1967:32;1957:60;;2013:1;2010;2003:12;2028:446;2111:6;2119;2127;2135;2188:3;2176:9;2167:7;2163:23;2159:33;2156:53;;;2205:1;2202;2195:12;2156:53;2241:9;2228:23;2218:33;;2298:2;2287:9;2283:18;2270:32;2260:42;;2349:2;2338:9;2334:18;2321:32;2311:42;;2403:2;2392:9;2388:18;2375:32;2416:28;2438:5;2416:28;:::i;:::-;2028:446;;;;-1:-1:-1;2028:446:1;;-1:-1:-1;;2028:446:1:o;2479:248::-;2547:6;2555;2608:2;2596:9;2587:7;2583:23;2579:32;2576:52;;;2624:1;2621;2614:12;2576:52;-1:-1:-1;;2647:23:1;;;2717:2;2702:18;;;2689:32;;-1:-1:-1;2479:248:1:o;2732:456::-;2809:6;2817;2825;2878:2;2866:9;2857:7;2853:23;2849:32;2846:52;;;2894:1;2891;2884:12;2846:52;2933:9;2920:23;2952:31;2977:5;2952:31;:::i;:::-;3002:5;-1:-1:-1;3059:2:1;3044:18;;3031:32;3072:33;3031:32;3072:33;:::i;:::-;2732:456;;3124:7;;-1:-1:-1;;;3178:2:1;3163:18;;;;3150:32;;2732:456::o;3590:382::-;3655:6;3663;3716:2;3704:9;3695:7;3691:23;3687:32;3684:52;;;3732:1;3729;3722:12;3684:52;3771:9;3758:23;3790:31;3815:5;3790:31;:::i;:::-;3840:5;-1:-1:-1;3897:2:1;3882:18;;3869:32;3910:30;3869:32;3910:30;:::i;:::-;3959:7;3949:17;;;3590:382;;;;;:::o;3977:247::-;4036:6;4089:2;4077:9;4068:7;4064:23;4060:32;4057:52;;;4105:1;4102;4095:12;4057:52;4144:9;4131:23;4163:31;4188:5;4163:31;:::i;4229:376::-;4291:6;4299;4352:2;4340:9;4331:7;4327:23;4323:32;4320:52;;;4368:1;4365;4358:12;4320:52;4407:9;4394:23;4426:28;4448:5;4426:28;:::i;4610:367::-;4673:8;4683:6;4737:3;4730:4;4722:6;4718:17;4714:27;4704:55;;4755:1;4752;4745:12;4704:55;-1:-1:-1;4778:20:1;;4821:18;4810:30;;4807:50;;;4853:1;4850;4843:12;4807:50;4890:4;4882:6;4878:17;4866:29;;4950:3;4943:4;4933:6;4930:1;4926:14;4918:6;4914:27;4910:38;4907:47;4904:67;;;4967:1;4964;4957:12;4904:67;4610:367;;;;;:::o;4982:773::-;5104:6;5112;5120;5128;5181:2;5169:9;5160:7;5156:23;5152:32;5149:52;;;5197:1;5194;5187:12;5149:52;5237:9;5224:23;5266:18;5307:2;5299:6;5296:14;5293:34;;;5323:1;5320;5313:12;5293:34;5362:70;5424:7;5415:6;5404:9;5400:22;5362:70;:::i;:::-;5451:8;;-1:-1:-1;5336:96:1;-1:-1:-1;5539:2:1;5524:18;;5511:32;;-1:-1:-1;5555:16:1;;;5552:36;;;5584:1;5581;5574:12;5552:36;;5623:72;5687:7;5676:8;5665:9;5661:24;5623:72;:::i;:::-;4982:773;;;;-1:-1:-1;5714:8:1;-1:-1:-1;;;;4982:773:1:o;6210:241::-;6266:6;6319:2;6307:9;6298:7;6294:23;6290:32;6287:52;;;6335:1;6332;6325:12;6287:52;6374:9;6361:23;6393:28;6415:5;6393:28;:::i;6456:377::-;6530:6;6538;6546;6599:2;6587:9;6578:7;6574:23;6570:32;6567:52;;;6615:1;6612;6605:12;6567:52;6654:9;6641:23;6673:28;6695:5;6673:28;:::i;:::-;6720:5;6772:2;6757:18;;6744:32;;-1:-1:-1;6823:2:1;6808:18;;;6795:32;;6456:377;-1:-1:-1;;;6456:377:1:o;6838:180::-;6897:6;6950:2;6938:9;6929:7;6925:23;6921:32;6918:52;;;6966:1;6963;6956:12;6918:52;-1:-1:-1;6989:23:1;;6838:180;-1:-1:-1;6838:180:1:o;7023:388::-;7091:6;7099;7152:2;7140:9;7131:7;7127:23;7123:32;7120:52;;;7168:1;7165;7158:12;7120:52;7207:9;7194:23;7226:31;7251:5;7226:31;:::i;:::-;7276:5;-1:-1:-1;7333:2:1;7318:18;;7305:32;7346:33;7305:32;7346:33;:::i;7642:356::-;7844:2;7826:21;;;7863:18;;;7856:30;7922:34;7917:2;7902:18;;7895:62;7989:2;7974:18;;7642:356::o;8003:127::-;8064:10;8059:3;8055:20;8052:1;8045:31;8095:4;8092:1;8085:15;8119:4;8116:1;8109:15;8135:217;8175:1;8201;8191:132;;8245:10;8240:3;8236:20;8233:1;8226:31;8280:4;8277:1;8270:15;8308:4;8305:1;8298:15;8191:132;-1:-1:-1;8337:9:1;;8135:217::o;8357:168::-;8397:7;8463:1;8459;8455:6;8451:14;8448:1;8445:21;8440:1;8433:9;8426:17;8422:45;8419:71;;;8470:18;;:::i;:::-;-1:-1:-1;8510:9:1;;8357:168::o;8951:128::-;8991:3;9022:1;9018:6;9015:1;9012:13;9009:39;;;9028:18;;:::i;:::-;-1:-1:-1;9064:9:1;;8951:128::o;12213:422::-;12302:1;12345:5;12302:1;12359:270;12380:7;12370:8;12367:21;12359:270;;;12439:4;12435:1;12431:6;12427:17;12421:4;12418:27;12415:53;;;12448:18;;:::i;:::-;12498:7;12488:8;12484:22;12481:55;;;12518:16;;;;12481:55;12597:22;;;;12557:15;;;;12359:270;;;12363:3;12213:422;;;;;:::o;12640:806::-;12689:5;12719:8;12709:80;;-1:-1:-1;12760:1:1;12774:5;;12709:80;12808:4;12798:76;;-1:-1:-1;12845:1:1;12859:5;;12798:76;12890:4;12908:1;12903:59;;;;12976:1;12971:130;;;;12883:218;;12903:59;12933:1;12924:10;;12947:5;;;12971:130;13008:3;12998:8;12995:17;12992:43;;;13015:18;;:::i;:::-;-1:-1:-1;;13071:1:1;13057:16;;13086:5;;12883:218;;13185:2;13175:8;13172:16;13166:3;13160:4;13157:13;13153:36;13147:2;13137:8;13134:16;13129:2;13123:4;13120:12;13116:35;13113:77;13110:159;;;-1:-1:-1;13222:19:1;;;13254:5;;13110:159;13301:34;13326:8;13320:4;13301:34;:::i;:::-;13371:6;13367:1;13363:6;13359:19;13350:7;13347:32;13344:58;;;13382:18;;:::i;:::-;13420:20;;12640:806;-1:-1:-1;;;12640:806:1:o;13451:140::-;13509:5;13538:47;13579:4;13569:8;13565:19;13559:4;13538:47;:::i;13951:125::-;13991:4;14019:1;14016;14013:8;14010:34;;;14024:18;;:::i;:::-;-1:-1:-1;14061:9:1;;13951:125::o;14081:339::-;14283:2;14265:21;;;14322:2;14302:18;;;14295:30;-1:-1:-1;;;14356:2:1;14341:18;;14334:45;14411:2;14396:18;;14081:339::o;14779:127::-;14840:10;14835:3;14831:20;14828:1;14821:31;14871:4;14868:1;14861:15;14895:4;14892:1;14885:15;15325:135;15364:3;-1:-1:-1;;15385:17:1;;15382:43;;;15405:18;;:::i;:::-;-1:-1:-1;15452:1:1;15441:13;;15325:135::o;19487:245::-;19554:6;19607:2;19595:9;19586:7;19582:23;19578:32;19575:52;;;19623:1;19620;19613:12;19575:52;19655:9;19649:16;19674:28;19696:5;19674:28;:::i;21722:188::-;21801:13;;-1:-1:-1;;;;;21843:42:1;;21833:53;;21823:81;;21900:1;21897;21890:12;21823:81;21722:188;;;:::o;21915:450::-;22002:6;22010;22018;22071:2;22059:9;22050:7;22046:23;22042:32;22039:52;;;22087:1;22084;22077:12;22039:52;22110:40;22140:9;22110:40;:::i;:::-;22100:50;;22169:49;22214:2;22203:9;22199:18;22169:49;:::i;:::-;22159:59;;22261:2;22250:9;22246:18;22240:25;22305:10;22298:5;22294:22;22287:5;22284:33;22274:61;;22331:1;22328;22321:12;22274:61;22354:5;22344:15;;;21915:450;;;;;:::o;22502:251::-;22572:6;22625:2;22613:9;22604:7;22600:23;22596:32;22593:52;;;22641:1;22638;22631:12;22593:52;22673:9;22667:16;22692:31;22717:5;22692:31;:::i;22758:980::-;23020:4;23068:3;23057:9;23053:19;23099:6;23088:9;23081:25;23125:2;23163:6;23158:2;23147:9;23143:18;23136:34;23206:3;23201:2;23190:9;23186:18;23179:31;23230:6;23265;23259:13;23296:6;23288;23281:22;23334:3;23323:9;23319:19;23312:26;;23373:2;23365:6;23361:15;23347:29;;23394:1;23404:195;23418:6;23415:1;23412:13;23404:195;;;23483:13;;-1:-1:-1;;;;;23479:39:1;23467:52;;23574:15;;;;23539:12;;;;23515:1;23433:9;23404:195;;;-1:-1:-1;;;;;;;23655:32:1;;;;23650:2;23635:18;;23628:60;-1:-1:-1;;;23719:3:1;23704:19;23697:35;23616:3;22758:980;-1:-1:-1;;;22758:980:1:o;24355:306::-;24443:6;24451;24459;24512:2;24500:9;24491:7;24487:23;24483:32;24480:52;;;24528:1;24525;24518:12;24480:52;24557:9;24551:16;24541:26;;24607:2;24596:9;24592:18;24586:25;24576:35;;24651:2;24640:9;24636:18;24630:25;24620:35;;24355:306;;;;;:::o

Swarm Source

ipfs://91b43d90ebe6c1d6297d93bcd2e30774f8acb078ef6e4b35398c003d9613a441
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.