ETH Price: $3,453.94 (-0.96%)
Gas: 3 Gwei

Token

Wen (Nuke)
 

Overview

Max Total Supply

1,000,000,000 Nuke

Holders

310

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Balance
0.534873049895114393 Nuke

Value
$0.00
0x8fc439a8d790fb21f0ea9f26313861f795a23152
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:
WenNuke

Compiler Version
v0.8.17+commit.8df45f5f

Optimization Enabled:
Yes with 300 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2023-05-17
*/

/**



 ..  ..  ..  :~?Y5GGGGGGGGGGGPPY7~:.   ..  ..  ..
..  ..    .~JPP5Y?!~^::::::::^~!?YPPPJ!.  ..  ..  
  ..   .^YGPYY57...:::::::::::...JG5YYPGY~  ..  ..
..   .~PBYJP#@@@?.:::::::::::::.Y@@@@#PJYBG!  ..  
  . :P#JJB@@@@@@@J.:::::::::::.J@@@@@@@@BJJ#G^  ..
.. 7&57G@@@@@@@@@@Y.:::::::::.?@@@@@@@@@@@B75&?   
  J@?J@@@@@@@@@@@@@5:.::::::.?@@@@@@@@@@@@@@J?@Y .
 ?@7J@@@@@@@@@@@@@@@P::::::.?@@@@@@@@@@@@@@@@J7@? 
^@Y!@@@@@@@@@@@@@@@@@?.....^B@@@@@@@@@@@@@@@@@!Y@~
P&^B@@@@@@@@@@@@@@@G~.:!??!^.!P@@@@@@@@@@@@@@@B^&P
&G~@@@@@@@@@@@@@@@P:.7#@@@@&J..J@@@@@@@@@@@@@@@~G@
@5~GGGGBBBBBBBBBBB~.:#@@@@@@@^..J555YYYYYYJJJJJ^P@
@G:...::::::::::::::.?&@@@@@Y:::...............:G&
P&^:::::::::::::::::..:7JJ7^.:.::::::::::::::::^@P
~@5::::::::::::::::.^PGYJJY5B#?.:::::::::::::::5@^
 ?@7::::::::::::::.7&@@@@@@@@@@5:.::::::::::::?@? 
  Y@?:::::::::::.:Y@@@@@@@@@@@@@B~.::::::::::?@J  
.  ?&5:::::::::.~B@@@@@@@@@@@@@@@&?..::::::^P&7  .
..  ^G#?::.:::.?&@@@@@@@@@@@@@@@@@@P^.:.::J#P^ .. 
  ..  !GBY~:.:5@@@@@@@@@@@@@@@@@@@@@#~:~YBP~    ..
..  ..  ~5BGJ?5G#&@@@@@@@@@@@@@@&#G5YYGBY^    ..  
  ..  ..  .!JPPP5YY55PPGGGGPP55YY5PPPJ~.    ..  ..
..  ..  ..    :~7Y5PPGGGGGGGGPP5J7~:     ...  .. 


Bull or Bear the question on everyones mind is 

░██╗░░░░░░░██╗███████╗███╗░░██╗  ███╗░░██╗██╗░░░██╗██╗░░██╗███████╗
░██║░░██╗░░██║██╔════╝████╗░██║  ████╗░██║██║░░░██║██║░██╔╝██╔════╝
░╚██╗████╗██╔╝█████╗░░██╔██╗██║  ██╔██╗██║██║░░░██║█████═╝░█████╗░░
░░████╔═████║░██╔══╝░░██║╚████║  ██║╚████║██║░░░██║██╔═██╗░██╔══╝░░
░░╚██╔╝░╚██╔╝░███████╗██║░╚███║  ██║░╚███║╚██████╔╝██║░╚██╗███████╗
░░░╚═╝░░░╚═╝░░╚══════╝╚═╝░░╚══╝  ╚═╝░░╚══╝░╚═════╝░╚═╝░░╚═╝╚══════╝

Telegram: https://t.me/NUKEPORTAL
website: http://wennuke.site/
Twitter: https://twitter.com/NukeERC20

**/


// SPDX-License-Identifier: MIT

pragma solidity 0.8.17;

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

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

library Address {
    function isContract(address account) internal view returns (bool) {
        return account.code.length > 0;
    }

    function sendValue(address payable recipient, uint256 amount) internal {
        require(address(this).balance >= amount, "Address: insufficient balance");

        (bool success, ) = recipient.call{value: amount}("");
        require(success, "Address: unable to send value, recipient may have reverted");
    }

    function functionCall(address target, bytes memory data) internal returns (bytes memory) {
        return functionCallWithValue(target, data, 0, "Address: low-level call failed");
    }

    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");
        (bool success, bytes memory returndata) = target.call{value: value}(data);
        return verifyCallResultFromTarget(target, success, returndata, errorMessage);
    }

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],
     * but performing a static call.
     *
     * _Available since v3.3._
     */
    function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) {
        return functionStaticCall(target, data, "Address: low-level static call failed");
    }

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],
     * but performing a static call.
     *
     * _Available since v3.3._
     */
    function functionStaticCall(
        address target,
        bytes memory data,
        string memory errorMessage
    ) internal view returns (bytes memory) {
        (bool success, bytes memory returndata) = target.staticcall(data);
        return verifyCallResultFromTarget(target, success, returndata, errorMessage);
    }

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],
     * but performing a delegate call.
     *
     * _Available since v3.4._
     */
    function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) {
        return functionDelegateCall(target, data, "Address: low-level delegate call failed");
    }

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],
     * but performing a delegate call.
     *
     * _Available since v3.4._
     */
    function functionDelegateCall(
        address target,
        bytes memory data,
        string memory errorMessage
    ) internal returns (bytes memory) {
        (bool success, bytes memory returndata) = target.delegatecall(data);
        return verifyCallResultFromTarget(target, success, returndata, errorMessage);
    }

    /**
     * @dev Tool to verify that a low level call to smart-contract was successful, and revert (either by bubbling
     * the revert reason or using the provided one) in case of unsuccessful call or if target was not a contract.
     *
     * _Available since v4.8._
     */
    function verifyCallResultFromTarget(
        address target,
        bool success,
        bytes memory returndata,
        string memory errorMessage
    ) internal view returns (bytes memory) {
        if (success) {
            if (returndata.length == 0) {
                // only check isContract if the call was successful and the return data is empty
                // otherwise we already know that it was a contract
                require(isContract(target), "Address: call to non-contract");
            }
            return returndata;
        } else {
            _revert(returndata, errorMessage);
        }
    }

    /**
     * @dev Tool to verify that a low level call was successful, and revert if it wasn't, either by bubbling the
     * revert reason or using the provided one.
     *
     * _Available since v4.3._
     */
    function verifyCallResult(
        bool success,
        bytes memory returndata,
        string memory errorMessage
    ) internal pure returns (bytes memory) {
        if (success) {
            return returndata;
        } else {
            _revert(returndata, errorMessage);
        }
    }

    function _revert(bytes memory returndata, string memory errorMessage) private pure {
        // 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
            /// @solidity memory-safe-assembly
            assembly {
                let returndata_size := mload(returndata)
                revert(add(32, returndata), returndata_size)
            }
        } else {
            revert(errorMessage);
        }
    }
}

library SafeERC20 {
    using Address for address;

    function safeTransfer(
        IERC20 token,
        address to,
        uint256 value
    ) internal {
        _callOptionalReturn(token, abi.encodeWithSelector(token.transfer.selector, to, value));
    }

    function _callOptionalReturn(IERC20 token, bytes memory data) private {
        bytes memory returndata = address(token).functionCall(data, "SafeERC20: low-level call failed");
        if (returndata.length > 0) {
            require(abi.decode(returndata, (bool)), "SafeERC20: ERC20 operation did not succeed");
        }
    }
}

interface IERC20 {
    function totalSupply() external view returns (uint256);
    function balanceOf(address account) external view returns (uint256);
    function transfer(address recipient, uint256 amount) external returns (bool);
    function allowance(address owner, address spender) external view returns (uint256);
    function approve(address spender, uint256 amount) external returns (bool);
    function transferFrom(address sender, address recipient, uint256 amount) external returns (bool);

    event Transfer(address indexed from, address indexed to, uint256 value);
    event Approval(address indexed owner, address indexed spender, uint256 value);
}

interface IERC20Metadata is IERC20 {
    function name() external view returns (string memory);
    function symbol() external view returns (string memory);
    function decimals() external view returns (uint8);
}

contract ERC20 is Context, IERC20, IERC20Metadata {
    mapping(address => uint256) private _balances;

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

    uint256 private _totalSupply;

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

    constructor(string memory name_, string memory symbol_, uint8 decimals_) {
        _name = name_;
        _symbol = symbol_;
        _decimals = decimals_;
    }

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

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

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

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

    function balanceOf(address account) public view virtual override returns (uint256) {
        return _balances[account];
    }

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

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

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

    function transferFrom(address sender, address recipient, uint256 amount) public virtual override returns (bool) {
        _transfer(sender, recipient, amount);

        uint256 currentAllowance = _allowances[sender][_msgSender()];
        if(currentAllowance != type(uint256).max){
            require(currentAllowance >= amount, "ERC20: transfer amount exceeds allowance");
            unchecked {
                _approve(sender, _msgSender(), currentAllowance - amount);
            }
        }

        return true;
    }

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

    function decreaseAllowance(address spender, uint256 subtractedValue) public virtual returns (bool) {
        uint256 currentAllowance = _allowances[_msgSender()][spender];
        require(currentAllowance >= subtractedValue, "ERC20: decreased allowance below zero");
        unchecked {
            _approve(_msgSender(), spender, currentAllowance - subtractedValue);
        }

        return true;
    }

    function _transfer(address sender, address recipient, uint256 amount) internal virtual {
        require(sender != address(0), "ERC20: transfer from the zero address");
        require(recipient != address(0), "ERC20: transfer to the zero address");

        uint256 senderBalance = _balances[sender];
        require(senderBalance >= amount, "ERC20: transfer amount exceeds balance");
        unchecked {
            _balances[sender] = senderBalance - amount;
        }
        _balances[recipient] += amount;

        emit Transfer(sender, recipient, amount);
    }

    function _createInitialSupply(address account, uint256 amount) internal virtual {
        require(account != address(0), "ERC20: mint to the zero address");

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

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

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

contract Ownable is Context {
    address private _owner;

    event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);
    
    constructor () {
        address msgSender = _msgSender();
        _owner = msgSender;
        emit OwnershipTransferred(address(0), msgSender);
    }

    function owner() public view returns (address) {
        return _owner;
    }

    modifier onlyOwner() {
        require(_owner == _msgSender(), "Ownable: caller is not the owner");
        _;
    }

    function renounceOwnership() external virtual onlyOwner {
        emit OwnershipTransferred(_owner, address(0));
        _owner = address(0);
    }

    function transferOwnership(address newOwner) public virtual onlyOwner {
        require(newOwner != address(0), "Ownable: new owner is the zero address");
        emit OwnershipTransferred(_owner, newOwner);
        _owner = newOwner;
    }
}

interface ILpPair {
    function sync() external;
}

interface IDexRouter {
    function factory() external pure returns (address);
    function WETH() external pure returns (address);
    function swapExactTokensForETHSupportingFeeOnTransferTokens(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 swapExactTokensForTokensSupportingFeeOnTransferTokens(uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline) external;
    function addLiquidityETH(address token, uint256 amountTokenDesired, uint256 amountTokenMin, uint256 amountETHMin, address to, uint256 deadline) external payable returns (uint256 amountToken, uint256 amountETH, uint256 liquidity);
    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 getAmountsOut(uint amountIn, address[] calldata path) external view returns (uint[] memory amounts);
}

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


contract WenNuke is ERC20, Ownable {

    uint256 public maxBuyAmount;
    uint256 public maxWalletAmount; 



    IDexRouter public immutable dexRouter;
    address public immutable lpPair;

    bool private swapping;
    uint256 public swapTokensAtAmount;

    address public marketingAddress;

    uint256 public tradingActiveBlock = 0; // 0 means trading is not active

    bool public limitsInEffect = true;
    bool public tradingActive = false;
    bool public swapEnabled = false;
    
     // Anti-bot and anti-whale mappings and variables
    mapping(address => uint256) private _holderLastTransferBlock; // to hold last Transfers temporarily during launch
    bool public transferDelayEnabled = true;

    uint256 public buyTotalFees;
    uint256 public buyTaxFee;
    uint256 public buyLiquidityFee;

    uint256 public sellTotalFees;
    uint256 public sellTaxFee;
    uint256 public sellLiquidityFee;

    uint256 public tokensForMarket;
    uint256 public tokensForLiquidity;
    
    mapping (address => bool) private _isExcludedFromFees;
    mapping (address => bool) public _isExcludedMaxTransactionAmount;

    mapping (address => bool) public automatedMarketMakerPairs;

    event SetAutomatedMarketMakerPair(address indexed pair, bool indexed value);
    event EnabledTrading();
    event RemovedLimits();
    event ExcludeFromFees(address indexed account, bool isExcluded);
    event UpdatedMaxBuyAmount(uint256 newAmount);
    event UpdateMaxWalletAmount(uint256 newAmount);
    event UpdatedBuyFee(uint256 newAmount);
    event UpdatedSellFee(uint256 newAmount);
    event UpdatedMarketAddress(address indexed newWallet);
    event MaxTransactionExclusion(address _address, bool excluded);
    event OwnerForcedSwapBack(uint256 timestamp);
    event TransferForeignToken(address token, uint256 amount);
    event RemovedTokenHoldingsRequiredToBuy();
    event TransferDelayDisabled();
    event ReuppedApprovals();
    event SwapTokensAtAmountUpdated(uint256 newAmount);

    constructor() ERC20("Wen", "Nuke", 18){
        address newOwner = msg.sender; // can leave alone if owner is deployer.

        address _dexRouter;

        // automatically detect router/desired stablecoin
        if(block.chainid == 1){
            _dexRouter = 0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D; // ETH: Uniswap V2
        } else if(block.chainid == 5){
            _dexRouter = 0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D; // ETH: Uniswap V2
        } else if(block.chainid == 56){
            _dexRouter = 0x10ED43C718714eb63d5aA57B78B54704E256024E; // BNB Chain: PCS V2
        } else if(block.chainid == 97){
            _dexRouter = 0xD99D1c33F9fC3444f8101754aBC46c52416550D1; // BNB Chain: PCS V2
        } else {
            revert("Chain not configured");
        }

        // initialize router
        dexRouter = IDexRouter(_dexRouter);

        // create pair
        lpPair = IDexFactory(dexRouter.factory()).createPair(address(this), dexRouter.WETH());
        setAutomatedMarketMakerPair(address(lpPair), true);

        uint256 totalSupply = 1 * 1e9 * (10**decimals());
       
        
        maxBuyAmount = totalSupply * 5 / 1000;
        swapTokensAtAmount = totalSupply * 25 / 100000;
        maxWalletAmount = totalSupply * 2 / 100; // 2% max wallet 

        buyTaxFee = 25;
        buyLiquidityFee = 5;

        buyTotalFees = buyTaxFee+ buyLiquidityFee;

        sellTaxFee = 25;
        sellLiquidityFee = 5;
        sellTotalFees = sellTaxFee + sellLiquidityFee;

        // update these!
        marketingAddress = address(0xc1B52F221fe2462790eD2CEF990cb0B185d14cAC);

        _excludeFromMaxTransaction(newOwner, true);
        _excludeFromMaxTransaction(address(dexRouter), true);
        _excludeFromMaxTransaction(address(this), true);
        _excludeFromMaxTransaction(address(0xdead), true);
        _excludeFromMaxTransaction(address(marketingAddress), true);

        excludeFromFees(newOwner, true);
        excludeFromFees(address(dexRouter), true);
        excludeFromFees(address(this), true);
        excludeFromFees(address(0xdead), true);
        excludeFromFees(address(marketingAddress), true);

        _createInitialSupply(address(newOwner), totalSupply);
        transferOwnership(newOwner);

        _approve(address(this), address(dexRouter), type(uint256).max);
        _approve(msg.sender, address(dexRouter), totalSupply);
    }

    receive() external payable {
    }

    function enableTrading() external onlyOwner {
        require(!tradingActive, "Trading is already active, cannot relaunch.");
        tradingActive = true;
        swapEnabled = true;
        tradingActiveBlock = block.number;
        emit EnabledTrading();
    }

    // remove limits after token is stable
    function removeLimits() external onlyOwner {
        limitsInEffect = false;
        transferDelayEnabled = false;
        maxBuyAmount = totalSupply();
        maxWalletAmount = totalSupply();
        emit RemovedLimits();
    }

    // disable Transfer delay - cannot be reenabled
    function disableTransferDelay() external onlyOwner {
        transferDelayEnabled = false;
        emit TransferDelayDisabled();
    }
    
    function updateMaxBuyAmount(uint256 newNum) external onlyOwner {
        require(newNum >= (totalSupply() * 1 / 10000)/(10**decimals()), "Cannot set max buy amount lower than 0.01%");
        maxBuyAmount = newNum * (10**decimals());
        emit UpdatedMaxBuyAmount(maxBuyAmount);
    }

    function updateMaxWalletAmount(uint256 newWalletNum) external onlyOwner {
        require(newWalletNum >= (totalSupply() * 1 / 10000)/(10**decimals()), "Cannot set wallet amount lower than 0.01%");
        maxWalletAmount = newWalletNum * (10**decimals());
        emit UpdateMaxWalletAmount(maxWalletAmount);
    }


    // change the minimum amount of tokens to sell from fees
    function updateSwapTokensAtAmount(uint256 newAmount) external onlyOwner {
  	    require(newAmount >= totalSupply() * 1 / 100000, "Swap amount cannot be lower than 0.001% total supply.");
  	    require(newAmount <= totalSupply() * 1 / 1000, "Swap amount cannot be higher than 0.1% total supply.");
  	    swapTokensAtAmount = newAmount;
        emit SwapTokensAtAmountUpdated(newAmount);
  	}
    
    function _excludeFromMaxTransaction(address updAds, bool isExcluded) private {
        _isExcludedMaxTransactionAmount[updAds] = isExcluded;
        emit MaxTransactionExclusion(updAds, isExcluded);
    }

    function excludeFromMaxTransaction(address updAds, bool isEx) external onlyOwner {
        if(!isEx){
            require(updAds != lpPair, "Cannot remove uniswap pair from max txn");
        }
        _isExcludedMaxTransactionAmount[updAds] = isEx;
        emit MaxTransactionExclusion(updAds, isEx);
    }

    function setAutomatedMarketMakerPair(address pair, bool value) public onlyOwner {
        require(pair != lpPair || value, "The pair cannot be removed from automatedMarketMakerPairs");
        automatedMarketMakerPairs[pair] = value;
        _excludeFromMaxTransaction(pair, value);
        emit SetAutomatedMarketMakerPair(pair, value);
    }

    function updateBuyFees(uint256 _taxFee, uint256 _liquidityFee) external onlyOwner {
        buyTaxFee = _taxFee;
        buyLiquidityFee = _liquidityFee;
        buyTotalFees = buyTaxFee + buyLiquidityFee;
        require(buyTotalFees <= 80, "Must keep buy fees at 80% or less");
        emit UpdatedBuyFee(buyTotalFees);
    }

    function updateSellFees(uint256 _taxFee, uint256 _liquidityFee) external onlyOwner {
        sellTaxFee = _taxFee;
        sellLiquidityFee = _liquidityFee;
        sellTotalFees = sellTaxFee + sellLiquidityFee;
        require(sellTotalFees <= 80, "Must keep sell fees at 80% or less");
        emit UpdatedSellFee(sellTotalFees);
    }

    function excludeFromFees(address account, bool excluded) public onlyOwner {
        _isExcludedFromFees[account] = excluded;
        emit ExcludeFromFees(account, excluded);
    }

    function _transfer(address from, address to, uint256 amount) internal override {

        require(from != address(0), "ERC20: transfer from the zero address");
        require(to != address(0), "ERC20: transfer to the zero address");
        
        if(amount == 0){
            super._transfer(from, to, 0);
            return;
        }

        if(_isExcludedFromFees[from] || _isExcludedFromFees[to]){
            super._transfer(from, to, amount);
            return;
        }
        
        if(!tradingActive){
            revert("Trading is not active.");
        }        
        
        if(limitsInEffect){
            // at launch if the transfer delay is enabled, ensure the block timestamps for purchasers is set -- during launch.  
            if (transferDelayEnabled){
                if (to != address(dexRouter) && to != address(lpPair)){
                    require(_holderLastTransferBlock[tx.origin] + 1 < block.number && _holderLastTransferBlock[to] + 1 < block.number, "_transfer:: Transfer Delay enabled.  Try again later.");
                    _holderLastTransferBlock[tx.origin] = block.number;
                    _holderLastTransferBlock[to] = block.number;
                }
            }
                
            //when buy
            if (automatedMarketMakerPairs[from] && !_isExcludedMaxTransactionAmount[to]) {
                require(amount <= maxBuyAmount, "Buy transfer amount exceeds the max buy.");
                require(balanceOf(to) + amount <= maxWalletAmount, "Exceeds the maxWalletSize.");
            }    else if (!_isExcludedMaxTransactionAmount[to]){
                require(amount + balanceOf(to) <= maxWalletAmount, "Cannot Exceed max wallet");
                }   
        }

         


        

        if(balanceOf(address(this)) > swapTokensAtAmount && swapEnabled && !swapping && automatedMarketMakerPairs[to]) {
            swapping = true;
            swapBack();
            swapping = false;
        }
        
        uint256 fees = 0;

        // on sell
        if (automatedMarketMakerPairs[to] && sellTotalFees > 0){
            fees = amount * sellTotalFees / 100;
            tokensForLiquidity += fees * sellLiquidityFee / sellTotalFees;
            tokensForMarket += fees * sellTaxFee / sellTotalFees;
        }

        // on buy
        else if(automatedMarketMakerPairs[from] && buyTotalFees > 0) {
            fees = amount * buyTotalFees / 100;
            tokensForLiquidity += fees * buyLiquidityFee / buyTotalFees;
            tokensForMarket += fees * buyTaxFee / buyTotalFees;
        }
        
        if(fees > 0){    
            super._transfer(from, address(this), fees);
            amount -= fees;
        }
        
        super._transfer(from, to, amount);
    }

    function swapTokensForEth(uint256 tokenAmount) private {

        // generate the uniswap pair path of token -> weth
        address[] memory path = new address[](2);
        path[0] = address(this);
        path[1] = dexRouter.WETH();

        // make the swap
        dexRouter.swapExactTokensForETHSupportingFeeOnTransferTokens(tokenAmount, 0, path, address(this), block.timestamp);
    }

    function swapBack() private {
        bool success;

        uint256 contractBalance = balanceOf(address(this));
        uint256 totalTokensToSwap = tokensForMarket + tokensForLiquidity;
        
        if(contractBalance == 0 || totalTokensToSwap == 0) {return;}

        if(contractBalance > swapTokensAtAmount * 60){
            contractBalance = swapTokensAtAmount * 60;
        }

        if(tokensForLiquidity > 0){
            uint256 liquidityTokens = contractBalance * tokensForLiquidity / totalTokensToSwap;
            super._transfer(address(this), lpPair, liquidityTokens);
            try ILpPair(lpPair).sync(){} catch {}
            contractBalance -= liquidityTokens;
            totalTokensToSwap -= tokensForLiquidity;
        }

        swapTokensForEth(contractBalance);
        
        uint256 ethBalance = address(this).balance;

        uint256 ethForMarketBank = ethBalance * tokensForMarket / totalTokensToSwap;

        tokensForMarket = 0;
        tokensForLiquidity = 0;

        if(ethForMarketBank > 0){
            (success, ) = marketingAddress.call{value: ethForMarketBank}("");
        }

      
    }

    function sendEth() external onlyOwner {
        bool success;
        (success, ) = msg.sender.call{value: address(this).balance}("");
        require(success, "withdraw unsuccessful");
    }

    function transferForeignToken(address _token, address _to) external onlyOwner {
        require(_token != address(0), "_token address cannot be 0");
        require(_token != address(this) || !tradingActive, "Can't withdraw native tokens while trading is active");
        uint256 _contractBalance = IERC20(_token).balanceOf(address(this));
        SafeERC20.safeTransfer(IERC20(_token),_to, _contractBalance);
        emit TransferForeignToken(_token, _contractBalance);
    }

    function setMarketingAddress(address _marketAddress) external onlyOwner {
        require(_marketAddress != address(0), "address cannot be 0");
        marketingAddress = payable(_marketAddress);
        emit UpdatedMarketAddress(_marketAddress);
    }
    

    // force Swap back if slippage issues.
    function forceSwapBack() external onlyOwner {
        require(balanceOf(address(this)) >= swapTokensAtAmount, "Can only swap when token amount is at or higher than restriction");
        swapping = true;
        swapBack();
        swapping = false;
        emit OwnerForcedSwapBack(block.timestamp);
    }
}

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[],"name":"EnabledTrading","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"bool","name":"isExcluded","type":"bool"}],"name":"ExcludeFromFees","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"_address","type":"address"},{"indexed":false,"internalType":"bool","name":"excluded","type":"bool"}],"name":"MaxTransactionExclusion","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"timestamp","type":"uint256"}],"name":"OwnerForcedSwapBack","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":"RemovedLimits","type":"event"},{"anonymous":false,"inputs":[],"name":"RemovedTokenHoldingsRequiredToBuy","type":"event"},{"anonymous":false,"inputs":[],"name":"ReuppedApprovals","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pair","type":"address"},{"indexed":true,"internalType":"bool","name":"value","type":"bool"}],"name":"SetAutomatedMarketMakerPair","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"newAmount","type":"uint256"}],"name":"SwapTokensAtAmountUpdated","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":[],"name":"TransferDelayDisabled","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"token","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"TransferForeignToken","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"newAmount","type":"uint256"}],"name":"UpdateMaxWalletAmount","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"newAmount","type":"uint256"}],"name":"UpdatedBuyFee","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"newWallet","type":"address"}],"name":"UpdatedMarketAddress","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"newAmount","type":"uint256"}],"name":"UpdatedMaxBuyAmount","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"newAmount","type":"uint256"}],"name":"UpdatedSellFee","type":"event"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"_isExcludedMaxTransactionAmount","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"automatedMarketMakerPairs","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyLiquidityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyTaxFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyTotalFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"dexRouter","outputs":[{"internalType":"contract IDexRouter","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"disableTransferDelay","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"enableTrading","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"excluded","type":"bool"}],"name":"excludeFromFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"updAds","type":"address"},{"internalType":"bool","name":"isEx","type":"bool"}],"name":"excludeFromMaxTransaction","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"forceSwapBack","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"limitsInEffect","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lpPair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"marketingAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxBuyAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxWalletAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"removeLimits","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"sellLiquidityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellTaxFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellTotalFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sendEth","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pair","type":"address"},{"internalType":"bool","name":"value","type":"bool"}],"name":"setAutomatedMarketMakerPair","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_marketAddress","type":"address"}],"name":"setMarketingAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"swapTokensAtAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokensForLiquidity","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokensForMarket","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tradingActive","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tradingActiveBlock","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"transferDelayEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_token","type":"address"},{"internalType":"address","name":"_to","type":"address"}],"name":"transferForeignToken","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_taxFee","type":"uint256"},{"internalType":"uint256","name":"_liquidityFee","type":"uint256"}],"name":"updateBuyFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newNum","type":"uint256"}],"name":"updateMaxBuyAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newWalletNum","type":"uint256"}],"name":"updateMaxWalletAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_taxFee","type":"uint256"},{"internalType":"uint256","name":"_liquidityFee","type":"uint256"}],"name":"updateSellFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newAmount","type":"uint256"}],"name":"updateSwapTokensAtAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

60c06040526000600b55600c805462ffffff19166001908117909155600e805460ff191690911790553480156200003557600080fd5b50604051806040016040528060038152602001622bb2b760e91b815250604051806040016040528060048152602001634e756b6560e01b8152506012826003908162000082919062000b50565b50600462000091838262000b50565b506005805460ff191660ff929092169190911790555060009050620000b33390565b60058054610100600160a81b0319166101006001600160a01b038416908102919091179091556040519192509060009060008051602062003e4a833981519152908290a35033600046600103620001205750737a250d5630b4cf539739df2c5dacb4c659f2488d620001dc565b46600503620001455750737a250d5630b4cf539739df2c5dacb4c659f2488d620001dc565b466038036200016a57507310ed43c718714eb63d5aa57b78b54704e256024e620001dc565b466061036200018f575073d99d1c33f9fc3444f8101754abc46c52416550d1620001dc565b60405162461bcd60e51b815260206004820152601460248201527f436861696e206e6f7420636f6e6669677572656400000000000000000000000060448201526064015b60405180910390fd5b6001600160a01b03811660808190526040805163c45a015560e01b8152905163c45a0155916004808201926020929091908290030181865afa15801562000227573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200024d919062000c1c565b6001600160a01b031663c9c65396306080516001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa1580156200029d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002c3919062000c1c565b6040516001600160e01b031960e085901b1681526001600160a01b039283166004820152911660248201526044016020604051808303816000875af115801562000311573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000337919062000c1c565b6001600160a01b031660a0819052620003529060016200052b565b60006200036160055460ff1690565b6200036e90600a62000d63565b6200037e90633b9aca0062000d74565b90506103e86200039082600562000d74565b6200039c919062000d8e565b600655620186a0620003b082601962000d74565b620003bc919062000d8e565b6009556064620003ce82600262000d74565b620003da919062000d8e565b6007556019601081905560056011819055620003f69162000db1565b600f556019601381905560056014819055620004129162000db1565b601255600a80546001600160a01b03191673c1b52f221fe2462790ed2cef990cb0b185d14cac179055620004488360016200067d565b608051620004589060016200067d565b620004653060016200067d565b6200047461dead60016200067d565b600a546200048d906001600160a01b031660016200067d565b6200049a836001620006e0565b608051620004aa906001620006e0565b620004b7306001620006e0565b620004c661dead6001620006e0565b600a54620004df906001600160a01b03166001620006e0565b620004eb838262000790565b620004f68362000875565b6200050d306080516000196200098360201b60201c565b6200052233608051836200098360201b60201c565b50505062000dc7565b6005546001600160a01b036101009091041633146200057c5760405162461bcd60e51b8152602060048201819052602482015260008051602062003e2a8339815191526044820152606401620001d3565b60a0516001600160a01b0316826001600160a01b03161415806200059d5750805b620006115760405162461bcd60e51b815260206004820152603960248201527f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d2060448201527f6175746f6d617465644d61726b65744d616b65725061697273000000000000006064820152608401620001d3565b6001600160a01b0382166000908152601960205260409020805460ff19168215151790556200064182826200067d565b604051811515906001600160a01b038416907fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab90600090a35050565b6001600160a01b038216600081815260186020908152604091829020805460ff19168515159081179091558251938452908301527f6b4f1be9103e6cbcd38ca4a922334f2c3109b260130a6676a987f94088fd6746910160405180910390a15050565b6005546001600160a01b03610100909104163314620007315760405162461bcd60e51b8152602060048201819052602482015260008051602062003e2a8339815191526044820152606401620001d3565b6001600160a01b038216600081815260176020908152604091829020805460ff191685151590811790915591519182527f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7910160405180910390a25050565b6001600160a01b038216620007e85760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f2061646472657373006044820152606401620001d3565b8060026000828254620007fc919062000db1565b90915550506001600160a01b038216600090815260208190526040812080548392906200082b90849062000db1565b90915550506040518181526001600160a01b038316906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a35050565b6005546001600160a01b03610100909104163314620008c65760405162461bcd60e51b8152602060048201819052602482015260008051602062003e2a8339815191526044820152606401620001d3565b6001600160a01b0381166200092d5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401620001d3565b6005546040516001600160a01b03808416926101009004169060008051602062003e4a83398151915290600090a3600580546001600160a01b0390921661010002610100600160a81b0319909216919091179055565b6001600160a01b038316620009e75760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401620001d3565b6001600160a01b03821662000a4a5760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401620001d3565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b634e487b7160e01b600052604160045260246000fd5b600181811c9082168062000ad657607f821691505b60208210810362000af757634e487b7160e01b600052602260045260246000fd5b50919050565b601f82111562000b4b57600081815260208120601f850160051c8101602086101562000b265750805b601f850160051c820191505b8181101562000b475782815560010162000b32565b5050505b505050565b81516001600160401b0381111562000b6c5762000b6c62000aab565b62000b848162000b7d845462000ac1565b8462000afd565b602080601f83116001811462000bbc576000841562000ba35750858301515b600019600386901b1c1916600185901b17855562000b47565b600085815260208120601f198616915b8281101562000bed5788860151825594840194600190910190840162000bcc565b508582101562000c0c5787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b60006020828403121562000c2f57600080fd5b81516001600160a01b038116811462000c4757600080fd5b9392505050565b634e487b7160e01b600052601160045260246000fd5b600181815b8085111562000ca557816000190482111562000c895762000c8962000c4e565b8085161562000c9757918102915b93841c939080029062000c69565b509250929050565b60008262000cbe5750600162000d5d565b8162000ccd5750600062000d5d565b816001811462000ce6576002811462000cf15762000d11565b600191505062000d5d565b60ff84111562000d055762000d0562000c4e565b50506001821b62000d5d565b5060208310610133831016604e8410600b841016171562000d36575081810a62000d5d565b62000d42838362000c64565b806000190482111562000d595762000d5962000c4e565b0290505b92915050565b600062000c4760ff84168362000cad565b808202811582820484141762000d5d5762000d5d62000c4e565b60008262000dac57634e487b7160e01b600052601260045260246000fd5b500490565b8082018082111562000d5d5762000d5d62000c4e565b60805160a05161300562000e2560003960008181610526015281816110f1015281816115a301528181611e84015281816123f7015261241e0152600081816103ad01528181611e470152818161273d01526127f501526130056000f3fe60806040526004361061032d5760003560e01c80638a8c523c116101a5578063c0246668116100ec578063e2f4560511610095578063f11a24d31161006f578063f11a24d314610902578063f2fde38b14610918578063f637434214610938578063f8a25a941461094e57600080fd5b8063e2f45605146108c1578063e884f260146108d7578063ee40166e146108ec57600080fd5b8063d257b34f116100c6578063d257b34f14610845578063d85ba06314610865578063dd62ed3e1461087b57600080fd5b8063c0246668146107eb578063c18bc1951461080b578063c876d0b91461082b57600080fd5b8063a457c2d71161014e578063aa4bde2811610128578063aa4bde2814610786578063b62496f51461079c578063bbc0c742146107cc57600080fd5b8063a457c2d714610726578063a5ece94114610746578063a9059cbb1461076657600080fd5b8063941fa5cd1161017f578063941fa5cd146106db57806395d89b41146106f15780639a7a23d61461070657600080fd5b80638a8c523c146106835780638da5cb5b14610698578063906e9dd0146106bb57600080fd5b806339509351116102745780636ddd17131161021d578063751039fc116101f7578063751039fc146106185780637571336a1461062d5780638366e79a1461064d57806388e765ff1461066d57600080fd5b80636ddd1713146105ad57806370a08231146105cd578063715018a61461060357600080fd5b806351f205e41161024e57806351f205e41461056257806366ca9b83146105775780636a486a8e1461059757600080fd5b806339509351146104f4578063452ed4f1146105145780634a62bb651461054857600080fd5b806318160ddd116102d657806323b872dd116102b057806323b872dd146104925780632be32b61146104b2578063313ce567146104d257600080fd5b806318160ddd146104475780631a8145bb146104665780631f7ea8da1461047c57600080fd5b80630758d924116103075780630758d9241461039b578063095ea7b3146103e757806310d5de531461041757600080fd5b806302dbd8f81461033957806306e99fef1461035b57806306fdde031461037057600080fd5b3661033457005b600080fd5b34801561034557600080fd5b50610359610354366004612acd565b610964565b005b34801561036757600080fd5b50610359610a50565b34801561037c57600080fd5b50610385610b1d565b6040516103929190612b13565b60405180910390f35b3480156103a757600080fd5b506103cf7f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b039091168152602001610392565b3480156103f357600080fd5b50610407610402366004612b5b565b610baf565b6040519015158152602001610392565b34801561042357600080fd5b50610407610432366004612b87565b60186020526000908152604090205460ff1681565b34801561045357600080fd5b506002545b604051908152602001610392565b34801561047257600080fd5b5061045860165481565b34801561048857600080fd5b5061045860155481565b34801561049e57600080fd5b506104076104ad366004612bab565b610bc6565b3480156104be57600080fd5b506103596104cd366004612bec565b610c79565b3480156104de57600080fd5b5060055460405160ff9091168152602001610392565b34801561050057600080fd5b5061040761050f366004612b5b565b610d9e565b34801561052057600080fd5b506103cf7f000000000000000000000000000000000000000000000000000000000000000081565b34801561055457600080fd5b50600c546104079060ff1681565b34801561056e57600080fd5b50610359610dda565b34801561058357600080fd5b50610359610592366004612acd565b610ee7565b3480156105a357600080fd5b5061045860125481565b3480156105b957600080fd5b50600c546104079062010000900460ff1681565b3480156105d957600080fd5b506104586105e8366004612b87565b6001600160a01b031660009081526020819052604090205490565b34801561060f57600080fd5b50610359610fbd565b34801561062457600080fd5b5061035961103d565b34801561063957600080fd5b50610359610648366004612c13565b6110ba565b34801561065957600080fd5b50610359610668366004612c4c565b6111dc565b34801561067957600080fd5b5061045860065481565b34801561068f57600080fd5b506103596113b3565b3480156106a457600080fd5b5060055461010090046001600160a01b03166103cf565b3480156106c757600080fd5b506103596106d6366004612b87565b61148f565b3480156106e757600080fd5b5061045860105481565b3480156106fd57600080fd5b50610385611562565b34801561071257600080fd5b50610359610721366004612c13565b611571565b34801561073257600080fd5b50610407610741366004612b5b565b6116bb565b34801561075257600080fd5b50600a546103cf906001600160a01b031681565b34801561077257600080fd5b50610407610781366004612b5b565b611754565b34801561079257600080fd5b5061045860075481565b3480156107a857600080fd5b506104076107b7366004612b87565b60196020526000908152604090205460ff1681565b3480156107d857600080fd5b50600c5461040790610100900460ff1681565b3480156107f757600080fd5b50610359610806366004612c13565b611761565b34801561081757600080fd5b50610359610826366004612bec565b6117f0565b34801561083757600080fd5b50600e546104079060ff1681565b34801561085157600080fd5b50610359610860366004612bec565b61190d565b34801561087157600080fd5b50610458600f5481565b34801561088757600080fd5b50610458610896366004612c4c565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b3480156108cd57600080fd5b5061045860095481565b3480156108e357600080fd5b50610359611a9f565b3480156108f857600080fd5b50610458600b5481565b34801561090e57600080fd5b5061045860115481565b34801561092457600080fd5b50610359610933366004612b87565b611b04565b34801561094457600080fd5b5061045860145481565b34801561095a57600080fd5b5061045860135481565b6005546001600160a01b0361010090910416331461099d5760405162461bcd60e51b815260040161099490612c7a565b60405180910390fd5b601382905560148190556109b18183612cc5565b601281905560501015610a115760405162461bcd60e51b815260206004820152602260248201527f4d757374206b6565702073656c6c206665657320617420383025206f72206c65604482015261737360f01b6064820152608401610994565b7f274faecd49018fb411281f27986b6b4acc86e5db4100735531acd18b7b6d5f93601254604051610a4491815260200190565b60405180910390a15050565b6005546001600160a01b03610100909104163314610a805760405162461bcd60e51b815260040161099490612c7a565b604051600090339047908381818185875af1925050503d8060008114610ac2576040519150601f19603f3d011682016040523d82523d6000602084013e610ac7565b606091505b50508091505080610b1a5760405162461bcd60e51b815260206004820152601560248201527f776974686472617720756e7375636365737366756c00000000000000000000006044820152606401610994565b50565b606060038054610b2c90612cd8565b80601f0160208091040260200160405190810160405280929190818152602001828054610b5890612cd8565b8015610ba55780601f10610b7a57610100808354040283529160200191610ba5565b820191906000526020600020905b815481529060010190602001808311610b8857829003601f168201915b5050505050905090565b6000610bbc338484611c00565b5060015b92915050565b6000610bd3848484611d24565b6001600160a01b03841660009081526001602090815260408083203384529091529020546000198114610c6e5782811015610c615760405162461bcd60e51b815260206004820152602860248201527f45524332303a207472616e7366657220616d6f756e74206578636565647320616044820152676c6c6f77616e636560c01b6064820152608401610994565b610c6e8533858403611c00565b506001949350505050565b6005546001600160a01b03610100909104163314610ca95760405162461bcd60e51b815260040161099490612c7a565b60055460ff16610cba90600a612df6565b612710610cc660025490565b610cd1906001612e05565b610cdb9190612e1c565b610ce59190612e1c565b811015610d475760405162461bcd60e51b815260206004820152602a60248201527f43616e6e6f7420736574206d61782062757920616d6f756e74206c6f776572206044820152697468616e20302e30312560b01b6064820152608401610994565b60055460ff16610d5890600a612df6565b610d629082612e05565b60068190556040519081527ffcc0366804aaa8dbf88a2924100c733b70dec8445957a5d5f8ff92898de41009906020015b60405180910390a150565b3360008181526001602090815260408083206001600160a01b03871684529091528120549091610bbc918590610dd5908690612cc5565b611c00565b6005546001600160a01b03610100909104163314610e0a5760405162461bcd60e51b815260040161099490612c7a565b600954306000908152602081905260409020541015610e93576040805162461bcd60e51b81526020600482015260248101919091527f43616e206f6e6c792073776170207768656e20746f6b656e20616d6f756e742060448201527f6973206174206f7220686967686572207468616e207265737472696374696f6e6064820152608401610994565b6008805460ff19166001179055610ea861236d565b6008805460ff191690556040514281527f1b56c383f4f48fc992e45667ea4eabae777b9cca68b516a9562d8cda78f1bb329060200160405180910390a1565b6005546001600160a01b03610100909104163314610f175760405162461bcd60e51b815260040161099490612c7a565b60108290556011819055610f2b8183612cc5565b600f81905560501015610f8a5760405162461bcd60e51b815260206004820152602160248201527f4d757374206b65657020627579206665657320617420383025206f72206c65736044820152607360f81b6064820152608401610994565b7f03cd3090e7c409e4a7ffd2d90ff610979f4a94a87a512188b7b615671bfb772f600f54604051610a4491815260200190565b6005546001600160a01b03610100909104163314610fed5760405162461bcd60e51b815260040161099490612c7a565b60055460405160009161010090046001600160a01b0316907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a360058054610100600160a81b0319169055565b6005546001600160a01b0361010090910416331461106d5760405162461bcd60e51b815260040161099490612c7a565b600c805460ff19908116909155600e805490911690556002546006556002546007556040517fa4ffae85e880608d5d4365c2b682786545d136145537788e7e0940dff9f0b98c90600090a1565b6005546001600160a01b036101009091041633146110ea5760405162461bcd60e51b815260040161099490612c7a565b80611180577f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316826001600160a01b0316036111805760405162461bcd60e51b815260206004820152602760248201527f43616e6e6f742072656d6f766520756e697377617020706169722066726f6d2060448201526636b0bc103a3c3760c91b6064820152608401610994565b6001600160a01b038216600081815260186020908152604091829020805460ff19168515159081179091558251938452908301527f6b4f1be9103e6cbcd38ca4a922334f2c3109b260130a6676a987f94088fd67469101610a44565b6005546001600160a01b0361010090910416331461120c5760405162461bcd60e51b815260040161099490612c7a565b6001600160a01b0382166112625760405162461bcd60e51b815260206004820152601a60248201527f5f746f6b656e20616464726573732063616e6e6f7420626520300000000000006044820152606401610994565b6001600160a01b038216301415806112825750600c54610100900460ff16155b6112f45760405162461bcd60e51b815260206004820152603460248201527f43616e2774207769746864726177206e617469766520746f6b656e732077686960448201527f6c652074726164696e67206973206163746976650000000000000000000000006064820152608401610994565b6040516370a0823160e01b81523060048201526000906001600160a01b038416906370a0823190602401602060405180830381865afa15801561133b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061135f9190612e3e565b905061136c83838361253f565b604080516001600160a01b0385168152602081018390527fdeda980967fcead7b61e78ac46a4da14274af29e894d4d61e8b81ec38ab3e438910160405180910390a1505050565b6005546001600160a01b036101009091041633146113e35760405162461bcd60e51b815260040161099490612c7a565b600c54610100900460ff161561144f5760405162461bcd60e51b815260206004820152602b60248201527f54726164696e6720697320616c7265616479206163746976652c2063616e6e6f60448201526a3a103932b630bab731b41760a91b6064820152608401610994565b600c805462ffff0019166201010017905543600b556040517fa56feb2d31b9a7424db0be063fd450863979c9e2382cf5110f869bd1ad361bb790600090a1565b6005546001600160a01b036101009091041633146114bf5760405162461bcd60e51b815260040161099490612c7a565b6001600160a01b03811661150b5760405162461bcd60e51b81526020600482015260136024820152720616464726573732063616e6e6f74206265203606c1b6044820152606401610994565b600a805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b0383169081179091556040517fa3b8b92995101e5d1cf18a10af7b30003ab894c4b78b46004621d3c007ace50390600090a250565b606060048054610b2c90612cd8565b6005546001600160a01b036101009091041633146115a15760405162461bcd60e51b815260040161099490612c7a565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316826001600160a01b03161415806115df5750805b6116515760405162461bcd60e51b815260206004820152603960248201527f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d2060448201527f6175746f6d617465644d61726b65744d616b65725061697273000000000000006064820152608401610994565b6001600160a01b0382166000908152601960205260409020805460ff191682151517905561167f8282611180565b604051811515906001600160a01b038416907fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab90600090a35050565b3360009081526001602090815260408083206001600160a01b03861684529091528120548281101561173d5760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b6064820152608401610994565b61174a3385858403611c00565b5060019392505050565b6000610bbc338484611d24565b6005546001600160a01b036101009091041633146117915760405162461bcd60e51b815260040161099490612c7a565b6001600160a01b038216600081815260176020908152604091829020805460ff191685151590811790915591519182527f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7910160405180910390a25050565b6005546001600160a01b036101009091041633146118205760405162461bcd60e51b815260040161099490612c7a565b60055460ff1661183190600a612df6565b61271061183d60025490565b611848906001612e05565b6118529190612e1c565b61185c9190612e1c565b8110156118bd5760405162461bcd60e51b815260206004820152602960248201527f43616e6e6f74207365742077616c6c657420616d6f756e74206c6f776572207460448201526868616e20302e30312560b81b6064820152608401610994565b60055460ff166118ce90600a612df6565b6118d89082612e05565b60078190556040519081527fca869b80d9857b4e591dfb87f841df783ee2d02361537f912d1db7c825ed50ee90602001610d93565b6005546001600160a01b0361010090910416331461193d5760405162461bcd60e51b815260040161099490612c7a565b620186a061194a60025490565b611955906001612e05565b61195f9190612e1c565b8110156119d45760405162461bcd60e51b815260206004820152603560248201527f5377617020616d6f756e742063616e6e6f74206265206c6f776572207468616e60448201527f20302e3030312520746f74616c20737570706c792e00000000000000000000006064820152608401610994565b6103e86119e060025490565b6119eb906001612e05565b6119f59190612e1c565b811115611a6a5760405162461bcd60e51b815260206004820152603460248201527f5377617020616d6f756e742063616e6e6f74206265206869676865722074686160448201527f6e20302e312520746f74616c20737570706c792e0000000000000000000000006064820152608401610994565b60098190556040518181527f7c26bfee26f82e8cb57af48f4019cc64582db6fac7bad778433f10572ae8b14590602001610d93565b6005546001600160a01b03610100909104163314611acf5760405162461bcd60e51b815260040161099490612c7a565b600e805460ff191690556040517fa29c2b578a5a679452d146ddd35ea04a2e7c57fe555cc7a3d91b3b8b06e6103d90600090a1565b6005546001600160a01b03610100909104163314611b345760405162461bcd60e51b815260040161099490612c7a565b6001600160a01b038116611b995760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610994565b6005546040516001600160a01b0380841692610100900416907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3600580546001600160a01b0390921661010002610100600160a81b0319909216919091179055565b6001600160a01b038316611c625760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610994565b6001600160a01b038216611cc35760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610994565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6001600160a01b038316611d4a5760405162461bcd60e51b815260040161099490612e57565b6001600160a01b038216611d705760405162461bcd60e51b815260040161099490612e9c565b80600003611d8957611d8483836000612591565b505050565b6001600160a01b03831660009081526017602052604090205460ff1680611dc857506001600160a01b03821660009081526017602052604090205460ff165b15611dd857611d84838383612591565b600c54610100900460ff16611e2f5760405162461bcd60e51b815260206004820152601660248201527f54726164696e67206973206e6f74206163746976652e000000000000000000006044820152606401610994565b600c5460ff161561215f57600e5460ff1615611fa2577f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316826001600160a01b031614158015611eb957507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316826001600160a01b031614155b15611fa257326000908152600d60205260409020544390611edb906001612cc5565b108015611f0b57506001600160a01b0382166000908152600d60205260409020544390611f09906001612cc5565b105b611f7d5760405162461bcd60e51b815260206004820152603560248201527f5f7472616e736665723a3a205472616e736665722044656c617920656e61626c60448201527f65642e202054727920616761696e206c617465722e00000000000000000000006064820152608401610994565b326000908152600d602052604080822043908190556001600160a01b03851683529120555b6001600160a01b03831660009081526019602052604090205460ff168015611fe357506001600160a01b03821660009081526018602052604090205460ff16155b156120cb5760065481111561204b5760405162461bcd60e51b815260206004820152602860248201527f427579207472616e7366657220616d6f756e742065786365656473207468652060448201526736b0bc10313abc9760c11b6064820152608401610994565b6007548161206e846001600160a01b031660009081526020819052604090205490565b6120789190612cc5565b11156120c65760405162461bcd60e51b815260206004820152601a60248201527f4578636565647320746865206d617857616c6c657453697a652e0000000000006044820152606401610994565b61215f565b6001600160a01b03821660009081526018602052604090205460ff1661215f576007546001600160a01b0383166000908152602081905260409020546121119083612cc5565b111561215f5760405162461bcd60e51b815260206004820152601860248201527f43616e6e6f7420457863656564206d61782077616c6c657400000000000000006044820152606401610994565b600954306000908152602081905260409020541180156121875750600c5462010000900460ff165b8015612196575060085460ff16155b80156121ba57506001600160a01b03821660009081526019602052604090205460ff165b156121df576008805460ff191660011790556121d461236d565b6008805460ff191690555b6001600160a01b03821660009081526019602052604081205460ff16801561220957506000601254115b156122915760646012548361221e9190612e05565b6122289190612e1c565b90506012546014548261223b9190612e05565b6122459190612e1c565b601660008282546122569190612cc5565b909155505060125460135461226b9083612e05565b6122759190612e1c565b601560008282546122869190612cc5565b9091555061233e9050565b6001600160a01b03841660009081526019602052604090205460ff1680156122bb57506000600f54115b1561233e576064600f54836122d09190612e05565b6122da9190612e1c565b9050600f54601154826122ed9190612e05565b6122f79190612e1c565b601660008282546123089190612cc5565b9091555050600f5460105461231d9083612e05565b6123279190612e1c565b601560008282546123389190612cc5565b90915550505b801561235c5761234f843083612591565b6123598183612edf565b91505b612367848484612591565b50505050565b30600090815260208190526040812054600060165460155461238f9190612cc5565b905081158061239c575080155b156123a657505050565b6009546123b490603c612e05565b8211156123cc576009546123c990603c612e05565b91505b601654156124a757600081601654846123e59190612e05565b6123ef9190612e1c565b905061241c307f000000000000000000000000000000000000000000000000000000000000000083612591565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663fff6cae96040518163ffffffff1660e01b8152600401600060405180830381600087803b15801561247757600080fd5b505af1925050508015612488575060015b506124938184612edf565b9250601654826124a39190612edf565b9150505b6124b0826126e6565b601554479060009083906124c49084612e05565b6124ce9190612e1c565b600060158190556016559050801561253857600a546040516001600160a01b03909116908290600081818185875af1925050503d806000811461252d576040519150601f19603f3d011682016040523d82523d6000602084013e612532565b606091505b50909550505b5050505050565b604080516001600160a01b038416602482015260448082018490528251808303909101815260649091019091526020810180516001600160e01b031663a9059cbb60e01b179052611d8490849061286b565b6001600160a01b0383166125b75760405162461bcd60e51b815260040161099490612e57565b6001600160a01b0382166125dd5760405162461bcd60e51b815260040161099490612e9c565b6001600160a01b038316600090815260208190526040902054818110156126555760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b6064820152608401610994565b6001600160a01b0380851660009081526020819052604080822085850390559185168152908120805484929061268c908490612cc5565b92505081905550826001600160a01b0316846001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516126d891815260200190565b60405180910390a350505050565b604080516002808252606082018352600092602083019080368337019050509050308160008151811061271b5761271b612ef2565b60200260200101906001600160a01b031690816001600160a01b0316815250507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015612799573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906127bd9190612f08565b816001815181106127d0576127d0612ef2565b6001600160a01b03928316602091820292909201015260405163791ac94760e01b81527f00000000000000000000000000000000000000000000000000000000000000009091169063791ac94790612835908590600090869030904290600401612f25565b600060405180830381600087803b15801561284f57600080fd5b505af1158015612863573d6000803e3d6000fd5b505050505050565b60006128c0826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b031661293d9092919063ffffffff16565b805190915015611d8457808060200190518101906128de9190612f96565b611d845760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b6064820152608401610994565b606061294c8484600085612954565b949350505050565b6060824710156129b55760405162461bcd60e51b815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f6044820152651c8818d85b1b60d21b6064820152608401610994565b600080866001600160a01b031685876040516129d19190612fb3565b60006040518083038185875af1925050503d8060008114612a0e576040519150601f19603f3d011682016040523d82523d6000602084013e612a13565b606091505b5091509150612a2487838387612a2f565b979650505050505050565b60608315612a9e578251600003612a97576001600160a01b0385163b612a975760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401610994565b508161294c565b61294c8383815115612ab35781518083602001fd5b8060405162461bcd60e51b81526004016109949190612b13565b60008060408385031215612ae057600080fd5b50508035926020909101359150565b60005b83811015612b0a578181015183820152602001612af2565b50506000910152565b6020815260008251806020840152612b32816040850160208701612aef565b601f01601f19169190910160400192915050565b6001600160a01b0381168114610b1a57600080fd5b60008060408385031215612b6e57600080fd5b8235612b7981612b46565b946020939093013593505050565b600060208284031215612b9957600080fd5b8135612ba481612b46565b9392505050565b600080600060608486031215612bc057600080fd5b8335612bcb81612b46565b92506020840135612bdb81612b46565b929592945050506040919091013590565b600060208284031215612bfe57600080fd5b5035919050565b8015158114610b1a57600080fd5b60008060408385031215612c2657600080fd5b8235612c3181612b46565b91506020830135612c4181612c05565b809150509250929050565b60008060408385031215612c5f57600080fd5b8235612c6a81612b46565b91506020830135612c4181612b46565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b634e487b7160e01b600052601160045260246000fd5b80820180821115610bc057610bc0612caf565b600181811c90821680612cec57607f821691505b602082108103612d0c57634e487b7160e01b600052602260045260246000fd5b50919050565b600181815b80851115612d4d578160001904821115612d3357612d33612caf565b80851615612d4057918102915b93841c9390800290612d17565b509250929050565b600082612d6457506001610bc0565b81612d7157506000610bc0565b8160018114612d875760028114612d9157612dad565b6001915050610bc0565b60ff841115612da257612da2612caf565b50506001821b610bc0565b5060208310610133831016604e8410600b8410161715612dd0575081810a610bc0565b612dda8383612d12565b8060001904821115612dee57612dee612caf565b029392505050565b6000612ba460ff841683612d55565b8082028115828204841417610bc057610bc0612caf565b600082612e3957634e487b7160e01b600052601260045260246000fd5b500490565b600060208284031215612e5057600080fd5b5051919050565b60208082526025908201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604082015264647265737360d81b606082015260800190565b60208082526023908201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260408201526265737360e81b606082015260800190565b81810381811115610bc057610bc0612caf565b634e487b7160e01b600052603260045260246000fd5b600060208284031215612f1a57600080fd5b8151612ba481612b46565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b81811015612f755784516001600160a01b031683529383019391830191600101612f50565b50506001600160a01b03969096166060850152505050608001529392505050565b600060208284031215612fa857600080fd5b8151612ba481612c05565b60008251612fc5818460208701612aef565b919091019291505056fea2646970667358221220e2bcf2a38f265943b8516ea9d40757012e3b64f21957b0e2ef72cae2152f795e64736f6c634300081100334f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65728be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0

Deployed Bytecode

0x60806040526004361061032d5760003560e01c80638a8c523c116101a5578063c0246668116100ec578063e2f4560511610095578063f11a24d31161006f578063f11a24d314610902578063f2fde38b14610918578063f637434214610938578063f8a25a941461094e57600080fd5b8063e2f45605146108c1578063e884f260146108d7578063ee40166e146108ec57600080fd5b8063d257b34f116100c6578063d257b34f14610845578063d85ba06314610865578063dd62ed3e1461087b57600080fd5b8063c0246668146107eb578063c18bc1951461080b578063c876d0b91461082b57600080fd5b8063a457c2d71161014e578063aa4bde2811610128578063aa4bde2814610786578063b62496f51461079c578063bbc0c742146107cc57600080fd5b8063a457c2d714610726578063a5ece94114610746578063a9059cbb1461076657600080fd5b8063941fa5cd1161017f578063941fa5cd146106db57806395d89b41146106f15780639a7a23d61461070657600080fd5b80638a8c523c146106835780638da5cb5b14610698578063906e9dd0146106bb57600080fd5b806339509351116102745780636ddd17131161021d578063751039fc116101f7578063751039fc146106185780637571336a1461062d5780638366e79a1461064d57806388e765ff1461066d57600080fd5b80636ddd1713146105ad57806370a08231146105cd578063715018a61461060357600080fd5b806351f205e41161024e57806351f205e41461056257806366ca9b83146105775780636a486a8e1461059757600080fd5b806339509351146104f4578063452ed4f1146105145780634a62bb651461054857600080fd5b806318160ddd116102d657806323b872dd116102b057806323b872dd146104925780632be32b61146104b2578063313ce567146104d257600080fd5b806318160ddd146104475780631a8145bb146104665780631f7ea8da1461047c57600080fd5b80630758d924116103075780630758d9241461039b578063095ea7b3146103e757806310d5de531461041757600080fd5b806302dbd8f81461033957806306e99fef1461035b57806306fdde031461037057600080fd5b3661033457005b600080fd5b34801561034557600080fd5b50610359610354366004612acd565b610964565b005b34801561036757600080fd5b50610359610a50565b34801561037c57600080fd5b50610385610b1d565b6040516103929190612b13565b60405180910390f35b3480156103a757600080fd5b506103cf7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d81565b6040516001600160a01b039091168152602001610392565b3480156103f357600080fd5b50610407610402366004612b5b565b610baf565b6040519015158152602001610392565b34801561042357600080fd5b50610407610432366004612b87565b60186020526000908152604090205460ff1681565b34801561045357600080fd5b506002545b604051908152602001610392565b34801561047257600080fd5b5061045860165481565b34801561048857600080fd5b5061045860155481565b34801561049e57600080fd5b506104076104ad366004612bab565b610bc6565b3480156104be57600080fd5b506103596104cd366004612bec565b610c79565b3480156104de57600080fd5b5060055460405160ff9091168152602001610392565b34801561050057600080fd5b5061040761050f366004612b5b565b610d9e565b34801561052057600080fd5b506103cf7f000000000000000000000000e3e61fdffb30ae51d72b8dc51702b91beae172ea81565b34801561055457600080fd5b50600c546104079060ff1681565b34801561056e57600080fd5b50610359610dda565b34801561058357600080fd5b50610359610592366004612acd565b610ee7565b3480156105a357600080fd5b5061045860125481565b3480156105b957600080fd5b50600c546104079062010000900460ff1681565b3480156105d957600080fd5b506104586105e8366004612b87565b6001600160a01b031660009081526020819052604090205490565b34801561060f57600080fd5b50610359610fbd565b34801561062457600080fd5b5061035961103d565b34801561063957600080fd5b50610359610648366004612c13565b6110ba565b34801561065957600080fd5b50610359610668366004612c4c565b6111dc565b34801561067957600080fd5b5061045860065481565b34801561068f57600080fd5b506103596113b3565b3480156106a457600080fd5b5060055461010090046001600160a01b03166103cf565b3480156106c757600080fd5b506103596106d6366004612b87565b61148f565b3480156106e757600080fd5b5061045860105481565b3480156106fd57600080fd5b50610385611562565b34801561071257600080fd5b50610359610721366004612c13565b611571565b34801561073257600080fd5b50610407610741366004612b5b565b6116bb565b34801561075257600080fd5b50600a546103cf906001600160a01b031681565b34801561077257600080fd5b50610407610781366004612b5b565b611754565b34801561079257600080fd5b5061045860075481565b3480156107a857600080fd5b506104076107b7366004612b87565b60196020526000908152604090205460ff1681565b3480156107d857600080fd5b50600c5461040790610100900460ff1681565b3480156107f757600080fd5b50610359610806366004612c13565b611761565b34801561081757600080fd5b50610359610826366004612bec565b6117f0565b34801561083757600080fd5b50600e546104079060ff1681565b34801561085157600080fd5b50610359610860366004612bec565b61190d565b34801561087157600080fd5b50610458600f5481565b34801561088757600080fd5b50610458610896366004612c4c565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b3480156108cd57600080fd5b5061045860095481565b3480156108e357600080fd5b50610359611a9f565b3480156108f857600080fd5b50610458600b5481565b34801561090e57600080fd5b5061045860115481565b34801561092457600080fd5b50610359610933366004612b87565b611b04565b34801561094457600080fd5b5061045860145481565b34801561095a57600080fd5b5061045860135481565b6005546001600160a01b0361010090910416331461099d5760405162461bcd60e51b815260040161099490612c7a565b60405180910390fd5b601382905560148190556109b18183612cc5565b601281905560501015610a115760405162461bcd60e51b815260206004820152602260248201527f4d757374206b6565702073656c6c206665657320617420383025206f72206c65604482015261737360f01b6064820152608401610994565b7f274faecd49018fb411281f27986b6b4acc86e5db4100735531acd18b7b6d5f93601254604051610a4491815260200190565b60405180910390a15050565b6005546001600160a01b03610100909104163314610a805760405162461bcd60e51b815260040161099490612c7a565b604051600090339047908381818185875af1925050503d8060008114610ac2576040519150601f19603f3d011682016040523d82523d6000602084013e610ac7565b606091505b50508091505080610b1a5760405162461bcd60e51b815260206004820152601560248201527f776974686472617720756e7375636365737366756c00000000000000000000006044820152606401610994565b50565b606060038054610b2c90612cd8565b80601f0160208091040260200160405190810160405280929190818152602001828054610b5890612cd8565b8015610ba55780601f10610b7a57610100808354040283529160200191610ba5565b820191906000526020600020905b815481529060010190602001808311610b8857829003601f168201915b5050505050905090565b6000610bbc338484611c00565b5060015b92915050565b6000610bd3848484611d24565b6001600160a01b03841660009081526001602090815260408083203384529091529020546000198114610c6e5782811015610c615760405162461bcd60e51b815260206004820152602860248201527f45524332303a207472616e7366657220616d6f756e74206578636565647320616044820152676c6c6f77616e636560c01b6064820152608401610994565b610c6e8533858403611c00565b506001949350505050565b6005546001600160a01b03610100909104163314610ca95760405162461bcd60e51b815260040161099490612c7a565b60055460ff16610cba90600a612df6565b612710610cc660025490565b610cd1906001612e05565b610cdb9190612e1c565b610ce59190612e1c565b811015610d475760405162461bcd60e51b815260206004820152602a60248201527f43616e6e6f7420736574206d61782062757920616d6f756e74206c6f776572206044820152697468616e20302e30312560b01b6064820152608401610994565b60055460ff16610d5890600a612df6565b610d629082612e05565b60068190556040519081527ffcc0366804aaa8dbf88a2924100c733b70dec8445957a5d5f8ff92898de41009906020015b60405180910390a150565b3360008181526001602090815260408083206001600160a01b03871684529091528120549091610bbc918590610dd5908690612cc5565b611c00565b6005546001600160a01b03610100909104163314610e0a5760405162461bcd60e51b815260040161099490612c7a565b600954306000908152602081905260409020541015610e93576040805162461bcd60e51b81526020600482015260248101919091527f43616e206f6e6c792073776170207768656e20746f6b656e20616d6f756e742060448201527f6973206174206f7220686967686572207468616e207265737472696374696f6e6064820152608401610994565b6008805460ff19166001179055610ea861236d565b6008805460ff191690556040514281527f1b56c383f4f48fc992e45667ea4eabae777b9cca68b516a9562d8cda78f1bb329060200160405180910390a1565b6005546001600160a01b03610100909104163314610f175760405162461bcd60e51b815260040161099490612c7a565b60108290556011819055610f2b8183612cc5565b600f81905560501015610f8a5760405162461bcd60e51b815260206004820152602160248201527f4d757374206b65657020627579206665657320617420383025206f72206c65736044820152607360f81b6064820152608401610994565b7f03cd3090e7c409e4a7ffd2d90ff610979f4a94a87a512188b7b615671bfb772f600f54604051610a4491815260200190565b6005546001600160a01b03610100909104163314610fed5760405162461bcd60e51b815260040161099490612c7a565b60055460405160009161010090046001600160a01b0316907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a360058054610100600160a81b0319169055565b6005546001600160a01b0361010090910416331461106d5760405162461bcd60e51b815260040161099490612c7a565b600c805460ff19908116909155600e805490911690556002546006556002546007556040517fa4ffae85e880608d5d4365c2b682786545d136145537788e7e0940dff9f0b98c90600090a1565b6005546001600160a01b036101009091041633146110ea5760405162461bcd60e51b815260040161099490612c7a565b80611180577f000000000000000000000000e3e61fdffb30ae51d72b8dc51702b91beae172ea6001600160a01b0316826001600160a01b0316036111805760405162461bcd60e51b815260206004820152602760248201527f43616e6e6f742072656d6f766520756e697377617020706169722066726f6d2060448201526636b0bc103a3c3760c91b6064820152608401610994565b6001600160a01b038216600081815260186020908152604091829020805460ff19168515159081179091558251938452908301527f6b4f1be9103e6cbcd38ca4a922334f2c3109b260130a6676a987f94088fd67469101610a44565b6005546001600160a01b0361010090910416331461120c5760405162461bcd60e51b815260040161099490612c7a565b6001600160a01b0382166112625760405162461bcd60e51b815260206004820152601a60248201527f5f746f6b656e20616464726573732063616e6e6f7420626520300000000000006044820152606401610994565b6001600160a01b038216301415806112825750600c54610100900460ff16155b6112f45760405162461bcd60e51b815260206004820152603460248201527f43616e2774207769746864726177206e617469766520746f6b656e732077686960448201527f6c652074726164696e67206973206163746976650000000000000000000000006064820152608401610994565b6040516370a0823160e01b81523060048201526000906001600160a01b038416906370a0823190602401602060405180830381865afa15801561133b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061135f9190612e3e565b905061136c83838361253f565b604080516001600160a01b0385168152602081018390527fdeda980967fcead7b61e78ac46a4da14274af29e894d4d61e8b81ec38ab3e438910160405180910390a1505050565b6005546001600160a01b036101009091041633146113e35760405162461bcd60e51b815260040161099490612c7a565b600c54610100900460ff161561144f5760405162461bcd60e51b815260206004820152602b60248201527f54726164696e6720697320616c7265616479206163746976652c2063616e6e6f60448201526a3a103932b630bab731b41760a91b6064820152608401610994565b600c805462ffff0019166201010017905543600b556040517fa56feb2d31b9a7424db0be063fd450863979c9e2382cf5110f869bd1ad361bb790600090a1565b6005546001600160a01b036101009091041633146114bf5760405162461bcd60e51b815260040161099490612c7a565b6001600160a01b03811661150b5760405162461bcd60e51b81526020600482015260136024820152720616464726573732063616e6e6f74206265203606c1b6044820152606401610994565b600a805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b0383169081179091556040517fa3b8b92995101e5d1cf18a10af7b30003ab894c4b78b46004621d3c007ace50390600090a250565b606060048054610b2c90612cd8565b6005546001600160a01b036101009091041633146115a15760405162461bcd60e51b815260040161099490612c7a565b7f000000000000000000000000e3e61fdffb30ae51d72b8dc51702b91beae172ea6001600160a01b0316826001600160a01b03161415806115df5750805b6116515760405162461bcd60e51b815260206004820152603960248201527f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d2060448201527f6175746f6d617465644d61726b65744d616b65725061697273000000000000006064820152608401610994565b6001600160a01b0382166000908152601960205260409020805460ff191682151517905561167f8282611180565b604051811515906001600160a01b038416907fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab90600090a35050565b3360009081526001602090815260408083206001600160a01b03861684529091528120548281101561173d5760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b6064820152608401610994565b61174a3385858403611c00565b5060019392505050565b6000610bbc338484611d24565b6005546001600160a01b036101009091041633146117915760405162461bcd60e51b815260040161099490612c7a565b6001600160a01b038216600081815260176020908152604091829020805460ff191685151590811790915591519182527f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7910160405180910390a25050565b6005546001600160a01b036101009091041633146118205760405162461bcd60e51b815260040161099490612c7a565b60055460ff1661183190600a612df6565b61271061183d60025490565b611848906001612e05565b6118529190612e1c565b61185c9190612e1c565b8110156118bd5760405162461bcd60e51b815260206004820152602960248201527f43616e6e6f74207365742077616c6c657420616d6f756e74206c6f776572207460448201526868616e20302e30312560b81b6064820152608401610994565b60055460ff166118ce90600a612df6565b6118d89082612e05565b60078190556040519081527fca869b80d9857b4e591dfb87f841df783ee2d02361537f912d1db7c825ed50ee90602001610d93565b6005546001600160a01b0361010090910416331461193d5760405162461bcd60e51b815260040161099490612c7a565b620186a061194a60025490565b611955906001612e05565b61195f9190612e1c565b8110156119d45760405162461bcd60e51b815260206004820152603560248201527f5377617020616d6f756e742063616e6e6f74206265206c6f776572207468616e60448201527f20302e3030312520746f74616c20737570706c792e00000000000000000000006064820152608401610994565b6103e86119e060025490565b6119eb906001612e05565b6119f59190612e1c565b811115611a6a5760405162461bcd60e51b815260206004820152603460248201527f5377617020616d6f756e742063616e6e6f74206265206869676865722074686160448201527f6e20302e312520746f74616c20737570706c792e0000000000000000000000006064820152608401610994565b60098190556040518181527f7c26bfee26f82e8cb57af48f4019cc64582db6fac7bad778433f10572ae8b14590602001610d93565b6005546001600160a01b03610100909104163314611acf5760405162461bcd60e51b815260040161099490612c7a565b600e805460ff191690556040517fa29c2b578a5a679452d146ddd35ea04a2e7c57fe555cc7a3d91b3b8b06e6103d90600090a1565b6005546001600160a01b03610100909104163314611b345760405162461bcd60e51b815260040161099490612c7a565b6001600160a01b038116611b995760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610994565b6005546040516001600160a01b0380841692610100900416907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3600580546001600160a01b0390921661010002610100600160a81b0319909216919091179055565b6001600160a01b038316611c625760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610994565b6001600160a01b038216611cc35760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610994565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6001600160a01b038316611d4a5760405162461bcd60e51b815260040161099490612e57565b6001600160a01b038216611d705760405162461bcd60e51b815260040161099490612e9c565b80600003611d8957611d8483836000612591565b505050565b6001600160a01b03831660009081526017602052604090205460ff1680611dc857506001600160a01b03821660009081526017602052604090205460ff165b15611dd857611d84838383612591565b600c54610100900460ff16611e2f5760405162461bcd60e51b815260206004820152601660248201527f54726164696e67206973206e6f74206163746976652e000000000000000000006044820152606401610994565b600c5460ff161561215f57600e5460ff1615611fa2577f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d6001600160a01b0316826001600160a01b031614158015611eb957507f000000000000000000000000e3e61fdffb30ae51d72b8dc51702b91beae172ea6001600160a01b0316826001600160a01b031614155b15611fa257326000908152600d60205260409020544390611edb906001612cc5565b108015611f0b57506001600160a01b0382166000908152600d60205260409020544390611f09906001612cc5565b105b611f7d5760405162461bcd60e51b815260206004820152603560248201527f5f7472616e736665723a3a205472616e736665722044656c617920656e61626c60448201527f65642e202054727920616761696e206c617465722e00000000000000000000006064820152608401610994565b326000908152600d602052604080822043908190556001600160a01b03851683529120555b6001600160a01b03831660009081526019602052604090205460ff168015611fe357506001600160a01b03821660009081526018602052604090205460ff16155b156120cb5760065481111561204b5760405162461bcd60e51b815260206004820152602860248201527f427579207472616e7366657220616d6f756e742065786365656473207468652060448201526736b0bc10313abc9760c11b6064820152608401610994565b6007548161206e846001600160a01b031660009081526020819052604090205490565b6120789190612cc5565b11156120c65760405162461bcd60e51b815260206004820152601a60248201527f4578636565647320746865206d617857616c6c657453697a652e0000000000006044820152606401610994565b61215f565b6001600160a01b03821660009081526018602052604090205460ff1661215f576007546001600160a01b0383166000908152602081905260409020546121119083612cc5565b111561215f5760405162461bcd60e51b815260206004820152601860248201527f43616e6e6f7420457863656564206d61782077616c6c657400000000000000006044820152606401610994565b600954306000908152602081905260409020541180156121875750600c5462010000900460ff165b8015612196575060085460ff16155b80156121ba57506001600160a01b03821660009081526019602052604090205460ff165b156121df576008805460ff191660011790556121d461236d565b6008805460ff191690555b6001600160a01b03821660009081526019602052604081205460ff16801561220957506000601254115b156122915760646012548361221e9190612e05565b6122289190612e1c565b90506012546014548261223b9190612e05565b6122459190612e1c565b601660008282546122569190612cc5565b909155505060125460135461226b9083612e05565b6122759190612e1c565b601560008282546122869190612cc5565b9091555061233e9050565b6001600160a01b03841660009081526019602052604090205460ff1680156122bb57506000600f54115b1561233e576064600f54836122d09190612e05565b6122da9190612e1c565b9050600f54601154826122ed9190612e05565b6122f79190612e1c565b601660008282546123089190612cc5565b9091555050600f5460105461231d9083612e05565b6123279190612e1c565b601560008282546123389190612cc5565b90915550505b801561235c5761234f843083612591565b6123598183612edf565b91505b612367848484612591565b50505050565b30600090815260208190526040812054600060165460155461238f9190612cc5565b905081158061239c575080155b156123a657505050565b6009546123b490603c612e05565b8211156123cc576009546123c990603c612e05565b91505b601654156124a757600081601654846123e59190612e05565b6123ef9190612e1c565b905061241c307f000000000000000000000000e3e61fdffb30ae51d72b8dc51702b91beae172ea83612591565b7f000000000000000000000000e3e61fdffb30ae51d72b8dc51702b91beae172ea6001600160a01b031663fff6cae96040518163ffffffff1660e01b8152600401600060405180830381600087803b15801561247757600080fd5b505af1925050508015612488575060015b506124938184612edf565b9250601654826124a39190612edf565b9150505b6124b0826126e6565b601554479060009083906124c49084612e05565b6124ce9190612e1c565b600060158190556016559050801561253857600a546040516001600160a01b03909116908290600081818185875af1925050503d806000811461252d576040519150601f19603f3d011682016040523d82523d6000602084013e612532565b606091505b50909550505b5050505050565b604080516001600160a01b038416602482015260448082018490528251808303909101815260649091019091526020810180516001600160e01b031663a9059cbb60e01b179052611d8490849061286b565b6001600160a01b0383166125b75760405162461bcd60e51b815260040161099490612e57565b6001600160a01b0382166125dd5760405162461bcd60e51b815260040161099490612e9c565b6001600160a01b038316600090815260208190526040902054818110156126555760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b6064820152608401610994565b6001600160a01b0380851660009081526020819052604080822085850390559185168152908120805484929061268c908490612cc5565b92505081905550826001600160a01b0316846001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516126d891815260200190565b60405180910390a350505050565b604080516002808252606082018352600092602083019080368337019050509050308160008151811061271b5761271b612ef2565b60200260200101906001600160a01b031690816001600160a01b0316815250507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d6001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015612799573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906127bd9190612f08565b816001815181106127d0576127d0612ef2565b6001600160a01b03928316602091820292909201015260405163791ac94760e01b81527f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d9091169063791ac94790612835908590600090869030904290600401612f25565b600060405180830381600087803b15801561284f57600080fd5b505af1158015612863573d6000803e3d6000fd5b505050505050565b60006128c0826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b031661293d9092919063ffffffff16565b805190915015611d8457808060200190518101906128de9190612f96565b611d845760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b6064820152608401610994565b606061294c8484600085612954565b949350505050565b6060824710156129b55760405162461bcd60e51b815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f6044820152651c8818d85b1b60d21b6064820152608401610994565b600080866001600160a01b031685876040516129d19190612fb3565b60006040518083038185875af1925050503d8060008114612a0e576040519150601f19603f3d011682016040523d82523d6000602084013e612a13565b606091505b5091509150612a2487838387612a2f565b979650505050505050565b60608315612a9e578251600003612a97576001600160a01b0385163b612a975760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401610994565b508161294c565b61294c8383815115612ab35781518083602001fd5b8060405162461bcd60e51b81526004016109949190612b13565b60008060408385031215612ae057600080fd5b50508035926020909101359150565b60005b83811015612b0a578181015183820152602001612af2565b50506000910152565b6020815260008251806020840152612b32816040850160208701612aef565b601f01601f19169190910160400192915050565b6001600160a01b0381168114610b1a57600080fd5b60008060408385031215612b6e57600080fd5b8235612b7981612b46565b946020939093013593505050565b600060208284031215612b9957600080fd5b8135612ba481612b46565b9392505050565b600080600060608486031215612bc057600080fd5b8335612bcb81612b46565b92506020840135612bdb81612b46565b929592945050506040919091013590565b600060208284031215612bfe57600080fd5b5035919050565b8015158114610b1a57600080fd5b60008060408385031215612c2657600080fd5b8235612c3181612b46565b91506020830135612c4181612c05565b809150509250929050565b60008060408385031215612c5f57600080fd5b8235612c6a81612b46565b91506020830135612c4181612b46565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b634e487b7160e01b600052601160045260246000fd5b80820180821115610bc057610bc0612caf565b600181811c90821680612cec57607f821691505b602082108103612d0c57634e487b7160e01b600052602260045260246000fd5b50919050565b600181815b80851115612d4d578160001904821115612d3357612d33612caf565b80851615612d4057918102915b93841c9390800290612d17565b509250929050565b600082612d6457506001610bc0565b81612d7157506000610bc0565b8160018114612d875760028114612d9157612dad565b6001915050610bc0565b60ff841115612da257612da2612caf565b50506001821b610bc0565b5060208310610133831016604e8410600b8410161715612dd0575081810a610bc0565b612dda8383612d12565b8060001904821115612dee57612dee612caf565b029392505050565b6000612ba460ff841683612d55565b8082028115828204841417610bc057610bc0612caf565b600082612e3957634e487b7160e01b600052601260045260246000fd5b500490565b600060208284031215612e5057600080fd5b5051919050565b60208082526025908201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604082015264647265737360d81b606082015260800190565b60208082526023908201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260408201526265737360e81b606082015260800190565b81810381811115610bc057610bc0612caf565b634e487b7160e01b600052603260045260246000fd5b600060208284031215612f1a57600080fd5b8151612ba481612b46565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b81811015612f755784516001600160a01b031683529383019391830191600101612f50565b50506001600160a01b03969096166060850152505050608001529392505050565b600060208284031215612fa857600080fd5b8151612ba481612c05565b60008251612fc5818460208701612aef565b919091019291505056fea2646970667358221220e2bcf2a38f265943b8516ea9d40757012e3b64f21957b0e2ef72cae2152f795e64736f6c63430008110033

Deployed Bytecode Sourcemap

16994:13960:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;24657:343;;;;;;;;;;-1:-1:-1;24657:343:0;;;;;:::i;:::-;;:::i;:::-;;29631:195;;;;;;;;;;;;;:::i;11147:100::-;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17116:37;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;1106:55:1;;;1088:74;;1076:2;1061:18;17116:37:0;923:245:1;12068:169:0;;;;;;;;;;-1:-1:-1;12068:169:0;;;;;:::i;:::-;;:::i;:::-;;;1817:14:1;;1810:22;1792:41;;1780:2;1765:18;12068:169:0;1652:187:1;18090:64:0;;;;;;;;;;-1:-1:-1;18090:64:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;11475:108;;;;;;;;;;-1:-1:-1;11563:12:0;;11475:108;;;2242:25:1;;;2230:2;2215:18;11475:108:0;2096:177:1;17984:33:0;;;;;;;;;;;;;;;;17947:30;;;;;;;;;;;;;;;;12245:537;;;;;;;;;;-1:-1:-1;12245:537:0;;;;;:::i;:::-;;:::i;22324:291::-;;;;;;;;;;-1:-1:-1;22324:291:0;;;;;:::i;:::-;;:::i;11367:100::-;;;;;;;;;;-1:-1:-1;11450:9:0;;11367:100;;11450:9;;;;3066:36:1;;3054:2;3039:18;11367:100:0;2924:184:1;12790:215:0;;;;;;;;;;-1:-1:-1;12790:215:0;;;;;:::i;:::-;;:::i;17160:31::-;;;;;;;;;;;;;;;17389:33;;;;;;;;;;-1:-1:-1;17389:33:0;;;;;;;;30639:312;;;;;;;;;;;;;:::i;24316:333::-;;;;;;;;;;-1:-1:-1;24316:333:0;;;;;:::i;:::-;;:::i;17840:28::-;;;;;;;;;;;;;;;;17469:31;;;;;;;;;;-1:-1:-1;17469:31:0;;;;;;;;;;;11591:127;;;;;;;;;;-1:-1:-1;11591:127:0;;;;;:::i;:::-;-1:-1:-1;;;;;11692:18:0;11665:7;11692:18;;;;;;;;;;;;11591:127;15212:150;;;;;;;;;;;;;:::i;21879:235::-;;;;;;;;;;;;;:::i;23639:313::-;;;;;;;;;;-1:-1:-1;23639:313:0;;;;;:::i;:::-;;:::i;29834:483::-;;;;;;;;;;-1:-1:-1;29834:483:0;;;;;:::i;:::-;;:::i;17038:27::-;;;;;;;;;;;;;;;;21558:269;;;;;;;;;;;;;:::i;14998:79::-;;;;;;;;;;-1:-1:-1;15063:6:0;;;;;-1:-1:-1;;;;;15063:6:0;14998:79;;30325:256;;;;;;;;;;-1:-1:-1;30325:256:0;;;;;:::i;:::-;;:::i;17770:24::-;;;;;;;;;;;;;;;;11255:104;;;;;;;;;;;;;:::i;23960:348::-;;;;;;;;;;-1:-1:-1;23960:348:0;;;;;:::i;:::-;;:::i;13013:413::-;;;;;;;;;;-1:-1:-1;13013:413:0;;;;;:::i;:::-;;:::i;17270:31::-;;;;;;;;;;-1:-1:-1;17270:31:0;;;;-1:-1:-1;;;;;17270:31:0;;;11726:175;;;;;;;;;;-1:-1:-1;11726:175:0;;;;;:::i;:::-;;:::i;17072:30::-;;;;;;;;;;;;;;;;18163:58;;;;;;;;;;-1:-1:-1;18163:58:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;17429:33;;;;;;;;;;-1:-1:-1;17429:33:0;;;;;;;;;;;25008:182;;;;;;;;;;-1:-1:-1;25008:182:0;;;;;:::i;:::-;;:::i;22623:319::-;;;;;;;;;;-1:-1:-1;22623:319:0;;;;;:::i;:::-;;:::i;17688:39::-;;;;;;;;;;-1:-1:-1;17688:39:0;;;;;;;;23014:398;;;;;;;;;;-1:-1:-1;23014:398:0;;;;;:::i;:::-;;:::i;17736:27::-;;;;;;;;;;;;;;;;11909:151;;;;;;;;;;-1:-1:-1;11909:151:0;;;;;:::i;:::-;-1:-1:-1;;;;;12025:18:0;;;11998:7;12025:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;11909:151;17228:33;;;;;;;;;;;;;;;;22175:137;;;;;;;;;;;;;:::i;17310:37::-;;;;;;;;;;;;;;;;17801:30;;;;;;;;;;;;;;;;15370:244;;;;;;;;;;-1:-1:-1;15370:244:0;;;;;:::i;:::-;;:::i;17907:31::-;;;;;;;;;;;;;;;;17875:25;;;;;;;;;;;;;;;;24657:343;15125:6;;-1:-1:-1;;;;;15125:6:0;;;;;2772:10;15125:22;15117:67;;;;-1:-1:-1;;;15117:67:0;;;;;;;:::i;:::-;;;;;;;;;24751:10:::1;:20:::0;;;24782:16:::1;:32:::0;;;24841:29:::1;24801:13:::0;24764:7;24841:29:::1;:::i;:::-;24825:13;:45:::0;;;24906:2:::1;-1:-1:-1::0;24889:19:0::1;24881:66;;;::::0;-1:-1:-1;;;24881:66:0;;5072:2:1;24881:66:0::1;::::0;::::1;5054:21:1::0;5111:2;5091:18;;;5084:30;5150:34;5130:18;;;5123:62;-1:-1:-1;;;5201:18:1;;;5194:32;5243:19;;24881:66:0::1;4870:398:1::0;24881:66:0::1;24963:29;24978:13;;24963:29;;;;2242:25:1::0;;2230:2;2215:18;;2096:177;24963:29:0::1;;;;;;;;24657:343:::0;;:::o;29631:195::-;15125:6;;-1:-1:-1;;;;;15125:6:0;;;;;2772:10;15125:22;15117:67;;;;-1:-1:-1;;;15117:67:0;;;;;;;:::i;:::-;29717:49:::1;::::0;29680:12:::1;::::0;29717:10:::1;::::0;29740:21:::1;::::0;29680:12;29717:49;29680:12;29717:49;29740:21;29717:10;:49:::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29703:63;;;;;29785:7;29777:41;;;::::0;-1:-1:-1;;;29777:41:0;;5685:2:1;29777:41:0::1;::::0;::::1;5667:21:1::0;5724:2;5704:18;;;5697:30;5763:23;5743:18;;;5736:51;5804:18;;29777:41:0::1;5483:345:1::0;29777:41:0::1;29669:157;29631:195::o:0;11147:100::-;11201:13;11234:5;11227:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11147:100;:::o;12068:169::-;12151:4;12168:39;2772:10;12191:7;12200:6;12168:8;:39::i;:::-;-1:-1:-1;12225:4:0;12068:169;;;;;:::o;12245:537::-;12351:4;12368:36;12378:6;12386:9;12397:6;12368:9;:36::i;:::-;-1:-1:-1;;;;;12444:19:0;;12417:24;12444:19;;;:11;:19;;;;;;;;2772:10;12444:33;;;;;;;;-1:-1:-1;;12491:37:0;;12488:263;;12572:6;12552:16;:26;;12544:79;;;;-1:-1:-1;;;12544:79:0;;6420:2:1;12544:79:0;;;6402:21:1;6459:2;6439:18;;;6432:30;6498:34;6478:18;;;6471:62;-1:-1:-1;;;6549:18:1;;;6542:38;6597:19;;12544:79:0;6218:404:1;12544:79:0;12667:57;12676:6;2772:10;12717:6;12698:16;:25;12667:8;:57::i;:::-;-1:-1:-1;12770:4:0;;12245:537;-1:-1:-1;;;;12245:537:0:o;22324:291::-;15125:6;;-1:-1:-1;;;;;15125:6:0;;;;;2772:10;15125:22;15117:67;;;;-1:-1:-1;;;15117:67:0;;;;;;;:::i;:::-;11450:9;;;;22445:14:::1;::::0;:2:::1;:14;:::i;:::-;22437:5;22417:13;11563:12:::0;;;11475:108;22417:13:::1;:17;::::0;22433:1:::1;22417:17;:::i;:::-;:25;;;;:::i;:::-;22416:44;;;;:::i;:::-;22406:6;:54;;22398:109;;;::::0;-1:-1:-1;;;22398:109:0;;8607:2:1;22398:109:0::1;::::0;::::1;8589:21:1::0;8646:2;8626:18;;;8619:30;8685:34;8665:18;;;8658:62;-1:-1:-1;;;8736:18:1;;;8729:40;8786:19;;22398:109:0::1;8405:406:1::0;22398:109:0::1;11450:9:::0;;;;22543:14:::1;::::0;:2:::1;:14;:::i;:::-;22533:25;::::0;:6;:25:::1;:::i;:::-;22518:12;:40:::0;;;22574:33:::1;::::0;2242:25:1;;;22574:33:0::1;::::0;2230:2:1;2215:18;22574:33:0::1;;;;;;;;22324:291:::0;:::o;12790:215::-;2772:10;12878:4;12927:25;;;:11;:25;;;;;;;;-1:-1:-1;;;;;12927:34:0;;;;;;;;;;12878:4;;12895:80;;12918:7;;12927:47;;12964:10;;12927:47;:::i;:::-;12895:8;:80::i;30639:312::-;15125:6;;-1:-1:-1;;;;;15125:6:0;;;;;2772:10;15125:22;15117:67;;;;-1:-1:-1;;;15117:67:0;;;;;;;:::i;:::-;30730:18:::1;::::0;30720:4:::1;11665:7:::0;11692:18;;;;;;;;;;;30702:46:::1;;30694:123;;;::::0;;-1:-1:-1;;;30694:123:0;;9018:2:1;30694:123:0::1;::::0;::::1;9000:21:1::0;9037:18;;;9030:30;;;;9096:34;9076:18;;;9069:62;9167:34;9147:18;;;9140:62;9219:19;;30694:123:0::1;8816:428:1::0;30694:123:0::1;30828:8;:15:::0;;-1:-1:-1;;30828:15:0::1;30839:4;30828:15;::::0;;30854:10:::1;:8;:10::i;:::-;30875:8;:16:::0;;-1:-1:-1;;30875:16:0::1;::::0;;30907:36:::1;::::0;30927:15:::1;2242:25:1::0;;30907:36:0::1;::::0;2230:2:1;2215:18;30907:36:0::1;;;;;;;30639:312::o:0;24316:333::-;15125:6;;-1:-1:-1;;;;;15125:6:0;;;;;2772:10;15125:22;15117:67;;;;-1:-1:-1;;;15117:67:0;;;;;;;:::i;:::-;24409:9:::1;:19:::0;;;24439:15:::1;:31:::0;;;24496:27:::1;24457:13:::0;24421:7;24496:27:::1;:::i;:::-;24481:12;:42:::0;;;24558:2:::1;-1:-1:-1::0;24542:18:0::1;24534:64;;;::::0;-1:-1:-1;;;24534:64:0;;9451:2:1;24534:64:0::1;::::0;::::1;9433:21:1::0;9490:2;9470:18;;;9463:30;9529:34;9509:18;;;9502:62;-1:-1:-1;;;9580:18:1;;;9573:31;9621:19;;24534:64:0::1;9249:397:1::0;24534:64:0::1;24614:27;24628:12;;24614:27;;;;2242:25:1::0;;2230:2;2215:18;;2096:177;15212:150:0;15125:6;;-1:-1:-1;;;;;15125:6:0;;;;;2772:10;15125:22;15117:67;;;;-1:-1:-1;;;15117:67:0;;;;;;;:::i;:::-;15305:6:::1;::::0;15284:40:::1;::::0;15321:1:::1;::::0;15305:6:::1;::::0;::::1;-1:-1:-1::0;;;;;15305:6:0::1;::::0;15284:40:::1;::::0;15321:1;;15284:40:::1;15335:6;:19:::0;;-1:-1:-1;;;;;;15335:19:0::1;::::0;;15212:150::o;21879:235::-;15125:6;;-1:-1:-1;;;;;15125:6:0;;;;;2772:10;15125:22;15117:67;;;;-1:-1:-1;;;15117:67:0;;;;;;;:::i;:::-;21933:14:::1;:22:::0;;-1:-1:-1;;21933:22:0;;::::1;::::0;;;21966:20:::1;:28:::0;;;;::::1;::::0;;11563:12;;22005::::1;:28:::0;11563:12;;22044:15:::1;:31:::0;22091:15:::1;::::0;::::1;::::0;;;::::1;21879:235::o:0;23639:313::-;15125:6;;-1:-1:-1;;;;;15125:6:0;;;;;2772:10;15125:22;15117:67;;;;-1:-1:-1;;;15117:67:0;;;;;;;:::i;:::-;23735:4:::1;23731:104;;23773:6;-1:-1:-1::0;;;;;23763:16:0::1;:6;-1:-1:-1::0;;;;;23763:16:0::1;::::0;23755:68:::1;;;::::0;-1:-1:-1;;;23755:68:0;;9853:2:1;23755:68:0::1;::::0;::::1;9835:21:1::0;9892:2;9872:18;;;9865:30;9931:34;9911:18;;;9904:62;-1:-1:-1;;;9982:18:1;;;9975:37;10029:19;;23755:68:0::1;9651:403:1::0;23755:68:0::1;-1:-1:-1::0;;;;;23845:39:0;::::1;;::::0;;;:31:::1;:39;::::0;;;;;;;;:46;;-1:-1:-1;;23845:46:0::1;::::0;::::1;;::::0;;::::1;::::0;;;23907:37;;10227:74:1;;;10317:18;;;10310:50;23907:37:0::1;::::0;10200:18:1;23907:37:0::1;10059:307:1::0;29834:483:0;15125:6;;-1:-1:-1;;;;;15125:6:0;;;;;2772:10;15125:22;15117:67;;;;-1:-1:-1;;;15117:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;29931:20:0;::::1;29923:59;;;::::0;-1:-1:-1;;;29923:59:0;;10573:2:1;29923:59:0::1;::::0;::::1;10555:21:1::0;10612:2;10592:18;;;10585:30;10651:28;10631:18;;;10624:56;10697:18;;29923:59:0::1;10371:350:1::0;29923:59:0::1;-1:-1:-1::0;;;;;30001:23:0;::::1;30019:4;30001:23;;::::0;:41:::1;;-1:-1:-1::0;30029:13:0::1;::::0;::::1;::::0;::::1;;;30028:14;30001:41;29993:106;;;::::0;-1:-1:-1;;;29993:106:0;;10928:2:1;29993:106:0::1;::::0;::::1;10910:21:1::0;10967:2;10947:18;;;10940:30;11006:34;10986:18;;;10979:62;11077:22;11057:18;;;11050:50;11117:19;;29993:106:0::1;10726:416:1::0;29993:106:0::1;30137:39;::::0;-1:-1:-1;;;30137:39:0;;30170:4:::1;30137:39;::::0;::::1;1088:74:1::0;30110:24:0::1;::::0;-1:-1:-1;;;;;30137:24:0;::::1;::::0;::::1;::::0;1061:18:1;;30137:39:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;30110:66;;30187:60;30217:6;30225:3;30230:16;30187:22;:60::i;:::-;30263:46;::::0;;-1:-1:-1;;;;;11528:55:1;;11510:74;;11615:2;11600:18;;11593:34;;;30263:46:0::1;::::0;11483:18:1;30263:46:0::1;;;;;;;29912:405;29834:483:::0;;:::o;21558:269::-;15125:6;;-1:-1:-1;;;;;15125:6:0;;;;;2772:10;15125:22;15117:67;;;;-1:-1:-1;;;15117:67:0;;;;;;;:::i;:::-;21622:13:::1;::::0;::::1;::::0;::::1;;;21621:14;21613:70;;;::::0;-1:-1:-1;;;21613:70:0;;11840:2:1;21613:70:0::1;::::0;::::1;11822:21:1::0;11879:2;11859:18;;;11852:30;11918:34;11898:18;;;11891:62;-1:-1:-1;;;11969:18:1;;;11962:41;12020:19;;21613:70:0::1;11638:407:1::0;21613:70:0::1;21694:13;:20:::0;;-1:-1:-1;;21725:18:0;;;;;21775:12:::1;21754:18;:33:::0;21803:16:::1;::::0;::::1;::::0;-1:-1:-1;;21803:16:0::1;21558:269::o:0;30325:256::-;15125:6;;-1:-1:-1;;;;;15125:6:0;;;;;2772:10;15125:22;15117:67;;;;-1:-1:-1;;;15117:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;30416:28:0;::::1;30408:60;;;::::0;-1:-1:-1;;;30408:60:0;;12252:2:1;30408:60:0::1;::::0;::::1;12234:21:1::0;12291:2;12271:18;;;12264:30;-1:-1:-1;;;12310:18:1;;;12303:49;12369:18;;30408:60:0::1;12050:343:1::0;30408:60:0::1;30479:16;:42:::0;;-1:-1:-1;;30479:42:0::1;-1:-1:-1::0;;;;;30479:42:0;::::1;::::0;;::::1;::::0;;;30537:36:::1;::::0;::::1;::::0;-1:-1:-1;;30537:36:0::1;30325:256:::0;:::o;11255:104::-;11311:13;11344:7;11337:14;;;;;:::i;23960:348::-;15125:6;;-1:-1:-1;;;;;15125:6:0;;;;;2772:10;15125:22;15117:67;;;;-1:-1:-1;;;15117:67:0;;;;;;;:::i;:::-;24067:6:::1;-1:-1:-1::0;;;;;24059:14:0::1;:4;-1:-1:-1::0;;;;;24059:14:0::1;;;:23;;;;24077:5;24059:23;24051:93;;;::::0;-1:-1:-1;;;24051:93:0;;12600:2:1;24051:93:0::1;::::0;::::1;12582:21:1::0;12639:2;12619:18;;;12612:30;12678:34;12658:18;;;12651:62;12749:27;12729:18;;;12722:55;12794:19;;24051:93:0::1;12398:421:1::0;24051:93:0::1;-1:-1:-1::0;;;;;24155:31:0;::::1;;::::0;;;:25:::1;:31;::::0;;;;:39;;-1:-1:-1;;24155:39:0::1;::::0;::::1;;;::::0;;24205::::1;24155:31:::0;:39;24205:26:::1;:39::i;:::-;24260:40;::::0;;::::1;;::::0;-1:-1:-1;;;;;24260:40:0;::::1;::::0;::::1;::::0;;;::::1;23960:348:::0;;:::o;13013:413::-;2772:10;13106:4;13150:25;;;:11;:25;;;;;;;;-1:-1:-1;;;;;13150:34:0;;;;;;;;;;13203:35;;;;13195:85;;;;-1:-1:-1;;;13195:85:0;;13026:2:1;13195:85:0;;;13008:21:1;13065:2;13045:18;;;13038:30;13104:34;13084:18;;;13077:62;-1:-1:-1;;;13155:18:1;;;13148:35;13200:19;;13195:85:0;12824:401:1;13195:85:0;13316:67;2772:10;13339:7;13367:15;13348:16;:34;13316:8;:67::i;:::-;-1:-1:-1;13414:4:0;;13013:413;-1:-1:-1;;;13013:413:0:o;11726:175::-;11812:4;11829:42;2772:10;11853:9;11864:6;11829:9;:42::i;25008:182::-;15125:6;;-1:-1:-1;;;;;15125:6:0;;;;;2772:10;15125:22;15117:67;;;;-1:-1:-1;;;15117:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;25093:28:0;::::1;;::::0;;;:19:::1;:28;::::0;;;;;;;;:39;;-1:-1:-1;;25093:39:0::1;::::0;::::1;;::::0;;::::1;::::0;;;25148:34;;1792:41:1;;;25148:34:0::1;::::0;1765:18:1;25148:34:0::1;;;;;;;25008:182:::0;;:::o;22623:319::-;15125:6;;-1:-1:-1;;;;;15125:6:0;;;;;2772:10;15125:22;15117:67;;;;-1:-1:-1;;;15117:67:0;;;;;;;:::i;:::-;11450:9;;;;22759:14:::1;::::0;:2:::1;:14;:::i;:::-;22751:5;22731:13;11563:12:::0;;;11475:108;22731:13:::1;:17;::::0;22747:1:::1;22731:17;:::i;:::-;:25;;;;:::i;:::-;22730:44;;;;:::i;:::-;22714:12;:60;;22706:114;;;::::0;-1:-1:-1;;;22706:114:0;;13432:2:1;22706:114:0::1;::::0;::::1;13414:21:1::0;13471:2;13451:18;;;13444:30;13510:34;13490:18;;;13483:62;-1:-1:-1;;;13561:18:1;;;13554:39;13610:19;;22706:114:0::1;13230:405:1::0;22706:114:0::1;11450:9:::0;;;;22865:14:::1;::::0;:2:::1;:14;:::i;:::-;22849:31;::::0;:12;:31:::1;:::i;:::-;22831:15;:49:::0;;;22896:38:::1;::::0;2242:25:1;;;22896:38:0::1;::::0;2230:2:1;2215:18;22896:38:0::1;2096:177:1::0;23014:398:0;15125:6;;-1:-1:-1;;;;;15125:6:0;;;;;2772:10;15125:22;15117:67;;;;-1:-1:-1;;;15117:67:0;;;;;;;:::i;:::-;23137:6:::1;23117:13;11563:12:::0;;;11475:108;23117:13:::1;:17;::::0;23133:1:::1;23117:17;:::i;:::-;:26;;;;:::i;:::-;23104:9;:39;;23096:105;;;::::0;-1:-1:-1;;;23096:105:0;;13842:2:1;23096:105:0::1;::::0;::::1;13824:21:1::0;13881:2;13861:18;;;13854:30;13920:34;13900:18;;;13893:62;13991:23;13971:18;;;13964:51;14032:19;;23096:105:0::1;13640:417:1::0;23096:105:0::1;23252:4;23232:13;11563:12:::0;;;11475:108;23232:13:::1;:17;::::0;23248:1:::1;23232:17;:::i;:::-;:24;;;;:::i;:::-;23219:9;:37;;23211:102;;;::::0;-1:-1:-1;;;23211:102:0;;14264:2:1;23211:102:0::1;::::0;::::1;14246:21:1::0;14303:2;14283:18;;;14276:30;14342:34;14322:18;;;14315:62;14413:22;14393:18;;;14386:50;14453:19;;23211:102:0::1;14062:416:1::0;23211:102:0::1;23323:18;:30:::0;;;23369:36:::1;::::0;2242:25:1;;;23369:36:0::1;::::0;2230:2:1;2215:18;23369:36:0::1;2096:177:1::0;22175:137:0;15125:6;;-1:-1:-1;;;;;15125:6:0;;;;;2772:10;15125:22;15117:67;;;;-1:-1:-1;;;15117:67:0;;;;;;;:::i;:::-;22237:20:::1;:28:::0;;-1:-1:-1;;22237:28:0::1;::::0;;22281:23:::1;::::0;::::1;::::0;22260:5:::1;::::0;22281:23:::1;22175:137::o:0;15370:244::-;15125:6;;-1:-1:-1;;;;;15125:6:0;;;;;2772:10;15125:22;15117:67;;;;-1:-1:-1;;;15117:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;15459:22:0;::::1;15451:73;;;::::0;-1:-1:-1;;;15451:73:0;;14685:2:1;15451:73:0::1;::::0;::::1;14667:21:1::0;14724:2;14704:18;;;14697:30;14763:34;14743:18;;;14736:62;-1:-1:-1;;;14814:18:1;;;14807:36;14860:19;;15451:73:0::1;14483:402:1::0;15451:73:0::1;15561:6;::::0;15540:38:::1;::::0;-1:-1:-1;;;;;15540:38:0;;::::1;::::0;15561:6:::1;::::0;::::1;;::::0;15540:38:::1;::::0;;;::::1;15589:6;:17:::0;;-1:-1:-1;;;;;15589:17:0;;::::1;;;-1:-1:-1::0;;;;;;15589:17:0;;::::1;::::0;;;::::1;::::0;;15370:244::o;14321:346::-;-1:-1:-1;;;;;14423:19:0;;14415:68;;;;-1:-1:-1;;;14415:68:0;;15092:2:1;14415:68:0;;;15074:21:1;15131:2;15111:18;;;15104:30;15170:34;15150:18;;;15143:62;-1:-1:-1;;;15221:18:1;;;15214:34;15265:19;;14415:68:0;14890:400:1;14415:68:0;-1:-1:-1;;;;;14502:21:0;;14494:68;;;;-1:-1:-1;;;14494:68:0;;15497:2:1;14494:68:0;;;15479:21:1;15536:2;15516:18;;;15509:30;15575:34;15555:18;;;15548:62;-1:-1:-1;;;15626:18:1;;;15619:32;15668:19;;14494:68:0;15295:398:1;14494:68:0;-1:-1:-1;;;;;14575:18:0;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;:36;;;14627:32;;2242:25:1;;;14627:32:0;;2215:18:1;14627:32:0;;;;;;;14321:346;;;:::o;25198:2837::-;-1:-1:-1;;;;;25298:18:0;;25290:68;;;;-1:-1:-1;;;25290:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;25377:16:0;;25369:64;;;;-1:-1:-1;;;25369:64:0;;;;;;;:::i;:::-;25457:6;25467:1;25457:11;25454:91;;25484:28;25500:4;25506:2;25510:1;25484:15;:28::i;:::-;25198:2837;;;:::o;25454:91::-;-1:-1:-1;;;;;25560:25:0;;;;;;:19;:25;;;;;;;;;:52;;-1:-1:-1;;;;;;25589:23:0;;;;;;:19;:23;;;;;;;;25560:52;25557:137;;;25628:33;25644:4;25650:2;25654:6;25628:15;:33::i;25557:137::-;25718:13;;;;;;;25714:77;;25747:32;;-1:-1:-1;;;25747:32:0;;16710:2:1;25747:32:0;;;16692:21:1;16749:2;16729:18;;;16722:30;16788:24;16768:18;;;16761:52;16830:18;;25747:32:0;16508:346:1;25714:77:0;25822:14;;;;25819:1152;;;25986:20;;;;25982:466;;;26044:9;-1:-1:-1;;;;;26030:24:0;:2;-1:-1:-1;;;;;26030:24:0;;;:49;;;;;26072:6;-1:-1:-1;;;;;26058:21:0;:2;-1:-1:-1;;;;;26058:21:0;;;26030:49;26026:407;;;26136:9;26111:35;;;;:24;:35;;;;;;26153:12;;26111:39;;26149:1;26111:39;:::i;:::-;:54;:105;;;;-1:-1:-1;;;;;;26169:28:0;;;;;;:24;:28;;;;;;26204:12;;26169:32;;26200:1;26169:32;:::i;:::-;:47;26111:105;26103:171;;;;-1:-1:-1;;;26103:171:0;;17061:2:1;26103:171:0;;;17043:21:1;17100:2;17080:18;;;17073:30;17139:34;17119:18;;;17112:62;17210:23;17190:18;;;17183:51;17251:19;;26103:171:0;16859:417:1;26103:171:0;26322:9;26297:35;;;;:24;:35;;;;;;26335:12;26297:50;;;;-1:-1:-1;;;;;26370:28:0;;;;;;:43;26026:407;-1:-1:-1;;;;;26508:31:0;;;;;;:25;:31;;;;;;;;:71;;;;-1:-1:-1;;;;;;26544:35:0;;;;;;:31;:35;;;;;;;;26543:36;26508:71;26504:453;;;26618:12;;26608:6;:22;;26600:75;;;;-1:-1:-1;;;26600:75:0;;17483:2:1;26600:75:0;;;17465:21:1;17522:2;17502:18;;;17495:30;17561:34;17541:18;;;17534:62;-1:-1:-1;;;17612:18:1;;;17605:38;17660:19;;26600:75:0;17281:404:1;26600:75:0;26728:15;;26718:6;26702:13;26712:2;-1:-1:-1;;;;;11692:18:0;11665:7;11692:18;;;;;;;;;;;;11591:127;26702:13;:22;;;;:::i;:::-;:41;;26694:80;;;;-1:-1:-1;;;26694:80:0;;17892:2:1;26694:80:0;;;17874:21:1;17931:2;17911:18;;;17904:30;17970:28;17950:18;;;17943:56;18016:18;;26694:80:0;17690:350:1;26694:80:0;26504:453;;;-1:-1:-1;;;;;26804:35:0;;;;;;:31;:35;;;;;;;;26799:158;;26893:15;;-1:-1:-1;;;;;11692:18:0;;11665:7;11692:18;;;;;;;;;;;26867:22;;:6;:22;:::i;:::-;:41;;26859:78;;;;-1:-1:-1;;;26859:78:0;;18247:2:1;26859:78:0;;;18229:21:1;18286:2;18266:18;;;18259:30;18325:26;18305:18;;;18298:54;18369:18;;26859:78:0;18045:348:1;26859:78:0;27040:18;;27031:4;11665:7;11692:18;;;;;;;;;;;27013:45;:60;;;;-1:-1:-1;27062:11:0;;;;;;;27013:60;:73;;;;-1:-1:-1;27078:8:0;;;;27077:9;27013:73;:106;;;;-1:-1:-1;;;;;;27090:29:0;;;;;;:25;:29;;;;;;;;27013:106;27010:209;;;27136:8;:15;;-1:-1:-1;;27136:15:0;27147:4;27136:15;;;27166:10;:8;:10::i;:::-;27191:8;:16;;-1:-1:-1;;27191:16:0;;;27010:209;-1:-1:-1;;;;;27292:29:0;;27239:12;27292:29;;;:25;:29;;;;;;;;:50;;;;;27341:1;27325:13;;:17;27292:50;27288:552;;;27390:3;27374:13;;27365:6;:22;;;;:::i;:::-;:28;;;;:::i;:::-;27358:35;;27456:13;;27437:16;;27430:4;:23;;;;:::i;:::-;:39;;;;:::i;:::-;27408:18;;:61;;;;;;;:::i;:::-;;;;-1:-1:-1;;27523:13:0;;27510:10;;27503:17;;:4;:17;:::i;:::-;:33;;;;:::i;:::-;27484:15;;:52;;;;;;;:::i;:::-;;;;-1:-1:-1;27288:552:0;;-1:-1:-1;27288:552:0;;-1:-1:-1;;;;;27587:31:0;;;;;;:25;:31;;;;;;;;:51;;;;;27637:1;27622:12;;:16;27587:51;27584:256;;;27686:3;27671:12;;27662:6;:21;;;;:::i;:::-;:27;;;;:::i;:::-;27655:34;;27751:12;;27733:15;;27726:4;:22;;;;:::i;:::-;:37;;;;:::i;:::-;27704:18;;:59;;;;;;;:::i;:::-;;;;-1:-1:-1;;27816:12:0;;27804:9;;27797:16;;:4;:16;:::i;:::-;:31;;;;:::i;:::-;27778:15;;:50;;;;;;;:::i;:::-;;;;-1:-1:-1;;27584:256:0;27863:8;;27860:114;;27891:42;27907:4;27921;27928;27891:15;:42::i;:::-;27948:14;27958:4;27948:14;;:::i;:::-;;;27860:114;27994:33;28010:4;28016:2;28020:6;27994:15;:33::i;:::-;25277:2758;25198:2837;;;:::o;28451:1172::-;28559:4;28490:12;11692:18;;;;;;;;;;;28576:25;28622:18;;28604:15;;:36;;;;:::i;:::-;28576:64;-1:-1:-1;28664:20:0;;;:46;;-1:-1:-1;28688:22:0;;28664:46;28661:60;;;28713:7;;;28451:1172::o;28661:60::-;28754:18;;:23;;28775:2;28754:23;:::i;:::-;28736:15;:41;28733:113;;;28811:18;;:23;;28832:2;28811:23;:::i;:::-;28793:41;;28733:113;28861:18;;:22;28858:359;;28899:23;28964:17;28943:18;;28925:15;:36;;;;:::i;:::-;:56;;;;:::i;:::-;28899:82;;28996:55;29020:4;29027:6;29035:15;28996;:55::i;:::-;29078:6;-1:-1:-1;;;;;29070:20:0;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29066:37;29117:34;29136:15;29117:34;;:::i;:::-;;;29187:18;;29166:39;;;;;:::i;:::-;;;28884:333;28858:359;29229:33;29246:15;29229:16;:33::i;:::-;29378:15;;29304:21;;29283:18;;29396:17;;29365:28;;29304:21;29365:28;:::i;:::-;:48;;;;:::i;:::-;29444:1;29426:15;:19;;;29456:18;:22;29338:75;-1:-1:-1;29494:20:0;;29491:115;;29544:16;;:50;;-1:-1:-1;;;;;29544:16:0;;;;29573;;29544:50;;;;29573:16;29544;:50;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;29530:64:0;;-1:-1:-1;;29491:115:0;28479:1144;;;;;28451:1172::o;9203:211::-;9347:58;;;-1:-1:-1;;;;;11528:55:1;;9347:58:0;;;11510:74:1;11600:18;;;;11593:34;;;9347:58:0;;;;;;;;;;11483:18:1;;;;9347:58:0;;;;;;;;-1:-1:-1;;;;;9347:58:0;-1:-1:-1;;;9347:58:0;;;9320:86;;9340:5;;9320:19;:86::i;13434:580::-;-1:-1:-1;;;;;13540:20:0;;13532:70;;;;-1:-1:-1;;;13532:70:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;13621:23:0;;13613:71;;;;-1:-1:-1;;;13613:71:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;13721:17:0;;13697:21;13721:17;;;;;;;;;;;13757:23;;;;13749:74;;;;-1:-1:-1;;;13749:74:0;;18733:2:1;13749:74:0;;;18715:21:1;18772:2;18752:18;;;18745:30;18811:34;18791:18;;;18784:62;-1:-1:-1;;;18862:18:1;;;18855:36;18908:19;;13749:74:0;18531:402:1;13749:74:0;-1:-1:-1;;;;;13859:17:0;;;:9;:17;;;;;;;;;;;13879:22;;;13859:42;;13923:20;;;;;;;;:30;;13895:6;;13859:9;13923:30;;13895:6;;13923:30;:::i;:::-;;;;;;;;13988:9;-1:-1:-1;;;;;13971:35:0;13980:6;-1:-1:-1;;;;;13971:35:0;;13999:6;13971:35;;;;2242:25:1;;2230:2;2215:18;;2096:177;13971:35:0;;;;;;;;13521:493;13434:580;;;:::o;28043:400::-;28195:16;;;28209:1;28195:16;;;;;;;;28171:21;;28195:16;;;;;;;;;;-1:-1:-1;28195:16:0;28171:40;;28240:4;28222;28227:1;28222:7;;;;;;;;:::i;:::-;;;;;;:23;-1:-1:-1;;;;;28222:23:0;;;-1:-1:-1;;;;;28222:23:0;;;;;28266:9;-1:-1:-1;;;;;28266:14:0;;:16;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;28256:4;28261:1;28256:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;28256:26:0;;;:7;;;;;;;;;:26;28321:114;;-1:-1:-1;;;28321:114:0;;:9;:60;;;;;;:114;;28382:11;;28395:1;;28398:4;;28412;;28419:15;;28321:114;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28098:345;28043:400;:::o;9422:333::-;9503:23;9529:69;9557:4;9529:69;;;;;;;;;;;;;;;;;9537:5;-1:-1:-1;;;;;9529:27:0;;;:69;;;;;:::i;:::-;9613:17;;9503:95;;-1:-1:-1;9613:21:0;9609:139;;9670:10;9659:30;;;;;;;;;;;;:::i;:::-;9651:85;;;;-1:-1:-1;;;9651:85:0;;20941:2:1;9651:85:0;;;20923:21:1;20980:2;20960:18;;;20953:30;21019:34;20999:18;;;20992:62;-1:-1:-1;;;21070:18:1;;;21063:40;21120:19;;9651:85:0;20739:406:1;3706:229:0;3843:12;3875:52;3897:6;3905:4;3911:1;3914:12;3875:21;:52::i;:::-;3868:59;3706:229;-1:-1:-1;;;;3706:229:0:o;4826:455::-;4996:12;5054:5;5029:21;:30;;5021:81;;;;-1:-1:-1;;;5021:81:0;;21352:2:1;5021:81:0;;;21334:21:1;21391:2;21371:18;;;21364:30;21430:34;21410:18;;;21403:62;-1:-1:-1;;;21481:18:1;;;21474:36;21527:19;;5021:81:0;21150:402:1;5021:81:0;5114:12;5128:23;5155:6;-1:-1:-1;;;;;5155:11:0;5174:5;5181:4;5155:31;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5113:73;;;;5204:69;5231:6;5239:7;5248:10;5260:12;5204:26;:69::i;:::-;5197:76;4826:455;-1:-1:-1;;;;;;;4826:455:0:o;7399:644::-;7584:12;7613:7;7609:427;;;7641:10;:17;7662:1;7641:22;7637:290;;-1:-1:-1;;;;;3147:19:0;;;7851:60;;;;-1:-1:-1;;;7851:60:0;;22051:2:1;7851:60:0;;;22033:21:1;22090:2;22070:18;;;22063:30;22129:31;22109:18;;;22102:59;22178:18;;7851:60:0;21849:353:1;7851:60:0;-1:-1:-1;7948:10:0;7941:17;;7609:427;7991:33;7999:10;8011:12;8746:17;;:21;8742:388;;8978:10;8972:17;9035:15;9022:10;9018:2;9014:19;9007:44;8742:388;9105:12;9098:20;;-1:-1:-1;;;9098:20:0;;;;;;;;:::i;14:248:1:-;82:6;90;143:2;131:9;122:7;118:23;114:32;111:52;;;159:1;156;149:12;111:52;-1:-1:-1;;182:23:1;;;252:2;237:18;;;224:32;;-1:-1:-1;14:248:1:o;267:250::-;352:1;362:113;376:6;373:1;370:13;362:113;;;452:11;;;446:18;433:11;;;426:39;398:2;391:10;362:113;;;-1:-1:-1;;509:1:1;491:16;;484:27;267:250::o;522:396::-;671:2;660:9;653:21;634:4;703:6;697:13;746:6;741:2;730:9;726:18;719:34;762:79;834:6;829:2;818:9;814:18;809:2;801:6;797:15;762:79;:::i;:::-;902:2;881:15;-1:-1:-1;;877:29:1;862:45;;;;909:2;858:54;;522:396;-1:-1:-1;;522:396:1:o;1173:154::-;-1:-1:-1;;;;;1252:5:1;1248:54;1241:5;1238:65;1228:93;;1317:1;1314;1307:12;1332:315;1400:6;1408;1461:2;1449:9;1440:7;1436:23;1432:32;1429:52;;;1477:1;1474;1467:12;1429:52;1516:9;1503:23;1535:31;1560:5;1535:31;:::i;:::-;1585:5;1637:2;1622:18;;;;1609:32;;-1:-1:-1;;;1332:315:1:o;1844:247::-;1903:6;1956:2;1944:9;1935:7;1931:23;1927:32;1924:52;;;1972:1;1969;1962:12;1924:52;2011:9;1998:23;2030:31;2055:5;2030:31;:::i;:::-;2080:5;1844:247;-1:-1:-1;;;1844:247:1:o;2278:456::-;2355:6;2363;2371;2424:2;2412:9;2403:7;2399:23;2395:32;2392:52;;;2440:1;2437;2430:12;2392:52;2479:9;2466:23;2498:31;2523:5;2498:31;:::i;:::-;2548:5;-1:-1:-1;2605:2:1;2590:18;;2577:32;2618:33;2577:32;2618:33;:::i;:::-;2278:456;;2670:7;;-1:-1:-1;;;2724:2:1;2709:18;;;;2696:32;;2278:456::o;2739:180::-;2798:6;2851:2;2839:9;2830:7;2826:23;2822:32;2819:52;;;2867:1;2864;2857:12;2819:52;-1:-1:-1;2890:23:1;;2739:180;-1:-1:-1;2739:180:1:o;3344:118::-;3430:5;3423:13;3416:21;3409:5;3406:32;3396:60;;3452:1;3449;3442:12;3467:382;3532:6;3540;3593:2;3581:9;3572:7;3568:23;3564:32;3561:52;;;3609:1;3606;3599:12;3561:52;3648:9;3635:23;3667:31;3692:5;3667:31;:::i;:::-;3717:5;-1:-1:-1;3774:2:1;3759:18;;3746:32;3787:30;3746:32;3787:30;:::i;:::-;3836:7;3826:17;;;3467:382;;;;;:::o;3854:388::-;3922:6;3930;3983:2;3971:9;3962:7;3958:23;3954:32;3951:52;;;3999:1;3996;3989:12;3951:52;4038:9;4025:23;4057:31;4082:5;4057:31;:::i;:::-;4107:5;-1:-1:-1;4164:2:1;4149:18;;4136:32;4177:33;4136:32;4177:33;:::i;4247:356::-;4449:2;4431:21;;;4468:18;;;4461:30;4527:34;4522:2;4507:18;;4500:62;4594:2;4579:18;;4247:356::o;4608:127::-;4669:10;4664:3;4660:20;4657:1;4650:31;4700:4;4697:1;4690:15;4724:4;4721:1;4714:15;4740:125;4805:9;;;4826:10;;;4823:36;;;4839:18;;:::i;5833:380::-;5912:1;5908:12;;;;5955;;;5976:61;;6030:4;6022:6;6018:17;6008:27;;5976:61;6083:2;6075:6;6072:14;6052:18;6049:38;6046:161;;6129:10;6124:3;6120:20;6117:1;6110:31;6164:4;6161:1;6154:15;6192:4;6189:1;6182:15;6046:161;;5833:380;;;:::o;6627:422::-;6716:1;6759:5;6716:1;6773:270;6794:7;6784:8;6781:21;6773:270;;;6853:4;6849:1;6845:6;6841:17;6835:4;6832:27;6829:53;;;6862:18;;:::i;:::-;6912:7;6902:8;6898:22;6895:55;;;6932:16;;;;6895:55;7011:22;;;;6971:15;;;;6773:270;;;6777:3;6627:422;;;;;:::o;7054:806::-;7103:5;7133:8;7123:80;;-1:-1:-1;7174:1:1;7188:5;;7123:80;7222:4;7212:76;;-1:-1:-1;7259:1:1;7273:5;;7212:76;7304:4;7322:1;7317:59;;;;7390:1;7385:130;;;;7297:218;;7317:59;7347:1;7338:10;;7361:5;;;7385:130;7422:3;7412:8;7409:17;7406:43;;;7429:18;;:::i;:::-;-1:-1:-1;;7485:1:1;7471:16;;7500:5;;7297:218;;7599:2;7589:8;7586:16;7580:3;7574:4;7571:13;7567:36;7561:2;7551:8;7548:16;7543:2;7537:4;7534:12;7530:35;7527:77;7524:159;;;-1:-1:-1;7636:19:1;;;7668:5;;7524:159;7715:34;7740:8;7734:4;7715:34;:::i;:::-;7785:6;7781:1;7777:6;7773:19;7764:7;7761:32;7758:58;;;7796:18;;:::i;:::-;7834:20;;7054:806;-1:-1:-1;;;7054:806:1:o;7865:140::-;7923:5;7952:47;7993:4;7983:8;7979:19;7973:4;7952:47;:::i;8010:168::-;8083:9;;;8114;;8131:15;;;8125:22;;8111:37;8101:71;;8152:18;;:::i;8183:217::-;8223:1;8249;8239:132;;8293:10;8288:3;8284:20;8281:1;8274:31;8328:4;8325:1;8318:15;8356:4;8353:1;8346:15;8239:132;-1:-1:-1;8385:9:1;;8183:217::o;11147:184::-;11217:6;11270:2;11258:9;11249:7;11245:23;11241:32;11238:52;;;11286:1;11283;11276:12;11238:52;-1:-1:-1;11309:16:1;;11147:184;-1:-1:-1;11147:184:1:o;15698:401::-;15900:2;15882:21;;;15939:2;15919:18;;;15912:30;15978:34;15973:2;15958:18;;15951:62;-1:-1:-1;;;16044:2:1;16029:18;;16022:35;16089:3;16074:19;;15698:401::o;16104:399::-;16306:2;16288:21;;;16345:2;16325:18;;;16318:30;16384:34;16379:2;16364:18;;16357:62;-1:-1:-1;;;16450:2:1;16435:18;;16428:33;16493:3;16478:19;;16104:399::o;18398:128::-;18465:9;;;18486:11;;;18483:37;;;18500:18;;:::i;19070:127::-;19131:10;19126:3;19122:20;19119:1;19112:31;19162:4;19159:1;19152:15;19186:4;19183:1;19176:15;19202:251;19272:6;19325:2;19313:9;19304:7;19300:23;19296:32;19293:52;;;19341:1;19338;19331:12;19293:52;19373:9;19367:16;19392:31;19417:5;19392:31;:::i;19458:1026::-;19720:4;19768:3;19757:9;19753:19;19799:6;19788:9;19781:25;19825:2;19863:6;19858:2;19847:9;19843:18;19836:34;19906:3;19901:2;19890:9;19886:18;19879:31;19930:6;19965;19959:13;19996:6;19988;19981:22;20034:3;20023:9;20019:19;20012:26;;20073:2;20065:6;20061:15;20047:29;;20094:1;20104:218;20118:6;20115:1;20112:13;20104:218;;;20183:13;;-1:-1:-1;;;;;20179:62:1;20167:75;;20297:15;;;;20262:12;;;;20140:1;20133:9;20104:218;;;-1:-1:-1;;;;;;;20378:55:1;;;;20373:2;20358:18;;20351:83;-1:-1:-1;;;20465:3:1;20450:19;20443:35;20339:3;19458:1026;-1:-1:-1;;;19458:1026:1:o;20489:245::-;20556:6;20609:2;20597:9;20588:7;20584:23;20580:32;20577:52;;;20625:1;20622;20615:12;20577:52;20657:9;20651:16;20676:28;20698:5;20676:28;:::i;21557:287::-;21686:3;21724:6;21718:13;21740:66;21799:6;21794:3;21787:4;21779:6;21775:17;21740:66;:::i;:::-;21822:16;;;;;21557:287;-1:-1:-1;;21557:287:1:o

Swarm Source

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