Token Sphere Finance

Overview ERC-20

Total Supply:
5,000,000,000 SPHERE

Holders:
5 addresses

Profile Summary

 
Contract:
0x8a87d9bd15804d137d5bb17b7ff7af8fb5507d7f0x8a87d9bd15804d137d5bB17b7Ff7af8Fb5507D7f

Decimals:
18
Balance
1 SPHERE
0xbe188d6641e8b680743a4815dfa0f6208038960f
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:
SphereToken

Compiler Version
v0.7.6+commit.7338295f

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, None license

Contract Source Code (Solidity)

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

// SPDX-License-Identifier: MIT

pragma solidity ^0.7.4;

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

interface IERC20 {
    function totalSupply() external view returns (uint256);

    function balanceOf(address who) external view returns (uint256);

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

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

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

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

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

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

library SafeMath {
    function add(uint256 a, uint256 b) internal pure returns (uint256) {
        uint256 c = a + b;
        require(c >= a, "SafeMath: addition overflow");

        return c;
    }

    function sub(uint256 a, uint256 b) internal pure returns (uint256) {
        return sub(a, b, "SafeMath: subtraction overflow");
    }

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

        return c;
    }

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

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

        return c;
    }

    function div(uint256 a, uint256 b) internal pure returns (uint256) {
        return div(a, b, "SafeMath: division by zero");
    }

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

        return c;
    }

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

interface InterfaceLP {
    function sync() external;
}

library Roles {
    struct Role {
        mapping(address => bool) bearer;
    }

    function add(Role storage role, address account) internal {
        require(!has(role, account), "Roles: account already has role");
        role.bearer[account] = true;
    }

    function remove(Role storage role, address account) internal {
        require(has(role, account), "Roles: account does not have role");
        role.bearer[account] = false;
    }

    function has(Role storage role, address account)
        internal
        view
        returns (bool)
    {
        require(account != address(0), "Roles: account is the zero address");
        return role.bearer[account];
    }
}

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

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

    function WETH() 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 addLiquidityETH(
        address token,
        uint256 amountTokenDesired,
        uint256 amountTokenMin,
        uint256 amountETHMin,
        address to,
        uint256 deadline
    )
        external
        payable
        returns (
            uint256 amountToken,
            uint256 amountETH,
            uint256 liquidity
        );

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

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

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

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

contract Ownable {
    address private _owner;

    event OwnershipRenounced(address indexed previousOwner);

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

    constructor() {
        _owner = msg.sender;
    }

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

    modifier onlyOwner() {
        require(msg.sender == _owner, "Not owner");
        _;
    }

    function renounceOwnership() public onlyOwner {
        emit OwnershipRenounced(_owner);
        _owner = address(0);
    }

    function transferOwnership(address newOwner) public onlyOwner {
        _transferOwnership(newOwner);
    }

    function _transferOwnership(address newOwner) internal {
        require(newOwner != address(0));
        emit OwnershipTransferred(_owner, newOwner);
        _owner = newOwner;
    }
}

contract SphereToken is ERC20Detailed, Ownable {
    using SafeMath for uint256;
    using SafeMathInt for int256;

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

    uint256 public rewardYield = 3943560072416;
    uint256 public rewardYieldDenominator = 10000000000000000;
    uint256 public maxSellTransactionAmount = 2500000 * 10**18;

    uint256 public rebaseFrequency = 1800;
    uint256 public nextRebase = block.timestamp + 31536000;
    uint256 public rebaseEpoch = 0;

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

    uint256 public constant MAX_FEE_RATE = 25;
    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 =
        5 * 10**9 * 10**DECIMALS;
    uint256 private constant TOTAL_GONS =
        MAX_UINT256 - (MAX_UINT256 % INITIAL_FRAGMENTS_SUPPLY);
    uint256 private constant MAX_SUPPLY = ~uint128(0);

    address DEAD = 0x000000000000000000000000000000000000dEaD;
    address ZERO = 0x0000000000000000000000000000000000000000;

    address public liquidityReceiver =
        0x2f1DdC20851E5662305eF87dcE360349465F3c98;
    address public treasuryReceiver =
        0xd8070f711fF60b158BdA0489b0b6390DBF6Bb86c;
    address public riskFreeValueReceiver =
        0x936a57b1e6CBf91D923815a3cDBEFDcC76588fcd;
    address public maiToken = 0x3d736DC9bA02df9b89fC03efce97d20C13479D74;
    address public burnReceiver = 0x0000000000000000000000000000000000000000;

    IDEXRouter public router;
    address public pair;

    uint256 public liquidityFee = 5;
    uint256 public treasuryFee = 3;
    uint256 public buyFeeRFV = 5;
    uint256 public sellFeeTreasuryAdded = 2;
    uint256 public sellFeeRFVAdded = 5;
    uint256 public burnFeeAdded = 30;
    uint256 public totalBuyFee = liquidityFee.add(treasuryFee).add(buyFeeRFV).add(burnFeeAdded);
    uint256 public totalSellFee =
        totalBuyFee.add(sellFeeTreasuryAdded).add(sellFeeRFVAdded);
    uint256 public feeDenominator = 100;

    uint256 targetLiquidity = 50;
    uint256 targetLiquidityDenominator = 100;

    bool inSwap;

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

    modifier validRecipient(address to) {
        require(to != address(0x0));
        _;
    }

    uint256 private _totalSupply;
    uint256 private _gonsPerFragment;
    uint256 private gonSwapThreshold = (TOTAL_GONS * 10) / 10000;

    mapping(address => uint256) private _gonBalances;
    mapping(address => mapping(address => uint256)) private _allowedFragments;

    constructor() ERC20Detailed("Sphere Finance", "SPHERE", uint8(DECIMALS)) {
        router = IDEXRouter(0xbdd4e5660839a088573191A9889A262c0Efc0983);
        pair = IDEXFactory(router.factory()).createPair(
            address(this),
            router.WETH()
        );
        address pairmiMATIC = IDEXFactory(router.factory()).createPair(
            address(this),
            maiToken
        );

        _allowedFragments[address(this)][address(router)] = uint256(-1);
        _allowedFragments[address(this)][pair] = uint256(-1);
        _allowedFragments[address(this)][address(this)] = uint256(-1);
        _allowedFragments[address(this)][pairmiMATIC] = uint256(-1);

        setAutomatedMarketMakerPair(pair, true);
        setAutomatedMarketMakerPair(pairmiMATIC, true);

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

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

        IERC20(maiToken).approve(address(router), uint256(-1));
        IERC20(maiToken).approve(address(pairmiMATIC), uint256(-1));
        IERC20(maiToken).approve(address(this), uint256(-1));

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

    receive() external payable {}

    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) {
        return _gonBalances[who].div(_gonsPerFragment);
    }

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

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

    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 &&
            totalBuyFee.add(totalSellFee) > 0 &&
            _gonBalances[address(this)] >= gonSwapThreshold;
    }

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

    function getCurrentTimestamp() public view returns (uint256) {
        return block.timestamp;
    }

    function getLiquidityBacking(uint256 accuracy)
        public
        view
        returns (uint256)
    {
        uint256 liquidityBalance = 0;
        for (uint256 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 manualSync() public {
        for (uint256 i = 0; i < _markerPairs.length; i++) {
            InterfaceLP(_markerPairs[i]).sync();
        }
    }

    function transfer(address to, uint256 value)
        external
        override
        validRecipient(to)
        returns (bool)
    {
        _transferFrom(msg.sender, to, value);
        return true;
    }

    function _basicTransfer(
        address from,
        address to,
        uint256 amount
    ) internal returns (bool) {
        uint256 gonAmount = amount.mul(_gonsPerFragment);
        _gonBalances[from] = _gonBalances[from].sub(gonAmount);
        _gonBalances[to] = _gonBalances[to].add(gonAmount);

        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) {
            require(amount <= maxSellTransactionAmount, "Error amount");
        }

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

        uint256 gonAmount = amount.mul(_gonsPerFragment);

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

        _gonBalances[sender] = _gonBalances[sender].sub(gonAmount);

        uint256 gonAmountReceived = shouldTakeFee(sender, recipient)
            ? takeFee(sender, recipient, gonAmount)
            : gonAmount;
        _gonBalances[recipient] = _gonBalances[recipient].add(
            gonAmountReceived
        );

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

        if (shouldRebase() && autoRebase) {
            _rebase();

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

        return true;
    }

    function transferFrom(
        address from,
        address to,
        uint256 value
    ) external override validRecipient(to) returns (bool) {
        if (_allowedFragments[from][msg.sender] != uint256(-1)) {
            _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);

        if (isLiquidityInMatic) {
            uint256 initialBalance = address(this).balance;

            _swapTokensForMATIC(half, address(this));

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

            _addLiquidity(otherHalf, newBalance);

            emit SwapAndLiquify(half, newBalance, otherHalf);
        } else {
            uint256 initialBalance = IERC20(maiToken).balanceOf(address(this));

            _swapTokensFormiMATIC(half, address(this));

            uint256 newBalance = IERC20(maiToken).balanceOf(address(this)).sub(
                initialBalance
            );

            _addLiquiditymiMATIC(otherHalf, newBalance);

            emit SwapAndLiquifymiMATIC(half, newBalance, otherHalf);
        }
    }

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

    function _addLiquiditymiMATIC(uint256 tokenAmount, uint256 miMATICAmount)
        private
    {
        router.addLiquidity(
            address(this),
            maiToken,
            tokenAmount,
            miMATICAmount,
            0,
            0,
            liquidityReceiver,
            block.timestamp
        );
    }

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

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

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

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

    function swapBack() internal swapping {
        uint256 realTotalFee = totalBuyFee.add(totalSellFee);

        uint256 dynamicLiquidityFee = isOverLiquified(
            targetLiquidity,
            targetLiquidityDenominator
        )
            ? 0
            : liquidityFee;
        uint256 contractTokenBalance = _gonBalances[address(this)].div(
            _gonsPerFragment
        );

        uint256 amountToLiquify = contractTokenBalance
            .mul(dynamicLiquidityFee.mul(2))
            .div(realTotalFee);
        uint256 amountToRFV = contractTokenBalance
            .mul(buyFeeRFV.mul(2).add(sellFeeRFVAdded))
            .div(realTotalFee);

        uint256 amountToTreasury = contractTokenBalance
        .sub(amountToLiquify)
        .sub(amountToRFV);

        uint256 amountToBurn = contractTokenBalance
        .mul(burnFeeAdded)
        .div(realTotalFee);

        if (amountToLiquify > 0) {
            _swapAndLiquify(amountToLiquify);
        }

        if (amountToRFV > 0) {
            _swapTokensFormiMATIC(amountToRFV, riskFreeValueReceiver);
        }

        if (amountToTreasury > 0) {
            _swapTokensForMATIC(amountToTreasury, treasuryReceiver);
        }

        if (amountToBurn > 0) {
            emit Transfer(msg.sender, address(burnReceiver), amountToBurn);
        }

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

    function takeFee(
        address sender,
        address recipient,
        uint256 gonAmount
    ) internal returns (uint256) {
        uint256 _realFee = totalBuyFee;
        if (automatedMarketMakerPairs[recipient]) _realFee = totalSellFee;

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

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

        return gonAmount.sub(feeAmount);
    }

    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) {
            uint256 circulatingSupply = getCirculatingSupply();
            int256 supplyDelta = int256(
                circulatingSupply.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 = epoch + rebaseFrequency;
        rebaseEpoch += 1;

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

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

        uint256 circulatingSupply = getCirculatingSupply();
        int256 supplyDelta = int256(
            circulatingSupply.mul(rewardYield).div(rewardYieldDenominator)
        );

        coreRebase(supplyDelta);
        manualSync();
    }

    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 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 _burnValueReceiver
    ) external onlyOwner {
        liquidityReceiver = _liquidityReceiver;
        treasuryReceiver = _treasuryReceiver;
        riskFreeValueReceiver = _riskFreeValueReceiver;
        burnReceiver = _burnValueReceiver;
    }

    function setFees(
        uint256 _liquidityFee,
        uint256 _riskFreeValue,
        uint256 _treasuryFee,
        uint256 _sellFeeTreasuryAdded,
        uint256 _sellFeeRFVAdded,
        uint256 _burnFee,
        uint256 _feeDenominator
    ) external onlyOwner {
        //check if total value does not exceed 20%
        //PoC that Libero's contract is exploitable:
        //https://mumbai.polygonscan.com/address/0x6fc034596feb97a522346d7a42e705b075632d0c#readContract
        //Libero Contract: https://bscscan.com/address/0x0dfcb45eae071b3b846e220560bbcdd958414d78#readContract
        uint256 maxTotalBuyFee = _liquidityFee.add(_treasuryFee).add(_riskFreeValue).add(_burnFee);
        uint256 maxTotalSellFee = maxTotalBuyFee.add(_sellFeeTreasuryAdded).add(
            _sellFeeRFVAdded
        );

        require(
            _liquidityFee <= MAX_FEE_RATE &&
                _riskFreeValue <= MAX_FEE_RATE &&
                _treasuryFee <= MAX_FEE_RATE &&
                _sellFeeTreasuryAdded <= MAX_FEE_RATE &&
                _sellFeeRFVAdded <= MAX_FEE_RATE,
            "wrong"
        );

        require(maxTotalBuyFee < MAX_FEE_RATE, "exceeded max buy fees");

        require(maxTotalSellFee < MAX_FEE_RATE, "exceeded max sell fees");

        liquidityFee = _liquidityFee;
        buyFeeRFV = _riskFreeValue;
        treasuryFee = _treasuryFee;
        sellFeeTreasuryAdded = _sellFeeTreasuryAdded;
        sellFeeRFVAdded = _sellFeeRFVAdded;
        burnFeeAdded = _burnFee;
        totalBuyFee = liquidityFee.add(treasuryFee).add(buyFeeRFV).add(burnFeeAdded);
        totalSellFee = totalBuyFee.add(sellFeeTreasuryAdded).add(
            sellFeeRFVAdded
        );
        feeDenominator = _feeDenominator;
        require(totalBuyFee < feeDenominator / 4);
    }

    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 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 setIsLiquidityInMATIC(bool _value) external onlyOwner {
        require(isLiquidityInMatic != _value, "Not changed");
        isLiquidityInMatic = _value;
    }

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

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

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

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":"previousOwner","type":"address"}],"name":"OwnershipRenounced","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":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":"MATICReceived","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"tokensIntoLiqudity","type":"uint256"}],"name":"SwapAndLiquify","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"tokensSwapped","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"miMATICReceived","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"tokensIntoLiqudity","type":"uint256"}],"name":"SwapAndLiquifymiMATIC","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"},{"inputs":[],"name":"MAX_FEE_RATE","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"_markerPairs","outputs":[{"internalType":"address","name":"","type":"address"}],"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":[],"name":"burnFeeAdded","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"burnReceiver","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyFeeRFV","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","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":[{"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":[],"name":"feeDenominator","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":"getCirculatingSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getCurrentTimestamp","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":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"initialDistributionFinished","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"isLiquidityInMatic","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":[],"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":"maiToken","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"manualRebase","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":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"pair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"rebaseEpoch","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"rebaseFrequency","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","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":[],"name":"riskFreeValueReceiver","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"router","outputs":[{"internalType":"contract IDEXRouter","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellFeeRFVAdded","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellFeeTreasuryAdded","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","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":"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":"_burnValueReceiver","type":"address"}],"name":"setFeeReceivers","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_liquidityFee","type":"uint256"},{"internalType":"uint256","name":"_riskFreeValue","type":"uint256"},{"internalType":"uint256","name":"_treasuryFee","type":"uint256"},{"internalType":"uint256","name":"_sellFeeTreasuryAdded","type":"uint256"},{"internalType":"uint256","name":"_sellFeeRFVAdded","type":"uint256"},{"internalType":"uint256","name":"_burnFee","type":"uint256"},{"internalType":"uint256","name":"_feeDenominator","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":"bool","name":"_value","type":"bool"}],"name":"setIsLiquidityInMATIC","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":"_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":"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":[],"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":[],"name":"totalBuyFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSellFee","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":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"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"},{"stateMutability":"payable","type":"receive"}]

60806040526002805462ffffff60b81b1961ffff60a81b19909116600160b01b1716600160c81b1781556503962e7f4ce06003908155662386f26fc100006004556a021165458500521280000060059081556107086006556301e1338042016007556000600855600c80546001600160a01b031990811661dead17909155600d805482169055600e80548216732f1ddc20851e5662305ef87dce360349465f3c98179055600f8054821673d8070f711ff60b158bda0489b0b6390dbf6bb86c17905560108054821673936a57b1e6cbf91d923815a3cdbefdcc76588fcd179055601180548216733d736dc9ba02df9b89fc03efce97d20c13479d741790556012805490911690556015819055601682905560178190556018929092556019829055601e601a819055620001619290916200014d9190829082906200247d620007ff602090811b91909117901c565b620007ff60201b6200247d1790919060201c565b601b55620001896019546200014d601854601b54620007ff60201b6200247d1790919060201c565b601c556064601d8190556032601e55601f557e068db8bac710cb295e9e1b089a027525460aa64c2f0c0aa63ae238dca2339c602355348015620001cb57600080fd5b50604080518082018252600e81526d5370686572652046696e616e636560901b60208083019182528351808501909452600684526553504845524560d01b90840152815191929160129162000224916000919062000bfa565b5081516200023a90600190602085019062000bfa565b506002805460ff191660ff9290921691909117610100600160a81b031916610100330217905550506013805473bdd4e5660839a088573191a9889a262c0efc09836001600160a01b031990911617908190556040805163c45a015560e01b815290516001600160a01b039092169163c45a015591600480820192602092909190829003018186803b158015620002cf57600080fd5b505afa158015620002e4573d6000803e3d6000fd5b505050506040513d6020811015620002fb57600080fd5b5051601354604080516315ab88c960e31b815290516001600160a01b039384169363c9c6539693309391169163ad5c464891600480820192602092909190829003018186803b1580156200034e57600080fd5b505afa15801562000363573d6000803e3d6000fd5b505050506040513d60208110156200037a57600080fd5b5051604080516001600160e01b031960e086901b1681526001600160a01b0393841660048201529290911660248301525160448083019260209291908290030181600087803b158015620003cd57600080fd5b505af1158015620003e2573d6000803e3d6000fd5b505050506040513d6020811015620003f957600080fd5b5051601480546001600160a01b0319166001600160a01b039283161790556013546040805163c45a015560e01b81529051600093929092169163c45a015591600480820192602092909190829003018186803b1580156200045957600080fd5b505afa1580156200046e573d6000803e3d6000fd5b505050506040513d60208110156200048557600080fd5b5051601154604080516364e329cb60e11b81523060048201526001600160a01b0392831660248201529051919092169163c9c653969160448083019260209291908290030181600087803b158015620004dd57600080fd5b505af1158015620004f2573d6000803e3d6000fd5b505050506040513d60208110156200050957600080fd5b50513060008181526025602090815260408083206013546001600160a01b0390811685529252808320600019908190556014805484168552828520829055948452818420819055828616845292209190915590549192506200056e9116600162000861565b6200057b81600162000861565b6b1027e72f1f1281308800000060219081553360009081526024602090815260409091206b01d290004395eb7bbfffffff19908190559154620005c89291620024d762000b09821b17901c565b602255600f546001600160a01b0390811660009081526009602090815260408083208054600160ff199182168117909255601054861685528285208054821683179055601254861685528285208054821683179055308552828520805482168317905533855282852080549091169091179055601154601354825163095ea7b360e01b815290861660048201526000196024820152915194169363095ea7b393604480840194938390030190829087803b1580156200068657600080fd5b505af11580156200069b573d6000803e3d6000fd5b505050506040513d6020811015620006b257600080fd5b50506011546040805163095ea7b360e01b81526001600160a01b03848116600483015260001960248301529151919092169163095ea7b39160448083019260209291908290030181600087803b1580156200070c57600080fd5b505af115801562000721573d6000803e3d6000fd5b505050506040513d60208110156200073857600080fd5b50506011546040805163095ea7b360e01b8152306004820152600019602482015290516001600160a01b039092169163095ea7b3916044808201926020929091908290030181600087803b1580156200079057600080fd5b505af1158015620007a5573d6000803e3d6000fd5b505050506040513d6020811015620007bc57600080fd5b5050602154604080519182525133916000917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9181900360200190a35062000ca6565b6000828201838110156200085a576040805162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b9392505050565b60025461010090046001600160a01b03163314620008b2576040805162461bcd60e51b81526020600482015260096024820152682737ba1037bbb732b960b91b604482015290519081900360640190fd5b6001600160a01b0382166000908152600b602052604090205460ff16151581151514156200091b576040805162461bcd60e51b815260206004820152601160248201527015985b1d5948185b1c9958591e481cd95d607a1b604482015290519081900360640190fd5b6001600160a01b0382166000908152600b60205260409020805460ff191682158015919091179091556200099a57600a80546001810182556000919091527fc65a7bb8d6351c1cf70c95a316cc6a92839c986682d98bc35f958f4883f9d2a80180546001600160a01b0319166001600160a01b03841617905562000acd565b600a54600110620009e4576040805162461bcd60e51b815260206004820152600f60248201526e2932b8bab4b932b21018903830b4b960891b604482015290519081900360640190fd5b60005b600a5481101562000acb57826001600160a01b0316600a828154811062000a0a57fe5b6000918252602090912001546001600160a01b0316141562000ac257600a8054600019810190811062000a3957fe5b600091825260209091200154600a80546001600160a01b03909216918390811062000a6057fe5b9060005260206000200160006101000a8154816001600160a01b0302191690836001600160a01b03160217905550600a80548062000a9a57fe5b600082815260209020810160001990810180546001600160a01b031916905501905562000acb565b600101620009e7565b505b604051811515906001600160a01b038416907fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab90600090a35050565b60006200085a83836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f00000000000081525062000b5360201b60201c565b6000818362000be35760405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b8381101562000ba757818101518382015260200162000b8d565b50505050905090810190601f16801562000bd55780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b50600083858162000bf057fe5b0495945050505050565b828054600181600116156101000203166002900490600052602060002090601f01602090048101928262000c32576000855562000c7d565b82601f1062000c4d57805160ff191683800117855562000c7d565b8280016001018555821562000c7d579182015b8281111562000c7d57825182559160200191906001019062000c60565b5062000c8b92915062000c8f565b5090565b5b8082111562000c8b576000815560010162000c90565b61368e8062000cb66000396000f3fe6080604052600436106103f35760003560e01c80637ac8292711610208578063a9059cbb11610118578063d7832b11116100ab578063e15beb801161007a578063e15beb8014610d2a578063e1d5584c14610d56578063f2fde38b14610d80578063f3a54f2c14610db3578063f887ea4014610ddf576103fa565b8063d7832b1114610c77578063da1a7be914610c8c578063da2e3bad14610ca1578063dd62ed3e14610cef576103fa565b8063d0889358116100e7578063d088935814610bcd578063d1fce26414610c05578063d439979014610c1a578063d51ed1c814610c4d576103fa565b8063a9059cbb14610b37578063b62496f514610b70578063bc7e68a314610ba3578063cc32d17614610bb8576103fa565b806392f6576e1161019b5780639a7a23d61161016a5780639a7a23d614610a6f5780639ae7372d14610aaa5780639d9241ec14610ad4578063a457c2d714610ae9578063a8aa1b3114610b22576103fa565b806392f6576e14610a1b57806395d89b4114610a305780639763eec414610a4557806398118cb414610a5a576103fa565b80638da5cb5b116101d75780638da5cb5b1461098a5780638dbb08ba1461099f5780638ebfc796146109cb5780639079f93214610a06576103fa565b80637ac82927146109365780637d4b50171461094b5780638102c5701461096057806389375abf14610975576103fa565b8063395093511161030357806361a9d1b1116102965780636f8f3104116102655780636f8f31041461089157806370a08231146108a6578063715018a6146108d9578063753d02a1146108ee578063764d72bf14610903576103fa565b806361a9d1b11461083d5780636c9230db146108525780636d351d1a146108675780636ddd17131461087c576103fa565b806357b535c0116102d257806357b535c0146107d457806359b107b9146107e95780635abe6711146107fe5780635c38ffe214610813576103fa565b806339509351146107115780633c8e556d1461074a5780634cd9ddf21461079557806352b9835a146107bf576103fa565b8063180b0d7e11610386578063240cd44811610355578063240cd4481461066e578063264d26dd146106835780632b112e4914610698578063313ce567146106ad57806333f3d628146106d8576103fa565b8063180b0d7e146105d157806318160ddd146105e6578063201e7991146105fb57806323b872dd1461062b576103fa565b8063095ea7b3116103c2578063095ea7b3146105135780630af08314146105605780631161ae39146105755780631276089b146105a5576103fa565b806301b16827146103ff57806302259e9e1461043157806306fdde031461045857806308b1fd8f146104e2576103fa565b366103fa57005b600080fd5b34801561040b57600080fd5b5061042f6004803603604081101561042257600080fd5b5080359060200135610df4565b005b34801561043d57600080fd5b50610446610e4f565b60408051918252519081900360200190f35b34801561046457600080fd5b5061046d610e55565b6040805160208082528351818301528351919283929083019185019080838360005b838110156104a757818101518382015260200161048f565b50505050905090810190601f1680156104d45780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b3480156104ee57600080fd5b506104f7610eeb565b604080516001600160a01b039092168252519081900360200190f35b34801561051f57600080fd5b5061054c6004803603604081101561053657600080fd5b506001600160a01b038135169060200135610efa565b604080519115158252519081900360200190f35b34801561056c57600080fd5b50610446610f61565b34801561058157600080fd5b5061054c6004803603604081101561059857600080fd5b5080359060200135610f67565b3480156105b157600080fd5b5061042f600480360360208110156105c857600080fd5b50351515610f7b565b3480156105dd57600080fd5b5061044661103d565b3480156105f257600080fd5b50610446611043565b34801561060757600080fd5b5061042f6004803603604081101561061e57600080fd5b5080359060200135611049565b34801561063757600080fd5b5061054c6004803603606081101561064e57600080fd5b506001600160a01b038135811691602081013590911690604001356110a4565b34801561067a57600080fd5b5061054c61117e565b34801561068f57600080fd5b506104f761118e565b3480156106a457600080fd5b5061044661119d565b3480156106b957600080fd5b506106c26111ff565b6040805160ff9092168252519081900360200190f35b3480156106e457600080fd5b5061054c600480360360408110156106fb57600080fd5b506001600160a01b038135169060200135611208565b34801561071d57600080fd5b5061054c6004803603604081101561073457600080fd5b506001600160a01b0381351690602001356112dd565b34801561075657600080fd5b5061042f6004803603608081101561076d57600080fd5b506001600160a01b038135811691602081013582169160408201358116916060013516611370565b3480156107a157600080fd5b5061042f600480360360208110156107b857600080fd5b5035611410565b3480156107cb57600080fd5b506104466114a7565b3480156107e057600080fd5b506104466114ad565b3480156107f557600080fd5b506104466114b3565b34801561080a57600080fd5b5061054c6114b9565b34801561081f57600080fd5b5061042f6004803603602081101561083657600080fd5b50356114c9565b34801561084957600080fd5b5061042f61151e565b34801561085e57600080fd5b50610446611638565b34801561087357600080fd5b5061044661163c565b34801561088857600080fd5b5061054c611655565b34801561089d57600080fd5b506104f7611665565b3480156108b257600080fd5b50610446600480360360208110156108c957600080fd5b50356001600160a01b0316611674565b3480156108e557600080fd5b5061042f6116a4565b3480156108fa57600080fd5b5061042f611743565b34801561090f57600080fd5b5061042f6004803603602081101561092657600080fd5b50356001600160a01b03166117cf565b34801561094257600080fd5b5061044661185c565b34801561095757600080fd5b506104f7611862565b34801561096c57600080fd5b50610446611871565b34801561098157600080fd5b50610446611877565b34801561099657600080fd5b506104f761187d565b3480156109ab57600080fd5b5061042f600480360360208110156109c257600080fd5b50351515611891565b3480156109d757600080fd5b5061042f600480360360408110156109ee57600080fd5b506001600160a01b0381351690602001351515611953565b348015610a1257600080fd5b5061054c611a30565b348015610a2757600080fd5b50610446611a40565b348015610a3c57600080fd5b5061046d611a45565b348015610a5157600080fd5b50610446611aa5565b348015610a6657600080fd5b50610446611aab565b348015610a7b57600080fd5b5061042f60048036036040811015610a9257600080fd5b506001600160a01b0381351690602001351515611ab1565b348015610ab657600080fd5b5061042f60048036036020811015610acd57600080fd5b5035611d4c565b348015610ae057600080fd5b50610446611da1565b348015610af557600080fd5b5061054c60048036036040811015610b0c57600080fd5b506001600160a01b038135169060200135611da7565b348015610b2e57600080fd5b506104f7611e90565b348015610b4357600080fd5b5061054c60048036036040811015610b5a57600080fd5b506001600160a01b038135169060200135611e9f565b348015610b7c57600080fd5b5061054c60048036036020811015610b9357600080fd5b50356001600160a01b0316611ecb565b348015610baf57600080fd5b50610446611ee0565b348015610bc457600080fd5b50610446611ee6565b348015610bd957600080fd5b5061042f60048036036060811015610bf057600080fd5b50803515159060208101359060400135611eec565b348015610c1157600080fd5b5061054c611f82565b348015610c2657600080fd5b5061054c60048036036020811015610c3d57600080fd5b50356001600160a01b0316611f92565b348015610c5957600080fd5b5061044660048036036020811015610c7057600080fd5b5035611fb0565b348015610c8357600080fd5b50610446612034565b348015610c9857600080fd5b506104f761203a565b348015610cad57600080fd5b5061042f600480360360e0811015610cc457600080fd5b5080359060208101359060408101359060608101359060808101359060a08101359060c00135612049565b348015610cfb57600080fd5b5061044660048036036040811015610d1257600080fd5b506001600160a01b038135811691602001351661223c565b348015610d3657600080fd5b5061042f60048036036020811015610d4d57600080fd5b50351515612267565b348015610d6257600080fd5b506104f760048036036020811015610d7957600080fd5b5035612329565b348015610d8c57600080fd5b5061042f60048036036020811015610da357600080fd5b50356001600160a01b0316612353565b348015610dbf57600080fd5b5061042f60048036036020811015610dd657600080fd5b503515156123ac565b348015610deb57600080fd5b506104f761246e565b60025461010090046001600160a01b03163314610e44576040805162461bcd60e51b81526020600482015260096024820152682737ba1037bbb732b960b91b604482015290519081900360640190fd5b600391909155600455565b60055481565b60008054604080516020601f6002600019610100600188161502019095169490940493840181900481028201810190925282815260609390929091830182828015610ee15780601f10610eb657610100808354040283529160200191610ee1565b820191906000526020600020905b815481529060010190602001808311610ec457829003601f168201915b5050505050905090565b600f546001600160a01b031681565b3360008181526025602090815260408083206001600160a01b038716808552908352818420869055815186815291519394909390927f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925928290030190a35060015b92915050565b60035481565b600082610f7383611fb0565b119392505050565b60025461010090046001600160a01b03163314610fcb576040805162461bcd60e51b81526020600482015260096024820152682737ba1037bbb732b960b91b604482015290519081900360640190fd5b60025460ff600160a81b909104161515811515141561101f576040805162461bcd60e51b815260206004820152600b60248201526a139bdd0818da185b99d95960aa1b604482015290519081900360640190fd5b60028054911515600160a81b0260ff60a81b19909216919091179055565b601d5481565b60215490565b60025461010090046001600160a01b03163314611099576040805162461bcd60e51b81526020600482015260096024820152682737ba1037bbb732b960b91b604482015290519081900360640190fd5b601e91909155601f55565b6000826001600160a01b0381166110ba57600080fd5b6001600160a01b038516600090815260256020908152604080832033845290915290205460001914611167576040805180820182526016815275496e73756666696369656e7420416c6c6f77616e636560501b6020808301919091526001600160a01b0388166000908152602582528381203382529091529190912054611142918590612519565b6001600160a01b03861660009081526025602090815260408083203384529091529020555b6111728585856125b0565b50600195945050505050565b600254600160c81b900460ff1681565b600e546001600160a01b031681565b602254600d546001600160a01b0390811660009081526024602052604080822054600c54909316825281205490926111fa9290916111f491906111ee906b01d290004395eb7bbfffffff1990612867565b90612867565b906124d7565b905090565b60025460ff1690565b60025460009061010090046001600160a01b0316331461125b576040805162461bcd60e51b81526020600482015260096024820152682737ba1037bbb732b960b91b604482015290519081900360640190fd5b6040805163a9059cbb60e01b81523360048201526024810184905290516001600160a01b0385169163a9059cbb9160448083019260209291908290030181600087803b1580156112aa57600080fd5b505af11580156112be573d6000803e3d6000fd5b505050506040513d60208110156112d457600080fd5b50519392505050565b3360009081526025602090815260408083206001600160a01b038616845290915281205461130b908361247d565b3360008181526025602090815260408083206001600160a01b0389168085529083529281902085905580519485525191937f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925929081900390910190a350600192915050565b60025461010090046001600160a01b031633146113c0576040805162461bcd60e51b81526020600482015260096024820152682737ba1037bbb732b960b91b604482015290519081900360640190fd5b600e80546001600160a01b039586166001600160a01b031991821617909155600f805494861694821694909417909355601080549285169284169290921790915560128054919093169116179055565b60025461010090046001600160a01b03163314611460576040805162461bcd60e51b81526020600482015260096024820152682737ba1037bbb732b960b91b604482015290519081900360640190fd5b6107088111156114a2576040805162461bcd60e51b81526020600482015260086024820152670a8dede40d0d2ced60c31b604482015290519081900360640190fd5b600655565b601a5481565b60085481565b601b5481565b600254600160c01b900460ff1681565b60025461010090046001600160a01b03163314611519576040805162461bcd60e51b81526020600482015260096024820152682737ba1037bbb732b960b91b604482015290519081900360640190fd5b600555565b60025461010090046001600160a01b0316331461156e576040805162461bcd60e51b81526020600482015260096024820152682737ba1037bbb732b960b91b604482015290519081900360640190fd5b60205460ff16156115b2576040805162461bcd60e51b81526020600482015260096024820152682a393c9030b3b0b4b760b91b604482015290519081900360640190fd5b4260075411156115f7576040805162461bcd60e51b815260206004820152600b60248201526a4e6f7420696e2074696d6560a81b604482015290519081900360640190fd5b600061160161119d565b905060006116206004546111f4600354856128a990919063ffffffff16565b905061162b81612902565b50611634611743565b5050565b4290565b60006111fa6022546023546124d790919063ffffffff16565b600254600160b01b900460ff1681565b6011546001600160a01b031681565b6022546001600160a01b038216600090815260246020526040812054909161169c91906124d7565b90505b919050565b60025461010090046001600160a01b031633146116f4576040805162461bcd60e51b81526020600482015260096024820152682737ba1037bbb732b960b91b604482015290519081900360640190fd5b6002546040516101009091046001600160a01b0316907ff8df31144d9c2f0f6b59d69b8b98abd5459d07f2742c4df920b25aae33c6482090600090a260028054610100600160a81b0319169055565b60005b600a548110156117cc57600a818154811061175d57fe5b60009182526020822001546040805160016209351760e01b0319815290516001600160a01b039092169263fff6cae99260048084019382900301818387803b1580156117a857600080fd5b505af11580156117bc573d6000803e3d6000fd5b5050600190920191506117469050565b50565b60025461010090046001600160a01b0316331461181f576040805162461bcd60e51b81526020600482015260096024820152682737ba1037bbb732b960b91b604482015290519081900360640190fd5b60405147906001600160a01b0383169082156108fc029083906000818181858888f19350505050158015611857573d6000803e3d6000fd5b505050565b60195481565b6010546001600160a01b031681565b60185481565b60065481565b60025461010090046001600160a01b031690565b60025461010090046001600160a01b031633146118e1576040805162461bcd60e51b81526020600482015260096024820152682737ba1037bbb732b960b91b604482015290519081900360640190fd5b60025460ff600160c81b9091041615158115151415611935576040805162461bcd60e51b815260206004820152600b60248201526a139bdd0818da185b99d95960aa1b604482015290519081900360640190fd5b60028054911515600160c81b0260ff60c81b19909216919091179055565b60025461010090046001600160a01b031633146119a3576040805162461bcd60e51b81526020600482015260096024820152682737ba1037bbb732b960b91b604482015290519081900360640190fd5b6001600160a01b03821660009081526009602052604090205460ff1615158115151415611a05576040805162461bcd60e51b815260206004820152600b60248201526a139bdd0818da185b99d95960aa1b604482015290519081900360640190fd5b6001600160a01b03919091166000908152600960205260409020805460ff1916911515919091179055565b600254600160b81b900460ff1681565b601981565b60018054604080516020601f60026000196101008789161502019095169490940493840181900481028201810190925282815260609390929091830182828015610ee15780601f10610eb657610100808354040283529160200191610ee1565b60175481565b60155481565b60025461010090046001600160a01b03163314611b01576040805162461bcd60e51b81526020600482015260096024820152682737ba1037bbb732b960b91b604482015290519081900360640190fd5b6001600160a01b0382166000908152600b602052604090205460ff1615158115151415611b69576040805162461bcd60e51b815260206004820152601160248201527015985b1d5948185b1c9958591e481cd95d607a1b604482015290519081900360640190fd5b6001600160a01b0382166000908152600b60205260409020805460ff19168215801591909117909155611be657600a80546001810182556000919091527fc65a7bb8d6351c1cf70c95a316cc6a92839c986682d98bc35f958f4883f9d2a80180546001600160a01b0319166001600160a01b038416179055611d10565b600a54600110611c2f576040805162461bcd60e51b815260206004820152600f60248201526e2932b8bab4b932b21018903830b4b960891b604482015290519081900360640190fd5b60005b600a54811015611d0e57826001600160a01b0316600a8281548110611c5357fe5b6000918252602090912001546001600160a01b03161415611d0657600a80546000198101908110611c8057fe5b600091825260209091200154600a80546001600160a01b039092169183908110611ca657fe5b9060005260206000200160006101000a8154816001600160a01b0302191690836001600160a01b03160217905550600a805480611cdf57fe5b600082815260209020810160001990810180546001600160a01b0319169055019055611d0e565b600101611c32565b505b604051811515906001600160a01b038416907fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab90600090a35050565b60025461010090046001600160a01b03163314611d9c576040805162461bcd60e51b81526020600482015260096024820152682737ba1037bbb732b960b91b604482015290519081900360640190fd5b600755565b601c5481565b3360009081526025602090815260408083206001600160a01b0386168452909152812054808310611dfb573360009081526025602090815260408083206001600160a01b0388168452909152812055611e2a565b611e058184612867565b3360009081526025602090815260408083206001600160a01b03891684529091529020555b3360008181526025602090815260408083206001600160a01b0389168085529083529281902054815190815290519293927f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925929181900390910190a35060019392505050565b6014546001600160a01b031681565b6000826001600160a01b038116611eb557600080fd5b611ec03385856125b0565b506001949350505050565b600b6020526000908152604090205460ff1681565b60075481565b60165481565b60025461010090046001600160a01b03163314611f3c576040805162461bcd60e51b81526020600482015260096024820152682737ba1037bbb732b960b91b604482015290519081900360640190fd5b6002805460ff60b01b1916600160b01b85151502179055611f7a82611f74836b1027e72f1f128130880000006000195b0619906124d7565b906128a9565b602355505050565b600254600160a81b900460ff1681565b6001600160a01b031660009081526009602052604090205460ff1690565b600080805b600a5481101561200457611ffb611ff4633b9aca006111f4600a8581548110611fda57fe5b6000918252602090912001546001600160a01b0316611674565b839061247d565b50600101611fb5565b5061202d612018633b9aca006111f461119d565b6111f46120268460026128a9565b86906128a9565b9392505050565b60045481565b6012546001600160a01b031681565b60025461010090046001600160a01b03163314612099576040805162461bcd60e51b81526020600482015260096024820152682737ba1037bbb732b960b91b604482015290519081900360640190fd5b60006120b1836120ab89818c8b61247d565b9061247d565b905060006120c3856120ab848961247d565b9050601989111580156120d7575060198811155b80156120e4575060198711155b80156120f1575060198611155b80156120fe575060198511155b612137576040805162461bcd60e51b815260206004820152600560248201526477726f6e6760d81b604482015290519081900360640190fd5b60198210612184576040805162461bcd60e51b81526020600482015260156024820152746578636565646564206d617820627579206665657360581b604482015290519081900360640190fd5b601981106121d2576040805162461bcd60e51b81526020600482015260166024820152756578636565646564206d61782073656c6c206665657360501b604482015290519081900360640190fd5b60158990556017889055601687905560188690556019859055601a849055612200846120ab8a818d8c61247d565b601b819055601954601854612218926120ab9161247d565b601c55601d83905560048304601b541061223157600080fd5b505050505050505050565b6001600160a01b03918216600090815260256020908152604080832093909416825291909152205490565b60025461010090046001600160a01b031633146122b7576040805162461bcd60e51b81526020600482015260096024820152682737ba1037bbb732b960b91b604482015290519081900360640190fd5b60025460ff600160b81b909104161515811515141561230b576040805162461bcd60e51b815260206004820152600b60248201526a139bdd0818da185b99d95960aa1b604482015290519081900360640190fd5b60028054911515600160b81b0260ff60b81b19909216919091179055565b600a818154811061233957600080fd5b6000918252602090912001546001600160a01b0316905081565b60025461010090046001600160a01b031633146123a3576040805162461bcd60e51b81526020600482015260096024820152682737ba1037bbb732b960b91b604482015290519081900360640190fd5b6117cc81612a0e565b60025461010090046001600160a01b031633146123fc576040805162461bcd60e51b81526020600482015260096024820152682737ba1037bbb732b960b91b604482015290519081900360640190fd5b60025460ff600160c01b9091041615158115151415612450576040805162461bcd60e51b815260206004820152600b60248201526a139bdd0818da185b99d95960aa1b604482015290519081900360640190fd5b60028054911515600160c01b0260ff60c01b19909216919091179055565b6013546001600160a01b031681565b60008282018381101561202d576040805162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b600061202d83836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250612a88565b600081848411156125a85760405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b8381101561256d578181015183820152602001612555565b50505050905090810190601f16801561259a5780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b505050900390565b6001600160a01b038316600090815260096020526040812054819060ff16806125f157506001600160a01b03841660009081526009602052604090205460ff165b600254909150600160a81b900460ff16806126095750805b612650576040805162461bcd60e51b8152602060048201526013602482015272151c98591a5b99c81b9bdd081cdd185c9d1959606a1b604482015290519081900360640190fd5b6001600160a01b0384166000908152600b602052604090205460ff168015612676575080155b156126c1576005548311156126c1576040805162461bcd60e51b815260206004820152600c60248201526b115c9c9bdc88185b5bdd5b9d60a21b604482015290519081900360640190fd5b60205460ff16156126df576126d7858585612aed565b91505061202d565b60006126f6602254856128a990919063ffffffff16565b9050612700612baa565b1561270d5761270d612c24565b6001600160a01b0386166000908152602460205260409020546127309082612867565b6001600160a01b0387166000908152602460205260408120919091556127568787612dd7565b612760578161276b565b61276b878784612e83565b6001600160a01b038716600090815260246020526040902054909150612791908261247d565b6001600160a01b0380881660008181526024602052604090209290925560225490891690600080516020613639833981519152906127d09085906124d7565b60408051918252519081900360200190a36127e9612f41565b80156127fe5750600254600160b81b900460ff165b1561285a5761280b612f4a565b6001600160a01b0387166000908152600b602052604090205460ff1615801561284d57506001600160a01b0386166000908152600b602052604090205460ff16155b1561285a5761285a611743565b5060019695505050505050565b600061202d83836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250612519565b6000826128b857506000610f5b565b828202828482816128c557fe5b041461202d5760405162461bcd60e51b81526004018080602001828103825260218152602001806136186021913960400191505060405180910390fd5b6000428261294c57602154604080519182525182917f72725a3b1e5bd622d6bcd1339bb31279c351abe8f541ac7fd320f24e1b1641f2919081900360200190a2505060215461169f565b600083121561296e57602154612966906000859003612867565b60215561297f565b60215461297b908461247d565b6021555b6021546001600160801b03101561299c576001600160801b036021555b6021546129b8906b1027e72f1f12813088000000600019611f6c565b6022556006548101600755600880546001019055602154604080519182525182917f72725a3b1e5bd622d6bcd1339bb31279c351abe8f541ac7fd320f24e1b1641f2919081900360200190a25050602154919050565b6001600160a01b038116612a2157600080fd5b6002546040516001600160a01b0380841692610100900416907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3600280546001600160a01b0390921661010002610100600160a81b0319909216919091179055565b60008183612ad75760405162461bcd60e51b815260206004820181815283516024840152835190928392604490910191908501908083836000831561256d578181015183820152602001612555565b506000838581612ae357fe5b0495945050505050565b600080612b05602254846128a990919063ffffffff16565b6001600160a01b038616600090815260246020526040902054909150612b2b9082612867565b6001600160a01b038087166000908152602460205260408082209390935590861681522054612b5a908261247d565b6001600160a01b03808616600081815260246020908152604091829020949094558051878152905191939289169260008051602061363983398151915292918290030190a3506001949350505050565b336000908152600b602052604081205460ff16158015612bcd575060205460ff16155b8015612be25750600254600160b01b900460ff165b8015612c0457506000612c02601c54601b5461247d90919063ffffffff16565b115b80156111fa57505060235430600090815260246020526040902054101590565b6020805460ff19166001179055601c54601b54600091612c44919061247d565b90506000612c56601e54601f54610f67565b612c6257601554612c65565b60005b6022543060009081526024602052604081205492935091612c85916124d7565b90506000612ca2846111f4612c9b8660026128a9565b85906128a9565b90506000612cc9856111f46120266019546120ab60026017546128a990919063ffffffff16565b90506000612cdb826111ee8686612867565b90506000612cf8876111f4601a54886128a990919063ffffffff16565b90508315612d0957612d0984612f8a565b8215612d2657601054612d269084906001600160a01b0316613180565b8115612d4357600f54612d439083906001600160a01b031661336b565b8015612d7d576012546040805183815290516001600160a01b03909216913391600080516020613639833981519152919081900360200190a35b60408051868152602081018690528082018590526060810184905290517fa4903880285538fa6ffa51cad044f25c39cc7f89aa6cbbda844135ff94827edf9181900360800190a150506020805460ff191690555050505050565b6001600160a01b03821660009081526009602052604081205460ff1680612e1657506001600160a01b03821660009081526009602052604090205460ff165b15612e2357506000610f5b565b600254600160c01b900460ff1615612e3d57506001610f5b565b6001600160a01b0383166000908152600b602052604090205460ff1680612e7c57506001600160a01b0382166000908152600b602052604090205460ff165b9050610f5b565b601b546001600160a01b0383166000908152600b602052604081205490919060ff1615612eaf5750601c545b601d54600090612ec3906111f486856128a9565b30600090815260246020526040902054909150612ee0908261247d565b306000818152602460205260409020919091556022546001600160a01b0388169060008051602061363983398151915290612f1c9085906124d7565b60408051918252519081900360200190a3612f378482612867565b9695505050505050565b60075442101590565b60205460ff16612f88576000612f5e61119d565b90506000612f7d6004546111f4600354856128a990919063ffffffff16565b905061185781612902565b565b6000612f978260026124d7565b90506000612fa58383612867565b600254909150600160c81b900460ff16156130245747612fc5833061336b565b6000612fd14783612867565b9050612fdd83826134c0565b604080518581526020810183905280820185905290517f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb5619181900360600190a15050611857565b601154604080516370a0823160e01b815230600482015290516000926001600160a01b0316916370a08231916024808301926020929190829003018186803b15801561306f57600080fd5b505afa158015613083573d6000803e3d6000fd5b505050506040513d602081101561309957600080fd5b505190506130a78330613180565b601154604080516370a0823160e01b8152306004820152905160009261312d9285926001600160a01b03909216916370a0823191602480820192602092909190829003018186803b1580156130fb57600080fd5b505afa15801561310f573d6000803e3d6000fd5b505050506040513d602081101561312557600080fd5b505190612867565b90506131398382613566565b604080518581526020810183905280820185905290517fd173df6a45b29a212d79c719838ca5eeb9dfcf6d8af0a981b80803a007a6bf329181900360600190a15050505050565b604080516003808252608082019092526000916020820160608036833701905050905030816000815181106131b157fe5b6001600160a01b03928316602091820292909201810191909152601354604080516315ab88c960e31b81529051919093169263ad5c4648926004808301939192829003018186803b15801561320557600080fd5b505afa158015613219573d6000803e3d6000fd5b505050506040513d602081101561322f57600080fd5b505181518290600190811061324057fe5b6001600160a01b03928316602091820292909201015260115482519116908290600290811061326b57fe5b60200260200101906001600160a01b031690816001600160a01b031681525050601360009054906101000a90046001600160a01b03166001600160a01b0316635c11d7958460008486426040518663ffffffff1660e01b81526004018086815260200185815260200180602001846001600160a01b03168152602001838152602001828103825285818151815260200191508051906020019060200280838360005b8381101561332557818101518382015260200161330d565b505050509050019650505050505050600060405180830381600087803b15801561334e57600080fd5b505af1158015613362573d6000803e3d6000fd5b50505050505050565b604080516002808252606082018352600092602083019080368337019050509050308160008151811061339a57fe5b6001600160a01b03928316602091820292909201810191909152601354604080516315ab88c960e31b81529051919093169263ad5c4648926004808301939192829003018186803b1580156133ee57600080fd5b505afa158015613402573d6000803e3d6000fd5b505050506040513d602081101561341857600080fd5b505181518290600190811061342957fe5b6001600160a01b0392831660209182029290920181019190915260135460405163791ac94760e01b8152600481018781526000602483018190528786166064840152426084840181905260a060448501908152885160a48601528851959097169663791ac947968b9693958a958c9590939260c49092019187810191028083838b831561332557818101518382015260200161330d565b601354600e546040805163f305d71960e01b81523060048201526024810186905260006044820181905260648201526001600160a01b0392831660848201524260a48201529051919092169163f305d71991849160c48082019260609290919082900301818588803b15801561353557600080fd5b505af1158015613549573d6000803e3d6000fd5b50505050506040513d606081101561356057600080fd5b50505050565b601354601154600e546040805162e8e33760e81b81523060048201526001600160a01b039384166024820152604481018790526064810186905260006084820181905260a4820181905292841660c48201524260e48201529051929093169263e8e33700926101048083019360609383900390910190829087803b1580156135ed57600080fd5b505af1158015613601573d6000803e3d6000fd5b505050506040513d606081101561356057600080fdfe536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f77ddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3efa26469706673582212204c857ab3a301949023b477e9257d81baf3ba2af194f203ed3be302d10300c8fc64736f6c63430007060033

Deployed ByteCode Sourcemap

7292:23275:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29125:227;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;29125:227:0;;;;;;;:::i;:::-;;7751:58;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;4377:83;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8798:85;;;;;;;;;;;;;:::i;:::-;;;;-1:-1:-1;;;;;8798:85:0;;;;;;;;;;;;;;22690:253;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;22690:253:0;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;7638:42;;;;;;;;;;;;;:::i;14103:182::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;14103:182:0;;;;;;;:::i;25255:199::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;25255:199:0;;;;:::i;9640:35::-;;;;;;;;;;;;;:::i;11775:102::-;;;;;;;;;;;;;:::i;25650:195::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;25650:195:0;;;;;;;:::i;16588:457::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;16588:457:0;;;;;;;;;;;;;;;;;:::i;7592:37::-;;;;;;;;;;;;;:::i;8705:86::-;;;;;;;;;;;;;:::i;13321:215::-;;;;;;;;;;;;;:::i;4563:83::-;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;28525:215;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;28525:215:0;;;;;;;;:::i;22276:406::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;22276:406:0;;;;;;;;:::i;26091:407::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;26091:407:0;;;;;;;;;;;;;;;;;;;;;;;;:::i;28919:198::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;28919:198:0;;:::i;9399:32::-;;;;;;;;;;;;;:::i;7923:30::-;;;;;;;;;;;;;:::i;9438:91::-;;;;;;;;;;;;;:::i;7544:41::-;;;;;;;;;;;;;:::i;29849:120::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;29849:120:0;;:::i;24035:403::-;;;;;;;;;;;;;:::i;13544:102::-;;;;;;;;;;;;;:::i;12352:126::-;;;;;;;;;;;;;:::i;7470:30::-;;;;;;;;;;;;;:::i;8987:68::-;;;;;;;;;;;;;:::i;12087:136::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;12087:136:0;-1:-1:-1;;;;;12087:136:0;;:::i;6847:126::-;;;;;;;;;;;;;:::i;14293:159::-;;;;;;;;;;;;;:::i;28347:170::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;28347:170:0;-1:-1:-1;;;;;28347:170:0;;:::i;9358:34::-;;;;;;;;;;;;;:::i;8890:90::-;;;;;;;;;;;;;:::i;9312:39::-;;;;;;;;;;;;;:::i;7818:37::-;;;;;;;;;;;;;:::i;6658:79::-;;;;;;;;;;;;;:::i;29555:172::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;29555:172:0;;;;:::i;25462:180::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;25462:180:0;;;;;;;;;;:::i;7507:30::-;;;;;;;;;;;;;:::i;8108:41::-;;;;;;;;;;;;;:::i;4468:87::-;;;;;;;;;;;;;:::i;9277:28::-;;;;;;;;;;;;;:::i;9202:31::-;;;;;;;;;;;;;:::i;24446:801::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;24446:801:0;;;;;;;;;;:::i;29735:106::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;29735:106:0;;:::i;9536:97::-;;;;;;;;;;;;;:::i;21672:596::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;21672:596:0;;;;;;;;:::i;9174:19::-;;;;;;;;;;;;;:::i;14460:215::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;14460:215:0;;;;;;;;:::i;8042:57::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;8042:57:0;-1:-1:-1;;;;;8042:57:0;;:::i;7862:54::-;;;;;;;;;;;;;:::i;9240:30::-;;;;;;;;;;;;;:::i;25853:230::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;25853:230:0;;;;;;;;;;;;;;:::i;7416:47::-;;;;;;;;;;;;;:::i;12231:113::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;12231:113:0;-1:-1:-1;;;;;12231:113:0;;:::i;13654:441::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;13654:441:0;;:::i;7687:57::-;;;;;;;;;;;;;:::i;9062:72::-;;;;;;;;;;;;;:::i;26506:1833::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;26506:1833:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;11885:194::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;11885:194:0;;;;;;;;;;:::i;28748:163::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;28748:163:0;;;;:::i;8006:29::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;8006:29:0;;:::i;6981:109::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;6981:109:0;-1:-1:-1;;;;;6981:109:0;;:::i;29360:187::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;29360:187:0;;;;:::i;9143:24::-;;;;;;;;;;;;;:::i;29125:227::-;6799:6;;;;;-1:-1:-1;;;;;6799:6:0;6785:10;:20;6777:42;;;;;-1:-1:-1;;;6777:42:0;;;;;;;;;;;;-1:-1:-1;;;6777:42:0;;;;;;;;;;;;;;;29259:11:::1;:26:::0;;;;29296:22:::1;:48:::0;29125:227::o;7751:58::-;;;;:::o;4377:83::-;4447:5;4440:12;;;;;;;;-1:-1:-1;;4440:12:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4414:13;;4440:12;;4447:5;;4440:12;;4447:5;4440:12;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4377:83;:::o;8798:85::-;;;-1:-1:-1;;;;;8798:85:0;;:::o;22690:253::-;22833:10;22793:4;22815:29;;;:17;:29;;;;;;;;-1:-1:-1;;;;;22815:38:0;;;;;;;;;;;:46;;;22877:36;;;;;;;22793:4;;22815:38;;22833:10;;22877:36;;;;;;;;-1:-1:-1;22931:4:0;22690:253;;;;;:::o;7638:42::-;;;;:::o;14103:182::-;14210:4;14271:6;14239:29;14259:8;14239:19;:29::i;:::-;:38;;14103:182;-1:-1:-1;;;14103:182:0:o;25255:199::-;6799:6;;;;;-1:-1:-1;;;;;6799:6:0;6785:10;:20;6777:42;;;;;-1:-1:-1;;;6777:42:0;;;;;;;;;;;;-1:-1:-1;;;6777:42:0;;;;;;;;;;;;;;;25346:27:::1;::::0;::::1;-1:-1:-1::0;;;25346:27:0;;::::1;;:37;;::::0;::::1;;;;25338:61;;;::::0;;-1:-1:-1;;;25338:61:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;25338:61:0;;;;;;;;;;;;;::::1;;25410:27;:36:::0;;;::::1;;-1:-1:-1::0;;;25410:36:0::1;-1:-1:-1::0;;;;25410:36:0;;::::1;::::0;;;::::1;::::0;;25255:199::o;9640:35::-;;;;:::o;11775:102::-;11857:12;;11775:102;:::o;25650:195::-;6799:6;;;;;-1:-1:-1;;;;;6799:6:0;6785:10;:20;6777:42;;;;;-1:-1:-1;;;6777:42:0;;;;;;;;;;;;-1:-1:-1;;;6777:42:0;;;;;;;;;;;;;;;25765:15:::1;:24:::0;;;;25800:26:::1;:37:::0;25650:195::o;16588:457::-;16731:4;16718:2;-1:-1:-1;;;;;9940:18:0;;9932:27;;;;;;-1:-1:-1;;;;;16752:23:0;::::1;;::::0;;;:17:::1;:23;::::0;;;;;;;16776:10:::1;16752:35:::0;;;;;;;;-1:-1:-1;;16752:50:0::1;16748:225;;16857:104;::::0;;;;::::1;::::0;;::::1;::::0;;-1:-1:-1;;;16857:104:0::1;::::0;;::::1;::::0;;;;-1:-1:-1;;;;;16857:23:0;::::1;-1:-1:-1::0;16857:23:0;;;:17:::1;:23:::0;;;;;16899:10:::1;16857:67:::0;;;;;;;;;;:104:::1;::::0;16929:5;;16857:71:::1;:104::i;:::-;-1:-1:-1::0;;;;;16819:23:0;::::1;;::::0;;;:17:::1;:23;::::0;;;;;;;16843:10:::1;16819:35:::0;;;;;;;:142;16748:225:::1;16985:30;16999:4;17005:2;17009:5;16985:13;:30::i;:::-;-1:-1:-1::0;17033:4:0::1;::::0;16588:457;-1:-1:-1;;;;;16588:457:0:o;7592:37::-;;;-1:-1:-1;;;7592:37:0;;;;;:::o;8705:86::-;;;-1:-1:-1;;;;;8705:86:0;;:::o;13321:215::-;13497:16;;13467:4;;-1:-1:-1;;;;;13467:4:0;;;13374:7;13454:18;;;:12;:18;;;;;;;13443:4;;;;;13430:18;;;;;13374:7;;13414:114;;13497:16;;13415:58;;13454:18;13415:34;;-1:-1:-1;;8456:54:0;13415:14;:34::i;:::-;:38;;:58::i;:::-;13414:64;;:114::i;:::-;13394:134;;13321:215;:::o;4563:83::-;4629:9;;;;4563:83;:::o;28525:215::-;6799:6;;28639:12;;6799:6;;;-1:-1:-1;;;;;6799:6:0;6785:10;:20;6777:42;;;;;-1:-1:-1;;;6777:42:0;;;;;;;;;;;;-1:-1:-1;;;6777:42:0;;;;;;;;;;;;;;;28676:56:::1;::::0;;-1:-1:-1;;;28676:56:0;;28713:10:::1;28676:56;::::0;::::1;::::0;;;;;;;;;-1:-1:-1;;;;;28676:36:0;::::1;::::0;::::1;::::0;:56;;;;;::::1;::::0;;;;;;;;-1:-1:-1;28676:36:0;:56;::::1;;::::0;::::1;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;-1:-1:-1::0;28676:56:0;;28525:215;-1:-1:-1;;;28525:215:0:o;22276:406::-;22457:10;22376:4;22439:29;;;:17;:29;;;;;;;;-1:-1:-1;;;;;22439:62:0;;;;;;;;;;:78;;22506:10;22439:66;:78::i;:::-;22416:10;22398:29;;;;:17;:29;;;;;;;;-1:-1:-1;;;;;22398:38:0;;;;;;;;;;;;:119;;;22533;;;;;;22398:38;;22533:119;;;;;;;;;;;-1:-1:-1;22670:4:0;22276:406;;;;:::o;26091:407::-;6799:6;;;;;-1:-1:-1;;;;;6799:6:0;6785:10;:20;6777:42;;;;;-1:-1:-1;;;6777:42:0;;;;;;;;;;;;-1:-1:-1;;;6777:42:0;;;;;;;;;;;;;;;26304:17:::1;:38:::0;;-1:-1:-1;;;;;26304:38:0;;::::1;-1:-1:-1::0;;;;;;26304:38:0;;::::1;;::::0;;;26353:16:::1;:36:::0;;;;::::1;::::0;;::::1;::::0;;;::::1;::::0;;;26400:21:::1;:46:::0;;;;::::1;::::0;;::::1;::::0;;;::::1;::::0;;;26457:12:::1;:33:::0;;;;;::::1;::::0;::::1;;::::0;;26091:407::o;28919:198::-;6799:6;;;;;-1:-1:-1;;;;;6799:6:0;6785:10;:20;6777:42;;;;;-1:-1:-1;;;6777:42:0;;;;;;;;;;;;-1:-1:-1;;;6777:42:0;;;;;;;;;;;;;;;8204:4:::1;29011:16;:40;;29003:61;;;::::0;;-1:-1:-1;;;29003:61:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;29003:61:0;;;;;;;;;;;;;::::1;;29075:15;:34:::0;28919:198::o;9399:32::-;;;;:::o;7923:30::-;;;;:::o;9438:91::-;;;;:::o;7544:41::-;;;-1:-1:-1;;;7544:41:0;;;;;:::o;29849:120::-;6799:6;;;;;-1:-1:-1;;;;;6799:6:0;6785:10;:20;6777:42;;;;;-1:-1:-1;;;6777:42:0;;;;;;;;;;;;-1:-1:-1;;;6777:42:0;;;;;;;;;;;;;;;29927:24:::1;:34:::0;29849:120::o;24035:403::-;6799:6;;;;;-1:-1:-1;;;;;6799:6:0;6785:10;:20;6777:42;;;;;-1:-1:-1;;;6777:42:0;;;;;;;;;;;;-1:-1:-1;;;6777:42:0;;;;;;;;;;;;;;;24098:6:::1;::::0;::::1;;24097:7;24089:29;;;::::0;;-1:-1:-1;;;24089:29:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;24089:29:0;;;;;;;;;;;;;::::1;;24151:15;24137:10;;:29;;24129:53;;;::::0;;-1:-1:-1;;;24129:53:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;24129:53:0;;;;;;;;;;;;;::::1;;24195:25;24223:22;:20;:22::i;:::-;24195:50;;24256:18;24298:62;24337:22;;24298:34;24320:11;;24298:17;:21;;:34;;;;:::i;:62::-;24256:115;;24384:23;24395:11;24384:10;:23::i;:::-;;24418:12;:10;:12::i;:::-;6830:1;;24035:403::o:0;13544:102::-;13623:15;13544:102;:::o;12352:126::-;12405:7;12432:38;12453:16;;12432;;:20;;:38;;;;:::i;7470:30::-;;;-1:-1:-1;;;7470:30:0;;;;;:::o;8987:68::-;;;-1:-1:-1;;;;;8987:68:0;;:::o;12087:136::-;12198:16;;-1:-1:-1;;;;;12176:17:0;;12149:7;12176:17;;;:12;:17;;;;;;12149:7;;12176:39;;:17;:21;:39::i;:::-;12169:46;;12087:136;;;;:::o;6847:126::-;6799:6;;;;;-1:-1:-1;;;;;6799:6:0;6785:10;:20;6777:42;;;;;-1:-1:-1;;;6777:42:0;;;;;;;;;;;;-1:-1:-1;;;6777:42:0;;;;;;;;;;;;;;;6928:6:::1;::::0;6909:26:::1;::::0;6928:6:::1;::::0;;::::1;-1:-1:-1::0;;;;;6928:6:0::1;::::0;6909:26:::1;::::0;;;::::1;6946:6;:19:::0;;-1:-1:-1;;;;;;6946:19:0::1;::::0;;6847:126::o;14293:159::-;14338:9;14333:112;14357:12;:19;14353:23;;14333:112;;;14410:12;14423:1;14410:15;;;;;;;;;;;;;;;;;14398:35;;;-1:-1:-1;;;;;;14398:35:0;;;;-1:-1:-1;;;;;14410:15:0;;;;14398:33;;:35;;;;;;;;;;14410:15;;14398:35;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;14378:3:0;;;;;-1:-1:-1;14333:112:0;;-1:-1:-1;14333:112:0;;;14293:159::o;28347:170::-;6799:6;;;;;-1:-1:-1;;;;;6799:6:0;6785:10;:20;6777:42;;;;;-1:-1:-1;;;6777:42:0;;;;;;;;;;;;-1:-1:-1;;;6777:42:0;;;;;;;;;;;;;;;28473:36:::1;::::0;28441:21:::1;::::0;-1:-1:-1;;;;;28473:27:0;::::1;::::0;:36;::::1;;;::::0;28441:21;;28423:15:::1;28473:36:::0;28423:15;28473:36;28441:21;28473:27;:36;::::1;;;;;;;;;;;;;::::0;::::1;;;;;;6830:1;28347:170:::0;:::o;9358:34::-;;;;:::o;8890:90::-;;;-1:-1:-1;;;;;8890:90:0;;:::o;9312:39::-;;;;:::o;7818:37::-;;;;:::o;6658:79::-;6723:6;;;;;-1:-1:-1;;;;;6723:6:0;;6658:79::o;29555:172::-;6799:6;;;;;-1:-1:-1;;;;;6799:6:0;6785:10;:20;6777:42;;;;;-1:-1:-1;;;6777:42:0;;;;;;;;;;;;-1:-1:-1;;;6777:42:0;;;;;;;;;;;;;;;29637:18:::1;::::0;::::1;-1:-1:-1::0;;;29637:18:0;;::::1;;:28;;::::0;::::1;;;;29629:52;;;::::0;;-1:-1:-1;;;29629:52:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;29629:52:0;;;;;;;;;;;;;::::1;;29692:18;:27:::0;;;::::1;;-1:-1:-1::0;;;29692:27:0::1;-1:-1:-1::0;;;;29692:27:0;;::::1;::::0;;;::::1;::::0;;29555:172::o;25462:180::-;6799:6;;;;;-1:-1:-1;;;;;6799:6:0;6785:10;:20;6777:42;;;;;-1:-1:-1;;;6777:42:0;;;;;;;;;;;;-1:-1:-1;;;6777:42:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;25550:19:0;::::1;;::::0;;;:12:::1;:19;::::0;;;;;::::1;;:29;;::::0;::::1;;;;25542:53;;;::::0;;-1:-1:-1;;;25542:53:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;25542:53:0;;;;;;;;;;;;;::::1;;-1:-1:-1::0;;;;;25606:19:0;;;::::1;;::::0;;;:12:::1;:19;::::0;;;;:28;;-1:-1:-1;;25606:28:0::1;::::0;::::1;;::::0;;;::::1;::::0;;25462:180::o;7507:30::-;;;-1:-1:-1;;;7507:30:0;;;;;:::o;8108:41::-;8147:2;8108:41;:::o;4468:87::-;4540:7;4533:14;;;;;;;;-1:-1:-1;;4533:14:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4507:13;;4533:14;;4540:7;;4533:14;;4540:7;4533:14;;;;;;;;;;;;;;;;;;;;;;;;9277:28;;;;:::o;9202:31::-;;;;:::o;24446:801::-;6799:6;;;;;-1:-1:-1;;;;;6799:6:0;6785:10;:20;6777:42;;;;;-1:-1:-1;;;6777:42:0;;;;;;;;;;;;-1:-1:-1;;;6777:42:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;24584:32:0;::::1;;::::0;;;:25:::1;:32;::::0;;;;;::::1;;:42;;::::0;::::1;;;;24562:109;;;::::0;;-1:-1:-1;;;24562:109:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;24562:109:0;;;;;;;;;;;;;::::1;;-1:-1:-1::0;;;;;24684:32:0;::::1;;::::0;;;:25:::1;:32;::::0;;;;:41;;-1:-1:-1;;24684:41:0::1;::::0;::::1;::::0;::::1;::::0;;;::::1;::::0;;;24738:442:::1;;24765:12;:24:::0;;::::1;::::0;::::1;::::0;;-1:-1:-1;24765:24:0;;;;;::::1;::::0;;-1:-1:-1;;;;;;24765:24:0::1;-1:-1:-1::0;;;;;24765:24:0;::::1;;::::0;;24738:442:::1;;;24830:12;:19:::0;24852:1:::1;-1:-1:-1::0;24822:51:0::1;;;::::0;;-1:-1:-1;;;24822:51:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;24822:51:0;;;;;;;;;;;;;::::1;;24893:9;24888:281;24912:12;:19:::0;24908:23;::::1;24888:281;;;24980:5;-1:-1:-1::0;;;;;24961:24:0::1;:12;24974:1;24961:15;;;;;;;;;::::0;;;::::1;::::0;;;::::1;::::0;-1:-1:-1;;;;;24961:15:0::1;:24;24957:197;;;25028:12;25041:19:::0;;-1:-1:-1;;25041:23:0;;;25028:37;::::1;;;;;;::::0;;;::::1;::::0;;;::::1;::::0;25010:12:::1;:15:::0;;-1:-1:-1;;;;;25028:37:0;;::::1;::::0;25023:1;;25010:15;::::1;;;;;;;;;;;;;:55;;;;;-1:-1:-1::0;;;;;25010:55:0::1;;;;;-1:-1:-1::0;;;;;25010:55:0::1;;;;;;25088:12;:18;;;;;;;;::::0;;;::::1;::::0;;;;-1:-1:-1;;25088:18:0;;;;;-1:-1:-1;;;;;;25088:18:0::1;::::0;;;;;25129:5:::1;;24957:197;24933:3;;24888:281;;;;24738:442;25197:42;::::0;;::::1;;::::0;-1:-1:-1;;;;;25197:42:0;::::1;::::0;::::1;::::0;;;::::1;24446:801:::0;;:::o;29735:106::-;6799:6;;;;;-1:-1:-1;;;;;6799:6:0;6785:10;:20;6777:42;;;;;-1:-1:-1;;;6777:42:0;;;;;;;;;;;;-1:-1:-1;;;6777:42:0;;;;;;;;;;;;;;;29809:10:::1;:24:::0;29735:106::o;9536:97::-;;;;:::o;21672:596::-;21836:10;21777:4;21818:29;;;:17;:29;;;;;;;;-1:-1:-1;;;;;21818:38:0;;;;;;;;;;21871:27;;;21867:237;;21933:10;21956:1;21915:29;;;:17;:29;;;;;;;;-1:-1:-1;;;;;21915:38:0;;;;;;;;;:42;21867:237;;;22031:61;:8;22062:15;22031:12;:61::i;:::-;22008:10;21990:29;;;;:17;:29;;;;;;;;-1:-1:-1;;;;;21990:38:0;;;;;;;;;:102;21867:237;22142:10;22189:29;;;;:17;:29;;;;;;;;-1:-1:-1;;;;;22119:119:0;;22189:38;;;;;;;;;;;22119:119;;;;;;;;;22142:10;22119:119;;;;;;;;;;;-1:-1:-1;22256:4:0;;21672:596;-1:-1:-1;;;21672:596:0:o;9174:19::-;;;-1:-1:-1;;;;;9174:19:0;;:::o;14460:215::-;14587:4;14565:2;-1:-1:-1;;;;;9940:18:0;;9932:27;;;;;;14609:36:::1;14623:10;14635:2;14639:5;14609:13;:36::i;:::-;-1:-1:-1::0;14663:4:0::1;::::0;14460:215;-1:-1:-1;;;;14460:215:0:o;8042:57::-;;;;;;;;;;;;;;;:::o;7862:54::-;;;;:::o;9240:30::-;;;;:::o;25853:230::-;6799:6;;;;;-1:-1:-1;;;;;6799:6:0;6785:10;:20;6777:42;;;;;-1:-1:-1;;;6777:42:0;;;;;;;;;;;;-1:-1:-1;;;6777:42:0;;;;;;;;;;;;;;;25991:11:::1;:22:::0;;-1:-1:-1;;;;25991:22:0::1;-1:-1:-1::0;;;25991:22:0;::::1;;;;::::0;;26043:32:::1;26070:4:::0;26043:22:::1;26058:6:::0;8378:24;-1:-1:-1;;8471:38:0::1;;8456:54:::0;;26043:14:::1;:22::i;:::-;:26:::0;::::1;:32::i;:::-;26024:16;:51:::0;-1:-1:-1;;;25853:230:0:o;7416:47::-;;;-1:-1:-1;;;7416:47:0;;;;;:::o;12231:113::-;-1:-1:-1;;;;;12317:19:0;12293:4;12317:19;;;:12;:19;;;;;;;;;12231:113::o;13654:441::-;13749:7;;;13813:136;13837:12;:19;13833:23;;13813:136;;;13878:59;13899:37;13930:5;13899:26;13909:12;13922:1;13909:15;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;13909:15:0;13899:9;:26::i;:37::-;13878:16;;:20;:59::i;:::-;-1:-1:-1;13858:3:0;;13813:136;;;;13979:108;14039:33;14066:5;14039:22;:20;:22::i;:33::-;13979:37;13992:23;:16;14013:1;13992:20;:23::i;:::-;13979:8;;:12;:37::i;:108::-;13959:128;13654:441;-1:-1:-1;;;13654:441:0:o;7687:57::-;;;;:::o;9062:72::-;;;-1:-1:-1;;;;;9062:72:0;;:::o;26506:1833::-;6799:6;;;;;-1:-1:-1;;;;;6799:6:0;6785:10;:20;6777:42;;;;;-1:-1:-1;;;6777:42:0;;;;;;;;;;;;-1:-1:-1;;;6777:42:0;;;;;;;;;;;;;;;27116:22:::1;27141:65;27197:8:::0;27141:51:::1;27177:14:::0;27141:51;:13;27159:12;27141:17:::1;:31::i;:::-;:35:::0;::::1;:51::i;:65::-;27116:90:::0;-1:-1:-1;27217:23:0::1;27243:87;27303:16:::0;27243:41:::1;27116:90:::0;27262:21;27243:18:::1;:41::i;:87::-;27217:113;;8147:2;27365:13;:29;;:80;;;;;8147:2;27415:14;:30;;27365:80;:129;;;;;8147:2;27466:12;:28;;27365:129;:187;;;;;8147:2;27515:21;:37;;27365:187;:240;;;;;8147:2;27573:16;:32;;27365:240;27343:295;;;::::0;;-1:-1:-1;;;27343:295:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;27343:295:0;;;;;;;;;;;;;::::1;;8147:2;27659:14;:29;27651:63;;;::::0;;-1:-1:-1;;;27651:63:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;27651:63:0;;;;;;;;;;;;;::::1;;8147:2;27735:15;:30;27727:65;;;::::0;;-1:-1:-1;;;27727:65:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;27727:65:0;;;;;;;;;;;;;::::1;;27805:12;:28:::0;;;27844:9:::1;:26:::0;;;27881:11:::1;:26:::0;;;27918:20:::1;:44:::0;;;27973:15:::1;:34:::0;;;28018:12:::1;:23:::0;;;28066:62:::1;28033:8:::0;28066:44:::1;27856:14:::0;28066:44;27820:13;27895:12;28066:16:::1;:29::i;:62::-;28052:11;:76:::0;;;28210:15:::1;::::0;28170:20:::1;::::0;28154:82:::1;::::0;:37:::1;::::0;:15:::1;:37::i;:82::-;28139:12;:97:::0;28247:14:::1;:32:::0;;;28329:1:::1;28264:15:::0;28312:18:::1;28298:11;;:32;28290:41;;;::::0;::::1;;6830:1;;26506:1833:::0;;;;;;;:::o;11885:194::-;-1:-1:-1;;;;;12037:25:0;;;12005:7;12037:25;;;:17;:25;;;;;;;;:34;;;;;;;;;;;;;11885:194::o;28748:163::-;6799:6;;;;;-1:-1:-1;;;;;6799:6:0;6785:10;:20;6777:42;;;;;-1:-1:-1;;;6777:42:0;;;;;;;;;;;;-1:-1:-1;;;6777:42:0;;;;;;;;;;;;;;;28827:10:::1;::::0;::::1;-1:-1:-1::0;;;28827:10:0;;::::1;;:25;;::::0;::::1;;;;28819:49;;;::::0;;-1:-1:-1;;;28819:49:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;28819:49:0;;;;;;;;;;;;;::::1;;28879:10;:24:::0;;;::::1;;-1:-1:-1::0;;;28879:24:0::1;-1:-1:-1::0;;;;28879:24:0;;::::1;::::0;;;::::1;::::0;;28748:163::o;8006:29::-;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;8006:29:0;;-1:-1:-1;8006:29:0;:::o;6981:109::-;6799:6;;;;;-1:-1:-1;;;;;6799:6:0;6785:10;:20;6777:42;;;;;-1:-1:-1;;;6777:42:0;;;;;;;;;;;;-1:-1:-1;;;6777:42:0;;;;;;;;;;;;;;;7054:28:::1;7073:8;7054:18;:28::i;29360:187::-:0;6799:6;;;;;-1:-1:-1;;;;;6799:6:0;6785:10;:20;6777:42;;;;;-1:-1:-1;;;6777:42:0;;;;;;;;;;;;-1:-1:-1;;;6777:42:0;;;;;;;;;;;;;;;29447:21:::1;::::0;::::1;-1:-1:-1::0;;;29447:21:0;;::::1;;:33;;::::0;::::1;;;;29439:57;;;::::0;;-1:-1:-1;;;29439:57:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;29439:57:0;;;;;;;;;;;;;::::1;;29507:21;:32:::0;;;::::1;;-1:-1:-1::0;;;29507:32:0::1;-1:-1:-1::0;;;;29507:32:0;;::::1;::::0;;;::::1;::::0;;29360:187::o;9143:24::-;;;-1:-1:-1;;;;;9143:24:0;;:::o;1903:181::-;1961:7;1993:5;;;2017:6;;;;2009:46;;;;;-1:-1:-1;;;2009:46:0;;;;;;;;;;;;;;;;;;;;;;;;;;;2728:132;2786:7;2813:39;2817:1;2820;2813:39;;;;;;;;;;;;;;;;;:3;:39::i;2236:226::-;2356:7;2392:12;2384:6;;;;2376:29;;;;-1:-1:-1;;;2376:29:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;2428:5:0;;;2236:226::o;15076:1504::-;-1:-1:-1;;;;;15242:20:0;;15202:4;15242:20;;;:12;:20;;;;;;15202:4;;15242:20;;;:47;;-1:-1:-1;;;;;;15266:23:0;;;;;;:12;:23;;;;;;;;15242:47;15324:27;;15219:70;;-1:-1:-1;;;;15324:27:0;;;;;:46;;;15355:15;15324:46;15302:115;;;;;-1:-1:-1;;;15302:115:0;;;;;;;;;;;;-1:-1:-1;;;15302:115:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;15434:36:0;;;;;;:25;:36;;;;;;;;:56;;;;;15475:15;15474:16;15434:56;15430:148;;;15525:24;;15515:6;:34;;15507:59;;;;;-1:-1:-1;;;15507:59:0;;;;;;;;;;;;-1:-1:-1;;;15507:59:0;;;;;;;;;;;;;;;15594:6;;;;15590:87;;;15624:41;15639:6;15647:9;15658:6;15624:14;:41::i;:::-;15617:48;;;;;15590:87;15689:17;15709:28;15720:16;;15709:6;:10;;:28;;;;:::i;:::-;15689:48;;15754:16;:14;:16::i;:::-;15750:59;;;15787:10;:8;:10::i;:::-;-1:-1:-1;;;;;15844:20:0;;;;;;:12;:20;;;;;;:35;;15869:9;15844:24;:35::i;:::-;-1:-1:-1;;;;;15821:20:0;;;;;;:12;:20;;;;;:58;;;;15920:32;15834:6;15942:9;15920:13;:32::i;:::-;:110;;16021:9;15920:110;;;15968:37;15976:6;15984:9;15995;15968:7;:37::i;:::-;-1:-1:-1;;;;;16067:23:0;;;;;;:12;:23;;;;;;15892:138;;-1:-1:-1;16067:70:0;;15892:138;16067:27;:70::i;:::-;-1:-1:-1;;;;;16041:23:0;;;;;;;:12;:23;;;;;:96;;;;16245:16;;16155:118;;;;-1:-1:-1;;;;;;;;;;;16155:118:0;16223:39;;:17;;:21;:39::i;:::-;16155:118;;;;;;;;;;;;;;;16290:14;:12;:14::i;:::-;:28;;;;-1:-1:-1;16308:10:0;;-1:-1:-1;;;16308:10:0;;;;16290:28;16286:263;;;16335:9;:7;:9::i;:::-;-1:-1:-1;;;;;16384:33:0;;;;;;:25;:33;;;;;;;;16383:34;:92;;;;-1:-1:-1;;;;;;16439:36:0;;;;;;:25;:36;;;;;;;;16438:37;16383:92;16361:177;;;16510:12;:10;:12::i;:::-;-1:-1:-1;16568:4:0;;15076:1504;-1:-1:-1;;;;;;15076:1504:0:o;2092:136::-;2150:7;2177:43;2181:1;2184;2177:43;;;;;;;;;;;;;;;;;:3;:43::i;2470:250::-;2528:7;2552:6;2548:47;;-1:-1:-1;2582:1:0;2575:8;;2548:47;2619:5;;;2623:1;2619;:5;:1;2643:5;;;;;:10;2635:56;;;;-1:-1:-1;;;2635:56:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23272:755;23329:7;23365:15;23397:16;23393:118;;23452:12;;23435:30;;;;;;;23445:5;;23435:30;;;;;;;;;;-1:-1:-1;;23487:12:0;;23480:19;;23393:118;23541:1;23527:11;:15;23523:188;;;23574:12;;:39;;23599:12;;;;23574:16;:39::i;:::-;23559:12;:54;23523:188;;;23661:12;;:38;;23686:11;23661:16;:38::i;:::-;23646:12;:53;23523:188;23727:12;;-1:-1:-1;;;;;;23723:83:0;;;-1:-1:-1;;;;;23769:12:0;:25;23723:83;23852:12;;23837:28;;8378:24;-1:-1:-1;;8471:38:0;;23837:28;23818:16;:47;23899:15;;23891:23;;23878:10;:36;23925:11;:16;;23940:1;23925:16;;;23976:12;;23959:30;;;;;;;23891:5;;23959:30;;;;;;;;;;-1:-1:-1;;24007:12:0;;23272:755;;;:::o;7098:187::-;-1:-1:-1;;;;;7172:22:0;;7164:31;;;;;;7232:6;;7211:38;;-1:-1:-1;;;;;7211:38:0;;;;7232:6;;;;;7211:38;;;;;7260:6;:17;;-1:-1:-1;;;;;7260:17:0;;;;;-1:-1:-1;;;;;;7260:17:0;;;;;;;;;7098:187::o;2868:225::-;2988:7;3023:12;3016:5;3008:28;;;;-1:-1:-1;;;3008:28:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3047:9;3063:1;3059;:5;;;;;;;2868:225;-1:-1:-1;;;;;2868:225:0:o;14683:385::-;14801:4;14818:17;14838:28;14849:16;;14838:6;:10;;:28;;;;:::i;:::-;-1:-1:-1;;;;;14898:18:0;;;;;;:12;:18;;;;;;14818:48;;-1:-1:-1;14898:33:0;;14818:48;14898:22;:33::i;:::-;-1:-1:-1;;;;;14877:18:0;;;;;;;:12;:18;;;;;;:54;;;;14961:16;;;;;;;:31;;14982:9;14961:20;:31::i;:::-;-1:-1:-1;;;;;14942:16:0;;;;;;;:12;:16;;;;;;;;;:50;;;;15010:26;;;;;;;14942:16;;15010:26;;;;-1:-1:-1;;;;;;;;;;;15010:26:0;;;;;;;;-1:-1:-1;15056:4:0;;14683:385;-1:-1:-1;;;;14683:385:0:o;13015:298::-;13128:10;13064:4;13102:37;;;:25;:37;;;;;;;;13101:38;:62;;;;-1:-1:-1;13157:6:0;;;;13156:7;13101:62;:90;;;;-1:-1:-1;13180:11:0;;-1:-1:-1;;;13180:11:0;;;;13101:90;:140;;;;;13240:1;13208:29;13224:12;;13208:11;;:15;;:29;;;;:::i;:::-;:33;13101:140;:204;;;;-1:-1:-1;;13289:16:0;;13279:4;13258:27;;;;:12;:27;;;;;;:47;;;13015:298::o;19557:1533::-;9819:6;:13;;-1:-1:-1;;9819:13:0;9828:4;9819:13;;;19645:12:::1;::::0;19629:11:::1;::::0;9819:6;;19629:29:::1;::::0;:11;:15:::1;:29::i;:::-;19606:52;;19671:27;19701:97;19731:15;;19761:26;;19701:15;:97::i;:::-;:142;;19831:12;;19701:142;;;19814:1;19701:142;19931:16;::::0;19906:4:::1;19854:28;19885:27:::0;;;:12:::1;:27;::::0;;;;;19671:172;;-1:-1:-1;19854:28:0;19885:73:::1;::::0;:31:::1;:73::i;:::-;19854:104:::0;-1:-1:-1;19971:23:0::1;19997:98;20082:12:::0;19997:66:::1;20036:26;:19:::0;20060:1:::1;20036:23;:26::i;:::-;19997:20:::0;;:38:::1;:66::i;:98::-;19971:124;;20106:19;20128:109;20224:12;20128:77;20167:37;20188:15;;20167:16;20181:1;20167:9;;:13;;:16;;;;:::i;20128:109::-;20106:131:::0;-1:-1:-1;20250:24:0::1;20277:78;20106:131:::0;20277:51:::1;:20:::0;20312:15;20277:34:::1;:51::i;:78::-;20250:105;;20368:20;20391:76;20454:12;20391:48;20426:12;;20391:20;:34;;:48;;;;:::i;:76::-;20368:99:::0;-1:-1:-1;20484:19:0;;20480:84:::1;;20520:32;20536:15;20520;:32::i;:::-;20580:15:::0;;20576:105:::1;;20647:21;::::0;20612:57:::1;::::0;20634:11;;-1:-1:-1;;;;;20647:21:0::1;20612;:57::i;:::-;20697:20:::0;;20693:108:::1;;20772:16;::::0;20734:55:::1;::::0;20754:16;;-1:-1:-1;;;;;20772:16:0::1;20734:19;:55::i;:::-;20817:16:::0;;20813:111:::1;;20884:12;::::0;20855:57:::1;::::0;;;;;;;-1:-1:-1;;;;;20884:12:0;;::::1;::::0;20864:10:::1;::::0;-1:-1:-1;;;;;;;;;;;20855:57:0;;;;;::::1;::::0;;::::1;20813:111;20941:141;::::0;;;;;::::1;::::0;::::1;::::0;;;;;;;;;;;;;;;;;::::1;::::0;;;;;;;::::1;-1:-1:-1::0;;9855:6:0;:14;;-1:-1:-1;;9855:14:0;;;-1:-1:-1;;;;;19557:1533:0:o;12602:405::-;-1:-1:-1;;;;;12727:18:0;;12701:4;12727:18;;;:12;:18;;;;;;;;;:38;;-1:-1:-1;;;;;;12749:16:0;;;;;;:12;:16;;;;;;;;12727:38;12723:277;;;-1:-1:-1;12789:5:0;12782:12;;12723:277;12816:21;;-1:-1:-1;;;12816:21:0;;;;12812:188;;;-1:-1:-1;12861:4:0;12854:11;;12812:188;-1:-1:-1;;;;;12906:31:0;;;;;;:25;:31;;;;;;;;;:81;;-1:-1:-1;;;;;;12958:29:0;;;;;;:25;:29;;;;;;;;12906:81;12898:90;;;;21098:566;21260:11;;-1:-1:-1;;;;;21286:36:0;;21221:7;21286:36;;;:25;:36;;;;;;21221:7;;21260:11;21286:36;;21282:65;;;-1:-1:-1;21335:12:0;;21282:65;21408:14;;21360:17;;21380:43;;:23;:9;21394:8;21380:13;:23::i;:43::-;21487:4;21466:27;;;;:12;:27;;;;;;21360:63;;-1:-1:-1;21466:66:0;;21360:63;21466:31;:66::i;:::-;21457:4;21436:27;;;;:12;:27;;;;;:96;;;;21594:16;;-1:-1:-1;;;;;21548:64:0;;;-1:-1:-1;;;;;;;;;;;21548:64:0;21580:31;;:9;;:13;:31::i;:::-;21548:64;;;;;;;;;;;;;;;21632:24;:9;21646;21632:13;:24::i;:::-;21625:31;21098:566;-1:-1:-1;;;;;;21098:566:0:o;12486:108::-;12557:10;;12571:15;-1:-1:-1;12557:29:0;12486:108;:::o;22951:313::-;22994:6;;;;22989:268;;23017:25;23045:22;:20;:22::i;:::-;23017:50;;23082:18;23128:62;23167:22;;23128:34;23150:11;;23128:17;:21;;:34;;;;:::i;:62::-;23082:123;;23222:23;23233:11;23222:10;:23::i;22989:268::-;22951:313::o;17053:969::-;17127:12;17142:27;:20;17167:1;17142:24;:27::i;:::-;17127:42;-1:-1:-1;17180:17:0;17200:30;:20;17127:42;17200:24;:30::i;:::-;17247:18;;17180:50;;-1:-1:-1;;;;17247:18:0;;;;17243:772;;;17307:21;17345:40;17365:4;17379;17345:19;:40::i;:::-;17402:18;17423:41;:21;17449:14;17423:25;:41::i;:::-;17402:62;;17481:36;17495:9;17506:10;17481:13;:36::i;:::-;17539:43;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17243:772;;;;;17647:8;;17640:41;;;-1:-1:-1;;;17640:41:0;;17675:4;17640:41;;;;;;17615:22;;-1:-1:-1;;;;;17647:8:0;;17640:26;;:41;;;;;;;;;;;;;;17647:8;17640:41;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;17640:41:0;;-1:-1:-1;17698:42:0;17720:4;17734;17698:21;:42::i;:::-;17785:8;;17778:41;;;-1:-1:-1;;;17778:41:0;;17813:4;17778:41;;;;;;17757:18;;17778:93;;17842:14;;-1:-1:-1;;;;;17785:8:0;;;;17778:26;;:41;;;;;;;;;;;;;;;17785:8;17778:41;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;17778:41:0;;:45;:93::i;:::-;17757:114;;17888:43;17909:9;17920:10;17888:20;:43::i;:::-;17953:50;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17243:772;;17053:969;;;:::o;19103:446::-;19230:16;;;19244:1;19230:16;;;;;;;;;19206:21;;19230:16;;;;;;;;;;-1:-1:-1;19230:16:0;19206:40;;19275:4;19257;19262:1;19257:7;;;;;;;;-1:-1:-1;;;;;19257:23:0;;;:7;;;;;;;;;;:23;;;;19301:6;;:13;;;-1:-1:-1;;;19301:13:0;;;;:6;;;;;:11;;:13;;;;;19257:7;;19301:13;;;;;:6;:13;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;19301:13:0;19291:7;;:4;;19296:1;;19291:7;;;;;;-1:-1:-1;;;;;19291:23:0;;;:7;;;;;;;;;:23;19335:8;;19325:7;;19335:8;;;19325:4;;19330:1;;19325:7;;;;;;;;;;;:18;-1:-1:-1;;;;;19325:18:0;;;-1:-1:-1;;;;;19325:18:0;;;;;19356:6;;;;;;;;;-1:-1:-1;;;;;19356:6:0;-1:-1:-1;;;;;19356:60:0;;19431:11;19457:1;19473:4;19492:8;19515:15;19356:185;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;19356:185:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19103:446;;;:::o;18683:412::-;18808:16;;;18822:1;18808:16;;;;;;;;18784:21;;18808:16;;;;;;;;;;-1:-1:-1;18808:16:0;18784:40;;18853:4;18835;18840:1;18835:7;;;;;;;;-1:-1:-1;;;;;18835:23:0;;;:7;;;;;;;;;;:23;;;;18879:6;;:13;;;-1:-1:-1;;;18879:13:0;;;;:6;;;;;:11;;:13;;;;;18835:7;;18879:13;;;;;:6;:13;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;18879:13:0;18869:7;;:4;;18874:1;;18869:7;;;;;;-1:-1:-1;;;;;18869:23:0;;;:7;;;;;;;;;;:23;;;;18905:6;;:182;;-1:-1:-1;;;18905:182:0;;;;;;;;:6;:182;;;;;;;;;;;;;19061:15;18905:182;;;;;;;;;;;;;;;;;;;;;:6;;;;;:57;;18977:11;;18905:6;;19019:4;;19038:8;;18905:182;;;;;;;;;;;;;;;;:6;:182;;;;;;;;;;;;;;;;18030:293;18114:6;;18257:17;;18114:201;;;-1:-1:-1;;;18114:201:0;;18179:4;18114:201;;;;;;;;;;:6;:201;;;;;;;;;;-1:-1:-1;;;;;18257:17:0;;;18114:201;;;;18289:15;18114:201;;;;;;:6;;;;;:22;;18144:11;;18114:201;;;;;;;;;;;;;;;18144:11;18114:6;:201;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;18030:293:0:o;18331:344::-;18438:6;;18500:8;;18609:17;;18438:229;;;-1:-1:-1;;;18438:229:0;;18480:4;18438:229;;;;-1:-1:-1;;;;;18500:8:0;;;18438:229;;;;;;;;;;;;;;;;:6;:229;;;;;;;;;;;;18609:17;;;18438:229;;;;18641:15;18438:229;;;;;;:6;;;;;:19;;:229;;;;;;;;;;;;;;;;:6;:229;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

Swarm Source

ipfs://4c857ab3a301949023b477e9257d81baf3ba2af194f203ed3be302d10300c8fc
Loading