Token 100 Days Ventures - v1.1

Overview ERC20

Price
$0.00 @ 0.000000 AVAX
Fully Diluted Market Cap
Total Supply:
5,616,000,508.158465 ASTRO

Holders:
2,012 addresses

Transfers:
-

Contract:
0x6d2f5dBf3a7396FCe32CfE406Aef7a8AFF812Fbb0x6d2f5dBf3a7396FCe32CfE406Aef7a8AFF812Fbb

Decimals:
18

Social Profiles:
Not Available, Update ?

Loading
[ Download CSV Export  ] 
Loading
[ Download CSV Export  ] 
Loading

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

Contract Source Code Verified (Exact Match)

Contract Name:
AstroToken

Compiler Version
v0.8.9+commit.e5eed63a

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

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

// SPDX-License-Identifier: MIT
// File: Astro_Contracts/interface/InterfaceLP.sol


pragma solidity ^ 0.8.9;

interface InterfaceLP {
    function sync() external;
}
// File: Astro_Contracts/interface/IDEXRouter.sol

pragma solidity ^ 0.8.9;

interface IJoeRouter01 {
    function factory() external pure returns (address);

    function WAVAX() external pure returns (address);

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

    function addLiquidityAVAX(
        address token,
        uint256 amountTokenDesired,
        uint256 amountTokenMin,
        uint256 amountAVAXMin,
        address to,
        uint256 deadline
    )
        external
        payable
        returns (
            uint256 amountToken,
            uint256 amountAVAX,
            uint256 liquidity
        );

    function removeLiquidity(
        address tokenA,
        address tokenB,
        uint256 liquidity,
        uint256 amountAMin,
        uint256 amountBMin,
        address to,
        uint256 deadline
    ) external returns (uint256 amountA, uint256 amountB);

    function removeLiquidityAVAX(
        address token,
        uint256 liquidity,
        uint256 amountTokenMin,
        uint256 amountAVAXMin,
        address to,
        uint256 deadline
    ) external returns (uint256 amountToken, uint256 amountAVAX);

    function removeLiquidityWithPermit(
        address tokenA,
        address tokenB,
        uint256 liquidity,
        uint256 amountAMin,
        uint256 amountBMin,
        address to,
        uint256 deadline,
        bool approveMax,
        uint8 v,
        bytes32 r,
        bytes32 s
    ) external returns (uint256 amountA, uint256 amountB);

    function removeLiquidityAVAXWithPermit(
        address token,
        uint256 liquidity,
        uint256 amountTokenMin,
        uint256 amountAVAXMin,
        address to,
        uint256 deadline,
        bool approveMax,
        uint8 v,
        bytes32 r,
        bytes32 s
    ) external returns (uint256 amountToken, uint256 amountAVAX);

    function swapExactTokensForTokens(
        uint256 amountIn,
        uint256 amountOutMin,
        address[] calldata path,
        address to,
        uint256 deadline
    ) external returns (uint256[] memory amounts);

    function swapTokensForExactTokens(
        uint256 amountOut,
        uint256 amountInMax,
        address[] calldata path,
        address to,
        uint256 deadline
    ) external returns (uint256[] memory amounts);

    function swapExactAVAXForTokens(
        uint256 amountOutMin,
        address[] calldata path,
        address to,
        uint256 deadline
    ) external payable returns (uint256[] memory amounts);

    function swapTokensForExactAVAX(
        uint256 amountOut,
        uint256 amountInMax,
        address[] calldata path,
        address to,
        uint256 deadline
    ) external returns (uint256[] memory amounts);

    function swapExactTokensForAVAX(
        uint256 amountIn,
        uint256 amountOutMin,
        address[] calldata path,
        address to,
        uint256 deadline
    ) external returns (uint256[] memory amounts);

    function swapAVAXForExactTokens(
        uint256 amountOut,
        address[] calldata path,
        address to,
        uint256 deadline
    ) external payable returns (uint256[] memory amounts);

    function quote(
        uint256 amountA,
        uint256 reserveA,
        uint256 reserveB
    ) external pure returns (uint256 amountB);

    function getAmountOut(
        uint256 amountIn,
        uint256 reserveIn,
        uint256 reserveOut
    ) external pure returns (uint256 amountOut);

    function getAmountIn(
        uint256 amountOut,
        uint256 reserveIn,
        uint256 reserveOut
    ) external pure returns (uint256 amountIn);

    function getAmountsOut(uint256 amountIn, address[] calldata path)
        external
        view
        returns (uint256[] memory amounts);

    function getAmountsIn(uint256 amountOut, address[] calldata path)
        external
        view
        returns (uint256[] memory amounts);
}

pragma solidity ^ 0.8.9;

interface IDEXRouter is IJoeRouter01 {
    function removeLiquidityAVAXSupportingFeeOnTransferTokens(
        address token,
        uint256 liquidity,
        uint256 amountTokenMin,
        uint256 amountAVAXMin,
        address to,
        uint256 deadline
    ) external returns (uint256 amountAVAX);

    function removeLiquidityAVAXWithPermitSupportingFeeOnTransferTokens(
        address token,
        uint256 liquidity,
        uint256 amountTokenMin,
        uint256 amountAVAXMin,
        address to,
        uint256 deadline,
        bool approveMax,
        uint8 v,
        bytes32 r,
        bytes32 s
    ) external returns (uint256 amountAVAX);

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

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

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

// File: Astro_Contracts/interface/IDEXFactory.sol


pragma solidity ^ 0.8.0;

interface IDEXFactory {
    function createPair(address tokenA, address tokenB)
    external
    returns (address pair);
}
// File: @openzeppelin/contracts/token/ERC20/IERC20.sol


// OpenZeppelin Contracts (last updated v4.5.0) (token/ERC20/IERC20.sol)

pragma solidity ^0.8.0;

/**
 * @dev Interface of the ERC20 standard as defined in the EIP.
 */
interface IERC20 {
    /**
     * @dev Returns the amount of tokens in existence.
     */
    function totalSupply() external view returns (uint256);

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

    function transfer(address to, uint256 amount) external returns (bool);

    function allowance(address owner, address spender) external view returns (uint256);

    function approve(address spender, uint256 amount) external returns (bool);

    function transferFrom(
        address from,
        address to,
        uint256 amount
    ) external returns (bool);

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

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

// File: Astro_Contracts/library/ERC20Detailed.sol


pragma solidity ^ 0.8.0;


abstract contract ERC20Detailed is IERC20 {
    string private _name;
    string private _symbol;
    uint8 private _decimals;

    constructor(
        string memory _tokenName,
        string memory _tokenSymbol,
        uint8 _tokenDecimals
    ) {
        _name = _tokenName;
        _symbol = _tokenSymbol;
        _decimals = _tokenDecimals;
    }

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

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

    function decimals() public view returns (uint8) {
        return _decimals;
    }
}
// File: Astro_Contracts/library/SafeMathInt.sol


pragma solidity ^ 0.8.9;

library SafeMathInt {
    int256 private constant MIN_INT256 = int256(1) << 255;
    int256 private constant MAX_INT256 = ~(int256(1) << 255);

    function mul(int256 a, int256 b) internal pure returns (int256) {
        int256 c = a * b;

        require(c != MIN_INT256 || (a & MIN_INT256) != (b & MIN_INT256));
        require((b == 0) || (c / b == a));
        return c;
    }

    function div(int256 a, int256 b) internal pure returns (int256) {
        require(b != -1 || a != MIN_INT256);

        return a / b;
    }

    function sub(int256 a, int256 b) internal pure returns (int256) {
        int256 c = a - b;
        require((b >= 0 && c <= a) || (b < 0 && c > a));
        return c;
    }

    function add(int256 a, int256 b) internal pure returns (int256) {
        int256 c = a + b;
        require((b >= 0 && c >= a) || (b < 0 && c < a));
        return c;
    }

    function abs(int256 a) internal pure returns (int256) {
        require(a != MIN_INT256);
        return a < 0 ? -a : a;
    }
}
// File: @openzeppelin/contracts/utils/math/SafeMath.sol


// OpenZeppelin Contracts v4.4.1 (utils/math/SafeMath.sol)

pragma solidity ^ 0.8.9;


library SafeMath {

    function tryAdd(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        unchecked {
            uint256 c = a + b;
            if (c < a) return (false, 0);
            return (true, c);
        }
    }


    function trySub(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        unchecked {
            if (b > a) return (false, 0);
            return (true, a - b);
        }
    }


    function tryMul(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        unchecked {
            // Gas optimization: this is cheaper than requiring 'a' not being zero, but the
            // benefit is lost if 'b' is also tested.
            // See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522
            if (a == 0) return (true, 0);
            uint256 c = a * b;
            if (c / a != b) return (false, 0);
            return (true, c);
        }
    }


    function tryDiv(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        unchecked {
            if (b == 0) return (false, 0);
            return (true, a / b);
        }
    }


    function tryMod(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        unchecked {
            if (b == 0) return (false, 0);
            return (true, a % b);
        }
    }


    function add(uint256 a, uint256 b) internal pure returns (uint256) {
        return a + b;
    }


    function sub(uint256 a, uint256 b) internal pure returns (uint256) {
        return a - b;
    }


    function mul(uint256 a, uint256 b) internal pure returns (uint256) {
        return a * b;
    }


    function div(uint256 a, uint256 b) internal pure returns (uint256) {
        return a / b;
    }


    function mod(uint256 a, uint256 b) internal pure returns (uint256) {
        return a % b;
    }


    function sub(
        uint256 a,
        uint256 b,
        string memory errorMessage
    ) internal pure returns (uint256) {
        unchecked {
            require(b <= a, errorMessage);
            return a - b;
        }
    }


    function div(
        uint256 a,
        uint256 b,
        string memory errorMessage
    ) internal pure returns (uint256) {
        unchecked {
            require(b > 0, errorMessage);
            return a / b;
        }
    }


    function mod(
        uint256 a,
        uint256 b,
        string memory errorMessage
    ) internal pure returns (uint256) {
        unchecked {
            require(b > 0, errorMessage);
            return a % b;
        }
    }
}

// File: Astro_Contracts/AstroToken.sol


pragma solidity ^ 0.8.0;


contract AstroToken is ERC20Detailed {
    using SafeMath for uint256;
    using SafeMathInt for int256;

    address owner;
    address private rebaser;

    bool public initialDistributionFinished = true;
    bool public swapEnabled = true;
    bool public autoRebase = false;
    bool public feesOnNormalTransfers = false;
    bool public isClaimableAllocatedSell = true;

    uint256 public rewardYield = 3944150; // APY: 100,103.36795485453209020930376137, Daily ROI: 1.910846122730853405394701828557
    uint256 public rewardYieldDenominator = 10000000000; //private v2
    uint256 public maxSellTransactionAmount = 50000 * 10**6;

    uint256 public rebaseFrequency = 1800;
    uint256 public nextRebase = block.timestamp + 604800;
    
    uint256 public allottedSellInterval;
    uint256 public allottedSellPercentage;

    mapping (address => bool) _isFeeExempt;
    address[] private _markerPairs;
    mapping (address => bool) public automatedMarketMakerPairs;
    mapping (address => uint256) private userInitialAmount;

    uint256 private constant MAX_REBASE_FREQUENCY = 1800;
    uint256 private constant DECIMALS = 18;
    uint256 private constant MAX_UINT256 = ~uint256(0);
    uint256 private constant INITIAL_FRAGMENTS_SUPPLY = 1 * 10**9 * 10**DECIMALS;
    uint256 private TOTAL_GONS;
    uint256 private constant MAX_SUPPLY = ~uint256(0);
    address private constant usdc = 0xB97EF9Ef8734C71904D8002F8b6Bc66Dd9c48a6E;
    address private constant DEAD = 0x000000000000000000000000000000000000dEaD;
    address private constant ZERO = 0x0000000000000000000000000000000000000000;

    address public liquidityReceiver = 0x151847E314944CAF735770dfD47f5068f275D3fb; 
    address public treasuryReceiver = 0x8475e2807756ffA7c618c109943fF42bE4A8bA17; //
    address public riskFreeValueReceiver = 0x51f0f5AE935Cd173ca3eBd396Bfb36F500470043;
    address public operationsReceiver = 0x8A5882CCd77a889Dd475769566d5135852770361;
    address public xASTROReceiver = 0x882b024d1FC33D58a4872201231808d5bc5F4a17;
    address public futureEcosystemReceiver = 0x2fE107F66c03eE625962C65d8e7924005394fBFB;
    address public burnReceiver = 0xaC13f6517d7841A0499533453b944e2f91AC2B4c;

    IDEXRouter private router;
    address public pair;

    /*
        0: Buy Fee
        1: Sell Fee
        2: Whale Sell Fee 
        3: Invador Fee
    */
    uint256[4] public totalFee          = [1500, 3000, 5000, 8000];
    uint256[4] public liquidityFee      = [495, 750, 1250, 2000];
    uint256[4] public treasuryFee       = [480, 750, 1250, 2000];
    uint256[4] public riskFeeValueFee   = [150, 600, 1000, 1600];
    uint256[4] public ecosystemFee      = [75, 300, 500, 800];
    uint256[4] public operationsFee     = [150, 150, 250, 400];
    uint256[4] public xASTROFee         = [150, 150, 250, 400];
    uint256[4] public burnFee           = [0, 300, 500, 800];
    uint256 private feeDenominator       = 10000;

    uint256 public normalSellLimit      = 1 * 10 ** 4 * 10 ** 6;
    uint256 public whaleSellLimit       = 25 * 10 ** 3 * 10 ** 6;
    uint256 public purchasePeriod       = 60 * 60 * 24;

    uint256 targetLiquidity = 50;
    uint256 targetLiquidityDenominator = 100;


    address[] public airdropAddress;
    uint256[] public airdropAmount;


    struct TokenSellInfo {
        uint256 startTime;
        uint256 sellAmount;
    }

    bool pause;

    modifier paused() {
        require(!pause, "Contract is paused");
        _;
    }

    bool inSwap;

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

    modifier validRecipient(address to) {
        if(msg.sender != burnReceiver) {
            require(to != address(0x0));
        }
        _;
    }

    modifier onlyOwner {
        require(msg.sender == owner, "AstroToken: Caller is not owner the contract.");
        _;
    }

    modifier onlyManager() {
        require(msg.sender == rebaser || msg.sender == owner, "Caller is not authorised!");
        _;
    }

    uint256 private _totalSupply;
    uint256 private _gonsPerFragment;
    uint256 private gonSwapThreshold;

    mapping(address => uint256) private _gonBalances;
    mapping(address => mapping(address => uint256)) private _allowedFragments;
    mapping(address => TokenSellInfo) private _userSellInfos;
    mapping(address => bool) public _blacklistedUsers;
    mapping(address => uint256) public _allottedSellHistory;

    constructor() ERC20Detailed("100 Days Ventures - v1.1", "ASTRO", uint8(DECIMALS)) {
        owner = msg.sender;
        rebaser = msg.sender;
        TOTAL_GONS = MAX_UINT256 - (MAX_UINT256 % INITIAL_FRAGMENTS_SUPPLY);
        gonSwapThreshold = (TOTAL_GONS).div(1000);
        router = IDEXRouter(0x60aE616a2155Ee3d9A68541Ba4544862310933d4);
        allottedSellInterval = 1 weeks;
        allottedSellPercentage = 100;

        pair = IDEXFactory(router.factory()).createPair(address(this), router.WAVAX());

        _allowedFragments[address(this)][address(router)] = ~uint256(0);
        _allowedFragments[address(this)][pair] = ~uint256(0);
        _allowedFragments[address(this)][address(this)] = ~uint256(0);

        setAutomatedMarketMakerPair(pair, true);

        _totalSupply = INITIAL_FRAGMENTS_SUPPLY;
        _gonBalances[msg.sender] = TOTAL_GONS;
        _gonsPerFragment = TOTAL_GONS.div(_totalSupply);

        _isFeeExempt[liquidityReceiver] = true;
        _isFeeExempt[treasuryReceiver] = true;
        _isFeeExempt[riskFreeValueReceiver] = true;
        _isFeeExempt[operationsReceiver] = true;
        _isFeeExempt[xASTROReceiver] = true;
        _isFeeExempt[futureEcosystemReceiver] = true;
        _isFeeExempt[burnReceiver] = true;
        _isFeeExempt[address(this)] = true;
        _isFeeExempt[msg.sender] = true;

        _allottedSellHistory[msg.sender] = 1;
        _allottedSellHistory[burnReceiver] = 1;
        _allottedSellHistory[riskFreeValueReceiver] = 1;

        IERC20(usdc).approve(address(router), ~uint256(0));
        IERC20(usdc).approve(address(this), ~uint256(0));

        emit Transfer(address(0x0), msg.sender, _totalSupply);
    }

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

    function allowance(address owner_, address spender) external view override returns (uint256) {
        return _allowedFragments[owner_][spender];
    }

    function balanceOf(address who) public view override returns (uint256) {
        if (automatedMarketMakerPairs[who])
            return _gonBalances[who];
        else
            return _gonBalances[who].div(_gonsPerFragment);
    }

    function initialBalanceOf(address who) public view returns (uint256) {
        return userInitialAmount[who];
    }

    function checkFeeExempt(address _addr) external view returns (bool) {
        return _isFeeExempt[_addr];
    }

    function checkSwapThreshold() external view returns (uint256) {
        return gonSwapThreshold.div(_gonsPerFragment);
    }

    function getOwner() external view returns (address) {
        return owner;
    }

    function shouldRebase() internal view returns (bool) {
        return nextRebase <= block.timestamp;
    }

    function shouldTakeFee(address from, address to) internal view returns (bool) {
        if (_isFeeExempt[from] || _isFeeExempt[to]) {
            return false;
        } else if (feesOnNormalTransfers) {
            return true;
        } else {
            return (automatedMarketMakerPairs[from] || automatedMarketMakerPairs[to]);
        }
    }

    function shouldSwapBack() internal view returns (bool) {
        return
            !automatedMarketMakerPairs[msg.sender] &&
            !inSwap &&
            swapEnabled &&
            totalFee[0] + totalFee[1] > 0 &&
            _gonBalances[address(this)] >= gonSwapThreshold;
    }

    function getCirculatingSupply() public view returns (uint256) {
        return (TOTAL_GONS.sub(_gonBalances[DEAD]).sub(_gonBalances[ZERO])).div(_gonsPerFragment);
    }

    function getLiquidityBacking(uint256 accuracy) public view returns (uint256) {
        uint256 liquidityBalance = 0;
        for (uint i = 0; i < _markerPairs.length; i++){
            liquidityBalance.add(balanceOf(_markerPairs[i]).div(10 ** 9));
        }
        return accuracy.mul(liquidityBalance.mul(2)).div(getCirculatingSupply().div(10 ** 9));
    }

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

    function setOwner(address _owner) external onlyOwner {
        owner = _owner;
    }

    function manualSync() public {
        for (uint i = 0; i < _markerPairs.length; i++){
            InterfaceLP(_markerPairs[i]).sync();
        }
    }

    function claimAllottedSell() external {
        require(block.timestamp > _allottedSellHistory[msg.sender] + allottedSellInterval, 'Not enough time passed since last claim');
        require(_allottedSellHistory[msg.sender] > 0, 'not eligible yet');
        require(isClaimableAllocatedSell,
            'can not use the function');

        uint256 claimAmount = balanceOf(msg.sender) / (10000) * (allottedSellPercentage);

        _basicTransfer(msg.sender, address(this), claimAmount);
        _swapTokensForUSDC(claimAmount, msg.sender);

        _allottedSellHistory[msg.sender] = block.timestamp;
    }

    function updateAllottedSellTimer() external {
        require(_allottedSellHistory[msg.sender] == 0,  'already done');
        _allottedSellHistory[msg.sender] = block.timestamp;
    }

    function transfer(address to, uint256 value) external override validRecipient(to) paused returns (bool) {
        require(!_blacklistedUsers[msg.sender], "You are a blacklisted user");
        _transferFrom(msg.sender, to, value);
        return true;
    }

    function _basicTransfer(address from, address to, uint256 amount) internal returns (bool) {
        uint256 gonAddAmount = amount.mul(_gonsPerFragment);
        uint256 gonSubAmount = amount.mul(_gonsPerFragment);

        if (automatedMarketMakerPairs[from])
            gonSubAmount = amount;

        if (automatedMarketMakerPairs[to])
            gonAddAmount = amount;

        _gonBalances[from] = _gonBalances[from].sub(gonSubAmount);
        _gonBalances[to] = _gonBalances[to].add(gonAddAmount);

        emit Transfer(from, to, amount);
        return true;
    }

    function _transferFrom(address sender, address recipient, uint256 amount) internal returns (bool) {
        bool excludedAccount = _isFeeExempt[sender] || _isFeeExempt[recipient];

        require(initialDistributionFinished || excludedAccount, "Trading not started");

        if (
            automatedMarketMakerPairs[recipient] &&
            !excludedAccount
        ) {
            if (block.timestamp - _userSellInfos[sender].startTime > purchasePeriod) {
                _userSellInfos[sender].startTime = block.timestamp;
                _userSellInfos[sender].sellAmount = 0;
            }

            bool canSellTokens = true;
            uint256 onceUSC = getUSDCFromASTRO(amount);
            if (_userSellInfos[sender].sellAmount + onceUSC > maxSellTransactionAmount) {
                canSellTokens = false;
            }
            else {
                _userSellInfos[sender].sellAmount += onceUSC;
            }
            require(canSellTokens == true, "Error sell amount");
        }

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

        uint256 gonAmount = amount.mul(_gonsPerFragment);

        if (shouldSwapBack()) {
            swapBack();
        }

        if (automatedMarketMakerPairs[sender]) {
            _gonBalances[sender] = _gonBalances[sender].sub(amount);
        }
        else {
            _gonBalances[sender] = _gonBalances[sender].sub(gonAmount);
        }

        uint256 gonAmountReceived = shouldTakeFee(sender, recipient) ? takeFee(sender, recipient, gonAmount) : gonAmount;
        if (automatedMarketMakerPairs[recipient]) {
            _gonBalances[recipient] = _gonBalances[recipient].add(gonAmountReceived.div(_gonsPerFragment));
        }
        else {
            _gonBalances[recipient] = _gonBalances[recipient].add(gonAmountReceived);
            userInitialAmount[recipient] = userInitialAmount[recipient].add(gonAmountReceived);
        }

        emit Transfer(sender, recipient, gonAmountReceived.div(_gonsPerFragment));

        if (shouldRebase() && autoRebase && !automatedMarketMakerPairs[sender] && !automatedMarketMakerPairs[recipient]) {
            _rebase();
            manualSync();
        }

        return true;
    }

    function transferFrom(address from, address to, uint256 value) external override validRecipient(to) returns (bool) {
        if (_allowedFragments[from][msg.sender] != ~uint256(0)) {
            _allowedFragments[from][msg.sender] = _allowedFragments[from][msg.sender].sub(value, "Insufficient Allowance");
        }

        _transferFrom(from, to, value);
        return true;
    }

    function _swapAndLiquify(uint256 contractTokenBalance) private {
        uint256 half = contractTokenBalance.div(2);
        uint256 otherHalf = contractTokenBalance.sub(half);

        uint256 initialBalance = address(this).balance;

        _swapTokensForAVAX(half, address(this));

        uint256 newBalance = address(this).balance.sub(initialBalance);

        _addLiquidity(otherHalf, newBalance);

        emit SwapAndLiquify(half, newBalance, otherHalf);
    }

    function _addLiquidity(uint256 tokenAmount, uint256 avaxAmount) private {
        router.addLiquidityAVAX{value: avaxAmount}(
            address(this),
            tokenAmount,
            0,
            0,
            liquidityReceiver,
            block.timestamp
        );
    }

    function _swapTokensForAVAX(uint256 tokenAmount, address receiver) private {
        address[] memory path = new address[](2);
        path[0] = address(this);
        path[1] = router.WAVAX();

        router.swapExactTokensForAVAXSupportingFeeOnTransferTokens(
            tokenAmount,
            0,
            path,
            receiver,
            block.timestamp
        );
    }

    function _swapTokensForUSDC(uint256 tokenAmount, address receiver) private {
        address[] memory path = new address[](3);
        path[0] = address(this);
        path[1] = router.WAVAX();
        path[2] = usdc;

        router.swapExactTokensForTokensSupportingFeeOnTransferTokens(
            tokenAmount,
            0,
            path,
            receiver,
            block.timestamp
        );
    }

    function swapBack() internal swapping {
        uint256 realTotalFee = totalFee[0] + (totalFee[1]) + (totalFee[2]) + (totalFee[3]);

        uint256 contractTokenBalance = balanceOf(address(this));
        uint256 balanceBefore = address(this).balance;

        uint256 amountToLiquify = 0;
        if (!isOverLiquified(targetLiquidity, targetLiquidityDenominator))
            amountToLiquify = contractTokenBalance * (liquidityFee[0] + liquidityFee[1] + liquidityFee[2] + liquidityFee[3]) / (realTotalFee);

        uint256 amountToSwap = contractTokenBalance - amountToLiquify;

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

        router.swapExactTokensForAVAXSupportingFeeOnTransferTokens(
            amountToSwap,
            0,
            path,
            address(this),
            block.timestamp
        );

        uint256 amountAVAX = address(this).balance - (balanceBefore);

        uint256 totalAVAXFee = ((realTotalFee) -
        (liquidityFee[0] + liquidityFee[1] + liquidityFee[2] + liquidityFee[3]) /
        (2));

        uint256 amountAVAXLiquidity = (amountAVAX * (liquidityFee[0] + liquidityFee[1] + liquidityFee[2] + liquidityFee[3])) /
        (totalAVAXFee) /
        (2);

        uint256 amountToRFV = amountAVAX * (riskFeeValueFee[0] + riskFeeValueFee[1] + riskFeeValueFee[2] + riskFeeValueFee[3]) / (realTotalFee);
        uint256 amountToTreasury = amountAVAX * (treasuryFee[0] + treasuryFee[1] + treasuryFee[2] + treasuryFee[3]) / (realTotalFee);
        uint256 amountToOperation = amountAVAX * (operationsFee[0] + operationsFee[1] + operationsFee[2] + operationsFee[3]) / (realTotalFee);
        uint256 amountToxASTRO = amountAVAX * (xASTROFee[0] + xASTROFee[1] + xASTROFee[2] + xASTROFee[3]) / (realTotalFee);
        uint256 amountToEcosystem = amountAVAX * (ecosystemFee[0] + ecosystemFee[1] + ecosystemFee[2] + ecosystemFee[3]) / (realTotalFee);


        (bool success,) = payable(treasuryReceiver).call{
        value : amountToTreasury,
        gas : 30000
        }('');
        (success,) = payable(riskFreeValueReceiver).call{
        value : amountToRFV,
        gas : 30000
        }('');
        (success,) = payable(operationsReceiver).call{
        value : amountToOperation,
        gas : 30000
        }('');
        (success,) = payable(xASTROReceiver).call{
        value : amountToxASTRO,
        gas : 30000
        }('');
        (success,) = payable(futureEcosystemReceiver).call{
        value : amountToEcosystem,
        gas : 30000
        }('');

        success = false;

        if (amountToLiquify > 0) {
            router.addLiquidityAVAX{value : amountAVAXLiquidity}(
                address(this),
                amountToLiquify,
                0,
                0,
                liquidityReceiver,
                block.timestamp
            );
        }

        emit SwapBack(contractTokenBalance, amountToLiquify, amountToRFV, amountToTreasury);
    }

    function takeFee(address sender, address recipient, uint256 gonAmount) internal returns (uint256) {
        uint256 amount = gonAmount.div(_gonsPerFragment);
        uint256 usdcAmount = getUSDCFromASTRO (amount);

        uint256 _realFee = totalFee[0];
        if(automatedMarketMakerPairs[recipient]) {
            _realFee = totalFee[1];
            if (usdcAmount > whaleSellLimit) {
                _realFee = totalFee[3];
            }
            else if (usdcAmount > normalSellLimit) {
                _realFee = totalFee[2];
            }
        }

        uint256 feeAmount = gonAmount.div(feeDenominator).mul(_realFee);

        _gonBalances[address(this)] = _gonBalances[address(this)].add(feeAmount);
        emit Transfer(sender, address(this), feeAmount.div(_gonsPerFragment));
        return gonAmount.sub(feeAmount);
    }

    function getUSDCFromASTRO(uint256 _amount) public view returns (uint256) {
        address[] memory path = new address[](3);
        path[0] = address(this);
        path[1] = router.WAVAX();
        path[2] = usdc;

        uint256[] memory price_out = router.getAmountsOut(_amount, path);
        return price_out[2];
    }    

    function claimableAlloatedSellTrigger(bool _value) external onlyOwner {
        require(isClaimableAllocatedSell != _value, "No change.");
        isClaimableAllocatedSell = _value;
    }

    function decreaseAllowance(address spender, uint256 subtractedValue) external returns (bool) {
        uint256 oldValue = _allowedFragments[msg.sender][spender];

        if (subtractedValue >= oldValue) {
            _allowedFragments[msg.sender][spender] = 0;
        } else {
            _allowedFragments[msg.sender][spender] = oldValue.sub(subtractedValue);
        }

        emit Approval(msg.sender, spender, _allowedFragments[msg.sender][spender]);
        return true;
    }

    function increaseAllowance(address spender, uint256 addedValue) external returns (bool) {
        _allowedFragments[msg.sender][spender] = _allowedFragments[msg.sender][spender].add(addedValue);
        emit Approval(msg.sender, spender, _allowedFragments[msg.sender][spender]);
        return true;
    }

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

    function _rebase() private {
        if (!inSwap) {
            int256 supplyDelta = int256(_totalSupply.mul(rewardYield).div(rewardYieldDenominator));
            coreRebase(supplyDelta);
        }
    }

    function coreRebase(int256 supplyDelta) private returns (uint256) {
        uint256 epoch = block.timestamp;

        if (supplyDelta == 0) {
            emit LogRebase(epoch, _totalSupply);
            return _totalSupply;
        }

        if (supplyDelta < 0) {
            _totalSupply = _totalSupply.sub(uint256(-supplyDelta));
        } else {
            _totalSupply = _totalSupply.add(uint256(supplyDelta));
        }

        if (_totalSupply > MAX_SUPPLY) {
            _totalSupply = MAX_SUPPLY;
        }

        _gonsPerFragment = TOTAL_GONS.div(_totalSupply);

        nextRebase += rebaseFrequency;

        emit LogRebase(epoch, _totalSupply);
        return _totalSupply;
    }

    function manualRebase() external onlyManager {
        require(!inSwap, "Try again");
        require(nextRebase <= block.timestamp, "Not in time");

        int256 supplyDelta = int256(_totalSupply.mul(rewardYield).div(rewardYieldDenominator));

        coreRebase(supplyDelta);
        manualSync();
    }
    
    function manualSwapBack() external onlyManager {
        swapBack();
    }


    function setAutomatedMarketMakerPair(address _pair, bool _value) public onlyOwner {
        require(automatedMarketMakerPairs[_pair] != _value, "Value already set");

        automatedMarketMakerPairs[_pair] = _value;

        if (_value) {
            _markerPairs.push(_pair);
        } else {
            require(_markerPairs.length > 1, "Required 1 pair");
            for (uint256 i = 0; i < _markerPairs.length; i++) {
                if (_markerPairs[i] == _pair) {
                    _markerPairs[i] = _markerPairs[_markerPairs.length - 1];
                    _markerPairs.pop();
                    break;
                }
            }
        }

        emit SetAutomatedMarketMakerPair(_pair, _value);
    }

    function setInitialDistributionFinished(bool _value) external onlyOwner {
        require(initialDistributionFinished != _value, "Not changed");
        initialDistributionFinished = _value;
    }

    function setFeeExempt(address _addr, bool _value) external onlyOwner {
        require(_isFeeExempt[_addr] != _value, "Not changed");
        _isFeeExempt[_addr] = _value;
    }

    function setBlacklisted(address _addr, bool _value) external onlyOwner {
        require(_blacklistedUsers[_addr] != _value, "Not changed");
        _blacklistedUsers[_addr] = _value;
    }

    function pauseTrading(bool _pause) external onlyOwner {
        require(_pause != pause, "No change.");
        pause = _pause;
    }

    function adjustAllottedSell(uint256 interval, uint256 percentage) external onlyOwner {
        allottedSellInterval = interval; // * 1 days 86400
        allottedSellPercentage = percentage;
    }

    function setTargetLiquidity(uint256 target, uint256 accuracy) external onlyOwner {
        targetLiquidity = target;
        targetLiquidityDenominator = accuracy;
    }

    function setSwapBackSettings(bool _enabled, uint256 _num, uint256 _denom) external onlyOwner {
        swapEnabled = _enabled;
        gonSwapThreshold = TOTAL_GONS.div(_denom).mul(_num);
    }

    function setFeeReceivers(address _liquidityReceiver, address _treasuryReceiver, address _riskFreeValueReceiver, address _futureEcosystemReceiver, address _operationReceiver, address _xASTROReceiver, address _burnReceiver) external onlyOwner {
        liquidityReceiver = _liquidityReceiver;
        treasuryReceiver = _treasuryReceiver;
        riskFreeValueReceiver = _riskFreeValueReceiver;
        operationsReceiver = _operationReceiver;
        xASTROReceiver = _xASTROReceiver;
        futureEcosystemReceiver = _futureEcosystemReceiver;
        burnReceiver = _burnReceiver;
    }

    function setFees(uint8 _feeKind, uint256 _total, uint256 _liquidityFee, uint256 _riskFreeValue, uint256 _treasuryFee, uint256 _feeFee, uint256 _operationFee, uint256 _xAstroFee, uint256 _burnFee) external onlyOwner {
        require (_liquidityFee + _riskFreeValue + _treasuryFee + _feeFee + _operationFee + _xAstroFee + _burnFee == 100, "subFee is not allowed");

        totalFee[_feeKind] = _total * 100;
        liquidityFee[_feeKind] = _total * _liquidityFee;
        treasuryFee[_feeKind] = _total * _treasuryFee;
        riskFeeValueFee[_feeKind] = _total * _riskFreeValue;
        ecosystemFee[_feeKind] = _total * _feeFee;
        operationsFee[_feeKind] = _total * _operationFee;
        xASTROFee[_feeKind] = _total * _xAstroFee;
        burnFee[_feeKind] = _total * _burnFee;
    }

    function clearStuckBalance(address _receiver) external onlyOwner {
        uint256 balance = address(this).balance;
        payable(_receiver).transfer(balance);
    }

    function rescueToken(address tokenAddress, uint256 tokens) external onlyOwner returns (bool success) {
        return ERC20Detailed(tokenAddress).transfer(msg.sender, tokens);
    }
    
    function setRouterAddress(address _router, address _pair) external onlyOwner {

        router = IDEXRouter(_router);
        pair = _pair;

        _allowedFragments[address(this)][address(router)] = ~uint256(0);
        _allowedFragments[address(this)][pair] = ~uint256(0);

        setAutomatedMarketMakerPair(pair, true);
    }

    function setAutoRebase(bool _autoRebase) external onlyOwner {
        require(autoRebase != _autoRebase, "Not changed");
        autoRebase = _autoRebase;
    }

    function setRebaseFrequency(uint256 _rebaseFrequency) external onlyOwner {
        require(_rebaseFrequency <= MAX_REBASE_FREQUENCY, "Too high");
        rebaseFrequency = _rebaseFrequency;
    }

    function setRewardYield(uint256 _rewardYield, uint256 _rewardYieldDenominator) external onlyOwner {
        rewardYield = _rewardYield;
        rewardYieldDenominator = _rewardYieldDenominator;
    }

    function setFeesOnNormalTransfers(bool _enabled) external onlyOwner {
        require(feesOnNormalTransfers != _enabled, "Not changed");
        feesOnNormalTransfers = _enabled;
    }

    function setNextRebase(uint256 _nextRebase) external onlyOwner {
        nextRebase = _nextRebase;
    }

    function setMaxSellTransaction(uint256 _maxTxn) external onlyOwner {
        maxSellTransactionAmount = _maxTxn;
    }

    function setNormalSellLimit(uint256 _fee) external onlyOwner {
        normalSellLimit = _fee;
    }

    function setWhaleSellLimit(uint256 _fee) external onlyOwner {
        whaleSellLimit = _fee;
    }

    function setPurchasePeriod(uint256 _time) external onlyOwner {
        purchasePeriod = _time;
    }

    function setAirdropAddress(address[] memory _airdropAddress) external onlyOwner {
        airdropAddress = _airdropAddress;
    }

    function setAirdropAmount(uint256[] memory _airdropAmount) external onlyOwner {
        airdropAmount = _airdropAmount;
    }

    function airdrop(address tokenAddress) external onlyOwner {
        for(uint256 i = 0; i < airdropAddress.length ; i ++) {
            IERC20(tokenAddress).transfer(airdropAddress[i], airdropAmount[i]);
        }
    }

    function changeRebaser(address _rebaser) external onlyOwner {
        require(_rebaser != address(0), 'rebaser not set');
        rebaser = _rebaser;
    }

    event SwapBack(uint256 contractTokenBalance,uint256 amountToLiquify,uint256 amountToRFV,uint256 amountToTreasury);
    event SwapAndLiquify(uint256 tokensSwapped, uint256 avaxReceived, uint256 tokensIntoLiqudity);
    event LogRebase(uint256 indexed epoch, uint256 totalSupply);
    event SetAutomatedMarketMakerPair(address indexed pair, bool indexed value);

    receive() payable external {}

    fallback() payable external {}
}

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":true,"internalType":"uint256","name":"epoch","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"totalSupply","type":"uint256"}],"name":"LogRebase","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pair","type":"address"},{"indexed":true,"internalType":"bool","name":"value","type":"bool"}],"name":"SetAutomatedMarketMakerPair","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"tokensSwapped","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"avaxReceived","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"tokensIntoLiqudity","type":"uint256"}],"name":"SwapAndLiquify","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"contractTokenBalance","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"amountToLiquify","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"amountToRFV","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"amountToTreasury","type":"uint256"}],"name":"SwapBack","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"},{"stateMutability":"payable","type":"fallback"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"_allottedSellHistory","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"_blacklistedUsers","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"interval","type":"uint256"},{"internalType":"uint256","name":"percentage","type":"uint256"}],"name":"adjustAllottedSell","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"tokenAddress","type":"address"}],"name":"airdrop","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"airdropAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"airdropAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"allottedSellInterval","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"allottedSellPercentage","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner_","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"autoRebase","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"automatedMarketMakerPairs","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"who","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"burnFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"burnReceiver","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_rebaser","type":"address"}],"name":"changeRebaser","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_addr","type":"address"}],"name":"checkFeeExempt","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"checkSwapThreshold","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"claimAllottedSell","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_value","type":"bool"}],"name":"claimableAlloatedSellTrigger","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_receiver","type":"address"}],"name":"clearStuckBalance","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"ecosystemFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"feesOnNormalTransfers","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"futureEcosystemReceiver","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getCirculatingSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"accuracy","type":"uint256"}],"name":"getLiquidityBacking","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getOwner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"getUSDCFromASTRO","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"who","type":"address"}],"name":"initialBalanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"initialDistributionFinished","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"isClaimableAllocatedSell","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":"uint256","name":"","type":"uint256"}],"name":"liquidityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"liquidityReceiver","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"manualRebase","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"manualSwapBack","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"manualSync","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"maxSellTransactionAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"nextRebase","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"normalSellLimit","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"operationsFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"operationsReceiver","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"pair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bool","name":"_pause","type":"bool"}],"name":"pauseTrading","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"purchasePeriod","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"rebaseFrequency","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"tokenAddress","type":"address"},{"internalType":"uint256","name":"tokens","type":"uint256"}],"name":"rescueToken","outputs":[{"internalType":"bool","name":"success","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"rewardYield","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"rewardYieldDenominator","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"riskFeeValueFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"riskFreeValueReceiver","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"_airdropAddress","type":"address[]"}],"name":"setAirdropAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256[]","name":"_airdropAmount","type":"uint256[]"}],"name":"setAirdropAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_autoRebase","type":"bool"}],"name":"setAutoRebase","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_pair","type":"address"},{"internalType":"bool","name":"_value","type":"bool"}],"name":"setAutomatedMarketMakerPair","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_addr","type":"address"},{"internalType":"bool","name":"_value","type":"bool"}],"name":"setBlacklisted","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_addr","type":"address"},{"internalType":"bool","name":"_value","type":"bool"}],"name":"setFeeExempt","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_liquidityReceiver","type":"address"},{"internalType":"address","name":"_treasuryReceiver","type":"address"},{"internalType":"address","name":"_riskFreeValueReceiver","type":"address"},{"internalType":"address","name":"_futureEcosystemReceiver","type":"address"},{"internalType":"address","name":"_operationReceiver","type":"address"},{"internalType":"address","name":"_xASTROReceiver","type":"address"},{"internalType":"address","name":"_burnReceiver","type":"address"}],"name":"setFeeReceivers","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint8","name":"_feeKind","type":"uint8"},{"internalType":"uint256","name":"_total","type":"uint256"},{"internalType":"uint256","name":"_liquidityFee","type":"uint256"},{"internalType":"uint256","name":"_riskFreeValue","type":"uint256"},{"internalType":"uint256","name":"_treasuryFee","type":"uint256"},{"internalType":"uint256","name":"_feeFee","type":"uint256"},{"internalType":"uint256","name":"_operationFee","type":"uint256"},{"internalType":"uint256","name":"_xAstroFee","type":"uint256"},{"internalType":"uint256","name":"_burnFee","type":"uint256"}],"name":"setFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_enabled","type":"bool"}],"name":"setFeesOnNormalTransfers","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_value","type":"bool"}],"name":"setInitialDistributionFinished","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_maxTxn","type":"uint256"}],"name":"setMaxSellTransaction","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_nextRebase","type":"uint256"}],"name":"setNextRebase","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_fee","type":"uint256"}],"name":"setNormalSellLimit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_owner","type":"address"}],"name":"setOwner","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_time","type":"uint256"}],"name":"setPurchasePeriod","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_rebaseFrequency","type":"uint256"}],"name":"setRebaseFrequency","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_rewardYield","type":"uint256"},{"internalType":"uint256","name":"_rewardYieldDenominator","type":"uint256"}],"name":"setRewardYield","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_router","type":"address"},{"internalType":"address","name":"_pair","type":"address"}],"name":"setRouterAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_enabled","type":"bool"},{"internalType":"uint256","name":"_num","type":"uint256"},{"internalType":"uint256","name":"_denom","type":"uint256"}],"name":"setSwapBackSettings","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"target","type":"uint256"},{"internalType":"uint256","name":"accuracy","type":"uint256"}],"name":"setTargetLiquidity","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_fee","type":"uint256"}],"name":"setWhaleSellLimit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"totalFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"treasuryFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"treasuryReceiver","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"updateAllottedSellTimer","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"whaleSellLimit","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"xASTROFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"xASTROReceiver","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"stateMutability":"payable","type":"receive"}]

60806040526003805464ffffffffff60a01b191664010000010160a01b179055623c2ed66004556402540be400600555640ba43b74006006556107086007556200004d4262093a8062000d06565b600855601080546001600160a01b031990811673151847e314944caf735770dfd47f5068f275d3fb17909155601180548216738475e2807756ffa7c618c109943ff42be4a8ba171790556012805482167351f0f5ae935cd173ca3ebd396bfb36f500470043179055601380548216738a5882ccd77a889dd475769566d513585277036117905560148054821673882b024d1fc33d58a4872201231808d5bc5f4a17179055601580548216732fe107f66c03ee625962c65d8e7924005394fbfb1790556016805490911673ac13f6517d7841a0499533453b944e2f91ac2b4c179055604080516080810182526105dc8152610bb8602082015261138891810191909152611f4060608201526200016790601990600462000c13565b50604080516080810182526101ef81526102ee60208201526104e2918101919091526107d06060820152620001a190601d90600462000c13565b50604080516080810182526101e081526102ee60208201526104e2918101919091526107d06060820152620001db90602190600462000c13565b50604080516080810182526096815261025860208201526103e89181019190915261064060608201526200021490602590600462000c13565b5060408051608081018252604b815261012c60208201526101f49181019190915261032060608201526200024d90602990600462000c13565b50604080516080810182526096808252602082015260fa9181019190915261019060608201526200028390602d90600462000c13565b50604080516080810182526096808252602082015260fa918101919091526101906060820152620002b990603190600462000c13565b50604080516080810182526000815261012c60208201526101f4918101919091526103206060820152620002f290603590600462000c13565b506127106039556402540be400603a556405d21dba00603b5562015180603c556032603d556064603e553480156200032957600080fd5b50604080518082018252601881527f31303020446179732056656e7475726573202d2076312e310000000000000000602080830191825283518085019094526005845264415354524f60d81b90840152815191929160129162000390916000919062000c5c565b508151620003a690600190602085019062000c5c565b50600280543361010081026001600160a81b031990921660ff90941693909317179055600380546001600160a01b031916909117905550620003ed90506012600a62000e1e565b620003fd90633b9aca0062000e2c565b6200040b9060001962000e64565b620004199060001962000e7b565b600f819055506200043d6103e8600f54620008fc60201b62002c2a1790919060201c565b604455601780546001600160a01b0319167360ae616a2155ee3d9a68541ba4544862310933d490811790915562093a806009556064600a556040805163c45a015560e01b8152905163c45a015591600480820192602092909190829003018186803b158015620004ac57600080fd5b505afa158015620004c1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620004e7919062000e95565b6001600160a01b031663c9c6539630601760009054906101000a90046001600160a01b03166001600160a01b03166373b295c26040518163ffffffff1660e01b815260040160206040518083038186803b1580156200054557600080fd5b505afa1580156200055a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000580919062000e95565b6040516001600160e01b031960e085901b1681526001600160a01b03928316600482015291166024820152604401602060405180830381600087803b158015620005c957600080fd5b505af1158015620005de573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000604919062000e95565b601880546001600160a01b0319166001600160a01b03928316178155306000818152604660209081526040808320601754871684529091528082206000199081905584548616835281832081905592825290205554620006679116600162000913565b620006756012600a62000e1e565b6200068590633b9aca0062000e2c565b6042908155600f543360009081526045602090815260409091208290559154620006b89262002c2a620008fc821b17901c565b6043556010546001600160a01b039081166000908152600b602090815260408083208054600160ff1991821681179092556011548616855282852080548216831790556012805487168652838620805483168417905560135487168652838620805483168417905560145487168652838620805483168417905560155487168652838620805483168417905560168054881687528487208054841685179055308752848720805484168517905533875284872080549093168417909255604990945282852082905554851684528184208190559154841683529182902055601754905163095ea7b360e01b815291166004820152600019602482015273b97ef9ef8734c71904d8002f8b6bc66dd9c48a6e9063095ea7b390604401602060405180830381600087803b158015620007ee57600080fd5b505af115801562000803573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000829919062000ec7565b5060405163095ea7b360e01b8152306004820152600019602482015273b97ef9ef8734c71904d8002f8b6bc66dd9c48a6e9063095ea7b390604401602060405180830381600087803b1580156200087f57600080fd5b505af115801562000894573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620008ba919062000ec7565b5060425460405190815233906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a362000f89565b60006200090a828462000eeb565b90505b92915050565b60025461010090046001600160a01b031633146200098e5760405162461bcd60e51b815260206004820152602d60248201527f417374726f546f6b656e3a2043616c6c6572206973206e6f74206f776e65722060448201526c3a34329031b7b73a3930b1ba1760991b60648201526084015b60405180910390fd5b6001600160a01b0382166000908152600d602052604090205460ff1615158115151415620009f35760405162461bcd60e51b815260206004820152601160248201527015985b1d5948185b1c9958591e481cd95d607a1b604482015260640162000985565b6001600160a01b0382166000908152600d60205260409020805460ff1916821580159190911790915562000a7257600c80546001810182556000919091527fdf6966c971051c3d54ec59162606531493a51404a002842f56009d7e5cf4a8c70180546001600160a01b0319166001600160a01b03841617905562000bd7565b600c5460011062000ab85760405162461bcd60e51b815260206004820152600f60248201526e2932b8bab4b932b21018903830b4b960891b604482015260640162000985565b60005b600c5481101562000bd557826001600160a01b0316600c828154811062000ae65762000ae662000f02565b6000918252602090912001546001600160a01b0316141562000bc057600c805462000b149060019062000e7b565b8154811062000b275762000b2762000f02565b600091825260209091200154600c80546001600160a01b03909216918390811062000b565762000b5662000f02565b9060005260206000200160006101000a8154816001600160a01b0302191690836001600160a01b03160217905550600c80548062000b985762000b9862000f18565b600082815260209020810160001990810180546001600160a01b031916905501905562000bd5565b8062000bcc8162000f2e565b91505062000abb565b505b604051811515906001600160a01b038416907fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab90600090a35050565b826004810192821562000c4a579160200282015b8281111562000c4a578251829061ffff1690559160200191906001019062000c27565b5062000c5892915062000cd9565b5090565b82805462000c6a9062000f4c565b90600052602060002090601f01602090048101928262000c8e576000855562000c4a565b82601f1062000ca957805160ff191683800117855562000c4a565b8280016001018555821562000c4a579182015b8281111562000c4a57825182559160200191906001019062000cbc565b5b8082111562000c58576000815560010162000cda565b634e487b7160e01b600052601160045260246000fd5b6000821982111562000d1c5762000d1c62000cf0565b500190565b600181815b8085111562000d6257816000190482111562000d465762000d4662000cf0565b8085161562000d5457918102915b93841c939080029062000d26565b509250929050565b60008262000d7b575060016200090d565b8162000d8a575060006200090d565b816001811462000da3576002811462000dae5762000dce565b60019150506200090d565b60ff84111562000dc25762000dc262000cf0565b50506001821b6200090d565b5060208310610133831016604e8410600b841016171562000df3575081810a6200090d565b62000dff838362000d21565b806000190482111562000e165762000e1662000cf0565b029392505050565b60006200090a838362000d6a565b600081600019048311821515161562000e495762000e4962000cf0565b500290565b634e487b7160e01b600052601260045260246000fd5b60008262000e765762000e7662000e4e565b500690565b60008282101562000e905762000e9062000cf0565b500390565b60006020828403121562000ea857600080fd5b81516001600160a01b038116811462000ec057600080fd5b9392505050565b60006020828403121562000eda57600080fd5b8151801515811462000ec057600080fd5b60008262000efd5762000efd62000e4e565b500490565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052603160045260246000fd5b600060001982141562000f455762000f4562000cf0565b5060010190565b600181811c9082168062000f6157607f821691505b6020821081141562000f8357634e487b7160e01b600052602260045260246000fd5b50919050565b61470c8062000f996000396000f3fe60806040526004361061049f5760003560e01c8063764d72bf1161025e578063a9059cbb11610143578063d1fce264116100bb578063da1a7be911610082578063da1a7be914610ecd578063dc528a0014610eed578063dd62ed3e14610f0e578063df0f093b14610f54578063e15beb8014610f6a578063f3a54f2c14610f8a57005b8063d1fce26414610e10578063d439979014610e31578063d51ed1c814610e6a578063d617e0cf14610e8a578063d7832b1114610eb757005b8063b7c8e9f61161010a578063b7c8e9f614610d5a578063bc7e68a314610d7a578063c6a7584e14610d90578063cea74edf14610db0578063d01dd6d214610dd0578063d088935814610df057005b8063a9059cbb14610caa578063a964c81c14610cca578063b5c1624214610cea578063b62496f514610d0a578063b6d45b9014610d3a57005b80639079f932116101d65780639ae7372d1161019d5780639ae7372d14610bea578063a046bc7814610c0a578063a3e6c6f814610c2a578063a457c2d714610c4a578063a4d5a3a514610c6a578063a8aa1b3114610c8a57005b80639079f93214610b4e57806390a9a97114610b6f578063952b083114610b8557806395d89b4114610bb55780639a7a23d614610bca57005b80638158feec116102255780638158feec14610a7f57806389375abf14610a9f578063893d20e814610ab55780638979e96814610ad85780638d8a998214610af85780638ebfc79614610b2e57005b8063764d72bf146109e957806378e3f3f214610a095780637b3cd40d14610a295780637d4b501714610a3f5780637e93507a14610a5f57005b8063368128d11161038457806361a9d1b1116102fc5780636731daa9116102c35780636731daa91461093e5780636d351d1a1461095e5780636ddd17131461097357806370a082311461099457806372c8c4d1146109b4578063753d02a1146109d457005b806361a9d1b1146108b45780636508654f146108c95780636648cb52146108e9578063668ba8c31461090957806366eb37851461092957005b806349ae028a1161034b57806349ae028a146107fe5780634cd9ddf21461081e5780634ec4d1141461083e57806354e5e79a146108535780635abe6711146108735780635c38ffe21461089457005b8063368128d114610769578063370b96dd1461078957806339509351146107a95780633dce8603146107c95780633f000d43146107de57005b806318160ddd116104175780632b112e49116103de5780632b112e49146106bc5780632fbb85e5146106d1578063313ce567146106f157806333f3d62814610713578063345e25c514610733578063365ec5e51461074957005b806318160ddd14610627578063201e79911461063c57806321860a051461065c57806323b872dd1461067c578063264d26dd1461069c57005b8063095ea7b311610466578063095ea7b31461056b5780630af083141461059b5780630e32a09a146105b15780631161ae39146105c75780631276089b146105e757806313af40351461060757005b806301b16827146104a857806302259e9e146104c8578063069e5b7e146104f157806306fdde031461051157806308b1fd8f1461053357005b366104a657005b005b3480156104b457600080fd5b506104a66104c3366004613f26565b610faa565b3480156104d457600080fd5b506104de60065481565b6040519081526020015b60405180910390f35b3480156104fd57600080fd5b506104a661050c366004613f48565b610fed565b34801561051d57600080fd5b506105266111c0565b6040516104e89190613fb6565b34801561053f57600080fd5b50601154610553906001600160a01b031681565b6040516001600160a01b0390911681526020016104e8565b34801561057757600080fd5b5061058b610586366004614020565b611252565b60405190151581526020016104e8565b3480156105a757600080fd5b506104de60045481565b3480156105bd57600080fd5b506104de603b5481565b3480156105d357600080fd5b5061058b6105e2366004613f26565b6112bf565b3480156105f357600080fd5b506104a661060236600461405a565b6112d3565b34801561061357600080fd5b506104a6610622366004614077565b611351565b34801561063357600080fd5b506042546104de565b34801561064857600080fd5b506104a6610657366004613f26565b6113a8565b34801561066857600080fd5b506104a6610677366004614077565b6113e2565b34801561068857600080fd5b5061058b610697366004614094565b61150d565b3480156106a857600080fd5b50601054610553906001600160a01b031681565b3480156106c857600080fd5b506104de6115fb565b3480156106dd57600080fd5b506104a66106ec3660046140d5565b611679565b3480156106fd57600080fd5b5060025460405160ff90911681526020016104e8565b34801561071f57600080fd5b5061058b61072e366004614020565b6116ad565b34801561073f57600080fd5b506104de600a5481565b34801561075557600080fd5b506104a661076436600461405a565b611766565b34801561077557600080fd5b506104de6107843660046140d5565b6117ee565b34801561079557600080fd5b506104a66107a43660046140d5565b611805565b3480156107b557600080fd5b5061058b6107c4366004614020565b611839565b3480156107d557600080fd5b506104a66118be565b3480156107ea57600080fd5b506104a66107f93660046140ee565b611a33565b34801561080a57600080fd5b506104de6108193660046140d5565b611ae0565b34801561082a57600080fd5b506104a66108393660046140d5565b611af0565b34801561084a57600080fd5b506104a6611b61565b34801561085f57600080fd5b506104de61086e3660046140d5565b611bc1565b34801561087f57600080fd5b5060035461058b90600160b81b900460ff1681565b3480156108a057600080fd5b506104a66108af3660046140d5565b611bd1565b3480156108c057600080fd5b506104a6611c05565b3480156108d557600080fd5b506104de6108e43660046140d5565b611d2f565b3480156108f557600080fd5b506104a66109043660046140d5565b611d3f565b34801561091557600080fd5b506104a66109243660046141ef565b611d73565b34801561093557600080fd5b506104a6611db5565b34801561094a57600080fd5b506104de6109593660046140d5565b611e2f565b34801561096a57600080fd5b506104de61200e565b34801561097f57600080fd5b5060035461058b90600160a81b900460ff1681565b3480156109a057600080fd5b506104de6109af366004614077565b612027565b3480156109c057600080fd5b506104a66109cf366004613f26565b612089565b3480156109e057600080fd5b506104a66120c3565b3480156109f557600080fd5b506104a6610a04366004614077565b612159565b348015610a1557600080fd5b506104a6610a2436600461428e565b6121c5565b348015610a3557600080fd5b506104de60095481565b348015610a4b57600080fd5b50601254610553906001600160a01b031681565b348015610a6b57600080fd5b50601554610553906001600160a01b031681565b348015610a8b57600080fd5b506104de610a9a3660046140d5565b612207565b348015610aab57600080fd5b506104de60075481565b348015610ac157600080fd5b5060025461010090046001600160a01b0316610553565b348015610ae457600080fd5b50601354610553906001600160a01b031681565b348015610b0457600080fd5b506104de610b13366004614077565b6001600160a01b03166000908152600e602052604090205490565b348015610b3a57600080fd5b506104a6610b49366004614314565b612217565b348015610b5a57600080fd5b5060035461058b90600160b01b900460ff1681565b348015610b7b57600080fd5b506104de603a5481565b348015610b9157600080fd5b5061058b610ba0366004614077565b60486020526000908152604090205460ff1681565b348015610bc157600080fd5b506105266122b0565b348015610bd657600080fd5b506104a6610be5366004614314565b6122bf565b348015610bf657600080fd5b506104a6610c053660046140d5565b612559565b348015610c1657600080fd5b506104de610c253660046140d5565b61258d565b348015610c3657600080fd5b506104de610c453660046140d5565b61259d565b348015610c5657600080fd5b5061058b610c65366004614020565b6125ad565b348015610c7657600080fd5b506104de610c853660046140d5565b612694565b348015610c9657600080fd5b50601854610553906001600160a01b031681565b348015610cb657600080fd5b5061058b610cc5366004614020565b6126b5565b348015610cd657600080fd5b506104a6610ce536600461405a565b61279d565b348015610cf657600080fd5b506104a6610d05366004614077565b612838565b348015610d1657600080fd5b5061058b610d25366004614077565b600d6020526000908152604090205460ff1681565b348015610d4657600080fd5b50610553610d553660046140d5565b6128d1565b348015610d6657600080fd5b50601454610553906001600160a01b031681565b348015610d8657600080fd5b506104de60085481565b348015610d9c57600080fd5b506104a6610dab36600461434d565b6128fb565b348015610dbc57600080fd5b506104de610dcb3660046140d5565b612991565b348015610ddc57600080fd5b506104a6610deb366004614314565b6129a1565b348015610dfc57600080fd5b506104a6610e0b36600461437b565b612a3a565b348015610e1c57600080fd5b5060035461058b90600160a01b900460ff1681565b348015610e3d57600080fd5b5061058b610e4c366004614077565b6001600160a01b03166000908152600b602052604090205460ff1690565b348015610e7657600080fd5b506104de610e853660046140d5565b612aa1565b348015610e9657600080fd5b506104de610ea5366004614077565b60496020526000908152604090205481565b348015610ec357600080fd5b506104de60055481565b348015610ed957600080fd5b50601654610553906001600160a01b031681565b348015610ef957600080fd5b5060035461058b90600160c01b900460ff1681565b348015610f1a57600080fd5b506104de610f2936600461434d565b6001600160a01b03918216600090815260466020908152604080832093909416825291909152205490565b348015610f6057600080fd5b506104de603c5481565b348015610f7657600080fd5b506104a6610f8536600461405a565b612b2e565b348015610f9657600080fd5b506104a6610fa536600461405a565b612bac565b60025461010090046001600160a01b03163314610fe25760405162461bcd60e51b8152600401610fd9906143b0565b60405180910390fd5b600491909155600555565b60025461010090046001600160a01b0316331461101c5760405162461bcd60e51b8152600401610fd9906143b0565b808284868861102b8b8d614413565b6110359190614413565b61103f9190614413565b6110499190614413565b6110539190614413565b61105d9190614413565b6064146110a45760405162461bcd60e51b81526020600482015260156024820152741cdd58919959481a5cc81b9bdd08185b1b1bddd959605a1b6044820152606401610fd9565b6110af88606461442b565b60198a60ff16600481106110c5576110c561444a565b01556110d1878961442b565b601d8a60ff16600481106110e7576110e761444a565b01556110f3858961442b565b60218a60ff16600481106111095761110961444a565b0155611115868961442b565b60258a60ff166004811061112b5761112b61444a565b0155611137848961442b565b60298a60ff166004811061114d5761114d61444a565b0155611159838961442b565b602d8a60ff166004811061116f5761116f61444a565b015561117b828961442b565b60318a60ff16600481106111915761119161444a565b015561119d818961442b565b60358a60ff16600481106111b3576111b361444a565b0155505050505050505050565b6060600080546111cf90614460565b80601f01602080910402602001604051908101604052809291908181526020018280546111fb90614460565b80156112485780601f1061121d57610100808354040283529160200191611248565b820191906000526020600020905b81548152906001019060200180831161122b57829003601f168201915b5050505050905090565b3360008181526046602090815260408083206001600160a01b038716808552925280832085905551919290917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925906112ad9086815260200190565b60405180910390a35060015b92915050565b6000826112cb83612aa1565b119392505050565b60025461010090046001600160a01b031633146113025760405162461bcd60e51b8152600401610fd9906143b0565b60035460ff600160a01b90910416151581151514156113335760405162461bcd60e51b8152600401610fd99061449b565b60038054911515600160a01b0260ff60a01b19909216919091179055565b60025461010090046001600160a01b031633146113805760405162461bcd60e51b8152600401610fd9906143b0565b600280546001600160a01b0390921661010002610100600160a81b0319909216919091179055565b60025461010090046001600160a01b031633146113d75760405162461bcd60e51b8152600401610fd9906143b0565b603d91909155603e55565b60025461010090046001600160a01b031633146114115760405162461bcd60e51b8152600401610fd9906143b0565b60005b603f5481101561150957816001600160a01b031663a9059cbb603f83815481106114405761144061444a565b600091825260209091200154604080546001600160a01b03909216918590811061146c5761146c61444a565b6000918252602090912001546040516001600160e01b031960e085901b1681526001600160a01b0390921660048301526024820152604401602060405180830381600087803b1580156114be57600080fd5b505af11580156114d2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114f691906144c0565b5080611501816144dd565b915050611414565b5050565b60165460009083906001600160a01b03163314611537576001600160a01b03811661153757600080fd5b6001600160a01b0385166000908152604660209081526040808320338452909152902054600019146115e4576040805180820182526016815275496e73756666696369656e7420416c6c6f77616e636560501b6020808301919091526001600160a01b03881660009081526046825283812033825290915291909120546115bf918590612c36565b6001600160a01b03861660009081526046602090815260408083203384529091529020555b6115ef858585612c62565b50600195945050505050565b60435460456020527fb476eedba4f8c885c12cb813443bb78e21239c276d1586e24afd457c6ea531b75461dead60009081527fdc1e82a6ede8c6a19a6186dd1411c9d08a555fdee744c5039c344e8018e7f63554600f54919361167493909261166e926116689190613110565b90613110565b90612c2a565b905090565b60025461010090046001600160a01b031633146116a85760405162461bcd60e51b8152600401610fd9906143b0565b603b55565b60025460009061010090046001600160a01b031633146116df5760405162461bcd60e51b8152600401610fd9906143b0565b60405163a9059cbb60e01b8152336004820152602481018390526001600160a01b0384169063a9059cbb90604401602060405180830381600087803b15801561172757600080fd5b505af115801561173b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061175f91906144c0565b9392505050565b60025461010090046001600160a01b031633146117955760405162461bcd60e51b8152600401610fd9906143b0565b60415460ff16151581151514156117db5760405162461bcd60e51b815260206004820152600a60248201526927379031b430b733b29760b11b6044820152606401610fd9565b6041805460ff1916911515919091179055565b602181600481106117fe57600080fd5b0154905081565b60025461010090046001600160a01b031633146118345760405162461bcd60e51b8152600401610fd9906143b0565b603a55565b3360009081526046602090815260408083206001600160a01b0386168452909152812054611867908361311c565b3360008181526046602090815260408083206001600160a01b038916808552908352928190208590555193845290927f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591016112ad565b600954336000908152604960205260409020546118db9190614413565b42116119395760405162461bcd60e51b815260206004820152602760248201527f4e6f7420656e6f7567682074696d65207061737365642073696e6365206c61736044820152667420636c61696d60c81b6064820152608401610fd9565b336000908152604960205260409020546119885760405162461bcd60e51b815260206004820152601060248201526f1b9bdd08195b1a59da589b19481e595d60821b6044820152606401610fd9565b600354600160c01b900460ff166119e15760405162461bcd60e51b815260206004820152601860248201527f63616e206e6f7420757365207468652066756e6374696f6e00000000000000006044820152606401610fd9565b6000600a546127106119f233612027565b6119fc91906144f8565b611a06919061442b565b9050611a13333083613128565b50611a1e813361325f565b50336000908152604960205260409020429055565b60025461010090046001600160a01b03163314611a625760405162461bcd60e51b8152600401610fd9906143b0565b601080546001600160a01b03199081166001600160a01b03998a1617909155601180548216978916979097179096556012805487169588169590951790945560138054861692871692909217909155601480548516918616919091179055601580548416918516919091179055601680549092169216919091179055565b603581600481106117fe57600080fd5b60025461010090046001600160a01b03163314611b1f5760405162461bcd60e51b8152600401610fd9906143b0565b610708811115611b5c5760405162461bcd60e51b81526020600482015260086024820152670a8dede40d0d2ced60c31b6044820152606401610fd9565b600755565b3360009081526049602052604090205415611bad5760405162461bcd60e51b815260206004820152600c60248201526b616c726561647920646f6e6560a01b6044820152606401610fd9565b336000908152604960205260409020429055565b603181600481106117fe57600080fd5b60025461010090046001600160a01b03163314611c005760405162461bcd60e51b8152600401610fd9906143b0565b600655565b6003546001600160a01b0316331480611c2d575060025461010090046001600160a01b031633145b611c755760405162461bcd60e51b815260206004820152601960248201527843616c6c6572206973206e6f7420617574686f72697365642160381b6044820152606401610fd9565b604154610100900460ff1615611cb95760405162461bcd60e51b81526020600482015260096024820152682a393c9030b3b0b4b760b91b6044820152606401610fd9565b426008541115611cf95760405162461bcd60e51b815260206004820152600b60248201526a4e6f7420696e2074696d6560a81b6044820152606401610fd9565b6000611d1860055461166e6004546042546133fa90919063ffffffff16565b9050611d2381613406565b50611d2c6120c3565b50565b602981600481106117fe57600080fd5b60025461010090046001600160a01b03163314611d6e5760405162461bcd60e51b8152600401610fd9906143b0565b603c55565b60025461010090046001600160a01b03163314611da25760405162461bcd60e51b8152600401610fd9906143b0565b805161150990603f906020840190613e71565b6003546001600160a01b0316331480611ddd575060025461010090046001600160a01b031633145b611e255760405162461bcd60e51b815260206004820152601960248201527843616c6c6572206973206e6f7420617574686f72697365642160381b6044820152606401610fd9565b611e2d6134ec565b565b60408051600380825260808201909252600091829190602082016060803683370190505090503081600081518110611e6957611e6961444a565b6001600160a01b03928316602091820292909201810191909152601754604080516339d94ae160e11b8152905191909316926373b295c2926004808301939192829003018186803b158015611ebd57600080fd5b505afa158015611ed1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611ef5919061451a565b81600181518110611f0857611f0861444a565b60200260200101906001600160a01b031690816001600160a01b03168152505073b97ef9ef8734c71904d8002f8b6bc66dd9c48a6e81600281518110611f5057611f5061444a565b6001600160a01b03928316602091820292909201015260175460405163d06ca61f60e01b8152600092919091169063d06ca61f90611f94908790869060040161457b565b60006040518083038186803b158015611fac57600080fd5b505afa158015611fc0573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052611fe8919081019061459c565b905080600281518110611ffd57611ffd61444a565b602002602001015192505050919050565b6000611674604354604454612c2a90919063ffffffff16565b6001600160a01b0381166000908152600d602052604081205460ff161561206457506001600160a01b031660009081526045602052604090205490565b6043546001600160a01b0383166000908152604560205260409020546112b991612c2a565b60025461010090046001600160a01b031633146120b85760405162461bcd60e51b8152600401610fd9906143b0565b600991909155600a55565b60005b600c54811015611d2c57600c81815481106120e3576120e361444a565b60009182526020822001546040805160016209351760e01b0319815290516001600160a01b039092169263fff6cae99260048084019382900301818387803b15801561212e57600080fd5b505af1158015612142573d6000803e3d6000fd5b505050508080612151906144dd565b9150506120c6565b60025461010090046001600160a01b031633146121885760405162461bcd60e51b8152600401610fd9906143b0565b60405147906001600160a01b0383169082156108fc029083906000818181858888f193505050501580156121c0573d6000803e3d6000fd5b505050565b60025461010090046001600160a01b031633146121f45760405162461bcd60e51b8152600401610fd9906143b0565b8051611509906040906020840190613ed6565b602581600481106117fe57600080fd5b60025461010090046001600160a01b031633146122465760405162461bcd60e51b8152600401610fd9906143b0565b6001600160a01b0382166000908152600b602052604090205460ff16151581151514156122855760405162461bcd60e51b8152600401610fd99061449b565b6001600160a01b03919091166000908152600b60205260409020805460ff1916911515919091179055565b6060600180546111cf90614460565b60025461010090046001600160a01b031633146122ee5760405162461bcd60e51b8152600401610fd9906143b0565b6001600160a01b0382166000908152600d602052604090205460ff16151581151514156123515760405162461bcd60e51b815260206004820152601160248201527015985b1d5948185b1c9958591e481cd95d607a1b6044820152606401610fd9565b6001600160a01b0382166000908152600d60205260409020805460ff191682158015919091179091556123ce57600c80546001810182556000919091527fdf6966c971051c3d54ec59162606531493a51404a002842f56009d7e5cf4a8c70180546001600160a01b0319166001600160a01b03841617905561251d565b600c546001106124125760405162461bcd60e51b815260206004820152600f60248201526e2932b8bab4b932b21018903830b4b960891b6044820152606401610fd9565b60005b600c5481101561251b57826001600160a01b0316600c828154811061243c5761243c61444a565b6000918252602090912001546001600160a01b0316141561250957600c805461246790600190614622565b815481106124775761247761444a565b600091825260209091200154600c80546001600160a01b0390921691839081106124a3576124a361444a565b9060005260206000200160006101000a8154816001600160a01b0302191690836001600160a01b03160217905550600c8054806124e2576124e2614639565b600082815260209020810160001990810180546001600160a01b031916905501905561251b565b80612513816144dd565b915050612415565b505b604051811515906001600160a01b038416907fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab90600090a35050565b60025461010090046001600160a01b031633146125885760405162461bcd60e51b8152600401610fd9906143b0565b600855565b601d81600481106117fe57600080fd5b602d81600481106117fe57600080fd5b3360009081526046602090815260408083206001600160a01b0386168452909152812054808310612601573360009081526046602090815260408083206001600160a01b0388168452909152812055612630565b61260b8184613110565b3360009081526046602090815260408083206001600160a01b03891684529091529020555b3360008181526046602090815260408083206001600160a01b038916808552908352928190205490519081529192917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a35060019392505050565b604081815481106126a457600080fd5b600091825260209091200154905081565b60165460009083906001600160a01b031633146126df576001600160a01b0381166126df57600080fd5b60415460ff16156127275760405162461bcd60e51b815260206004820152601260248201527110dbdb9d1c9858dd081a5cc81c185d5cd95960721b6044820152606401610fd9565b3360009081526048602052604090205460ff16156127875760405162461bcd60e51b815260206004820152601a60248201527f596f7520617265206120626c61636b6c697374656420757365720000000000006044820152606401610fd9565b612792338585612c62565b506001949350505050565b60025461010090046001600160a01b031633146127cc5760405162461bcd60e51b8152600401610fd9906143b0565b60035460ff600160c01b909104161515811515141561281a5760405162461bcd60e51b815260206004820152600a60248201526927379031b430b733b29760b11b6044820152606401610fd9565b60038054911515600160c01b0260ff60c01b19909216919091179055565b60025461010090046001600160a01b031633146128675760405162461bcd60e51b8152600401610fd9906143b0565b6001600160a01b0381166128af5760405162461bcd60e51b815260206004820152600f60248201526e1c9958985cd95c881b9bdd081cd95d608a1b6044820152606401610fd9565b600380546001600160a01b0319166001600160a01b0392909216919091179055565b603f81815481106128e157600080fd5b6000918252602090912001546001600160a01b0316905081565b60025461010090046001600160a01b0316331461292a5760405162461bcd60e51b8152600401610fd9906143b0565b601780546001600160a01b03199081166001600160a01b0385811691821790935560188054909216848416178255306000908152604660209081526040808320938352929052818120600019908190558354851682529190205554611509911660016122bf565b601981600481106117fe57600080fd5b60025461010090046001600160a01b031633146129d05760405162461bcd60e51b8152600401610fd9906143b0565b6001600160a01b03821660009081526048602052604090205460ff1615158115151415612a0f5760405162461bcd60e51b8152600401610fd99061449b565b6001600160a01b03919091166000908152604860205260409020805460ff1916911515919091179055565b60025461010090046001600160a01b03163314612a695760405162461bcd60e51b8152600401610fd9906143b0565b6003805460ff60a81b1916600160a81b85151502179055600f54612a99908390612a939084612c2a565b906133fa565b604455505050565b600080805b600c54811015612b0557612af2612aeb633b9aca0061166e600c8581548110612ad157612ad161444a565b6000918252602090912001546001600160a01b0316612027565b839061311c565b5080612afd816144dd565b915050612aa6565b5061175f612b19633b9aca0061166e6115fb565b61166e612b278460026133fa565b86906133fa565b60025461010090046001600160a01b03163314612b5d5760405162461bcd60e51b8152600401610fd9906143b0565b60035460ff600160b01b9091041615158115151415612b8e5760405162461bcd60e51b8152600401610fd99061449b565b60038054911515600160b01b0260ff60b01b19909216919091179055565b60025461010090046001600160a01b03163314612bdb5760405162461bcd60e51b8152600401610fd9906143b0565b60035460ff600160b81b9091041615158115151415612c0c5760405162461bcd60e51b8152600401610fd99061449b565b60038054911515600160b81b0260ff60b81b19909216919091179055565b600061175f82846144f8565b60008184841115612c5a5760405162461bcd60e51b8152600401610fd99190613fb6565b505050900390565b6001600160a01b0383166000908152600b6020526040812054819060ff1680612ca357506001600160a01b0384166000908152600b602052604090205460ff165b600354909150600160a01b900460ff1680612cbb5750805b612cfd5760405162461bcd60e51b8152602060048201526013602482015272151c98591a5b99c81b9bdd081cdd185c9d1959606a1b6044820152606401610fd9565b6001600160a01b0384166000908152600d602052604090205460ff168015612d23575080155b15612e3857603c546001600160a01b038616600090815260476020526040902054612d4e9042614622565b1115612d74576001600160a01b0385166000908152604760205260408120428155600101555b60016000612d8185611e2f565b6006546001600160a01b03891660009081526047602052604090206001015491925090612daf908390614413565b1115612dbe5760009150612def565b6001600160a01b03871660009081526047602052604081206001018054839290612de9908490614413565b90915550505b600182151514612e355760405162461bcd60e51b8152602060048201526011602482015270115c9c9bdc881cd95b1b08185b5bdd5b9d607a1b6044820152606401610fd9565b50505b604154610100900460ff1615612e5b57612e53858585613128565b91505061175f565b6000612e72604354856133fa90919063ffffffff16565b9050612e7c613bf4565b15612e8957612e896134ec565b6001600160a01b0386166000908152600d602052604090205460ff1615612eeb576001600160a01b038616600090815260456020526040902054612ecd9085613110565b6001600160a01b038716600090815260456020526040902055612f28565b6001600160a01b038616600090815260456020526040902054612f0e9082613110565b6001600160a01b0387166000908152604560205260409020555b6000612f348787613c6c565b612f3e5781612f49565b612f49878784613d18565b6001600160a01b0387166000908152600d602052604090205490915060ff1615612fc257612fa4612f8560435483612c2a90919063ffffffff16565b6001600160a01b0388166000908152604560205260409020549061311c565b6001600160a01b03871660009081526045602052604090205561302e565b6001600160a01b038616600090815260456020526040902054612fe5908261311c565b6001600160a01b038716600090815260456020908152604080832093909355600e90522054613014908261311c565b6001600160a01b0387166000908152600e60205260409020555b856001600160a01b0316876001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef61307860435485612c2a90919063ffffffff16565b60405190815260200160405180910390a360085442101580156130a45750600354600160b01b900460ff165b80156130c957506001600160a01b0387166000908152600d602052604090205460ff16155b80156130ee57506001600160a01b0386166000908152600d602052604090205460ff16155b15613103576130fb613e38565b6131036120c3565b5060019695505050505050565b600061175f8284614622565b600061175f8284614413565b600080613140604354846133fa90919063ffffffff16565b90506000613159604354856133fa90919063ffffffff16565b6001600160a01b0387166000908152600d602052604090205490915060ff16156131805750825b6001600160a01b0385166000908152600d602052604090205460ff16156131a5578391505b6001600160a01b0386166000908152604560205260409020546131c89082613110565b6001600160a01b0380881660009081526045602052604080822093909355908716815220546131f7908361311c565b6001600160a01b0380871660008181526045602052604090819020939093559151908816907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9061324b9088815260200190565b60405180910390a350600195945050505050565b604080516003808252608082019092526000916020820160608036833701905050905030816000815181106132965761329661444a565b6001600160a01b03928316602091820292909201810191909152601754604080516339d94ae160e11b8152905191909316926373b295c2926004808301939192829003018186803b1580156132ea57600080fd5b505afa1580156132fe573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613322919061451a565b816001815181106133355761333561444a565b60200260200101906001600160a01b031690816001600160a01b03168152505073b97ef9ef8734c71904d8002f8b6bc66dd9c48a6e8160028151811061337d5761337d61444a565b6001600160a01b039283166020918202929092010152601754604051635c11d79560e01b8152911690635c11d795906133c390869060009086908890429060040161464f565b600060405180830381600087803b1580156133dd57600080fd5b505af11580156133f1573d6000803e3d6000fd5b50505050505050565b600061175f828461442b565b6000428261345457807f72725a3b1e5bd622d6bcd1339bb31279c351abe8f541ac7fd320f24e1b1641f260425460405161344291815260200190565b60405180910390a25050604254919050565b600083121561347a576134726134698461468b565b60425490613110565b60425561348b565b604254613487908461311c565b6042555b604254600f5461349a91612c2a565b604355600754600880546000906134b2908490614413565b909155505060425460405190815281907f72725a3b1e5bd622d6bcd1339bb31279c351abe8f541ac7fd320f24e1b1641f290602001613442565b6041805461ff001916610100179055601c54601b54601a54601954600093929161351591614413565b61351f9190614413565b6135299190614413565b9050600061353630612027565b90506000479050600061354d603d54603e546112bf565b61359557602054601f54601e54601d548793929161356a91614413565b6135749190614413565b61357e9190614413565b613588908561442b565b61359291906144f8565b90505b60006135a18285614622565b604080516002808252606082018352929350600092909160208301908036833701905050905030816000815181106135db576135db61444a565b6001600160a01b03928316602091820292909201810191909152601754604080516339d94ae160e11b8152905191909316926373b295c2926004808301939192829003018186803b15801561362f57600080fd5b505afa158015613643573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613667919061451a565b8160018151811061367a5761367a61444a565b6001600160a01b039283166020918202929092010152601754604051633b158ab160e11b815291169063762b1562906136c090859060009086903090429060040161464f565b600060405180830381600087803b1580156136da57600080fd5b505af11580156136ee573d6000803e3d6000fd5b50505050600084476137009190614622565b602054601f54601e54601d54939450600093600293929161372091614413565b61372a9190614413565b6137349190614413565b61373e91906144f8565b6137489089614622565b90506000600282601d60030154601d60020154601d60010154601d600001546137719190614413565b61377b9190614413565b6137859190614413565b61378f908661442b565b61379991906144f8565b6137a391906144f8565b6028546027546026546025549394506000938d9392916137c291614413565b6137cc9190614413565b6137d69190614413565b6137e0908661442b565b6137ea91906144f8565b6024546023546022546021549394506000938e93929161380991614413565b6138139190614413565b61381d9190614413565b613827908761442b565b61383191906144f8565b603054602f54602e54602d549394506000938f93929161385091614413565b61385a9190614413565b6138649190614413565b61386e908861442b565b61387891906144f8565b905060008c60316003015460316002015460316001015460316000015461389f9190614413565b6138a99190614413565b6138b39190614413565b6138bd908961442b565b6138c791906144f8565b905060008d6029600301546029600201546029600101546029600001546138ee9190614413565b6138f89190614413565b6139029190614413565b61390c908a61442b565b61391691906144f8565b6011546040519192506000916001600160a01b039091169061753090879084818181858888f193505050503d806000811461396d576040519150601f19603f3d011682016040523d82523d6000602084013e613972565b606091505b50506012546040519192506001600160a01b0316906175309088906000818181858888f193505050503d80600081146139c7576040519150601f19603f3d011682016040523d82523d6000602084013e6139cc565b606091505b50506013546040519192506001600160a01b0316906175309086906000818181858888f193505050503d8060008114613a21576040519150601f19603f3d011682016040523d82523d6000602084013e613a26565b606091505b50506014546040519192506001600160a01b0316906175309085906000818181858888f193505050503d8060008114613a7b576040519150601f19603f3d011682016040523d82523d6000602084013e613a80565b606091505b50506015546040519192506001600160a01b0316906175309084906000818181858888f193505050503d8060008114613ad5576040519150601f19603f3d011682016040523d82523d6000602084013e613ada565b606091505b5060009250508c159050613b9057601754601054604051637c8d9fb960e11b8152306004820152602481018f905260006044820181905260648201526001600160a01b0391821660848201524260a482015291169063f91b3f7290899060c4016060604051808303818588803b158015613b5357600080fd5b505af1158015613b67573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190613b8c91906146a8565b5050505b604080518f8152602081018e9052908101879052606081018690527fa4903880285538fa6ffa51cad044f25c39cc7f89aa6cbbda844135ff94827edf9060800160405180910390a150506041805461ff001916905550505050505050505050505050565b336000908152600d602052604081205460ff16158015613c1c5750604154610100900460ff16155b8015613c315750600354600160a81b900460ff165b8015613c4c5750601a54601954600091613c4a91614413565b115b801561167457505060445430600090815260456020526040902054101590565b6001600160a01b0382166000908152600b602052604081205460ff1680613cab57506001600160a01b0382166000908152600b602052604090205460ff165b15613cb8575060006112b9565b600354600160b81b900460ff1615613cd2575060016112b9565b6001600160a01b0383166000908152600d602052604090205460ff1680613d1157506001600160a01b0382166000908152600d602052604090205460ff165b90506112b9565b600080613d3060435484612c2a90919063ffffffff16565b90506000613d3d82611e2f565b6019546001600160a01b0387166000908152600d60205260409020549192509060ff1615613d8b5750601a54603b54821115613d7c5750601c54613d8b565b603a54821115613d8b5750601b545b6000613da682612a9360395489612c2a90919063ffffffff16565b30600090815260456020526040902054909150613dc3908261311c565b306000818152604560205260409020919091556043546001600160a01b038a16907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90613e11908590612c2a565b60405190815260200160405180910390a3613e2c8682613110565b98975050505050505050565b604154610100900460ff16611e2d576000613e6660055461166e6004546042546133fa90919063ffffffff16565b905061150981613406565b828054828255906000526020600020908101928215613ec6579160200282015b82811115613ec657825182546001600160a01b0319166001600160a01b03909116178255602090920191600190910190613e91565b50613ed2929150613f11565b5090565b828054828255906000526020600020908101928215613ec6579160200282015b82811115613ec6578251825591602001919060010190613ef6565b5b80821115613ed25760008155600101613f12565b60008060408385031215613f3957600080fd5b50508035926020909101359150565b60008060008060008060008060006101208a8c031215613f6757600080fd5b893560ff81168114613f7857600080fd5b9b60208b01359b5060408b01359a60608101359a506080810135995060a0810135985060c0810135975060e081013596506101000135945092505050565b600060208083528351808285015260005b81811015613fe357858101830151858201604001528201613fc7565b81811115613ff5576000604083870101525b50601f01601f1916929092016040019392505050565b6001600160a01b0381168114611d2c57600080fd5b6000806040838503121561403357600080fd5b823561403e8161400b565b946020939093013593505050565b8015158114611d2c57600080fd5b60006020828403121561406c57600080fd5b813561175f8161404c565b60006020828403121561408957600080fd5b813561175f8161400b565b6000806000606084860312156140a957600080fd5b83356140b48161400b565b925060208401356140c48161400b565b929592945050506040919091013590565b6000602082840312156140e757600080fd5b5035919050565b600080600080600080600060e0888a03121561410957600080fd5b87356141148161400b565b965060208801356141248161400b565b955060408801356141348161400b565b945060608801356141448161400b565b935060808801356141548161400b565b925060a08801356141648161400b565b915060c08801356141748161400b565b8091505092959891949750929550565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff811182821017156141c3576141c3614184565b604052919050565b600067ffffffffffffffff8211156141e5576141e5614184565b5060051b60200190565b6000602080838503121561420257600080fd5b823567ffffffffffffffff81111561421957600080fd5b8301601f8101851361422a57600080fd5b803561423d614238826141cb565b61419a565b81815260059190911b8201830190838101908783111561425c57600080fd5b928401925b828410156142835783356142748161400b565b82529284019290840190614261565b979650505050505050565b600060208083850312156142a157600080fd5b823567ffffffffffffffff8111156142b857600080fd5b8301601f810185136142c957600080fd5b80356142d7614238826141cb565b81815260059190911b820183019083810190878311156142f657600080fd5b928401925b82841015614283578335825292840192908401906142fb565b6000806040838503121561432757600080fd5b82356143328161400b565b915060208301356143428161404c565b809150509250929050565b6000806040838503121561436057600080fd5b823561436b8161400b565b915060208301356143428161400b565b60008060006060848603121561439057600080fd5b833561439b8161404c565b95602085013595506040909401359392505050565b6020808252602d908201527f417374726f546f6b656e3a2043616c6c6572206973206e6f74206f776e65722060408201526c3a34329031b7b73a3930b1ba1760991b606082015260800190565b634e487b7160e01b600052601160045260246000fd5b60008219821115614426576144266143fd565b500190565b6000816000190483118215151615614445576144456143fd565b500290565b634e487b7160e01b600052603260045260246000fd5b600181811c9082168061447457607f821691505b6020821081141561449557634e487b7160e01b600052602260045260246000fd5b50919050565b6020808252600b908201526a139bdd0818da185b99d95960aa1b604082015260600190565b6000602082840312156144d257600080fd5b815161175f8161404c565b60006000198214156144f1576144f16143fd565b5060010190565b60008261451557634e487b7160e01b600052601260045260246000fd5b500490565b60006020828403121561452c57600080fd5b815161175f8161400b565b600081518084526020808501945080840160005b838110156145705781516001600160a01b03168752958201959082019060010161454b565b509495945050505050565b8281526040602082015260006145946040830184614537565b949350505050565b600060208083850312156145af57600080fd5b825167ffffffffffffffff8111156145c657600080fd5b8301601f810185136145d757600080fd5b80516145e5614238826141cb565b81815260059190911b8201830190838101908783111561460457600080fd5b928401925b8284101561428357835182529284019290840190614609565b600082821015614634576146346143fd565b500390565b634e487b7160e01b600052603160045260246000fd5b85815284602082015260a06040820152600061466e60a0830186614537565b6001600160a01b0394909416606083015250608001529392505050565b6000600160ff1b8214156146a1576146a16143fd565b5060000390565b6000806000606084860312156146bd57600080fd5b835192506020840151915060408401519050925092509256fea264697066735822122059f343afb5cb8dbd3615f24ac42131089d86c2962e2ac33e094e26a7ad5c0c9264736f6c63430008090033

Deployed ByteCode Sourcemap

12033:28631:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;38579:202;;;;;;;;;;-1:-1:-1;38579:202:0;;;;;:::i;:::-;;:::i;12628:55::-;;;;;;;;;;;;;;;;;;;413:25:1;;;401:2;386:18;12628:55:0;;;;;;;;36669:804;;;;;;;;;;-1:-1:-1;36669:804:0;;;;;:::i;:::-;;:::i;7726:83::-;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;13762:76::-;;;;;;;;;;-1:-1:-1;13762:76:0;;;;-1:-1:-1;;;;;13762:76:0;;;;;;-1:-1:-1;;;;;2039:32:1;;;2021:51;;2009:2;1994:18;13762:76:0;1875:203:1;32399:221:0;;;;;;;;;;-1:-1:-1;32399:221:0;;;;;:::i;:::-;;:::i;:::-;;;2704:14:1;;2697:22;2679:41;;2667:2;2652:18;32399:221:0;2539:187:1;12426:36:0;;;;;;;;;;;;;;;;15088:60;;;;;;;;;;;;;;;;20626:150;;;;;;;;;;-1:-1:-1;20626:150:0;;;;;:::i;:::-;;:::i;34736:199::-;;;;;;;;;;-1:-1:-1;34736:199:0;;;;;:::i;:::-;;:::i;20784:86::-;;;;;;;;;;-1:-1:-1;20784:86:0;;;;;:::i;:::-;;:::i;18306:102::-;;;;;;;;;;-1:-1:-1;18388:12:0;;18306:102;;35682:172;;;;;;;;;;-1:-1:-1;35682:172:0;;;;;:::i;:::-;;:::i;39828:222::-;;;;;;;;;;-1:-1:-1;39828:222:0;;;;;:::i;:::-;;:::i;25046:391::-;;;;;;;;;;-1:-1:-1;25046:391:0;;;;;:::i;:::-;;:::i;13677:77::-;;;;;;;;;;-1:-1:-1;13677:77:0;;;;-1:-1:-1;;;;;13677:77:0;;;20076:170;;;;;;;;;;;;;:::i;39336:100::-;;;;;;;;;;-1:-1:-1;39336:100:0;;;;;:::i;:::-;;:::i;7912:83::-;;;;;;;;;;-1:-1:-1;7978:9:0;;7912:83;;7978:9;;;;4140:36:1;;4128:2;4113:18;7912:83:0;3998:184:1;37659:183:0;;;;;;;;;;-1:-1:-1;37659:183:0;;;;;:::i;:::-;;:::i;12843:37::-;;;;;;;;;;;;;;;;35331:136;;;;;;;;;;-1:-1:-1;35331:136:0;;;;;:::i;:::-;;:::i;14578:60::-;;;;;;;;;;-1:-1:-1;14578:60:0;;;;;:::i;:::-;;:::i;39226:102::-;;;;;;;;;;-1:-1:-1;39226:102:0;;;;;:::i;:::-;;:::i;32082:309::-;;;;;;;;;;-1:-1:-1;32082:309:0;;;;;:::i;:::-;;:::i;21041:620::-;;;;;;;;;;;;;:::i;36066:595::-;;;;;;;;;;-1:-1:-1;36066:595:0;;;;;:::i;:::-;;:::i;14906:56::-;;;;;;;;;;-1:-1:-1;14906:56:0;;;;;:::i;:::-;;:::i;38373:198::-;;;;;;;;;;-1:-1:-1;38373:198:0;;;;;:::i;:::-;;:::i;21669:187::-;;;;;;;;;;;;;:::i;14841:58::-;;;;;;;;;;-1:-1:-1;14841:58:0;;;;;:::i;:::-;;:::i;12326:41::-;;;;;;;;;;-1:-1:-1;12326:41:0;;;;-1:-1:-1;;;12326:41:0;;;;;;39098:120;;;;;;;;;;-1:-1:-1;39098:120:0;;;;;:::i;:::-;;:::i;33574:315::-;;;;;;;;;;;;;:::i;14712:57::-;;;;;;;;;;-1:-1:-1;14712:57:0;;;;;:::i;:::-;;:::i;39444:102::-;;;;;;;;;;-1:-1:-1;39444:102:0;;;;;:::i;:::-;;:::i;39554:131::-;;;;;;;;;;-1:-1:-1;39554:131:0;;;;;:::i;:::-;;:::i;33901:76::-;;;;;;;;;;;;;:::i;31036:333::-;;;;;;;;;;-1:-1:-1;31036:333:0;;;;;:::i;:::-;;:::i;19069:126::-;;;;;;;;;;;;;:::i;12252:30::-;;;;;;;;;;-1:-1:-1;12252:30:0;;;;-1:-1:-1;;;12252:30:0;;;;;;18577:238;;;;;;;;;;-1:-1:-1;18577:238:0;;;;;:::i;:::-;;:::i;35475:199::-;;;;;;;;;;-1:-1:-1;35475:199:0;;;;;:::i;:::-;;:::i;20878:155::-;;;;;;;;;;;;;:::i;37481:170::-;;;;;;;;;;-1:-1:-1;37481:170:0;;;;;:::i;:::-;;:::i;39693:127::-;;;;;;;;;;-1:-1:-1;39693:127:0;;;;;:::i;:::-;;:::i;12801:35::-;;;;;;;;;;;;;;;;13848:81;;;;;;;;;;-1:-1:-1;13848:81:0;;;;-1:-1:-1;;;;;13848:81:0;;;14102:83;;;;;;;;;;-1:-1:-1;14102:83:0;;;;-1:-1:-1;;;;;14102:83:0;;;14645:60;;;;;;;;;;-1:-1:-1;14645:60:0;;;;;:::i;:::-;;:::i;12692:37::-;;;;;;;;;;;;;;;;19203:83;;;;;;;;;;-1:-1:-1;19273:5:0;;;;;-1:-1:-1;;;;;19273:5:0;19203:83;;13936:78;;;;;;;;;;-1:-1:-1;13936:78:0;;;;-1:-1:-1;;;;;13936:78:0;;;18823:117;;;;;;;;;;-1:-1:-1;18823:117:0;;;;;:::i;:::-;-1:-1:-1;;;;;18910:22:0;18883:7;18910:22;;;:17;:22;;;;;;;18823:117;34943:180;;;;;;;;;;-1:-1:-1;34943:180:0;;;;;:::i;:::-;;:::i;12289:30::-;;;;;;;;;;-1:-1:-1;12289:30:0;;;;-1:-1:-1;;;12289:30:0;;;;;;15022:59;;;;;;;;;;;;;;;;16454:49;;;;;;;;;;-1:-1:-1;16454:49:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;7817:87;;;;;;;;;;;;;:::i;33987:741::-;;;;;;;;;;-1:-1:-1;33987:741:0;;;;;:::i;:::-;;:::i;38984:106::-;;;;;;;;;;-1:-1:-1;38984:106:0;;;;;:::i;:::-;;:::i;14511:60::-;;;;;;;;;;-1:-1:-1;14511:60:0;;;;;:::i;:::-;;:::i;14776:58::-;;;;;;;;;;-1:-1:-1;14776:58:0;;;;;:::i;:::-;;:::i;31579:495::-;;;;;;;;;;-1:-1:-1;31579:495:0;;;;;:::i;:::-;;:::i;15338:30::-;;;;;;;;;;-1:-1:-1;15338:30:0;;;;;:::i;:::-;;:::i;14305:19::-;;;;;;;;;;-1:-1:-1;14305:19:0;;;;-1:-1:-1;;;;;14305:19:0;;;21864:261;;;;;;;;;;-1:-1:-1;21864:261:0;;;;;:::i;:::-;;:::i;31381:190::-;;;;;;;;;;-1:-1:-1;31381:190:0;;;;;:::i;:::-;;:::i;40058:158::-;;;;;;;;;;-1:-1:-1;40058:158:0;;;;;:::i;:::-;;:::i;12971:58::-;;;;;;;;;;-1:-1:-1;12971:58:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;15300:31;;;;;;;;;;-1:-1:-1;15300:31:0;;;;;:::i;:::-;;:::i;14021:74::-;;;;;;;;;;-1:-1:-1;14021:74:0;;;;-1:-1:-1;;;;;14021:74:0;;;12736:52;;;;;;;;;;;;;;;;37854:340;;;;;;;;;;-1:-1:-1;37854:340:0;;;;;:::i;:::-;;:::i;14442:62::-;;;;;;;;;;-1:-1:-1;14442:62:0;;;;;:::i;:::-;;:::i;35131:192::-;;;;;;;;;;-1:-1:-1;35131:192:0;;;;;:::i;:::-;;:::i;35862:196::-;;;;;;;;;;-1:-1:-1;35862:196:0;;;;;:::i;:::-;;:::i;12199:46::-;;;;;;;;;;-1:-1:-1;12199:46:0;;;;-1:-1:-1;;;12199:46:0;;;;;;18948:113;;;;;;;;;;-1:-1:-1;18948:113:0;;;;;:::i;:::-;-1:-1:-1;;;;;19034:19:0;19010:4;19034:19;;;:12;:19;;;;;;;;;18948:113;20254:364;;;;;;;;;;-1:-1:-1;20254:364:0;;;;;:::i;:::-;;:::i;16510:55::-;;;;;;;;;;-1:-1:-1;16510:55:0;;;;;:::i;:::-;;;;;;;;;;;;;;12557:51;;;;;;;;;;;;;;;;14192:72;;;;;;;;;;-1:-1:-1;14192:72:0;;;;-1:-1:-1;;;;;14192:72:0;;;12374:43;;;;;;;;;;-1:-1:-1;12374:43:0;;;;-1:-1:-1;;;12374:43:0;;;;;;18416:153;;;;;;;;;;-1:-1:-1;18416:153:0;;;;;:::i;:::-;-1:-1:-1;;;;;18527:25:0;;;18500:7;18527:25;;;:17;:25;;;;;;;;:34;;;;;;;;;;;;;18416:153;15155:50;;;;;;;;;;;;;;;;38202:163;;;;;;;;;;-1:-1:-1;38202:163:0;;;;;:::i;:::-;;:::i;38789:187::-;;;;;;;;;;-1:-1:-1;38789:187:0;;;;;:::i;:::-;;:::i;38579:202::-;15914:5;;;;;-1:-1:-1;;;;;15914:5:0;15900:10;:19;15892:77;;;;-1:-1:-1;;;15892:77:0;;;;;;;:::i;:::-;;;;;;;;;38688:11:::1;:26:::0;;;;38725:22:::1;:48:::0;38579:202::o;36669:804::-;15914:5;;;;;-1:-1:-1;;;;;15914:5:0;15900:10;:19;15892:77;;;;-1:-1:-1;;;15892:77:0;;;;;;;:::i;:::-;36991:8;36978:10;36962:13;36952:7;36937:12;36904:30:::1;36920:14:::0;36904:13;:30:::1;:::i;:::-;:45;;;;:::i;:::-;:55;;;;:::i;:::-;:71;;;;:::i;:::-;:84;;;;:::i;:::-;:95;;;;:::i;:::-;37003:3;36904:102;36895:137;;;::::0;-1:-1:-1;;;36895:137:0;;9799:2:1;36895:137:0::1;::::0;::::1;9781:21:1::0;9838:2;9818:18;;;9811:30;-1:-1:-1;;;9857:18:1;;;9850:51;9918:18;;36895:137:0::1;9597:345:1::0;36895:137:0::1;37066:12;:6:::0;37075:3:::1;37066:12;:::i;:::-;37045:8;37054;37045:18;;;;;;;;;:::i;:::-;;:33:::0;37114:22:::1;37123:13:::0;37114:6;:22:::1;:::i;:::-;37089:12;37102:8;37089:22;;;;;;;;;:::i;:::-;;:47:::0;37171:21:::1;37180:12:::0;37171:6;:21:::1;:::i;:::-;37147:11;37159:8;37147:21;;;;;;;;;:::i;:::-;;:45:::0;37231:23:::1;37240:14:::0;37231:6;:23:::1;:::i;:::-;37203:15;37219:8;37203:25;;;;;;;;;:::i;:::-;;:51:::0;37290:16:::1;37299:7:::0;37290:6;:16:::1;:::i;:::-;37265:12;37278:8;37265:22;;;;;;;;;:::i;:::-;;:41:::0;37343:22:::1;37352:13:::0;37343:6;:22:::1;:::i;:::-;37317:13;37331:8;37317:23;;;;;;;;;:::i;:::-;;:48:::0;37398:19:::1;37407:10:::0;37398:6;:19:::1;:::i;:::-;37376:9;37386:8;37376:19;;;;;;;;;:::i;:::-;;:41:::0;37448:17:::1;37457:8:::0;37448:6;:17:::1;:::i;:::-;37428:7;37436:8;37428:17;;;;;;;;;:::i;:::-;;:37:::0;-1:-1:-1;;;;;;;;;36669:804:0:o;7726:83::-;7763:13;7796:5;7789:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7726:83;:::o;32399:221::-;32510:10;32475:4;32492:29;;;:17;:29;;;;;;;;-1:-1:-1;;;;;32492:38:0;;;;;;;;;;:46;;;32554:36;32475:4;;32492:38;;32554:36;;;;32533:5;413:25:1;;401:2;386:18;;267:177;32554:36:0;;;;;;;;-1:-1:-1;32608:4:0;32399:221;;;;;:::o;20626:150::-;20706:4;20762:6;20730:29;20750:8;20730:19;:29::i;:::-;:38;;20626:150;-1:-1:-1;;;20626:150:0:o;34736:199::-;15914:5;;;;;-1:-1:-1;;;;;15914:5:0;15900:10;:19;15892:77;;;;-1:-1:-1;;;15892:77:0;;;;;;;:::i;:::-;34827:27:::1;::::0;::::1;-1:-1:-1::0;;;34827:27:0;;::::1;;:37;;::::0;::::1;;;;34819:61;;;;-1:-1:-1::0;;;34819:61:0::1;;;;;;;:::i;:::-;34891:27;:36:::0;;;::::1;;-1:-1:-1::0;;;34891:36:0::1;-1:-1:-1::0;;;;34891:36:0;;::::1;::::0;;;::::1;::::0;;34736:199::o;20784:86::-;15914:5;;;;;-1:-1:-1;;;;;15914:5:0;15900:10;:19;15892:77;;;;-1:-1:-1;;;15892:77:0;;;;;;;:::i;:::-;20848:5:::1;:14:::0;;-1:-1:-1;;;;;20848:14:0;;::::1;;;-1:-1:-1::0;;;;;;20848:14:0;;::::1;::::0;;;::::1;::::0;;20784:86::o;35682:172::-;15914:5;;;;;-1:-1:-1;;;;;15914:5:0;15900:10;:19;15892:77;;;;-1:-1:-1;;;15892:77:0;;;;;;;:::i;:::-;35774:15:::1;:24:::0;;;;35809:26:::1;:37:::0;35682:172::o;39828:222::-;15914:5;;;;;-1:-1:-1;;;;;15914:5:0;15900:10;:19;15892:77;;;;-1:-1:-1;;;15892:77:0;;;;;;;:::i;:::-;39901:9:::1;39897:146;39920:14;:21:::0;39916:25;::::1;39897:146;;;39972:12;-1:-1:-1::0;;;;;39965:29:0::1;;39995:14;40010:1;39995:17;;;;;;;;:::i;:::-;;::::0;;;::::1;::::0;;;::::1;::::0;40014:13:::1;:16:::0;;-1:-1:-1;;;;;39995:17:0;;::::1;::::0;40028:1;;40014:16;::::1;;;;;:::i;:::-;;::::0;;;::::1;::::0;;;::::1;::::0;39965:66:::1;::::0;-1:-1:-1;;;;;;39965:66:0::1;::::0;;;;;;-1:-1:-1;;;;;11169:32:1;;;39965:66:0::1;::::0;::::1;11151:51:1::0;11218:18;;;11211:34;11124:18;;39965:66:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;39944:4:0;::::1;::::0;::::1;:::i;:::-;;;;39897:146;;;;39828:222:::0;:::o;25046:391::-;15767:12;;25155:4;;25142:2;;-1:-1:-1;;;;;15767:12:0;15753:10;:26;15750:85;;-1:-1:-1;;;;;15804:18:0;;15796:27;;;;;;-1:-1:-1;;;;;25176:23:0;::::1;25224:1;25176:23:::0;;;:17:::1;:23;::::0;;;;;;;25200:10:::1;25176:35:::0;;;;;;;;-1:-1:-1;;25176:50:0::1;25172:193;;25281:72;::::0;;;;::::1;::::0;;::::1;::::0;;-1:-1:-1;;;25281:72:0::1;::::0;;::::1;::::0;;;;-1:-1:-1;;;;;25281:23:0;::::1;-1:-1:-1::0;25281:23:0;;;:17:::1;:23:::0;;;;;25305:10:::1;25281:35:::0;;;;;;;;;;:72:::1;::::0;25321:5;;25281:39:::1;:72::i;:::-;-1:-1:-1::0;;;;;25243:23:0;::::1;;::::0;;;:17:::1;:23;::::0;;;;;;;25267:10:::1;25243:35:::0;;;;;;;:110;25172:193:::1;25377:30;25391:4;25397:2;25401:5;25377:13;:30::i;:::-;-1:-1:-1::0;25425:4:0::1;::::0;25046:391;-1:-1:-1;;;;;25046:391:0:o;20076:170::-;20221:16;;20196:12;:18;;;;13545:42;20129:7;20172:18;;;;;20157:10;;20129:7;;20156:82;;20221:16;;20157:58;;:34;;:10;:14;:34::i;:::-;:38;;:58::i;:::-;20156:64;;:82::i;:::-;20149:89;;20076:170;:::o;39336:100::-;15914:5;;;;;-1:-1:-1;;;;;15914:5:0;15900:10;:19;15892:77;;;;-1:-1:-1;;;15892:77:0;;;;;;;:::i;:::-;39407:14:::1;:21:::0;39336:100::o;37659:183::-;15914:5;;37746:12;;15914:5;;;-1:-1:-1;;;;;15914:5:0;15900:10;:19;15892:77;;;;-1:-1:-1;;;15892:77:0;;;;;;;:::i;:::-;37778:56:::1;::::0;-1:-1:-1;;;37778:56:0;;37815:10:::1;37778:56;::::0;::::1;11151:51:1::0;11218:18;;;11211:34;;;-1:-1:-1;;;;;37778:36:0;::::1;::::0;::::1;::::0;11124:18:1;;37778:56:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;37771:63:::0;37659:183;-1:-1:-1;;;37659:183:0:o;35331:136::-;15914:5;;;;;-1:-1:-1;;;;;15914:5:0;15900:10;:19;15892:77;;;;-1:-1:-1;;;15892:77:0;;;;;;;:::i;:::-;35414:5:::1;::::0;::::1;;35404:15;;::::0;::::1;;;;35396:38;;;::::0;-1:-1:-1;;;35396:38:0;;11848:2:1;35396:38:0::1;::::0;::::1;11830:21:1::0;11887:2;11867:18;;;11860:30;-1:-1:-1;;;11906:18:1;;;11899:40;11956:18;;35396:38:0::1;11646:334:1::0;35396:38:0::1;35445:5;:14:::0;;-1:-1:-1;;35445:14:0::1;::::0;::::1;;::::0;;;::::1;::::0;;35331:136::o;14578:60::-;;;;;;;;;;;;;;;-1:-1:-1;14578:60:0;:::o;39226:102::-;15914:5;;;;;-1:-1:-1;;;;;15914:5:0;15900:10;:19;15892:77;;;;-1:-1:-1;;;15892:77:0;;;;;;;:::i;:::-;39298:15:::1;:22:::0;39226:102::o;32082:309::-;32240:10;32164:4;32222:29;;;:17;:29;;;;;;;;-1:-1:-1;;;;;32222:38:0;;;;;;;;;;:54;;32265:10;32222:42;:54::i;:::-;32199:10;32181:29;;;;:17;:29;;;;;;;;-1:-1:-1;;;;;32181:38:0;;;;;;;;;;;;:95;;;32292:69;413:25:1;;;32181:38:0;;32292:69;;386:18:1;32292:69:0;267:177:1;21041:620:0;21151:20;;21137:10;21116:32;;;;:20;:32;;;;;;:55;;21151:20;21116:55;:::i;:::-;21098:15;:73;21090:125;;;;-1:-1:-1;;;21090:125:0;;12187:2:1;21090:125:0;;;12169:21:1;12226:2;12206:18;;;12199:30;12265:34;12245:18;;;12238:62;-1:-1:-1;;;12316:18:1;;;12309:37;12363:19;;21090:125:0;11985:403:1;21090:125:0;21255:10;21269:1;21234:32;;;:20;:32;;;;;;21226:65;;;;-1:-1:-1;;;21226:65:0;;12595:2:1;21226:65:0;;;12577:21:1;12634:2;12614:18;;;12607:30;-1:-1:-1;;;12653:18:1;;;12646:46;12709:18;;21226:65:0;12393:340:1;21226:65:0;21310:24;;-1:-1:-1;;;21310:24:0;;;;21302:74;;;;-1:-1:-1;;;21302:74:0;;12940:2:1;21302:74:0;;;12922:21:1;12979:2;12959:18;;;12952:30;13018:26;12998:18;;;12991:54;13062:18;;21302:74:0;12738:348:1;21302:74:0;21389:19;21446:22;;21436:5;21411:21;21421:10;21411:9;:21::i;:::-;:31;;;;:::i;:::-;:58;;;;:::i;:::-;21389:80;;21482:54;21497:10;21517:4;21524:11;21482:14;:54::i;:::-;;21547:43;21566:11;21579:10;21547:18;:43::i;:::-;-1:-1:-1;21624:10:0;21603:32;;;;:20;:32;;;;;21638:15;21603:50;;21041:620::o;36066:595::-;15914:5;;;;;-1:-1:-1;;;;;15914:5:0;15900:10;:19;15892:77;;;;-1:-1:-1;;;15892:77:0;;;;;;;:::i;:::-;36318:17:::1;:38:::0;;-1:-1:-1;;;;;;36318:38:0;;::::1;-1:-1:-1::0;;;;;36318:38:0;;::::1;;::::0;;;36367:16:::1;:36:::0;;;::::1;::::0;;::::1;::::0;;;::::1;::::0;;;36414:21:::1;:46:::0;;;::::1;::::0;;::::1;::::0;;;::::1;::::0;;;36471:18:::1;:39:::0;;;::::1;::::0;;::::1;::::0;;;::::1;::::0;;;36521:14:::1;:32:::0;;;::::1;::::0;;::::1;::::0;;;::::1;::::0;;36564:23:::1;:50:::0;;;::::1;::::0;;::::1;::::0;;;::::1;::::0;;36625:12:::1;:28:::0;;;;::::1;::::0;::::1;::::0;;;::::1;::::0;;36066:595::o;14906:56::-;;;;;;;;;;;38373:198;15914:5;;;;;-1:-1:-1;;;;;15914:5:0;15900:10;:19;15892:77;;;;-1:-1:-1;;;15892:77:0;;;;;;;:::i;:::-;13147:4:::1;38465:16;:40;;38457:61;;;::::0;-1:-1:-1;;;38457:61:0;;13515:2:1;38457:61:0::1;::::0;::::1;13497:21:1::0;13554:1;13534:18;;;13527:29;-1:-1:-1;;;13572:18:1;;;13565:38;13620:18;;38457:61:0::1;13313:331:1::0;38457:61:0::1;38529:15;:34:::0;38373:198::o;21669:187::-;21753:10;21732:32;;;;:20;:32;;;;;;:37;21724:63;;;;-1:-1:-1;;;21724:63:0;;13851:2:1;21724:63:0;;;13833:21:1;13890:2;13870:18;;;13863:30;-1:-1:-1;;;13909:18:1;;;13902:42;13961:18;;21724:63:0;13649:336:1;21724:63:0;21819:10;21798:32;;;;:20;:32;;;;;21833:15;21798:50;;21669:187::o;14841:58::-;;;;;;;;;;;39098:120;15914:5;;;;;-1:-1:-1;;;;;15914:5:0;15900:10;:19;15892:77;;;;-1:-1:-1;;;15892:77:0;;;;;;;:::i;:::-;39176:24:::1;:34:::0;39098:120::o;33574:315::-;16053:7;;-1:-1:-1;;;;;16053:7:0;16039:10;:21;;:44;;-1:-1:-1;16078:5:0;;;;;-1:-1:-1;;;;;16078:5:0;16064:10;:19;16039:44;16031:82;;;;-1:-1:-1;;;16031:82:0;;14192:2:1;16031:82:0;;;14174:21:1;14231:2;14211:18;;;14204:30;-1:-1:-1;;;14250:18:1;;;14243:55;14315:18;;16031:82:0;13990:349:1;16031:82:0;33639:6:::1;::::0;::::1;::::0;::::1;;;33638:7;33630:29;;;::::0;-1:-1:-1;;;33630:29:0;;14546:2:1;33630:29:0::1;::::0;::::1;14528:21:1::0;14585:1;14565:18;;;14558:29;-1:-1:-1;;;14603:18:1;;;14596:39;14652:18;;33630:29:0::1;14344:332:1::0;33630:29:0::1;33692:15;33678:10;;:29;;33670:53;;;::::0;-1:-1:-1;;;33670:53:0;;14883:2:1;33670:53:0::1;::::0;::::1;14865:21:1::0;14922:2;14902:18;;;14895:30;-1:-1:-1;;;14941:18:1;;;14934:41;14992:18;;33670:53:0::1;14681:335:1::0;33670:53:0::1;33736:18;33764:57;33798:22;;33764:29;33781:11;;33764:12;;:16;;:29;;;;:::i;:57::-;33736:86;;33835:23;33846:11;33835:10;:23::i;:::-;;33869:12;:10;:12::i;:::-;33619:270;33574:315::o:0;14712:57::-;;;;;;;;;;;39444:102;15914:5;;;;;-1:-1:-1;;;;;15914:5:0;15900:10;:19;15892:77;;;;-1:-1:-1;;;15892:77:0;;;;;;;:::i;:::-;39516:14:::1;:22:::0;39444:102::o;39554:131::-;15914:5;;;;;-1:-1:-1;;;;;15914:5:0;15900:10;:19;15892:77;;;;-1:-1:-1;;;15892:77:0;;;;;;;:::i;:::-;39645:32;;::::1;::::0;:14:::1;::::0;:32:::1;::::0;::::1;::::0;::::1;:::i;33901:76::-:0;16053:7;;-1:-1:-1;;;;;16053:7:0;16039:10;:21;;:44;;-1:-1:-1;16078:5:0;;;;;-1:-1:-1;;;;;16078:5:0;16064:10;:19;16039:44;16031:82;;;;-1:-1:-1;;;16031:82:0;;14192:2:1;16031:82:0;;;14174:21:1;14231:2;14211:18;;;14204:30;-1:-1:-1;;;14250:18:1;;;14243:55;14315:18;;16031:82:0;13990:349:1;16031:82:0;33959:10:::1;:8;:10::i;:::-;33901:76::o:0;31036:333::-;31144:16;;;31158:1;31144:16;;;;;;;;;31100:7;;;;31144:16;;;;;;;;;;;-1:-1:-1;31144:16:0;31120:40;;31189:4;31171;31176:1;31171:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;31171:23:0;;;:7;;;;;;;;;;:23;;;;31215:6;;:14;;;-1:-1:-1;;;31215:14:0;;;;:6;;;;;:12;;:14;;;;;31171:7;;31215:14;;;;;:6;:14;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;31205:4;31210:1;31205:7;;;;;;;;:::i;:::-;;;;;;:24;-1:-1:-1;;;;;31205:24:0;;;-1:-1:-1;;;;;31205:24:0;;;;;13464:42;31240:4;31245:1;31240:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;31240:14:0;;;:7;;;;;;;;;:14;31296:6;;:35;;-1:-1:-1;;;31296:35:0;;31267:26;;31296:6;;;;;:20;;:35;;31317:7;;31326:4;;31296:35;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;31296:35:0;;;;;;;;;;;;:::i;:::-;31267:64;;31349:9;31359:1;31349:12;;;;;;;;:::i;:::-;;;;;;;31342:19;;;;31036:333;;;:::o;19069:126::-;19122:7;19149:38;19170:16;;19149;;:20;;:38;;;;:::i;18577:238::-;-1:-1:-1;;;;;18663:30:0;;18639:7;18663:30;;;:25;:30;;;;;;;;18659:148;;;-1:-1:-1;;;;;;18715:17:0;;;;;:12;:17;;;;;;;18577:238::o;18659:148::-;18790:16;;-1:-1:-1;;;;;18768:17:0;;;;;;:12;:17;;;;;;:39;;:21;:39::i;35475:199::-;15914:5;;;;;-1:-1:-1;;;;;15914:5:0;15900:10;:19;15892:77;;;;-1:-1:-1;;;15892:77:0;;;;;;;:::i;:::-;35571:20:::1;:31:::0;;;;35631:22:::1;:35:::0;35475:199::o;20878:155::-;20923:6;20918:108;20939:12;:19;20935:23;;20918:108;;;20991:12;21004:1;20991:15;;;;;;;;:::i;:::-;;;;;;;;;;20979:35;;;-1:-1:-1;;;;;;20979:35:0;;;;-1:-1:-1;;;;;20991:15:0;;;;20979:33;;:35;;;;;;;;;;20991:15;;20979:35;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;20960:3;;;;;:::i;:::-;;;;20918:108;;37481:170;15914:5;;;;;-1:-1:-1;;;;;15914:5:0;15900:10;:19;15892:77;;;;-1:-1:-1;;;15892:77:0;;;;;;;:::i;:::-;37607:36:::1;::::0;37575:21:::1;::::0;-1:-1:-1;;;;;37607:27:0;::::1;::::0;:36;::::1;;;::::0;37575:21;;37557:15:::1;37607:36:::0;37557:15;37607:36;37575:21;37607:27;:36;::::1;;;;;;;;;;;;;::::0;::::1;;;;;;37546:105;37481:170:::0;:::o;39693:127::-;15914:5;;;;;-1:-1:-1;;;;;15914:5:0;15900:10;:19;15892:77;;;;-1:-1:-1;;;15892:77:0;;;;;;;:::i;:::-;39782:30;;::::1;::::0;:13:::1;::::0;:30:::1;::::0;::::1;::::0;::::1;:::i;14645:60::-:0;;;;;;;;;;;34943:180;15914:5;;;;;-1:-1:-1;;;;;15914:5:0;15900:10;:19;15892:77;;;;-1:-1:-1;;;15892:77:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;35031:19:0;::::1;;::::0;;;:12:::1;:19;::::0;;;;;::::1;;:29;;::::0;::::1;;;;35023:53;;;;-1:-1:-1::0;;;35023:53:0::1;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;35087:19:0;;;::::1;;::::0;;;:12:::1;:19;::::0;;;;:28;;-1:-1:-1;;35087:28:0::1;::::0;::::1;;::::0;;;::::1;::::0;;34943:180::o;7817:87::-;7856:13;7889:7;7882:14;;;;;:::i;33987:741::-;15914:5;;;;;-1:-1:-1;;;;;15914:5:0;15900:10;:19;15892:77;;;;-1:-1:-1;;;15892:77:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;34088:32:0;::::1;;::::0;;;:25:::1;:32;::::0;;;;;::::1;;:42;;::::0;::::1;;;;34080:72;;;::::0;-1:-1:-1;;;34080:72:0;;17168:2:1;34080:72:0::1;::::0;::::1;17150:21:1::0;17207:2;17187:18;;;17180:30;-1:-1:-1;;;17226:18:1;;;17219:47;17283:18;;34080:72:0::1;16966:341:1::0;34080:72:0::1;-1:-1:-1::0;;;;;34165:32:0;::::1;;::::0;;;:25:::1;:32;::::0;;;;:41;;-1:-1:-1;;34165:41:0::1;::::0;::::1;::::0;::::1;::::0;;;::::1;::::0;;;34219:442:::1;;34246:12;:24:::0;;::::1;::::0;::::1;::::0;;-1:-1:-1;34246:24:0;;;;;::::1;::::0;;-1:-1:-1;;;;;;34246:24:0::1;-1:-1:-1::0;;;;;34246:24:0;::::1;;::::0;;34219:442:::1;;;34311:12;:19:::0;34333:1:::1;-1:-1:-1::0;34303:51:0::1;;;::::0;-1:-1:-1;;;34303:51:0;;17514:2:1;34303:51:0::1;::::0;::::1;17496:21:1::0;17553:2;17533:18;;;17526:30;-1:-1:-1;;;17572:18:1;;;17565:45;17627:18;;34303:51:0::1;17312:339:1::0;34303:51:0::1;34374:9;34369:281;34393:12;:19:::0;34389:23;::::1;34369:281;;;34461:5;-1:-1:-1::0;;;;;34442:24:0::1;:12;34455:1;34442:15;;;;;;;;:::i;:::-;;::::0;;;::::1;::::0;;;::::1;::::0;-1:-1:-1;;;;;34442:15:0::1;:24;34438:197;;;34509:12;34522:19:::0;;:23:::1;::::0;34544:1:::1;::::0;34522:23:::1;:::i;:::-;34509:37;;;;;;;;:::i;:::-;;::::0;;;::::1;::::0;;;::::1;::::0;34491:12:::1;:15:::0;;-1:-1:-1;;;;;34509:37:0;;::::1;::::0;34504:1;;34491:15;::::1;;;;;:::i;:::-;;;;;;;;;:55;;;;;-1:-1:-1::0;;;;;34491:55:0::1;;;;;-1:-1:-1::0;;;;;34491:55:0::1;;;;;;34569:12;:18;;;;;;;:::i;:::-;;::::0;;;::::1;::::0;;;;-1:-1:-1;;34569:18:0;;;;;-1:-1:-1;;;;;;34569:18:0::1;::::0;;;;;34610:5:::1;;34438:197;34414:3:::0;::::1;::::0;::::1;:::i;:::-;;;;34369:281;;;;34219:442;34678:42;::::0;;::::1;;::::0;-1:-1:-1;;;;;34678:42:0;::::1;::::0;::::1;::::0;;;::::1;33987:741:::0;;:::o;38984:106::-;15914:5;;;;;-1:-1:-1;;;;;15914:5:0;15900:10;:19;15892:77;;;;-1:-1:-1;;;15892:77:0;;;;;;;:::i;:::-;39058:10:::1;:24:::0;38984:106::o;14511:60::-;;;;;;;;;;;14776:58;;;;;;;;;;;31579:495;31720:10;31666:4;31702:29;;;:17;:29;;;;;;;;-1:-1:-1;;;;;31702:38:0;;;;;;;;;;31757:27;;;31753:205;;31819:10;31842:1;31801:29;;;:17;:29;;;;;;;;-1:-1:-1;;;;;31801:38:0;;;;;;;;;:42;31753:205;;;31917:29;:8;31930:15;31917:12;:29::i;:::-;31894:10;31876:29;;;;:17;:29;;;;;;;;-1:-1:-1;;;;;31876:38:0;;;;;;;;;:70;31753:205;31984:10;32005:29;;;;:17;:29;;;;;;;;-1:-1:-1;;;;;31975:69:0;;32005:38;;;;;;;;;;;31975:69;;413:25:1;;;31975:69:0;;31984:10;31975:69;;386:18:1;31975:69:0;;;;;;;-1:-1:-1;32062:4:0;;31579:495;-1:-1:-1;;;31579:495:0:o;15338:30::-;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;15338:30:0;:::o;21864:261::-;15767:12;;21962:4;;21942:2;;-1:-1:-1;;;;;15767:12:0;15753:10;:26;15750:85;;-1:-1:-1;;;;;15804:18:0;;15796:27;;;;;;15530:5:::1;::::0;::::1;;15529:6;15521:37;;;::::0;-1:-1:-1;;;15521:37:0;;18120:2:1;15521:37:0::1;::::0;::::1;18102:21:1::0;18159:2;18139:18;;;18132:30;-1:-1:-1;;;18178:18:1;;;18171:48;18236:18;;15521:37:0::1;17918:342:1::0;15521:37:0::1;22006:10:::2;21988:29;::::0;;;:17:::2;:29;::::0;;;;;::::2;;21987:30;21979:69;;;::::0;-1:-1:-1;;;21979:69:0;;18467:2:1;21979:69:0::2;::::0;::::2;18449:21:1::0;18506:2;18486:18;;;18479:30;18545:28;18525:18;;;18518:56;18591:18;;21979:69:0::2;18265:350:1::0;21979:69:0::2;22059:36;22073:10;22085:2;22089:5;22059:13;:36::i;:::-;-1:-1:-1::0;22113:4:0::2;::::0;21864:261;-1:-1:-1;;;;21864:261:0:o;31381:190::-;15914:5;;;;;-1:-1:-1;;;;;15914:5:0;15900:10;:19;15892:77;;;;-1:-1:-1;;;15892:77:0;;;;;;;:::i;:::-;31470:24:::1;::::0;::::1;-1:-1:-1::0;;;31470:24:0;;::::1;;:34;;::::0;::::1;;;;31462:57;;;::::0;-1:-1:-1;;;31462:57:0;;11848:2:1;31462:57:0::1;::::0;::::1;11830:21:1::0;11887:2;11867:18;;;11860:30;-1:-1:-1;;;11906:18:1;;;11899:40;11956:18;;31462:57:0::1;11646:334:1::0;31462:57:0::1;31530:24;:33:::0;;;::::1;;-1:-1:-1::0;;;31530:33:0::1;-1:-1:-1::0;;;;31530:33:0;;::::1;::::0;;;::::1;::::0;;31381:190::o;40058:158::-;15914:5;;;;;-1:-1:-1;;;;;15914:5:0;15900:10;:19;15892:77;;;;-1:-1:-1;;;15892:77:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;40137:22:0;::::1;40129:50;;;::::0;-1:-1:-1;;;40129:50:0;;18822:2:1;40129:50:0::1;::::0;::::1;18804:21:1::0;18861:2;18841:18;;;18834:30;-1:-1:-1;;;18880:18:1;;;18873:45;18935:18;;40129:50:0::1;18620:339:1::0;40129:50:0::1;40190:7;:18:::0;;-1:-1:-1;;;;;;40190:18:0::1;-1:-1:-1::0;;;;;40190:18:0;;;::::1;::::0;;;::::1;::::0;;40058:158::o;15300:31::-;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;15300:31:0;;-1:-1:-1;15300:31:0;:::o;37854:340::-;15914:5;;;;;-1:-1:-1;;;;;15914:5:0;15900:10;:19;15892:77;;;;-1:-1:-1;;;15892:77:0;;;;;;;:::i;:::-;37944:6:::1;:28:::0;;-1:-1:-1;;;;;;37944:28:0;;::::1;-1:-1:-1::0;;;;;37944:28:0;;::::1;::::0;;::::1;::::0;;;37983:4:::1;:12:::0;;;;::::1;::::0;;::::1;;::::0;;38034:4:::1;-1:-1:-1::0;38008:32:0;;;:17:::1;:32;::::0;;;;;;;:49;;;;;;;;;-1:-1:-1;;38008:63:0;;;;38115:4;;;::::1;38082:38:::0;;;;;:52;38175:4;38147:39:::1;::::0;38175:4:::1;-1:-1:-1::0;38147:27:0::1;:39::i;14442:62::-:0;;;;;;;;;;;35131:192;15914:5;;;;;-1:-1:-1;;;;;15914:5:0;15900:10;:19;15892:77;;;;-1:-1:-1;;;15892:77:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;35221:24:0;::::1;;::::0;;;:17:::1;:24;::::0;;;;;::::1;;:34;;::::0;::::1;;;;35213:58;;;;-1:-1:-1::0;;;35213:58:0::1;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;35282:24:0;;;::::1;;::::0;;;:17:::1;:24;::::0;;;;:33;;-1:-1:-1;;35282:33:0::1;::::0;::::1;;::::0;;;::::1;::::0;;35131:192::o;35862:196::-;15914:5;;;;;-1:-1:-1;;;;;15914:5:0;15900:10;:19;15892:77;;;;-1:-1:-1;;;15892:77:0;;;;;;;:::i;:::-;35966:11:::1;:22:::0;;-1:-1:-1;;;;35966:22:0::1;-1:-1:-1::0;;;35966:22:0;::::1;;;;::::0;;36018:10:::1;::::0;:32:::1;::::0;36045:4;;36018:22:::1;::::0;36033:6;36018:14:::1;:22::i;:::-;:26:::0;::::1;:32::i;:::-;35999:16;:51:::0;-1:-1:-1;;;35862:196:0:o;20254:364::-;20322:7;;;20381:134;20402:12;:19;20398:23;;20381:134;;;20442:61;20463:39;20494:7;20463:26;20473:12;20486:1;20473:15;;;;;;;;:::i;:::-;;;;;;;;;;;-1:-1:-1;;;;;20473:15:0;20463:9;:26::i;:39::-;20442:16;;:20;:61::i;:::-;-1:-1:-1;20423:3:0;;;;:::i;:::-;;;;20381:134;;;;20532:78;20574:35;20601:7;20574:22;:20;:22::i;:35::-;20532:37;20545:23;:16;20566:1;20545:20;:23::i;:::-;20532:8;;:12;:37::i;38202:163::-;15914:5;;;;;-1:-1:-1;;;;;15914:5:0;15900:10;:19;15892:77;;;;-1:-1:-1;;;15892:77:0;;;;;;;:::i;:::-;38281:10:::1;::::0;::::1;-1:-1:-1::0;;;38281:10:0;;::::1;;:25;;::::0;::::1;;;;38273:49;;;;-1:-1:-1::0;;;38273:49:0::1;;;;;;;:::i;:::-;38333:10;:24:::0;;;::::1;;-1:-1:-1::0;;;38333:24:0::1;-1:-1:-1::0;;;;38333:24:0;;::::1;::::0;;;::::1;::::0;;38202:163::o;38789:187::-;15914:5;;;;;-1:-1:-1;;;;;15914:5:0;15900:10;:19;15892:77;;;;-1:-1:-1;;;15892:77:0;;;;;;;:::i;:::-;38876:21:::1;::::0;::::1;-1:-1:-1::0;;;38876:21:0;;::::1;;:33;;::::0;::::1;;;;38868:57;;;;-1:-1:-1::0;;;38868:57:0::1;;;;;;;:::i;:::-;38936:21;:32:::0;;;::::1;;-1:-1:-1::0;;;38936:32:0::1;-1:-1:-1::0;;;;38936:32:0;;::::1;::::0;;;::::1;::::0;;38789:187::o;10997:98::-;11055:7;11082:5;11086:1;11082;:5;:::i;11213:240::-;11333:7;11394:12;11386:6;;;;11378:29;;;;-1:-1:-1;;;11378:29:0;;;;;;;;:::i;:::-;-1:-1:-1;;;11429:5:0;;;11213:240::o;22729:2309::-;-1:-1:-1;;;;;22861:20:0;;22821:4;22861:20;;;:12;:20;;;;;;22821:4;;22861:20;;;:47;;-1:-1:-1;;;;;;22885:23:0;;;;;;:12;:23;;;;;;;;22861:47;22929:27;;22838:70;;-1:-1:-1;;;;22929:27:0;;;;;:46;;;22960:15;22929:46;22921:78;;;;-1:-1:-1;;;22921:78:0;;19166:2:1;22921:78:0;;;19148:21:1;19205:2;19185:18;;;19178:30;-1:-1:-1;;;19224:18:1;;;19217:49;19283:18;;22921:78:0;18964:343:1;22921:78:0;-1:-1:-1;;;;;23030:36:0;;;;;;:25;:36;;;;;;;;:69;;;;;23084:15;23083:16;23030:69;23012:748;;;23183:14;;-1:-1:-1;;;;;23148:22:0;;;;;;:14;:22;;;;;:32;23130:50;;:15;:50;:::i;:::-;:67;23126:214;;;-1:-1:-1;;;;;23218:22:0;;;;;;:14;:22;;;;;23253:15;23218:50;;23287:33;;:37;23126:214;23377:4;23356:18;23414:24;23431:6;23414:16;:24::i;:::-;23503;;-1:-1:-1;;;;;23457:22:0;;;;;;:14;:22;;;;;:33;;;23396:42;;-1:-1:-1;23503:24:0;23457:43;;23396:42;;23457:43;:::i;:::-;:70;23453:230;;;23564:5;23548:21;;23453:230;;;-1:-1:-1;;;;;23623:22:0;;;;;;:14;:22;;;;;:33;;:44;;23660:7;;23623:22;:44;;23660:7;;23623:44;:::i;:::-;;;;-1:-1:-1;;23453:230:0;23722:4;23705:21;;;;23697:51;;;;-1:-1:-1;;;23697:51:0;;19514:2:1;23697:51:0;;;19496:21:1;19553:2;19533:18;;;19526:30;-1:-1:-1;;;19572:18:1;;;19565:47;19629:18;;23697:51:0;19312:341:1;23697:51:0;23111:649;;23012:748;23776:6;;;;;;;23772:87;;;23806:41;23821:6;23829:9;23840:6;23806:14;:41::i;:::-;23799:48;;;;;23772:87;23871:17;23891:28;23902:16;;23891:6;:10;;:28;;;;:::i;:::-;23871:48;;23936:16;:14;:16::i;:::-;23932:59;;;23969:10;:8;:10::i;:::-;-1:-1:-1;;;;;24007:33:0;;;;;;:25;:33;;;;;;;;24003:221;;;-1:-1:-1;;;;;24080:20:0;;;;;;:12;:20;;;;;;:32;;24105:6;24080:24;:32::i;:::-;-1:-1:-1;;;;;24057:20:0;;;;;;:12;:20;;;;;:55;24003:221;;;-1:-1:-1;;;;;24177:20:0;;;;;;:12;:20;;;;;;:35;;24202:9;24177:24;:35::i;:::-;-1:-1:-1;;;;;24154:20:0;;;;;;:12;:20;;;;;:58;24003:221;24236:25;24264:32;24278:6;24286:9;24264:13;:32::i;:::-;:84;;24339:9;24264:84;;;24299:37;24307:6;24315:9;24326;24299:7;:37::i;:::-;-1:-1:-1;;;;;24363:36:0;;;;;;:25;:36;;;;;;24236:112;;-1:-1:-1;24363:36:0;;24359:374;;;24442:68;24470:39;24492:16;;24470:17;:21;;:39;;;;:::i;:::-;-1:-1:-1;;;;;24442:23:0;;;;;;:12;:23;;;;;;;:27;:68::i;:::-;-1:-1:-1;;;;;24416:23:0;;;;;;:12;:23;;;;;:94;24359:374;;;-1:-1:-1;;;;;24578:23:0;;;;;;:12;:23;;;;;;:46;;24606:17;24578:27;:46::i;:::-;-1:-1:-1;;;;;24552:23:0;;;;;;:12;:23;;;;;;;;:72;;;;24670:17;:28;;;;:51;;24703:17;24670:32;:51::i;:::-;-1:-1:-1;;;;;24639:28:0;;;;;;:17;:28;;;;;:82;24359:374;24767:9;-1:-1:-1;;;;;24750:68:0;24759:6;-1:-1:-1;;;;;24750:68:0;;24778:39;24800:16;;24778:17;:21;;:39;;;;:::i;:::-;24750:68;;413:25:1;;;401:2;386:18;24750:68:0;;;;;;;19365:10;;19379:15;-1:-1:-1;19365:29:0;24835:28;;;;-1:-1:-1;24853:10:0;;-1:-1:-1;;;24853:10:0;;;;24835:28;:66;;;;-1:-1:-1;;;;;;24868:33:0;;;;;;:25;:33;;;;;;;;24867:34;24835:66;:107;;;;-1:-1:-1;;;;;;24906:36:0;;;;;;:25;:36;;;;;;;;24905:37;24835:107;24831:176;;;24959:9;:7;:9::i;:::-;24983:12;:10;:12::i;:::-;-1:-1:-1;25026:4:0;;22729:2309;-1:-1:-1;;;;;;22729:2309:0:o;10781:98::-;10839:7;10866:5;10870:1;10866;:5;:::i;10673:98::-;10731:7;10758:5;10762:1;10758;:5;:::i;22133:588::-;22217:4;22234:20;22257:28;22268:16;;22257:6;:10;;:28;;;;:::i;:::-;22234:51;;22296:20;22319:28;22330:16;;22319:6;:10;;:28;;;;:::i;:::-;-1:-1:-1;;;;;22364:31:0;;;;;;:25;:31;;;;;;22296:51;;-1:-1:-1;22364:31:0;;22360:71;;;-1:-1:-1;22425:6:0;22360:71;-1:-1:-1;;;;;22448:29:0;;;;;;:25;:29;;;;;;;;22444:69;;;22507:6;22492:21;;22444:69;-1:-1:-1;;;;;22547:18:0;;;;;;:12;:18;;;;;;:36;;22570:12;22547:22;:36::i;:::-;-1:-1:-1;;;;;22526:18:0;;;;;;;:12;:18;;;;;;:57;;;;22613:16;;;;;;;:34;;22634:12;22613:20;:34::i;:::-;-1:-1:-1;;;;;22594:16:0;;;;;;;:12;:16;;;;;;;:53;;;;22665:26;;;;;;;;;;22684:6;413:25:1;;401:2;386:18;;267:177;22665:26:0;;;;;;;;-1:-1:-1;22709:4:0;;22133:588;-1:-1:-1;;;;;22133:588:0:o;26641:426::-;26751:16;;;26765:1;26751:16;;;;;;;;;26727:21;;26751:16;;;;;;;;;;-1:-1:-1;26751:16:0;26727:40;;26796:4;26778;26783:1;26778:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;26778:23:0;;;:7;;;;;;;;;;:23;;;;26822:6;;:14;;;-1:-1:-1;;;26822:14:0;;;;:6;;;;;:12;;:14;;;;;26778:7;;26822:14;;;;;:6;:14;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;26812:4;26817:1;26812:7;;;;;;;;:::i;:::-;;;;;;:24;-1:-1:-1;;;;;26812:24:0;;;-1:-1:-1;;;;;26812:24:0;;;;;13464:42;26847:4;26852:1;26847:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;26847:14:0;;;:7;;;;;;;;;:14;26874:6;;:185;;-1:-1:-1;;;26874:185:0;;:6;;;:60;;:185;;26949:11;;26874:6;;26991:4;;27010:8;;27033:15;;26874:185;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26716:351;26641:426;;:::o;10889:98::-;10947:7;10974:5;10978:1;10974;:5;:::i;32845:721::-;32902:7;32938:15;32970:16;32966:118;;33018:5;33008:30;33025:12;;33008:30;;;;413:25:1;;401:2;386:18;;267:177;33008:30:0;;;;;;;;-1:-1:-1;;33060:12:0;;;32845:721;-1:-1:-1;32845:721:0:o;32966:118::-;33114:1;33100:11;:15;33096:188;;;33147:39;33172:12;33173:11;33172:12;:::i;:::-;33147;;;:16;:39::i;:::-;33132:12;:54;33296:83;;33096:188;33234:12;;:38;;33259:11;33234:16;:38::i;:::-;33219:12;:53;33296:83;33425:12;;33410:10;;:28;;:14;:28::i;:::-;33391:16;:47;33465:15;;33451:10;:29;;:10;;:29;;33465:15;;33451:29;:::i;:::-;;;;-1:-1:-1;;33515:12:0;;33498:30;;413:25:1;;;33508:5:0;;33498:30;;401:2:1;386:18;33498:30:0;267:177:1;27075:3083:0;15637:6;:13;;-1:-1:-1;;15637:13:0;;;;;27194:11;;27178;;27162;;27194:8:::1;27147:11:::0;-1:-1:-1;;27194:11:0;27178;27147:27:::1;::::0;::::1;:::i;:::-;:43;;;;:::i;:::-;:59;;;;:::i;:::-;27124:82;;27219:28;27250:24;27268:4;27250:9;:24::i;:::-;27219:55;;27285:21;27309;27285:45;;27343:23;27386:60;27402:15;;27419:26;;27386:15;:60::i;:::-;27381:209;;27557:15:::0;;27539;;27521;;27557:12:::1;27503:15:::0;27577:12;;27557:15;27539;27503:33:::1;::::0;::::1;:::i;:::-;:51;;;;:::i;:::-;:69;;;;:::i;:::-;27479:94;::::0;:20;:94:::1;:::i;:::-;:111;;;;:::i;:::-;27461:129;;27381:209;27603:20;27626:38;27649:15:::0;27626:20;:38:::1;:::i;:::-;27701:16;::::0;;27715:1:::1;27701:16:::0;;;;;::::1;::::0;;27603:61;;-1:-1:-1;27677:21:0::1;::::0;27701:16;;::::1;::::0;::::1;::::0;;::::1;::::0;::::1;;::::0;-1:-1:-1;27701:16:0::1;27677:40;;27746:4;27728;27733:1;27728:7;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;27728:23:0;;::::1;:7;::::0;;::::1;::::0;;;;;;:23;;;;27772:6:::1;::::0;:14:::1;::::0;;-1:-1:-1;;;27772:14:0;;;;:6;;;::::1;::::0;:12:::1;::::0;:14:::1;::::0;;::::1;::::0;27728:7;;27772:14;;;;;:6;:14;::::1;;::::0;::::1;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;27762:4;27767:1;27762:7;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;27762:24:0;;::::1;:7;::::0;;::::1;::::0;;;;;:24;27799:6:::1;::::0;:189:::1;::::0;-1:-1:-1;;;27799:189:0;;:6;::::1;::::0;:58:::1;::::0;:189:::1;::::0;27872:12;;27799:6:::1;::::0;27915:4;;27942::::1;::::0;27962:15:::1;::::0;27799:189:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;28001:18;28047:13;28022:21;:39;;;;:::i;:::-;28179:15:::0;;28161;;28143;;28179:12:::1;28125:15:::0;28001:60;;-1:-1:-1;28074:20:0::1;::::0;28208:1:::1;::::0;28179:15;28161;28125:33:::1;::::0;::::1;:::i;:::-;:51;;;;:::i;:::-;:69;;;;:::i;:::-;28124:86;;;;:::i;:::-;28098:112;::::0;28099:12;28098:112:::1;:::i;:::-;28074:137:::0;-1:-1:-1;28224:27:0::1;28379:1;28074:137:::0;28323:12:::1;28336:1;28323:15;::::0;28305:12:::1;28318:1;28305:15;::::0;28287:12:::1;28300:1;28287:15;::::0;28269:12:::1;28282:1;28269:15;;:33;;;;:::i;:::-;:51;;;;:::i;:::-;:69;;;;:::i;:::-;28255:84;::::0;:10;:84:::1;:::i;:::-;28254:112;;;;:::i;:::-;:127;;;;:::i;:::-;28493:18:::0;;28472;;28451;;28493:15:::1;28430:18:::0;28224:157;;-1:-1:-1;28394:19:0::1;::::0;28516:12;;28493:18;28472;28430:39:::1;::::0;::::1;:::i;:::-;:60;;;;:::i;:::-;:81;;;;:::i;:::-;28416:96;::::0;:10;:96:::1;:::i;:::-;:113;;;;:::i;:::-;28632:14:::0;;28615;;28598;;28632:11:::1;28581:14:::0;28394:135;;-1:-1:-1;28540:24:0::1;::::0;28651:12;;28632:14;28615;28581:31:::1;::::0;::::1;:::i;:::-;:48;;;;:::i;:::-;:65;;;;:::i;:::-;28567:80;::::0;:10;:80:::1;:::i;:::-;:97;;;;:::i;:::-;28774:16:::0;;28755;;28736;;28774:13:::1;28717:16:::0;28540:124;;-1:-1:-1;28675:25:0::1;::::0;28795:12;;28774:16;28755;28717:35:::1;::::0;::::1;:::i;:::-;:54;;;;:::i;:::-;:73;;;;:::i;:::-;28703:88;::::0;:10;:88:::1;:::i;:::-;:105;;;;:::i;:::-;28675:133:::0;-1:-1:-1;28819:22:0::1;28920:12:::0;28903:9:::1;28913:1;28903:12;::::0;28888:9:::1;28898:1;28888:12;::::0;28873:9:::1;28883:1;28873:12;::::0;28858:9:::1;28868:1;28858:12;;:27;;;;:::i;:::-;:42;;;;:::i;:::-;:57;;;;:::i;:::-;28844:72;::::0;:10;:72:::1;:::i;:::-;:89;;;;:::i;:::-;28819:114:::0;-1:-1:-1;28944:25:0::1;29060:12:::0;29040::::1;29053:1;29040:15;::::0;29022:12:::1;29035:1;29022:15;::::0;29004:12:::1;29017:1;29004:15;::::0;28986:12:::1;28999:1;28986:15;;:33;;;;:::i;:::-;:51;;;;:::i;:::-;:69;;;;:::i;:::-;28972:84;::::0;:10;:84:::1;:::i;:::-;:101;;;;:::i;:::-;29114:16;::::0;29106:102:::1;::::0;28944:129;;-1:-1:-1;29089:12:0::1;::::0;-1:-1:-1;;;;;29114:16:0;;::::1;::::0;29188:5:::1;::::0;29155:16;;29089:12;29106:102;29089:12;29106:102;29155:16;29114;29188:5;29106:102:::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1::0;;29240:21:0::1;::::0;29232:102:::1;::::0;29088:120;;-1:-1:-1;;;;;;29240:21:0::1;::::0;29314:5:::1;::::0;29286:11;;29232:102:::1;::::0;;;29286:11;29240:21;29314:5;29232:102:::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1::0;;29366:18:0::1;::::0;29358:105:::1;::::0;29219:115;;-1:-1:-1;;;;;;29366:18:0::1;::::0;29443:5:::1;::::0;29409:17;;29358:105:::1;::::0;;;29409:17;29366:18;29443:5;29358:105:::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1::0;;29495:14:0::1;::::0;29487:98:::1;::::0;29345:118;;-1:-1:-1;;;;;;29495:14:0::1;::::0;29565:5:::1;::::0;29534:14;;29487:98:::1;::::0;;;29534:14;29495;29565:5;29487:98:::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1::0;;29617:23:0::1;::::0;29609:110:::1;::::0;29474:111;;-1:-1:-1;;;;;;29617:23:0::1;::::0;29699:5:::1;::::0;29665:17;;29609:110:::1;::::0;;;29665:17;29617:23;29699:5;29609:110:::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1::0;29742:5:0::1;::::0;-1:-1:-1;;29764:19:0;;;-1:-1:-1;29760:295:0::1;;29800:6;::::0;29977:17:::1;::::0;29800:243:::1;::::0;-1:-1:-1;;;29800:243:0;;29879:4:::1;29800:243;::::0;::::1;20937:34:1::0;20987:18;;;20980:34;;;29800:6:0::1;21030:18:1::0;;;21023:34;;;21073:18;;;21066:34;-1:-1:-1;;;;;29977:17:0;;::::1;21116:19:1::0;;;21109:44;30013:15:0::1;21169:19:1::0;;;21162:35;29800:6:0;::::1;::::0;:23:::1;::::0;29832:19;;20871::1;;29800:243:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;29760:295;30072:78;::::0;;21750:25:1;;;21806:2;21791:18;;21784:34;;;21834:18;;;21827:34;;;21892:2;21877:18;;21870:34;;;30072:78:0::1;::::0;21737:3:1;21722:19;30072:78:0::1;;;;;;;-1:-1:-1::0;;15673:6:0;:14;;-1:-1:-1;;15673:14:0;;;-1:-1:-1;;;;;;;;;;;;;27075:3083:0:o;19774:294::-;19887:10;19823:4;19861:37;;;:25;:37;;;;;;;;19860:38;:62;;;;-1:-1:-1;19916:6:0;;;;;;;19915:7;19860:62;:90;;;;-1:-1:-1;19939:11:0;;-1:-1:-1;;;19939:11:0;;;;19860:90;:136;;;;-1:-1:-1;19981:11:0;;:8;19967:11;19995:1;;19967:25;;;:::i;:::-;:29;19860:136;:200;;;;-1:-1:-1;;20044:16:0;;20034:4;20013:27;;;;:12;:27;;;;;;:47;;;19774:294::o;19410:356::-;-1:-1:-1;;;;;19503:18:0;;19482:4;19503:18;;;:12;:18;;;;;;;;;:38;;-1:-1:-1;;;;;;19525:16:0;;;;;;:12;:16;;;;;;;;19503:38;19499:260;;;-1:-1:-1;19565:5:0;19558:12;;19499:260;19592:21;;-1:-1:-1;;;19592:21:0;;;;19588:171;;;-1:-1:-1;19637:4:0;19630:11;;19588:171;-1:-1:-1;;;;;19682:31:0;;;;;;:25;:31;;;;;;;;;:64;;-1:-1:-1;;;;;;19717:29:0;;;;;;:25;:29;;;;;;;;19682:64;19674:73;;;;30166:862;30255:7;30275:14;30292:31;30306:16;;30292:9;:13;;:31;;;;:::i;:::-;30275:48;;30334:18;30355:25;30373:6;30355:16;:25::i;:::-;30412:8;:11;-1:-1:-1;;;;;30437:36:0;;30393:16;30437:36;;;:25;:36;;;;;;30334:46;;-1:-1:-1;30412:11:0;30437:36;;30434:304;;;-1:-1:-1;30501:11:0;;30544:14;;30531:27;;30527:200;;;-1:-1:-1;30590:11:0;;30527:200;;;30653:15;;30640:10;:28;30636:91;;;-1:-1:-1;30700:11:0;;30636:91;30750:17;30770:43;30804:8;30770:29;30784:14;;30770:9;:13;;:29;;;;:::i;:43::-;30877:4;30856:27;;;;:12;:27;;;;;;30750:63;;-1:-1:-1;30856:42:0;;30750:63;30856:31;:42::i;:::-;30847:4;30826:27;;;;:12;:27;;;;;:72;;;;30960:16;;-1:-1:-1;;;;;30914:64:0;;;;;30946:31;;:9;;:13;:31::i;:::-;30914:64;;413:25:1;;;401:2;386:18;30914:64:0;;;;;;;30996:24;:9;31010;30996:13;:24::i;:::-;30989:31;30166:862;-1:-1:-1;;;;;;;;30166:862:0:o;32628:209::-;32671:6;;;;;;;32666:164;;32694:18;32722:57;32756:22;;32722:29;32739:11;;32722:12;;:16;;:29;;;;:::i;:57::-;32694:86;;32795:23;32806:11;32795:10;:23::i;-1:-1:-1:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14:248:1;82:6;90;143:2;131:9;122:7;118:23;114:32;111:52;;;159:1;156;149:12;111:52;-1:-1:-1;;182:23:1;;;252:2;237:18;;;224:32;;-1:-1:-1;14:248:1:o;449:819::-;578:6;586;594;602;610;618;626;634;642;695:3;683:9;674:7;670:23;666:33;663:53;;;712:1;709;702:12;663:53;751:9;738:23;801:4;794:5;790:16;783:5;780:27;770:55;;821:1;818;811:12;770:55;844:5;896:2;881:18;;868:32;;-1:-1:-1;947:2:1;932:18;;919:32;;998:2;983:18;;970:32;;-1:-1:-1;1049:3:1;1034:19;;1021:33;;-1:-1:-1;1101:3:1;1086:19;;1073:33;;-1:-1:-1;1153:3:1;1138:19;;1125:33;;-1:-1:-1;1205:3:1;1190:19;;1177:33;;-1:-1:-1;1257:3:1;1242:19;1229:33;;-1:-1:-1;449:819:1;-1:-1:-1;;;449:819:1:o;1273:597::-;1385:4;1414:2;1443;1432:9;1425:21;1475:6;1469:13;1518:6;1513:2;1502:9;1498:18;1491:34;1543:1;1553:140;1567:6;1564:1;1561:13;1553:140;;;1662:14;;;1658:23;;1652:30;1628:17;;;1647:2;1624:26;1617:66;1582:10;;1553:140;;;1711:6;1708:1;1705:13;1702:91;;;1781:1;1776:2;1767:6;1756:9;1752:22;1748:31;1741:42;1702:91;-1:-1:-1;1854:2:1;1833:15;-1:-1:-1;;1829:29:1;1814:45;;;;1861:2;1810:54;;1273:597;-1:-1:-1;;;1273:597:1:o;2083:131::-;-1:-1:-1;;;;;2158:31:1;;2148:42;;2138:70;;2204:1;2201;2194:12;2219:315;2287:6;2295;2348:2;2336:9;2327:7;2323:23;2319:32;2316:52;;;2364:1;2361;2354:12;2316:52;2403:9;2390:23;2422:31;2447:5;2422:31;:::i;:::-;2472:5;2524:2;2509:18;;;;2496:32;;-1:-1:-1;;;2219:315:1:o;2731:118::-;2817:5;2810:13;2803:21;2796:5;2793:32;2783:60;;2839:1;2836;2829:12;2854:241;2910:6;2963:2;2951:9;2942:7;2938:23;2934:32;2931:52;;;2979:1;2976;2969:12;2931:52;3018:9;3005:23;3037:28;3059:5;3037:28;:::i;3100:247::-;3159:6;3212:2;3200:9;3191:7;3187:23;3183:32;3180:52;;;3228:1;3225;3218:12;3180:52;3267:9;3254:23;3286:31;3311:5;3286:31;:::i;3352:456::-;3429:6;3437;3445;3498:2;3486:9;3477:7;3473:23;3469:32;3466:52;;;3514:1;3511;3504:12;3466:52;3553:9;3540:23;3572:31;3597:5;3572:31;:::i;:::-;3622:5;-1:-1:-1;3679:2:1;3664:18;;3651:32;3692:33;3651:32;3692:33;:::i;:::-;3352:456;;3744:7;;-1:-1:-1;;;3798:2:1;3783:18;;;;3770:32;;3352:456::o;3813:180::-;3872:6;3925:2;3913:9;3904:7;3900:23;3896:32;3893:52;;;3941:1;3938;3931:12;3893:52;-1:-1:-1;3964:23:1;;3813:180;-1:-1:-1;3813:180:1:o;4187:1097::-;4300:6;4308;4316;4324;4332;4340;4348;4401:3;4389:9;4380:7;4376:23;4372:33;4369:53;;;4418:1;4415;4408:12;4369:53;4457:9;4444:23;4476:31;4501:5;4476:31;:::i;:::-;4526:5;-1:-1:-1;4583:2:1;4568:18;;4555:32;4596:33;4555:32;4596:33;:::i;:::-;4648:7;-1:-1:-1;4707:2:1;4692:18;;4679:32;4720:33;4679:32;4720:33;:::i;:::-;4772:7;-1:-1:-1;4831:2:1;4816:18;;4803:32;4844:33;4803:32;4844:33;:::i;:::-;4896:7;-1:-1:-1;4955:3:1;4940:19;;4927:33;4969;4927;4969;:::i;:::-;5021:7;-1:-1:-1;5080:3:1;5065:19;;5052:33;5094;5052;5094;:::i;:::-;5146:7;-1:-1:-1;5205:3:1;5190:19;;5177:33;5219;5177;5219;:::i;:::-;5271:7;5261:17;;;4187:1097;;;;;;;;;;:::o;5289:127::-;5350:10;5345:3;5341:20;5338:1;5331:31;5381:4;5378:1;5371:15;5405:4;5402:1;5395:15;5421:275;5492:2;5486:9;5557:2;5538:13;;-1:-1:-1;;5534:27:1;5522:40;;5592:18;5577:34;;5613:22;;;5574:62;5571:88;;;5639:18;;:::i;:::-;5675:2;5668:22;5421:275;;-1:-1:-1;5421:275:1:o;5701:183::-;5761:4;5794:18;5786:6;5783:30;5780:56;;;5816:18;;:::i;:::-;-1:-1:-1;5861:1:1;5857:14;5873:4;5853:25;;5701:183::o;5889:966::-;5973:6;6004:2;6047;6035:9;6026:7;6022:23;6018:32;6015:52;;;6063:1;6060;6053:12;6015:52;6103:9;6090:23;6136:18;6128:6;6125:30;6122:50;;;6168:1;6165;6158:12;6122:50;6191:22;;6244:4;6236:13;;6232:27;-1:-1:-1;6222:55:1;;6273:1;6270;6263:12;6222:55;6309:2;6296:16;6332:60;6348:43;6388:2;6348:43;:::i;:::-;6332:60;:::i;:::-;6426:15;;;6508:1;6504:10;;;;6496:19;;6492:28;;;6457:12;;;;6532:19;;;6529:39;;;6564:1;6561;6554:12;6529:39;6588:11;;;;6608:217;6624:6;6619:3;6616:15;6608:217;;;6704:3;6691:17;6721:31;6746:5;6721:31;:::i;:::-;6765:18;;6641:12;;;;6803;;;;6608:217;;;6844:5;5889:966;-1:-1:-1;;;;;;;5889:966:1:o;6860:891::-;6944:6;6975:2;7018;7006:9;6997:7;6993:23;6989:32;6986:52;;;7034:1;7031;7024:12;6986:52;7074:9;7061:23;7107:18;7099:6;7096:30;7093:50;;;7139:1;7136;7129:12;7093:50;7162:22;;7215:4;7207:13;;7203:27;-1:-1:-1;7193:55:1;;7244:1;7241;7234:12;7193:55;7280:2;7267:16;7303:60;7319:43;7359:2;7319:43;:::i;7303:60::-;7397:15;;;7479:1;7475:10;;;;7467:19;;7463:28;;;7428:12;;;;7503:19;;;7500:39;;;7535:1;7532;7525:12;7500:39;7559:11;;;;7579:142;7595:6;7590:3;7587:15;7579:142;;;7661:17;;7649:30;;7612:12;;;;7699;;;;7579:142;;7756:382;7821:6;7829;7882:2;7870:9;7861:7;7857:23;7853:32;7850:52;;;7898:1;7895;7888:12;7850:52;7937:9;7924:23;7956:31;7981:5;7956:31;:::i;:::-;8006:5;-1:-1:-1;8063:2:1;8048:18;;8035:32;8076:30;8035:32;8076:30;:::i;:::-;8125:7;8115:17;;;7756:382;;;;;:::o;8143:388::-;8211:6;8219;8272:2;8260:9;8251:7;8247:23;8243:32;8240:52;;;8288:1;8285;8278:12;8240:52;8327:9;8314:23;8346:31;8371:5;8346:31;:::i;:::-;8396:5;-1:-1:-1;8453:2:1;8438:18;;8425:32;8466:33;8425:32;8466:33;:::i;8536:377::-;8610:6;8618;8626;8679:2;8667:9;8658:7;8654:23;8650:32;8647:52;;;8695:1;8692;8685:12;8647:52;8734:9;8721:23;8753:28;8775:5;8753:28;:::i;:::-;8800:5;8852:2;8837:18;;8824:32;;-1:-1:-1;8903:2:1;8888:18;;;8875:32;;8536:377;-1:-1:-1;;;8536:377:1:o;8918:409::-;9120:2;9102:21;;;9159:2;9139:18;;;9132:30;9198:34;9193:2;9178:18;;9171:62;-1:-1:-1;;;9264:2:1;9249:18;;9242:43;9317:3;9302:19;;8918:409::o;9332:127::-;9393:10;9388:3;9384:20;9381:1;9374:31;9424:4;9421:1;9414:15;9448:4;9445:1;9438:15;9464:128;9504:3;9535:1;9531:6;9528:1;9525:13;9522:39;;;9541:18;;:::i;:::-;-1:-1:-1;9577:9:1;;9464:128::o;9947:168::-;9987:7;10053:1;10049;10045:6;10041:14;10038:1;10035:21;10030:1;10023:9;10016:17;10012:45;10009:71;;;10060:18;;:::i;:::-;-1:-1:-1;10100:9:1;;9947:168::o;10120:127::-;10181:10;10176:3;10172:20;10169:1;10162:31;10212:4;10209:1;10202:15;10236:4;10233:1;10226:15;10252:380;10331:1;10327:12;;;;10374;;;10395:61;;10449:4;10441:6;10437:17;10427:27;;10395:61;10502:2;10494:6;10491:14;10471:18;10468:38;10465:161;;;10548:10;10543:3;10539:20;10536:1;10529:31;10583:4;10580:1;10573:15;10611:4;10608:1;10601:15;10465:161;;10252:380;;;:::o;10637:335::-;10839:2;10821:21;;;10878:2;10858:18;;;10851:30;-1:-1:-1;;;10912:2:1;10897:18;;10890:41;10963:2;10948:18;;10637:335::o;11256:245::-;11323:6;11376:2;11364:9;11355:7;11351:23;11347:32;11344:52;;;11392:1;11389;11382:12;11344:52;11424:9;11418:16;11443:28;11465:5;11443:28;:::i;11506:135::-;11545:3;-1:-1:-1;;11566:17:1;;11563:43;;;11586:18;;:::i;:::-;-1:-1:-1;11633:1:1;11622:13;;11506:135::o;13091:217::-;13131:1;13157;13147:132;;13201:10;13196:3;13192:20;13189:1;13182:31;13236:4;13233:1;13226:15;13264:4;13261:1;13254:15;13147:132;-1:-1:-1;13293:9:1;;13091:217::o;15021:251::-;15091:6;15144:2;15132:9;15123:7;15119:23;15115:32;15112:52;;;15160:1;15157;15150:12;15112:52;15192:9;15186:16;15211:31;15236:5;15211:31;:::i;15277:461::-;15330:3;15368:5;15362:12;15395:6;15390:3;15383:19;15421:4;15450:2;15445:3;15441:12;15434:19;;15487:2;15480:5;15476:14;15508:1;15518:195;15532:6;15529:1;15526:13;15518:195;;;15597:13;;-1:-1:-1;;;;;15593:39:1;15581:52;;15653:12;;;;15688:15;;;;15629:1;15547:9;15518:195;;;-1:-1:-1;15729:3:1;;15277:461;-1:-1:-1;;;;;15277:461:1:o;15743:332::-;15950:6;15939:9;15932:25;15993:2;15988;15977:9;15973:18;15966:30;15913:4;16013:56;16065:2;16054:9;16050:18;16042:6;16013:56;:::i;:::-;16005:64;15743:332;-1:-1:-1;;;;15743:332:1:o;16080:881::-;16175:6;16206:2;16249;16237:9;16228:7;16224:23;16220:32;16217:52;;;16265:1;16262;16255:12;16217:52;16298:9;16292:16;16331:18;16323:6;16320:30;16317:50;;;16363:1;16360;16353:12;16317:50;16386:22;;16439:4;16431:13;;16427:27;-1:-1:-1;16417:55:1;;16468:1;16465;16458:12;16417:55;16497:2;16491:9;16520:60;16536:43;16576:2;16536:43;:::i;16520:60::-;16614:15;;;16696:1;16692:10;;;;16684:19;;16680:28;;;16645:12;;;;16720:19;;;16717:39;;;16752:1;16749;16742:12;16717:39;16776:11;;;;16796:135;16812:6;16807:3;16804:15;16796:135;;;16878:10;;16866:23;;16829:12;;;;16909;;;;16796:135;;17656:125;17696:4;17724:1;17721;17718:8;17715:34;;;17729:18;;:::i;:::-;-1:-1:-1;17766:9:1;;17656:125::o;17786:127::-;17847:10;17842:3;17838:20;17835:1;17828:31;17878:4;17875:1;17868:15;17902:4;17899:1;17892:15;19658:582;19957:6;19946:9;19939:25;20000:6;19995:2;19984:9;19980:18;19973:34;20043:3;20038:2;20027:9;20023:18;20016:31;19920:4;20064:57;20116:3;20105:9;20101:19;20093:6;20064:57;:::i;:::-;-1:-1:-1;;;;;20157:32:1;;;;20152:2;20137:18;;20130:60;-1:-1:-1;20221:3:1;20206:19;20199:35;20056:65;19658:582;-1:-1:-1;;;19658:582:1:o;20245:136::-;20280:3;-1:-1:-1;;;20301:22:1;;20298:48;;;20326:18;;:::i;:::-;-1:-1:-1;20366:1:1;20362:13;;20245:136::o;21208:306::-;21296:6;21304;21312;21365:2;21353:9;21344:7;21340:23;21336:32;21333:52;;;21381:1;21378;21371:12;21333:52;21410:9;21404:16;21394:26;;21460:2;21449:9;21445:18;21439:25;21429:35;;21504:2;21493:9;21489:18;21483:25;21473:35;;21208:306;;;;;:::o

Swarm Source

ipfs://59f343afb5cb8dbd3615f24ac42131089d86c2962e2ac33e094e26a7ad5c0c92
Loading