ETH Price: $2,025.69 (-1.88%)
Gas: 40 Gwei
 

Overview

Max Total Supply

1,000,000,000 RUGGPT

Holders

29

Total Transfers

-

Market

Chart

Fully Diluted Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

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:
RugGPT

Compiler Version
v0.8.16+commit.07a7930e

Optimization Enabled:
Yes with 9999 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2023-06-28
*/

// β–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆ  β–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆ β–ˆβ–ˆ    β–ˆβ–ˆ  β–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆ  β–ˆβ–ˆ      β–ˆβ–ˆ    β–ˆβ–ˆ β–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆ β–ˆβ–ˆ  β–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆ  β–ˆβ–ˆβ–ˆ    β–ˆβ–ˆ                   
// β–ˆβ–ˆ   β–ˆβ–ˆ β–ˆβ–ˆ      β–ˆβ–ˆ    β–ˆβ–ˆ β–ˆβ–ˆ    β–ˆβ–ˆ β–ˆβ–ˆ      β–ˆβ–ˆ    β–ˆβ–ˆ     β–ˆβ–ˆ  β–ˆβ–ˆ β–ˆβ–ˆ    β–ˆβ–ˆ β–ˆβ–ˆβ–ˆβ–ˆ   β–ˆβ–ˆ                  
// β–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆ  β–ˆβ–ˆβ–ˆβ–ˆβ–ˆ   β–ˆβ–ˆ    β–ˆβ–ˆ β–ˆβ–ˆ    β–ˆβ–ˆ β–ˆβ–ˆ      β–ˆβ–ˆ    β–ˆβ–ˆ   β–ˆβ–ˆ    β–ˆβ–ˆ β–ˆβ–ˆ    β–ˆβ–ˆ β–ˆβ–ˆ β–ˆβ–ˆ  β–ˆβ–ˆ                   
// β–ˆβ–ˆ   β–ˆβ–ˆ β–ˆβ–ˆ       β–ˆβ–ˆ  β–ˆβ–ˆ  β–ˆβ–ˆ    β–ˆβ–ˆ β–ˆβ–ˆ      β–ˆβ–ˆ    β–ˆβ–ˆ  β–ˆβ–ˆ     β–ˆβ–ˆ β–ˆβ–ˆ    β–ˆβ–ˆ β–ˆβ–ˆ  β–ˆβ–ˆ β–ˆβ–ˆ                   
// β–ˆβ–ˆ   β–ˆβ–ˆ β–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆ   β–ˆβ–ˆβ–ˆβ–ˆ    β–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆ  β–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆ  β–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆ  β–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆ β–ˆβ–ˆ  β–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆ  β–ˆβ–ˆ   β–ˆβ–ˆβ–ˆβ–ˆ    

// SAFU CONTRACT BY REVOLUZION

//Revoluzion Ecosystem
//WEB: https://revoluzion.io
//DAPP: https://revoluzion.app

// SPDX-License-Identifier: MIT
pragma solidity 0.8.16;

// Library

abstract contract Ownable {
    
    // DATA

    address private _owner;

    // MODIFIER

    modifier onlyOwner() {
        _checkOwner();
        _;
    }

    // CONSTRUCTOR

    constructor() {
        _transferOwnership(msg.sender);
    }

    // EVENT

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

    // FUNCTION

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

    function _checkOwner() internal view virtual {
        require(owner() == msg.sender, "Ownable: caller is not the owner");
    }

    function renounceOwnership() public virtual onlyOwner {
        _transferOwnership(address(0));
    }

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

    function _transferOwnership(address newOwner) internal virtual {
        address oldOwner = _owner;
        _owner = newOwner;
        emit OwnershipTransferred(oldOwner, newOwner);
    }
}

// Interface

interface IERC20 {
    
    //EVENT 

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

    // FUNCTION

    function name() external view returns (string memory);
    
    function symbol() external view returns (string memory);
    
    function decimals() external view returns (uint8);
    
    function totalSupply() external view returns (uint256);
    
    function balanceOf(address account) external view returns (uint256);
    
    function transfer(address to, 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 from, address to, uint256 amount) external returns (bool);
}

interface IFactory {

    // FUNCTION

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

interface IRouter {

    // FUNCTION

    function WETH() external pure returns (address);
        
    function factory() external pure returns (address);

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

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

// Token

contract RugGPT is Ownable, IERC20 {

    // DATA

    string private constant NAME = "RugGPT";
    string private constant SYMBOL = "RUGGPT";

    uint8 private constant DECIMALS = 18;

    uint256 private _totalSupply;
    
    uint256 public constant FEEDENOMINATOR = 10_000;

    uint256 public buyMarketingFee = 100;
    uint256 public buyLiquidityFee = 100;
    uint256 public sellMarketingFee = 100;
    uint256 public sellLiquidityFee = 100;
    uint256 public transferMarketingFee = 0;
    uint256 public transferLiquidityFee = 0;
    uint256 public marketingFeeCollected = 0;
    uint256 public liquidityFeeCollected = 0;
    uint256 public totalFeeCollected = 0;
    uint256 public marketingFeeRedeemed = 0;
    uint256 public liquidityFeeRedeemed = 0;
    uint256 public totalFeeRedeemed = 0;
    uint256 public minSwap = 100 ether;

    bool private constant ISRUGGPT = true;

    bool public tradeEnabled = false;
    bool public isFeeActive = false;
    bool public isFeeLocked = false;
    bool public isSwapEnabled = false;
    bool public inSwap = false;

    address public immutable projectOwner;
    address public immutable liquidityReceiver;

    address public constant ZERO = address(0);
    address public constant DEAD = address(0xdead);

    address public pair;
    address public marketingReceiver;
    address public presaleAddress;
    address public presaleFactory;
    
    IRouter public router;

    // MAPPING

    mapping(address => uint256) private _balances;
    mapping(address => mapping(address => uint256)) private _allowances;
    mapping(address => bool) public isExcludeFromFees;

    // MODIFIER

    modifier swapping() {
        inSwap = true;
        _;
        inSwap = false;
    }

    // CONSTRUCTOR

    constructor(
        address routerAddress,
        address projectOwnerAddress,
        address marketing,
        uint256 supplyTotal
    ) Ownable () {
        require(marketing != ZERO, "Cannot set marketing receiver as zero address.");
        _mint(msg.sender, supplyTotal * 10**DECIMALS);
        projectOwner = projectOwnerAddress;

        marketingReceiver = marketing;
        liquidityReceiver = address(0);
        router = IRouter(routerAddress);
        pair = IFactory(router.factory()).createPair(address(this), router.WETH());
    }

    // EVENT

    event UpdateRouter(address oldRouter, address newRouter, uint256 timestamp);

    event UpdateMinSwap(uint256 oldMinSwap, uint256 newMinSwap, uint256 timestamp);

    event UpdateFeeActive(bool oldStatus, bool newStatus, uint256 timestamp);

    event UpdateSwapEnabled(bool oldStatus, bool newStatus, uint256 timestamp);

    event RedeemLiquidity(uint256 amountToken, uint256 amountETH, uint256 liquidity, uint256 timestamp);

    event UpdateMarketingReceiver(address oldMarketingReceiver, address newMarketingReceiver, uint256 timestamp);
    
    event AutoRedeem(uint256 marketingFeeDistribution, uint256 liquidityFeeDistribution, uint256 amountToRedeem, uint256 timestamp);

    event SetPresaleAddress(address adr, uint256 timestamp);

    event SetPresaleFactory(address adr, uint256 timestamp);

    // FUNCTION

    /* General */

    receive() external payable {}

    function enableTrading() external onlyOwner {
        require(!tradeEnabled, "Enable Trading: Trading already enabled.");
        require(!isFeeActive, "Finalize Presale: Fee already active.");
        require(!isSwapEnabled, "Finalize Presale: Swap already enabled.");
        tradeEnabled = true;
        isFeeActive = true;
        isSwapEnabled = true;
    }

    function finalizePresale() external onlyOwner {
        require(!isFeeActive, "Finalize Presale: Fee already active.");
        require(!isSwapEnabled, "Finalize Presale: Swap already enabled.");
        isFeeActive = true;
        isSwapEnabled = true;
    }

    function lockFees() external onlyOwner {
        require(!isFeeLocked, "Lock Fees: All fees were already locked.");
        isFeeLocked = true;
    }

    function redeemAllMarketingFee() external {
        uint256 amountToRedeem = marketingFeeCollected - marketingFeeRedeemed;
        
        _redeemMarketingFee(amountToRedeem);
    }

    function redeemPartialMarketingFee(uint256 amountToRedeem) external {
        require(amountToRedeem <= marketingFeeCollected - marketingFeeRedeemed, "Redeem Partial Marketing Fee: Insufficient marketing fee collected.");
        
        _redeemMarketingFee(amountToRedeem);
    }

    function _redeemMarketingFee(uint256 amountToRedeem) internal swapping { 
        marketingFeeRedeemed += amountToRedeem;
        totalFeeRedeemed += amountToRedeem;
 
        address[] memory path = new address[](2);
        path[0] = address(this);
        path[1] = router.WETH();

        _approve(address(this), address(router), amountToRedeem);

        router.swapExactTokensForETHSupportingFeeOnTransferTokens(
            amountToRedeem,
            0,
            path,
            marketingReceiver,
            block.timestamp
        );
    }

    function redeemAllLiquidityFee() external {
        uint256 amountToRedeem = liquidityFeeCollected - liquidityFeeRedeemed;
        
        _redeemLiquidityFee(amountToRedeem);
    }

    function redeemPartialLiquidityFee(uint256 amountToRedeem) external {
        require(amountToRedeem <= liquidityFeeCollected - liquidityFeeRedeemed, "Redeem Partial Liquidity Fee: Insufficient liquidity fee collected.");
        
        _redeemLiquidityFee(amountToRedeem);
    }

    function _redeemLiquidityFee(uint256 amountToRedeem) internal swapping returns (uint256) {   
        require(msg.sender != liquidityReceiver, "Redeem Liquidity Fee: Liquidity receiver cannot call this function.");
        uint256 initialBalance = address(this).balance;
        uint256 firstLiquidityHalf = amountToRedeem / 2;
        uint256 secondLiquidityHalf = amountToRedeem - firstLiquidityHalf;

        liquidityFeeRedeemed += amountToRedeem;
        totalFeeRedeemed += amountToRedeem;

        address[] memory path = new address[](2);
        path[0] = address(this);
        path[1] = router.WETH();

        _approve(address(this), address(router), amountToRedeem);

        router.swapExactTokensForETHSupportingFeeOnTransferTokens(
            firstLiquidityHalf,
            0,
            path,
            address(this),
            block.timestamp
        );
        
        (, , uint256 liquidity) = router.addLiquidityETH{
            value: address(this).balance - initialBalance
        }(
            address(this),
            secondLiquidityHalf,
            0,
            0,
            liquidityReceiver,
            block.timestamp + 1_200
        );

        return liquidity;
    }

    /* Check */

    function isRugGPT() external pure returns (bool) {
        return ISRUGGPT;
    }

    function circulatingSupply() external view returns (uint256) {
        return totalSupply() - balanceOf(DEAD) - balanceOf(ZERO);
    }

    /* Update */

    function updateRouter(address newRouter) external onlyOwner {
        require(address(router) != newRouter, "Update Router: This is the current router address.");
        address oldRouter = address(router);
        router = IRouter(newRouter);
        emit UpdateRouter(oldRouter, newRouter, block.timestamp);
        pair = IFactory(router.factory()).createPair(address(this), router.WETH());
    }

    function updateMinSwap(uint256 newMinSwap) external onlyOwner {
        require(minSwap != newMinSwap, "Update Min Swap: This is the current value of min swap.");
        uint256 oldMinSwap = minSwap;
        minSwap = newMinSwap;
        emit UpdateMinSwap(oldMinSwap, newMinSwap, block.timestamp);
    }

    function updateBuyFee(uint256 newMarketingFee, uint256 newLiquidityFee) external onlyOwner {
        require(!isFeeLocked, "Update Buy Fee: All buy fees were locked and cannot be updated.");
        require(newMarketingFee + newLiquidityFee <= 1000, "Update Buy Fee: Total fees cannot exceed 10%.");
        buyMarketingFee = newMarketingFee;
        buyLiquidityFee = newLiquidityFee;
    }

    function updateSellFee(uint256 newMarketingFee, uint256 newLiquidityFee) external onlyOwner {
        require(!isFeeLocked, "Update Sell Fee: All sell fees were locked and cannot be updated.");
        require(newMarketingFee + newLiquidityFee <= 1000, "Update Sell Fee: Total fees cannot exceed 10%.");
        sellMarketingFee = newMarketingFee;
        sellLiquidityFee = newLiquidityFee;
    }

    function updateTransferFee(uint256 newMarketingFee, uint256 newLiquidityFee) external onlyOwner {
        require(!isFeeLocked, "Update Transfer Fee: All transfer fees were locked and cannot be updated.");
        require(newMarketingFee + newLiquidityFee <= 1000, "Update Transfer Fee: Total fees cannot exceed 10%.");
        transferMarketingFee = newMarketingFee;
        transferLiquidityFee = newLiquidityFee;
    }

    function updateFeeActive(bool newStatus) external onlyOwner {
        require(isFeeActive != newStatus, "Update Fee Active: This is the current state for the fee.");
        bool oldStatus = isFeeActive;
        isFeeActive = newStatus;
        emit UpdateFeeActive(oldStatus, newStatus, block.timestamp);
    }

    function updateSwapEnabled(bool newStatus) external onlyOwner {
        require(isSwapEnabled != newStatus, "Update Swap Enabled: This is the current state for the swap.");
        bool oldStatus = isSwapEnabled;
        isSwapEnabled = newStatus;
        emit UpdateSwapEnabled(oldStatus, newStatus, block.timestamp);
    }

    function updateMarketingReceiver(address newMarketingReceiver) external onlyOwner {
        require(marketingReceiver != newMarketingReceiver, "Update Marketing Receiver: This is the current marketing receiver address.");
        address oldMarketingReceiver = marketingReceiver;
        marketingReceiver = newMarketingReceiver;
        emit UpdateMarketingReceiver(oldMarketingReceiver, newMarketingReceiver, block.timestamp);
    }

    function setPresaleFactory(address adr) external onlyOwner {
        require(adr != address(0), "Set Presale Factory: Cannot set zero address as presale factory address.");
        require(adr != presaleFactory, "Set Presale Factory: Cannot set the same address.");
        presaleFactory = adr;
        isExcludeFromFees[adr] = true;
        emit SetPresaleFactory(adr, block.timestamp);
    }

    function setPresaleAddress(address adr) external onlyOwner {
        require(adr != address(0), "Set Presale Address: Cannot set zero address as presale address.");
        require(adr != presaleAddress, "Set Presale Address: Cannot set the same address.");
        presaleAddress = adr;
        isExcludeFromFees[adr] = true;
        emit SetPresaleAddress(adr, block.timestamp);
    }

    function setExcludeFromFees(address user, bool status) external onlyOwner {
        require(isExcludeFromFees[user] != status, "Set Exclude From Fees: This is the current state for this address.");
        isExcludeFromFees[user] = status;
    }

    /* Fee */

    function takeBuyFee(address from, uint256 amount) internal swapping returns (uint256) {
        uint256 feeTotal = buyMarketingFee + buyLiquidityFee;
        uint256 feeAmount = amount * feeTotal / FEEDENOMINATOR;
        uint256 newAmount = amount - feeAmount;
        tallyBuyFee(from, feeAmount, feeTotal);
        return newAmount;
    }

    function takeSellFee(address from, uint256 amount) internal swapping returns (uint256) {
        uint256 feeTotal = sellMarketingFee + sellLiquidityFee;
        uint256 feeAmount = amount * feeTotal / FEEDENOMINATOR;
        uint256 newAmount = amount - feeAmount;
        tallySellFee(from, feeAmount, feeTotal);
        return newAmount;
    }

    function takeTransferFee(address from, uint256 amount) internal swapping returns (uint256) {
        uint256 feeTotal = transferMarketingFee + transferLiquidityFee;
        uint256 feeAmount = amount * feeTotal / FEEDENOMINATOR;
        uint256 newAmount = amount - feeAmount;
        tallyTransferFee(from, feeAmount, feeTotal);
        return newAmount;
    }

    function tallyBuyFee(address from, uint256 amount, uint256 fee) internal swapping {
        uint256 collectMarketing = amount * buyMarketingFee / fee;
        uint256 collectLiquidity = amount - collectMarketing;
        tallyCollection(collectMarketing, collectLiquidity, amount);
        
        _balances[from] -= amount;
        _balances[address(this)] += amount;
    }

    function tallySellFee(address from, uint256 amount, uint256 fee) internal swapping {
        uint256 collectMarketing = amount * sellMarketingFee / fee;
        uint256 collectLiquidity = amount - collectMarketing;
        tallyCollection(collectMarketing, collectLiquidity, amount);
        
        _balances[from] -= amount;
        _balances[address(this)] += amount;
    }

    function tallyTransferFee(address from, uint256 amount, uint256 fee) internal swapping {
        uint256 collectMarketing = amount * transferMarketingFee / fee;
        uint256 collectLiquidity = amount - collectMarketing;
        tallyCollection(collectMarketing, collectLiquidity, amount);

        _balances[from] -= amount;
        _balances[address(this)] += amount;
    }

    function tallyCollection(uint256 collectMarketing, uint256 collectLiquidity, uint256 amount) internal swapping {
        marketingFeeCollected += collectMarketing;
        liquidityFeeCollected += collectLiquidity;
        totalFeeCollected += amount;

    }

    function autoRedeem(uint256 amountToRedeem) public swapping returns (uint256) {  
        require(msg.sender != liquidityReceiver, "Auto Redeem: Cannot use liquidity receiver to trigger this.");
        uint256 marketingToRedeem = marketingFeeCollected - marketingFeeRedeemed;
        uint256 totalToRedeem = totalFeeCollected - totalFeeRedeemed;

        uint256 initialBalance = address(this).balance;
        uint256 marketingFeeDistribution = amountToRedeem * marketingToRedeem / totalToRedeem;
        uint256 liquidityFeeDistribution = amountToRedeem - marketingFeeDistribution;
        uint256 firstLiquidityHalf = liquidityFeeDistribution / 2;
        uint256 secondLiquidityHalf = liquidityFeeDistribution - firstLiquidityHalf;
        uint256 redeemAmount = amountToRedeem;

        marketingFeeRedeemed += marketingFeeDistribution;
        liquidityFeeRedeemed += liquidityFeeDistribution;
        totalFeeRedeemed += amountToRedeem;

        address[] memory path = new address[](2);
        path[0] = address(this);
        path[1] = router.WETH();

        _approve(address(this), address(router), redeemAmount);
    
        emit AutoRedeem(marketingFeeDistribution, liquidityFeeDistribution, redeemAmount, block.timestamp);

        router.swapExactTokensForETHSupportingFeeOnTransferTokens(
            marketingFeeDistribution,
            0,
            path,
            marketingReceiver,
            block.timestamp
        );

        router.swapExactTokensForETHSupportingFeeOnTransferTokens(
            firstLiquidityHalf,
            0,
            path,
            address(this),
            block.timestamp
        );
        
        (, , uint256 liquidity) = router.addLiquidityETH{
            value: address(this).balance - initialBalance
        }(
            address(this),
            secondLiquidityHalf,
            0,
            0,
            liquidityReceiver,
            block.timestamp + 1_200
        );
        
        return liquidity;
    }

    /* Buyback */

    function triggerZeusBuyback(uint256 amount) external onlyOwner {
        buyTokens(amount, DEAD);
    }

    function buyTokens(uint256 amount, address to) internal swapping {
        require(msg.sender != DEAD, "Buy Tokens: Dead address cannot call this function.");
        address[] memory path = new address[](2);
        path[0] = router.WETH();
        path[1] = address(this);

        router.swapExactETHForTokensSupportingFeeOnTransferTokens{
            value: amount
        }(0, path, to, block.timestamp);
    }

    /* ERC20 Standard */

    function name() external view virtual override returns (string memory) {
        return NAME;
    }
    
    function symbol() external view virtual override returns (string memory) {
        return SYMBOL;
    }
    
    function decimals() external 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 to, uint256 amount) external virtual override returns (bool) {
        address provider = msg.sender;
        return _transfer(provider, to, amount);
    }
    
    function allowance(address provider, address spender) public view virtual override returns (uint256) {
        return _allowances[provider][spender];
    }
    
    function approve(address spender, uint256 amount) public virtual override returns (bool) {
        address provider = msg.sender;
        _approve(provider, spender, amount);
        return true;
    }
    
    function transferFrom(address from, address to, uint256 amount) external virtual override returns (bool) {
        address spender = msg.sender;
        _spendAllowance(from, spender, amount);
        return _transfer(from, to, amount);
    }
    
    function increaseAllowance(address spender, uint256 addedValue) external virtual returns (bool) {
        address provider = msg.sender;
        _approve(provider, spender, allowance(provider, spender) + addedValue);
        return true;
    }
    
    function decreaseAllowance(address spender, uint256 subtractedValue) external virtual returns (bool) {
        address provider = msg.sender;
        uint256 currentAllowance = allowance(provider, spender);
        require(currentAllowance >= subtractedValue, "ERC20: decreased allowance below zero");
        unchecked {
            _approve(provider, spender, currentAllowance - subtractedValue);
        }

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

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

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

        _allowances[provider][spender] = amount;
        emit Approval(provider, spender, amount);
    }
    
    function _spendAllowance(address provider, address spender, uint256 amount) internal virtual {
        uint256 currentAllowance = allowance(provider, spender);
        if (currentAllowance != type(uint256).max) {
            require(currentAllowance >= amount, "ERC20: insufficient allowance");
            unchecked {
                _approve(provider, spender, currentAllowance - amount);
            }
        }
    }

    /* Additional */

    function _basicTransfer(address from, address to, uint256 amount ) internal returns (bool) {
        uint256 fromBalance = _balances[from];
        require(fromBalance >= amount, "ERC20: transfer amount exceeds balance");
        unchecked {
            _balances[from] = fromBalance - amount;
            _balances[to] += amount;
        }

        emit Transfer(from, to, amount);
        return true;
    }
    
    /* Overrides */
 
    function _transfer(address from, address to, uint256 amount) internal virtual returns (bool) {
        require(from != address(0), "ERC20: transfer from the zero address");
        require(to != address(0), "ERC20: transfer to the zero address");

        if (!tradeEnabled) {
            require(msg.sender == projectOwner || msg.sender == presaleFactory || msg.sender == owner() || msg.sender == presaleAddress, "ERC20: Only operator, owner or presale addresses can call this function since trading is not yet enabled.");

            if (from == owner()) {
                require(to != pair, "ERC20: Owner and operator are not allowed to sell if trading is not yet enabled.");
            }
        }

        if (inSwap || isExcludeFromFees[from]) {
            return _basicTransfer(from, to, amount);
        }

        if (from != pair && isSwapEnabled && totalFeeCollected - totalFeeRedeemed >= minSwap) {
            autoRedeem(minSwap);
        }

        uint256 newAmount = amount;

        if (isFeeActive && !isExcludeFromFees[from]) {
            newAmount = _beforeTokenTransfer(from, to, amount);
        }

        require(_balances[from] >= newAmount, "ERC20: transfer amount exceeds balance");
        unchecked {
            _balances[from] = _balances[from] - newAmount;
            _balances[to] += newAmount;
        }

        emit Transfer(from, to, newAmount);

        return true;
    }

    function _beforeTokenTransfer(address from, address to, uint256 amount) internal swapping virtual returns (uint256) {
        if (from == pair && (buyMarketingFee + buyLiquidityFee > 0)) {
            return takeBuyFee(from, amount);
        }
        if (to == pair && (sellMarketingFee + sellLiquidityFee > 0)) {
            return takeSellFee(from, amount);
        }
        if (from != pair && to != pair && (transferMarketingFee + transferLiquidityFee > 0)) {
            return takeTransferFee(from, amount);
        }
        return amount;
    }

}

Contract Security Audit

Contract ABI

[{"inputs":[{"internalType":"address","name":"routerAddress","type":"address"},{"internalType":"address","name":"projectOwnerAddress","type":"address"},{"internalType":"address","name":"marketing","type":"address"},{"internalType":"uint256","name":"supplyTotal","type":"uint256"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"marketingFeeDistribution","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"liquidityFeeDistribution","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"amountToRedeem","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"timestamp","type":"uint256"}],"name":"AutoRedeem","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"amountToken","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"amountETH","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"liquidity","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"timestamp","type":"uint256"}],"name":"RedeemLiquidity","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"adr","type":"address"},{"indexed":false,"internalType":"uint256","name":"timestamp","type":"uint256"}],"name":"SetPresaleAddress","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"adr","type":"address"},{"indexed":false,"internalType":"uint256","name":"timestamp","type":"uint256"}],"name":"SetPresaleFactory","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bool","name":"oldStatus","type":"bool"},{"indexed":false,"internalType":"bool","name":"newStatus","type":"bool"},{"indexed":false,"internalType":"uint256","name":"timestamp","type":"uint256"}],"name":"UpdateFeeActive","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"oldMarketingReceiver","type":"address"},{"indexed":false,"internalType":"address","name":"newMarketingReceiver","type":"address"},{"indexed":false,"internalType":"uint256","name":"timestamp","type":"uint256"}],"name":"UpdateMarketingReceiver","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"oldMinSwap","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"newMinSwap","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"timestamp","type":"uint256"}],"name":"UpdateMinSwap","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"oldRouter","type":"address"},{"indexed":false,"internalType":"address","name":"newRouter","type":"address"},{"indexed":false,"internalType":"uint256","name":"timestamp","type":"uint256"}],"name":"UpdateRouter","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bool","name":"oldStatus","type":"bool"},{"indexed":false,"internalType":"bool","name":"newStatus","type":"bool"},{"indexed":false,"internalType":"uint256","name":"timestamp","type":"uint256"}],"name":"UpdateSwapEnabled","type":"event"},{"inputs":[],"name":"DEAD","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"FEEDENOMINATOR","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"ZERO","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"provider","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":"uint256","name":"amountToRedeem","type":"uint256"}],"name":"autoRedeem","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyLiquidityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyMarketingFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"circulatingSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"enableTrading","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"finalizePresale","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"inSwap","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"isExcludeFromFees","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"isFeeActive","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"isFeeLocked","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"isRugGPT","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"isSwapEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"liquidityFeeCollected","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"liquidityFeeRedeemed","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"liquidityReceiver","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lockFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"marketingFeeCollected","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"marketingFeeRedeemed","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"marketingReceiver","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"minSwap","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":"pair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"presaleAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"presaleFactory","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"projectOwner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"redeemAllLiquidityFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"redeemAllMarketingFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amountToRedeem","type":"uint256"}],"name":"redeemPartialLiquidityFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amountToRedeem","type":"uint256"}],"name":"redeemPartialMarketingFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"router","outputs":[{"internalType":"contract IRouter","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellLiquidityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellMarketingFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"user","type":"address"},{"internalType":"bool","name":"status","type":"bool"}],"name":"setExcludeFromFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"adr","type":"address"}],"name":"setPresaleAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"adr","type":"address"}],"name":"setPresaleFactory","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalFeeCollected","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalFeeRedeemed","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":"tradeEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"transferLiquidityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"transferMarketingFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"triggerZeusBuyback","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newMarketingFee","type":"uint256"},{"internalType":"uint256","name":"newLiquidityFee","type":"uint256"}],"name":"updateBuyFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"newStatus","type":"bool"}],"name":"updateFeeActive","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newMarketingReceiver","type":"address"}],"name":"updateMarketingReceiver","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newMinSwap","type":"uint256"}],"name":"updateMinSwap","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newRouter","type":"address"}],"name":"updateRouter","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newMarketingFee","type":"uint256"},{"internalType":"uint256","name":"newLiquidityFee","type":"uint256"}],"name":"updateSellFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"newStatus","type":"bool"}],"name":"updateSwapEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newMarketingFee","type":"uint256"},{"internalType":"uint256","name":"newLiquidityFee","type":"uint256"}],"name":"updateTransferFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

Contract Creation Code

60c0604052606460028190556003819055600481905560055560006006819055600781905560088190556009819055600a819055600b819055600c819055600d5568056bc75e2d63100000600e55600f805464ffffffffff191690553480156200006857600080fd5b5060405162004668380380620046688339810160408190526200008b9162000428565b6200009633620002f6565b6001600160a01b038216620001095760405162461bcd60e51b815260206004820152602e60248201527f43616e6e6f7420736574206d61726b6574696e6720726563656976657220617360448201526d103d32b9379030b2323932b9b99760911b60648201526084015b60405180910390fd5b6200012e336200011c6012600a6200058f565b620001289084620005a7565b62000346565b6001600160a01b03808416608052601080548483166001600160a01b031991821617909155600060a0526013805492871692909116821790556040805163c45a015560e01b8152905163c45a0155916004808201926020929091908290030181865afa158015620001a3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620001c99190620005c9565b6001600160a01b031663c9c6539630601360009054906101000a90046001600160a01b03166001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa1580156200022c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002529190620005c9565b6040516001600160e01b031960e085901b1681526001600160a01b039283166004820152911660248201526044016020604051808303816000875af1158015620002a0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002c69190620005c9565b600f60056101000a8154816001600160a01b0302191690836001600160a01b0316021790555050505050620005fd565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6001600160a01b0382166200039e5760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f206164647265737300604482015260640162000100565b8060016000828254620003b29190620005e7565b90915550506001600160a01b0382166000818152601460209081526040808320805486019055518481527fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a35050565b80516001600160a01b03811681146200042357600080fd5b919050565b600080600080608085870312156200043f57600080fd5b6200044a856200040b565b93506200045a602086016200040b565b92506200046a604086016200040b565b6060959095015193969295505050565b634e487b7160e01b600052601160045260246000fd5b600181815b80851115620004d1578160001904821115620004b557620004b56200047a565b80851615620004c357918102915b93841c939080029062000495565b509250929050565b600082620004ea5750600162000589565b81620004f95750600062000589565b81600181146200051257600281146200051d576200053d565b600191505062000589565b60ff8411156200053157620005316200047a565b50506001821b62000589565b5060208310610133831016604e8410600b841016171562000562575081810a62000589565b6200056e838362000490565b80600019048211156200058557620005856200047a565b0290505b92915050565b6000620005a060ff841683620004d9565b9392505050565b6000816000190483118215151615620005c457620005c46200047a565b500290565b600060208284031215620005dc57600080fd5b620005a0826200040b565b808201808211156200058957620005896200047a565b60805160a051614022620006466000396000818161054b01528181610c2f015281816110000152818161310201526133b80152600081816108fa0152612aae01526140226000f3fe6080604052600436106103e25760003560e01c80638a8c523c1161020d578063b9b2b5cd11610128578063dd62ed3e116100bb578063f2fde38b1161008a578063f63743421161006f578063f637434214610bc2578063f7ea71c214610bd8578063f887ea4014610bee57600080fd5b8063f2fde38b14610b82578063f3c4152c14610ba257600080fd5b8063dd62ed3e14610ad7578063e43504da14610b1d578063f11a24d314610b3c578063f2a4268714610b5257600080fd5b8063d621e813116100f7578063d621e81314610a66578063d63cad2214610a80578063d830678614610aa0578063db0dcf3814610ac257600080fd5b8063b9b2b5cd146109f0578063bdb9f28d14610a06578063beffc7d414610a26578063c851cc3214610a4657600080fd5b8063a4475ce4116101a0578063a9059cbb1161016f578063a9059cbb14610985578063ab28a04c146109a5578063ab366292146109bb578063b908de8c146109d057600080fd5b8063a4475ce4146108e8578063a457c2d71461091c578063a5949bcf1461093c578063a8aa1b311461095c57600080fd5b80639358928b116101dc5780639358928b1461086257806395d89b41146108775780639bb19a32146108bd578063a0a6e940146108d357600080fd5b80638a8c523c146107f95780638da5cb5b1461080e578063921369131461082c578063924de9b71461084257600080fd5b80633d3359cb116102fd57806370a08231116102905780637bce5a041161025f5780637bce5a04146107995780637e8c95ab146107af57806385c5b319146107cf578063869e27df146107e557600080fd5b806370a0823114610718578063715018a61461074e57806371538eed1461076357806375fed3c71461077957600080fd5b806358fa63ca116102cc57806358fa63ca146106ad57806359cd9031146106c2578063610e34b9146106d857806363a95492146106f857600080fd5b80633d3359cb146106385780633d6362d6146106585780634578b91d146106785780635396fee61461069857600080fd5b8063264d26dd11610375578063313ce56711610344578063313ce567146105bb578063351a964d146105d757806339509351146105f85780633bf314541461061857600080fd5b8063264d26dd1461053957806326b875a81461056d57806328bbcee3146105835780632e4cfd011461059957600080fd5b8063122fe685116103b1578063122fe685146104ce578063177aedb2146104ee57806318160ddd1461050457806323b872dd1461051957600080fd5b806301295143146103ee57806303fd2a451461042157806306fdde031461044f578063095ea7b31461049e57600080fd5b366103e957005b600080fd5b3480156103fa57600080fd5b5061040e610409366004613c0c565b610c0e565b6040519081526020015b60405180910390f35b34801561042d57600080fd5b5061043761dead81565b6040516001600160a01b039091168152602001610418565b34801561045b57600080fd5b5060408051808201909152600681527f527567475054000000000000000000000000000000000000000000000000000060208201525b6040516104189190613c25565b3480156104aa57600080fd5b506104be6104b9366004613ca6565b6110f5565b6040519015158152602001610418565b3480156104da57600080fd5b50601154610437906001600160a01b031681565b3480156104fa57600080fd5b5061040e60085481565b34801561051057600080fd5b5060015461040e565b34801561052557600080fd5b506104be610534366004613cd2565b61110f565b34801561054557600080fd5b506104377f000000000000000000000000000000000000000000000000000000000000000081565b34801561057957600080fd5b5061040e600b5481565b34801561058f57600080fd5b5061040e600c5481565b3480156105a557600080fd5b506105b96105b4366004613c0c565b611133565b005b3480156105c757600080fd5b5060405160128152602001610418565b3480156105e357600080fd5b50600f546104be906301000000900460ff1681565b34801561060457600080fd5b506104be610613366004613ca6565b6111ea565b34801561062457600080fd5b506105b9610633366004613d28565b611229565b34801561064457600080fd5b506105b9610653366004613d43565b611342565b34801561066457600080fd5b506105b9610673366004613d65565b61147b565b34801561068457600080fd5b506105b9610693366004613d65565b6115a8565b3480156106a457600080fd5b506105b9611780565b3480156106b957600080fd5b50610437600081565b3480156106ce57600080fd5b5061040e600e5481565b3480156106e457600080fd5b506105b96106f3366004613d43565b6117a1565b34801561070457600080fd5b506105b9610713366004613c0c565b6118b4565b34801561072457600080fd5b5061040e610733366004613d65565b6001600160a01b031660009081526014602052604090205490565b34801561075a57600080fd5b506105b96118c8565b34801561076f57600080fd5b5061040e600d5481565b34801561078557600080fd5b506105b9610794366004613c0c565b6118dc565b3480156107a557600080fd5b5061040e60025481565b3480156107bb57600080fd5b50601254610437906001600160a01b031681565b3480156107db57600080fd5b5061040e60065481565b3480156107f157600080fd5b5060016104be565b34801561080557600080fd5b506105b96119a3565b34801561081a57600080fd5b506000546001600160a01b0316610437565b34801561083857600080fd5b5061040e60045481565b34801561084e57600080fd5b506105b961085d366004613d28565b611b52565b34801561086e57600080fd5b5061040e611c65565b34801561088357600080fd5b5060408051808201909152600681527f52554747505400000000000000000000000000000000000000000000000000006020820152610491565b3480156108c957600080fd5b5061040e60075481565b3480156108df57600080fd5b506105b9611cd5565b3480156108f457600080fd5b506104377f000000000000000000000000000000000000000000000000000000000000000081565b34801561092857600080fd5b506104be610937366004613ca6565b611e0b565b34801561094857600080fd5b50601054610437906001600160a01b031681565b34801561096857600080fd5b50600f54610437906501000000000090046001600160a01b031681565b34801561099157600080fd5b506104be6109a0366004613ca6565b611ec0565b3480156109b157600080fd5b5061040e61271081565b3480156109c757600080fd5b506105b9611ed6565b3480156109dc57600080fd5b50600f546104be9062010000900460ff1681565b3480156109fc57600080fd5b5061040e600a5481565b348015610a1257600080fd5b506105b9610a21366004613d65565b611f8c565b348015610a3257600080fd5b506105b9610a41366004613d43565b612139565b348015610a5257600080fd5b506105b9610a61366004613d65565b612272565b348015610a7257600080fd5b50600f546104be9060ff1681565b348015610a8c57600080fd5b506105b9610a9b366004613d82565b61252c565b348015610aac57600080fd5b50600f546104be90640100000000900460ff1681565b348015610ace57600080fd5b506105b9612639565b348015610ae357600080fd5b5061040e610af2366004613db7565b6001600160a01b03918216600090815260156020908152604080832093909416825291909152205490565b348015610b2957600080fd5b50600f546104be90610100900460ff1681565b348015610b4857600080fd5b5061040e60035481565b348015610b5e57600080fd5b506104be610b6d366004613d65565b60166020526000908152604090205460ff1681565b348015610b8e57600080fd5b506105b9610b9d366004613d65565b612656565b348015610bae57600080fd5b506105b9610bbd366004613c0c565b6126e3565b348015610bce57600080fd5b5061040e60055481565b348015610be457600080fd5b5061040e60095481565b348015610bfa57600080fd5b50601354610437906001600160a01b031681565b600f805464ff00000000191664010000000017905560006001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000163303610cc85760405162461bcd60e51b815260206004820152603b60248201527f4175746f2052656465656d3a2043616e6e6f7420757365206c6971756964697460448201527f7920726563656976657220746f207472696767657220746869732e000000000060648201526084015b60405180910390fd5b6000600b54600854610cda9190613e1f565b90506000600d54600a54610cee9190613e1f565b905047600082610cfe8588613e32565b610d089190613e6f565b90506000610d168288613e1f565b90506000610d25600283613e6f565b90506000610d338284613e1f565b9050600089905084600b6000828254610d4c9190613eaa565b9250508190555083600c6000828254610d659190613eaa565b9250508190555089600d6000828254610d7e9190613eaa565b90915550506040805160028082526060820183526000926020830190803683370190505090503081600081518110610db857610db8613ebd565b6001600160a01b03928316602091820292909201810191909152601354604080517fad5c46480000000000000000000000000000000000000000000000000000000081529051919093169263ad5c46489260048083019391928290030181865afa158015610e2a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e4e9190613eec565b81600181518110610e6157610e61613ebd565b6001600160a01b039283166020918202929092010152601354610e879130911684612797565b60408051878152602081018790529081018390524260608201527f67177a4f6165f6b644189028ad88b5c435bdec160e820e7ccff9964e2bf086329060800160405180910390a16013546010546040517f791ac9470000000000000000000000000000000000000000000000000000000081526001600160a01b039283169263791ac94792610f24928b9260009288929116904290600401613f4d565b600060405180830381600087803b158015610f3e57600080fd5b505af1158015610f52573d6000803e3d6000fd5b50506013546040517f791ac9470000000000000000000000000000000000000000000000000000000081526001600160a01b03909116925063791ac9479150610fa8908790600090869030904290600401613f4d565b600060405180830381600087803b158015610fc257600080fd5b505af1158015610fd6573d6000803e3d6000fd5b5050601354600092506001600160a01b0316905063f305d719610ff98a47613e1f565b30876000807f000000000000000000000000000000000000000000000000000000000000000061102b426104b0613eaa565b60405160e089901b7fffffffff000000000000000000000000000000000000000000000000000000001681526001600160a01b039687166004820152602481019590955260448501939093526064840191909152909216608482015260a481019190915260c40160606040518083038185885af11580156110b0573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906110d59190613f89565b600f805464ff00000000191690559e9d5050505050505050505050505050565b600033611103818585612797565b60019150505b92915050565b60003361111d8582856128ef565b61112885858561299f565b9150505b9392505050565b600b546008546111439190613e1f565b8111156111de5760405162461bcd60e51b815260206004820152604360248201527f52656465656d205061727469616c204d61726b6574696e67204665653a20496e60448201527f73756666696369656e74206d61726b6574696e672066656520636f6c6c65637460648201527f65642e0000000000000000000000000000000000000000000000000000000000608482015260a401610cbf565b6111e781612e92565b50565b3360008181526015602090815260408083206001600160a01b03871684529091528120549091906111039082908690611224908790613eaa565b612797565b611231613078565b801515600f60019054906101000a900460ff161515036112b95760405162461bcd60e51b815260206004820152603960248201527f55706461746520466565204163746976653a205468697320697320746865206360448201527f757272656e7420737461746520666f7220746865206665652e000000000000006064820152608401610cbf565b600f80548215156101008181027fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff8416179093556040805160ff94909304939093168015158352602083019190915242928201929092527febff09a8044adcaed71dd99feb377c7d6d24ba30b6e16de227453af0571a94cc906060015b60405180910390a15050565b61134a613078565b600f5462010000900460ff16156113ef5760405162461bcd60e51b815260206004820152604960248201527f557064617465205472616e73666572204665653a20416c6c207472616e73666560448201527f7220666565732077657265206c6f636b656420616e642063616e6e6f7420626560648201527f20757064617465642e0000000000000000000000000000000000000000000000608482015260a401610cbf565b6103e86113fc8284613eaa565b11156114705760405162461bcd60e51b815260206004820152603260248201527f557064617465205472616e73666572204665653a20546f74616c20666565732060448201527f63616e6e6f7420657863656564203130252e00000000000000000000000000006064820152608401610cbf565b600691909155600755565b611483613078565b6010546001600160a01b0380831691160361152c5760405162461bcd60e51b815260206004820152604a60248201527f557064617465204d61726b6574696e672052656365697665723a20546869732060448201527f6973207468652063757272656e74206d61726b6574696e67207265636569766560648201527f7220616464726573732e00000000000000000000000000000000000000000000608482015260a401610cbf565b601080546001600160a01b038381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681179093556040805191909216808252602082019390935242918101919091527f8bfedd1b0cbd471ea320a96f51b1fd6b6b718a19a3107a9c61ebeaa6f44722e090606001611336565b6115b0613078565b6001600160a01b0381166116525760405162461bcd60e51b815260206004820152604860248201527f5365742050726573616c6520466163746f72793a2043616e6e6f74207365742060448201527f7a65726f20616464726573732061732070726573616c6520666163746f72792060648201527f616464726573732e000000000000000000000000000000000000000000000000608482015260a401610cbf565b6012546001600160a01b03908116908216036116d65760405162461bcd60e51b815260206004820152603160248201527f5365742050726573616c6520466163746f72793a2043616e6e6f74207365742060448201527f7468652073616d6520616464726573732e0000000000000000000000000000006064820152608401610cbf565b601280547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b03831690811790915560008181526016602090815260409182902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001179055815192835242908301527f039449289674808c71e7fc23ae55828ead6d558f1536247d0a262091fb64c8e691015b60405180910390a150565b6000600c546009546117929190613e1f565b905061179d816130e1565b5050565b6117a9613078565b600f5462010000900460ff16156118285760405162461bcd60e51b815260206004820152603f60248201527f55706461746520427579204665653a20416c6c2062757920666565732077657260448201527f65206c6f636b656420616e642063616e6e6f7420626520757064617465642e006064820152608401610cbf565b6103e86118358284613eaa565b11156118a95760405162461bcd60e51b815260206004820152602d60248201527f55706461746520427579204665653a20546f74616c20666565732063616e6e6f60448201527f7420657863656564203130252e000000000000000000000000000000000000006064820152608401610cbf565b600291909155600355565b6118bc613078565b6111e78161dead6134a8565b6118d0613078565b6118da60006136e4565b565b6118e4613078565b80600e540361195b5760405162461bcd60e51b815260206004820152603760248201527f557064617465204d696e20537761703a2054686973206973207468652063757260448201527f72656e742076616c7565206f66206d696e20737761702e0000000000000000006064820152608401610cbf565b600e805490829055604080518281526020810184905242918101919091527fd86e81c9acadd69b19ee186f74e58793f2da31b11d914fd1b60892e7cfee82d790606001611336565b6119ab613078565b600f5460ff1615611a245760405162461bcd60e51b815260206004820152602860248201527f456e61626c652054726164696e673a2054726164696e6720616c72656164792060448201527f656e61626c65642e0000000000000000000000000000000000000000000000006064820152608401610cbf565b600f54610100900460ff1615611aa25760405162461bcd60e51b815260206004820152602560248201527f46696e616c697a652050726573616c653a2046656520616c726561647920616360448201527f746976652e0000000000000000000000000000000000000000000000000000006064820152608401610cbf565b600f546301000000900460ff1615611b225760405162461bcd60e51b815260206004820152602760248201527f46696e616c697a652050726573616c653a205377617020616c7265616479206560448201527f6e61626c65642e000000000000000000000000000000000000000000000000006064820152608401610cbf565b600f80547fffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff0000166301000101179055565b611b5a613078565b801515600f60039054906101000a900460ff16151503611be25760405162461bcd60e51b815260206004820152603c60248201527f557064617465205377617020456e61626c65643a20546869732069732074686560448201527f2063757272656e7420737461746520666f722074686520737761702e000000006064820152608401610cbf565b600f805482151563010000008181027fffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ffffff8416179093556040805160ff94909304939093168015158352602083019190915242928201929092527f5487e44b4ce35a3d9d2b5fa2d040d53cf855d6a99fe310cb058acb8ac27db02390606001611336565b60146020527f4f26c3876aa9f4b92579780beea1161a61f87ebf1ec6ee865b299e447ecba99c5461dead60009081527f8b9e18c5e04efe171d1e4f682ad90d753958a5ffe56db5290b0236c8e0b6db0054600154919291611cc69190613e1f565b611cd09190613e1f565b905090565b611cdd613078565b600f54610100900460ff1615611d5b5760405162461bcd60e51b815260206004820152602560248201527f46696e616c697a652050726573616c653a2046656520616c726561647920616360448201527f746976652e0000000000000000000000000000000000000000000000000000006064820152608401610cbf565b600f546301000000900460ff1615611ddb5760405162461bcd60e51b815260206004820152602760248201527f46696e616c697a652050726573616c653a205377617020616c7265616479206560448201527f6e61626c65642e000000000000000000000000000000000000000000000000006064820152608401610cbf565b600f80547fffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff00ff166301000100179055565b3360008181526015602090815260408083206001600160a01b038716845290915281205490919083811015611ea85760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760448201527f207a65726f0000000000000000000000000000000000000000000000000000006064820152608401610cbf565b611eb58286868403612797565b506001949350505050565b600033611ece81858561299f565b949350505050565b611ede613078565b600f5462010000900460ff1615611f5d5760405162461bcd60e51b815260206004820152602860248201527f4c6f636b20466565733a20416c6c2066656573207765726520616c726561647960448201527f206c6f636b65642e0000000000000000000000000000000000000000000000006064820152608401610cbf565b600f80547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ffff1662010000179055565b611f94613078565b6001600160a01b038116612012576040805162461bcd60e51b81526020600482015260248101919091527f5365742050726573616c6520416464726573733a2043616e6e6f74207365742060448201527f7a65726f20616464726573732061732070726573616c6520616464726573732e6064820152608401610cbf565b6011546001600160a01b03908116908216036120965760405162461bcd60e51b815260206004820152603160248201527f5365742050726573616c6520416464726573733a2043616e6e6f74207365742060448201527f7468652073616d6520616464726573732e0000000000000000000000000000006064820152608401610cbf565b601180547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b03831690811790915560008181526016602090815260409182902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001179055815192835242908301527f25fe33cf6b488b96dbf1b5bfe1fbb29a6bb8f312bcad5d6ab70cc798a72fa0eb9101611775565b612141613078565b600f5462010000900460ff16156121e65760405162461bcd60e51b815260206004820152604160248201527f5570646174652053656c6c204665653a20416c6c2073656c6c2066656573207760448201527f657265206c6f636b656420616e642063616e6e6f74206265207570646174656460648201527f2e00000000000000000000000000000000000000000000000000000000000000608482015260a401610cbf565b6103e86121f38284613eaa565b11156122675760405162461bcd60e51b815260206004820152602e60248201527f5570646174652053656c6c204665653a20546f74616c20666565732063616e6e60448201527f6f7420657863656564203130252e0000000000000000000000000000000000006064820152608401610cbf565b600491909155600555565b61227a613078565b6013546001600160a01b038083169116036122fd5760405162461bcd60e51b815260206004820152603260248201527f55706461746520526f757465723a20546869732069732074686520637572726560448201527f6e7420726f7574657220616464726573732e00000000000000000000000000006064820152608401610cbf565b601380546001600160a01b038381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681179093556040805191909216808252602082019390935242918101919091527ff3ecf26fdaa8c4750bb008a2ce64300dbfd4ef1001e7c59d2a89c17bcbfd60b59060600160405180910390a1601360009054906101000a90046001600160a01b03166001600160a01b031663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa1580156123cf573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906123f39190613eec565b6001600160a01b031663c9c6539630601360009054906101000a90046001600160a01b03166001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015612455573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906124799190613eec565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e085901b1681526001600160a01b039283166004820152911660248201526044016020604051808303816000875af11580156124de573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906125029190613eec565b600f60056101000a8154816001600160a01b0302191690836001600160a01b031602179055505050565b612534613078565b6001600160a01b03821660009081526016602052604090205481151560ff9091161515036125f05760405162461bcd60e51b815260206004820152604260248201527f536574204578636c7564652046726f6d20466565733a2054686973206973207460448201527f68652063757272656e7420737461746520666f7220746869732061646472657360648201527f732e000000000000000000000000000000000000000000000000000000000000608482015260a401610cbf565b6001600160a01b0391909116600090815260166020526040902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016911515919091179055565b6000600b5460085461264b9190613e1f565b90506111e781612e92565b61265e613078565b6001600160a01b0381166126da5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f64647265737300000000000000000000000000000000000000000000000000006064820152608401610cbf565b6111e7816136e4565b600c546009546126f39190613e1f565b81111561278e5760405162461bcd60e51b815260206004820152604360248201527f52656465656d205061727469616c204c6971756964697479204665653a20496e60448201527f73756666696369656e74206c69717569646974792066656520636f6c6c65637460648201527f65642e0000000000000000000000000000000000000000000000000000000000608482015260a401610cbf565b61179d816130e1565b6001600160a01b0383166128125760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460448201527f72657373000000000000000000000000000000000000000000000000000000006064820152608401610cbf565b6001600160a01b03821661288e5760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f20616464726560448201527f73730000000000000000000000000000000000000000000000000000000000006064820152608401610cbf565b6001600160a01b0383811660008181526015602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6001600160a01b038381166000908152601560209081526040808320938616835292905220547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8114612999578181101561298c5760405162461bcd60e51b815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e63650000006044820152606401610cbf565b6129998484848403612797565b50505050565b60006001600160a01b038416612a1d5760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f20616460448201527f64726573730000000000000000000000000000000000000000000000000000006064820152608401610cbf565b6001600160a01b038316612a995760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201527f65737300000000000000000000000000000000000000000000000000000000006064820152608401610cbf565b600f5460ff16612ca357336001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000161480612ae457506012546001600160a01b031633145b80612af957506000546001600160a01b031633145b80612b0e57506011546001600160a01b031633145b612bcc5760405162461bcd60e51b815260206004820152606960248201527f45524332303a204f6e6c79206f70657261746f722c206f776e6572206f72207060448201527f726573616c65206164647265737365732063616e2063616c6c2074686973206660648201527f756e6374696f6e2073696e63652074726164696e67206973206e6f742079657460848201527f20656e61626c65642e000000000000000000000000000000000000000000000060a482015260c401610cbf565b6000546001600160a01b03166001600160a01b0316846001600160a01b031603612ca357600f546001600160a01b0365010000000000909104811690841603612ca35760405162461bcd60e51b815260206004820152605060248201527f45524332303a204f776e657220616e64206f70657261746f7220617265206e6f60448201527f7420616c6c6f77656420746f2073656c6c2069662074726164696e672069732060648201527f6e6f742079657420656e61626c65642e00000000000000000000000000000000608482015260a401610cbf565b600f54640100000000900460ff1680612cd457506001600160a01b03841660009081526016602052604090205460ff165b15612ceb57612ce484848461374c565b905061112c565b600f546001600160a01b03858116650100000000009092041614801590612d1b5750600f546301000000900460ff165b8015612d385750600e54600d54600a54612d359190613e1f565b10155b15612d4a57612d48600e54610c0e565b505b600f548290610100900460ff168015612d7c57506001600160a01b03851660009081526016602052604090205460ff16155b15612d8f57612d8c85858561383b565b90505b6001600160a01b038516600090815260146020526040902054811115612e1d5760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e742065786365656473206260448201527f616c616e636500000000000000000000000000000000000000000000000000006064820152608401610cbf565b6001600160a01b03808616600081815260146020526040808220805486900390559287168082529083902080548501905591517fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90612e7f9085815260200190565b60405180910390a3506001949350505050565b600f805464ff000000001916640100000000179055600b8054829190600090612ebc908490613eaa565b9250508190555080600d6000828254612ed59190613eaa565b90915550506040805160028082526060820183526000926020830190803683370190505090503081600081518110612f0f57612f0f613ebd565b6001600160a01b03928316602091820292909201810191909152601354604080517fad5c46480000000000000000000000000000000000000000000000000000000081529051919093169263ad5c46489260048083019391928290030181865afa158015612f81573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612fa59190613eec565b81600181518110612fb857612fb8613ebd565b6001600160a01b039283166020918202929092010152601354612fde9130911684612797565b6013546010546040517f791ac9470000000000000000000000000000000000000000000000000000000081526001600160a01b039283169263791ac9479261303492879260009288929116904290600401613f4d565b600060405180830381600087803b15801561304e57600080fd5b505af1158015613062573d6000803e3d6000fd5b5050600f805464ff000000001916905550505050565b3361308b6000546001600160a01b031690565b6001600160a01b0316146118da5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610cbf565b600f805464ff00000000191664010000000017905560006001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001633036131bc5760405162461bcd60e51b815260206004820152604360248201527f52656465656d204c6971756964697479204665653a204c69717569646974792060448201527f72656365697665722063616e6e6f742063616c6c20746869732066756e63746960648201527f6f6e2e0000000000000000000000000000000000000000000000000000000000608482015260a401610cbf565b4760006131ca600285613e6f565b905060006131d88286613e1f565b905084600c60008282546131ec9190613eaa565b9250508190555084600d60008282546132059190613eaa565b9091555050604080516002808252606082018352600092602083019080368337019050509050308160008151811061323f5761323f613ebd565b6001600160a01b03928316602091820292909201810191909152601354604080517fad5c46480000000000000000000000000000000000000000000000000000000081529051919093169263ad5c46489260048083019391928290030181865afa1580156132b1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906132d59190613eec565b816001815181106132e8576132e8613ebd565b6001600160a01b03928316602091820292909201015260135461330e9130911688612797565b6013546040517f791ac9470000000000000000000000000000000000000000000000000000000081526001600160a01b039091169063791ac94790613360908690600090869030904290600401613f4d565b600060405180830381600087803b15801561337a57600080fd5b505af115801561338e573d6000803e3d6000fd5b5050601354600092506001600160a01b0316905063f305d7196133b18747613e1f565b30866000807f00000000000000000000000000000000000000000000000000000000000000006133e3426104b0613eaa565b60405160e089901b7fffffffff000000000000000000000000000000000000000000000000000000001681526001600160a01b039687166004820152602481019590955260448501939093526064840191909152909216608482015260a481019190915260c40160606040518083038185885af1158015613468573d6000803e3d6000fd5b50505050506040513d601f19601f8201168201806040525081019061348d9190613f89565b600f805464ff00000000191690559998505050505050505050565b600f805464ff0000000019166401000000001790557fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff215333016135525760405162461bcd60e51b815260206004820152603360248201527f42757920546f6b656e733a204465616420616464726573732063616e6e6f742060448201527f63616c6c20746869732066756e6374696f6e2e000000000000000000000000006064820152608401610cbf565b6040805160028082526060820183526000926020830190803683375050601354604080517fad5c464800000000000000000000000000000000000000000000000000000000815290519394506001600160a01b039091169263ad5c4648925060048083019260209291908290030181865afa1580156135d5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906135f99190613eec565b8160008151811061360c5761360c613ebd565b60200260200101906001600160a01b031690816001600160a01b031681525050308160018151811061364057613640613ebd565b6001600160a01b0392831660209182029290920101526013546040517fb6f9de9500000000000000000000000000000000000000000000000000000000815291169063b6f9de9590859061369f90600090869088904290600401613fb7565b6000604051808303818588803b1580156136b857600080fd5b505af11580156136cc573d6000803e3d6000fd5b5050600f805464ff0000000019169055505050505050565b600080546001600160a01b038381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6001600160a01b038316600090815260146020526040812054828110156137db5760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e742065786365656473206260448201527f616c616e636500000000000000000000000000000000000000000000000000006064820152608401610cbf565b6001600160a01b0380861660008181526014602052604080822087860390559287168082529083902080548701905591517fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90612e7f9087815260200190565b600f805464ff00000000191664010000000017908190556000906001600160a01b038581166501000000000090920416148015613887575060006003546002546138859190613eaa565b115b1561389d576138968483613961565b905061394c565b600f546001600160a01b0384811665010000000000909204161480156138d2575060006005546004546138d09190613eaa565b115b156138e15761389684836139d8565b600f546001600160a01b0385811665010000000000909204161480159061391f5750600f546001600160a01b03848116650100000000009092041614155b801561393a575060006007546006546139389190613eaa565b115b15613949576138968483613a38565b50805b600f805464ff00000000191690559392505050565b600f805464ff000000001916640100000000179055600354600254600091829161398b9190613eaa565b9050600061271061399c8386613e32565b6139a69190613e6f565b905060006139b48286613e1f565b90506139c1868385613a98565b600f805464ff000000001916905595945050505050565b600f805464ff0000000019166401000000001790556005546004546000918291613a029190613eaa565b90506000612710613a138386613e32565b613a1d9190613e6f565b90506000613a2b8286613e1f565b90506139c1868385613b4a565b600f805464ff0000000019166401000000001790556007546006546000918291613a629190613eaa565b90506000612710613a738386613e32565b613a7d9190613e6f565b90506000613a8b8286613e1f565b90506139c1868385613b71565b600f805464ff0000000019166401000000001790556002546000908290613abf9085613e32565b613ac99190613e6f565b90506000613ad78285613e1f565b9050613ae4828286613b98565b6001600160a01b03851660009081526014602052604081208054869290613b0c908490613e1f565b90915550503060009081526014602052604081208054869290613b30908490613eaa565b9091555050600f805464ff00000000191690555050505050565b600f805464ff0000000019166401000000001790556004546000908290613abf9085613e32565b600f805464ff0000000019166401000000001790556006546000908290613abf9085613e32565b600f805464ff00000000191664010000000017905560088054849190600090613bc2908490613eaa565b925050819055508160096000828254613bdb9190613eaa565b9250508190555080600a6000828254613bf49190613eaa565b9091555050600f805464ff0000000019169055505050565b600060208284031215613c1e57600080fd5b5035919050565b600060208083528351808285015260005b81811015613c5257858101830151858201604001528201613c36565b5060006040828601015260407fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f8301168501019250505092915050565b6001600160a01b03811681146111e757600080fd5b60008060408385031215613cb957600080fd5b8235613cc481613c91565b946020939093013593505050565b600080600060608486031215613ce757600080fd5b8335613cf281613c91565b92506020840135613d0281613c91565b929592945050506040919091013590565b80358015158114613d2357600080fd5b919050565b600060208284031215613d3a57600080fd5b61112c82613d13565b60008060408385031215613d5657600080fd5b50508035926020909101359150565b600060208284031215613d7757600080fd5b813561112c81613c91565b60008060408385031215613d9557600080fd5b8235613da081613c91565b9150613dae60208401613d13565b90509250929050565b60008060408385031215613dca57600080fd5b8235613dd581613c91565b91506020830135613de581613c91565b809150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b8181038181111561110957611109613df0565b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615613e6a57613e6a613df0565b500290565b600082613ea5577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500490565b8082018082111561110957611109613df0565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600060208284031215613efe57600080fd5b815161112c81613c91565b600081518084526020808501945080840160005b83811015613f425781516001600160a01b031687529582019590820190600101613f1d565b509495945050505050565b85815284602082015260a060408201526000613f6c60a0830186613f09565b6001600160a01b0394909416606083015250608001529392505050565b600080600060608486031215613f9e57600080fd5b8351925060208401519150604084015190509250925092565b848152608060208201526000613fd06080830186613f09565b6001600160a01b0394909416604083015250606001529291505056fea26469706673582212209e58b1955dedbd8c935e29362e91d8ec96159592f86438c3e232bf39fecfa7fc64736f6c634300081000330000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d000000000000000000000000af895347b991399df0ee7462136f46bdcb1cc9c90000000000000000000000007d616728b7d350603b3f8b1b0a17a1d6433c4d61000000000000000000000000000000000000000000000000000000003b9aca00

Deployed Bytecode

0x6080604052600436106103e25760003560e01c80638a8c523c1161020d578063b9b2b5cd11610128578063dd62ed3e116100bb578063f2fde38b1161008a578063f63743421161006f578063f637434214610bc2578063f7ea71c214610bd8578063f887ea4014610bee57600080fd5b8063f2fde38b14610b82578063f3c4152c14610ba257600080fd5b8063dd62ed3e14610ad7578063e43504da14610b1d578063f11a24d314610b3c578063f2a4268714610b5257600080fd5b8063d621e813116100f7578063d621e81314610a66578063d63cad2214610a80578063d830678614610aa0578063db0dcf3814610ac257600080fd5b8063b9b2b5cd146109f0578063bdb9f28d14610a06578063beffc7d414610a26578063c851cc3214610a4657600080fd5b8063a4475ce4116101a0578063a9059cbb1161016f578063a9059cbb14610985578063ab28a04c146109a5578063ab366292146109bb578063b908de8c146109d057600080fd5b8063a4475ce4146108e8578063a457c2d71461091c578063a5949bcf1461093c578063a8aa1b311461095c57600080fd5b80639358928b116101dc5780639358928b1461086257806395d89b41146108775780639bb19a32146108bd578063a0a6e940146108d357600080fd5b80638a8c523c146107f95780638da5cb5b1461080e578063921369131461082c578063924de9b71461084257600080fd5b80633d3359cb116102fd57806370a08231116102905780637bce5a041161025f5780637bce5a04146107995780637e8c95ab146107af57806385c5b319146107cf578063869e27df146107e557600080fd5b806370a0823114610718578063715018a61461074e57806371538eed1461076357806375fed3c71461077957600080fd5b806358fa63ca116102cc57806358fa63ca146106ad57806359cd9031146106c2578063610e34b9146106d857806363a95492146106f857600080fd5b80633d3359cb146106385780633d6362d6146106585780634578b91d146106785780635396fee61461069857600080fd5b8063264d26dd11610375578063313ce56711610344578063313ce567146105bb578063351a964d146105d757806339509351146105f85780633bf314541461061857600080fd5b8063264d26dd1461053957806326b875a81461056d57806328bbcee3146105835780632e4cfd011461059957600080fd5b8063122fe685116103b1578063122fe685146104ce578063177aedb2146104ee57806318160ddd1461050457806323b872dd1461051957600080fd5b806301295143146103ee57806303fd2a451461042157806306fdde031461044f578063095ea7b31461049e57600080fd5b366103e957005b600080fd5b3480156103fa57600080fd5b5061040e610409366004613c0c565b610c0e565b6040519081526020015b60405180910390f35b34801561042d57600080fd5b5061043761dead81565b6040516001600160a01b039091168152602001610418565b34801561045b57600080fd5b5060408051808201909152600681527f527567475054000000000000000000000000000000000000000000000000000060208201525b6040516104189190613c25565b3480156104aa57600080fd5b506104be6104b9366004613ca6565b6110f5565b6040519015158152602001610418565b3480156104da57600080fd5b50601154610437906001600160a01b031681565b3480156104fa57600080fd5b5061040e60085481565b34801561051057600080fd5b5060015461040e565b34801561052557600080fd5b506104be610534366004613cd2565b61110f565b34801561054557600080fd5b506104377f000000000000000000000000000000000000000000000000000000000000000081565b34801561057957600080fd5b5061040e600b5481565b34801561058f57600080fd5b5061040e600c5481565b3480156105a557600080fd5b506105b96105b4366004613c0c565b611133565b005b3480156105c757600080fd5b5060405160128152602001610418565b3480156105e357600080fd5b50600f546104be906301000000900460ff1681565b34801561060457600080fd5b506104be610613366004613ca6565b6111ea565b34801561062457600080fd5b506105b9610633366004613d28565b611229565b34801561064457600080fd5b506105b9610653366004613d43565b611342565b34801561066457600080fd5b506105b9610673366004613d65565b61147b565b34801561068457600080fd5b506105b9610693366004613d65565b6115a8565b3480156106a457600080fd5b506105b9611780565b3480156106b957600080fd5b50610437600081565b3480156106ce57600080fd5b5061040e600e5481565b3480156106e457600080fd5b506105b96106f3366004613d43565b6117a1565b34801561070457600080fd5b506105b9610713366004613c0c565b6118b4565b34801561072457600080fd5b5061040e610733366004613d65565b6001600160a01b031660009081526014602052604090205490565b34801561075a57600080fd5b506105b96118c8565b34801561076f57600080fd5b5061040e600d5481565b34801561078557600080fd5b506105b9610794366004613c0c565b6118dc565b3480156107a557600080fd5b5061040e60025481565b3480156107bb57600080fd5b50601254610437906001600160a01b031681565b3480156107db57600080fd5b5061040e60065481565b3480156107f157600080fd5b5060016104be565b34801561080557600080fd5b506105b96119a3565b34801561081a57600080fd5b506000546001600160a01b0316610437565b34801561083857600080fd5b5061040e60045481565b34801561084e57600080fd5b506105b961085d366004613d28565b611b52565b34801561086e57600080fd5b5061040e611c65565b34801561088357600080fd5b5060408051808201909152600681527f52554747505400000000000000000000000000000000000000000000000000006020820152610491565b3480156108c957600080fd5b5061040e60075481565b3480156108df57600080fd5b506105b9611cd5565b3480156108f457600080fd5b506104377f000000000000000000000000af895347b991399df0ee7462136f46bdcb1cc9c981565b34801561092857600080fd5b506104be610937366004613ca6565b611e0b565b34801561094857600080fd5b50601054610437906001600160a01b031681565b34801561096857600080fd5b50600f54610437906501000000000090046001600160a01b031681565b34801561099157600080fd5b506104be6109a0366004613ca6565b611ec0565b3480156109b157600080fd5b5061040e61271081565b3480156109c757600080fd5b506105b9611ed6565b3480156109dc57600080fd5b50600f546104be9062010000900460ff1681565b3480156109fc57600080fd5b5061040e600a5481565b348015610a1257600080fd5b506105b9610a21366004613d65565b611f8c565b348015610a3257600080fd5b506105b9610a41366004613d43565b612139565b348015610a5257600080fd5b506105b9610a61366004613d65565b612272565b348015610a7257600080fd5b50600f546104be9060ff1681565b348015610a8c57600080fd5b506105b9610a9b366004613d82565b61252c565b348015610aac57600080fd5b50600f546104be90640100000000900460ff1681565b348015610ace57600080fd5b506105b9612639565b348015610ae357600080fd5b5061040e610af2366004613db7565b6001600160a01b03918216600090815260156020908152604080832093909416825291909152205490565b348015610b2957600080fd5b50600f546104be90610100900460ff1681565b348015610b4857600080fd5b5061040e60035481565b348015610b5e57600080fd5b506104be610b6d366004613d65565b60166020526000908152604090205460ff1681565b348015610b8e57600080fd5b506105b9610b9d366004613d65565b612656565b348015610bae57600080fd5b506105b9610bbd366004613c0c565b6126e3565b348015610bce57600080fd5b5061040e60055481565b348015610be457600080fd5b5061040e60095481565b348015610bfa57600080fd5b50601354610437906001600160a01b031681565b600f805464ff00000000191664010000000017905560006001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000163303610cc85760405162461bcd60e51b815260206004820152603b60248201527f4175746f2052656465656d3a2043616e6e6f7420757365206c6971756964697460448201527f7920726563656976657220746f207472696767657220746869732e000000000060648201526084015b60405180910390fd5b6000600b54600854610cda9190613e1f565b90506000600d54600a54610cee9190613e1f565b905047600082610cfe8588613e32565b610d089190613e6f565b90506000610d168288613e1f565b90506000610d25600283613e6f565b90506000610d338284613e1f565b9050600089905084600b6000828254610d4c9190613eaa565b9250508190555083600c6000828254610d659190613eaa565b9250508190555089600d6000828254610d7e9190613eaa565b90915550506040805160028082526060820183526000926020830190803683370190505090503081600081518110610db857610db8613ebd565b6001600160a01b03928316602091820292909201810191909152601354604080517fad5c46480000000000000000000000000000000000000000000000000000000081529051919093169263ad5c46489260048083019391928290030181865afa158015610e2a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e4e9190613eec565b81600181518110610e6157610e61613ebd565b6001600160a01b039283166020918202929092010152601354610e879130911684612797565b60408051878152602081018790529081018390524260608201527f67177a4f6165f6b644189028ad88b5c435bdec160e820e7ccff9964e2bf086329060800160405180910390a16013546010546040517f791ac9470000000000000000000000000000000000000000000000000000000081526001600160a01b039283169263791ac94792610f24928b9260009288929116904290600401613f4d565b600060405180830381600087803b158015610f3e57600080fd5b505af1158015610f52573d6000803e3d6000fd5b50506013546040517f791ac9470000000000000000000000000000000000000000000000000000000081526001600160a01b03909116925063791ac9479150610fa8908790600090869030904290600401613f4d565b600060405180830381600087803b158015610fc257600080fd5b505af1158015610fd6573d6000803e3d6000fd5b5050601354600092506001600160a01b0316905063f305d719610ff98a47613e1f565b30876000807f000000000000000000000000000000000000000000000000000000000000000061102b426104b0613eaa565b60405160e089901b7fffffffff000000000000000000000000000000000000000000000000000000001681526001600160a01b039687166004820152602481019590955260448501939093526064840191909152909216608482015260a481019190915260c40160606040518083038185885af11580156110b0573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906110d59190613f89565b600f805464ff00000000191690559e9d5050505050505050505050505050565b600033611103818585612797565b60019150505b92915050565b60003361111d8582856128ef565b61112885858561299f565b9150505b9392505050565b600b546008546111439190613e1f565b8111156111de5760405162461bcd60e51b815260206004820152604360248201527f52656465656d205061727469616c204d61726b6574696e67204665653a20496e60448201527f73756666696369656e74206d61726b6574696e672066656520636f6c6c65637460648201527f65642e0000000000000000000000000000000000000000000000000000000000608482015260a401610cbf565b6111e781612e92565b50565b3360008181526015602090815260408083206001600160a01b03871684529091528120549091906111039082908690611224908790613eaa565b612797565b611231613078565b801515600f60019054906101000a900460ff161515036112b95760405162461bcd60e51b815260206004820152603960248201527f55706461746520466565204163746976653a205468697320697320746865206360448201527f757272656e7420737461746520666f7220746865206665652e000000000000006064820152608401610cbf565b600f80548215156101008181027fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff8416179093556040805160ff94909304939093168015158352602083019190915242928201929092527febff09a8044adcaed71dd99feb377c7d6d24ba30b6e16de227453af0571a94cc906060015b60405180910390a15050565b61134a613078565b600f5462010000900460ff16156113ef5760405162461bcd60e51b815260206004820152604960248201527f557064617465205472616e73666572204665653a20416c6c207472616e73666560448201527f7220666565732077657265206c6f636b656420616e642063616e6e6f7420626560648201527f20757064617465642e0000000000000000000000000000000000000000000000608482015260a401610cbf565b6103e86113fc8284613eaa565b11156114705760405162461bcd60e51b815260206004820152603260248201527f557064617465205472616e73666572204665653a20546f74616c20666565732060448201527f63616e6e6f7420657863656564203130252e00000000000000000000000000006064820152608401610cbf565b600691909155600755565b611483613078565b6010546001600160a01b0380831691160361152c5760405162461bcd60e51b815260206004820152604a60248201527f557064617465204d61726b6574696e672052656365697665723a20546869732060448201527f6973207468652063757272656e74206d61726b6574696e67207265636569766560648201527f7220616464726573732e00000000000000000000000000000000000000000000608482015260a401610cbf565b601080546001600160a01b038381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681179093556040805191909216808252602082019390935242918101919091527f8bfedd1b0cbd471ea320a96f51b1fd6b6b718a19a3107a9c61ebeaa6f44722e090606001611336565b6115b0613078565b6001600160a01b0381166116525760405162461bcd60e51b815260206004820152604860248201527f5365742050726573616c6520466163746f72793a2043616e6e6f74207365742060448201527f7a65726f20616464726573732061732070726573616c6520666163746f72792060648201527f616464726573732e000000000000000000000000000000000000000000000000608482015260a401610cbf565b6012546001600160a01b03908116908216036116d65760405162461bcd60e51b815260206004820152603160248201527f5365742050726573616c6520466163746f72793a2043616e6e6f74207365742060448201527f7468652073616d6520616464726573732e0000000000000000000000000000006064820152608401610cbf565b601280547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b03831690811790915560008181526016602090815260409182902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001179055815192835242908301527f039449289674808c71e7fc23ae55828ead6d558f1536247d0a262091fb64c8e691015b60405180910390a150565b6000600c546009546117929190613e1f565b905061179d816130e1565b5050565b6117a9613078565b600f5462010000900460ff16156118285760405162461bcd60e51b815260206004820152603f60248201527f55706461746520427579204665653a20416c6c2062757920666565732077657260448201527f65206c6f636b656420616e642063616e6e6f7420626520757064617465642e006064820152608401610cbf565b6103e86118358284613eaa565b11156118a95760405162461bcd60e51b815260206004820152602d60248201527f55706461746520427579204665653a20546f74616c20666565732063616e6e6f60448201527f7420657863656564203130252e000000000000000000000000000000000000006064820152608401610cbf565b600291909155600355565b6118bc613078565b6111e78161dead6134a8565b6118d0613078565b6118da60006136e4565b565b6118e4613078565b80600e540361195b5760405162461bcd60e51b815260206004820152603760248201527f557064617465204d696e20537761703a2054686973206973207468652063757260448201527f72656e742076616c7565206f66206d696e20737761702e0000000000000000006064820152608401610cbf565b600e805490829055604080518281526020810184905242918101919091527fd86e81c9acadd69b19ee186f74e58793f2da31b11d914fd1b60892e7cfee82d790606001611336565b6119ab613078565b600f5460ff1615611a245760405162461bcd60e51b815260206004820152602860248201527f456e61626c652054726164696e673a2054726164696e6720616c72656164792060448201527f656e61626c65642e0000000000000000000000000000000000000000000000006064820152608401610cbf565b600f54610100900460ff1615611aa25760405162461bcd60e51b815260206004820152602560248201527f46696e616c697a652050726573616c653a2046656520616c726561647920616360448201527f746976652e0000000000000000000000000000000000000000000000000000006064820152608401610cbf565b600f546301000000900460ff1615611b225760405162461bcd60e51b815260206004820152602760248201527f46696e616c697a652050726573616c653a205377617020616c7265616479206560448201527f6e61626c65642e000000000000000000000000000000000000000000000000006064820152608401610cbf565b600f80547fffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff0000166301000101179055565b611b5a613078565b801515600f60039054906101000a900460ff16151503611be25760405162461bcd60e51b815260206004820152603c60248201527f557064617465205377617020456e61626c65643a20546869732069732074686560448201527f2063757272656e7420737461746520666f722074686520737761702e000000006064820152608401610cbf565b600f805482151563010000008181027fffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ffffff8416179093556040805160ff94909304939093168015158352602083019190915242928201929092527f5487e44b4ce35a3d9d2b5fa2d040d53cf855d6a99fe310cb058acb8ac27db02390606001611336565b60146020527f4f26c3876aa9f4b92579780beea1161a61f87ebf1ec6ee865b299e447ecba99c5461dead60009081527f8b9e18c5e04efe171d1e4f682ad90d753958a5ffe56db5290b0236c8e0b6db0054600154919291611cc69190613e1f565b611cd09190613e1f565b905090565b611cdd613078565b600f54610100900460ff1615611d5b5760405162461bcd60e51b815260206004820152602560248201527f46696e616c697a652050726573616c653a2046656520616c726561647920616360448201527f746976652e0000000000000000000000000000000000000000000000000000006064820152608401610cbf565b600f546301000000900460ff1615611ddb5760405162461bcd60e51b815260206004820152602760248201527f46696e616c697a652050726573616c653a205377617020616c7265616479206560448201527f6e61626c65642e000000000000000000000000000000000000000000000000006064820152608401610cbf565b600f80547fffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff00ff166301000100179055565b3360008181526015602090815260408083206001600160a01b038716845290915281205490919083811015611ea85760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760448201527f207a65726f0000000000000000000000000000000000000000000000000000006064820152608401610cbf565b611eb58286868403612797565b506001949350505050565b600033611ece81858561299f565b949350505050565b611ede613078565b600f5462010000900460ff1615611f5d5760405162461bcd60e51b815260206004820152602860248201527f4c6f636b20466565733a20416c6c2066656573207765726520616c726561647960448201527f206c6f636b65642e0000000000000000000000000000000000000000000000006064820152608401610cbf565b600f80547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ffff1662010000179055565b611f94613078565b6001600160a01b038116612012576040805162461bcd60e51b81526020600482015260248101919091527f5365742050726573616c6520416464726573733a2043616e6e6f74207365742060448201527f7a65726f20616464726573732061732070726573616c6520616464726573732e6064820152608401610cbf565b6011546001600160a01b03908116908216036120965760405162461bcd60e51b815260206004820152603160248201527f5365742050726573616c6520416464726573733a2043616e6e6f74207365742060448201527f7468652073616d6520616464726573732e0000000000000000000000000000006064820152608401610cbf565b601180547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b03831690811790915560008181526016602090815260409182902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001179055815192835242908301527f25fe33cf6b488b96dbf1b5bfe1fbb29a6bb8f312bcad5d6ab70cc798a72fa0eb9101611775565b612141613078565b600f5462010000900460ff16156121e65760405162461bcd60e51b815260206004820152604160248201527f5570646174652053656c6c204665653a20416c6c2073656c6c2066656573207760448201527f657265206c6f636b656420616e642063616e6e6f74206265207570646174656460648201527f2e00000000000000000000000000000000000000000000000000000000000000608482015260a401610cbf565b6103e86121f38284613eaa565b11156122675760405162461bcd60e51b815260206004820152602e60248201527f5570646174652053656c6c204665653a20546f74616c20666565732063616e6e60448201527f6f7420657863656564203130252e0000000000000000000000000000000000006064820152608401610cbf565b600491909155600555565b61227a613078565b6013546001600160a01b038083169116036122fd5760405162461bcd60e51b815260206004820152603260248201527f55706461746520526f757465723a20546869732069732074686520637572726560448201527f6e7420726f7574657220616464726573732e00000000000000000000000000006064820152608401610cbf565b601380546001600160a01b038381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681179093556040805191909216808252602082019390935242918101919091527ff3ecf26fdaa8c4750bb008a2ce64300dbfd4ef1001e7c59d2a89c17bcbfd60b59060600160405180910390a1601360009054906101000a90046001600160a01b03166001600160a01b031663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa1580156123cf573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906123f39190613eec565b6001600160a01b031663c9c6539630601360009054906101000a90046001600160a01b03166001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015612455573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906124799190613eec565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e085901b1681526001600160a01b039283166004820152911660248201526044016020604051808303816000875af11580156124de573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906125029190613eec565b600f60056101000a8154816001600160a01b0302191690836001600160a01b031602179055505050565b612534613078565b6001600160a01b03821660009081526016602052604090205481151560ff9091161515036125f05760405162461bcd60e51b815260206004820152604260248201527f536574204578636c7564652046726f6d20466565733a2054686973206973207460448201527f68652063757272656e7420737461746520666f7220746869732061646472657360648201527f732e000000000000000000000000000000000000000000000000000000000000608482015260a401610cbf565b6001600160a01b0391909116600090815260166020526040902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016911515919091179055565b6000600b5460085461264b9190613e1f565b90506111e781612e92565b61265e613078565b6001600160a01b0381166126da5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f64647265737300000000000000000000000000000000000000000000000000006064820152608401610cbf565b6111e7816136e4565b600c546009546126f39190613e1f565b81111561278e5760405162461bcd60e51b815260206004820152604360248201527f52656465656d205061727469616c204c6971756964697479204665653a20496e60448201527f73756666696369656e74206c69717569646974792066656520636f6c6c65637460648201527f65642e0000000000000000000000000000000000000000000000000000000000608482015260a401610cbf565b61179d816130e1565b6001600160a01b0383166128125760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460448201527f72657373000000000000000000000000000000000000000000000000000000006064820152608401610cbf565b6001600160a01b03821661288e5760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f20616464726560448201527f73730000000000000000000000000000000000000000000000000000000000006064820152608401610cbf565b6001600160a01b0383811660008181526015602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6001600160a01b038381166000908152601560209081526040808320938616835292905220547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8114612999578181101561298c5760405162461bcd60e51b815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e63650000006044820152606401610cbf565b6129998484848403612797565b50505050565b60006001600160a01b038416612a1d5760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f20616460448201527f64726573730000000000000000000000000000000000000000000000000000006064820152608401610cbf565b6001600160a01b038316612a995760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201527f65737300000000000000000000000000000000000000000000000000000000006064820152608401610cbf565b600f5460ff16612ca357336001600160a01b037f000000000000000000000000af895347b991399df0ee7462136f46bdcb1cc9c9161480612ae457506012546001600160a01b031633145b80612af957506000546001600160a01b031633145b80612b0e57506011546001600160a01b031633145b612bcc5760405162461bcd60e51b815260206004820152606960248201527f45524332303a204f6e6c79206f70657261746f722c206f776e6572206f72207060448201527f726573616c65206164647265737365732063616e2063616c6c2074686973206660648201527f756e6374696f6e2073696e63652074726164696e67206973206e6f742079657460848201527f20656e61626c65642e000000000000000000000000000000000000000000000060a482015260c401610cbf565b6000546001600160a01b03166001600160a01b0316846001600160a01b031603612ca357600f546001600160a01b0365010000000000909104811690841603612ca35760405162461bcd60e51b815260206004820152605060248201527f45524332303a204f776e657220616e64206f70657261746f7220617265206e6f60448201527f7420616c6c6f77656420746f2073656c6c2069662074726164696e672069732060648201527f6e6f742079657420656e61626c65642e00000000000000000000000000000000608482015260a401610cbf565b600f54640100000000900460ff1680612cd457506001600160a01b03841660009081526016602052604090205460ff165b15612ceb57612ce484848461374c565b905061112c565b600f546001600160a01b03858116650100000000009092041614801590612d1b5750600f546301000000900460ff165b8015612d385750600e54600d54600a54612d359190613e1f565b10155b15612d4a57612d48600e54610c0e565b505b600f548290610100900460ff168015612d7c57506001600160a01b03851660009081526016602052604090205460ff16155b15612d8f57612d8c85858561383b565b90505b6001600160a01b038516600090815260146020526040902054811115612e1d5760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e742065786365656473206260448201527f616c616e636500000000000000000000000000000000000000000000000000006064820152608401610cbf565b6001600160a01b03808616600081815260146020526040808220805486900390559287168082529083902080548501905591517fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90612e7f9085815260200190565b60405180910390a3506001949350505050565b600f805464ff000000001916640100000000179055600b8054829190600090612ebc908490613eaa565b9250508190555080600d6000828254612ed59190613eaa565b90915550506040805160028082526060820183526000926020830190803683370190505090503081600081518110612f0f57612f0f613ebd565b6001600160a01b03928316602091820292909201810191909152601354604080517fad5c46480000000000000000000000000000000000000000000000000000000081529051919093169263ad5c46489260048083019391928290030181865afa158015612f81573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612fa59190613eec565b81600181518110612fb857612fb8613ebd565b6001600160a01b039283166020918202929092010152601354612fde9130911684612797565b6013546010546040517f791ac9470000000000000000000000000000000000000000000000000000000081526001600160a01b039283169263791ac9479261303492879260009288929116904290600401613f4d565b600060405180830381600087803b15801561304e57600080fd5b505af1158015613062573d6000803e3d6000fd5b5050600f805464ff000000001916905550505050565b3361308b6000546001600160a01b031690565b6001600160a01b0316146118da5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610cbf565b600f805464ff00000000191664010000000017905560006001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001633036131bc5760405162461bcd60e51b815260206004820152604360248201527f52656465656d204c6971756964697479204665653a204c69717569646974792060448201527f72656365697665722063616e6e6f742063616c6c20746869732066756e63746960648201527f6f6e2e0000000000000000000000000000000000000000000000000000000000608482015260a401610cbf565b4760006131ca600285613e6f565b905060006131d88286613e1f565b905084600c60008282546131ec9190613eaa565b9250508190555084600d60008282546132059190613eaa565b9091555050604080516002808252606082018352600092602083019080368337019050509050308160008151811061323f5761323f613ebd565b6001600160a01b03928316602091820292909201810191909152601354604080517fad5c46480000000000000000000000000000000000000000000000000000000081529051919093169263ad5c46489260048083019391928290030181865afa1580156132b1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906132d59190613eec565b816001815181106132e8576132e8613ebd565b6001600160a01b03928316602091820292909201015260135461330e9130911688612797565b6013546040517f791ac9470000000000000000000000000000000000000000000000000000000081526001600160a01b039091169063791ac94790613360908690600090869030904290600401613f4d565b600060405180830381600087803b15801561337a57600080fd5b505af115801561338e573d6000803e3d6000fd5b5050601354600092506001600160a01b0316905063f305d7196133b18747613e1f565b30866000807f00000000000000000000000000000000000000000000000000000000000000006133e3426104b0613eaa565b60405160e089901b7fffffffff000000000000000000000000000000000000000000000000000000001681526001600160a01b039687166004820152602481019590955260448501939093526064840191909152909216608482015260a481019190915260c40160606040518083038185885af1158015613468573d6000803e3d6000fd5b50505050506040513d601f19601f8201168201806040525081019061348d9190613f89565b600f805464ff00000000191690559998505050505050505050565b600f805464ff0000000019166401000000001790557fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff215333016135525760405162461bcd60e51b815260206004820152603360248201527f42757920546f6b656e733a204465616420616464726573732063616e6e6f742060448201527f63616c6c20746869732066756e6374696f6e2e000000000000000000000000006064820152608401610cbf565b6040805160028082526060820183526000926020830190803683375050601354604080517fad5c464800000000000000000000000000000000000000000000000000000000815290519394506001600160a01b039091169263ad5c4648925060048083019260209291908290030181865afa1580156135d5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906135f99190613eec565b8160008151811061360c5761360c613ebd565b60200260200101906001600160a01b031690816001600160a01b031681525050308160018151811061364057613640613ebd565b6001600160a01b0392831660209182029290920101526013546040517fb6f9de9500000000000000000000000000000000000000000000000000000000815291169063b6f9de9590859061369f90600090869088904290600401613fb7565b6000604051808303818588803b1580156136b857600080fd5b505af11580156136cc573d6000803e3d6000fd5b5050600f805464ff0000000019169055505050505050565b600080546001600160a01b038381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6001600160a01b038316600090815260146020526040812054828110156137db5760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e742065786365656473206260448201527f616c616e636500000000000000000000000000000000000000000000000000006064820152608401610cbf565b6001600160a01b0380861660008181526014602052604080822087860390559287168082529083902080548701905591517fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90612e7f9087815260200190565b600f805464ff00000000191664010000000017908190556000906001600160a01b038581166501000000000090920416148015613887575060006003546002546138859190613eaa565b115b1561389d576138968483613961565b905061394c565b600f546001600160a01b0384811665010000000000909204161480156138d2575060006005546004546138d09190613eaa565b115b156138e15761389684836139d8565b600f546001600160a01b0385811665010000000000909204161480159061391f5750600f546001600160a01b03848116650100000000009092041614155b801561393a575060006007546006546139389190613eaa565b115b15613949576138968483613a38565b50805b600f805464ff00000000191690559392505050565b600f805464ff000000001916640100000000179055600354600254600091829161398b9190613eaa565b9050600061271061399c8386613e32565b6139a69190613e6f565b905060006139b48286613e1f565b90506139c1868385613a98565b600f805464ff000000001916905595945050505050565b600f805464ff0000000019166401000000001790556005546004546000918291613a029190613eaa565b90506000612710613a138386613e32565b613a1d9190613e6f565b90506000613a2b8286613e1f565b90506139c1868385613b4a565b600f805464ff0000000019166401000000001790556007546006546000918291613a629190613eaa565b90506000612710613a738386613e32565b613a7d9190613e6f565b90506000613a8b8286613e1f565b90506139c1868385613b71565b600f805464ff0000000019166401000000001790556002546000908290613abf9085613e32565b613ac99190613e6f565b90506000613ad78285613e1f565b9050613ae4828286613b98565b6001600160a01b03851660009081526014602052604081208054869290613b0c908490613e1f565b90915550503060009081526014602052604081208054869290613b30908490613eaa565b9091555050600f805464ff00000000191690555050505050565b600f805464ff0000000019166401000000001790556004546000908290613abf9085613e32565b600f805464ff0000000019166401000000001790556006546000908290613abf9085613e32565b600f805464ff00000000191664010000000017905560088054849190600090613bc2908490613eaa565b925050819055508160096000828254613bdb9190613eaa565b9250508190555080600a6000828254613bf49190613eaa565b9091555050600f805464ff0000000019169055505050565b600060208284031215613c1e57600080fd5b5035919050565b600060208083528351808285015260005b81811015613c5257858101830151858201604001528201613c36565b5060006040828601015260407fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f8301168501019250505092915050565b6001600160a01b03811681146111e757600080fd5b60008060408385031215613cb957600080fd5b8235613cc481613c91565b946020939093013593505050565b600080600060608486031215613ce757600080fd5b8335613cf281613c91565b92506020840135613d0281613c91565b929592945050506040919091013590565b80358015158114613d2357600080fd5b919050565b600060208284031215613d3a57600080fd5b61112c82613d13565b60008060408385031215613d5657600080fd5b50508035926020909101359150565b600060208284031215613d7757600080fd5b813561112c81613c91565b60008060408385031215613d9557600080fd5b8235613da081613c91565b9150613dae60208401613d13565b90509250929050565b60008060408385031215613dca57600080fd5b8235613dd581613c91565b91506020830135613de581613c91565b809150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b8181038181111561110957611109613df0565b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615613e6a57613e6a613df0565b500290565b600082613ea5577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500490565b8082018082111561110957611109613df0565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600060208284031215613efe57600080fd5b815161112c81613c91565b600081518084526020808501945080840160005b83811015613f425781516001600160a01b031687529582019590820190600101613f1d565b509495945050505050565b85815284602082015260a060408201526000613f6c60a0830186613f09565b6001600160a01b0394909416606083015250608001529392505050565b600080600060608486031215613f9e57600080fd5b8351925060208401519150604084015190509250925092565b848152608060208201526000613fd06080830186613f09565b6001600160a01b0394909416604083015250606001529291505056fea26469706673582212209e58b1955dedbd8c935e29362e91d8ec96159592f86438c3e232bf39fecfa7fc64736f6c63430008100033

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

0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d000000000000000000000000af895347b991399df0ee7462136f46bdcb1cc9c90000000000000000000000007d616728b7d350603b3f8b1b0a17a1d6433c4d61000000000000000000000000000000000000000000000000000000003b9aca00

-----Decoded View---------------
Arg [0] : routerAddress (address): 0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D
Arg [1] : projectOwnerAddress (address): 0xAF895347b991399Df0ee7462136f46BDCB1Cc9C9
Arg [2] : marketing (address): 0x7d616728b7D350603B3F8B1b0A17A1D6433C4D61
Arg [3] : supplyTotal (uint256): 1000000000

-----Encoded View---------------
4 Constructor Arguments found :
Arg [0] : 0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d
Arg [1] : 000000000000000000000000af895347b991399df0ee7462136f46bdcb1cc9c9
Arg [2] : 0000000000000000000000007d616728b7d350603b3f8b1b0a17a1d6433c4d61
Arg [3] : 000000000000000000000000000000000000000000000000000000003b9aca00


Deployed Bytecode Sourcemap

4117:22353:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18032:2044;;;;;;;;;;-1:-1:-1;18032:2044:0;;;;;:::i;:::-;;:::i;:::-;;;345:25:1;;;333:2;318:18;18032:2044:0;;;;;;;;5373:46;;;;;;;;;;;;5412:6;5373:46;;;;;-1:-1:-1;;;;;545:55:1;;;527:74;;515:2;500:18;5373:46:0;381:226:1;20678:101:0;;;;;;;;;;-1:-1:-1;20767:4:0;;;;;;;;;;;;;;;;;20678:101;;;;;;;:::i;21645:205::-;;;;;;;;;;-1:-1:-1;21645:205:0;;;;;:::i;:::-;;:::i;:::-;;;1868:14:1;;1861:22;1843:41;;1831:2;1816:18;21645:205:0;1703:187:1;5493:29:0;;;;;;;;;;-1:-1:-1;5493:29:0;;;;-1:-1:-1;;;;;5493:29:0;;;4680:40;;;;;;;;;;;;;;;;21021:108;;;;;;;;;;-1:-1:-1;21109:12:0;;21021:108;;21862:246;;;;;;;;;;-1:-1:-1;21862:246:0;;;;;:::i;:::-;;:::i;5274:42::-;;;;;;;;;;;;;;;4817:39;;;;;;;;;;;;;;;;4863;;;;;;;;;;;;;;;;8437:285;;;;;;;;;;-1:-1:-1;8437:285:0;;;;;:::i;:::-;;:::i;:::-;;20908:101;;;;;;;;;;-1:-1:-1;20908:101:0;;4306:2;2498:36:1;;2486:2;2471:18;20908:101:0;2356:184:1;5155:33:0;;;;;;;;;;-1:-1:-1;5155:33:0;;;;;;;;;;;22120:247;;;;;;;;;;-1:-1:-1;22120:247:0;;;;;:::i;:::-;;:::i;13309:316::-;;;;;;;;;;-1:-1:-1;13309:316:0;;;;;:::i;:::-;;:::i;12875:426::-;;;;;;;;;;-1:-1:-1;12875:426:0;;;;;:::i;:::-;;:::i;13970:439::-;;;;;;;;;;-1:-1:-1;13970:439:0;;;;;:::i;:::-;;:::i;14417:400::-;;;;;;;;;;-1:-1:-1;14417:400:0;;;;;:::i;:::-;;:::i;9310:186::-;;;;;;;;;;;;;:::i;5325:41::-;;;;;;;;;;;;5364:1;5325:41;;4951:34;;;;;;;;;;;;;;;;12061:396;;;;;;;;;;-1:-1:-1;12061:396:0;;;;;:::i;:::-;;:::i;20105:105::-;;;;;;;;;;-1:-1:-1;20105:105:0;;;;;:::i;:::-;;:::i;21141:127::-;;;;;;;;;;-1:-1:-1;21141:127:0;;;;;:::i;:::-;-1:-1:-1;;;;;21242:18:0;21215:7;21242:18;;;:9;:18;;;;;;;21141:127;1754:103;;;;;;;;;;;;;:::i;4909:35::-;;;;;;;;;;;;;;;;11743:310;;;;;;;;;;-1:-1:-1;11743:310:0;;;;;:::i;:::-;;:::i;4414:36::-;;;;;;;;;;;;;;;;5529:29;;;;;;;;;;-1:-1:-1;5529:29:0;;;;-1:-1:-1;;;;;5529:29:0;;;4588:39;;;;;;;;;;;;;;;;11074:83;;;;;;;;;;-1:-1:-1;5027:4:0;11074:83;;7434:369;;;;;;;;;;;;;:::i;1521:87::-;;;;;;;;;;-1:-1:-1;1567:7:0;1594:6;-1:-1:-1;;;;;1594:6:0;1521:87;;4500:37;;;;;;;;;;;;;;;;13633:329;;;;;;;;;;-1:-1:-1;13633:329:0;;;;;:::i;:::-;;:::i;11165:136::-;;;;;;;;;;;;;:::i;20791:105::-;;;;;;;;;;-1:-1:-1;20882:6:0;;;;;;;;;;;;;;;;;20791:105;;4634:39;;;;;;;;;;;;;;;;7811:264;;;;;;;;;;;;;:::i;5230:37::-;;;;;;;;;;;;;;;22379:445;;;;;;;;;;-1:-1:-1;22379:445:0;;;;;:::i;:::-;;:::i;5454:32::-;;;;;;;;;;-1:-1:-1;5454:32:0;;;;-1:-1:-1;;;;;5454:32:0;;;5428:19;;;;;;;;;;-1:-1:-1;5428:19:0;;;;;;;-1:-1:-1;;;;;5428:19:0;;;21280:184;;;;;;;;;;-1:-1:-1;21280:184:0;;;;;:::i;:::-;;:::i;4358:47::-;;;;;;;;;;;;4399:6;4358:47;;8083:152;;;;;;;;;;;;;:::i;5117:31::-;;;;;;;;;;-1:-1:-1;5117:31:0;;;;;;;;;;;4774:36;;;;;;;;;;;;;;;;14825:392;;;;;;;;;;-1:-1:-1;14825:392:0;;;;;:::i;:::-;;:::i;12465:402::-;;;;;;;;;;-1:-1:-1;12465:402:0;;;;;:::i;:::-;;:::i;11329:406::-;;;;;;;;;;-1:-1:-1;11329:406:0;;;;;:::i;:::-;;:::i;5040:32::-;;;;;;;;;;-1:-1:-1;5040:32:0;;;;;;;;15225:248;;;;;;;;;;-1:-1:-1;15225:248:0;;;;;:::i;:::-;;:::i;5195:26::-;;;;;;;;;;-1:-1:-1;5195:26:0;;;;;;;;;;;8243:186;;;;;;;;;;;;;:::i;21476:157::-;;;;;;;;;;-1:-1:-1;21476:157:0;;;;;:::i;:::-;-1:-1:-1;;;;;21595:21:0;;;21568:7;21595:21;;;:11;:21;;;;;;;;:30;;;;;;;;;;;;;21476:157;5079:31;;;;;;;;;;-1:-1:-1;5079:31:0;;;;;;;;;;;4457:36;;;;;;;;;;;;;;;;5745:49;;;;;;;;;;-1:-1:-1;5745:49:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;1865:201;;;;;;;;;;-1:-1:-1;1865:201:0;;;;;:::i;:::-;;:::i;9504:285::-;;;;;;;;;;-1:-1:-1;9504:285:0;;;;;:::i;:::-;;:::i;4544:37::-;;;;;;;;;;;;;;;;4727:40;;;;;;;;;;;;;;;;5571:21;;;;;;;;;;-1:-1:-1;5571:21:0;;;;-1:-1:-1;;;;;5571:21:0;;;18032:2044;5853:6;:13;;-1:-1:-1;;5853:13:0;;;;;18101:7;-1:-1:-1;;;;;18145:17:0::1;18131:31;:10;:31:::0;18123:103:::1;;;::::0;-1:-1:-1;;;18123:103:0;;4561:2:1;18123:103:0::1;::::0;::::1;4543:21:1::0;4600:2;4580:18;;;4573:30;4639:34;4619:18;;;4612:62;4710:29;4690:18;;;4683:57;4757:19;;18123:103:0::1;;;;;;;;;18237:25;18289:20;;18265:21;;:44;;;;:::i;:::-;18237:72;;18320:21;18364:16;;18344:17;;:36;;;;:::i;:::-;18320:60:::0;-1:-1:-1;18418:21:0::1;18393:22;18320:60:::0;18485:34:::1;18502:17:::0;18485:14;:34:::1;:::i;:::-;:50;;;;:::i;:::-;18450:85:::0;-1:-1:-1;18546:32:0::1;18581:41;18450:85:::0;18581:14;:41:::1;:::i;:::-;18546:76:::0;-1:-1:-1;18633:26:0::1;18662:28;18689:1;18546:76:::0;18662:28:::1;:::i;:::-;18633:57:::0;-1:-1:-1;18701:27:0::1;18731:45;18633:57:::0;18731:24;:45:::1;:::i;:::-;18701:75;;18787:20;18810:14;18787:37;;18861:24;18837:20;;:48;;;;;;;:::i;:::-;;;;;;;;18920:24;18896:20;;:48;;;;;;;:::i;:::-;;;;;;;;18975:14;18955:16;;:34;;;;;;;:::i;:::-;::::0;;;-1:-1:-1;;19026:16:0::1;::::0;;19040:1:::1;19026:16:::0;;;;;::::1;::::0;;19002:21:::1;::::0;19026:16:::1;::::0;::::1;::::0;;::::1;::::0;::::1;;::::0;-1:-1:-1;19026:16:0::1;19002:40;;19071:4;19053;19058:1;19053:7;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;19053:23:0;;::::1;:7;::::0;;::::1;::::0;;;;;;:23;;;;19097:6:::1;::::0;:13:::1;::::0;;;;;;;:6;;;::::1;::::0;:11:::1;::::0;:13:::1;::::0;;::::1;::::0;19053:7;;19097:13;;;;;:6;:13:::1;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;19087:4;19092:1;19087:7;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;19087:23:0;;::::1;:7;::::0;;::::1;::::0;;;;;:23;19155:6:::1;::::0;19123:54:::1;::::0;19140:4:::1;::::0;19155:6:::1;19164:12:::0;19123:8:::1;:54::i;:::-;19199:93;::::0;;6616:25:1;;;6672:2;6657:18;;6650:34;;;6700:18;;;6693:34;;;19276:15:0::1;6758:2:1::0;6743:18;;6736:34;19199:93:0::1;::::0;6603:3:1;6588:19;19199:93:0::1;;;;;;;19305:6;::::0;19451:17:::1;::::0;19305:204:::1;::::0;;;;-1:-1:-1;;;;;19305:6:0;;::::1;::::0;:57:::1;::::0;:204:::1;::::0;19377:24;;19305:6:::1;::::0;19432:4;;19451:17;::::1;::::0;19483:15:::1;::::0;19305:204:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;-1:-1:-1::0;;19522:6:0::1;::::0;:194:::1;::::0;;;;-1:-1:-1;;;;;19522:6:0;;::::1;::::0;-1:-1:-1;19522:57:0::1;::::0;-1:-1:-1;19522:194:0::1;::::0;19594:18;;19522:6:::1;::::0;19643:4;;19670::::1;::::0;19690:15:::1;::::0;19522:194:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;-1:-1:-1::0;;19763:6:0::1;::::0;19742:17:::1;::::0;-1:-1:-1;;;;;;19763:6:0::1;::::0;-1:-1:-1;19763:22:0::1;19807:38;19831:14:::0;19807:21:::1;:38;:::i;:::-;19879:4;19899:19:::0;19933:1:::1;::::0;19965:17:::1;19997:23;:15;20015:5;19997:23;:::i;:::-;19763:268;::::0;::::1;::::0;;;;;;;-1:-1:-1;;;;;8262:15:1;;;19763:268:0::1;::::0;::::1;8244:34:1::0;8294:18;;;8287:34;;;;8337:18;;;8330:34;;;;8380:18;;;8373:34;;;;8444:15;;;8423:19;;;8416:44;8476:19;;;8469:35;;;;8155:19;;19763:268:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;5889:6:::0;:14;;-1:-1:-1;;5889:14:0;;;19737:294;18032:2044;-1:-1:-1;;;;;;;;;;;;;;18032:2044:0:o;21645:205::-;21728:4;21764:10;21785:35;21764:10;21804:7;21813:6;21785:8;:35::i;:::-;21838:4;21831:11;;;21645:205;;;;;:::o;21862:246::-;21961:4;21996:10;22017:38;22033:4;21996:10;22048:6;22017:15;:38::i;:::-;22073:27;22083:4;22089:2;22093:6;22073:9;:27::i;:::-;22066:34;;;21862:246;;;;;;:::o;8437:285::-;8566:20;;8542:21;;:44;;;;:::i;:::-;8524:14;:62;;8516:142;;;;-1:-1:-1;;;8516:142:0;;9028:2:1;8516:142:0;;;9010:21:1;9067:2;9047:18;;;9040:30;9106:34;9086:18;;;9079:62;9177:34;9157:18;;;9150:62;9249:5;9228:19;;;9221:34;9272:19;;8516:142:0;8826:471:1;8516:142:0;8679:35;8699:14;8679:19;:35::i;:::-;8437:285;:::o;22120:247::-;22246:10;22210:4;21595:21;;;:11;:21;;;;;;;;-1:-1:-1;;;;;21595:30:0;;;;;;;;;;22210:4;;22246:10;22267:70;;22246:10;;21595:30;;22295:41;;22326:10;;22295:41;:::i;:::-;22267:8;:70::i;13309:316::-;1260:13;:11;:13::i;:::-;13403:9:::1;13388:24;;:11;;;;;;;;;;;:24;;::::0;13380:94:::1;;;::::0;-1:-1:-1;;;13380:94:0;;9504:2:1;13380:94:0::1;::::0;::::1;9486:21:1::0;9543:2;9523:18;;;9516:30;9582:34;9562:18;;;9555:62;9653:27;9633:18;;;9626:55;9698:19;;13380:94:0::1;9302:421:1::0;13380:94:0::1;13502:11;::::0;;13524:23;::::1;;13502:11;13524:23:::0;;::::1;::::0;;::::1;;::::0;;;13563:54:::1;::::0;;13502:11:::1;::::0;;;::::1;::::0;;;::::1;9943:14:1::0;;9936:22;9918:41;;9990:2;9975:18;;9968:50;;;;13601:15:0::1;10034:18:1::0;;;10027:34;;;;13563:54:0::1;::::0;9906:2:1;9891:18;13563:54:0::1;;;;;;;;13369:256;13309:316:::0;:::o;12875:426::-;1260:13;:11;:13::i;:::-;12991:11:::1;::::0;;;::::1;;;12990:12;12982:98;;;::::0;-1:-1:-1;;;12982:98:0;;10274:2:1;12982:98:0::1;::::0;::::1;10256:21:1::0;10313:2;10293:18;;;10286:30;10352:34;10332:18;;;10325:62;10423:34;10403:18;;;10396:62;10495:11;10474:19;;;10467:40;10524:19;;12982:98:0::1;10072:477:1::0;12982:98:0::1;13136:4;13099:33;13117:15:::0;13099;:33:::1;:::i;:::-;:41;;13091:104;;;::::0;-1:-1:-1;;;13091:104:0;;10756:2:1;13091:104:0::1;::::0;::::1;10738:21:1::0;10795:2;10775:18;;;10768:30;10834:34;10814:18;;;10807:62;10905:20;10885:18;;;10878:48;10943:19;;13091:104:0::1;10554:414:1::0;13091:104:0::1;13206:20;:38:::0;;;;13255:20:::1;:38:::0;12875:426::o;13970:439::-;1260:13;:11;:13::i;:::-;14071:17:::1;::::0;-1:-1:-1;;;;;14071:41:0;;::::1;:17:::0;::::1;:41:::0;14063:128:::1;;;::::0;-1:-1:-1;;;14063:128:0;;11175:2:1;14063:128:0::1;::::0;::::1;11157:21:1::0;11214:2;11194:18;;;11187:30;11253:34;11233:18;;;11226:62;11324:34;11304:18;;;11297:62;11396:12;11375:19;;;11368:41;11426:19;;14063:128:0::1;10973:478:1::0;14063:128:0::1;14233:17;::::0;;-1:-1:-1;;;;;14261:40:0;;::::1;::::0;;::::1;::::0;::::1;::::0;;;14317:84:::1;::::0;;14233:17;;;::::1;11719:34:1::0;;;11784:2;11769:18;;11762:43;;;;14385:15:0::1;11821:18:1::0;;;11814:34;;;;14317:84:0::1;::::0;11646:2:1;11631:18;14317:84:0::1;11456:398:1::0;14417:400:0;1260:13;:11;:13::i;:::-;-1:-1:-1;;;;;14495:17:0;::::1;14487:102;;;::::0;-1:-1:-1;;;14487:102:0;;12061:2:1;14487:102:0::1;::::0;::::1;12043:21:1::0;12100:2;12080:18;;;12073:30;12139:34;12119:18;;;12112:62;12210:34;12190:18;;;12183:62;12282:10;12261:19;;;12254:39;12310:19;;14487:102:0::1;11859:476:1::0;14487:102:0::1;14615:14;::::0;-1:-1:-1;;;;;14615:14:0;;::::1;14608:21:::0;;::::1;::::0;14600:83:::1;;;::::0;-1:-1:-1;;;14600:83:0;;12542:2:1;14600:83:0::1;::::0;::::1;12524:21:1::0;12581:2;12561:18;;;12554:30;12620:34;12600:18;;;12593:62;12691:19;12671:18;;;12664:47;12728:19;;14600:83:0::1;12340:413:1::0;14600:83:0::1;14694:14;:20:::0;;;::::1;-1:-1:-1::0;;;;;14694:20:0;::::1;::::0;;::::1;::::0;;;-1:-1:-1;14725:22:0;;;:17:::1;:22;::::0;;;;;;;;:29;;;::::1;-1:-1:-1::0;14725:29:0::1;::::0;;14770:39;;12932:74:1;;;14793:15:0::1;13022:18:1::0;;;13015:34;14770:39:0::1;::::0;12905:18:1;14770:39:0::1;;;;;;;;14417:400:::0;:::o;9310:186::-;9363:22;9412:20;;9388:21;;:44;;;;:::i;:::-;9363:69;;9453:35;9473:14;9453:19;:35::i;:::-;;9352:144;9310:186::o;12061:396::-;1260:13;:11;:13::i;:::-;12172:11:::1;::::0;;;::::1;;;12171:12;12163:88;;;::::0;-1:-1:-1;;;12163:88:0;;13262:2:1;12163:88:0::1;::::0;::::1;13244:21:1::0;13301:2;13281:18;;;13274:30;13340:34;13320:18;;;13313:62;13411:33;13391:18;;;13384:61;13462:19;;12163:88:0::1;13060:427:1::0;12163:88:0::1;12307:4;12270:33;12288:15:::0;12270;:33:::1;:::i;:::-;:41;;12262:99;;;::::0;-1:-1:-1;;;12262:99:0;;13694:2:1;12262:99:0::1;::::0;::::1;13676:21:1::0;13733:2;13713:18;;;13706:30;13772:34;13752:18;;;13745:62;13843:15;13823:18;;;13816:43;13876:19;;12262:99:0::1;13492:409:1::0;12262:99:0::1;12372:15;:33:::0;;;;12416:15:::1;:33:::0;12061:396::o;20105:105::-;1260:13;:11;:13::i;:::-;20179:23:::1;20189:6;5412;20179:9;:23::i;1754:103::-:0;1260:13;:11;:13::i;:::-;1819:30:::1;1846:1;1819:18;:30::i;:::-;1754:103::o:0;11743:310::-;1260:13;:11;:13::i;:::-;11835:10:::1;11824:7;;:21:::0;11816:89:::1;;;::::0;-1:-1:-1;;;11816:89:0;;14108:2:1;11816:89:0::1;::::0;::::1;14090:21:1::0;14147:2;14127:18;;;14120:30;14186:34;14166:18;;;14159:62;14257:25;14237:18;;;14230:53;14300:19;;11816:89:0::1;13906:419:1::0;11816:89:0::1;11937:7;::::0;;11955:20;;;;11991:54:::1;::::0;;14532:25:1;;;14588:2;14573:18;;14566:34;;;12029:15:0::1;14616:18:1::0;;;14609:34;;;;11991:54:0::1;::::0;14520:2:1;14505:18;11991:54:0::1;14330:319:1::0;7434:369:0;1260:13;:11;:13::i;:::-;7498:12:::1;::::0;::::1;;7497:13;7489:66;;;::::0;-1:-1:-1;;;7489:66:0;;14856:2:1;7489:66:0::1;::::0;::::1;14838:21:1::0;14895:2;14875:18;;;14868:30;14934:34;14914:18;;;14907:62;15005:10;14985:18;;;14978:38;15033:19;;7489:66:0::1;14654:404:1::0;7489:66:0::1;7575:11;::::0;::::1;::::0;::::1;;;7574:12;7566:62;;;::::0;-1:-1:-1;;;7566:62:0;;15265:2:1;7566:62:0::1;::::0;::::1;15247:21:1::0;15304:2;15284:18;;;15277:30;15343:34;15323:18;;;15316:62;15414:7;15394:18;;;15387:35;15439:19;;7566:62:0::1;15063:401:1::0;7566:62:0::1;7648:13;::::0;;;::::1;;;7647:14;7639:66;;;::::0;-1:-1:-1;;;7639:66:0;;15671:2:1;7639:66:0::1;::::0;::::1;15653:21:1::0;15710:2;15690:18;;;15683:30;15749:34;15729:18;;;15722:62;15820:9;15800:18;;;15793:37;15847:19;;7639:66:0::1;15469:403:1::0;7639:66:0::1;7716:12;:19:::0;;7775:20;;;;;;7434:369::o;13633:329::-;1260:13;:11;:13::i;:::-;13731:9:::1;13714:26;;:13;;;;;;;;;;;:26;;::::0;13706:99:::1;;;::::0;-1:-1:-1;;;13706:99:0;;16079:2:1;13706:99:0::1;::::0;::::1;16061:21:1::0;16118:2;16098:18;;;16091:30;16157:34;16137:18;;;16130:62;16228:30;16208:18;;;16201:58;16276:19;;13706:99:0::1;15877:424:1::0;13706:99:0::1;13833:13;::::0;;13857:25;::::1;;13833:13:::0;13857:25;;::::1;::::0;;::::1;;::::0;;;13898:56:::1;::::0;;13833:13:::1;::::0;;;::::1;::::0;;;::::1;9943:14:1::0;;9936:22;9918:41;;9990:2;9975:18;;9968:50;;;;13938:15:0::1;10034:18:1::0;;;10027:34;;;;13898:56:0::1;::::0;9906:2:1;9891:18;13898:56:0::1;9728:339:1::0;11165:136:0;21242:9;:18;;;;5412:6;11217:7;21242:18;;;;;21109:12;;11217:7;;21242:18;11244:31;;21242:18;11244:31;:::i;:::-;:49;;;;:::i;:::-;11237:56;;11165:136;:::o;7811:264::-;1260:13;:11;:13::i;:::-;7877:11:::1;::::0;::::1;::::0;::::1;;;7876:12;7868:62;;;::::0;-1:-1:-1;;;7868:62:0;;15265:2:1;7868:62:0::1;::::0;::::1;15247:21:1::0;15304:2;15284:18;;;15277:30;15343:34;15323:18;;;15316:62;15414:7;15394:18;;;15387:35;15439:19;;7868:62:0::1;15063:401:1::0;7868:62:0::1;7950:13;::::0;;;::::1;;;7949:14;7941:66;;;::::0;-1:-1:-1;;;7941:66:0;;15671:2:1;7941:66:0::1;::::0;::::1;15653:21:1::0;15710:2;15690:18;;;15683:30;15749:34;15729:18;;;15722:62;15820:9;15800:18;;;15793:37;15847:19;;7941:66:0::1;15469:403:1::0;7941:66:0::1;8018:11;:18:::0;;8047:20;;;;;;7811:264::o;22379:445::-;22510:10;22474:4;21595:21;;;:11;:21;;;;;;;;-1:-1:-1;;;;;21595:30:0;;;;;;;;;;22474:4;;22510:10;22625:15;22605:16;:35;;22597:85;;;;-1:-1:-1;;;22597:85:0;;16508:2:1;22597:85:0;;;16490:21:1;16547:2;16527:18;;;16520:30;16586:34;16566:18;;;16559:62;16657:7;16637:18;;;16630:35;16682:19;;22597:85:0;16306:401:1;22597:85:0;22718:63;22727:8;22737:7;22765:15;22746:16;:34;22718:8;:63::i;:::-;-1:-1:-1;22812:4:0;;22379:445;-1:-1:-1;;;;22379:445:0:o;21280:184::-;21361:4;21397:10;21425:31;21397:10;21445:2;21449:6;21425:9;:31::i;:::-;21418:38;21280:184;-1:-1:-1;;;;21280:184:0:o;8083:152::-;1260:13;:11;:13::i;:::-;8142:11:::1;::::0;;;::::1;;;8141:12;8133:65;;;::::0;-1:-1:-1;;;8133:65:0;;16914:2:1;8133:65:0::1;::::0;::::1;16896:21:1::0;16953:2;16933:18;;;16926:30;16992:34;16972:18;;;16965:62;17063:10;17043:18;;;17036:38;17091:19;;8133:65:0::1;16712:404:1::0;8133:65:0::1;8209:11;:18:::0;;;::::1;::::0;::::1;::::0;;8083:152::o;14825:392::-;1260:13;:11;:13::i;:::-;-1:-1:-1;;;;;14903:17:0;::::1;14895:94;;;::::0;;-1:-1:-1;;;14895:94:0;;17323:2:1;14895:94:0::1;::::0;::::1;17305:21:1::0;17342:18;;;17335:30;;;;17401:34;17381:18;;;17374:62;17472:34;17452:18;;;17445:62;17524:19;;14895:94:0::1;17121:428:1::0;14895:94:0::1;15015:14;::::0;-1:-1:-1;;;;;15015:14:0;;::::1;15008:21:::0;;::::1;::::0;15000:83:::1;;;::::0;-1:-1:-1;;;15000:83:0;;17756:2:1;15000:83:0::1;::::0;::::1;17738:21:1::0;17795:2;17775:18;;;17768:30;17834:34;17814:18;;;17807:62;17905:19;17885:18;;;17878:47;17942:19;;15000:83:0::1;17554:413:1::0;15000:83:0::1;15094:14;:20:::0;;;::::1;-1:-1:-1::0;;;;;15094:20:0;::::1;::::0;;::::1;::::0;;;-1:-1:-1;15125:22:0;;;:17:::1;:22;::::0;;;;;;;;:29;;;::::1;-1:-1:-1::0;15125:29:0::1;::::0;;15170:39;;12932:74:1;;;15193:15:0::1;13022:18:1::0;;;13015:34;15170:39:0::1;::::0;12905:18:1;15170:39:0::1;12758:297:1::0;12465:402:0;1260:13;:11;:13::i;:::-;12577:11:::1;::::0;;;::::1;;;12576:12;12568:90;;;::::0;-1:-1:-1;;;12568:90:0;;18174:2:1;12568:90:0::1;::::0;::::1;18156:21:1::0;18213:2;18193:18;;;18186:30;18252:34;18232:18;;;18225:62;18323:34;18303:18;;;18296:62;18395:3;18374:19;;;18367:32;18416:19;;12568:90:0::1;17972:469:1::0;12568:90:0::1;12714:4;12677:33;12695:15:::0;12677;:33:::1;:::i;:::-;:41;;12669:100;;;::::0;-1:-1:-1;;;12669:100:0;;18648:2:1;12669:100:0::1;::::0;::::1;18630:21:1::0;18687:2;18667:18;;;18660:30;18726:34;18706:18;;;18699:62;18797:16;18777:18;;;18770:44;18831:19;;12669:100:0::1;18446:410:1::0;12669:100:0::1;12780:16;:34:::0;;;;12825:16:::1;:34:::0;12465:402::o;11329:406::-;1260:13;:11;:13::i;:::-;11416:6:::1;::::0;-1:-1:-1;;;;;11408:28:0;;::::1;11416:6:::0;::::1;11408:28:::0;11400:91:::1;;;::::0;-1:-1:-1;;;11400:91:0;;19063:2:1;11400:91:0::1;::::0;::::1;19045:21:1::0;19102:2;19082:18;;;19075:30;19141:34;19121:18;;;19114:62;19212:20;19192:18;;;19185:48;19250:19;;11400:91:0::1;18861:414:1::0;11400:91:0::1;11530:6;::::0;;-1:-1:-1;;;;;11548:27:0;;::::1;::::0;;::::1;::::0;::::1;::::0;;;11591:51:::1;::::0;;11530:6;;;::::1;11719:34:1::0;;;11784:2;11769:18;;11762:43;;;;11626:15:0::1;11821:18:1::0;;;11814:34;;;;11591:51:0::1;::::0;11646:2:1;11631:18;11591:51:0::1;;;;;;;11669:6;;;;;;;;;-1:-1:-1::0;;;;;11669:6:0::1;-1:-1:-1::0;;;;;11669:14:0::1;;:16;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;11660:37:0::1;;11706:4;11713:6;;;;;;;;;-1:-1:-1::0;;;;;11713:6:0::1;-1:-1:-1::0;;;;;11713:11:0::1;;:13;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;11660:67;::::0;;::::1;::::0;;;;;;-1:-1:-1;;;;;19533:15:1;;;11660:67:0::1;::::0;::::1;19515:34:1::0;19585:15;;19565:18;;;19558:43;19427:18;;11660:67:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;11653:4;;:74;;;;;-1:-1:-1::0;;;;;11653:74:0::1;;;;;-1:-1:-1::0;;;;;11653:74:0::1;;;;;;11389:346;11329:406:::0;:::o;15225:248::-;1260:13;:11;:13::i;:::-;-1:-1:-1;;;;;15318:23:0;::::1;;::::0;;;:17:::1;:23;::::0;;;;;:33;::::1;;:23;::::0;;::::1;:33;;::::0;15310:112:::1;;;::::0;-1:-1:-1;;;15310:112:0;;19814:2:1;15310:112:0::1;::::0;::::1;19796:21:1::0;19853:2;19833:18;;;19826:30;19892:34;19872:18;;;19865:62;19963:34;19943:18;;;19936:62;20035:4;20014:19;;;20007:33;20057:19;;15310:112:0::1;19612:470:1::0;15310:112:0::1;-1:-1:-1::0;;;;;15433:23:0;;;::::1;;::::0;;;:17:::1;:23;::::0;;;;:32;;;::::1;::::0;::::1;;::::0;;;::::1;::::0;;15225:248::o;8243:186::-;8296:22;8345:20;;8321:21;;:44;;;;:::i;:::-;8296:69;;8386:35;8406:14;8386:19;:35::i;1865:201::-;1260:13;:11;:13::i;:::-;-1:-1:-1;;;;;1954:22:0;::::1;1946:73;;;::::0;-1:-1:-1;;;1946:73:0;;20289:2:1;1946:73:0::1;::::0;::::1;20271:21:1::0;20328:2;20308:18;;;20301:30;20367:34;20347:18;;;20340:62;20438:8;20418:18;;;20411:36;20464:19;;1946:73:0::1;20087:402:1::0;1946:73:0::1;2030:28;2049:8;2030:18;:28::i;9504:285::-:0;9633:20;;9609:21;;:44;;;;:::i;:::-;9591:14;:62;;9583:142;;;;-1:-1:-1;;;9583:142:0;;20696:2:1;9583:142:0;;;20678:21:1;20735:2;20715:18;;;20708:30;20774:34;20754:18;;;20747:62;20845:34;20825:18;;;20818:62;20917:5;20896:19;;;20889:34;20940:19;;9583:142:0;20494:471:1;9583:142:0;9746:35;9766:14;9746:19;:35::i;23156:358::-;-1:-1:-1;;;;;23261:22:0;;23253:71;;;;-1:-1:-1;;;23253:71:0;;21172:2:1;23253:71:0;;;21154:21:1;21211:2;21191:18;;;21184:30;21250:34;21230:18;;;21223:62;21321:6;21301:18;;;21294:34;21345:19;;23253:71:0;20970:400:1;23253:71:0;-1:-1:-1;;;;;23343:21:0;;23335:68;;;;-1:-1:-1;;;23335:68:0;;21577:2:1;23335:68:0;;;21559:21:1;21616:2;21596:18;;;21589:30;21655:34;21635:18;;;21628:62;21726:4;21706:18;;;21699:32;21748:19;;23335:68:0;21375:398:1;23335:68:0;-1:-1:-1;;;;;23416:21:0;;;;;;;:11;:21;;;;;;;;:30;;;;;;;;;;;;;:39;;;23471:35;;345:25:1;;;23471:35:0;;318:18:1;23471:35:0;;;;;;;23156:358;;;:::o;23526:428::-;-1:-1:-1;;;;;21595:21:0;;;23630:24;21595:21;;;:11;:21;;;;;;;;:30;;;;;;;;;;23720:17;23700:37;;23696:251;;23782:6;23762:16;:26;;23754:68;;;;-1:-1:-1;;;23754:68:0;;21980:2:1;23754:68:0;;;21962:21:1;22019:2;21999:18;;;21992:30;22058:31;22038:18;;;22031:59;22107:18;;23754:68:0;21778:353:1;23754:68:0;23866:54;23875:8;23885:7;23913:6;23894:16;:25;23866:8;:54::i;:::-;23619:335;23526:428;;;:::o;24441:1451::-;24528:4;-1:-1:-1;;;;;24553:18:0;;24545:68;;;;-1:-1:-1;;;24545:68:0;;22338:2:1;24545:68:0;;;22320:21:1;22377:2;22357:18;;;22350:30;22416:34;22396:18;;;22389:62;22487:7;22467:18;;;22460:35;22512:19;;24545:68:0;22136:401:1;24545:68:0;-1:-1:-1;;;;;24632:16:0;;24624:64;;;;-1:-1:-1;;;24624:64:0;;22744:2:1;24624:64:0;;;22726:21:1;22783:2;22763:18;;;22756:30;22822:34;22802:18;;;22795:62;22893:5;22873:18;;;22866:33;22916:19;;24624:64:0;22542:399:1;24624:64:0;24706:12;;;;24701:454;;24743:10;-1:-1:-1;;;;;24757:12:0;24743:26;;;:58;;-1:-1:-1;24787:14:0;;-1:-1:-1;;;;;24787:14:0;24773:10;:28;24743:58;:83;;;-1:-1:-1;1567:7:0;1594:6;-1:-1:-1;;;;;1594:6:0;24805:10;:21;24743:83;:115;;;-1:-1:-1;24844:14:0;;-1:-1:-1;;;;;24844:14:0;24830:10;:28;24743:115;24735:233;;;;-1:-1:-1;;;24735:233:0;;23148:2:1;24735:233:0;;;23130:21:1;23187:3;23167:18;;;23160:31;23227:34;23207:18;;;23200:62;23298:34;23278:18;;;23271:62;23370:34;23349:19;;;23342:63;23442:11;23421:19;;;23414:40;23471:19;;24735:233:0;22946:550:1;24735:233:0;1567:7;1594:6;-1:-1:-1;;;;;1594:6:0;-1:-1:-1;;;;;24989:15:0;:4;-1:-1:-1;;;;;24989:15:0;;24985:159;;25039:4;;-1:-1:-1;;;;;25039:4:0;;;;;;25033:10;;;;25025:103;;;;-1:-1:-1;;;25025:103:0;;23703:2:1;25025:103:0;;;23685:21:1;23742:2;23722:18;;;23715:30;23781:34;23761:18;;;23754:62;23852:34;23832:18;;;23825:62;23924:18;23903:19;;;23896:47;23960:19;;25025:103:0;23501:484:1;25025:103:0;25171:6;;;;;;;;:33;;-1:-1:-1;;;;;;25181:23:0;;;;;;:17;:23;;;;;;;;25171:33;25167:105;;;25228:32;25243:4;25249:2;25253:6;25228:14;:32::i;:::-;25221:39;;;;25167:105;25296:4;;-1:-1:-1;;;;;25288:12:0;;;25296:4;;;;;25288:12;;;;:29;;-1:-1:-1;25304:13:0;;;;;;;25288:29;:80;;;;;25361:7;;25341:16;;25321:17;;:36;;;;:::i;:::-;:47;;25288:80;25284:132;;;25385:19;25396:7;;25385:10;:19::i;:::-;;25284:132;25471:11;;25448:6;;25471:11;;;;;:39;;;;-1:-1:-1;;;;;;25487:23:0;;;;;;:17;:23;;;;;;;;25486:24;25471:39;25467:122;;;25539:38;25560:4;25566:2;25570:6;25539:20;:38::i;:::-;25527:50;;25467:122;-1:-1:-1;;;;;25609:15:0;;;;;;:9;:15;;;;;;:28;-1:-1:-1;25609:28:0;25601:79;;;;-1:-1:-1;;;25601:79:0;;24192:2:1;25601:79:0;;;24174:21:1;24231:2;24211:18;;;24204:30;24270:34;24250:18;;;24243:62;24341:8;24321:18;;;24314:36;24367:19;;25601:79:0;23990:402:1;25601:79:0;-1:-1:-1;;;;;25734:15:0;;;;;;;:9;:15;;;;;;;;:27;;;25716:45;;25776:13;;;;;;;;;;:26;;;;;;25831:29;;;;;;25752:9;345:25:1;;333:2;318:18;;199:177;25831:29:0;;;;;;;;-1:-1:-1;25880:4:0;;24441:1451;-1:-1:-1;;;;24441:1451:0:o;8730:572::-;5853:6;:13;;-1:-1:-1;;5853:13:0;;;;;8813:20:::1;:38:::0;;8837:14;;8813:20;5853:13;;8813:38:::1;::::0;8837:14;;8813:38:::1;:::i;:::-;;;;;;;;8882:14;8862:16;;:34;;;;;;;:::i;:::-;::::0;;;-1:-1:-1;;8934:16:0::1;::::0;;8948:1:::1;8934:16:::0;;;;;::::1;::::0;;8910:21:::1;::::0;8934:16:::1;::::0;::::1;::::0;;::::1;::::0;::::1;;::::0;-1:-1:-1;8934:16:0::1;8910:40;;8979:4;8961;8966:1;8961:7;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;8961:23:0;;::::1;:7;::::0;;::::1;::::0;;;;;;:23;;;;9005:6:::1;::::0;:13:::1;::::0;;;;;;;:6;;;::::1;::::0;:11:::1;::::0;:13:::1;::::0;;::::1;::::0;8961:7;;9005:13;;;;;:6;:13:::1;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;8995:4;9000:1;8995:7;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;8995:23:0;;::::1;:7;::::0;;::::1;::::0;;;;;:23;9063:6:::1;::::0;9031:56:::1;::::0;9048:4:::1;::::0;9063:6:::1;9072:14:::0;9031:8:::1;:56::i;:::-;9100:6;::::0;9236:17:::1;::::0;9100:194:::1;::::0;;;;-1:-1:-1;;;;;9100:6:0;;::::1;::::0;:57:::1;::::0;:194:::1;::::0;9172:14;;9100:6:::1;::::0;9217:4;;9236:17;::::1;::::0;9268:15:::1;::::0;9100:194:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;-1:-1:-1::0;;5889:6:0;:14;;-1:-1:-1;;5889:14:0;;;-1:-1:-1;;;;8730:572:0:o;1616:130::-;1691:10;1680:7;1567;1594:6;-1:-1:-1;;;;;1594:6:0;;1521:87;1680:7;-1:-1:-1;;;;;1680:21:0;;1672:66;;;;-1:-1:-1;;;1672:66:0;;24599:2:1;1672:66:0;;;24581:21:1;;;24618:18;;;24611:30;24677:34;24657:18;;;24650:62;24729:18;;1672:66:0;24397:356:1;9797:1250:0;5853:6;:13;;-1:-1:-1;;5853:13:0;;;;;9877:7;-1:-1:-1;;;;;9922:17:0::1;9908:31;:10;:31:::0;9900:111:::1;;;::::0;-1:-1:-1;;;9900:111:0;;24960:2:1;9900:111:0::1;::::0;::::1;24942:21:1::0;24999:2;24979:18;;;24972:30;25038:34;25018:18;;;25011:62;25109:34;25089:18;;;25082:62;25181:5;25160:19;;;25153:34;25204:19;;9900:111:0::1;24758:471:1::0;9900:111:0::1;10047:21;10022:22;10108:18;10125:1;10108:14:::0;:18:::1;:::i;:::-;10079:47:::0;-1:-1:-1;10137:27:0::1;10167:35;10079:47:::0;10167:14;:35:::1;:::i;:::-;10137:65;;10239:14;10215:20;;:38;;;;;;;:::i;:::-;;;;;;;;10284:14;10264:16;;:34;;;;;;;:::i;:::-;::::0;;;-1:-1:-1;;10335:16:0::1;::::0;;10349:1:::1;10335:16:::0;;;;;::::1;::::0;;10311:21:::1;::::0;10335:16:::1;::::0;::::1;::::0;;::::1;::::0;::::1;;::::0;-1:-1:-1;10335:16:0::1;10311:40;;10380:4;10362;10367:1;10362:7;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;10362:23:0;;::::1;:7;::::0;;::::1;::::0;;;;;;:23;;;;10406:6:::1;::::0;:13:::1;::::0;;;;;;;:6;;;::::1;::::0;:11:::1;::::0;:13:::1;::::0;;::::1;::::0;10362:7;;10406:13;;;;;:6;:13:::1;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;10396:4;10401:1;10396:7;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;10396:23:0;;::::1;:7;::::0;;::::1;::::0;;;;;:23;10464:6:::1;::::0;10432:56:::1;::::0;10449:4:::1;::::0;10464:6:::1;10473:14:::0;10432:8:::1;:56::i;:::-;10501:6;::::0;:194:::1;::::0;;;;-1:-1:-1;;;;;10501:6:0;;::::1;::::0;:57:::1;::::0;:194:::1;::::0;10573:18;;10501:6:::1;::::0;10622:4;;10649::::1;::::0;10669:15:::1;::::0;10501:194:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;-1:-1:-1::0;;10742:6:0::1;::::0;10721:17:::1;::::0;-1:-1:-1;;;;;;10742:6:0::1;::::0;-1:-1:-1;10742:22:0::1;10786:38;10810:14:::0;10786:21:::1;:38;:::i;:::-;10858:4;10878:19:::0;10912:1:::1;::::0;10944:17:::1;10976:23;:15;10994:5;10976:23;:::i;:::-;10742:268;::::0;::::1;::::0;;;;;;;-1:-1:-1;;;;;8262:15:1;;;10742:268:0::1;::::0;::::1;8244:34:1::0;8294:18;;;8287:34;;;;8337:18;;;8330:34;;;;8380:18;;;8373:34;;;;8444:15;;;8423:19;;;8416:44;8476:19;;;8469:35;;;;8155:19;;10742:268:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;5889:6:::0;:14;;-1:-1:-1;;5889:14:0;;;10716:294;9797:1250;-1:-1:-1;;;;;;;;;9797:1250:0:o;20218:424::-;5853:6;:13;;-1:-1:-1;;5853:13:0;;;;;20302:18;:10:::1;:18:::0;20294:82:::1;;;::::0;-1:-1:-1;;;20294:82:0;;25436:2:1;20294:82:0::1;::::0;::::1;25418:21:1::0;25475:2;25455:18;;;25448:30;25514:34;25494:18;;;25487:62;25585:21;25565:18;;;25558:49;25624:19;;20294:82:0::1;25234:415:1::0;20294:82:0::1;20411:16;::::0;;20425:1:::1;20411:16:::0;;;;;::::1;::::0;;20387:21:::1;::::0;20411:16:::1;::::0;::::1;::::0;;::::1;::::0;::::1;-1:-1:-1::0;;20448:6:0::1;::::0;:13:::1;::::0;;;;;;;20387:40;;-1:-1:-1;;;;;;20448:6:0;;::::1;::::0;:11:::1;::::0;-1:-1:-1;20448:13:0::1;::::0;;::::1;::::0;::::1;::::0;;;;;;;;:6;:13:::1;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;20438:4;20443:1;20438:7;;;;;;;;:::i;:::-;;;;;;:23;-1:-1:-1::0;;;;;20438:23:0::1;;;-1:-1:-1::0;;;;;20438:23:0::1;;;::::0;::::1;20490:4;20472;20477:1;20472:7;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;20472:23:0;;::::1;:7;::::0;;::::1;::::0;;;;;:23;20508:6:::1;::::0;:126:::1;::::0;;;;:6;::::1;::::0;:57:::1;::::0;20587:6;;20508:126:::1;::::0;:6:::1;::::0;20608:4;;20614:2;;20618:15:::1;::::0;20508:126:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;-1:-1:-1::0;;5889:6:0;:14;;-1:-1:-1;;5889:14:0;;;-1:-1:-1;;;;;;20218:424:0:o;2074:191::-;2148:16;2167:6;;-1:-1:-1;;;;;2184:17:0;;;;;;;;;;2217:40;;2167:6;;;;;;;2217:40;;2148:16;2217:40;2137:128;2074:191;:::o;23986:419::-;-1:-1:-1;;;;;24110:15:0;;24071:4;24110:15;;;:9;:15;;;;;;24144:21;;;;24136:72;;;;-1:-1:-1;;;24136:72:0;;24192:2:1;24136:72:0;;;24174:21:1;24231:2;24211:18;;;24204:30;24270:34;24250:18;;;24243:62;24341:8;24321:18;;;24314:36;24367:19;;24136:72:0;23990:402:1;24136:72:0;-1:-1:-1;;;;;24244:15:0;;;;;;;:9;:15;;;;;;24262:20;;;24244:38;;24297:13;;;;;;;;;;:23;;;;;;24349:26;;;;;;24276:6;345:25:1;;333:2;318:18;;199:177;25900:565:0;5853:6;:13;;-1:-1:-1;;5853:13:0;;;;;;;26007:7;;-1:-1:-1;;;;;26031:12:0;;::::1;26039:4:::0;;;::::1;;26031:12;:55:::0;::::1;;;;26084:1;26066:15;;26048;;:33;;;;:::i;:::-;:37;26031:55;26027:119;;;26110:24;26121:4;26127:6;26110:10;:24::i;:::-;26103:31;;;;26027:119;26166:4;::::0;-1:-1:-1;;;;;26160:10:0;;::::1;26166:4:::0;;;::::1;;26160:10;:55:::0;::::1;;;;26213:1;26194:16;;26175;;:35;;;;:::i;:::-;:39;26160:55;26156:120;;;26239:25;26251:4;26257:6;26239:11;:25::i;26156:120::-;26298:4;::::0;-1:-1:-1;;;;;26290:12:0;;::::1;26298:4:::0;;;::::1;;26290:12;::::0;::::1;::::0;:26:::1;;-1:-1:-1::0;26312:4:0::1;::::0;-1:-1:-1;;;;;26306:10:0;;::::1;26312:4:::0;;;::::1;;26306:10;;26290:26;:79;;;;;26367:1;26344:20;;26321;;:43;;;;:::i;:::-;:47;26290:79;26286:148;;;26393:29;26409:4;26415:6;26393:15;:29::i;26286:148::-;-1:-1:-1::0;26451:6:0;5877:1:::1;5889:6:::0;:14;;-1:-1:-1;;5889:14:0;;;25900:565;;-1:-1:-1;;;25900:565:0:o;15498:347::-;5853:6;:13;;-1:-1:-1;;5853:13:0;;;;;15632:15:::1;::::0;15614::::1;::::0;15575:7;;;;15614:33:::1;::::0;15632:15;15614:33:::1;:::i;:::-;15595:52:::0;-1:-1:-1;15658:17:0::1;4399:6;15678:17;15595:52:::0;15678:6;:17:::1;:::i;:::-;:34;;;;:::i;:::-;15658:54:::0;-1:-1:-1;15723:17:0::1;15743:18;15658:54:::0;15743:6;:18:::1;:::i;:::-;15723:38;;15772;15784:4;15790:9;15801:8;15772:11;:38::i;:::-;5889:6:::0;:14;;-1:-1:-1;;5889:14:0;;;15828:9;15498:347;-1:-1:-1;;;;;15498:347:0:o;15853:351::-;5853:6;:13;;-1:-1:-1;;5853:13:0;;;;;15989:16:::1;::::0;5853:6;15970:16;15931:7;;;;15970:35:::1;::::0;15989:16;15970:35:::1;:::i;:::-;15951:54:::0;-1:-1:-1;16016:17:0::1;4399:6;16036:17;15951:54:::0;16036:6;:17:::1;:::i;:::-;:34;;;;:::i;:::-;16016:54:::0;-1:-1:-1;16081:17:0::1;16101:18;16016:54:::0;16101:6;:18:::1;:::i;:::-;16081:38;;16130:39;16143:4;16149:9;16160:8;16130:12;:39::i;16212:367::-:0;5853:6;:13;;-1:-1:-1;;5853:13:0;;;;;16356:20:::1;::::0;16333::::1;::::0;16294:7;;;;16333:43:::1;::::0;16356:20;16333:43:::1;:::i;:::-;16314:62:::0;-1:-1:-1;16387:17:0::1;4399:6;16407:17;16314:62:::0;16407:6;:17:::1;:::i;:::-;:34;;;;:::i;:::-;16387:54:::0;-1:-1:-1;16452:17:0::1;16472:18;16387:54:::0;16472:6;:18:::1;:::i;:::-;16452:38;;16501:43;16518:4;16524:9;16535:8;16501:16;:43::i;16587:382::-:0;5853:6;:13;;-1:-1:-1;;5853:13:0;;;;;16716:15:::1;::::0;5853:13;;16734:3;;16707:24:::1;::::0;:6;:24:::1;:::i;:::-;:30;;;;:::i;:::-;16680:57:::0;-1:-1:-1;16748:24:0::1;16775:25;16680:57:::0;16775:6;:25:::1;:::i;:::-;16748:52;;16811:59;16827:16;16845;16863:6;16811:15;:59::i;:::-;-1:-1:-1::0;;;;;16891:15:0;::::1;;::::0;;;:9:::1;:15;::::0;;;;:25;;16910:6;;16891:15;:25:::1;::::0;16910:6;;16891:25:::1;:::i;:::-;::::0;;;-1:-1:-1;;16945:4:0::1;16927:24;::::0;;;:9:::1;:24;::::0;;;;:34;;16955:6;;16927:24;:34:::1;::::0;16955:6;;16927:34:::1;:::i;:::-;::::0;;;-1:-1:-1;;5889:6:0;:14;;-1:-1:-1;;5889:14:0;;;-1:-1:-1;;;;;16587:382:0:o;16977:384::-;5853:6;:13;;-1:-1:-1;;5853:13:0;;;;;:6;17107:16;5853:13;;17126:3;;17098:25:::1;::::0;:6;:25:::1;:::i;17369:384::-:0;5853:6;:13;;-1:-1:-1;;5853:13:0;;;;;17503:20:::1;::::0;5853:13;;17526:3;;17494:29:::1;::::0;:6;:29:::1;:::i;17761:263::-:0;5853:6;:13;;-1:-1:-1;;5853:13:0;;;;;17883:21:::1;:41:::0;;17908:16;;17883:21;5853:13;;17883:41:::1;::::0;17908:16;;17883:41:::1;:::i;:::-;;;;;;;;17960:16;17935:21;;:41;;;;;;;:::i;:::-;;;;;;;;18008:6;17987:17;;:27;;;;;;;:::i;:::-;::::0;;;-1:-1:-1;;5889:6:0;:14;;-1:-1:-1;;5889:14:0;;;-1:-1:-1;;;17761:263:0:o;14:180:1:-;73:6;126:2;114:9;105:7;101:23;97:32;94:52;;;142:1;139;132:12;94:52;-1:-1:-1;165:23:1;;14:180;-1:-1:-1;14:180:1:o;612:607::-;724:4;753:2;782;771:9;764:21;814:6;808:13;857:6;852:2;841:9;837:18;830:34;882:1;892:140;906:6;903:1;900:13;892:140;;;1001:14;;;997:23;;991:30;967:17;;;986:2;963:26;956:66;921:10;;892:140;;;896:3;1081:1;1076:2;1067:6;1056:9;1052:22;1048:31;1041:42;1210:2;1140:66;1135:2;1127:6;1123:15;1119:88;1108:9;1104:104;1100:113;1092:121;;;;612:607;;;;:::o;1224:154::-;-1:-1:-1;;;;;1303:5:1;1299:54;1292:5;1289:65;1279:93;;1368:1;1365;1358:12;1383:315;1451:6;1459;1512:2;1500:9;1491:7;1487:23;1483:32;1480:52;;;1528:1;1525;1518:12;1480:52;1567:9;1554:23;1586:31;1611:5;1586:31;:::i;:::-;1636:5;1688:2;1673:18;;;;1660:32;;-1:-1:-1;;;1383:315:1:o;1895:456::-;1972:6;1980;1988;2041:2;2029:9;2020:7;2016:23;2012:32;2009:52;;;2057:1;2054;2047:12;2009:52;2096:9;2083:23;2115:31;2140:5;2115:31;:::i;:::-;2165:5;-1:-1:-1;2222:2:1;2207:18;;2194:32;2235:33;2194:32;2235:33;:::i;:::-;1895:456;;2287:7;;-1:-1:-1;;;2341:2:1;2326:18;;;;2313:32;;1895:456::o;2545:160::-;2610:20;;2666:13;;2659:21;2649:32;;2639:60;;2695:1;2692;2685:12;2639:60;2545:160;;;:::o;2710:180::-;2766:6;2819:2;2807:9;2798:7;2794:23;2790:32;2787:52;;;2835:1;2832;2825:12;2787:52;2858:26;2874:9;2858:26;:::i;2895:248::-;2963:6;2971;3024:2;3012:9;3003:7;2999:23;2995:32;2992:52;;;3040:1;3037;3030:12;2992:52;-1:-1:-1;;3063:23:1;;;3133:2;3118:18;;;3105:32;;-1:-1:-1;2895:248:1:o;3148:247::-;3207:6;3260:2;3248:9;3239:7;3235:23;3231:32;3228:52;;;3276:1;3273;3266:12;3228:52;3315:9;3302:23;3334:31;3359:5;3334:31;:::i;3400:315::-;3465:6;3473;3526:2;3514:9;3505:7;3501:23;3497:32;3494:52;;;3542:1;3539;3532:12;3494:52;3581:9;3568:23;3600:31;3625:5;3600:31;:::i;:::-;3650:5;-1:-1:-1;3674:35:1;3705:2;3690:18;;3674:35;:::i;:::-;3664:45;;3400:315;;;;;:::o;3720:388::-;3788:6;3796;3849:2;3837:9;3828:7;3824:23;3820:32;3817:52;;;3865:1;3862;3855:12;3817:52;3904:9;3891:23;3923:31;3948:5;3923:31;:::i;:::-;3973:5;-1:-1:-1;4030:2:1;4015:18;;4002:32;4043:33;4002:32;4043:33;:::i;:::-;4095:7;4085:17;;;3720:388;;;;;:::o;4787:184::-;4839:77;4836:1;4829:88;4936:4;4933:1;4926:15;4960:4;4957:1;4950:15;4976:128;5043:9;;;5064:11;;;5061:37;;;5078:18;;:::i;5109:228::-;5149:7;5275:1;5207:66;5203:74;5200:1;5197:81;5192:1;5185:9;5178:17;5174:105;5171:131;;;5282:18;;:::i;:::-;-1:-1:-1;5322:9:1;;5109:228::o;5342:274::-;5382:1;5408;5398:189;;5443:77;5440:1;5433:88;5544:4;5541:1;5534:15;5572:4;5569:1;5562:15;5398:189;-1:-1:-1;5601:9:1;;5342:274::o;5621:125::-;5686:9;;;5707:10;;;5704:36;;;5720:18;;:::i;5940:184::-;5992:77;5989:1;5982:88;6089:4;6086:1;6079:15;6113:4;6110:1;6103:15;6129:251;6199:6;6252:2;6240:9;6231:7;6227:23;6223:32;6220:52;;;6268:1;6265;6258:12;6220:52;6300:9;6294:16;6319:31;6344:5;6319:31;:::i;6781:484::-;6834:3;6872:5;6866:12;6899:6;6894:3;6887:19;6925:4;6954:2;6949:3;6945:12;6938:19;;6991:2;6984:5;6980:14;7012:1;7022:218;7036:6;7033:1;7030:13;7022:218;;;7101:13;;-1:-1:-1;;;;;7097:62:1;7085:75;;7180:12;;;;7215:15;;;;7058:1;7051:9;7022:218;;;-1:-1:-1;7256:3:1;;6781:484;-1:-1:-1;;;;;6781:484:1:o;7270:605::-;7569:6;7558:9;7551:25;7612:6;7607:2;7596:9;7592:18;7585:34;7655:3;7650:2;7639:9;7635:18;7628:31;7532:4;7676:57;7728:3;7717:9;7713:19;7705:6;7676:57;:::i;:::-;-1:-1:-1;;;;;7769:55:1;;;;7764:2;7749:18;;7742:83;-1:-1:-1;7856:3:1;7841:19;7834:35;7668:65;7270:605;-1:-1:-1;;;7270:605:1:o;8515:306::-;8603:6;8611;8619;8672:2;8660:9;8651:7;8647:23;8643:32;8640:52;;;8688:1;8685;8678:12;8640:52;8717:9;8711:16;8701:26;;8767:2;8756:9;8752:18;8746:25;8736:35;;8811:2;8800:9;8796:18;8790:25;8780:35;;8515:306;;;;;:::o;25654:533::-;25925:6;25914:9;25907:25;25968:3;25963:2;25952:9;25948:18;25941:31;25888:4;25989:57;26041:3;26030:9;26026:19;26018:6;25989:57;:::i;:::-;-1:-1:-1;;;;;26082:55:1;;;;26077:2;26062:18;;26055:83;-1:-1:-1;26169:2:1;26154:18;26147:34;25981:65;25654:533;-1:-1:-1;;25654:533:1:o

Swarm Source

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