ETH Price: $3,420.37 (+2.05%)
Gas: 4 Gwei

Token

DogeCoffee (BEANS)
 

Overview

Max Total Supply

1,000,000,000 BEANS

Holders

54

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Filtered by Token Holder
perkytits.eth
Balance
20,000,000 BEANS

Value
$0.00
0x8d10571bea8b3b1d2adc6a55add367cc603f0de6
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:
DogeCoffee

Compiler Version
v0.8.14+commit.80d49f37

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2022-08-10
*/

/**
 *
 
:::::::-.      ...       .,-:::::/ .,::::::        .,-:::::     ...     .-:::::'.-:::::'.,:::::: .,::::::  
 ;;,   `';, .;;;;;;;.  ,;;-'````'  ;;;;''''      ,;;;'````'  .;;;;;;;.  ;;;'''' ;;;'''' ;;;;'''' ;;;;''''  
 `[[     [[,[[     \[[,[[[   [[[[[[/[[cccc       [[[        ,[[     \[[,[[[,,== [[[,,==  [[cccc   [[cccc   
  $$,    $$$$$,     $$$"$$c.    "$$ $$""""       $$$        $$$,     $$$`$$$"`` `$$$"``  $$""""   $$""""   
  888_,o8P'"888,_ _,88P `Y8bo,,,o88o888oo,__     `88bo,__,o,"888,_ _,88P 888     888     888oo,__ 888oo,__ 
  MMMMP"`    "YMMMMMP"    `'YMUP"YMM""""YUMMM      "YUMMMMMP" "YMMMMMP"  "MM,    "MM,    """"YUMMM""""YUMMM

*/

//SPDX-License-Identifier: MIT    

pragma solidity ^0.8.7;

/**
 * Standard SafeMath, stripped down to just add/sub/mul/div
 */
library SafeMath {
    function add(uint256 a, uint256 b) internal pure returns (uint256) {
        uint256 c = a + b;
        require(c >= a, "SafeMath: addition overflow");

        return c;
    }
    function sub(uint256 a, uint256 b) internal pure returns (uint256) {
        return sub(a, b, "SafeMath: subtraction overflow");
    }
    function sub(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
        require(b <= a, errorMessage);
        uint256 c = a - b;

        return c;
    }
    function mul(uint256 a, uint256 b) internal pure returns (uint256) {
        if (a == 0) {
            return 0;
        }

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

        return c;
    }
    function div(uint256 a, uint256 b) internal pure returns (uint256) {
        return div(a, b, "SafeMath: division by zero");
    }
    function div(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
        // Solidity only automatically asserts when dividing by 0
        require(b > 0, errorMessage);
        uint256 c = a / b;
        // assert(a == b * c + a % b); // There is no case in which this doesn't hold

        return c;
    }
}

/**
 * BEP20 standard interface.
 */
interface IBEP20 {
    function totalSupply() external view returns (uint256);
    function decimals() external view returns (uint8);
    function symbol() external view returns (string memory);
    function name() external view returns (string memory);
    function getOwner() external view returns (address);
    function balanceOf(address account) external view returns (uint256);
    function transfer(address recipient, uint256 amount) external returns (bool);
    function allowance(address _owner, address spender) external view returns (uint256);
    function approve(address spender, uint256 amount) external returns (bool);
    function transferFrom(address sender, address recipient, uint256 amount) external returns (bool);
    event Transfer(address indexed from, address indexed to, uint256 value);
    event Approval(address indexed owner, address indexed spender, uint256 value);
}

/**
 * Allows for contract ownership for multiple adressess
 */
abstract contract Auth {
    address internal owner;
    mapping (address => bool) internal authorizations;

    constructor(address _owner) {
        owner = _owner;
        authorizations[_owner] = true;
    }

    /**
     * Function modifier to require caller to be contract owner
     */
    modifier onlyOwner() {
        require(isOwner(msg.sender), "!OWNER"); _;
    }

    /**
     * Function modifier to require caller to be authorized
     */
    modifier authorized() {
        require(isAuthorized(msg.sender), "!AUTHORIZED"); _;
    }

    /**
     * Authorize address. Owner only
     */
    function authorize(address account) public onlyOwner {
        authorizations[account] = true;
    }

    /**
     * Remove address authorization. Owner only
     */
    function unauthorize(address account) public onlyOwner {
        authorizations[account] = false;
    }

    /**
     * Check if address is owner
     */
    function isOwner(address account) public view returns (bool) {
        return account == owner;
    }

    /**
     * Return address authorization status
     */
    function isAuthorized(address account) public view returns (bool) {
        return authorizations[account];
    }

    /**
     * Transfer ownership to new address. Caller must be owner. Leaves old owner authorized
     */
    function transferOwnership(address payable account) public onlyOwner {
        owner = account;
        authorizations[account] = true;
        emit OwnershipTransferred(account);
    }

    event OwnershipTransferred(address owner);
}

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

/* Standard IDEXRouter */
interface IDEXRouter {
    function factory() external pure returns (address);
    function WETH() external pure returns (address);

    function addLiquidity(
        address tokenA,
        address tokenB,
        uint amountADesired,
        uint amountBDesired,
        uint amountAMin,
        uint amountBMin,
        address to,
        uint deadline
    ) external returns (uint amountA, uint amountB, uint liquidity);

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

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

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

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

/* Interface for the DividendDistributor */
interface IDividendDistributor {
    function setDistributionCriteria(uint256 _minPeriod, uint256 _minDistribution) external;
    function setShare(address shareholder, uint256 amount) external;
    function deposit() external payable;
    function process(uint256 gas) external;
}

/* Our DividendDistributor contract responsible for distributing the earn token */
contract DividendDistributor is IDividendDistributor {
    using SafeMath for uint256;

    address _token;

    struct Share {
        uint256 amount;
        uint256 totalExcluded;
        uint256 totalRealised;
    }

    // EARN
    IBEP20  BUSD = IBEP20(0xe9e7CEA3DedcA5984780Bafc599bD69ADd087D56);
    address WBNB = 0xbb4CdB9CBd36B01bD1cBaEBF2De08d9173bc095c;
    IDEXRouter router;

    address[] shareholders;
    mapping (address => uint256) shareholderIndexes;
    mapping (address => uint256) shareholderClaims;

    mapping (address => Share) public shares;

    uint256 public totalShares;
    uint256 public totalDividends;
    uint256 public totalDistributed;
    uint256 public dividendsPerShare;
    uint256 public dividendsPerShareAccuracyFactor = 10 ** 36;

    uint256 public minPeriod = 30 * 60;
    uint256 public minDistribution = 1 * (10 ** 12);

    uint256 currentIndex;

    bool initialized;
    modifier initialization() {
        require(!initialized);
        _;
        initialized = true;
    }

    modifier onlyToken() {
        require(msg.sender == _token); _;
    }

    constructor (address _router) {
        router = _router != address(0)
            ? IDEXRouter(_router)
            : IDEXRouter(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D);
        _token = msg.sender;
    }

    function setDistributionCriteria(uint256 _minPeriod, uint256 _minDistribution) external override onlyToken {
        minPeriod = _minPeriod;
        minDistribution = _minDistribution;
    }

    function setShare(address shareholder, uint256 amount) external override onlyToken {
        if(shares[shareholder].amount > 0){
            distributeDividend(shareholder);
        }

        if(amount > 0 && shares[shareholder].amount == 0){
            addShareholder(shareholder);
        }else if(amount == 0 && shares[shareholder].amount > 0){
            removeShareholder(shareholder);
        }

        totalShares = totalShares.sub(shares[shareholder].amount).add(amount);
        shares[shareholder].amount = amount;
        shares[shareholder].totalExcluded = getCumulativeDividends(shares[shareholder].amount);
    }

    function deposit() external payable override onlyToken {
        uint256 balanceBefore = BUSD.balanceOf(address(this));

        address[] memory path = new address[](2);
        path[0] = WBNB;
        path[1] = address(BUSD);

        router.swapExactETHForTokensSupportingFeeOnTransferTokens{value: msg.value}(
            0,
            path,
            address(this),
            block.timestamp
        );

        uint256 amount = BUSD.balanceOf(address(this)).sub(balanceBefore);

        totalDividends = totalDividends.add(amount);
        dividendsPerShare = dividendsPerShare.add(dividendsPerShareAccuracyFactor.mul(amount).div(totalShares));
    }

    function process(uint256 gas) external override onlyToken {
        uint256 shareholderCount = shareholders.length;

        if(shareholderCount == 0) { return; }

        uint256 gasUsed = 0;
        uint256 gasLeft = gasleft();

        uint256 iterations = 0;

        while(gasUsed < gas && iterations < shareholderCount) {
            if(currentIndex >= shareholderCount){
                currentIndex = 0;
            }

            if(shouldDistribute(shareholders[currentIndex])){
                distributeDividend(shareholders[currentIndex]);
            }

            gasUsed = gasUsed.add(gasLeft.sub(gasleft()));
            gasLeft = gasleft();
            currentIndex++;
            iterations++;
        }
    }
    
    function shouldDistribute(address shareholder) internal view returns (bool) {
        return shareholderClaims[shareholder] + minPeriod < block.timestamp
                && getUnpaidEarnings(shareholder) > minDistribution;
    }

    function distributeDividend(address shareholder) internal {
        if(shares[shareholder].amount == 0){ return; }

        uint256 amount = getUnpaidEarnings(shareholder);
        if(amount > 0){
            totalDistributed = totalDistributed.add(amount);
            BUSD.transfer(shareholder, amount);
            shareholderClaims[shareholder] = block.timestamp;
            shares[shareholder].totalRealised = shares[shareholder].totalRealised.add(amount);
            shares[shareholder].totalExcluded = getCumulativeDividends(shares[shareholder].amount);
        }
    }
    
    function claimDividend(address shareholder) external onlyToken{
        distributeDividend(shareholder);
    }

    function getUnpaidEarnings(address shareholder) public view returns (uint256) {
        if(shares[shareholder].amount == 0){ return 0; }

        uint256 shareholderTotalDividends = getCumulativeDividends(shares[shareholder].amount);
        uint256 shareholderTotalExcluded = shares[shareholder].totalExcluded;

        if(shareholderTotalDividends <= shareholderTotalExcluded){ return 0; }

        return shareholderTotalDividends.sub(shareholderTotalExcluded);
    }

    function getCumulativeDividends(uint256 share) internal view returns (uint256) {
        return share.mul(dividendsPerShare).div(dividendsPerShareAccuracyFactor);
    }

    function addShareholder(address shareholder) internal {
        shareholderIndexes[shareholder] = shareholders.length;
        shareholders.push(shareholder);
    }

    function removeShareholder(address shareholder) internal {
        shareholders[shareholderIndexes[shareholder]] = shareholders[shareholders.length-1];
        shareholderIndexes[shareholders[shareholders.length-1]] = shareholderIndexes[shareholder];
        shareholders.pop();
    }
}

/* Token contract */
contract DogeCoffee is IBEP20, Auth {
    using SafeMath for uint256;

    // Addresses
    address BUSD = 0xe9e7CEA3DedcA5984780Bafc599bD69ADd087D56; 
    address WBNB = 0xbb4CdB9CBd36B01bD1cBaEBF2De08d9173bc095c;
    address DEAD = 0x000000000000000000000000000000000000dEaD;
    address ZERO = 0x0000000000000000000000000000000000000000;
    address DEV  = 0xBd0337a4AE47Fc010559c5ca531f0CAED1475bc1;

    // These are owner by default
    address private autoLiquidityReceiver;
    address private marketingFeeReceiver;

    // Name and symbol
    string constant _name = "DogeCoffee";
    string constant _symbol = "BEANS";
    uint8 constant _decimals = 18;

    // Total supply
    uint256 _totalSupply = 1000000000 * (10 ** _decimals); // 1 Bil 

    // Max wallet and TX
    uint256 public _maxBuyTxAmount = _totalSupply * 200 / 10000; // 2% on launch or 2M tokens
    uint256 public _maxSellTxAmount = _totalSupply * 100 / 10000; // 1% or 1M tokens
    uint256 public _maxWalletToken = ( _totalSupply * 200 ) / 10000; // 2% or 2m tokens

    // Mappings
    mapping (address => uint256) _balances;
    mapping (address => mapping (address => uint256)) _allowances;
    mapping (address => bool) isFeeExempt;
    mapping (address => bool) isTxLimitExempt;
    mapping (address => bool) isTimelockExempt;
    mapping (address => bool) isDividendExempt;
    mapping (address => bool) public isBlacklisted;
    
    // Buy Fees
    uint256 public liquidityFeeBuy = 1; 
    uint256 public buybackFeeBuy = 0;
    uint256 public reflectionFeeBuy = 0;
    uint256 public marketingFeeBuy = 2;
    uint256 public devFeeBuy = 1;
    uint256 public totalFeeBuy = 4;

    // Sell fees
    uint256 public liquidityFeeSell = 1;
    uint256 public buybackFeeSell = 0;
    uint256 public reflectionFeeSell = 0;
    uint256 public marketingFeeSell = 2;
    uint256 public devFeeSell =1;
    uint256 public totalFeeSell = 4;

    // Fee variables
    uint256 liquidityFee;
    uint256 buybackFee;
    uint256 reflectionFee;
    uint256 marketingFee;
    uint256 devFee;
    uint256 totalFee;
    uint256 feeDenominator = 100;

    // GREED
    uint256 GREEDTriggeredAt;
    uint256 GREEDDuration = 3600;
    
    // Dead blocks
    uint256 deadBlocks = 3;

    // Sell amount of tokens when a sell takes place
    uint256 public swapThreshold = _totalSupply * 25 / 10000; // 2% of supply

    // Liquidity
    uint256 targetLiquidity = 20;
    uint256 targetLiquidityDenominator = 100;

    // Buyback settings
    uint256 buybackMultiplierNumerator = 300;
    uint256 buybackMultiplierDenominator = 100;
    uint256 buybackMultiplierTriggeredAt;
    uint256 buybackMultiplierLength = 30 minutes;

    bool public autoBuybackEnabled = false;
    bool public autoBuybackMultiplier = false;
    uint256 autoBuybackCap;
    uint256 autoBuybackAccumulator;
    uint256 autoBuybackAmount;
    uint256 autoBuybackBlockPeriod;
    uint256 autoBuybackBlockLast;

    DividendDistributor distributor;
    uint256 distributorGas = 500000;

    // Cooldown & timer functionality
    bool public buyCooldownEnabled = false;
    uint8 public cooldownTimerInterval = 30;
    mapping (address => uint) private cooldownTimer;

    // Other variables
    IDEXRouter public router;
    address public pair;
    uint256 public launchedAt;
    bool public tradingOpen = true;
    bool public swapEnabled = true;
    bool inSwap;
    modifier swapping() { inSwap = true; _; inSwap = false; }

    /* Token constructor */
    constructor () Auth(msg.sender) {

        router = IDEXRouter(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D);
        pair = IDEXFactory(router.factory()).createPair(WBNB, address(this));
        _allowances[address(this)][address(router)] = type(uint256).max;

        distributor = new DividendDistributor(address(router));
        
        // Should be the owner wallet/token distributor
        address _presaler = msg.sender;
        isFeeExempt[_presaler] = true;
        isTxLimitExempt[_presaler] = true;
        
        // No timelock for these people
        isTimelockExempt[msg.sender] = true;
        isTimelockExempt[DEAD] = true;
        isTimelockExempt[address(this)] = true;
        isTimelockExempt[DEV] = true;
        
        // Exempt from dividend
        isDividendExempt[pair] = true;
        isDividendExempt[address(this)] = true;
        isDividendExempt[DEAD] = true;

        // Set the marketing and liq receiver to the owner as default
        autoLiquidityReceiver = msg.sender;
        marketingFeeReceiver = 0x2d6a856994dABeca7903d78eD094C861515df6CF;

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

    receive() external payable { }

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

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

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

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

    function transferFrom(address sender, address recipient, uint256 amount) external override returns (bool) {
        if(_allowances[sender][msg.sender] != type(uint256).max){
            _allowances[sender][msg.sender] = _allowances[sender][msg.sender].sub(amount, "Insufficient Allowance");
        }
        return _transferFrom(sender, recipient, amount);
    }

    // settting the max wallet in percentages
    // NOTE: 1% = 100
     function setMaxWalletPercent(uint256 maxWallPercent) external onlyOwner() {
        _maxWalletToken = _totalSupply.mul(maxWallPercent).div(10000);

    }

    // Main transfer function
    function _transferFrom(address sender, address recipient, uint256 amount) internal returns (bool) {
        if(inSwap){ return _basicTransfer(sender, recipient, amount); }

        // Check if trading is enabled
        if(!authorizations[sender] && !authorizations[recipient]){
            require(tradingOpen,"Trading not enabled yet");
        }

        // Check if address is blacklisted
        require(!isBlacklisted[recipient] && !isBlacklisted[sender], 'Address is blacklisted');

        // Check if buying or selling
        bool isSell = recipient == pair; 

        // Set buy or sell fees
        setCorrectFees(isSell);

        // Check max wallet
        checkMaxWallet(sender, recipient, amount);
   
        // Buycooldown 
        checkBuyCooldown(sender, recipient);

        // Checks maxTx
        checkTxLimit(sender, amount, recipient, isSell);

        // Check if we are in GREEDTime
        bool GREEDMode = inGREEDTime();

        // Check if we should do the swapback
        if(shouldSwapBack()){ swapBack(); }

        //Exchange tokens
        _balances[sender] = _balances[sender].sub(amount, "Insufficient Balance");

        uint256 amountReceived = shouldTakeFee(sender) ? takeFee(sender, amount, isSell, GREEDMode) : amount;
        _balances[recipient] = _balances[recipient].add(amountReceived);

        // Dividend tracker
        if(!isDividendExempt[sender]) {
            try distributor.setShare(sender, _balances[sender]) {} catch {}
        }

        if(!isDividendExempt[recipient]) {
            try distributor.setShare(recipient, _balances[recipient]) {} catch {} 
        }

        try distributor.process(distributorGas) {} catch {}

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

    // Do a normal transfer
    function _basicTransfer(address sender, address recipient, uint256 amount) internal returns (bool) {
        _balances[sender] = _balances[sender].sub(amount, "Insufficient Balance");
        _balances[recipient] = _balances[recipient].add(amount);
        emit Transfer(sender, recipient, amount);
        return true;
    }

    // Set the correct fees for buying or selling
    function setCorrectFees(bool isSell) internal {
        if(isSell){
            liquidityFee = liquidityFeeSell;
            buybackFee = buybackFeeSell;
            reflectionFee = reflectionFeeSell;
            marketingFee = marketingFeeSell;
            devFee = devFeeSell;
            totalFee = totalFeeSell;
        } else {
            liquidityFee = liquidityFeeBuy;
            buybackFee = buybackFeeBuy;
            reflectionFee = reflectionFeeBuy;
            marketingFee = marketingFeeBuy;
            devFee = devFeeBuy;
            totalFee = totalFeeBuy;
        }
    }

    // Check if we are in GREED time
    function inGREEDTime() public view returns (bool){
        if(GREEDTriggeredAt.add(GREEDDuration) > block.timestamp){
            return true;
        } else {
            return false;
        }
    }


    // Check for maxTX
    function checkTxLimit(address sender, uint256 amount, address recipient, bool isSell) internal view {
        if (recipient != owner){
            if(isSell){
                require(amount <= _maxSellTxAmount || isTxLimitExempt[sender] || isTxLimitExempt[recipient], "TX Limit Exceeded");
            } else {
                require(amount <= _maxBuyTxAmount || isTxLimitExempt[sender] || isTxLimitExempt[recipient], "TX Limit Exceeded");
            }
        }
    }

    // Check buy cooldown
    function checkBuyCooldown(address sender, address recipient) internal {
        if (sender == pair &&
            buyCooldownEnabled &&
            !isTimelockExempt[recipient]) {
            require(cooldownTimer[recipient] < block.timestamp,"Please wait between two buys");
            cooldownTimer[recipient] = block.timestamp + cooldownTimerInterval;
        }
    }

    // Check maxWallet
    function checkMaxWallet(address sender, address recipient, uint256 amount) internal view {
        if (!authorizations[sender] && recipient != owner && recipient != address(this)  && recipient != address(DEAD) && recipient != pair && recipient != marketingFeeReceiver && recipient != autoLiquidityReceiver && recipient != DEV){
            uint256 heldTokens = balanceOf(recipient);
            require((heldTokens + amount) <= _maxWalletToken,"Total Holding is currently limited, you can not buy that much.");
        }
    }

    // Check if sender is not feeExempt
    function shouldTakeFee(address sender) internal view returns (bool) {
        return !isFeeExempt[sender];
    }

    // Get total fee's or multiplication of fees
    function getTotalFee(bool selling) public view returns (uint256) {
        if(launchedAt + deadBlocks >= block.number){ return feeDenominator.sub(1); }
        if(selling && buybackMultiplierTriggeredAt.add(buybackMultiplierLength) > block.timestamp){ return getMultipliedFee(); }
        return totalFee;
    }

    // Get a multiplied fee when buybackMultiplier is active
    function getMultipliedFee() public view returns (uint256) {
        uint256 remainingTime = buybackMultiplierTriggeredAt.add(buybackMultiplierLength).sub(block.timestamp);
        uint256 feeIncrease = totalFee.mul(buybackMultiplierNumerator).div(buybackMultiplierDenominator).sub(totalFee);
        return totalFee.add(feeIncrease.mul(remainingTime).div(buybackMultiplierLength));
    }

    // Take the normal total Fee or the GREED Fee
    function takeFee(address sender, uint256 amount, bool isSell, bool GREEDMode) internal returns (uint256) {
        uint256 feeAmount;
        
        // Check if we are GREEDd
        if (GREEDMode){
            if(isSell){
                // We are selling so up the selling tax to 1.5x
                feeAmount = amount.mul(totalFee).mul(3).div(2).div(feeDenominator);
            } else {
                // We are buying so cut our taxes in half
                feeAmount = amount.mul(totalFee).div(2).div(feeDenominator);
            }
        } else {
            feeAmount = amount.mul(totalFee).div(feeDenominator);
        }

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

        return amount.sub(feeAmount);
    }

    // Check if we should sell tokens
    function shouldSwapBack() internal view returns (bool) {
        return msg.sender != pair
        && !inSwap
        && swapEnabled
        && _balances[address(this)] >= swapThreshold;
    }

    // switch Trading
    function tradingStatus(bool _status) public onlyOwner {
        tradingOpen = _status;
        launch();
    }

    // Enable GREED
    function enableGREED(uint256 _seconds) public authorized {
        GREEDTriggeredAt = block.timestamp;
        GREEDDuration = _seconds;
    }

    // Disable the GREED mode
    function disableGREED() external authorized {
        GREEDTriggeredAt = 0;
    }

    // Enable/disable cooldown between trades
    function cooldownEnabled(bool _status, uint8 _interval) public authorized {
        buyCooldownEnabled = _status;
        cooldownTimerInterval = _interval;
    }

    // Blacklist/unblacklist an address
    function blacklistAddress(address _address, bool _value) public authorized{
        isBlacklisted[_address] = _value;
    }

    // Main swapback to sell tokens for WBNB
    function swapBack() internal swapping {
        uint256 dynamicLiquidityFee = isOverLiquified(targetLiquidity, targetLiquidityDenominator) ? 0 : liquidityFee;
        uint256 amountToLiquify = swapThreshold.mul(dynamicLiquidityFee).div(totalFee).div(2);
        uint256 amountToSwap = swapThreshold.sub(amountToLiquify);

        address[] memory path = new address[](2);
        path[0] = address(this);
        path[1] = WBNB;

        uint256 balanceBefore = address(this).balance;

        router.swapExactTokensForETHSupportingFeeOnTransferTokens(
            amountToSwap,
            0,
            path,
            address(this),
            block.timestamp
        );
        uint256 amountBNB = address(this).balance.sub(balanceBefore);
        uint256 totalBNBFee = totalFee.sub(dynamicLiquidityFee.div(2));
        uint256 amountBNBLiquidity = amountBNB.mul(dynamicLiquidityFee).div(totalBNBFee).div(2);
        uint256 amountBNBReflection = amountBNB.mul(reflectionFee).div(totalBNBFee);
        uint256 amountBNBMarketing = amountBNB.mul(marketingFee).div(totalBNBFee);
        uint256 amountBNBDev = amountBNB.mul(devFee).div(totalBNBFee); 


        try distributor.deposit{value: amountBNBReflection}() {} catch {}
        (bool successMarketing, /* bytes memory data */) = payable(marketingFeeReceiver).call{value: amountBNBMarketing, gas: 30000}("");
        (bool successDev, /* bytes memory data */) = payable(DEV).call{value: amountBNBDev, gas: 30000}(""); 
        require(successMarketing, "marketing receiver rejected ETH transfer");
        require(successDev, "dev receiver rejected ETH transfer");

        if(amountToLiquify > 0){
            router.addLiquidityETH{value: amountBNBLiquidity}(
                address(this),
                amountToLiquify,
                0,
                0,
                autoLiquidityReceiver,
                block.timestamp
            );
            emit AutoLiquify(amountBNBLiquidity, amountToLiquify);
        }
    }

    // Check if autoBuyback is enabled
    function shouldAutoBuyback() internal view returns (bool) {
        return msg.sender != pair
            && !inSwap
            && autoBuybackEnabled
            && autoBuybackBlockLast + autoBuybackBlockPeriod <= block.number
            && address(this).balance >= autoBuybackAmount;
    }

    // Trigger a manual buyback
    function triggerManualBuyback(uint256 amount, bool triggerBuybackMultiplier) external authorized {
        uint256 amountWithDecimals = amount * (10 ** 18);
        uint256 amountToBuy = amountWithDecimals.div(100);
        buyTokens(amountToBuy, DEAD);
        if(triggerBuybackMultiplier){
            buybackMultiplierTriggeredAt = block.timestamp;
            emit BuybackMultiplierActive(buybackMultiplierLength);
        }
    }
    
    // Stop the buyback Multiplier
    function clearBuybackMultiplier() external authorized {
        buybackMultiplierTriggeredAt = 0;
    }

    // Trigger an autobuyback
    function triggerAutoBuyback() internal {
        buyTokens(autoBuybackAmount, DEAD);
        if(autoBuybackMultiplier){
            buybackMultiplierTriggeredAt = block.timestamp;
            emit BuybackMultiplierActive(buybackMultiplierLength);
        }
        autoBuybackBlockLast = block.number;
        autoBuybackAccumulator = autoBuybackAccumulator.add(autoBuybackAmount);
        if(autoBuybackAccumulator > autoBuybackCap){ autoBuybackEnabled = false; }
    }

    // Buy amount of tokens with bnb from the contract
    function buyTokens(uint256 amount, address to) internal swapping {
        address[] memory path = new address[](2);
        path[0] = WBNB;
        path[1] = address(this);

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

    // Set autobuyback settings
    function setAutoBuybackSettings(bool _enabled, uint256 _cap, uint256 _amount, uint256 _period, bool _autoBuybackMultiplier) external authorized {
        autoBuybackEnabled = _enabled;
        autoBuybackCap = _cap;
        autoBuybackAccumulator = 0;
        autoBuybackAmount = _amount;
        autoBuybackBlockPeriod = _period;
        autoBuybackBlockLast = block.number;
        autoBuybackMultiplier = _autoBuybackMultiplier;
    }

    // Set buybackmultiplier settings
    function setBuybackMultiplierSettings(uint256 numerator, uint256 denominator, uint256 length) external authorized {
        require(numerator / denominator <= 2 && numerator > denominator);
        buybackMultiplierNumerator = numerator;
        buybackMultiplierDenominator = denominator;
        buybackMultiplierLength = length;
    }

    // Check when the token is launched
    function launched() internal view returns (bool) {
        return launchedAt != 0;
    }

    // Set the launchedAt to token launch
    function launch() internal {
        launchedAt = block.number;
    }

    // Set max buy TX 
    function setBuyTxLimitInPercent(uint256 maxBuyTxPercent) external authorized {
        _maxBuyTxAmount = _totalSupply.mul(maxBuyTxPercent).div(10000);
    }

    // Set max sell TX 
    function setSellTxLimitInPercent(uint256 maxSellTxPercent) external authorized {
        _maxSellTxAmount = _totalSupply.mul(maxSellTxPercent).div(10000);
    }

    // Exempt from dividend
    function setIsDividendExempt(address holder, bool exempt) external authorized {
        require(holder != address(this) && holder != pair);
        isDividendExempt[holder] = exempt;
        if(exempt){
            distributor.setShare(holder, 0);
        }else{
            distributor.setShare(holder, _balances[holder]);
        }
    }

    // Exempt from fee
    function setIsFeeExempt(address holder, bool exempt) external authorized {
        isFeeExempt[holder] = exempt;
    }

    // Exempt from max TX
    function setIsTxLimitExempt(address holder, bool exempt) external authorized {
        isTxLimitExempt[holder] = exempt;
    }

    // Exempt from buy CD
    function setIsTimelockExempt(address holder, bool exempt) external authorized {
        isTimelockExempt[holder] = exempt;
    }

    // Set our buy fees
    function setBuyFees(uint256 _liquidityFeeBuy, uint256 _buybackFeeBuy, uint256 _reflectionFeeBuy, uint256 _marketingFeeBuy, uint256 _devFeeBuy, uint256 _feeDenominator) external authorized {
        liquidityFeeBuy = _liquidityFeeBuy;
        buybackFeeBuy = _buybackFeeBuy;
        reflectionFeeBuy = _reflectionFeeBuy;
        marketingFeeBuy = _marketingFeeBuy;
        devFeeBuy = _devFeeBuy;
        totalFeeBuy = _liquidityFeeBuy.add(_buybackFeeBuy).add(_reflectionFeeBuy).add(_marketingFeeBuy).add(_devFeeBuy);
        feeDenominator = _feeDenominator;
    }

    // Set our sell fees
    function setSellFees(uint256 _liquidityFeeSell, uint256 _buybackFeeSell, uint256 _reflectionFeeSell, uint256 _marketingFeeSell, uint256 _devFeeSell, uint256 _feeDenominator) external authorized {
        liquidityFeeSell = _liquidityFeeSell;
        buybackFeeSell = _buybackFeeSell;
        reflectionFeeSell = _reflectionFeeSell;
        marketingFeeSell = _marketingFeeSell;
        devFeeSell = _devFeeSell;
        totalFeeSell = _liquidityFeeSell.add(_buybackFeeSell).add(_reflectionFeeSell).add(_marketingFeeSell).add(_devFeeSell);
        feeDenominator = _feeDenominator;
    }

    // Set the marketing and liquidity receivers
    function setFeeReceivers(address _autoLiquidityReceiver, address _marketingFeeReceiver) external authorized {
        autoLiquidityReceiver = _autoLiquidityReceiver;
        marketingFeeReceiver = _marketingFeeReceiver;
    }

    // Set swapBack settings
    function setSwapBackSettings(bool _enabled, uint256 _amount) external authorized {
        swapEnabled = _enabled;
        swapThreshold = _totalSupply * _amount / 10000; 
    }

    // Set target liquidity
    function setTargetLiquidity(uint256 _target, uint256 _denominator) external authorized {
        targetLiquidity = _target;
        targetLiquidityDenominator = _denominator;
    }

    // Send BNB to marketingwallet
    function manualSend() external authorized {
        uint256 contractETHBalance = address(this).balance;
        payable(marketingFeeReceiver).transfer(contractETHBalance);
    }
    
    // Set criteria for auto distribution
    function setDistributionCriteria(uint256 _minPeriod, uint256 _minDistribution) external authorized {
        distributor.setDistributionCriteria(_minPeriod, _minDistribution);
    }
    
    // Let people claim there dividend
    function claimDividend() external {
        distributor.claimDividend(msg.sender);
    }
    
    // Check how much earnings are unpaid
    function getUnpaidEarnings(address shareholder) public view returns (uint256) {
        return distributor.getUnpaidEarnings(shareholder);
    } 

    // Set gas for distributor
    function setDistributorSettings(uint256 gas) external authorized {
        require(gas < 750000);
        distributorGas = gas;
    }
    
    // Get the circulatingSupply
    function getCirculatingSupply() public view returns (uint256) {
        return _totalSupply.sub(balanceOf(DEAD)).sub(balanceOf(ZERO));
    }

    // Get the liquidity backing
    function getLiquidityBacking(uint256 accuracy) public view returns (uint256) {
        return accuracy.mul(balanceOf(pair).mul(2)).div(getCirculatingSupply());
    }

    // Get if we are over liquified or not
    function isOverLiquified(uint256 target, uint256 accuracy) public view returns (bool) {
        return getLiquidityBacking(accuracy) > target;
    }
    
    event AutoLiquify(uint256 amountBNB, uint256 amountBOG);
    event BuybackMultiplierActive(uint256 duration);
}

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"amountBNB","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"amountBOG","type":"uint256"}],"name":"AutoLiquify","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"duration","type":"uint256"}],"name":"BuybackMultiplierActive","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"owner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[],"name":"_maxBuyTxAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_maxSellTxAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_maxWalletToken","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"holder","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"}],"name":"approveMax","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"authorize","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"autoBuybackEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"autoBuybackMultiplier","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_address","type":"address"},{"internalType":"bool","name":"_value","type":"bool"}],"name":"blacklistAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"buyCooldownEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buybackFeeBuy","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buybackFeeSell","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"claimDividend","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"clearBuybackMultiplier","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_status","type":"bool"},{"internalType":"uint8","name":"_interval","type":"uint8"}],"name":"cooldownEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"cooldownTimerInterval","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"devFeeBuy","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"devFeeSell","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"disableGREED","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_seconds","type":"uint256"}],"name":"enableGREED","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"getCirculatingSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"accuracy","type":"uint256"}],"name":"getLiquidityBacking","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getMultipliedFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getOwner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bool","name":"selling","type":"bool"}],"name":"getTotalFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"shareholder","type":"address"}],"name":"getUnpaidEarnings","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"inGREEDTime","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isAuthorized","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"isBlacklisted","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"target","type":"uint256"},{"internalType":"uint256","name":"accuracy","type":"uint256"}],"name":"isOverLiquified","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isOwner","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"launchedAt","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"liquidityFeeBuy","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"liquidityFeeSell","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"manualSend","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"marketingFeeBuy","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"marketingFeeSell","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"pair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"reflectionFeeBuy","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"reflectionFeeSell","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"router","outputs":[{"internalType":"contract IDEXRouter","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bool","name":"_enabled","type":"bool"},{"internalType":"uint256","name":"_cap","type":"uint256"},{"internalType":"uint256","name":"_amount","type":"uint256"},{"internalType":"uint256","name":"_period","type":"uint256"},{"internalType":"bool","name":"_autoBuybackMultiplier","type":"bool"}],"name":"setAutoBuybackSettings","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_liquidityFeeBuy","type":"uint256"},{"internalType":"uint256","name":"_buybackFeeBuy","type":"uint256"},{"internalType":"uint256","name":"_reflectionFeeBuy","type":"uint256"},{"internalType":"uint256","name":"_marketingFeeBuy","type":"uint256"},{"internalType":"uint256","name":"_devFeeBuy","type":"uint256"},{"internalType":"uint256","name":"_feeDenominator","type":"uint256"}],"name":"setBuyFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"maxBuyTxPercent","type":"uint256"}],"name":"setBuyTxLimitInPercent","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"numerator","type":"uint256"},{"internalType":"uint256","name":"denominator","type":"uint256"},{"internalType":"uint256","name":"length","type":"uint256"}],"name":"setBuybackMultiplierSettings","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_minPeriod","type":"uint256"},{"internalType":"uint256","name":"_minDistribution","type":"uint256"}],"name":"setDistributionCriteria","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"gas","type":"uint256"}],"name":"setDistributorSettings","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_autoLiquidityReceiver","type":"address"},{"internalType":"address","name":"_marketingFeeReceiver","type":"address"}],"name":"setFeeReceivers","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"holder","type":"address"},{"internalType":"bool","name":"exempt","type":"bool"}],"name":"setIsDividendExempt","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"holder","type":"address"},{"internalType":"bool","name":"exempt","type":"bool"}],"name":"setIsFeeExempt","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"holder","type":"address"},{"internalType":"bool","name":"exempt","type":"bool"}],"name":"setIsTimelockExempt","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"holder","type":"address"},{"internalType":"bool","name":"exempt","type":"bool"}],"name":"setIsTxLimitExempt","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"maxWallPercent","type":"uint256"}],"name":"setMaxWalletPercent","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_liquidityFeeSell","type":"uint256"},{"internalType":"uint256","name":"_buybackFeeSell","type":"uint256"},{"internalType":"uint256","name":"_reflectionFeeSell","type":"uint256"},{"internalType":"uint256","name":"_marketingFeeSell","type":"uint256"},{"internalType":"uint256","name":"_devFeeSell","type":"uint256"},{"internalType":"uint256","name":"_feeDenominator","type":"uint256"}],"name":"setSellFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"maxSellTxPercent","type":"uint256"}],"name":"setSellTxLimitInPercent","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_enabled","type":"bool"},{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"setSwapBackSettings","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_target","type":"uint256"},{"internalType":"uint256","name":"_denominator","type":"uint256"}],"name":"setTargetLiquidity","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"swapThreshold","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"totalFeeBuy","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalFeeSell","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":"tradingOpen","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bool","name":"_status","type":"bool"}],"name":"tradingStatus","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address payable","name":"account","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"bool","name":"triggerBuybackMultiplier","type":"bool"}],"name":"triggerManualBuyback","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"unauthorize","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

6080604052600280546001600160a01b031990811673e9e7cea3dedca5984780bafc599bd69add087d561790915560038054821673bb4cdb9cbd36b01bd1cbaebf2de08d9173bc095c17905560048054821661dead17905560058054821690556006805490911673bd0337a4ae47fc010559c5ca531f0caed1475bc11790556200008c6012600a620005d2565b6200009c90633b9aca00620005ea565b60095561271060095460c8620000b39190620005ea565b620000bf91906200060c565b600a556127106009546064620000d69190620005ea565b620000e291906200060c565b600b5561271060095460c8620000f99190620005ea565b6200010591906200060c565b600c556001601455600060155560006016556002601755600160185560046019556001601a556000601b556000601c556002601d556001601e556004601f556064602655610e1060285560036029556127106009546019620001689190620005ea565b6200017491906200060c565b602a556014602b556064602c81905561012c602d55602e556107086030556031805461ffff199081169091556207a120603855603980548216611e00179055603e8054909116610101179055348015620001cd57600080fd5b5060008054336001600160a01b031991821681178355825260016020818152604093849020805460ff1916909217909155603b8054737a250d5630b4cf539739df2c5dacb4c659f2488d931683179055825163c45a015560e01b81529251919263c45a015592600480830193928290030181865afa15801562000254573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200027a91906200062f565b6003546040516364e329cb60e11b81526001600160a01b03918216600482015230602482015291169063c9c65396906044016020604051808303816000875af1158015620002cc573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002f291906200062f565b603c80546001600160a01b0319166001600160a01b03928316179055306000908152600e60209081526040808320603b80548616855292529182902060001990555490519116906200034490620004af565b6001600160a01b039091168152602001604051809103906000f08015801562000371573d6000803e3d6000fd5b50603780546001600160a01b039283166001600160a01b031991821617909155336000818152600f60209081526040808320805460ff199081166001908117909255601084528285208054821683179055601184528285208054821683179055600480548916865283862080548316841790553080875284872080548416851790556006548a1687528487208054841685179055603c548a168752601286528487208054841685179055865283862080548316841790555490971684528184208054909716179095556007805485168417905560088054909416732d6a856994dabeca7903d78ed094c861515df6cf17909355600954828252600d84528482208190559351938452909283927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a3506200065a565b611044806200381583390190565b634e487b7160e01b600052601160045260246000fd5b600181815b8085111562000514578160001904821115620004f857620004f8620004bd565b808516156200050657918102915b93841c9390800290620004d8565b509250929050565b6000826200052d57506001620005cc565b816200053c57506000620005cc565b8160018114620005555760028114620005605762000580565b6001915050620005cc565b60ff841115620005745762000574620004bd565b50506001821b620005cc565b5060208310610133831016604e8410600b8410161715620005a5575081810a620005cc565b620005b18383620004d3565b8060001904821115620005c857620005c8620004bd565b0290505b92915050565b6000620005e360ff8416836200051c565b9392505050565b6000816000190483118215151615620006075762000607620004bd565b500290565b6000826200062a57634e487b7160e01b600052601260045260246000fd5b500490565b6000602082840312156200064257600080fd5b81516001600160a01b0381168114620005e357600080fd5b6131ab806200066a6000396000f3fe6080604052600436106104355760003560e01c80637affa29b11610229578063d806d12f1161012e578063f2fde38b116100b6578063f887ea401161007a578063f887ea4014610c88578063fb5f27fb14610ca8578063fe575a8714610cbe578063fe9fbb8014610cee578063ffb54a9914610d0e57600080fd5b8063f2fde38b14610bf3578063f429389014610c13578063f708a64f14610c28578063f74c9f4714610c48578063f84ba65d14610c6857600080fd5b8063e1dcc71f116100fd578063e1dcc71f14610b5f578063e3aa51bc14610b7e578063f0b37c0414610b9e578063f0fc6bca14610bbe578063f1f3bca314610bd357600080fd5b8063d806d12f14610ac4578063dd62ed3e14610ad9578063df20fd4914610b1f578063df4a76c514610b3f57600080fd5b8063a9059cbb116101b1578063ba876bb911610180578063ba876bb914610a42578063bf56b37114610a62578063cdba31fd14610a78578063cf4be39414610a8e578063d51ed1c814610aa457600080fd5b8063a9059cbb146109d7578063ac45ed1c146109f7578063b210b06d14610a0d578063b6a5d7de14610a2257600080fd5b8063893d20e8116101f8578063893d20e81461091757806395d89b41146109495780639d1944f514610977578063a4b45c0014610997578063a8aa1b31146109b757600080fd5b80637affa29b146108a157806382334b94146108c157806382bf293c146108e157806382d201161461090157600080fd5b80632f54bf6e1161033a5780634f7b4d49116102c2578063658d4b7f11610286578063658d4b7f146107f75780636ddd17131461081757806370a0823114610836578063722b62ad1461086c57806378109e541461088b57600080fd5b80634f7b4d491461077257806350db71fb1461078757806353148416146107a7578063571ac8b0146107bd578063617fe0ed146107dd57600080fd5b806337bc957e1161030957806337bc957e146106f75780633bb8a8d41461070d578063409d056614610727578063455a43961461073d5780634dfc855a1461075d57600080fd5b80632f54bf6e146106705780632f5620d11461069f578063313ce567146106bf57806333477327146106e157600080fd5b806318160ddd116103bd57806328fd31981161038c57806328fd3198146105e55780632b112e49146106055780632d48e8961461061a5780632d5945671461063a5780632e4a9bd71461065a57600080fd5b806318160ddd14610570578063201e7991146105855780632375ce40146105a557806323b872dd146105c557600080fd5b806310075a691161040457806310075a69146104f85780631107b3a51461050e5780631161ae391461052457806312835c5e1461054457806313374e7a1461055a57600080fd5b80630445b6671461044157806306fdde031461046a578063095ea7b3146104a65780630d295980146104d657600080fd5b3661043c57005b600080fd5b34801561044d57600080fd5b50610457602a5481565b6040519081526020015b60405180910390f35b34801561047657600080fd5b5060408051808201909152600a815269446f6765436f6666656560b01b60208201525b6040516104619190612c9b565b3480156104b257600080fd5b506104c66104c1366004612d05565b610d28565b6040519015158152602001610461565b3480156104e257600080fd5b506104f66104f1366004612d46565b610d95565b005b34801561050457600080fd5b5061045760175481565b34801561051a57600080fd5b50610457601a5481565b34801561053057600080fd5b506104c661053f366004612d61565b610de0565b34801561055057600080fd5b50610457601e5481565b34801561056657600080fd5b50610457601d5481565b34801561057c57600080fd5b50600954610457565b34801561059157600080fd5b506104f66105a0366004612d61565b610df4565b3480156105b157600080fd5b506104f66105c0366004612d83565b610e24565b3480156105d157600080fd5b506104c66105e0366004612daf565b610e79565b3480156105f157600080fd5b50610457610600366004612df0565b610f3b565b34801561061157600080fd5b50610457610faa565b34801561062657600080fd5b506104f6610635366004612d61565b610ffc565b34801561064657600080fd5b506104f6610655366004612e0d565b61108b565b34801561066657600080fd5b5061045760155481565b34801561067c57600080fd5b506104c661068b366004612df0565b6000546001600160a01b0391821691161490565b3480156106ab57600080fd5b506104f66106ba366004612e4a565b6110d7565b3480156106cb57600080fd5b5060125b60405160ff9091168152602001610461565b3480156106ed57600080fd5b50610457600a5481565b34801561070357600080fd5b50610457601b5481565b34801561071957600080fd5b506031546104c69060ff1681565b34801561073357600080fd5b5061045760165481565b34801561074957600080fd5b506104f6610758366004612e9a565b61113d565b34801561076957600080fd5b506104c661118d565b34801561077e57600080fd5b506104f66111b9565b34801561079357600080fd5b506104f66107a2366004612e9a565b6111e5565b3480156107b357600080fd5b50610457601f5481565b3480156107c957600080fd5b506104c66107d8366004612df0565b611235565b3480156107e957600080fd5b506039546104c69060ff1681565b34801561080357600080fd5b506104f6610812366004612e9a565b611243565b34801561082357600080fd5b50603e546104c690610100900460ff1681565b34801561084257600080fd5b50610457610851366004612df0565b6001600160a01b03166000908152600d602052604090205490565b34801561087857600080fd5b506039546106cf90610100900460ff1681565b34801561089757600080fd5b50610457600c5481565b3480156108ad57600080fd5b506104f66108bc366004612ecf565b611293565b3480156108cd57600080fd5b506104f66108dc366004612ee8565b6112df565b3480156108ed57600080fd5b506104f66108fc366004612ecf565b611388565b34801561090d57600080fd5b5061045760145481565b34801561092357600080fd5b506000546001600160a01b03165b6040516001600160a01b039091168152602001610461565b34801561095557600080fd5b506040805180820190915260058152644245414e5360d81b6020820152610499565b34801561098357600080fd5b506104f6610992366004612ecf565b6113d3565b3480156109a357600080fd5b506104f66109b2366004612f0b565b61140c565b3480156109c357600080fd5b50603c54610931906001600160a01b031681565b3480156109e357600080fd5b506104c66109f2366004612d05565b61145f565b348015610a0357600080fd5b50610457601c5481565b348015610a1957600080fd5b506104f661146c565b348015610a2e57600080fd5b506104f6610a3d366004612df0565b611498565b348015610a4e57600080fd5b506104f6610a5d366004612f39565b6114e9565b348015610a6e57600080fd5b50610457603d5481565b348015610a8457600080fd5b5061045760185481565b348015610a9a57600080fd5b50610457600b5481565b348015610ab057600080fd5b50610457610abf366004612ecf565b61154c565b348015610ad057600080fd5b5061045761158d565b348015610ae557600080fd5b50610457610af4366004612f0b565b6001600160a01b039182166000908152600e6020908152604080832093909416825291909152205490565b348015610b2b57600080fd5b506104f6610b3a366004612f7c565b611600565b348015610b4b57600080fd5b506104f6610b5a366004612ecf565b61165b565b348015610b6b57600080fd5b506031546104c690610100900460ff1681565b348015610b8a57600080fd5b506104f6610b99366004612ecf565b6116a1565b348015610baa57600080fd5b506104f6610bb9366004612df0565b6116cf565b348015610bca57600080fd5b506104f661171a565b348015610bdf57600080fd5b50610457610bee366004612d46565b611773565b348015610bff57600080fd5b506104f6610c0e366004612df0565b6117d0565b348015610c1f57600080fd5b506104f6611866565b348015610c3457600080fd5b506104f6610c43366004612e9a565b6118c9565b348015610c5457600080fd5b506104f6610c63366004612f39565b6119cd565b348015610c7457600080fd5b506104f6610c83366004612e9a565b611a2a565b348015610c9457600080fd5b50603b54610931906001600160a01b031681565b348015610cb457600080fd5b5061045760195481565b348015610cca57600080fd5b506104c6610cd9366004612df0565b60136020526000908152604090205460ff1681565b348015610cfa57600080fd5b506104c6610d09366004612df0565b611a7a565b348015610d1a57600080fd5b50603e546104c69060ff1681565b336000818152600e602090815260408083206001600160a01b038716808552925280832085905551919290917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92590610d839086815260200190565b60405180910390a35060015b92915050565b6000546001600160a01b03163314610dc85760405162461bcd60e51b8152600401610dbf90612f98565b60405180910390fd5b603e805460ff191682151517905543603d5550565b50565b600082610dec8361154c565b119392505050565b610dfd33611a7a565b610e195760405162461bcd60e51b8152600401610dbf90612fb8565b602b91909155602c55565b610e2d33611a7a565b610e495760405162461bcd60e51b8152600401610dbf90612fb8565b6002610e558385612ff3565b11158015610e6257508183115b610e6b57600080fd5b602d92909255602e55603055565b6001600160a01b0383166000908152600e6020908152604080832033845290915281205460001914610f26576040805180820182526016815275496e73756666696369656e7420416c6c6f77616e636560501b6020808301919091526001600160a01b0387166000908152600e82528381203382529091529190912054610f01918490611a98565b6001600160a01b0385166000908152600e602090815260408083203384529091529020555b610f31848484611ad2565b90505b9392505050565b60375460405163051fa63360e31b81526001600160a01b03838116600483015260009216906328fd319890602401602060405180830381865afa158015610f86573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d8f9190613015565b6005546001600160a01b03166000908152600d6020526040812054610ff7906004546001600160a01b03166000908152600d6020526040902054610ff19060095490611f20565b90611f20565b905090565b61100533611a7a565b6110215760405162461bcd60e51b8152600401610dbf90612fb8565b6037546040516316a4744b60e11b815260048101849052602481018390526001600160a01b0390911690632d48e896906044015b600060405180830381600087803b15801561106f57600080fd5b505af1158015611083573d6000803e3d6000fd5b505050505050565b61109433611a7a565b6110b05760405162461bcd60e51b8152600401610dbf90612fb8565b6039805461ffff191692151561ff0019169290921761010060ff9290921691909102179055565b6110e033611a7a565b6110fc5760405162461bcd60e51b8152600401610dbf90612fb8565b6031805460329590955560006033556034939093556035919091554360365561ffff1990921692151561ff0019169290921761010091151591909102179055565b61114633611a7a565b6111625760405162461bcd60e51b8152600401610dbf90612fb8565b6001600160a01b03919091166000908152601360205260409020805460ff1916911515919091179055565b6000426111a7602854602754611f6290919063ffffffff16565b11156111b35750600190565b50600090565b6111c233611a7a565b6111de5760405162461bcd60e51b8152600401610dbf90612fb8565b6000602755565b6111ee33611a7a565b61120a5760405162461bcd60e51b8152600401610dbf90612fb8565b6001600160a01b03919091166000908152601160205260409020805460ff1916911515919091179055565b6000610d8f82600019610d28565b61124c33611a7a565b6112685760405162461bcd60e51b8152600401610dbf90612fb8565b6001600160a01b03919091166000908152600f60205260409020805460ff1916911515919091179055565b61129c33611a7a565b6112b85760405162461bcd60e51b8152600401610dbf90612fb8565b6112d96127106112d383600954611fc190919063ffffffff16565b90612043565b600a5550565b6112e833611a7a565b6113045760405162461bcd60e51b8152600401610dbf90612fb8565b600061131883670de0b6b3a764000061302e565b90506000611327826064612043565b6004549091506113419082906001600160a01b0316612085565b82156113825742602f556030546040519081527f39d2389ec5c1fa77b2c0d374bc61b6d7bd97ccba280fcdeb4e9c7644898d7c3a9060200160405180910390a15b50505050565b6000546001600160a01b031633146113b25760405162461bcd60e51b8152600401610dbf90612f98565b6113cd6127106112d383600954611fc190919063ffffffff16565b600c5550565b6113dc33611a7a565b6113f85760405162461bcd60e51b8152600401610dbf90612fb8565b620b71b0811061140757600080fd5b603855565b61141533611a7a565b6114315760405162461bcd60e51b8152600401610dbf90612fb8565b600780546001600160a01b039384166001600160a01b03199182161790915560088054929093169116179055565b6000610f34338484611ad2565b61147533611a7a565b6114915760405162461bcd60e51b8152600401610dbf90612fb8565b6000602f55565b6000546001600160a01b031633146114c25760405162461bcd60e51b8152600401610dbf90612f98565b6001600160a01b03166000908152600160208190526040909120805460ff19169091179055565b6114f233611a7a565b61150e5760405162461bcd60e51b8152600401610dbf90612fb8565b601a869055601b859055601c849055601d839055601e82905561153f82611539858188818c8c611f62565b90611f62565b601f556026555050505050565b6000610d8f611559610faa565b603c546001600160a01b03166000908152600d60205260409020546112d390611586906002905b90611fc1565b8590611fc1565b6000806115ab42610ff1603054602f54611f6290919063ffffffff16565b905060006115d2602554610ff1602e546112d3602d54602554611fc190919063ffffffff16565b90506115f96115f06030546112d38585611fc190919063ffffffff16565b60255490611f62565b9250505090565b61160933611a7a565b6116255760405162461bcd60e51b8152600401610dbf90612fb8565b603e805461ff001916610100841515021790556009546127109061164a90839061302e565b6116549190612ff3565b602a555050565b61166433611a7a565b6116805760405162461bcd60e51b8152600401610dbf90612fb8565b61169b6127106112d383600954611fc190919063ffffffff16565b600b5550565b6116aa33611a7a565b6116c65760405162461bcd60e51b8152600401610dbf90612fb8565b42602755602855565b6000546001600160a01b031633146116f95760405162461bcd60e51b8152600401610dbf90612f98565b6001600160a01b03166000908152600160205260409020805460ff19169055565b603754604051630afbf02f60e11b81523360048201526001600160a01b03909116906315f7e05e90602401600060405180830381600087803b15801561175f57600080fd5b505af1158015611382573d6000803e3d6000fd5b600043602954603d54611786919061304d565b1061179957602654610d8f906001611f20565b8180156117bb5750426117b9603054602f54611f6290919063ffffffff16565b115b156117c857610d8f61158d565b505060255490565b6000546001600160a01b031633146117fa5760405162461bcd60e51b8152600401610dbf90612f98565b600080546001600160a01b0319166001600160a01b038316908117825580825260016020818152604093849020805460ff191690921790915591519081527f04dba622d284ed0014ee4b9a6a68386be1a4c08a4913ae272de89199cc686163910160405180910390a150565b61186f33611a7a565b61188b5760405162461bcd60e51b8152600401610dbf90612fb8565b60085460405147916001600160a01b03169082156108fc029083906000818181858888f193505050501580156118c5573d6000803e3d6000fd5b5050565b6118d233611a7a565b6118ee5760405162461bcd60e51b8152600401610dbf90612fb8565b6001600160a01b03821630148015906119155750603c546001600160a01b03838116911614155b61191e57600080fd5b6001600160a01b0382166000908152601260205260409020805460ff1916821580159190911790915561198457603754604051630a5b654b60e11b81526001600160a01b03848116600483015260006024830152909116906314b6ca9690604401611055565b6037546001600160a01b038381166000818152600d602052604090819020549051630a5b654b60e11b8152600481019290925260248201529116906314b6ca9690604401611055565b6119d633611a7a565b6119f25760405162461bcd60e51b8152600401610dbf90612fb8565b60148690556015859055601684905560178390556018829055611a1d82611539858188818c8c611f62565b6019556026555050505050565b611a3333611a7a565b611a4f5760405162461bcd60e51b8152600401610dbf90612fb8565b6001600160a01b03919091166000908152601060205260409020805460ff1916911515919091179055565b6001600160a01b031660009081526001602052604090205460ff1690565b60008184841115611abc5760405162461bcd60e51b8152600401610dbf9190612c9b565b506000611ac98486613065565b95945050505050565b603e5460009062010000900460ff1615611af857611af1848484612194565b9050610f34565b6001600160a01b03841660009081526001602052604090205460ff16158015611b3a57506001600160a01b03831660009081526001602052604090205460ff16155b15611b9157603e5460ff16611b915760405162461bcd60e51b815260206004820152601760248201527f54726164696e67206e6f7420656e61626c6564207965740000000000000000006044820152606401610dbf565b6001600160a01b03831660009081526013602052604090205460ff16158015611bd357506001600160a01b03841660009081526013602052604090205460ff16155b611c185760405162461bcd60e51b81526020600482015260166024820152751059191c995cdcc81a5cc8189b1858dadb1a5cdd195960521b6044820152606401610dbf565b603c546001600160a01b03848116911614611c328161227a565b611c3d8585856122ce565b611c478585612440565b611c5385848684612522565b6000611c5d61118d565b9050611c6761265a565b15611c7457611c746126b4565b6040805180820182526014815273496e73756666696369656e742042616c616e636560601b6020808301919091526001600160a01b0389166000908152600d9091529190912054611cc6918690611a98565b6001600160a01b0387166000908152600d6020908152604080832093909355600f90529081205460ff1615611cfb5784611d07565b611d0787868585612b6d565b6001600160a01b0387166000908152600d6020526040902054909150611d2d9082611f62565b6001600160a01b038088166000908152600d6020908152604080832094909455918a1681526012909152205460ff16611dd1576037546001600160a01b038881166000818152600d602052604090819020549051630a5b654b60e11b8152600481019290925260248201529116906314b6ca9690604401600060405180830381600087803b158015611dbe57600080fd5b505af1925050508015611dcf575060015b505b6001600160a01b03861660009081526012602052604090205460ff16611e62576037546001600160a01b038781166000818152600d602052604090819020549051630a5b654b60e11b8152600481019290925260248201529116906314b6ca9690604401600060405180830381600087803b158015611e4f57600080fd5b505af1925050508015611e60575060015b505b6037546038546040516001624d3b8760e01b031981526001600160a01b039092169163ffb2c47991611e9a9160040190815260200190565b600060405180830381600087803b158015611eb457600080fd5b505af1925050508015611ec5575060015b50856001600160a01b0316876001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051611f0b91815260200190565b60405180910390a35060019695505050505050565b6000610f3483836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250611a98565b600080611f6f838561304d565b905083811015610f345760405162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f7700000000006044820152606401610dbf565b600082600003611fd357506000610d8f565b6000611fdf838561302e565b905082611fec8583612ff3565b14610f345760405162461bcd60e51b815260206004820152602160248201527f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f6044820152607760f81b6064820152608401610dbf565b6000610f3483836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250612c6d565b603e805462ff0000191662010000179055604080516002808252606082018352600092602083019080368337505060035482519293506001600160a01b0316918391506000906120d7576120d761307c565b60200260200101906001600160a01b031690816001600160a01b031681525050308160018151811061210b5761210b61307c565b6001600160a01b039283166020918202929092010152603b5460405163b6f9de9560e01b815291169063b6f9de95908590612151906000908690889042906004016130d6565b6000604051808303818588803b15801561216a57600080fd5b505af115801561217e573d6000803e3d6000fd5b5050603e805462ff000019169055505050505050565b6040805180820182526014815273496e73756666696369656e742042616c616e636560601b6020808301919091526001600160a01b0386166000908152600d909152918220546121e5918490611a98565b6001600160a01b038086166000908152600d602052604080822093909355908516815220546122149083611f62565b6001600160a01b038085166000818152600d602052604090819020939093559151908616907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef906122689086815260200190565b60405180910390a35060019392505050565b80156122a757601a54602055601b54602155601c54602255601d54602355601e54602455601f5460255550565b60145460205560155460215560165460225560175460235560185460245560195460255550565b6001600160a01b03831660009081526001602052604090205460ff1615801561230557506000546001600160a01b03838116911614155b801561231a57506001600160a01b0382163014155b801561233457506004546001600160a01b03838116911614155b801561234e5750603c546001600160a01b03838116911614155b801561236857506008546001600160a01b03838116911614155b801561238257506007546001600160a01b03838116911614155b801561239c57506006546001600160a01b03838116911614155b1561243b576001600160a01b0382166000908152600d6020526040902054600c546123c7838361304d565b11156113825760405162461bcd60e51b815260206004820152603e60248201527f546f74616c20486f6c64696e672069732063757272656e746c79206c696d697460448201527f65642c20796f752063616e206e6f74206275792074686174206d7563682e00006064820152608401610dbf565b505050565b603c546001600160a01b03838116911614801561245f575060395460ff165b801561248457506001600160a01b03811660009081526011602052604090205460ff16155b156118c5576001600160a01b0381166000908152603a602052604090205442116124f05760405162461bcd60e51b815260206004820152601c60248201527f506c656173652077616974206265747765656e2074776f2062757973000000006044820152606401610dbf565b60395461250590610100900460ff164261304d565b6001600160a01b0382166000908152603a60205260409020555050565b6000546001600160a01b038381169116146113825780156125ce57600b548311158061256657506001600160a01b03841660009081526010602052604090205460ff165b8061258957506001600160a01b03821660009081526010602052604090205460ff165b6125c95760405162461bcd60e51b8152602060048201526011602482015270151608131a5b5a5d08115e18d959591959607a1b6044820152606401610dbf565b611382565b600a54831115806125f757506001600160a01b03841660009081526010602052604090205460ff165b8061261a57506001600160a01b03821660009081526010602052604090205460ff165b6113825760405162461bcd60e51b8152602060048201526011602482015270151608131a5b5a5d08115e18d959591959607a1b6044820152606401610dbf565b603c546000906001600160a01b031633148015906126815750603e5462010000900460ff16155b80156126945750603e54610100900460ff165b8015610ff7575050602a54306000908152600d6020526040902054101590565b603e805462ff0000191662010000179055602b54602c546000916126d791610de0565b6126e3576020546126e6565b60005b9050600061270a60026112d36025546112d386602a54611fc190919063ffffffff16565b9050600061272382602a54611f2090919063ffffffff16565b6040805160028082526060820183529293506000929091602083019080368337019050509050308160008151811061275d5761275d61307c565b6001600160a01b03928316602091820292909201015260035482519116908290600190811061278e5761278e61307c565b6001600160a01b039283166020918202929092010152603b5460405163791ac94760e01b81524792919091169063791ac947906127d890869060009087903090429060040161310b565b600060405180830381600087803b1580156127f257600080fd5b505af1158015612806573d6000803e3d6000fd5b50505050600061281f8247611f2090919063ffffffff16565b9050600061283a612831886002612043565b60255490611f20565b9050600061284f60026112d38481878d611fc1565b9050600061286c836112d360225487611fc190919063ffffffff16565b90506000612889846112d360235488611fc190919063ffffffff16565b905060006128a6856112d360245489611fc190919063ffffffff16565b9050603760009054906101000a90046001600160a01b03166001600160a01b031663d0e30db0846040518263ffffffff1660e01b81526004016000604051808303818588803b1580156128f857600080fd5b505af19350505050801561290a575060015b506008546040516000916001600160a01b03169061753090859084818181858888f193505050503d806000811461295d576040519150601f19603f3d011682016040523d82523d6000602084013e612962565b606091505b50506006546040519192506000916001600160a01b039091169061753090859084818181858888f193505050503d80600081146129bb576040519150601f19603f3d011682016040523d82523d6000602084013e6129c0565b606091505b5050905081612a225760405162461bcd60e51b815260206004820152602860248201527f6d61726b6574696e672072656365697665722072656a656374656420455448206044820152673a3930b739b332b960c11b6064820152608401610dbf565b80612a7a5760405162461bcd60e51b815260206004820152602260248201527f6465762072656365697665722072656a656374656420455448207472616e736660448201526132b960f11b6064820152608401610dbf565b8b15612b5257603b5460075460405163f305d71960e01b8152306004820152602481018f905260006044820181905260648201526001600160a01b0391821660848201524260a482015291169063f305d71990889060c40160606040518083038185885af1158015612af0573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190612b159190613147565b505060408051888152602081018f90527f424db2872186fa7e7afa7a5e902ed3b49a2ef19c2f5431e672462495dd6b450692500160405180910390a15b5050603e805462ff0000191690555050505050505050505050565b6000808215612bc8578315612ba857612ba16026546112d360026112d360036115806025548c611fc190919063ffffffff16565b9050612be6565b612ba16026546112d360026112d36025548a611fc190919063ffffffff16565b612be36026546112d360255488611fc190919063ffffffff16565b90505b306000908152600d6020526040902054612c009082611f62565b306000818152600d6020526040908190209290925590516001600160a01b038816907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90612c519085815260200190565b60405180910390a3612c638582611f20565b9695505050505050565b60008183612c8e5760405162461bcd60e51b8152600401610dbf9190612c9b565b506000611ac98486612ff3565b600060208083528351808285015260005b81811015612cc857858101830151858201604001528201612cac565b81811115612cda576000604083870101525b50601f01601f1916929092016040019392505050565b6001600160a01b0381168114610ddd57600080fd5b60008060408385031215612d1857600080fd5b8235612d2381612cf0565b946020939093013593505050565b80358015158114612d4157600080fd5b919050565b600060208284031215612d5857600080fd5b610f3482612d31565b60008060408385031215612d7457600080fd5b50508035926020909101359150565b600080600060608486031215612d9857600080fd5b505081359360208301359350604090920135919050565b600080600060608486031215612dc457600080fd5b8335612dcf81612cf0565b92506020840135612ddf81612cf0565b929592945050506040919091013590565b600060208284031215612e0257600080fd5b8135610f3481612cf0565b60008060408385031215612e2057600080fd5b612e2983612d31565b9150602083013560ff81168114612e3f57600080fd5b809150509250929050565b600080600080600060a08688031215612e6257600080fd5b612e6b86612d31565b9450602086013593506040860135925060608601359150612e8e60808701612d31565b90509295509295909350565b60008060408385031215612ead57600080fd5b8235612eb881612cf0565b9150612ec660208401612d31565b90509250929050565b600060208284031215612ee157600080fd5b5035919050565b60008060408385031215612efb57600080fd5b82359150612ec660208401612d31565b60008060408385031215612f1e57600080fd5b8235612f2981612cf0565b91506020830135612e3f81612cf0565b60008060008060008060c08789031215612f5257600080fd5b505084359660208601359650604086013595606081013595506080810135945060a0013592509050565b60008060408385031215612f8f57600080fd5b612d2383612d31565b60208082526006908201526510a7aba722a960d11b604082015260600190565b6020808252600b908201526a085055551213d49256915160aa1b604082015260600190565b634e487b7160e01b600052601160045260246000fd5b60008261301057634e487b7160e01b600052601260045260246000fd5b500490565b60006020828403121561302757600080fd5b5051919050565b600081600019048311821515161561304857613048612fdd565b500290565b6000821982111561306057613060612fdd565b500190565b60008282101561307757613077612fdd565b500390565b634e487b7160e01b600052603260045260246000fd5b600081518084526020808501945080840160005b838110156130cb5781516001600160a01b0316875295820195908201906001016130a6565b509495945050505050565b8481526080602082015260006130ef6080830186613092565b6001600160a01b03949094166040830152506060015292915050565b85815284602082015260a06040820152600061312a60a0830186613092565b6001600160a01b0394909416606083015250608001529392505050565b60008060006060848603121561315c57600080fd5b835192506020840151915060408401519050925092509256fea2646970667358221220dad686fb5fe2971042814298b81e56927519f5455c9c2c3798974acebdead5c464736f6c634300080e00336080604052600180546001600160a01b031990811673e9e7cea3dedca5984780bafc599bd69add087d56179091556002805490911673bb4cdb9cbd36b01bd1cbaebf2de08d9173bc095c1790556ec097ce7bc90715b34b9f1000000000600c55610708600d5564e8d4a51000600e5534801561007a57600080fd5b50604051611044380380611044833981016040819052610099916100f3565b6001600160a01b0381166100c157737a250d5630b4cf539739df2c5dacb4c659f2488d6100c3565b805b600380546001600160a01b03929092166001600160a01b0319928316179055600080549091163317905550610123565b60006020828403121561010557600080fd5b81516001600160a01b038116811461011c57600080fd5b9392505050565b610f12806101326000396000f3fe6080604052600436106100dd5760003560e01c8063997664d71161007f578063e2d2e21911610059578063e2d2e2191461022e578063efca2eed14610244578063ffb2c4791461025a578063ffd49c841461027a57600080fd5b8063997664d7146101b9578063ce7c2ac2146101cf578063d0e30db01461022657600080fd5b806328fd3198116100bb57806328fd31981461014d5780632d48e8961461016d5780633a98ef391461018d5780634fab0ae8146101a357600080fd5b806311ce023d146100e257806314b6ca961461010b57806315f7e05e1461012d575b600080fd5b3480156100ee57600080fd5b506100f8600c5481565b6040519081526020015b60405180910390f35b34801561011757600080fd5b5061012b610126366004610c97565b610290565b005b34801561013957600080fd5b5061012b610148366004610cc1565b610408565b34801561015957600080fd5b506100f8610168366004610cc1565b61042b565b34801561017957600080fd5b5061012b610188366004610cdc565b6104b6565b34801561019957600080fd5b506100f860085481565b3480156101af57600080fd5b506100f8600e5481565b3480156101c557600080fd5b506100f860095481565b3480156101db57600080fd5b5061020b6101ea366004610cc1565b60076020526000908152604090208054600182015460029092015490919083565b60408051938452602084019290925290820152606001610102565b61012b6104d8565b34801561023a57600080fd5b506100f8600b5481565b34801561025057600080fd5b506100f8600a5481565b34801561026657600080fd5b5061012b610275366004610cfe565b610707565b34801561028657600080fd5b506100f8600d5481565b6000546001600160a01b031633146102a757600080fd5b6001600160a01b038216600090815260076020526040902054156102ce576102ce8261080b565b6000811180156102f457506001600160a01b038216600090815260076020526040902054155b1561035a57600480546001600160a01b0384166000818152600560205260408120839055600183018455929092527f8a35acfbc15ff81a39ae7d344fd709f28e8600b4aa8c65c6b64bfe7fe36bd19b0180546001600160a01b031916909117905561038d565b8015801561037f57506001600160a01b03821660009081526007602052604090205415155b1561038d5761038d82610929565b6001600160a01b0382166000908152600760205260409020546008546103be9183916103b891610a3e565b90610a89565b6008556001600160a01b03821660009081526007602052604090208190556103e581610aed565b6001600160a01b0390921660009081526007602052604090206001019190915550565b6000546001600160a01b0316331461041f57600080fd5b6104288161080b565b50565b6001600160a01b038116600090815260076020526040812054810361045257506000919050565b6001600160a01b03821660009081526007602052604081205461047490610aed565b6001600160a01b0384166000908152600760205260409020600101549091508082116104a4575060009392505050565b6104ae8282610a3e565b949350505050565b6000546001600160a01b031633146104cd57600080fd5b600d91909155600e55565b6000546001600160a01b031633146104ef57600080fd5b6001546040516370a0823160e01b81523060048201526000916001600160a01b0316906370a0823190602401602060405180830381865afa158015610538573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061055c9190610d17565b6040805160028082526060820183529293506000929091602083019080368337505060025482519293506001600160a01b0316918391506000906105a2576105a2610d30565b6001600160a01b03928316602091820292909201015260018054835192169183919081106105d2576105d2610d30565b6001600160a01b03928316602091820292909201015260035460405163b6f9de9560e01b815291169063b6f9de9590349061061890600090869030904290600401610d46565b6000604051808303818588803b15801561063157600080fd5b505af1158015610645573d6000803e3d6000fd5b50506001546040516370a0823160e01b8152306004820152600094506106c593508692506001600160a01b03909116906370a0823190602401602060405180830381865afa15801561069b573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106bf9190610d17565b90610a3e565b6009549091506106d59082610a89565b600955600854600c546106ff916106f6916106f09085610b0a565b90610b8c565b600b5490610a89565b600b55505050565b6000546001600160a01b0316331461071e57600080fd5b600454600081900361072e575050565b6000805a905060005b848310801561074557508381105b156108045783600f5410610759576000600f555b61078b6004600f548154811061077157610771610d30565b6000918252602090912001546001600160a01b0316610bce565b156107c2576107c26004600f54815481106107a8576107a8610d30565b6000918252602090912001546001600160a01b031661080b565b6107d76107d05a8490610a3e565b8490610a89565b92505a600f805491935060006107ec83610dc6565b919050555080806107fc90610dc6565b915050610737565b5050505050565b6001600160a01b038116600090815260076020526040812054900361082d5750565b60006108388261042b565b9050801561092557600a5461084d9082610a89565b600a5560015460405163a9059cbb60e01b81526001600160a01b038481166004830152602482018490529091169063a9059cbb906044016020604051808303816000875af11580156108a3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108c79190610ddf565b506001600160a01b038216600090815260066020908152604080832042905560079091529020600201546108fb9082610a89565b6001600160a01b03831660009081526007602052604090206002810191909155546103e590610aed565b5050565b6004805461093990600190610e01565b8154811061094957610949610d30565b60009182526020808320909101546001600160a01b038481168452600590925260409092205460048054929093169291811061098757610987610d30565b600091825260208083209190910180546001600160a01b0319166001600160a01b039485161790559183168152600591829052604081205460048054919392916109d390600190610e01565b815481106109e3576109e3610d30565b60009182526020808320909101546001600160a01b031683528201929092526040019020556004805480610a1957610a19610e18565b600082815260209020810160001990810180546001600160a01b031916905501905550565b6000610a8083836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250610c13565b90505b92915050565b600080610a968385610e2e565b905083811015610a805760405162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f77000000000060448201526064015b60405180910390fd5b6000610a83600c546106f0600b5485610b0a90919063ffffffff16565b600082600003610b1c57506000610a83565b6000610b288385610e46565b905082610b358583610e65565b14610a805760405162461bcd60e51b815260206004820152602160248201527f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f6044820152607760f81b6064820152608401610ae4565b6000610a8083836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250610c4d565b600d546001600160a01b03821660009081526006602052604081205490914291610bf89190610e2e565b108015610a835750600e54610c0c8361042b565b1192915050565b60008184841115610c375760405162461bcd60e51b8152600401610ae49190610e87565b506000610c448486610e01565b95945050505050565b60008183610c6e5760405162461bcd60e51b8152600401610ae49190610e87565b506000610c448486610e65565b80356001600160a01b0381168114610c9257600080fd5b919050565b60008060408385031215610caa57600080fd5b610cb383610c7b565b946020939093013593505050565b600060208284031215610cd357600080fd5b610a8082610c7b565b60008060408385031215610cef57600080fd5b50508035926020909101359150565b600060208284031215610d1057600080fd5b5035919050565b600060208284031215610d2957600080fd5b5051919050565b634e487b7160e01b600052603260045260246000fd5b600060808201868352602060808185015281875180845260a086019150828901935060005b81811015610d905784516001600160a01b031683529383019391830191600101610d6b565b50506001600160a01b039690961660408501525050506060015292915050565b634e487b7160e01b600052601160045260246000fd5b600060018201610dd857610dd8610db0565b5060010190565b600060208284031215610df157600080fd5b81518015158114610a8057600080fd5b600082821015610e1357610e13610db0565b500390565b634e487b7160e01b600052603160045260246000fd5b60008219821115610e4157610e41610db0565b500190565b6000816000190483118215151615610e6057610e60610db0565b500290565b600082610e8257634e487b7160e01b600052601260045260246000fd5b500490565b600060208083528351808285015260005b81811015610eb457858101830151858201604001528201610e98565b81811115610ec6576000604083870101525b50601f01601f191692909201604001939250505056fea26469706673582212209addc935a664077e1179fa66c398e53636a6bde622d8d611bfb78b8722630fc064736f6c634300080e0033

Deployed Bytecode

0x6080604052600436106104355760003560e01c80637affa29b11610229578063d806d12f1161012e578063f2fde38b116100b6578063f887ea401161007a578063f887ea4014610c88578063fb5f27fb14610ca8578063fe575a8714610cbe578063fe9fbb8014610cee578063ffb54a9914610d0e57600080fd5b8063f2fde38b14610bf3578063f429389014610c13578063f708a64f14610c28578063f74c9f4714610c48578063f84ba65d14610c6857600080fd5b8063e1dcc71f116100fd578063e1dcc71f14610b5f578063e3aa51bc14610b7e578063f0b37c0414610b9e578063f0fc6bca14610bbe578063f1f3bca314610bd357600080fd5b8063d806d12f14610ac4578063dd62ed3e14610ad9578063df20fd4914610b1f578063df4a76c514610b3f57600080fd5b8063a9059cbb116101b1578063ba876bb911610180578063ba876bb914610a42578063bf56b37114610a62578063cdba31fd14610a78578063cf4be39414610a8e578063d51ed1c814610aa457600080fd5b8063a9059cbb146109d7578063ac45ed1c146109f7578063b210b06d14610a0d578063b6a5d7de14610a2257600080fd5b8063893d20e8116101f8578063893d20e81461091757806395d89b41146109495780639d1944f514610977578063a4b45c0014610997578063a8aa1b31146109b757600080fd5b80637affa29b146108a157806382334b94146108c157806382bf293c146108e157806382d201161461090157600080fd5b80632f54bf6e1161033a5780634f7b4d49116102c2578063658d4b7f11610286578063658d4b7f146107f75780636ddd17131461081757806370a0823114610836578063722b62ad1461086c57806378109e541461088b57600080fd5b80634f7b4d491461077257806350db71fb1461078757806353148416146107a7578063571ac8b0146107bd578063617fe0ed146107dd57600080fd5b806337bc957e1161030957806337bc957e146106f75780633bb8a8d41461070d578063409d056614610727578063455a43961461073d5780634dfc855a1461075d57600080fd5b80632f54bf6e146106705780632f5620d11461069f578063313ce567146106bf57806333477327146106e157600080fd5b806318160ddd116103bd57806328fd31981161038c57806328fd3198146105e55780632b112e49146106055780632d48e8961461061a5780632d5945671461063a5780632e4a9bd71461065a57600080fd5b806318160ddd14610570578063201e7991146105855780632375ce40146105a557806323b872dd146105c557600080fd5b806310075a691161040457806310075a69146104f85780631107b3a51461050e5780631161ae391461052457806312835c5e1461054457806313374e7a1461055a57600080fd5b80630445b6671461044157806306fdde031461046a578063095ea7b3146104a65780630d295980146104d657600080fd5b3661043c57005b600080fd5b34801561044d57600080fd5b50610457602a5481565b6040519081526020015b60405180910390f35b34801561047657600080fd5b5060408051808201909152600a815269446f6765436f6666656560b01b60208201525b6040516104619190612c9b565b3480156104b257600080fd5b506104c66104c1366004612d05565b610d28565b6040519015158152602001610461565b3480156104e257600080fd5b506104f66104f1366004612d46565b610d95565b005b34801561050457600080fd5b5061045760175481565b34801561051a57600080fd5b50610457601a5481565b34801561053057600080fd5b506104c661053f366004612d61565b610de0565b34801561055057600080fd5b50610457601e5481565b34801561056657600080fd5b50610457601d5481565b34801561057c57600080fd5b50600954610457565b34801561059157600080fd5b506104f66105a0366004612d61565b610df4565b3480156105b157600080fd5b506104f66105c0366004612d83565b610e24565b3480156105d157600080fd5b506104c66105e0366004612daf565b610e79565b3480156105f157600080fd5b50610457610600366004612df0565b610f3b565b34801561061157600080fd5b50610457610faa565b34801561062657600080fd5b506104f6610635366004612d61565b610ffc565b34801561064657600080fd5b506104f6610655366004612e0d565b61108b565b34801561066657600080fd5b5061045760155481565b34801561067c57600080fd5b506104c661068b366004612df0565b6000546001600160a01b0391821691161490565b3480156106ab57600080fd5b506104f66106ba366004612e4a565b6110d7565b3480156106cb57600080fd5b5060125b60405160ff9091168152602001610461565b3480156106ed57600080fd5b50610457600a5481565b34801561070357600080fd5b50610457601b5481565b34801561071957600080fd5b506031546104c69060ff1681565b34801561073357600080fd5b5061045760165481565b34801561074957600080fd5b506104f6610758366004612e9a565b61113d565b34801561076957600080fd5b506104c661118d565b34801561077e57600080fd5b506104f66111b9565b34801561079357600080fd5b506104f66107a2366004612e9a565b6111e5565b3480156107b357600080fd5b50610457601f5481565b3480156107c957600080fd5b506104c66107d8366004612df0565b611235565b3480156107e957600080fd5b506039546104c69060ff1681565b34801561080357600080fd5b506104f6610812366004612e9a565b611243565b34801561082357600080fd5b50603e546104c690610100900460ff1681565b34801561084257600080fd5b50610457610851366004612df0565b6001600160a01b03166000908152600d602052604090205490565b34801561087857600080fd5b506039546106cf90610100900460ff1681565b34801561089757600080fd5b50610457600c5481565b3480156108ad57600080fd5b506104f66108bc366004612ecf565b611293565b3480156108cd57600080fd5b506104f66108dc366004612ee8565b6112df565b3480156108ed57600080fd5b506104f66108fc366004612ecf565b611388565b34801561090d57600080fd5b5061045760145481565b34801561092357600080fd5b506000546001600160a01b03165b6040516001600160a01b039091168152602001610461565b34801561095557600080fd5b506040805180820190915260058152644245414e5360d81b6020820152610499565b34801561098357600080fd5b506104f6610992366004612ecf565b6113d3565b3480156109a357600080fd5b506104f66109b2366004612f0b565b61140c565b3480156109c357600080fd5b50603c54610931906001600160a01b031681565b3480156109e357600080fd5b506104c66109f2366004612d05565b61145f565b348015610a0357600080fd5b50610457601c5481565b348015610a1957600080fd5b506104f661146c565b348015610a2e57600080fd5b506104f6610a3d366004612df0565b611498565b348015610a4e57600080fd5b506104f6610a5d366004612f39565b6114e9565b348015610a6e57600080fd5b50610457603d5481565b348015610a8457600080fd5b5061045760185481565b348015610a9a57600080fd5b50610457600b5481565b348015610ab057600080fd5b50610457610abf366004612ecf565b61154c565b348015610ad057600080fd5b5061045761158d565b348015610ae557600080fd5b50610457610af4366004612f0b565b6001600160a01b039182166000908152600e6020908152604080832093909416825291909152205490565b348015610b2b57600080fd5b506104f6610b3a366004612f7c565b611600565b348015610b4b57600080fd5b506104f6610b5a366004612ecf565b61165b565b348015610b6b57600080fd5b506031546104c690610100900460ff1681565b348015610b8a57600080fd5b506104f6610b99366004612ecf565b6116a1565b348015610baa57600080fd5b506104f6610bb9366004612df0565b6116cf565b348015610bca57600080fd5b506104f661171a565b348015610bdf57600080fd5b50610457610bee366004612d46565b611773565b348015610bff57600080fd5b506104f6610c0e366004612df0565b6117d0565b348015610c1f57600080fd5b506104f6611866565b348015610c3457600080fd5b506104f6610c43366004612e9a565b6118c9565b348015610c5457600080fd5b506104f6610c63366004612f39565b6119cd565b348015610c7457600080fd5b506104f6610c83366004612e9a565b611a2a565b348015610c9457600080fd5b50603b54610931906001600160a01b031681565b348015610cb457600080fd5b5061045760195481565b348015610cca57600080fd5b506104c6610cd9366004612df0565b60136020526000908152604090205460ff1681565b348015610cfa57600080fd5b506104c6610d09366004612df0565b611a7a565b348015610d1a57600080fd5b50603e546104c69060ff1681565b336000818152600e602090815260408083206001600160a01b038716808552925280832085905551919290917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92590610d839086815260200190565b60405180910390a35060015b92915050565b6000546001600160a01b03163314610dc85760405162461bcd60e51b8152600401610dbf90612f98565b60405180910390fd5b603e805460ff191682151517905543603d5550565b50565b600082610dec8361154c565b119392505050565b610dfd33611a7a565b610e195760405162461bcd60e51b8152600401610dbf90612fb8565b602b91909155602c55565b610e2d33611a7a565b610e495760405162461bcd60e51b8152600401610dbf90612fb8565b6002610e558385612ff3565b11158015610e6257508183115b610e6b57600080fd5b602d92909255602e55603055565b6001600160a01b0383166000908152600e6020908152604080832033845290915281205460001914610f26576040805180820182526016815275496e73756666696369656e7420416c6c6f77616e636560501b6020808301919091526001600160a01b0387166000908152600e82528381203382529091529190912054610f01918490611a98565b6001600160a01b0385166000908152600e602090815260408083203384529091529020555b610f31848484611ad2565b90505b9392505050565b60375460405163051fa63360e31b81526001600160a01b03838116600483015260009216906328fd319890602401602060405180830381865afa158015610f86573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d8f9190613015565b6005546001600160a01b03166000908152600d6020526040812054610ff7906004546001600160a01b03166000908152600d6020526040902054610ff19060095490611f20565b90611f20565b905090565b61100533611a7a565b6110215760405162461bcd60e51b8152600401610dbf90612fb8565b6037546040516316a4744b60e11b815260048101849052602481018390526001600160a01b0390911690632d48e896906044015b600060405180830381600087803b15801561106f57600080fd5b505af1158015611083573d6000803e3d6000fd5b505050505050565b61109433611a7a565b6110b05760405162461bcd60e51b8152600401610dbf90612fb8565b6039805461ffff191692151561ff0019169290921761010060ff9290921691909102179055565b6110e033611a7a565b6110fc5760405162461bcd60e51b8152600401610dbf90612fb8565b6031805460329590955560006033556034939093556035919091554360365561ffff1990921692151561ff0019169290921761010091151591909102179055565b61114633611a7a565b6111625760405162461bcd60e51b8152600401610dbf90612fb8565b6001600160a01b03919091166000908152601360205260409020805460ff1916911515919091179055565b6000426111a7602854602754611f6290919063ffffffff16565b11156111b35750600190565b50600090565b6111c233611a7a565b6111de5760405162461bcd60e51b8152600401610dbf90612fb8565b6000602755565b6111ee33611a7a565b61120a5760405162461bcd60e51b8152600401610dbf90612fb8565b6001600160a01b03919091166000908152601160205260409020805460ff1916911515919091179055565b6000610d8f82600019610d28565b61124c33611a7a565b6112685760405162461bcd60e51b8152600401610dbf90612fb8565b6001600160a01b03919091166000908152600f60205260409020805460ff1916911515919091179055565b61129c33611a7a565b6112b85760405162461bcd60e51b8152600401610dbf90612fb8565b6112d96127106112d383600954611fc190919063ffffffff16565b90612043565b600a5550565b6112e833611a7a565b6113045760405162461bcd60e51b8152600401610dbf90612fb8565b600061131883670de0b6b3a764000061302e565b90506000611327826064612043565b6004549091506113419082906001600160a01b0316612085565b82156113825742602f556030546040519081527f39d2389ec5c1fa77b2c0d374bc61b6d7bd97ccba280fcdeb4e9c7644898d7c3a9060200160405180910390a15b50505050565b6000546001600160a01b031633146113b25760405162461bcd60e51b8152600401610dbf90612f98565b6113cd6127106112d383600954611fc190919063ffffffff16565b600c5550565b6113dc33611a7a565b6113f85760405162461bcd60e51b8152600401610dbf90612fb8565b620b71b0811061140757600080fd5b603855565b61141533611a7a565b6114315760405162461bcd60e51b8152600401610dbf90612fb8565b600780546001600160a01b039384166001600160a01b03199182161790915560088054929093169116179055565b6000610f34338484611ad2565b61147533611a7a565b6114915760405162461bcd60e51b8152600401610dbf90612fb8565b6000602f55565b6000546001600160a01b031633146114c25760405162461bcd60e51b8152600401610dbf90612f98565b6001600160a01b03166000908152600160208190526040909120805460ff19169091179055565b6114f233611a7a565b61150e5760405162461bcd60e51b8152600401610dbf90612fb8565b601a869055601b859055601c849055601d839055601e82905561153f82611539858188818c8c611f62565b90611f62565b601f556026555050505050565b6000610d8f611559610faa565b603c546001600160a01b03166000908152600d60205260409020546112d390611586906002905b90611fc1565b8590611fc1565b6000806115ab42610ff1603054602f54611f6290919063ffffffff16565b905060006115d2602554610ff1602e546112d3602d54602554611fc190919063ffffffff16565b90506115f96115f06030546112d38585611fc190919063ffffffff16565b60255490611f62565b9250505090565b61160933611a7a565b6116255760405162461bcd60e51b8152600401610dbf90612fb8565b603e805461ff001916610100841515021790556009546127109061164a90839061302e565b6116549190612ff3565b602a555050565b61166433611a7a565b6116805760405162461bcd60e51b8152600401610dbf90612fb8565b61169b6127106112d383600954611fc190919063ffffffff16565b600b5550565b6116aa33611a7a565b6116c65760405162461bcd60e51b8152600401610dbf90612fb8565b42602755602855565b6000546001600160a01b031633146116f95760405162461bcd60e51b8152600401610dbf90612f98565b6001600160a01b03166000908152600160205260409020805460ff19169055565b603754604051630afbf02f60e11b81523360048201526001600160a01b03909116906315f7e05e90602401600060405180830381600087803b15801561175f57600080fd5b505af1158015611382573d6000803e3d6000fd5b600043602954603d54611786919061304d565b1061179957602654610d8f906001611f20565b8180156117bb5750426117b9603054602f54611f6290919063ffffffff16565b115b156117c857610d8f61158d565b505060255490565b6000546001600160a01b031633146117fa5760405162461bcd60e51b8152600401610dbf90612f98565b600080546001600160a01b0319166001600160a01b038316908117825580825260016020818152604093849020805460ff191690921790915591519081527f04dba622d284ed0014ee4b9a6a68386be1a4c08a4913ae272de89199cc686163910160405180910390a150565b61186f33611a7a565b61188b5760405162461bcd60e51b8152600401610dbf90612fb8565b60085460405147916001600160a01b03169082156108fc029083906000818181858888f193505050501580156118c5573d6000803e3d6000fd5b5050565b6118d233611a7a565b6118ee5760405162461bcd60e51b8152600401610dbf90612fb8565b6001600160a01b03821630148015906119155750603c546001600160a01b03838116911614155b61191e57600080fd5b6001600160a01b0382166000908152601260205260409020805460ff1916821580159190911790915561198457603754604051630a5b654b60e11b81526001600160a01b03848116600483015260006024830152909116906314b6ca9690604401611055565b6037546001600160a01b038381166000818152600d602052604090819020549051630a5b654b60e11b8152600481019290925260248201529116906314b6ca9690604401611055565b6119d633611a7a565b6119f25760405162461bcd60e51b8152600401610dbf90612fb8565b60148690556015859055601684905560178390556018829055611a1d82611539858188818c8c611f62565b6019556026555050505050565b611a3333611a7a565b611a4f5760405162461bcd60e51b8152600401610dbf90612fb8565b6001600160a01b03919091166000908152601060205260409020805460ff1916911515919091179055565b6001600160a01b031660009081526001602052604090205460ff1690565b60008184841115611abc5760405162461bcd60e51b8152600401610dbf9190612c9b565b506000611ac98486613065565b95945050505050565b603e5460009062010000900460ff1615611af857611af1848484612194565b9050610f34565b6001600160a01b03841660009081526001602052604090205460ff16158015611b3a57506001600160a01b03831660009081526001602052604090205460ff16155b15611b9157603e5460ff16611b915760405162461bcd60e51b815260206004820152601760248201527f54726164696e67206e6f7420656e61626c6564207965740000000000000000006044820152606401610dbf565b6001600160a01b03831660009081526013602052604090205460ff16158015611bd357506001600160a01b03841660009081526013602052604090205460ff16155b611c185760405162461bcd60e51b81526020600482015260166024820152751059191c995cdcc81a5cc8189b1858dadb1a5cdd195960521b6044820152606401610dbf565b603c546001600160a01b03848116911614611c328161227a565b611c3d8585856122ce565b611c478585612440565b611c5385848684612522565b6000611c5d61118d565b9050611c6761265a565b15611c7457611c746126b4565b6040805180820182526014815273496e73756666696369656e742042616c616e636560601b6020808301919091526001600160a01b0389166000908152600d9091529190912054611cc6918690611a98565b6001600160a01b0387166000908152600d6020908152604080832093909355600f90529081205460ff1615611cfb5784611d07565b611d0787868585612b6d565b6001600160a01b0387166000908152600d6020526040902054909150611d2d9082611f62565b6001600160a01b038088166000908152600d6020908152604080832094909455918a1681526012909152205460ff16611dd1576037546001600160a01b038881166000818152600d602052604090819020549051630a5b654b60e11b8152600481019290925260248201529116906314b6ca9690604401600060405180830381600087803b158015611dbe57600080fd5b505af1925050508015611dcf575060015b505b6001600160a01b03861660009081526012602052604090205460ff16611e62576037546001600160a01b038781166000818152600d602052604090819020549051630a5b654b60e11b8152600481019290925260248201529116906314b6ca9690604401600060405180830381600087803b158015611e4f57600080fd5b505af1925050508015611e60575060015b505b6037546038546040516001624d3b8760e01b031981526001600160a01b039092169163ffb2c47991611e9a9160040190815260200190565b600060405180830381600087803b158015611eb457600080fd5b505af1925050508015611ec5575060015b50856001600160a01b0316876001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051611f0b91815260200190565b60405180910390a35060019695505050505050565b6000610f3483836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250611a98565b600080611f6f838561304d565b905083811015610f345760405162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f7700000000006044820152606401610dbf565b600082600003611fd357506000610d8f565b6000611fdf838561302e565b905082611fec8583612ff3565b14610f345760405162461bcd60e51b815260206004820152602160248201527f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f6044820152607760f81b6064820152608401610dbf565b6000610f3483836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250612c6d565b603e805462ff0000191662010000179055604080516002808252606082018352600092602083019080368337505060035482519293506001600160a01b0316918391506000906120d7576120d761307c565b60200260200101906001600160a01b031690816001600160a01b031681525050308160018151811061210b5761210b61307c565b6001600160a01b039283166020918202929092010152603b5460405163b6f9de9560e01b815291169063b6f9de95908590612151906000908690889042906004016130d6565b6000604051808303818588803b15801561216a57600080fd5b505af115801561217e573d6000803e3d6000fd5b5050603e805462ff000019169055505050505050565b6040805180820182526014815273496e73756666696369656e742042616c616e636560601b6020808301919091526001600160a01b0386166000908152600d909152918220546121e5918490611a98565b6001600160a01b038086166000908152600d602052604080822093909355908516815220546122149083611f62565b6001600160a01b038085166000818152600d602052604090819020939093559151908616907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef906122689086815260200190565b60405180910390a35060019392505050565b80156122a757601a54602055601b54602155601c54602255601d54602355601e54602455601f5460255550565b60145460205560155460215560165460225560175460235560185460245560195460255550565b6001600160a01b03831660009081526001602052604090205460ff1615801561230557506000546001600160a01b03838116911614155b801561231a57506001600160a01b0382163014155b801561233457506004546001600160a01b03838116911614155b801561234e5750603c546001600160a01b03838116911614155b801561236857506008546001600160a01b03838116911614155b801561238257506007546001600160a01b03838116911614155b801561239c57506006546001600160a01b03838116911614155b1561243b576001600160a01b0382166000908152600d6020526040902054600c546123c7838361304d565b11156113825760405162461bcd60e51b815260206004820152603e60248201527f546f74616c20486f6c64696e672069732063757272656e746c79206c696d697460448201527f65642c20796f752063616e206e6f74206275792074686174206d7563682e00006064820152608401610dbf565b505050565b603c546001600160a01b03838116911614801561245f575060395460ff165b801561248457506001600160a01b03811660009081526011602052604090205460ff16155b156118c5576001600160a01b0381166000908152603a602052604090205442116124f05760405162461bcd60e51b815260206004820152601c60248201527f506c656173652077616974206265747765656e2074776f2062757973000000006044820152606401610dbf565b60395461250590610100900460ff164261304d565b6001600160a01b0382166000908152603a60205260409020555050565b6000546001600160a01b038381169116146113825780156125ce57600b548311158061256657506001600160a01b03841660009081526010602052604090205460ff165b8061258957506001600160a01b03821660009081526010602052604090205460ff165b6125c95760405162461bcd60e51b8152602060048201526011602482015270151608131a5b5a5d08115e18d959591959607a1b6044820152606401610dbf565b611382565b600a54831115806125f757506001600160a01b03841660009081526010602052604090205460ff165b8061261a57506001600160a01b03821660009081526010602052604090205460ff165b6113825760405162461bcd60e51b8152602060048201526011602482015270151608131a5b5a5d08115e18d959591959607a1b6044820152606401610dbf565b603c546000906001600160a01b031633148015906126815750603e5462010000900460ff16155b80156126945750603e54610100900460ff165b8015610ff7575050602a54306000908152600d6020526040902054101590565b603e805462ff0000191662010000179055602b54602c546000916126d791610de0565b6126e3576020546126e6565b60005b9050600061270a60026112d36025546112d386602a54611fc190919063ffffffff16565b9050600061272382602a54611f2090919063ffffffff16565b6040805160028082526060820183529293506000929091602083019080368337019050509050308160008151811061275d5761275d61307c565b6001600160a01b03928316602091820292909201015260035482519116908290600190811061278e5761278e61307c565b6001600160a01b039283166020918202929092010152603b5460405163791ac94760e01b81524792919091169063791ac947906127d890869060009087903090429060040161310b565b600060405180830381600087803b1580156127f257600080fd5b505af1158015612806573d6000803e3d6000fd5b50505050600061281f8247611f2090919063ffffffff16565b9050600061283a612831886002612043565b60255490611f20565b9050600061284f60026112d38481878d611fc1565b9050600061286c836112d360225487611fc190919063ffffffff16565b90506000612889846112d360235488611fc190919063ffffffff16565b905060006128a6856112d360245489611fc190919063ffffffff16565b9050603760009054906101000a90046001600160a01b03166001600160a01b031663d0e30db0846040518263ffffffff1660e01b81526004016000604051808303818588803b1580156128f857600080fd5b505af19350505050801561290a575060015b506008546040516000916001600160a01b03169061753090859084818181858888f193505050503d806000811461295d576040519150601f19603f3d011682016040523d82523d6000602084013e612962565b606091505b50506006546040519192506000916001600160a01b039091169061753090859084818181858888f193505050503d80600081146129bb576040519150601f19603f3d011682016040523d82523d6000602084013e6129c0565b606091505b5050905081612a225760405162461bcd60e51b815260206004820152602860248201527f6d61726b6574696e672072656365697665722072656a656374656420455448206044820152673a3930b739b332b960c11b6064820152608401610dbf565b80612a7a5760405162461bcd60e51b815260206004820152602260248201527f6465762072656365697665722072656a656374656420455448207472616e736660448201526132b960f11b6064820152608401610dbf565b8b15612b5257603b5460075460405163f305d71960e01b8152306004820152602481018f905260006044820181905260648201526001600160a01b0391821660848201524260a482015291169063f305d71990889060c40160606040518083038185885af1158015612af0573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190612b159190613147565b505060408051888152602081018f90527f424db2872186fa7e7afa7a5e902ed3b49a2ef19c2f5431e672462495dd6b450692500160405180910390a15b5050603e805462ff0000191690555050505050505050505050565b6000808215612bc8578315612ba857612ba16026546112d360026112d360036115806025548c611fc190919063ffffffff16565b9050612be6565b612ba16026546112d360026112d36025548a611fc190919063ffffffff16565b612be36026546112d360255488611fc190919063ffffffff16565b90505b306000908152600d6020526040902054612c009082611f62565b306000818152600d6020526040908190209290925590516001600160a01b038816907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90612c519085815260200190565b60405180910390a3612c638582611f20565b9695505050505050565b60008183612c8e5760405162461bcd60e51b8152600401610dbf9190612c9b565b506000611ac98486612ff3565b600060208083528351808285015260005b81811015612cc857858101830151858201604001528201612cac565b81811115612cda576000604083870101525b50601f01601f1916929092016040019392505050565b6001600160a01b0381168114610ddd57600080fd5b60008060408385031215612d1857600080fd5b8235612d2381612cf0565b946020939093013593505050565b80358015158114612d4157600080fd5b919050565b600060208284031215612d5857600080fd5b610f3482612d31565b60008060408385031215612d7457600080fd5b50508035926020909101359150565b600080600060608486031215612d9857600080fd5b505081359360208301359350604090920135919050565b600080600060608486031215612dc457600080fd5b8335612dcf81612cf0565b92506020840135612ddf81612cf0565b929592945050506040919091013590565b600060208284031215612e0257600080fd5b8135610f3481612cf0565b60008060408385031215612e2057600080fd5b612e2983612d31565b9150602083013560ff81168114612e3f57600080fd5b809150509250929050565b600080600080600060a08688031215612e6257600080fd5b612e6b86612d31565b9450602086013593506040860135925060608601359150612e8e60808701612d31565b90509295509295909350565b60008060408385031215612ead57600080fd5b8235612eb881612cf0565b9150612ec660208401612d31565b90509250929050565b600060208284031215612ee157600080fd5b5035919050565b60008060408385031215612efb57600080fd5b82359150612ec660208401612d31565b60008060408385031215612f1e57600080fd5b8235612f2981612cf0565b91506020830135612e3f81612cf0565b60008060008060008060c08789031215612f5257600080fd5b505084359660208601359650604086013595606081013595506080810135945060a0013592509050565b60008060408385031215612f8f57600080fd5b612d2383612d31565b60208082526006908201526510a7aba722a960d11b604082015260600190565b6020808252600b908201526a085055551213d49256915160aa1b604082015260600190565b634e487b7160e01b600052601160045260246000fd5b60008261301057634e487b7160e01b600052601260045260246000fd5b500490565b60006020828403121561302757600080fd5b5051919050565b600081600019048311821515161561304857613048612fdd565b500290565b6000821982111561306057613060612fdd565b500190565b60008282101561307757613077612fdd565b500390565b634e487b7160e01b600052603260045260246000fd5b600081518084526020808501945080840160005b838110156130cb5781516001600160a01b0316875295820195908201906001016130a6565b509495945050505050565b8481526080602082015260006130ef6080830186613092565b6001600160a01b03949094166040830152506060015292915050565b85815284602082015260a06040820152600061312a60a0830186613092565b6001600160a01b0394909416606083015250608001529392505050565b60008060006060848603121561315c57600080fd5b835192506020840151915060408401519050925092509256fea2646970667358221220dad686fb5fe2971042814298b81e56927519f5455c9c2c3798974acebdead5c464736f6c634300080e0033

Deployed Bytecode Sourcemap

12503:24358:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14877:56;;;;;;;;;;;;;;;;;;;160:25:1;;;148:2;133:18;14877:56:0;;;;;;;;17649:80;;;;;;;;;;-1:-1:-1;17721:5:0;;;;;;;;;;;;-1:-1:-1;;;17721:5:0;;;;17649:80;;;;;;;:::i;18071:216::-;;;;;;;;;;-1:-1:-1;18071:216:0;;;;;:::i;:::-;;:::i;:::-;;;1419:14:1;;1412:22;1394:41;;1382:2;1367:18;18071:216:0;1254:187:1;25994:113:0;;;;;;;;;;-1:-1:-1;25994:113:0;;;;;:::i;:::-;;:::i;:::-;;14101:34;;;;;;;;;;;;;;;;14234:35;;;;;;;;;;;;;;;;36586:150;;;;;;;;;;-1:-1:-1;36586:150:0;;;;;:::i;:::-;;:::i;14401:28::-;;;;;;;;;;;;;;;;14359:35;;;;;;;;;;;;;;;;17379:88;;;;;;;;;;-1:-1:-1;17452:12:0;;17379:88;;34972:183;;;;;;;;;;-1:-1:-1;34972:183:0;;;;;:::i;:::-;;:::i;31346:342::-;;;;;;;;;;-1:-1:-1;31346:342:0;;;;;:::i;:::-;;:::i;18589:368::-;;;;;;;;;;-1:-1:-1;18589:368:0;;;;;:::i;:::-;;:::i;35814:146::-;;;;;;;;;;-1:-1:-1;35814:146:0;;;;;:::i;:::-;;:::i;36183:142::-;;;;;;;;;;;;;:::i;35434:183::-;;;;;;;;;;-1:-1:-1;35434:183:0;;;;;:::i;:::-;;:::i;26458:165::-;;;;;;;;;;-1:-1:-1;26458:165:0;;;;;:::i;:::-;;:::i;14020:32::-;;;;;;;;;;;;;;;;4103:103;;;;;;;;;;-1:-1:-1;4103:103:0;;;;;:::i;:::-;4158:4;4193:5;-1:-1:-1;;;;;4182:16:0;;;4193:5;;4182:16;;4103:103;30854:445;;;;;;;;;;-1:-1:-1;30854:445:0;;;;;:::i;:::-;;:::i;17473:80::-;;;;;;;;;;-1:-1:-1;13180:2:0;17473:80;;;4056:4:1;4044:17;;;4026:36;;4014:2;3999:18;17473:80:0;3884:184:1;13310:59:0;;;;;;;;;;;;;;;;14276:33;;;;;;;;;;;;;;;;15277:38;;;;;;;;;;-1:-1:-1;15277:38:0;;;;;;;;14059:35;;;;;;;;;;;;;;;;26672:125;;;;;;;;;;-1:-1:-1;26672:125:0;;;;;:::i;:::-;;:::i;22134:207::-;;;;;;;;;;;;;:::i;26320:83::-;;;;;;;;;;;;;:::i;33068:130::-;;;;;;;;;;-1:-1:-1;33068:130:0;;;;;:::i;:::-;;:::i;14436:31::-;;;;;;;;;;;;;;;;18295:122;;;;;;;;;;-1:-1:-1;18295:122:0;;;;;:::i;:::-;;:::i;15659:38::-;;;;;;;;;;-1:-1:-1;15659:38:0;;;;;;;;32750:120;;;;;;;;;;-1:-1:-1;32750:120:0;;;;;:::i;:::-;;:::i;15956:30::-;;;;;;;;;;-1:-1:-1;15956:30:0;;;;;;;;;;;17819:105;;;;;;;;;;-1:-1:-1;17819:105:0;;;;;:::i;:::-;-1:-1:-1;;;;;17903:18:0;17885:7;17903:18;;;:9;:18;;;;;;;17819:105;15704:39;;;;;;;;;;-1:-1:-1;15704:39:0;;;;;;;;;;;13491:63;;;;;;;;;;;;;;;;31981:158;;;;;;;;;;-1:-1:-1;31981:158:0;;;;;:::i;:::-;;:::i;29275:442::-;;;;;;;;;;-1:-1:-1;29275:442:0;;;;;:::i;:::-;;:::i;19036:156::-;;;;;;;;;;-1:-1:-1;19036:156:0;;;;;:::i;:::-;;:::i;13978:34::-;;;;;;;;;;;;;;;;17735:78;;;;;;;;;;-1:-1:-1;17787:7:0;17805:5;-1:-1:-1;;;;;17805:5:0;17735:78;;;-1:-1:-1;;;;;4995:32:1;;;4977:51;;4965:2;4950:18;17735:78:0;4831:203:1;17559:84:0;;;;;;;;;;-1:-1:-1;17633:7:0;;;;;;;;;;;;-1:-1:-1;;;17633:7:0;;;;17559:84;;36001:136;;;;;;;;;;-1:-1:-1;36001:136:0;;;;;:::i;:::-;;:::i;34489:228::-;;;;;;;;;;-1:-1:-1;34489:228:0;;;;;:::i;:::-;;:::i;15861:19::-;;;;;;;;;;-1:-1:-1;15861:19:0;;;;-1:-1:-1;;;;;15861:19:0;;;18425:156;;;;;;;;;;-1:-1:-1;18425:156:0;;;;;:::i;:::-;;:::i;14316:36::-;;;;;;;;;;;;;;;;29765:105;;;;;;;;;;;;;:::i;3761:102::-;;;;;;;;;;-1:-1:-1;3761:102:0;;;;;:::i;:::-;;:::i;33837:594::-;;;;;;;;;;-1:-1:-1;33837:594:0;;;;;:::i;:::-;;:::i;15887:25::-;;;;;;;;;;;;;;;;14142:28;;;;;;;;;;;;;;;;13405:60;;;;;;;;;;;;;;;;36367:167;;;;;;;;;;-1:-1:-1;36367:167:0;;;;;:::i;:::-;;:::i;24435:391::-;;;;;;;;;;;;;:::i;17930:133::-;;;;;;;;;;-1:-1:-1;17930:133:0;;;;;:::i;:::-;-1:-1:-1;;;;;18032:19:0;;;18014:7;18032:19;;;:11;:19;;;;;;;;:28;;;;;;;;;;;;;17930:133;34755:180;;;;;;;;;;-1:-1:-1;34755:180:0;;;;;:::i;:::-;;:::i;32172:162::-;;;;;;;;;;-1:-1:-1;32172:162:0;;;;;:::i;:::-;;:::i;15322:41::-;;;;;;;;;;-1:-1:-1;15322:41:0;;;;;;;;;;;26136:145;;;;;;;;;;-1:-1:-1;26136:145:0;;;;;:::i;:::-;;:::i;3938:105::-;;;;;;;;;;-1:-1:-1;3938:105:0;;;;;:::i;:::-;;:::i;35669:90::-;;;;;;;;;;;;;:::i;24050:315::-;;;;;;;;;;-1:-1:-1;24050:315:0;;;;;:::i;:::-;;:::i;4510:189::-;;;;;;;;;;-1:-1:-1;4510:189:0;;;;;:::i;:::-;;:::i;35199:180::-;;;;;;;;;;;;;:::i;32371:347::-;;;;;;;;;;-1:-1:-1;32371:347:0;;;;;:::i;:::-;;:::i;33231:572::-;;;;;;;;;;-1:-1:-1;33231:572:0;;;;;:::i;:::-;;:::i;32905:128::-;;;;;;;;;;-1:-1:-1;32905:128:0;;;;;:::i;:::-;;:::i;15830:24::-;;;;;;;;;;-1:-1:-1;15830:24:0;;;;-1:-1:-1;;;;;15830:24:0;;;14177:30;;;;;;;;;;;;;;;;13902:46;;;;;;;;;;-1:-1:-1;13902:46:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;4276:115;;;;;;;;;;-1:-1:-1;4276:115:0;;;;;:::i;:::-;;:::i;15919:30::-;;;;;;;;;;-1:-1:-1;15919:30:0;;;;;;;;18071:216;18175:10;18146:4;18163:23;;;:11;:23;;;;;;;;-1:-1:-1;;;;;18163:32:0;;;;;;;;;;:41;;;18220:37;18146:4;;18163:32;;18220:37;;;;18198:6;160:25:1;;148:2;133:18;;14:177;18220:37:0;;;;;;;;-1:-1:-1;18275:4:0;18071:216;;;;;:::o;25994:113::-;4158:4;4193:5;-1:-1:-1;;;;;4193:5:0;3485:10;4182:16;3469:38;;;;-1:-1:-1;;;3469:38:0;;;;;;;:::i;:::-;;;;;;;;;26059:11:::1;:21:::0;;-1:-1:-1;;26059:21:0::1;::::0;::::1;;;::::0;;31929:12;31916:10;:25;25994:113;:::o;26091:8::-:1;25994:113:::0;:::o;36586:150::-;36666:4;36722:6;36690:29;36710:8;36690:19;:29::i;:::-;:38;;36586:150;-1:-1:-1;;;36586:150:0:o;34972:183::-;3646:24;3659:10;3646:12;:24::i;:::-;3638:48;;;;-1:-1:-1;;;3638:48:0;;;;;;;:::i;:::-;35070:15:::1;:25:::0;;;;35106:26:::1;:41:::0;34972:183::o;31346:342::-;3646:24;3659:10;3646:12;:24::i;:::-;3638:48;;;;-1:-1:-1;;;3638:48:0;;;;;;;:::i;:::-;31506:1:::1;31479:23;31491:11:::0;31479:9;:23:::1;:::i;:::-;:28;;:55;;;;;31523:11;31511:9;:23;31479:55;31471:64;;;::::0;::::1;;31546:26;:38:::0;;;;31595:28:::1;:42:::0;31648:23:::1;:32:::0;31346:342::o;18589:368::-;-1:-1:-1;;;;;18709:19:0;;18689:4;18709:19;;;:11;:19;;;;;;;;18729:10;18709:31;;;;;;;;-1:-1:-1;;18709:52:0;18706:186;;18811:69;;;;;;;;;;;-1:-1:-1;;;18811:69:0;;;;;;;;-1:-1:-1;;;;;18811:19:0;;-1:-1:-1;18811:19:0;;;:11;:19;;;;;18831:10;18811:31;;;;;;;;;;:69;;18847:6;;18811:35;:69::i;:::-;-1:-1:-1;;;;;18777:19:0;;;;;;:11;:19;;;;;;;;18797:10;18777:31;;;;;;;:103;18706:186;18909:40;18923:6;18931:9;18942:6;18909:13;:40::i;:::-;18902:47;;18589:368;;;;;;:::o;35814:146::-;35910:11;;:42;;-1:-1:-1;;;35910:42:0;;-1:-1:-1;;;;;4995:32:1;;;35910:42:0;;;4977:51:1;35883:7:0;;35910:11;;:29;;4950:18:1;;35910:42:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;36183:142::-;36311:4;;-1:-1:-1;;;;;36311:4:0;36236:7;17903:18;;;:9;:18;;;;;;36263:54;;36290:4;;-1:-1:-1;;;;;36290:4:0;17885:7;17903:18;;;:9;:18;;;;;;36263:33;;:12;;;:16;:33::i;:::-;:37;;:54::i;:::-;36256:61;;36183:142;:::o;35434:183::-;3646:24;3659:10;3646:12;:24::i;:::-;3638:48;;;;-1:-1:-1;;;3638:48:0;;;;;;;:::i;:::-;35544:11:::1;::::0;:65:::1;::::0;-1:-1:-1;;;35544:65:0;;::::1;::::0;::::1;8090:25:1::0;;;8131:18;;;8124:34;;;-1:-1:-1;;;;;35544:11:0;;::::1;::::0;:35:::1;::::0;8063:18:1;;35544:65:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;35434:183:::0;;:::o;26458:165::-;3646:24;3659:10;3646:12;:24::i;:::-;3638:48;;;;-1:-1:-1;;;3638:48:0;;;;;;;:::i;:::-;26543:18:::1;:28:::0;;-1:-1:-1;;26582:33:0;26543:28;::::1;;-1:-1:-1::0;;26582:33:0;;;;;26543:28:::1;;26582:33:::0;;;::::1;::::0;;;::::1;;::::0;;26458:165::o;30854:445::-;3646:24;3659:10;3646:12;:24::i;:::-;3638:48;;;;-1:-1:-1;;;3638:48:0;;;;;;;:::i;:::-;31009:18:::1;:29:::0;;31049:14:::1;:21:::0;;;;-1:-1:-1;31081:22:0::1;:26:::0;31118:17:::1;:27:::0;;;;31156:22:::1;:32:::0;;;;31222:12:::1;31199:20;:35:::0;-1:-1:-1;;31245:46:0;;;31009:29;::::1;;-1:-1:-1::0;;31245:46:0;;;;;31009:29:::1;31245:46:::0;::::1;;::::0;;;::::1;;::::0;;30854:445::o;26672:125::-;3646:24;3659:10;3646:12;:24::i;:::-;3638:48;;;;-1:-1:-1;;;3638:48:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;26757:23:0;;;::::1;;::::0;;;:13:::1;:23;::::0;;;;:32;;-1:-1:-1;;26757:32:0::1;::::0;::::1;;::::0;;;::::1;::::0;;26672:125::o;22134:207::-;22178:4;22235:15;22197:35;22218:13;;22197:16;;:20;;:35;;;;:::i;:::-;:53;22194:140;;;-1:-1:-1;22273:4:0;;22134:207::o;22194:140::-;-1:-1:-1;22317:5:0;;22134:207::o;26320:83::-;3646:24;3659:10;3646:12;:24::i;:::-;3638:48;;;;-1:-1:-1;;;3638:48:0;;;;;;;:::i;:::-;26394:1:::1;26375:16;:20:::0;26320:83::o;33068:130::-;3646:24;3659:10;3646:12;:24::i;:::-;3638:48;;;;-1:-1:-1;;;3638:48:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;33157:24:0;;;::::1;;::::0;;;:16:::1;:24;::::0;;;;:33;;-1:-1:-1;;33157:33:0::1;::::0;::::1;;::::0;;;::::1;::::0;;33068:130::o;18295:122::-;18350:4;18374:35;18382:7;-1:-1:-1;;18374:7:0;:35::i;32750:120::-;3646:24;3659:10;3646:12;:24::i;:::-;3638:48;;;;-1:-1:-1;;;3638:48:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;32834:19:0;;;::::1;;::::0;;;:11:::1;:19;::::0;;;;:28;;-1:-1:-1;;32834:28:0::1;::::0;::::1;;::::0;;;::::1;::::0;;32750:120::o;31981:158::-;3646:24;3659:10;3646:12;:24::i;:::-;3638:48;;;;-1:-1:-1;;;3638:48:0;;;;;;;:::i;:::-;32087:44:::1;32125:5;32087:33;32104:15;32087:12;;:16;;:33;;;;:::i;:::-;:37:::0;::::1;:44::i;:::-;32069:15;:62:::0;-1:-1:-1;31981:158:0:o;29275:442::-;3646:24;3659:10;3646:12;:24::i;:::-;3638:48;;;;-1:-1:-1;;;3638:48:0;;;;;;;:::i;:::-;29383:26:::1;29412:19;:6:::0;29422:8:::1;29412:19;:::i;:::-;29383:48:::0;-1:-1:-1;29442:19:0::1;29464:27;29383:48:::0;29487:3:::1;29464:22;:27::i;:::-;29525:4;::::0;29442:49;;-1:-1:-1;29502:28:0::1;::::0;29442:49;;-1:-1:-1;;;;;29525:4:0::1;29502:9;:28::i;:::-;29544:24;29541:169;;;29615:15;29584:28;:46:::0;29674:23:::1;::::0;29650:48:::1;::::0;160:25:1;;;29650:48:0::1;::::0;148:2:1;133:18;29650:48:0::1;;;;;;;29541:169;29372:345;;29275:442:::0;;:::o;19036:156::-;4158:4;4193:5;-1:-1:-1;;;;;4193:5:0;3485:10;4182:16;3469:38;;;;-1:-1:-1;;;3469:38:0;;;;;;;:::i;:::-;19139:43:::1;19176:5;19139:32;19156:14;19139:12;;:16;;:32;;;;:::i;:43::-;19121:15;:61:::0;-1:-1:-1;19036:156:0:o;36001:136::-;3646:24;3659:10;3646:12;:24::i;:::-;3638:48;;;;-1:-1:-1;;;3638:48:0;;;;;;;:::i;:::-;36091:6:::1;36085:3;:12;36077:21;;;::::0;::::1;;36109:14;:20:::0;36001:136::o;34489:228::-;3646:24;3659:10;3646:12;:24::i;:::-;3638:48;;;;-1:-1:-1;;;3638:48:0;;;;;;;:::i;:::-;34608:21:::1;:46:::0;;-1:-1:-1;;;;;34608:46:0;;::::1;-1:-1:-1::0;;;;;;34608:46:0;;::::1;;::::0;;;34665:20:::1;:44:::0;;;;;::::1;::::0;::::1;;::::0;;34489:228::o;18425:156::-;18505:4;18529:44;18543:10;18555:9;18566:6;18529:13;:44::i;29765:105::-;3646:24;3659:10;3646:12;:24::i;:::-;3638:48;;;;-1:-1:-1;;;3638:48:0;;;;;;;:::i;:::-;29861:1:::1;29830:28;:32:::0;29765:105::o;3761:102::-;4158:4;4193:5;-1:-1:-1;;;;;4193:5:0;3485:10;4182:16;3469:38;;;;-1:-1:-1;;;3469:38:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;3825:23:0::1;;::::0;;;3851:4:::1;3825:23;::::0;;;;;;;:30;;-1:-1:-1;;3825:30:0::1;::::0;;::::1;::::0;;3761:102::o;33837:594::-;3646:24;3659:10;3646:12;:24::i;:::-;3638:48;;;;-1:-1:-1;;;3638:48:0;;;;;;;:::i;:::-;34042:16:::1;:36:::0;;;34089:14:::1;:32:::0;;;34132:17:::1;:38:::0;;;34181:16:::1;:36:::0;;;34228:10:::1;:24:::0;;;34278:102:::1;34241:11:::0;34278:85:::1;34200:17:::0;34278:85;34152:18;34278:85;34061:17;34106:15;34278:21:::1;:38::i;:::-;:42:::0;::::1;:62::i;:102::-;34263:12;:117:::0;34391:14:::1;:32:::0;-1:-1:-1;;;;;33837:594:0:o;36367:167::-;36435:7;36462:64;36503:22;:20;:22::i;:::-;36485:4;;-1:-1:-1;;;;;36485:4:0;17885:7;17903:18;;;:9;:18;;;;;;36462:36;;36475:22;;36495:1;;36475:15;:19;;:22::i;:::-;36462:8;;:12;:36::i;24435:391::-;24484:7;24504:21;24528:78;24590:15;24528:57;24561:23;;24528:28;;:32;;:57;;;;:::i;:78::-;24504:102;;24617:19;24639:88;24718:8;;24639:74;24684:28;;24639:40;24652:26;;24639:8;;:12;;:40;;;;:::i;:88::-;24617:110;;24745:73;24758:59;24793:23;;24758:30;24774:13;24758:11;:15;;:30;;;;:::i;:59::-;24745:8;;;:12;:73::i;:::-;24738:80;;;;24435:391;:::o;34755:180::-;3646:24;3659:10;3646:12;:24::i;:::-;3638:48;;;;-1:-1:-1;;;3638:48:0;;;;;;;:::i;:::-;34847:11:::1;:22:::0;;-1:-1:-1;;34847:22:0::1;;::::0;::::1;;;;::::0;;34896:12:::1;::::0;34921:5:::1;::::0;34896:22:::1;::::0;34911:7;;34896:22:::1;:::i;:::-;:30;;;;:::i;:::-;34880:13;:46:::0;-1:-1:-1;;34755:180:0:o;32172:162::-;3646:24;3659:10;3646:12;:24::i;:::-;3638:48;;;;-1:-1:-1;;;3638:48:0;;;;;;;:::i;:::-;32281:45:::1;32320:5;32281:34;32298:16;32281:12;;:16;;:34;;;;:::i;:45::-;32262:16;:64:::0;-1:-1:-1;32172:162:0:o;26136:145::-;3646:24;3659:10;3646:12;:24::i;:::-;3638:48;;;;-1:-1:-1;;;3638:48:0;;;;;;;:::i;:::-;26223:15:::1;26204:16;:34:::0;26249:13:::1;:24:::0;26136:145::o;3938:105::-;4158:4;4193:5;-1:-1:-1;;;;;4193:5:0;3485:10;4182:16;3469:38;;;;-1:-1:-1;;;3469:38:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;4004:23:0::1;4030:5;4004:23:::0;;;:14:::1;:23;::::0;;;;:31;;-1:-1:-1;;4004:31:0::1;::::0;;3938:105::o;35669:90::-;35714:11;;:37;;-1:-1:-1;;;35714:37:0;;35740:10;35714:37;;;4977:51:1;-1:-1:-1;;;;;35714:11:0;;;;:25;;4950:18:1;;35714:37:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;24050:315;24106:7;24156:12;24142:10;;24129;;:23;;;;:::i;:::-;:39;24126:76;;24178:14;;:21;;24197:1;24178:18;:21::i;24126:76::-;24215:7;:86;;;;;24286:15;24226:57;24259:23;;24226:28;;:32;;:57;;;;:::i;:::-;:75;24215:86;24212:120;;;24311:18;:16;:18::i;24212:120::-;-1:-1:-1;;24349:8:0;;;24050:315::o;4510:189::-;4158:4;4193:5;-1:-1:-1;;;;;4193:5:0;3485:10;4182:16;3469:38;;;;-1:-1:-1;;;3469:38:0;;;;;;;:::i;:::-;4590:5:::1;:15:::0;;-1:-1:-1;;;;;;4590:15:0::1;-1:-1:-1::0;;;;;4590:15:0;::::1;::::0;;::::1;::::0;;4616:23;;;-1:-1:-1;4616:23:0::1;::::0;;;;;;;;:30;;-1:-1:-1;;4616:30:0::1;::::0;;::::1;::::0;;;4662:29;;4977:51:1;;;4662:29:0::1;::::0;4950:18:1;4662:29:0::1;;;;;;;4510:189:::0;:::o;35199:180::-;3646:24;3659:10;3646:12;:24::i;:::-;3638:48;;;;-1:-1:-1;;;3638:48:0;;;;;;;:::i;:::-;35321:20:::1;::::0;35313:58:::1;::::0;35281:21:::1;::::0;-1:-1:-1;;;;;35321:20:0::1;::::0;35313:58;::::1;;;::::0;35281:21;;35252:26:::1;35313:58:::0;35252:26;35313:58;35281:21;35321:20;35313:58;::::1;;;;;;;;;;;;;::::0;::::1;;;;;;35241:138;35199:180::o:0;32371:347::-;3646:24;3659:10;3646:12;:24::i;:::-;3638:48;;;;-1:-1:-1;;;3638:48:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;32468:23:0;::::1;32486:4;32468:23;::::0;::::1;::::0;:41:::1;;-1:-1:-1::0;32505:4:0::1;::::0;-1:-1:-1;;;;;32495:14:0;;::::1;32505:4:::0;::::1;32495:14;;32468:41;32460:50;;;::::0;::::1;;-1:-1:-1::0;;;;;32521:24:0;::::1;;::::0;;;:16:::1;:24;::::0;;;;:33;;-1:-1:-1;;32521:33:0::1;::::0;::::1;::::0;::::1;::::0;;;::::1;::::0;;;32565:146:::1;;32590:11;::::0;:31:::1;::::0;-1:-1:-1;;;32590:31:0;;-1:-1:-1;;;;;8891:32:1;;;32590:31:0::1;::::0;::::1;8873:51:1::0;32590:11:0::1;8940:18:1::0;;;8933:34;32590:11:0;;::::1;::::0;:20:::1;::::0;8846:18:1;;32590:31:0::1;8691:282:1::0;32565:146:0::1;32652:11;::::0;-1:-1:-1;;;;;32681:17:0;;::::1;32652:11;32681:17:::0;;;:9:::1;:17;::::0;;;;;;;32652:47;;-1:-1:-1;;;32652:47:0;;::::1;::::0;::::1;8873:51:1::0;;;;8940:18;;;8933:34;32652:11:0;::::1;::::0;:20:::1;::::0;8846:18:1;;32652:47:0::1;8691:282:1::0;33231:572:0;3646:24;3659:10;3646:12;:24::i;:::-;3638:48;;;;-1:-1:-1;;;3638:48:0;;;;;;;:::i;:::-;33430:15:::1;:34:::0;;;33475:13:::1;:30:::0;;;33516:16:::1;:36:::0;;;33563:15:::1;:34:::0;;;33608:9:::1;:22:::0;;;33655:97:::1;33620:10:::0;33655:81:::1;33581:16:::0;33655:81;33535:17;33655:81;33448:16;33491:14;33655:20:::1;:36::i;:97::-;33641:11;:111:::0;33763:14:::1;:32:::0;-1:-1:-1;;;;;33231:572:0:o;32905:128::-;3646:24;3659:10;3646:12;:24::i;:::-;3638:48;;;;-1:-1:-1;;;3638:48:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;32993:23:0;;;::::1;;::::0;;;:15:::1;:23;::::0;;;;:32;;-1:-1:-1;;32993:32:0::1;::::0;::::1;;::::0;;;::::1;::::0;;32905:128::o;4276:115::-;-1:-1:-1;;;;;4360:23:0;4336:4;4360:23;;;:14;:23;;;;;;;;;4276:115::o;1163:192::-;1249:7;1285:12;1277:6;;;;1269:29;;;;-1:-1:-1;;;1269:29:0;;;;;;;;:::i;:::-;-1:-1:-1;1309:9:0;1321:5;1325:1;1321;:5;:::i;:::-;1309:17;1163:192;-1:-1:-1;;;;;1163:192:0:o;19231:1825::-;19343:6;;19323:4;;19343:6;;;;;19340:63;;;19359:41;19374:6;19382:9;19393:6;19359:14;:41::i;:::-;19352:48;;;;19340:63;-1:-1:-1;;;;;19459:22:0;;;;;;:14;:22;;;;;;;;19458:23;:53;;;;-1:-1:-1;;;;;;19486:25:0;;;;;;:14;:25;;;;;;;;19485:26;19458:53;19455:130;;;19535:11;;;;19527:46;;;;-1:-1:-1;;;19527:46:0;;9589:2:1;19527:46:0;;;9571:21:1;9628:2;9608:18;;;9601:30;9667:25;9647:18;;;9640:53;9710:18;;19527:46:0;9387:347:1;19527:46:0;-1:-1:-1;;;;;19650:24:0;;;;;;:13;:24;;;;;;;;19649:25;:51;;;;-1:-1:-1;;;;;;19679:21:0;;;;;;:13;:21;;;;;;;;19678:22;19649:51;19641:86;;;;-1:-1:-1;;;19641:86:0;;9941:2:1;19641:86:0;;;9923:21:1;9980:2;9960:18;;;9953:30;-1:-1:-1;;;9999:18:1;;;9992:52;10061:18;;19641:86:0;9739:346:1;19641:86:0;19806:4;;-1:-1:-1;;;;;19793:17:0;;;19806:4;;19793:17;19857:22;19793:17;19857:14;:22::i;:::-;19921:41;19936:6;19944:9;19955:6;19921:14;:41::i;:::-;20003:35;20020:6;20028:9;20003:16;:35::i;:::-;20076:47;20089:6;20097;20105:9;20116:6;20076:12;:47::i;:::-;20177:14;20194:13;:11;:13::i;:::-;20177:30;;20270:16;:14;:16::i;:::-;20267:35;;;20289:10;:8;:10::i;:::-;20361:53;;;;;;;;;;;-1:-1:-1;;;20361:53:0;;;;;;;;-1:-1:-1;;;;;20361:17:0;;-1:-1:-1;20361:17:0;;;:9;:17;;;;;;;;:53;;20383:6;;20361:21;:53::i;:::-;-1:-1:-1;;;;;20341:17:0;;;;;;:9;:17;;;;;;;;:73;;;;23965:11;:19;;;;;;;;23964:20;20452:75;;20521:6;20452:75;;;20476:42;20484:6;20492;20500;20508:9;20476:7;:42::i;:::-;-1:-1:-1;;;;;20561:20:0;;;;;;:9;:20;;;;;;20427:100;;-1:-1:-1;20561:40:0;;20427:100;20561:24;:40::i;:::-;-1:-1:-1;;;;;20538:20:0;;;;;;;:9;:20;;;;;;;;:63;;;;20647:24;;;;;:16;:24;;;;;;;20643:119;;20692:11;;-1:-1:-1;;;;;20721:17:0;;;20692:11;20721:17;;;:9;:17;;;;;;;;20692:47;;-1:-1:-1;;;20692:47:0;;;;;8873:51:1;;;;8940:18;;;8933:34;20692:11:0;;;:20;;8846:18:1;;20692:47:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;20688:63;;-1:-1:-1;;;;;20778:27:0;;;;;;:16;:27;;;;;;;;20774:129;;20826:11;;-1:-1:-1;;;;;20858:20:0;;;20826:11;20858:20;;;:9;:20;;;;;;;;20826:53;;-1:-1:-1;;;20826:53:0;;;;;8873:51:1;;;;8940:18;;;8933:34;20826:11:0;;;:20;;8846:18:1;;20826:53:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;20822:69;;20919:11;;20939:14;;20919:35;;-1:-1:-1;;;;;;20919:35:0;;-1:-1:-1;;;;;20919:11:0;;;;:19;;:35;;;;160:25:1;;;148:2;133:18;;14:177;20919:35:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;20915:51;21000:9;-1:-1:-1;;;;;20983:43:0;20992:6;-1:-1:-1;;;;;20983:43:0;;21011:14;20983:43;;;;160:25:1;;148:2;133:18;;14:177;20983:43:0;;;;;;;;-1:-1:-1;21044:4:0;;19231:1825;-1:-1:-1;;;;;;19231:1825:0:o;1021:136::-;1079:7;1106:43;1110:1;1113;1106:43;;;;;;;;;;;;;;;;;:3;:43::i;834:181::-;892:7;;924:5;928:1;924;:5;:::i;:::-;912:17;;953:1;948;:6;;940:46;;;;-1:-1:-1;;;940:46:0;;10292:2:1;940:46:0;;;10274:21:1;10331:2;10311:18;;;10304:30;10370:29;10350:18;;;10343:57;10417:18;;940:46:0;10090:351:1;1361:250:0;1419:7;1443:1;1448;1443:6;1439:47;;-1:-1:-1;1473:1:0;1466:8;;1439:47;1498:9;1510:5;1514:1;1510;:5;:::i;:::-;1498:17;-1:-1:-1;1543:1:0;1534:5;1538:1;1498:17;1534:5;:::i;:::-;:10;1526:56;;;;-1:-1:-1;;;1526:56:0;;10648:2:1;1526:56:0;;;10630:21:1;10687:2;10667:18;;;10660:30;10726:34;10706:18;;;10699:62;-1:-1:-1;;;10777:18:1;;;10770:31;10818:19;;1526:56:0;10446:397:1;1617:132:0;1675:7;1702:39;1706:1;1709;1702:39;;;;;;;;;;;;;;;;;:3;:39::i;30452:361::-;16033:6;:13;;-1:-1:-1;;16033:13:0;;;;;30552:16:::1;::::0;;16033:6;30552:16;;;;;::::1;::::0;;-1:-1:-1;;30552:16:0::1;::::0;::::1;::::0;;::::1;::::0;::::1;-1:-1:-1::0;;30589:4:0::1;::::0;30579:7;;;;-1:-1:-1;;;;;;30589:4:0::1;::::0;30579:7;;-1:-1:-1;30589:4:0::1;::::0;30579:7:::1;;;;:::i;:::-;;;;;;:14;-1:-1:-1::0;;;;;30579:14:0::1;;;-1:-1:-1::0;;;;;30579:14:0::1;;;::::0;::::1;30622:4;30604;30609:1;30604:7;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;30604:23:0;;::::1;:7;::::0;;::::1;::::0;;;;;:23;30640:6:::1;::::0;:165:::1;::::0;-1:-1:-1;;;30640:165:0;;:6;::::1;::::0;:57:::1;::::0;30705:6;;30640:165:::1;::::0;:6:::1;::::0;30743:4;;30762:2;;30779:15:::1;::::0;30640:165:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;-1:-1:-1::0;;16051:6:0;:14;;-1:-1:-1;;16051:14:0;;;-1:-1:-1;;;;;;30452:361:0:o;21093:330::-;21223:53;;;;;;;;;;;-1:-1:-1;;;21223:53:0;;;;;;;;-1:-1:-1;;;;;21223:17:0;;21186:4;21223:17;;;:9;:17;;;;;;;:53;;21245:6;;21223:21;:53::i;:::-;-1:-1:-1;;;;;21203:17:0;;;;;;;:9;:17;;;;;;:73;;;;21310:20;;;;;;;:32;;21335:6;21310:24;:32::i;:::-;-1:-1:-1;;;;;21287:20:0;;;;;;;:9;:20;;;;;;;:55;;;;21358:35;;;;;;;;;;21386:6;160:25:1;;148:2;133:18;;14:177;21358:35:0;;;;;;;;-1:-1:-1;21411:4:0;21093:330;;;;;:::o;21482:606::-;21542:6;21539:542;;;21579:16;;21564:12;:31;21623:14;;21610:10;:27;21668:17;;21652:13;:33;21715:16;;21700:12;:31;21755:10;;21746:6;:19;21791:12;;21780:8;:23;25994:113;:::o;21539:542::-;21851:15;;21836:12;:30;21894:13;;21881:10;:26;21938:16;;21922:13;:32;21984:15;;21969:12;:30;22023:9;;22014:6;:18;22058:11;;22047:8;:22;21482:606;:::o;23298:531::-;-1:-1:-1;;;;;23403:22:0;;;;;;:14;:22;;;;;;;;23402:23;:45;;;;-1:-1:-1;23442:5:0;;-1:-1:-1;;;;;23429:18:0;;;23442:5;;23429:18;;23402:45;:75;;;;-1:-1:-1;;;;;;23451:26:0;;23472:4;23451:26;;23402:75;:106;;;;-1:-1:-1;23503:4:0;;-1:-1:-1;;;;;23482:26:0;;;23503:4;;23482:26;;23402:106;:127;;;;-1:-1:-1;23525:4:0;;-1:-1:-1;;;;;23512:17:0;;;23525:4;;23512:17;;23402:127;:164;;;;-1:-1:-1;23546:20:0;;-1:-1:-1;;;;;23533:33:0;;;23546:20;;23533:33;;23402:164;:202;;;;-1:-1:-1;23583:21:0;;-1:-1:-1;;;;;23570:34:0;;;23583:21;;23570:34;;23402:202;:222;;;;-1:-1:-1;23621:3:0;;-1:-1:-1;;;;;23608:16:0;;;23621:3;;23608:16;;23402:222;23398:424;;;-1:-1:-1;;;;;17903:18:0;;23640;17903;;;:9;:18;;;;;;23729:15;;23705:19;23718:6;17903:18;23705:19;:::i;:::-;23704:40;;23696:114;;;;-1:-1:-1;;;23696:114:0;;12295:2:1;23696:114:0;;;12277:21:1;12334:2;12314:18;;;12307:30;12373:34;12353:18;;;12346:62;12444:32;12424:18;;;12417:60;12494:19;;23696:114:0;12093:426:1;23398:424:0;23298:531;;;:::o;22888:378::-;22983:4;;-1:-1:-1;;;;;22973:14:0;;;22983:4;;22973:14;:49;;;;-1:-1:-1;23004:18:0;;;;22973:49;:94;;;;-1:-1:-1;;;;;;23040:27:0;;;;;;:16;:27;;;;;;;;23039:28;22973:94;22969:290;;;-1:-1:-1;;;;;23092:24:0;;;;;;:13;:24;;;;;;23119:15;-1:-1:-1;23084:82:0;;;;-1:-1:-1;;;23084:82:0;;12726:2:1;23084:82:0;;;12708:21:1;12765:2;12745:18;;;12738:30;12804;12784:18;;;12777:58;12852:18;;23084:82:0;12524:352:1;23084:82:0;23226:21;;23208:39;;23226:21;;;;;23208:15;:39;:::i;:::-;-1:-1:-1;;;;;23181:24:0;;;;;;:13;:24;;;;;:66;22888:378;;:::o;22375:478::-;22503:5;;-1:-1:-1;;;;;22490:18:0;;;22503:5;;22490:18;22486:360;;22527:6;22524:311;;;22571:16;;22561:6;:26;;:53;;;-1:-1:-1;;;;;;22591:23:0;;;;;;:15;:23;;;;;;;;22561:53;:83;;;-1:-1:-1;;;;;;22618:26:0;;;;;;:15;:26;;;;;;;;22561:83;22553:113;;;;-1:-1:-1;;;22553:113:0;;13083:2:1;22553:113:0;;;13065:21:1;13122:2;13102:18;;;13095:30;-1:-1:-1;;;13141:18:1;;;13134:47;13198:18;;22553:113:0;12881:341:1;22553:113:0;22524:311;;;22725:15;;22715:6;:25;;:52;;;-1:-1:-1;;;;;;22744:23:0;;;;;;:15;:23;;;;;;;;22715:52;:82;;;-1:-1:-1;;;;;;22771:26:0;;;;;;:15;:26;;;;;;;;22715:82;22707:112;;;;-1:-1:-1;;;22707:112:0;;13083:2:1;22707:112:0;;;13065:21:1;13122:2;13102:18;;;13095:30;-1:-1:-1;;;13141:18:1;;;13134:47;13198:18;;22707:112:0;12881:341:1;25766:197:0;25853:4;;25815;;-1:-1:-1;;;;;25853:4:0;25839:10;:18;;;;:38;;-1:-1:-1;25871:6:0;;;;;;;25870:7;25839:38;:62;;;;-1:-1:-1;25890:11:0;;;;;;;25839:62;:116;;;;-1:-1:-1;;25942:13:0;;25932:4;25914:24;;;;:9;:24;;;;;;:41;;;25766:197::o;26851:2037::-;16033:6;:13;;-1:-1:-1;;16033:13:0;;;;;26946:15:::1;::::0;26963:26:::1;::::0;16033:13;;26930:60:::1;::::0;:15:::1;:60::i;:::-;:79;;26997:12;;26930:79;;;26993:1;26930:79;26900:109;;27020:23;27046:59;27103:1;27046:52;27089:8;;27046:38;27064:19;27046:13;;:17;;:38;;;;:::i;:59::-;27020:85;;27116:20;27139:34;27157:15;27139:13;;:17;;:34;;;;:::i;:::-;27210:16;::::0;;27224:1:::1;27210:16:::0;;;;;::::1;::::0;;27116:57;;-1:-1:-1;27186:21:0::1;::::0;27210:16;;::::1;::::0;::::1;::::0;;::::1;::::0;::::1;;::::0;-1:-1:-1;27210:16:0::1;27186:40;;27255:4;27237;27242:1;27237:7;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;27237:23:0;;::::1;:7;::::0;;::::1;::::0;;;;;:23;27281:4:::1;::::0;27271:7;;27281:4;::::1;::::0;27271;;27281;;27271:7;::::1;;;;;:::i;:::-;-1:-1:-1::0;;;;;27271:14:0;;::::1;:7;::::0;;::::1;::::0;;;;;:14;27356:6:::1;::::0;:188:::1;::::0;-1:-1:-1;;;27356:188:0;;27322:21:::1;::::0;27356:6;;;::::1;::::0;:57:::1;::::0;:188:::1;::::0;27428:12;;27298:21:::1;::::0;27471:4;;27498::::1;::::0;27518:15:::1;::::0;27356:188:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;27555:17;27575:40;27601:13;27575:21;:25;;:40;;;;:::i;:::-;27555:60:::0;-1:-1:-1;27626:19:0::1;27648:40;27661:26;:19:::0;27685:1:::1;27661:23;:26::i;:::-;27648:8;::::0;;:12:::1;:40::i;:::-;27626:62:::0;-1:-1:-1;27699:26:0::1;27728:58;27784:1;27728:51;27626:62:::0;27728:51;:9;27742:19;27728:13:::1;:34::i;:58::-;27699:87;;27797:27;27827:45;27860:11;27827:28;27841:13;;27827:9;:13;;:28;;;;:::i;:45::-;27797:75;;27883:26;27912:44;27944:11;27912:27;27926:12;;27912:9;:13;;:27;;;;:::i;:44::-;27883:73;;27967:20;27990:38;28016:11;27990:21;28004:6;;27990:9;:13;;:21;;;;:::i;:38::-;27967:61;;28048:11;;;;;;;;;-1:-1:-1::0;;;;;28048:11:0::1;-1:-1:-1::0;;;;;28048:19:0::1;;28075;28048:49;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;-1:-1:-1::0;28178:20:0::1;::::0;28170:77:::1;::::0;28120:21:::1;::::0;-1:-1:-1;;;;;28178:20:0::1;::::0;28237:5:::1;::::0;28212:18;;28120:21;28170:77;28120:21;28170:77;28212:18;28178:20;28237:5;28170:77:::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1::0;;28311:3:0::1;::::0;28303:54:::1;::::0;28119:128;;-1:-1:-1;28259:15:0::1;::::0;-1:-1:-1;;;;;28311:3:0;;::::1;::::0;28347:5:::1;::::0;28328:12;;28259:15;28303:54;28259:15;28303:54;28328:12;28311:3;28347:5;28303:54:::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28258:99;;;28377:16;28369:69;;;::::0;-1:-1:-1;;;28369:69:0;;14226:2:1;28369:69:0::1;::::0;::::1;14208:21:1::0;14265:2;14245:18;;;14238:30;14304:34;14284:18;;;14277:62;-1:-1:-1;;;14355:18:1;;;14348:38;14403:19;;28369:69:0::1;14024:404:1::0;28369:69:0::1;28457:10;28449:57;;;::::0;-1:-1:-1;;;28449:57:0;;14635:2:1;28449:57:0::1;::::0;::::1;14617:21:1::0;14674:2;14654:18;;;14647:30;14713:34;14693:18;;;14686:62;-1:-1:-1;;;14764:18:1;;;14757:32;14806:19;;28449:57:0::1;14433:398:1::0;28449:57:0::1;28522:19:::0;;28519:362:::1;;28557:6;::::0;28731:21:::1;::::0;28557:244:::1;::::0;-1:-1:-1;;;28557:244:0;;28633:4:::1;28557:244;::::0;::::1;15177:34:1::0;15227:18;;;15220:34;;;28557:6:0::1;15270:18:1::0;;;15263:34;;;15313:18;;;15306:34;-1:-1:-1;;;;;28731:21:0;;::::1;15356:19:1::0;;;15349:44;28771:15:0::1;15409:19:1::0;;;15402:35;28557:6:0;::::1;::::0;:22:::1;::::0;28587:18;;15111:19:1;;28557:244:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;28821:48:0::1;::::0;;8090:25:1;;;8146:2;8131:18;;8124:34;;;28821:48:0::1;::::0;-1:-1:-1;8063:18:1;28821:48:0::1;;;;;;;28519:362;-1:-1:-1::0;;16051:6:0;:14;;-1:-1:-1;;16051:14:0;;;-1:-1:-1;;;;;;;;;;;26851:2037:0:o;24885:834::-;24981:7;25001:17;25078:9;25074:460;;;25106:6;25103:335;;;25209:54;25248:14;;25209:34;25241:1;25209:27;25234:1;25209:20;25220:8;;25209:6;:10;;:20;;;;:::i;:54::-;25197:66;;25074:460;;25103:335;25375:47;25407:14;;25375:27;25400:1;25375:20;25386:8;;25375:6;:10;;:20;;;;:::i;25074:460::-;25482:40;25507:14;;25482:20;25493:8;;25482:6;:10;;:20;;;;:::i;:40::-;25470:52;;25074:460;25591:4;25573:24;;;;:9;:24;;;;;;:39;;25602:9;25573:28;:39::i;:::-;25564:4;25546:24;;;;:9;:24;;;;;;;:66;;;;25628:42;;-1:-1:-1;;;;;25628:42:0;;;;;;;25660:9;160:25:1;;148:2;133:18;;14:177;25628:42:0;;;;;;;;25690:21;:6;25701:9;25690:10;:21::i;:::-;25683:28;24885:834;-1:-1:-1;;;;;;24885:834:0:o;1755:345::-;1841:7;1943:12;1936:5;1928:28;;;;-1:-1:-1;;;1928:28:0;;;;;;;;:::i;:::-;-1:-1:-1;1967:9:0;1979:5;1983:1;1979;:5;:::i;196:597:1:-;308:4;337:2;366;355:9;348:21;398:6;392:13;441:6;436:2;425:9;421:18;414:34;466:1;476:140;490:6;487:1;484:13;476:140;;;585:14;;;581:23;;575:30;551:17;;;570:2;547:26;540:66;505:10;;476:140;;;634:6;631:1;628:13;625:91;;;704:1;699:2;690:6;679:9;675:22;671:31;664:42;625:91;-1:-1:-1;777:2:1;756:15;-1:-1:-1;;752:29:1;737:45;;;;784:2;733:54;;196:597;-1:-1:-1;;;196:597:1:o;798:131::-;-1:-1:-1;;;;;873:31:1;;863:42;;853:70;;919:1;916;909:12;934:315;1002:6;1010;1063:2;1051:9;1042:7;1038:23;1034:32;1031:52;;;1079:1;1076;1069:12;1031:52;1118:9;1105:23;1137:31;1162:5;1137:31;:::i;:::-;1187:5;1239:2;1224:18;;;;1211:32;;-1:-1:-1;;;934:315:1:o;1446:160::-;1511:20;;1567:13;;1560:21;1550:32;;1540:60;;1596:1;1593;1586:12;1540:60;1446:160;;;:::o;1611:180::-;1667:6;1720:2;1708:9;1699:7;1695:23;1691:32;1688:52;;;1736:1;1733;1726:12;1688:52;1759:26;1775:9;1759:26;:::i;1796:248::-;1864:6;1872;1925:2;1913:9;1904:7;1900:23;1896:32;1893:52;;;1941:1;1938;1931:12;1893:52;-1:-1:-1;;1964:23:1;;;2034:2;2019:18;;;2006:32;;-1:-1:-1;1796:248:1:o;2049:316::-;2126:6;2134;2142;2195:2;2183:9;2174:7;2170:23;2166:32;2163:52;;;2211:1;2208;2201:12;2163:52;-1:-1:-1;;2234:23:1;;;2304:2;2289:18;;2276:32;;-1:-1:-1;2355:2:1;2340:18;;;2327:32;;2049:316;-1:-1:-1;2049:316:1:o;2370:456::-;2447:6;2455;2463;2516:2;2504:9;2495:7;2491:23;2487:32;2484:52;;;2532:1;2529;2522:12;2484:52;2571:9;2558:23;2590:31;2615:5;2590:31;:::i;:::-;2640:5;-1:-1:-1;2697:2:1;2682:18;;2669:32;2710:33;2669:32;2710:33;:::i;:::-;2370:456;;2762:7;;-1:-1:-1;;;2816:2:1;2801:18;;;;2788:32;;2370:456::o;2831:247::-;2890:6;2943:2;2931:9;2922:7;2918:23;2914:32;2911:52;;;2959:1;2956;2949:12;2911:52;2998:9;2985:23;3017:31;3042:5;3017:31;:::i;3083:337::-;3146:6;3154;3207:2;3195:9;3186:7;3182:23;3178:32;3175:52;;;3223:1;3220;3213:12;3175:52;3246:26;3262:9;3246:26;:::i;:::-;3236:36;;3322:2;3311:9;3307:18;3294:32;3366:4;3359:5;3355:16;3348:5;3345:27;3335:55;;3386:1;3383;3376:12;3335:55;3409:5;3399:15;;;3083:337;;;;;:::o;3425:454::-;3514:6;3522;3530;3538;3546;3599:3;3587:9;3578:7;3574:23;3570:33;3567:53;;;3616:1;3613;3606:12;3567:53;3639:26;3655:9;3639:26;:::i;:::-;3629:36;;3712:2;3701:9;3697:18;3684:32;3674:42;;3763:2;3752:9;3748:18;3735:32;3725:42;;3814:2;3803:9;3799:18;3786:32;3776:42;;3837:36;3868:3;3857:9;3853:19;3837:36;:::i;:::-;3827:46;;3425:454;;;;;;;;:::o;4073:315::-;4138:6;4146;4199:2;4187:9;4178:7;4174:23;4170:32;4167:52;;;4215:1;4212;4205:12;4167:52;4254:9;4241:23;4273:31;4298:5;4273:31;:::i;:::-;4323:5;-1:-1:-1;4347:35:1;4378:2;4363:18;;4347:35;:::i;:::-;4337:45;;4073:315;;;;;:::o;4393:180::-;4452:6;4505:2;4493:9;4484:7;4480:23;4476:32;4473:52;;;4521:1;4518;4511:12;4473:52;-1:-1:-1;4544:23:1;;4393:180;-1:-1:-1;4393:180:1:o;4578:248::-;4643:6;4651;4704:2;4692:9;4683:7;4679:23;4675:32;4672:52;;;4720:1;4717;4710:12;4672:52;4756:9;4743:23;4733:33;;4785:35;4816:2;4805:9;4801:18;4785:35;:::i;5039:388::-;5107:6;5115;5168:2;5156:9;5147:7;5143:23;5139:32;5136:52;;;5184:1;5181;5174:12;5136:52;5223:9;5210:23;5242:31;5267:5;5242:31;:::i;:::-;5292:5;-1:-1:-1;5349:2:1;5334:18;;5321:32;5362:33;5321:32;5362:33;:::i;5432:523::-;5536:6;5544;5552;5560;5568;5576;5629:3;5617:9;5608:7;5604:23;5600:33;5597:53;;;5646:1;5643;5636:12;5597:53;-1:-1:-1;;5669:23:1;;;5739:2;5724:18;;5711:32;;-1:-1:-1;5790:2:1;5775:18;;5762:32;;5841:2;5826:18;;5813:32;;-1:-1:-1;5892:3:1;5877:19;;5864:33;;-1:-1:-1;5944:3:1;5929:19;5916:33;;-1:-1:-1;5432:523:1;-1:-1:-1;5432:523:1:o;5960:248::-;6025:6;6033;6086:2;6074:9;6065:7;6061:23;6057:32;6054:52;;;6102:1;6099;6092:12;6054:52;6125:26;6141:9;6125:26;:::i;6699:329::-;6901:2;6883:21;;;6940:1;6920:18;;;6913:29;-1:-1:-1;;;6973:2:1;6958:18;;6951:36;7019:2;7004:18;;6699:329::o;7033:335::-;7235:2;7217:21;;;7274:2;7254:18;;;7247:30;-1:-1:-1;;;7308:2:1;7293:18;;7286:41;7359:2;7344:18;;7033:335::o;7373:127::-;7434:10;7429:3;7425:20;7422:1;7415:31;7465:4;7462:1;7455:15;7489:4;7486:1;7479:15;7505:217;7545:1;7571;7561:132;;7615:10;7610:3;7606:20;7603:1;7596:31;7650:4;7647:1;7640:15;7678:4;7675:1;7668:15;7561:132;-1:-1:-1;7707:9:1;;7505:217::o;7727:184::-;7797:6;7850:2;7838:9;7829:7;7825:23;7821:32;7818:52;;;7866:1;7863;7856:12;7818:52;-1:-1:-1;7889:16:1;;7727:184;-1:-1:-1;7727:184:1:o;8169:168::-;8209:7;8275:1;8271;8267:6;8263:14;8260:1;8257:21;8252:1;8245:9;8238:17;8234:45;8231:71;;;8282:18;;:::i;:::-;-1:-1:-1;8322:9:1;;8169:168::o;8342:128::-;8382:3;8413:1;8409:6;8406:1;8403:13;8400:39;;;8419:18;;:::i;:::-;-1:-1:-1;8455:9:1;;8342:128::o;9257:125::-;9297:4;9325:1;9322;9319:8;9316:34;;;9330:18;;:::i;:::-;-1:-1:-1;9367:9:1;;9257:125::o;10980:127::-;11041:10;11036:3;11032:20;11029:1;11022:31;11072:4;11069:1;11062:15;11096:4;11093:1;11086:15;11112:461;11165:3;11203:5;11197:12;11230:6;11225:3;11218:19;11256:4;11285:2;11280:3;11276:12;11269:19;;11322:2;11315:5;11311:14;11343:1;11353:195;11367:6;11364:1;11361:13;11353:195;;;11432:13;;-1:-1:-1;;;;;11428:39:1;11416:52;;11488:12;;;;11523:15;;;;11464:1;11382:9;11353:195;;;-1:-1:-1;11564:3:1;;11112:461;-1:-1:-1;;;;;11112:461:1:o;11578:510::-;11849:6;11838:9;11831:25;11892:3;11887:2;11876:9;11872:18;11865:31;11812:4;11913:57;11965:3;11954:9;11950:19;11942:6;11913:57;:::i;:::-;-1:-1:-1;;;;;12006:32:1;;;;12001:2;11986:18;;11979:60;-1:-1:-1;12070:2:1;12055:18;12048:34;11905:65;11578:510;-1:-1:-1;;11578:510:1:o;13227:582::-;13526:6;13515:9;13508:25;13569:6;13564:2;13553:9;13549:18;13542:34;13612:3;13607:2;13596:9;13592:18;13585:31;13489:4;13633:57;13685:3;13674:9;13670:19;13662:6;13633:57;:::i;:::-;-1:-1:-1;;;;;13726:32:1;;;;13721:2;13706:18;;13699:60;-1:-1:-1;13790:3:1;13775:19;13768:35;13625:65;13227:582;-1:-1:-1;;;13227:582:1:o;15448:306::-;15536:6;15544;15552;15605:2;15593:9;15584:7;15580:23;15576:32;15573:52;;;15621:1;15618;15611:12;15573:52;15650:9;15644:16;15634:26;;15700:2;15689:9;15685:18;15679:25;15669:35;;15744:2;15733:9;15729:18;15723:25;15713:35;;15448:306;;;;;:::o

Swarm Source

ipfs://9addc935a664077e1179fa66c398e53636a6bde622d8d611bfb78b8722630fc0
Loading...
Loading
Loading...
Loading
[ Download: CSV Export  ]
[ Download: CSV Export  ]

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