Contract 0xCCA34Bf6A8353119B5811aB0d915509Fde13df40 1

 
 
Txn Hash Method
Block
From
To
Value [Txn Fee]
0xf0283066d02d7af03b958b82754a400dff30eb07018e72a0c71921ff305e9f68Approve300550912022-06-27 10:00:364 days 37 mins ago0x4209859ae2992f581d2678392b4ac80c13d5eed4 IN  0xcca34bf6a8353119b5811ab0d915509fde13df400 MATIC0.0024296 100
0xe334c191bc4438085329c6d79c33712d5a472aa804a88d643235f31ac971f211Approve297769382022-06-20 3:23:3011 days 7 hrs ago0x6e4efc631bf2d85fa978544813280d2988a5d2ee IN  0xcca34bf6a8353119b5811ab0d915509fde13df400 MATIC0.0018632 40
0x56ef5726399351a583299e7d8f053530d6b592554641aa438ce6412e4ca68db7Transfer292145002022-06-05 23:35:1125 days 11 hrs ago0xa9db0ed859b4aedfaa5dd239459a8c56e1b8b56a IN  0xcca34bf6a8353119b5811ab0d915509fde13df400 MATIC0.00086406 30.000000013
0xbbc90fec19fdf32709f8dc11e29f3f8d60c768e98cc1900c44a4d4860d860007Transfer292029652022-06-05 16:43:1525 days 17 hrs ago0x45366d42bcd25c85b0480cfdaaf1916deff52b6a IN  0xcca34bf6a8353119b5811ab0d915509fde13df400 MATIC0.00086442 30.000000014
0x0144fe2645e22249cbb5fce696ac9458dc9f30f64284bf75b038ed03f8b6f1c6Transfer292027042022-06-05 16:34:1725 days 18 hrs ago0x45366d42bcd25c85b0480cfdaaf1916deff52b6a IN  0xcca34bf6a8353119b5811ab0d915509fde13df400 MATIC0.00461024 160
0xf707a8f2096f69d0539849e44ceaed0196fec3eea83fbbaffadd75296b78b229Transfer292026592022-06-05 16:32:4325 days 18 hrs ago0x45366d42bcd25c85b0480cfdaaf1916deff52b6a IN  0xcca34bf6a8353119b5811ab0d915509fde13df400 MATIC0.001020025511 35.400343999
0xa3490e2ce3d489fe60cd033a0c9f31110aacd1beade8c953a85ff6514b295fb3Transfer292026342022-06-05 16:31:5325 days 18 hrs ago0x45366d42bcd25c85b0480cfdaaf1916deff52b6a IN  0xcca34bf6a8353119b5811ab0d915509fde13df400 MATIC0.000916626041 31.811829023
0xad11c4a32b997225303647de52971fe7793cefde8e0a77297df1390542687aedTransfer291875222022-06-05 7:43:1326 days 2 hrs ago0x55e0a3cd856cf14e289ba924e740e50d0201b5e5 IN  0xcca34bf6a8353119b5811ab0d915509fde13df400 MATIC0.00163944 30.000000014
0x574fffbe92fd0f66e2663e793ab56ea2caa73ab2b8b9d78b703643f70d2c3439Approve291864322022-06-05 7:05:4326 days 3 hrs ago0x6e4efc631bf2d85fa978544813280d2988a5d2ee IN  0xcca34bf6a8353119b5811ab0d915509fde13df400 MATIC0.0018632 40.000000015
0x96a0bbff639c681df3b49d6b78cb4901fce3365d4328a66dd5fe61c3e1020777Approve291853512022-06-05 6:28:3326 days 4 hrs ago0x1c0c24e0947b3bac146ac06c1e9dad557f70873e IN  0xcca34bf6a8353119b5811ab0d915509fde13df400 MATIC0.001807304 38.8
0x780b5d7e572772c23a03013dd05d855de45f928205d610a4c9804202f542b177Set Automated Ma...291746622022-06-05 0:16:1726 days 10 hrs ago0x55e0a3cd856cf14e289ba924e740e50d0201b5e5 IN  0xcca34bf6a8353119b5811ab0d915509fde13df400 MATIC0.004231122562 36.860000196
0x2e88dfc5d623ebd381cf06ec9a297d5794b325c165c8e14a11006e8a6271d918Approve291745762022-06-05 0:13:1726 days 10 hrs ago0x55e0a3cd856cf14e289ba924e740e50d0201b5e5 IN  0xcca34bf6a8353119b5811ab0d915509fde13df400 MATIC0.001430698731 30.714871873
0xb93cbe2761550b532f995bd48f2e9b1ccb8b9ccf1d261388647d13917d1caa13Approve291744302022-06-05 0:08:1726 days 10 hrs ago0x45a2800b3b41263156cf45d7fc4d8e436707c211 IN  0xcca34bf6a8353119b5811ab0d915509fde13df400 MATIC0.00140156439830.089403138
0x0edd4ac64e518ef63245053cd6e4d4d7a38d0d7292ba9d6206de43bb68a27ab3Approve291739192022-06-04 23:48:3526 days 10 hrs ago0x4209859ae2992f581d2678392b4ac80c13d5eed4 IN  0xcca34bf6a8353119b5811ab0d915509fde13df400 MATIC0.0018632 40.000000016
0xbea9978fdf9c22a878f1269834b9f2d2990a09acfa1160126bccfeac8e1d0993Approve291736032022-06-04 23:37:4326 days 11 hrs ago0x13285463f7ec210454b56fde2c84ed3a78620770 IN  0xcca34bf6a8353119b5811ab0d915509fde13df400 MATIC0.0013974 30.000000012
0xdb1766823a64990b3a28ee436d32aebd78d33d813d8d64f8090097c7bd124626Approve291733102022-06-04 23:27:3726 days 11 hrs ago0x55e0a3cd856cf14e289ba924e740e50d0201b5e5 IN  0xcca34bf6a8353119b5811ab0d915509fde13df400 MATIC0.00242216 52
0xde6174176e7888bf9821ec89ad455d8660e765c33f54562f1b05685a2a341a4cApprove291732382022-06-04 23:25:0926 days 11 hrs ago0x51412213e5aa2bd5f12527e47e8b5febc94e07de IN  0xcca34bf6a8353119b5811ab0d915509fde13df400 MATIC0.00260848 56
0xbb44d9144604c4d496c798621f5e32cfdc083eef38d3edd94a0253abdadd9a06Transfer291731072022-06-04 23:20:1526 days 11 hrs ago0x55e0a3cd856cf14e289ba924e740e50d0201b5e5 IN  0xcca34bf6a8353119b5811ab0d915509fde13df400 MATIC0.002152440023 30.000000323
0x663cce670caf7c46139cc8607f7beb86fa22afdc15de89d8aea3b046d1e913fbTransfer291731022022-06-04 23:19:5526 days 11 hrs ago0x55e0a3cd856cf14e289ba924e740e50d0201b5e5 IN  0xcca34bf6a8353119b5811ab0d915509fde13df400 MATIC0.002152440014 30.000000207
0x9cb59c1889aadd23c244651c367b8e3708f5e4bbbfe70d0b135fa3ddfdeda5adTransfer291730972022-06-04 23:19:3526 days 11 hrs ago0x55e0a3cd856cf14e289ba924e740e50d0201b5e5 IN  0xcca34bf6a8353119b5811ab0d915509fde13df400 MATIC0.001639080007 30.000000144
0xa38267a480e836deca402933cd5fab63659f6743a2fa4fcf6b0588be922a8658Transfer291730902022-06-04 23:19:0726 days 11 hrs ago0x55e0a3cd856cf14e289ba924e740e50d0201b5e5 IN  0xcca34bf6a8353119b5811ab0d915509fde13df400 MATIC0.002151720006 30.00000009
0xd958064a2cdc0be1e2dc4be5a4450029fcc809d4623888f44e27e19f331c0f72Transfer291730842022-06-04 23:18:4326 days 11 hrs ago0x55e0a3cd856cf14e289ba924e740e50d0201b5e5 IN  0xcca34bf6a8353119b5811ab0d915509fde13df400 MATIC0.001638720003 30.000000059
0xdd53ef21da58b84527a5a980c517faeb89528ca28fe3cfcd9b85b1b84e24cccbTransfer291730782022-06-04 23:18:1926 days 11 hrs ago0x55e0a3cd856cf14e289ba924e740e50d0201b5e5 IN  0xcca34bf6a8353119b5811ab0d915509fde13df400 MATIC0.001639080002 30.000000039
0x87c7c6df03536ce04ad73c6f9e0c100ec0f702ed216658e1fee53bbab52e62b3Transfer291730722022-06-04 23:17:5526 days 11 hrs ago0x55e0a3cd856cf14e289ba924e740e50d0201b5e5 IN  0xcca34bf6a8353119b5811ab0d915509fde13df400 MATIC0.001639440001 30.000000029
0x4c3a8aca599b648f6a56a83b6c573b3ea7304cdc27f417cfe23b58e2647aa6ccSet Fee Type Exe...291728862022-06-04 23:10:5726 days 11 hrs ago0x55e0a3cd856cf14e289ba924e740e50d0201b5e5 IN  0xcca34bf6a8353119b5811ab0d915509fde13df400 MATIC0.00154854777 32.010000016
[ Download CSV Export 
Parent Txn Hash Block From To Value
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
loopTokenV2

Compiler Version
v0.8.13+commit.abaa5c0e

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at polygonscan.com on 2022-05-27
*/

// SPDX-License-Identifier: MIT

pragma solidity 0.8.13;

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

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 view returns (address);

    function WETH() external view 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 removeLiquidity(
        address tokenA,
        address tokenB,
        uint256 liquidity,
        uint256 amountAMin,
        uint256 amountBMin,
        address to,
        uint256 deadline
    ) external returns (uint256 amountA, uint256 amountB);

    function removeLiquidityETH(
        address token,
        uint256 liquidity,
        uint256 amountTokenMin,
        uint256 amountETHMin,
        address to,
        uint256 deadline
    ) external returns (uint256 amountToken, uint256 amountETH);

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

    function removeLiquidityETHWithPermit(
        address token,
        uint256 liquidity,
        uint256 amountTokenMin,
        uint256 amountETHMin,
        address to,
        uint256 deadline,
        bool approveMax,
        uint8 v,
        bytes32 r,
        bytes32 s
    ) external returns (uint256 amountToken, uint256 amountETH);

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

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

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

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

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

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

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

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

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

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

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

    function removeLiquidityETHSupportingFeeOnTransferTokens(
        address token,
        uint256 liquidity,
        uint256 amountTokenMin,
        uint256 amountETHMin,
        address to,
        uint256 deadline
    ) external returns (uint256 amountETH);

    function removeLiquidityETHWithPermitSupportingFeeOnTransferTokens(
        address token,
        uint256 liquidity,
        uint256 amountTokenMin,
        uint256 amountETHMin,
        address to,
        uint256 deadline,
        bool approveMax,
        uint8 v,
        bytes32 r,
        bytes32 s
    ) external returns (uint256 amountETH);

    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 getPair(address tokenA, address tokenB)
    external
    view
    returns (address pair);

    function allPairs(uint256) external view returns (address pair);

    function allPairsLength() external view returns (uint256);

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

    function validPairs(address _pair) external view returns (bool);
}

interface IBalanceOfloop {
    function balanceOfloop(address _address) external view returns (uint256);
}

interface IDEXPair {
    function sync() external;
}

contract Ownable {
    address private _owner;

    event OwnershipRenounced(address indexed previousOwner);
    event TransferOwnerShip(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 {
        emit TransferOwnerShip(newOwner);
        _transferOwnership(newOwner);
    }

    function _transferOwnership(address newOwner) internal {
        require(newOwner != address(0), 'Owner can not be 0');
        emit OwnershipTransferred(_owner, newOwner);
        _owner = newOwner;
    }
}

/**
 * @dev Contract module that helps prevent reentrant calls to a function.
 *
 * Inheriting from `ReentrancyGuard` will make the {nonReentrant} modifier
 * available, which can be applied to functions to make sure there are no nested
 * (reentrant) calls to them.
 *
 * Note that because there is a single `nonReentrant` guard, functions marked as
 * `nonReentrant` may not call one another. This can be worked around by making
 * those functions `private`, and then adding `external` `nonReentrant` entry
 * points to them.
 *
 * TIP: If you would like to learn more about reentrancy and alternative ways
 * to protect against it, check out our blog post
 * https://blog.openzeppelin.com/reentrancy-after-istanbul/[Reentrancy After Istanbul].
 */
abstract contract ReentrancyGuard {
    // Booleans are more expensive than uint256 or any type that takes up a full
    // word because each write operation emits an extra SLOAD to first read the
    // slot's contents, replace the bits taken up by the boolean, and then write
    // back. This is the compiler's defense against contract upgrades and
    // pointer aliasing, and it cannot be disabled.

    // The values being non-zero value makes deployment a bit more expensive,
    // but in exchange the refund on every call to nonReentrant will be lower in
    // amount. Since refunds are capped to a percentage of the total
    // transaction's gas, it is best to keep them low in cases like this one, to
    // increase the likelihood of the full refund coming into effect.
    uint256 private constant _NOT_ENTERED = 1;
    uint256 private constant _ENTERED = 2;

    uint256 private _status;

    constructor() {
        _status = _NOT_ENTERED;
    }

    /**
     * @dev Prevents a contract from calling itself, directly or indirectly.
     * Calling a `nonReentrant` function from another `nonReentrant`
     * function is not supported. It is possible to prevent this from happening
     * by making the `nonReentrant` function external, and making it call a
     * `private` function that does the actual work.
     */
    modifier nonReentrant() {
        // On the first call to nonReentrant, _notEntered will be true
        require(_status != _ENTERED, "ReentrancyGuard: reentrant call");

        // Any calls to nonReentrant after this point will fail
        _status = _ENTERED;

        _;

        // By storing the original value once again, a refund is triggered (see
        // https://eips.ethereum.org/EIPS/eip-2200)
        _status = _NOT_ENTERED;
    }
}

contract loopTokenV2 is ERC20Detailed, Ownable, ReentrancyGuard {
    address constant DEAD = 0x000000000000000000000000000000000000dEaD;
    address constant ZERO = 0x0000000000000000000000000000000000000000;

    address[] public _makerPairs;
    address[] public partyArray;
    address[] public loopGamesContracts;
    address[] public subContracts;

    bool private feesOnNormalTransfers = true;
    bool private manualSyncRefresh = true;
    bool private doneInit = false;
    bool public autoRebase = false;
    bool public initialDistributionFinished = false;
    bool public isBurnEnabled = true;
    bool public isLiquidityEnabled = true;
    bool public isMoveBalance = true;
    bool public isSellHourlyLimit = false;
    bool public isTaxBracket = true;
    bool public isTaxBracketEnabledInMoveFee = false;
    bool public isWall = false;
    bool public partyTime = true;
    bool public swapEnabled = false;

    mapping(address => InvestorInfo) public investorInfoMap;
    mapping(address => bool) _isBuyFeeExempt;
    mapping(address => bool) _isSellFeeExempt;
    mapping(address => bool) _isTotalFeeExempt;
    mapping(address => bool) canRebase;
    mapping(address => bool) canSetRewardYield;
    mapping(address => bool) public _disallowedToMove;
    mapping(address => bool) public automatedMarketMakerPairs;
    mapping(address => bool) public partyArrayCheck;
    mapping(address => bool) public loopGamesCheck;
    mapping(address => bool) public subContractCheck;
    mapping(address => uint256) public partyArrayFee;
    mapping(address => mapping(address => uint256)) private _allowedFragments;
    mapping(address => uint256) private _gonBalances;

    uint256 private REWARD_YIELD_DENOMINATOR = 10000000000000000;
    uint256 private _gonsPerFragment;
    uint256 private _totalSupply;

    uint256 private constant DECIMALS = 18;
    uint256 private constant FEE_DENOMINATOR = 1000;
    uint256 private constant INITIAL_FRAGMENTS_SUPPLY =
    50 * 10 ** 9 * 10 ** DECIMALS;
    uint256 private constant MAX_INVEST_REMOVABLE_DELAY = 7200;
    uint256 private constant MAX_PARTY_ARRAY = 491;
    uint256 private constant MAX_PARTY_LIST_DIVISOR_RATE = 75;
    uint256 private constant MAX_REBASE_FREQUENCY = 1800;
    uint256 private constant MAX_SUPPLY = ~uint128(0);
    uint256 private constant MAX_TAX_BRACKET_FEE_RATE = 50;
    uint256 private constant MAX_TOTAL_BUY_FEE_RATE = 250;
    uint256 private constant MAX_TOTAL_SELL_FEE_RATE = 250;
    uint256 private constant MAX_UINT256 = ~uint256(0);
    uint256 private constant MIN_BUY_AMOUNT_RATE = 500000 * 10 ** 18;
    uint256 private constant MIN_INVEST_REMOVABLE_PER_PERIOD = 1500000 * 10 ** 18;
    uint256 private constant MIN_SELL_AMOUNT_RATE = 500000 * 10 ** 18;
    uint256 private constant TOTAL_GONS =
    MAX_UINT256 - (MAX_UINT256 % INITIAL_FRAGMENTS_SUPPLY);
    uint256 private constant maxBracketTax = 10; // max bracket is holding 10%

    uint256 private burnFee = 0;
    uint256 private buyGalaxyBondFee = 0;
    uint256 private gonSwapThreshold = TOTAL_GONS / 1000;
    uint256 private investRemovalDelay = 3600;
    uint256 private liquidityFee = 50;
    uint256 private partyListDivisor = 50;
    uint256 private realFeePartyArray = 490;
    uint256 private rebaseFrequency = 7200;
    uint256 private REWARD_YIELD = 0;
    uint256 private riskFreeValueFee = 80;
    uint256 private sellBurnFee = 0;
    uint256 private sellFeeRFVAdded = 70;
    uint256 private sellFeeTreasuryAdded = 0;
    uint256 private sellGalaxyBond = 0;
    uint256 private swapThreshold = 400000 * 10 ** 18;
    uint256 private treasuryFee = 0;

    uint256 public _markerPairCount;
    uint256 public epochBuyPressure = 0;
    uint256 public epochCollectedBuyTax = 0;
    uint256 public epochCollectedSellTax = 0;
    uint256 public epochSellPressure = 0;
    uint256 public INDEX;
    uint256 public maxBuyTransactionAmount = 500000 * 10 ** 18;
    uint256 public maxSellTransactionAmount = 500000 * 10 ** 18;
    uint256 public nextRebase = 1647385255;
    uint256 public oldEpochBuyPressure = 0;
    uint256 public oldEpochCollectedBuyTax = 0;
    uint256 public oldEpochCollectedSellTax = 0;
    uint256 public oldEpochSellPressure = 0;
    uint256 public rebaseEpoch = 0;
    uint256 public taxBracketMultiplier = 50;
    uint256 public totalBuyFee =
    liquidityFee + (treasuryFee) + (riskFreeValueFee);
    uint256 public totalSellFee =
    totalBuyFee + (sellFeeTreasuryAdded) + (sellFeeRFVAdded);
    uint256 public wallDivisor = 2;

    address public liquidityReceiver =
    0xEd4c110730922D2f56FD0040B21822A7E4a03547; //Liquidity pool fund
    address public treasuryReceiver =
    0x1FDecF89C5C37499D7F68d361E44816CF2655121; //Vault
    address public riskFreeValueReceiver =
    0xF86B1A2A0a1e0d9995f3ad2a26545cc2Ab76aa68; //Treasury
    address public galaxyBondReceiver =
    0x1FDecF89C5C37499D7F68d361E44816CF2655121; //Vault

    address public convertTo = 0x0d500B1d8E8eF31E21C99d1Db9A6444d3ADf1270;

    IDEXRouter public router;
    address public pair;

    uint256 maxInvestRemovablePerPeriod = 1500000 * 10 ** 18;


    bool inSwap;

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

    modifier validRecipient(address to) {
        require(to != address(0x0), 'recipient is not valid');
        _;
    }

    /* ======== STRUCTS ======== */
    struct Withdrawal {
        uint256 timestamp;
        uint256 withdrawAmount;
    }

    struct InvestorInfo {
        uint256 totalInvestableExchanged;
        Withdrawal[] withdrawHistory;
    }

    constructor() ERC20Detailed('Looper Finance', 'loopONE', uint8(DECIMALS)) {}

    function init() external onlyOwner {
        require(!doneInit, 'Already initialized');
        router = IDEXRouter(0xa5E0829CaCEd8fFDD4De3c43696c57F7D7A678ff); //Quickswap router


        _allowedFragments[address(this)][address(router)] = type(uint256).max;
        _allowedFragments[address(this)][address(this)] = type(uint256).max;

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

        _isTotalFeeExempt[treasuryReceiver] = true;
        _isTotalFeeExempt[riskFreeValueReceiver] = true;
        _isTotalFeeExempt[galaxyBondReceiver] = true;
        _isTotalFeeExempt[address(this)] = true;
        _isTotalFeeExempt[msg.sender] = true;
        INDEX = gonsForBalance(1e18);

        setWhitelistSetters(msg.sender, true, 1);
        setWhitelistSetters(msg.sender, true, 2);

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

    receive() external payable {}

    //gets every token in circulation no matter where
    function totalSupply() external view override returns (uint256) {
        return _totalSupply;
    }

    //how much a user is allowed to transfer from own address to another one
    function allowance(address owner_, address spender)
    external
    view
    override
    returns (uint256)
    {
        return _allowedFragments[owner_][spender];
    }

    //get balance of user
    function balanceOf(address who) public view override returns (uint256) {
        if (_gonsPerFragment == 0) {
            return 0;
        }
        return _gonBalances[who] / (_gonsPerFragment);
    }

    //get the address in the iteration
    function markerPairAddress(uint256 value) external view returns (address) {
        return _makerPairs[value];
    }

    //get the current index of rebase
    function currentIndex() external view returns (uint256) {
        return balanceForGons(INDEX);
    }

    //checks if a user is exempt from protocol fees
    function checkFeeExempt(address _addr) external view returns (bool) {
        return _isTotalFeeExempt[_addr];
    }

    function gonsForBalance(uint256 amount) public view returns (uint256) {
        return amount * (_gonsPerFragment);
    }

    function balanceForGons(uint256 gons) public view returns (uint256) {
        return gons / (_gonsPerFragment);
    }

    //checks what the threshold is for swapping
    function checkSwapThreshold() external view returns (uint256) {
        return gonSwapThreshold / (_gonsPerFragment);
    }

    // validate if the last rebase is in the past, thus execute
    function shouldRebase() internal view returns (bool) {
        return nextRebase <= block.timestamp;
    }

    function shouldBurn() internal view returns (bool) {
        return isBurnEnabled;
    }

    //enable tax bracket on users
    function isTaxBracketEnabled() internal view returns (bool) {
        return isTaxBracket;
    }

    //validates if the sell limit is enabled
    function isSellHourlyLimitEnabled() internal view returns (bool) {
        return isSellHourlyLimit;
    }

    //add the wall function that enables usages
    function isWallEnabled() internal view returns (bool) {
        return isWall;
    }

    //validates if the swap back function should be initiated or not
    function shouldSwapBack() internal view returns (bool) {
        return
        !automatedMarketMakerPairs[msg.sender] &&
        !inSwap &&
        swapThreshold > 0 &&
        swapEnabled &&
        (totalBuyFee + totalSellFee) > 0 &&
        balanceOf(address(this)) >= (gonSwapThreshold / _gonsPerFragment);
    }

    // check if the wallet should be taxed or not
    function shouldTakeFee(address from, address to)
    internal
    view
    returns (bool)
    {
        if (_isTotalFeeExempt[from] || _isTotalFeeExempt[to]) {
            return false;
        } else if (feesOnNormalTransfers) {
            return true;
        } else {
            return (automatedMarketMakerPairs[from] ||
            automatedMarketMakerPairs[to]);
        }
    }

    //this function iterates through all other contracts that are being part of the loop ecosystem
    //we add a new contract like wloop or sloop, whales could technically abuse this
    //by swapping to these contracts and leave the dynamic tax bracket
    function getBalanceContracts(address sender) public view returns (uint256) {
        uint256 userTotal;

        for (uint256 i = 0; i < subContracts.length; i++) {
            userTotal +
            (IBalanceOfloop(subContracts[i]).balanceOfloop(sender));
        }
        for (uint256 i = 0; i < loopGamesContracts.length; i++) {
            userTotal + (IERC20(loopGamesContracts[i]).balanceOf(sender));
        }

        return userTotal;
    }

    //calculates circulating supply (dead and zero is not added due to them being phased out of circulation forrever)
    function getCirculatingSupply() external view returns (uint256) {
        return
        (TOTAL_GONS - _gonBalances[DEAD] - _gonBalances[ZERO] - _gonBalances[treasuryReceiver]) /
        _gonsPerFragment;
    }

    function getCurrentTaxBracket(address _address)
    public
    view
    returns (uint256)
    {
        //gets the total balance of the user
        uint256 userTotal = getUserTotalOnDifferentContractsloop(_address);

        //calculate the percentage
        uint256 totalCap = (userTotal * (100)) / (getTokensInLPCirculation());

        //calculate what is smaller, and use that
        uint256 _bracket = totalCap < maxBracketTax ? totalCap : maxBracketTax;

        //multiply the bracket with the multiplier
        _bracket *= taxBracketMultiplier;

        return _bracket;
    }

    function getRewardYield() external view returns (uint256, uint256) {
        return (REWARD_YIELD, REWARD_YIELD_DENOMINATOR);
    }

    function getTokensInLPCirculation() public view returns (uint256) {
        uint256 LPTotal;

        for (uint256 i = 0; i < _makerPairs.length; i++) {
            LPTotal += balanceOf(_makerPairs[i]);
        }

        return LPTotal;
    }

    //calculate the users total on different contracts
    function getUserTotalOnDifferentContractsloop(address sender)
    public
    view
    returns (uint256)
    {
        uint256 userTotal = balanceOf(sender);

        //calculate the balance of different contracts on different wallets and sum them
        return userTotal + (getBalanceContracts(sender));
    }

    //sync every LP to make sure Theft-of-Liquidity can't be arbitraged
    function manualSync() public {
        for (uint256 i = 0; i < _makerPairs.length; i++) {
            try IDEXPair(_makerPairs[i]).sync() {} catch Error(
                string memory reason
            ) {
                emit GenericErrorEvent(
                    'manualSync(): _makerPairs.sync() Failed'
                );
                emit GenericErrorEvent(reason);
            }
        }
    }

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

    //basic transfer from one wallet to the other
    function _basicTransfer(
        address from,
        address to,
        uint256 amount
    ) internal returns (bool) {
        uint256 gonAmount = amount * (_gonsPerFragment);
        _gonBalances[from] = _gonBalances[from] - (gonAmount);
        _gonBalances[to] = _gonBalances[to] + (gonAmount);

        emit Transfer(from, to, amount);

        return true;
    }

    //inherent transfer function that calculates the taxes and the limits
    //limits like sell per hour, party array check
    function _transferFrom(
        address sender,
        address recipient,
        uint256 amount
    ) internal returns (bool) {
        bool excludedAccount = _isTotalFeeExempt[sender] ||
        _isTotalFeeExempt[recipient];

        require(initialDistributionFinished || excludedAccount, 'Trade off');

        if (automatedMarketMakerPairs[recipient] && !excludedAccount) {
            require(amount <= maxSellTransactionAmount, 'Too much sell');
        }

        //update manualSync every second sell / buy to resolve possible K issues with QLaaS
        //only uses 60K gas
        if (
            automatedMarketMakerPairs[sender] ||
            automatedMarketMakerPairs[recipient]
        ) {
            if (manualSyncRefresh) {
                manualSync();
                manualSyncRefresh = false;
            } else {
                manualSyncRefresh = true;
            }
        }

        if (
            automatedMarketMakerPairs[recipient] &&
            !excludedAccount &&
            partyArrayCheck[sender] &&
            partyTime
        ) {
            require(
                amount <= (maxSellTransactionAmount / (partyListDivisor)),
                'party div'
            );
        }

        if (automatedMarketMakerPairs[sender] && !excludedAccount) {
            require(amount <= maxBuyTransactionAmount, 'too much buy');
        }

        if (
            automatedMarketMakerPairs[recipient] &&
            !excludedAccount &&
            isSellHourlyLimitEnabled()
        ) {
            InvestorInfo storage investor = investorInfoMap[sender];
            //Make sure they can't withdraw too often.
            Withdrawal[] storage withdrawHistory = investor.withdrawHistory;
            uint256 authorizedWithdraw = (maxInvestRemovablePerPeriod -
            (getLastPeriodWithdrawals(sender)));
            require(amount <= authorizedWithdraw, 'max withdraw');
            withdrawHistory.push(
                Withdrawal({timestamp : block.timestamp, withdrawAmount : amount})
            );
        }

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

        uint256 gonAmount = amount * (_gonsPerFragment);

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


        uint256 gonAmountReceived = shouldTakeFee(sender, recipient)
        ? takeFee(sender, recipient, gonAmount)
        : gonAmount;

        _gonBalances[sender] = _gonBalances[sender] - (gonAmount);
        _gonBalances[recipient] = _gonBalances[recipient] + (gonAmountReceived);

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

        //calculate the amount of buy / sell
        if (automatedMarketMakerPairs[sender]) {
            epochBuyPressure += (gonAmount / (_gonsPerFragment));
            epochCollectedBuyTax += (gonAmount -
            (gonAmountReceived) /
            (_gonsPerFragment));
        } else if (automatedMarketMakerPairs[recipient]) {
            epochSellPressure += (gonAmount / (_gonsPerFragment));
            epochCollectedSellTax += (gonAmount -
            (gonAmountReceived) /
            (_gonsPerFragment));
        }

        emit Transfer(
            sender,
            recipient,
            gonAmountReceived / (_gonsPerFragment)
        );

        return true;
    }

    function transferFrom(
        address from,
        address to,
        uint256 value
    ) external override validRecipient(to) returns (bool) {
        if (_allowedFragments[from][msg.sender] != type(uint256).max) {
            _allowedFragments[from][msg.sender] =
            _allowedFragments[from][msg.sender] -
            (value);
        }

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

    function swapBack() internal swapping {
        uint256 dynamicLiquidityFee = isLiquidityEnabled ? liquidityFee : 0;
        uint256 realTotalFee = totalBuyFee + (totalSellFee);

        uint256 contractTokenBalance = balanceOf(address(this));

        uint256 balanceBefore = address(this).balance;

        uint256 amountToBurn = (contractTokenBalance *
        (burnFee + sellBurnFee)) / realTotalFee;

        tokenBurner(amountToBurn);

        uint256 amountToLiquidate = (contractTokenBalance *
        (dynamicLiquidityFee)) /
        (realTotalFee) /
        (2);

        uint256 amountToSwap = contractTokenBalance -
        amountToLiquidate -
        amountToBurn;

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

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

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

        uint256 totalMATICFee = ((realTotalFee) -
        (dynamicLiquidityFee) /
        (2) -
        (burnFee + sellBurnFee));

        uint256 amountMATICLiquidity = (amountMATIC * (dynamicLiquidityFee)) /
        (totalMATICFee) /
        (2);

        uint256 amountToRFV = (amountMATIC *
        (riskFreeValueFee + (sellFeeRFVAdded))) / (totalMATICFee);

        uint256 amountToGalaxyBond = (amountMATIC *
        (buyGalaxyBondFee + (sellGalaxyBond))) / (totalMATICFee);

        uint256 amountToTreasury = amountMATIC -
        (amountMATICLiquidity) -
        (amountToRFV) -
        (amountToGalaxyBond);

        (bool success,) = payable(treasuryReceiver).call{
        value : amountToTreasury,
        gas : 30000
        }('');
        (success,) = payable(riskFreeValueReceiver).call{
        value : amountToRFV,
        gas : 30000
        }('');
        (success,) = payable(galaxyBondReceiver).call{
        value : amountToGalaxyBond,
        gas : 30000
        }('');

        success = false;

        if (amountToLiquidate > 0) {
            router.addLiquidityETH{value : amountMATICLiquidity}(
                address(this),
                amountToLiquidate,
                0,
                0,
                liquidityReceiver,
                block.timestamp
            );
        }
    }

    function manualSwapBack() external onlyOwner {
        swapBack();
    }

    /** @dev Returns the total amount withdrawn by the _address during the last hour **/

    function getLastPeriodWithdrawals(address _address)
    public
    view
    returns (uint256 totalWithdrawLastHour)
    {
        InvestorInfo storage investor = investorInfoMap[_address];

        Withdrawal[] storage withdrawHistory = investor.withdrawHistory;
        for (uint256 i = 0; i < withdrawHistory.length; i++) {
            Withdrawal memory withdraw = withdrawHistory[i];
            if (
                withdraw.timestamp >= (block.timestamp - (investRemovalDelay))
            ) {
                totalWithdrawLastHour =
                totalWithdrawLastHour +
                (withdrawHistory[i].withdrawAmount);
            }
        }

        return totalWithdrawLastHour;
    }

    function takeFee(
        address sender,
        address recipient,
        uint256 gonAmount
    ) internal returns (uint256) {
        uint256 _realFee = totalBuyFee;

        if (isWallEnabled()) {
            _realFee = totalBuyFee / (wallDivisor);
        }

        if (_isBuyFeeExempt[sender]) {
            _realFee = 0;
        }

        //check if it's a sell fee embedded
        if (automatedMarketMakerPairs[recipient]) {
            _realFee = totalSellFee;

            //trying to join our party? Become the party maker :)
            if (partyArrayCheck[sender] && partyTime) {
                if (_realFee < partyArrayFee[sender])
                    _realFee = partyArrayFee[sender];
            }

            if (_isSellFeeExempt[sender]) {
                _realFee = 0;
            }
        }

        if (!automatedMarketMakerPairs[sender]) {
            //calculate Tax
            if (isTaxBracketEnabled()) {
                uint256 currentTaxBracket = getCurrentTaxBracket(sender);
                if (currentTaxBracket > 0){
                    _realFee += (currentTaxBracket * 4 / 5) ;

                    //make sure Burn is enabled to allow Dynamic Burn
                    if (shouldBurn()) {
                        uint256 _burnFee = currentTaxBracket / 5;
                        uint256 burnAmount = (gonAmount * (_burnFee)) / (FEE_DENOMINATOR);   
                        // burn the amount given % every transaction
                        tokenBurner(
                            (burnAmount / (_gonsPerFragment)) 
                        );
                    }

                }

            }
        }

        uint256 feeAmount = (gonAmount * (_realFee)) / (FEE_DENOMINATOR);

        _gonBalances[address(this)] = _gonBalances[address(this)] + (feeAmount);

        emit Transfer(sender, address(this), (feeAmount / (_gonsPerFragment)));

        return gonAmount - (feeAmount);
    }

    //burn tokens to the dead wallet
    function tokenBurner(uint256 _tokenAmount) private {
        _transferFrom(address(this), address(DEAD), _tokenAmount);
    }

    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 -
            (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] -
        (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 {
        int256 supplyDelta;
        int256 i = 0;
        if (!inSwap) {
            do {
                supplyDelta = int256(
                    (_totalSupply * (REWARD_YIELD)) / (REWARD_YIELD_DENOMINATOR)
                );
                coreRebase(supplyDelta);
                i++;
            }
            while (nextRebase < block.timestamp && i < 100);
            manualSync();
        }
    }

    //rebase everyone
    function coreRebase(int256 supplyDelta) private returns (uint256) {
        require(nextRebase <= block.timestamp, 'rebase too early');
        uint256 epoch = nextRebase;

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

        if (supplyDelta < 0) {
            _totalSupply = _totalSupply - (uint256(- supplyDelta));
        } else {
            _totalSupply = _totalSupply + (uint256(supplyDelta));
        }

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

        _gonsPerFragment = TOTAL_GONS / (_totalSupply);

        updateRebaseIndex(epoch);

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

    //set who is allowed to trigger the rebase or reward yield
    function setWhitelistSetters(
        address _addr,
        bool _value,
        uint256 _type
    ) public onlyOwner {
        if (_type == 1) {
            require(canRebase[_addr] != _value, 'Not changed');
            canRebase[_addr] = _value;
        } else if (_type == 2) {
            require(canSetRewardYield[_addr] != _value, 'Not changed');
            canSetRewardYield[_addr] = _value;
        }

        emit SetRebaseWhitelist(_addr, _value, _type);
    }

    //set the router in case of dex switch
    function setRouter(address _router, address _pair) external onlyOwner {
        router = IDEXRouter(_router);
        pair = _pair;

        _allowedFragments[address(this)][address(router)] = type(uint256).max;
        _allowedFragments[address(this)][address(this)] = type(uint256).max;
        _allowedFragments[address(this)][pair] = type(uint256).max;
        setAutomatedMarketMakerPair(pair, true);

        emit SetRouter(_router, _pair);
    }

    //execute manual rebase
    function manualRebase() external nonReentrant {
        require(canRebase[msg.sender], 'can not rebase');
        require(!inSwap, 'Try again');
        require(nextRebase <= block.timestamp, 'Not in time');

        int256 supplyDelta;
        int256 i = 0;

        do {
            supplyDelta = int256(
                (_totalSupply * (REWARD_YIELD)) / (REWARD_YIELD_DENOMINATOR)
            );
            coreRebase(supplyDelta);
            i++;
        }
        while (nextRebase < block.timestamp && i < 100);

        manualSync();
    }

    //move full balance without the tax
    function moveBalance(address _to)
    external
    validRecipient(_to)
    returns (bool)
    {
        require(isMoveBalance, 'can not move');
        require(initialDistributionFinished, 'Trade off');
        // Allow to move balance only once
        require(!_disallowedToMove[msg.sender], 'not allowed');
        require(balanceOf(msg.sender) > 0, 'No tokens');
        uint256 balanceOfAllSubContracts = 0;

        balanceOfAllSubContracts = getBalanceContracts(msg.sender);
        require(balanceOfAllSubContracts == 0, 'other balances');

        // Once an address received funds moved from another address it should
        // not be able to move its balance again
        _disallowedToMove[msg.sender] = true;
        uint256 gonAmount = _gonBalances[msg.sender];

        // reduce balance early
        _gonBalances[msg.sender] = _gonBalances[msg.sender] - (gonAmount);

        // Move the balance to the to address
        _gonBalances[_to] = _gonBalances[_to] + (gonAmount);

        emit Transfer(msg.sender, _to, (gonAmount / (_gonsPerFragment)));
        emit MoveBalance(msg.sender, _to);
        return true;
    }

    function updateRebaseIndex(uint256 epoch) private {
        // update the next Rebase time
        nextRebase = epoch + rebaseFrequency;

        //simply show how often we rebased since inception (how many epochs)
        rebaseEpoch += 1;
    }

    //add new subcontracts to the protocol so they can be calculated
    function addSubContracts(address _subContract, bool _value)
    external
    onlyOwner
    {
        require(subContractCheck[_subContract] != _value, 'Value already set');

        subContractCheck[_subContract] = _value;

        if (_value) {
            subContracts.push(_subContract);
        } else {
            for (uint256 i = 0; i < subContracts.length; i++) {
                if (subContracts[i] == _subContract) {
                    subContracts[i] = subContracts[subContracts.length - 1];
                    subContracts.pop();
                    break;
                }
            }
        }

        emit SetSubContracts(_subContract, _value);
    }

    //Add S.P.H.E.R.E. Games Contracts
    function addloopGamesAddies(address _loopGamesAddy, bool _value)
    external
    onlyOwner
    {
        require(
            loopGamesCheck[_loopGamesAddy] != _value,
            'Value already set'
        );

        loopGamesCheck[_loopGamesAddy] = _value;

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

        emit SetloopGamesAddresses(_loopGamesAddy, _value);
    }

    function addPartyAddies(
        address _partyAddy,
        bool _value,
        uint256 feeAmount
    ) external onlyOwner {
        partyArrayCheck[_partyAddy] = _value;
        partyArrayFee[_partyAddy] = feeAmount;

        if (_value) {
            partyArray.push(_partyAddy);
        } else {
            for (uint256 i = 0; i < partyArray.length; i++) {
                if (partyArray[i] == _partyAddy) {
                    partyArray[i] = partyArray[partyArray.length - 1];
                    partyArray.pop();
                    break;
                }
            }
        }

        emit SetPartyAddresses(_partyAddy, _value);
    }

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

        automatedMarketMakerPairs[_pair] = _value;

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

        emit SetAutomatedMarketMakerPair(_pair, _value);
    }

    function setInitialDistributionFinished(bool _value) external onlyOwner {
        initialDistributionFinished = _value;

        emit SetInitialDistribution(_value);
    }

    function setInvestRemovalDelay(uint256 _value) external onlyOwner {
        require(_value < MAX_INVEST_REMOVABLE_DELAY, 'over 2 hours');
        investRemovalDelay = _value;

        emit SetInvestRemovalDelay(_value);
    }

    function setEpochCalculation() private {
        //store previous buy pressure
        oldEpochBuyPressure = epochBuyPressure;
        oldEpochCollectedBuyTax = epochCollectedBuyTax;
        epochBuyPressure = 0;

        //store previous sell pressure
        oldEpochSellPressure = epochSellPressure;
        oldEpochCollectedSellTax = epochCollectedSellTax;
        epochSellPressure = 0;
    }

    function setMaxInvestRemovablePerPeriod(uint256 _value) external onlyOwner {
        require(_value > MIN_INVEST_REMOVABLE_PER_PERIOD, 'Below minimum');
        maxInvestRemovablePerPeriod = _value;

        emit SetMaxInvestRemovablePerPeriod(_value);
    }

    function setSellHourlyLimit(bool _value) external onlyOwner {
        isSellHourlyLimit = _value;

        emit SetHourlyLimit(_value);
    }

    function setContractToChange(address _value) external onlyOwner {
        convertTo = _value;

        emit SetContractToChange(_value);
    }

    function setPartyListDivisor(uint256 _value) external onlyOwner {
        require(_value <= MAX_PARTY_LIST_DIVISOR_RATE, 'max party');
        partyListDivisor = _value;

        emit SetPartyListDivisor(_value);
    }

    function setMoveBalance(bool _value) external onlyOwner {
        isMoveBalance = _value;

        emit SetMoveBalance(_value);
    }

    function setFeeTypeExempt(
        address _addr,
        bool _value,
        uint256 _type
    ) external onlyOwner {
        if (_type == 1) {
            require(_isTotalFeeExempt[_addr] != _value, 'Not changed');
            _isTotalFeeExempt[_addr] = _value;
            emit SetTotalFeeExempt(_addr, _value);
        } else if (_type == 2) {
            require(_isBuyFeeExempt[_addr] != _value, 'Not changed');
            _isBuyFeeExempt[_addr] = _value;
            emit SetBuyFeeExempt(_addr, _value);
        } else if (_type == 3) {
            require(_isSellFeeExempt[_addr] != _value, 'Not changed');
            _isSellFeeExempt[_addr] = _value;
            emit SetSellFeeExempt(_addr, _value);
        }
    }

    function setSwapBackSettings(
        bool _enabled,
        uint256 _num,
        uint256 _denom
    ) external onlyOwner {
        swapEnabled = _enabled;
        gonSwapThreshold = (TOTAL_GONS * (_num)) / (_denom);
        emit SetSwapBackSettings(_enabled, _num, _denom);
    }

    function setFeeReceivers(
        address _liquidityReceiver,
        address _treasuryReceiver,
        address _riskFreeValueReceiver,
        address _galaxyBondReceiver
    ) external onlyOwner {
        liquidityReceiver = _liquidityReceiver;
        treasuryReceiver = _treasuryReceiver;
        riskFreeValueReceiver = _riskFreeValueReceiver;
        galaxyBondReceiver = _galaxyBondReceiver;
    }

    function setFees(
        uint256 _liquidityFee,
        uint256 _riskFreeValueFee,
        uint256 _treasuryFee,
        uint256 _burnFee,
        uint256 _buyGalaxyBondFee,
        uint256 _sellFeeTreasuryAdded,
        uint256 _sellFeeRFVAdded,
        uint256 _sellBurnFee,
        uint256 _sellGalaxyBond,
        uint256 _realFeePartyArray,
        bool _isTaxBracketEnabledInMoveFee
    ) external onlyOwner {
        liquidityFee = _liquidityFee;
        riskFreeValueFee = _riskFreeValueFee;
        treasuryFee = _treasuryFee;
        sellFeeTreasuryAdded = _sellFeeTreasuryAdded;
        sellFeeRFVAdded = _sellFeeRFVAdded;
        buyGalaxyBondFee = _buyGalaxyBondFee;
        burnFee = _burnFee;
        sellBurnFee = _sellBurnFee;
        sellGalaxyBond = _sellGalaxyBond;
        realFeePartyArray = _realFeePartyArray;

        uint256 maxTotalBuyFee = liquidityFee +
        (treasuryFee) +
        (burnFee) +
        (buyGalaxyBondFee) +
        (riskFreeValueFee);

        uint256 maxTotalSellFee = maxTotalBuyFee +
        (sellFeeTreasuryAdded) +
        (sellFeeRFVAdded) +
        (sellBurnFee) +
        (sellGalaxyBond);

        require(maxTotalBuyFee < MAX_TOTAL_BUY_FEE_RATE, 'max buy fees');

        require(maxTotalSellFee < MAX_TOTAL_SELL_FEE_RATE, 'max sell fees');

        require(realFeePartyArray < MAX_PARTY_ARRAY, 'max party fees');

        totalBuyFee = maxTotalBuyFee;
        totalSellFee = maxTotalSellFee;

        isTaxBracketEnabledInMoveFee = _isTaxBracketEnabledInMoveFee;

        emit SetFees(
            _liquidityFee,
            _riskFreeValueFee,
            _treasuryFee,
            _sellFeeTreasuryAdded,
            _sellFeeRFVAdded,
            _burnFee,
            sellBurnFee,
            maxTotalBuyFee,
            _isTaxBracketEnabledInMoveFee
        );
    }

    function setPartyTime(bool _value) external onlyOwner {
        partyTime = _value;
        emit SetPartyTime(_value, block.timestamp);
    }

    function setTaxBracketFeeMultiplier(
        uint256 _taxBracketFeeMultiplier,
        bool _isTaxBracketEnabled
    ) external onlyOwner {
        require(
            _taxBracketFeeMultiplier <= MAX_TAX_BRACKET_FEE_RATE,
            'max bracket fee exceeded'
        );
        taxBracketMultiplier = _taxBracketFeeMultiplier;
        isTaxBracket = _isTaxBracketEnabled;
        emit SetTaxBracketFeeMultiplier(
            _taxBracketFeeMultiplier,
            _isTaxBracketEnabled,
            block.timestamp
        );
    }

    function clearStuckBalance(address _receiver) external onlyOwner {
        uint256 balance = address(this).balance;
        payable(_receiver).transfer(balance);
        emit ClearStuckBalance(balance, _receiver, block.timestamp);
    }

    function rescueToken(address tokenAddress)
    external
    onlyOwner
    returns (bool success)
    {
        uint256 tokens = ERC20Detailed(tokenAddress).balanceOf(address(this));
        emit RescueToken(tokenAddress, msg.sender, tokens, block.timestamp);
        return ERC20Detailed(tokenAddress).transfer(msg.sender, tokens);
    }

    function setAutoRebase(bool _autoRebase) external onlyOwner {
        autoRebase = _autoRebase;
        emit SetAutoRebase(_autoRebase, block.timestamp);
    }

    //set rebase frequency
    function setRebaseFrequency(uint256 _rebaseFrequency) external onlyOwner {
        require(_rebaseFrequency <= MAX_REBASE_FREQUENCY, 'Too high');
        rebaseFrequency = _rebaseFrequency;
        emit SetRebaseFrequency(_rebaseFrequency, block.timestamp);
    }

    //enable burn fee if necessary
    function setBurnFee(bool _isBurnEnabled) external onlyOwner {
        require(
            isBurnEnabled != _isBurnEnabled,
            "Burn function hasn't changed"
        );
        isBurnEnabled = _isBurnEnabled;
        emit SetBurnFee(_isBurnEnabled, block.timestamp);
    }

    //set reward yield
    function setRewardYield(
        uint256 _rewardYield,
        uint256 _rewardYieldDenominator
    ) external {
        require(canSetRewardYield[msg.sender], 'Not allowed for reward yield');
        REWARD_YIELD = _rewardYield;
        REWARD_YIELD_DENOMINATOR = _rewardYieldDenominator;
        emit SetRewardYield(
            _rewardYield,
            _rewardYieldDenominator,
            block.timestamp,
            msg.sender
        );
    }

    //set swap threshold
    function setSwapThreshold(uint256 _value) external onlyOwner {
        swapThreshold = _value;
    }

    //enable fees on normal transfer
    function setFeesOnNormalTransfers(bool _enabled) external onlyOwner {
        feesOnNormalTransfers = _enabled;
    }

    //set next rebase time
    function setNextRebase(uint256 _nextRebase) external onlyOwner {
        require(_nextRebase > block.timestamp, 'can not be in past');
        nextRebase = _nextRebase;
        emit SetNextRebase(_nextRebase, block.timestamp);
    }

    function setIsLiquidityEnabled(bool _value) external onlyOwner {
        isLiquidityEnabled = _value;
        emit SetIsLiquidityEnabled(_value);
    }

    function setMaxTransactionAmount(uint256 _maxSellTxn, uint256 _maxBuyTxn)
    external
    onlyOwner
    {
        require(
            _maxSellTxn > MIN_SELL_AMOUNT_RATE,
            'Below minimum sell amount'
        );
        require(_maxBuyTxn > MIN_BUY_AMOUNT_RATE, 'Below minimum buy amount');
        maxSellTransactionAmount = _maxSellTxn;
        maxBuyTransactionAmount = _maxBuyTxn;
        emit SetMaxTransactionAmount(_maxSellTxn, _maxBuyTxn, block.timestamp);
    }

    function setWallDivisor(uint256 _wallDivisor, bool _isWall)
    external
    onlyOwner
    {
        wallDivisor = _wallDivisor;
        isWall = _isWall;
        emit SetWallDivisor(_wallDivisor, _isWall);
    }

    event SwapBack(
        uint256 contractTokenBalance,
        uint256 amountToLiquify,
        uint256 amountToRFV,
        uint256 amountToTreasury,
        uint256 amountToGalaxyBond
    );

    event SwapAndLiquify(
        uint256 tokensSwapped,
        uint256 MATICReceived,
        uint256 tokensIntoLiqudity
    );

    event SetFeeReceivers(
        address indexed _liquidityReceiver,
        address indexed _treasuryReceiver,
        address indexed _riskFreeValueReceiver,
        address _galaxyBondReceiver
    );

    event SetPartyTime(bool indexed state, uint256 indexed time);

    event SetTaxBracketFeeMultiplier(
        uint256 indexed state,
        bool indexed _isTaxBracketEnabled,
        uint256 indexed time
    );

    event ClearStuckBalance(
        uint256 indexed amount,
        address indexed receiver,
        uint256 indexed time
    );

    event RescueToken(
        address indexed tokenAddress,
        address indexed sender,
        uint256 indexed tokens,
        uint256 time
    );

    event SetAutoRebase(bool indexed value, uint256 indexed time);

    event SetTaxBracket(bool indexed value, uint256 indexed time);

    event SetRebaseFrequency(uint256 indexed frequency, uint256 indexed time);

    event SetRewardYield(
        uint256 indexed rewardYield,
        uint256 indexed frequency,
        uint256 indexed time,
        address setter
    );

    event SetFeesOnNormalTransfers(bool indexed value, uint256 indexed time);

    event SetNextRebase(uint256 indexed value, uint256 indexed time);

    event SetMaxTransactionAmount(
        uint256 indexed sell,
        uint256 indexed buy,
        uint256 indexed time
    );

    event SetWallDivisor(uint256 indexed _wallDivisor, bool indexed _isWall);

    event SetBurnFee(
        bool indexed value,
        uint256 indexed time
    );

    event SetSwapBackSettings(
        bool indexed enabled,
        uint256 indexed num,
        uint256 indexed denum
    );

    event SetFees(
        uint256 indexed _liquidityFee,
        uint256 indexed _riskFreeValue,
        uint256 indexed _treasuryFee,
        uint256 _sellFeeTreasuryAdded,
        uint256 _sellFeeRFVAdded,
        uint256 _burnFee,
        uint256 sellBurnFee,
        uint256 totalBuyFee,
        bool _isTaxBracketEnabledInMoveFee
    );

    event LogRebase(uint256 indexed epoch, uint256 totalSupply);
    event SetAutomatedMarketMakerPair(address indexed pair, bool indexed value);
    event SetInitialDistribution(bool indexed value);
    event SetInvestRemovalDelay(uint256 indexed value);
    event SetMaxInvestRemovablePerPeriod(uint256 indexed value);
    event SetMoveBalance(bool indexed value);
    event SetIsLiquidityEnabled(bool indexed value);
    event SetPartyListDivisor(uint256 indexed value);
    event SetHourlyLimit(bool indexed value);
    event SetContractToChange(address indexed value);
    event SetSwapThreshold(uint256 indexed value);
    event SetTotalFeeExempt(address indexed addy, bool indexed value);
    event SetBuyFeeExempt(address indexed addy, bool indexed value);
    event SetSellFeeExempt(address indexed addy, bool indexed value);
    event SetRebaseWhitelist(
        address indexed addy,
        bool indexed value,
        uint256 indexed _type
    );
    event SetSubContracts(address indexed pair, bool indexed value);
    event SetPartyAddresses(address indexed pair, bool indexed value);
    event SetloopGamesAddresses(address indexed pair, bool indexed value);
    event GenericErrorEvent(string reason);
    event SetRouter(address indexed _address, address indexed _pair);
    event MoveBalance(address from, address to);
}

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"amount","type":"uint256"},{"indexed":true,"internalType":"address","name":"receiver","type":"address"},{"indexed":true,"internalType":"uint256","name":"time","type":"uint256"}],"name":"ClearStuckBalance","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"string","name":"reason","type":"string"}],"name":"GenericErrorEvent","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":false,"internalType":"address","name":"from","type":"address"},{"indexed":false,"internalType":"address","name":"to","type":"address"}],"name":"MoveBalance","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":"tokenAddress","type":"address"},{"indexed":true,"internalType":"address","name":"sender","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokens","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"time","type":"uint256"}],"name":"RescueToken","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"bool","name":"value","type":"bool"},{"indexed":true,"internalType":"uint256","name":"time","type":"uint256"}],"name":"SetAutoRebase","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":true,"internalType":"bool","name":"value","type":"bool"},{"indexed":true,"internalType":"uint256","name":"time","type":"uint256"}],"name":"SetBurnFee","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"addy","type":"address"},{"indexed":true,"internalType":"bool","name":"value","type":"bool"}],"name":"SetBuyFeeExempt","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"value","type":"address"}],"name":"SetContractToChange","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"_liquidityReceiver","type":"address"},{"indexed":true,"internalType":"address","name":"_treasuryReceiver","type":"address"},{"indexed":true,"internalType":"address","name":"_riskFreeValueReceiver","type":"address"},{"indexed":false,"internalType":"address","name":"_galaxyBondReceiver","type":"address"}],"name":"SetFeeReceivers","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"_liquidityFee","type":"uint256"},{"indexed":true,"internalType":"uint256","name":"_riskFreeValue","type":"uint256"},{"indexed":true,"internalType":"uint256","name":"_treasuryFee","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"_sellFeeTreasuryAdded","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"_sellFeeRFVAdded","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"_burnFee","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"sellBurnFee","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"totalBuyFee","type":"uint256"},{"indexed":false,"internalType":"bool","name":"_isTaxBracketEnabledInMoveFee","type":"bool"}],"name":"SetFees","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"bool","name":"value","type":"bool"},{"indexed":true,"internalType":"uint256","name":"time","type":"uint256"}],"name":"SetFeesOnNormalTransfers","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"bool","name":"value","type":"bool"}],"name":"SetHourlyLimit","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"bool","name":"value","type":"bool"}],"name":"SetInitialDistribution","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"value","type":"uint256"}],"name":"SetInvestRemovalDelay","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"bool","name":"value","type":"bool"}],"name":"SetIsLiquidityEnabled","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"value","type":"uint256"}],"name":"SetMaxInvestRemovablePerPeriod","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"sell","type":"uint256"},{"indexed":true,"internalType":"uint256","name":"buy","type":"uint256"},{"indexed":true,"internalType":"uint256","name":"time","type":"uint256"}],"name":"SetMaxTransactionAmount","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"bool","name":"value","type":"bool"}],"name":"SetMoveBalance","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"value","type":"uint256"},{"indexed":true,"internalType":"uint256","name":"time","type":"uint256"}],"name":"SetNextRebase","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pair","type":"address"},{"indexed":true,"internalType":"bool","name":"value","type":"bool"}],"name":"SetPartyAddresses","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"value","type":"uint256"}],"name":"SetPartyListDivisor","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"bool","name":"state","type":"bool"},{"indexed":true,"internalType":"uint256","name":"time","type":"uint256"}],"name":"SetPartyTime","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"frequency","type":"uint256"},{"indexed":true,"internalType":"uint256","name":"time","type":"uint256"}],"name":"SetRebaseFrequency","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"addy","type":"address"},{"indexed":true,"internalType":"bool","name":"value","type":"bool"},{"indexed":true,"internalType":"uint256","name":"_type","type":"uint256"}],"name":"SetRebaseWhitelist","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"rewardYield","type":"uint256"},{"indexed":true,"internalType":"uint256","name":"frequency","type":"uint256"},{"indexed":true,"internalType":"uint256","name":"time","type":"uint256"},{"indexed":false,"internalType":"address","name":"setter","type":"address"}],"name":"SetRewardYield","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"_address","type":"address"},{"indexed":true,"internalType":"address","name":"_pair","type":"address"}],"name":"SetRouter","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"addy","type":"address"},{"indexed":true,"internalType":"bool","name":"value","type":"bool"}],"name":"SetSellFeeExempt","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pair","type":"address"},{"indexed":true,"internalType":"bool","name":"value","type":"bool"}],"name":"SetSubContracts","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"bool","name":"enabled","type":"bool"},{"indexed":true,"internalType":"uint256","name":"num","type":"uint256"},{"indexed":true,"internalType":"uint256","name":"denum","type":"uint256"}],"name":"SetSwapBackSettings","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"value","type":"uint256"}],"name":"SetSwapThreshold","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"bool","name":"value","type":"bool"},{"indexed":true,"internalType":"uint256","name":"time","type":"uint256"}],"name":"SetTaxBracket","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"state","type":"uint256"},{"indexed":true,"internalType":"bool","name":"_isTaxBracketEnabled","type":"bool"},{"indexed":true,"internalType":"uint256","name":"time","type":"uint256"}],"name":"SetTaxBracketFeeMultiplier","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"addy","type":"address"},{"indexed":true,"internalType":"bool","name":"value","type":"bool"}],"name":"SetTotalFeeExempt","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"_wallDivisor","type":"uint256"},{"indexed":true,"internalType":"bool","name":"_isWall","type":"bool"}],"name":"SetWallDivisor","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pair","type":"address"},{"indexed":true,"internalType":"bool","name":"value","type":"bool"}],"name":"SetloopGamesAddresses","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":"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"},{"indexed":false,"internalType":"uint256","name":"amountToGalaxyBond","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"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"}],"name":"TransferOwnerShip","type":"event"},{"inputs":[],"name":"INDEX","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"_disallowedToMove","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"_makerPairs","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_markerPairCount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_partyAddy","type":"address"},{"internalType":"bool","name":"_value","type":"bool"},{"internalType":"uint256","name":"feeAmount","type":"uint256"}],"name":"addPartyAddies","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_subContract","type":"address"},{"internalType":"bool","name":"_value","type":"bool"}],"name":"addSubContracts","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_loopGamesAddy","type":"address"},{"internalType":"bool","name":"_value","type":"bool"}],"name":"addloopGamesAddies","outputs":[],"stateMutability":"nonpayable","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":"uint256","name":"gons","type":"uint256"}],"name":"balanceForGons","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"who","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"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":"convertTo","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"currentIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"epochBuyPressure","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"epochCollectedBuyTax","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"epochCollectedSellTax","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"epochSellPressure","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"galaxyBondReceiver","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"}],"name":"getBalanceContracts","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getCirculatingSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_address","type":"address"}],"name":"getCurrentTaxBracket","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_address","type":"address"}],"name":"getLastPeriodWithdrawals","outputs":[{"internalType":"uint256","name":"totalWithdrawLastHour","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getRewardYield","outputs":[{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getTokensInLPCirculation","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"}],"name":"getUserTotalOnDifferentContractsloop","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"gonsForBalance","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":"init","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"initialDistributionFinished","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"investorInfoMap","outputs":[{"internalType":"uint256","name":"totalInvestableExchanged","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"isBurnEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"isLiquidityEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"isMoveBalance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"isSellHourlyLimit","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"isTaxBracket","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"isTaxBracketEnabledInMoveFee","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"isWall","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"liquidityReceiver","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"loopGamesCheck","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"loopGamesContracts","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"manualRebase","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"manualSwapBack","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"manualSync","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"value","type":"uint256"}],"name":"markerPairAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxBuyTransactionAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxSellTransactionAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_to","type":"address"}],"name":"moveBalance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","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":"oldEpochBuyPressure","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"oldEpochCollectedBuyTax","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"oldEpochCollectedSellTax","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"oldEpochSellPressure","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":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"partyArray","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"partyArrayCheck","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"partyArrayFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"partyTime","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"rebaseEpoch","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"}],"name":"rescueToken","outputs":[{"internalType":"bool","name":"success","type":"bool"}],"stateMutability":"nonpayable","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":[{"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":"bool","name":"_isBurnEnabled","type":"bool"}],"name":"setBurnFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_value","type":"address"}],"name":"setContractToChange","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":"_galaxyBondReceiver","type":"address"}],"name":"setFeeReceivers","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_addr","type":"address"},{"internalType":"bool","name":"_value","type":"bool"},{"internalType":"uint256","name":"_type","type":"uint256"}],"name":"setFeeTypeExempt","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_liquidityFee","type":"uint256"},{"internalType":"uint256","name":"_riskFreeValueFee","type":"uint256"},{"internalType":"uint256","name":"_treasuryFee","type":"uint256"},{"internalType":"uint256","name":"_burnFee","type":"uint256"},{"internalType":"uint256","name":"_buyGalaxyBondFee","type":"uint256"},{"internalType":"uint256","name":"_sellFeeTreasuryAdded","type":"uint256"},{"internalType":"uint256","name":"_sellFeeRFVAdded","type":"uint256"},{"internalType":"uint256","name":"_sellBurnFee","type":"uint256"},{"internalType":"uint256","name":"_sellGalaxyBond","type":"uint256"},{"internalType":"uint256","name":"_realFeePartyArray","type":"uint256"},{"internalType":"bool","name":"_isTaxBracketEnabledInMoveFee","type":"bool"}],"name":"setFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_enabled","type":"bool"}],"name":"setFeesOnNormalTransfers","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_value","type":"bool"}],"name":"setInitialDistributionFinished","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_value","type":"uint256"}],"name":"setInvestRemovalDelay","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_value","type":"bool"}],"name":"setIsLiquidityEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_value","type":"uint256"}],"name":"setMaxInvestRemovablePerPeriod","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_maxSellTxn","type":"uint256"},{"internalType":"uint256","name":"_maxBuyTxn","type":"uint256"}],"name":"setMaxTransactionAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_value","type":"bool"}],"name":"setMoveBalance","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_nextRebase","type":"uint256"}],"name":"setNextRebase","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_value","type":"uint256"}],"name":"setPartyListDivisor","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_value","type":"bool"}],"name":"setPartyTime","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_rebaseFrequency","type":"uint256"}],"name":"setRebaseFrequency","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_rewardYield","type":"uint256"},{"internalType":"uint256","name":"_rewardYieldDenominator","type":"uint256"}],"name":"setRewardYield","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_router","type":"address"},{"internalType":"address","name":"_pair","type":"address"}],"name":"setRouter","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_value","type":"bool"}],"name":"setSellHourlyLimit","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":"_value","type":"uint256"}],"name":"setSwapThreshold","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_taxBracketFeeMultiplier","type":"uint256"},{"internalType":"bool","name":"_isTaxBracketEnabled","type":"bool"}],"name":"setTaxBracketFeeMultiplier","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_wallDivisor","type":"uint256"},{"internalType":"bool","name":"_isWall","type":"bool"}],"name":"setWallDivisor","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_addr","type":"address"},{"internalType":"bool","name":"_value","type":"bool"},{"internalType":"uint256","name":"_type","type":"uint256"}],"name":"setWhitelistSetters","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"subContractCheck","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"subContracts","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","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":"taxBracketMultiplier","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"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":"treasuryReceiver","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"wallDivisor","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"stateMutability":"payable","type":"receive"}]

6080604052600880546001600160701b0319166c01000001000101010000000101179055662386f26fc100006017556000601a819055601b556103e8620000496012600a6200047e565b6200005a90640ba43b740062000493565b6200006890600019620004cb565b6200007690600019620004e2565b620000829190620004fc565b601c55610e10601d556032601e556032601f556101ea602055611c206021556000602255605060235560006024556046602555600060265560006027556954b40b1f852bda00000060285560006029556000602b556000602c556000602d556000602e556969e10de76676d08000006030556969e10de76676d08000006031556362311aa7603255600060335560006034556000603555600060365560006037556032603855602354602954601e546200013d919062000513565b62000149919062000513565b60395560255460265460395462000161919062000513565b6200016d919062000513565b603a556002603b55603c80546001600160a01b031990811673ed4c110730922d2f56fd0040b21822a7e4a0354717909155603d80548216731fdecf89c5c37499d7f68d361e44816cf2655121908117909155603e8054831673f86b1a2a0a1e0d9995f3ad2a26545cc2ab76aa68179055603f80548316909117905560408054909116730d500b1d8e8ef31e21c99d1db9a6444d3adf12701790556a013da329b63364718000006043553480156200022357600080fd5b50604080518082018252600e81526d4c6f6f7065722046696e616e636560901b6020808301918252835180850190945260078452666c6f6f704f4e4560c81b9084015281519192916012916200027d9160009190620002c3565b50815162000293906001906020850190620002c3565b506002805460ff929092166001600160a81b0319909216919091176101003302179055505060016003556200056a565b828054620002d1906200052e565b90600052602060002090601f016020900481019282620002f5576000855562000340565b82601f106200031057805160ff191683800117855562000340565b8280016001018555821562000340579182015b828111156200034057825182559160200191906001019062000323565b506200034e92915062000352565b5090565b5b808211156200034e576000815560010162000353565b634e487b7160e01b600052601160045260246000fd5b600181815b80851115620003c0578160001904821115620003a457620003a462000369565b80851615620003b257918102915b93841c939080029062000384565b509250929050565b600082620003d95750600162000478565b81620003e85750600062000478565b81600181146200040157600281146200040c576200042c565b600191505062000478565b60ff84111562000420576200042062000369565b50506001821b62000478565b5060208310610133831016604e8410600b841016171562000451575081810a62000478565b6200045d83836200037f565b806000190482111562000474576200047462000369565b0290505b92915050565b60006200048c8383620003c8565b9392505050565b6000816000190483118215151615620004b057620004b062000369565b500290565b634e487b7160e01b600052601260045260246000fd5b600082620004dd57620004dd620004b5565b500690565b600082821015620004f757620004f762000369565b500390565b6000826200050e576200050e620004b5565b500490565b6000821982111562000529576200052962000369565b500190565b600181811c908216806200054357607f821691505b6020821081036200056457634e487b7160e01b600052602260045260246000fd5b50919050565b615dd7806200057a6000396000f3fe6080604052600436106106a15760003560e01c806376e90db51161035f578063b62496f5116101d1578063e080680411610102578063f3a54f2c116100a0578063f887ea401161007a578063f887ea40146113cc578063fcf23291146113ec578063ff63f14714611401578063ff8ac17c1461142257600080fd5b8063f3a54f2c1461135f578063f6bbe5161461137f578063f703f36f1461139f57600080fd5b8063e38c484a116100dc578063e38c484a146112e9578063e49c26e314611309578063ef8cc78f14611329578063f2fde38b1461133f57600080fd5b8063e08068041461129e578063e15beb80146112b4578063e1c7392a146112d457600080fd5b8063d1fce2641161016f578063d6737a6e11610149578063d6737a6e14611202578063dcf4242414611222578063dd62ed3e14611242578063deac8ba71461128857600080fd5b8063d1fce26414611186578063d2a66b11146111a8578063d4399790146111c957600080fd5b8063bc7e68a3116101ab578063bc7e68a314611100578063c0da424c14611116578063d088935814611146578063d0d1d3621461116657600080fd5b8063b62496f51461109a578063b7426fb3146110ca578063b9c95f8e146110ea57600080fd5b80639ae7372d116102ab578063a457c2d711610249578063a9059cbb11610223578063a9059cbb14611023578063acd738bc14611043578063ad570c0914611059578063af9b800e1461107957600080fd5b8063a457c2d714610fcd578063a8aa1b3114610fed578063a8bcc98f1461100d57600080fd5b80639d0014b1116102855780639d0014b114610f575780639d9241ec14610f77578063a2b92d5614610f8d578063a3c4e7d314610fad57600080fd5b80639ae7372d14610ef95780639b8d749514610f195780639cf59d7f14610f2f57600080fd5b806380226a12116103185780639079f932116102f25780639079f93214610e835780639481205714610ea457806395d89b4114610ec45780639a7a23d614610ed957600080fd5b806380226a1214610e1f57806383823e1e14610e405780638da5cb5b14610e6057600080fd5b806376e90db514610d5f57806377d9474314610d7f5780637965d56d14610d9f5780637a8ccfd914610dbf5780637d4b501714610ddf5780637ee029c414610dff57600080fd5b8063395093511161051357806359b107b9116104445780636ddd1713116103e2578063716cc280116103bc578063716cc28014610cf4578063727dba5314610d0a578063753d02a114610d2a578063764d72bf14610d3f57600080fd5b80636ddd171314610c9e57806370a0823114610cbf578063715018a614610cdf57600080fd5b80635fdd4ed51161041e5780635fdd4ed514610c4957806361a9d1b114610c5f57806366eb378514610c745780636d351d1a14610c8957600080fd5b806359b107b914610bfd5780635aa821a914610c135780635f2a6d6914610c2957600080fd5b806345b10e12116104b15780634d666ad21161048b5780634d666ad214610b815780634e66160c14610ba15780635569408614610bd157806357b535c014610be757600080fd5b806345b10e1214610b2b578063492b381e14610b4b5780634cd9ddf214610b6157600080fd5b80633c8e556d116104ed5780633c8e556d14610a9b5780633e748a3c14610abb57806341d68b8f14610aeb5780634460d3cf14610b0b57600080fd5b80633950935114610a3a5780633c316fd514610a5a5780633c5c780014610a7b57600080fd5b806315da0148116105ed5780632b112e491161058b578063313ce56711610565578063313ce567146109ab57806335179d6b146109cd5780633643f1d5146109ed578063368743be14610a0d57600080fd5b80632b112e49146109605780632d563bee146109755780632df75cb11461099557600080fd5b806323b872dd116105c757806323b872dd146108eb578063264d26dd1461090b57806326987b601461092b5780632a6ed4881461094057600080fd5b806315da01481461089657806318160ddd146108b65780631bd39674146108cb57600080fd5b806307ebec271161065a5780630978310d116106345780630978310d146108065780630faacfe1146108365780631276089b146108565780631489294a1461087657600080fd5b806307ebec27146107a357806308b1fd8f146107c6578063095ea7b3146107e657600080fd5b8063011bc987146106ad57806301b16827146106cf57806302259e9e146106ef578063031620c81461071857806304a17c5f1461074957806306fdde031461078157600080fd5b366106a857005b600080fd5b3480156106b957600080fd5b506106cd6106c83660046155c9565b611443565b005b3480156106db57600080fd5b506106cd6106ea3660046155e2565b6114eb565b3480156106fb57600080fd5b5061070560315481565b6040519081526020015b60405180910390f35b34801561072457600080fd5b5060085461073990600160401b900460ff1681565b604051901515815260200161070f565b34801561075557600080fd5b50603f54610769906001600160a01b031681565b6040516001600160a01b03909116815260200161070f565b34801561078d57600080fd5b50610796611591565b60405161070f9190615604565b3480156107af57600080fd5b506008546107399065010000000000900460ff1681565b3480156107d257600080fd5b50603d54610769906001600160a01b031681565b3480156107f257600080fd5b50610739610801366004615670565b611623565b34801561081257600080fd5b5061073961082136600461569a565b600f6020526000908152604090205460ff1681565b34801561084257600080fd5b5061070561085136600461569a565b611690565b34801561086257600080fd5b506106cd6108713660046156c3565b611803565b34801561088257600080fd5b50604054610769906001600160a01b031681565b3480156108a257600080fd5b506106cd6108b13660046156e0565b61187d565b3480156108c257600080fd5b50601954610705565b3480156108d757600080fd5b506107056108e63660046155c9565b611a84565b3480156108f757600080fd5b5061073961090636600461571f565b611a94565b34801561091757600080fd5b50603c54610769906001600160a01b031681565b34801561093757600080fd5b50610705611b54565b34801561094c57600080fd5b5061070561095b36600461569a565b611b66565b34801561096c57600080fd5b50610705611b8e565b34801561098157600080fd5b506107696109903660046155c9565b611c53565b3480156109a157600080fd5b50610705602f5481565b3480156109b757600080fd5b5060025460405160ff909116815260200161070f565b3480156109d957600080fd5b506107696109e83660046155c9565b611c7d565b3480156109f957600080fd5b506106cd610a083660046156c3565b611c8d565b348015610a1957600080fd5b50610705610a2836600461569a565b60146020526000908152604090205481565b348015610a4657600080fd5b50610739610a55366004615670565b611d08565b348015610a6657600080fd5b5060085461073990600160601b900460ff1681565b348015610a8757600080fd5b506106cd610a9636600461575b565b611d8e565b348015610aa757600080fd5b506106cd610ab6366004615792565b611fe4565b348015610ac757600080fd5b50610739610ad636600461569a565b60126020526000908152604090205460ff1681565b348015610af757600080fd5b506106cd610b063660046157e6565b612063565b348015610b1757600080fd5b50610739610b2636600461569a565b612147565b348015610b3757600080fd5b506106cd610b46366004615819565b6122aa565b348015610b5757600080fd5b50610705602c5481565b348015610b6d57600080fd5b506106cd610b7c3660046155c9565b612384565b348015610b8d57600080fd5b506106cd610b9c3660046156c3565b612425565b348015610bad57600080fd5b50610739610bbc36600461569a565b60136020526000908152604090205460ff1681565b348015610bdd57600080fd5b5061070560345481565b348015610bf357600080fd5b5061070560375481565b348015610c0957600080fd5b5061070560395481565b348015610c1f57600080fd5b5061070560305481565b348015610c3557600080fd5b506106cd610c4436600461569a565b612506565b348015610c5557600080fd5b5061070560385481565b348015610c6b57600080fd5b506106cd61257d565b348015610c8057600080fd5b506106cd612703565b348015610c9557600080fd5b5061070561273c565b348015610caa57600080fd5b5060085461073990600160681b900460ff1681565b348015610ccb57600080fd5b50610705610cda36600461569a565b61274e565b348015610ceb57600080fd5b506106cd612788565b348015610d0057600080fd5b50610705602a5481565b348015610d1657600080fd5b50610705610d2536600461569a565b612806565b348015610d3657600080fd5b506106cd6128d2565b348015610d4b57600080fd5b506106cd610d5a36600461569a565b612a4e565b348015610d6b57600080fd5b506106cd610d7a3660046155c9565b612af2565b348015610d8b57600080fd5b50610769610d9a3660046155c9565b612b9e565b348015610dab57600080fd5b50610705610dba3660046155c9565b612bce565b348015610dcb57600080fd5b506106cd610dda3660046155c9565b612bde565b348015610deb57600080fd5b50603e54610769906001600160a01b031681565b348015610e0b57600080fd5b506106cd610e1a3660046156e0565b612c80565b348015610e2b57600080fd5b5060085461073990600160381b900460ff1681565b348015610e4c57600080fd5b506106cd610e5b3660046156c3565b612dcc565b348015610e6c57600080fd5b5060025461010090046001600160a01b0316610769565b348015610e8f57600080fd5b50600854610739906301000000900460ff1681565b348015610eb057600080fd5b506106cd610ebf3660046156c3565b612e47565b348015610ed057600080fd5b50610796612ec4565b348015610ee557600080fd5b506106cd610ef436600461575b565b612ed3565b348015610f0557600080fd5b506106cd610f143660046155c9565b61318f565b348015610f2557600080fd5b5061070560335481565b348015610f3b57600080fd5b506022546017546040805192835260208301919091520161070f565b348015610f6357600080fd5b506106cd610f723660046155c9565b613237565b348015610f8357600080fd5b50610705603a5481565b348015610f9957600080fd5b506106cd610fa83660046156c3565b61326b565b348015610fb957600080fd5b50610705610fc836600461569a565b6132e7565b348015610fd957600080fd5b50610739610fe8366004615670565b613342565b348015610ff957600080fd5b50604254610769906001600160a01b031681565b34801561101957600080fd5b50610705603b5481565b34801561102f57600080fd5b5061073961103e366004615670565b613429565b34801561104f57600080fd5b5061070560355481565b34801561106557600080fd5b506106cd611074366004615819565b613468565b34801561108557600080fd5b5060085461073990600160301b900460ff1681565b3480156110a657600080fd5b506107396110b536600461569a565b60106020526000908152604090205460ff1681565b3480156110d657600080fd5b506107396110e536600461569a565b6134e8565b3480156110f657600080fd5b50610705602e5481565b34801561110c57600080fd5b5061070560325481565b34801561112257600080fd5b5061073961113136600461569a565b60116020526000908152604090205460ff1681565b34801561115257600080fd5b506106cd61116136600461583e565b613773565b34801561117257600080fd5b506106cd6111813660046156e0565b61383b565b34801561119257600080fd5b5060085461073990640100000000900460ff1681565b3480156111b457600080fd5b5060085461073990600160501b900460ff1681565b3480156111d557600080fd5b506107396111e436600461569a565b6001600160a01b03166000908152600c602052604090205460ff1690565b34801561120e57600080fd5b5061076961121d3660046155c9565b613a3c565b34801561122e57600080fd5b506106cd61123d3660046155e2565b613a4c565b34801561124e57600080fd5b5061070561125d3660046157e6565b6001600160a01b03918216600090815260156020908152604080832093909416825291909152205490565b34801561129457600080fd5b5061070560365481565b3480156112aa57600080fd5b50610705602d5481565b3480156112c057600080fd5b506106cd6112cf3660046156c3565b613b6a565b3480156112e057600080fd5b506106cd613be5565b3480156112f557600080fd5b506106cd61130436600461575b565b613e36565b34801561131557600080fd5b506106cd611324366004615873565b6140d0565b34801561133557600080fd5b50610705602b5481565b34801561134b57600080fd5b506106cd61135a36600461569a565b614313565b34801561136b57600080fd5b506106cd61137a3660046156c3565b61437f565b34801561138b57600080fd5b5061076961139a3660046155c9565b6143c1565b3480156113ab57600080fd5b506107056113ba36600461569a565b60096020526000908152604090205481565b3480156113d857600080fd5b50604154610769906001600160a01b031681565b3480156113f857600080fd5b506107056143d1565b34801561140d57600080fd5b5060085461073990600160481b900460ff1681565b34801561142e57600080fd5b5060085461073990600160581b900460ff1681565b60025461010090046001600160a01b0316331461147b5760405162461bcd60e51b8152600401611472906158fd565b60405180910390fd5b604b8111156114b85760405162461bcd60e51b81526020600482015260096024820152686d617820706172747960b81b6044820152606401611472565b601f81905560405181907f99595bf6e2815a96807fe941420680afd549926424c257ec2c34de018f2f732290600090a250565b336000908152600e602052604090205460ff1661154a5760405162461bcd60e51b815260206004820152601c60248201527f4e6f7420616c6c6f77656420666f7220726577617264207969656c64000000006044820152606401611472565b602282905560178190556040513381524290829084907f8164f36e13b64f87a896ae3bb092f0ed3ea235f8a9192c6aecb51beabcea10d59060200160405180910390a45050565b6060600080546115a090615920565b80601f01602080910402602001604051908101604052809291908181526020018280546115cc90615920565b80156116195780601f106115ee57610100808354040283529160200191611619565b820191906000526020600020905b8154815290600101906020018083116115fc57829003601f168201915b5050505050905090565b3360008181526015602090815260408083206001600160a01b038716808552925280832085905551919290917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9259061167e9086815260200190565b60405180910390a35060015b92915050565b60008060005b60075481101561174757600781815481106116b3576116b3615954565b600091825260209091200154604051630fb0ab1d60e41b81526001600160a01b0386811660048301529091169063fb0ab1d090602401602060405180830381865afa158015611706573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061172a919061596a565b6117349083615999565b508061173f816159b1565b915050611696565b5060005b6006548110156117fc576006818154811061176857611768615954565b6000918252602090912001546040516370a0823160e01b81526001600160a01b038681166004830152909116906370a0823190602401602060405180830381865afa1580156117bb573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117df919061596a565b6117e99083615999565b50806117f4816159b1565b91505061174b565b5092915050565b60025461010090046001600160a01b031633146118325760405162461bcd60e51b8152600401611472906158fd565b6008805464ff000000001916640100000000831515908102919091179091556040517fadd2ae1e48fad2610e967f44a01d455adca45c693dc959f9a0b5b6f807946f2390600090a250565b60025461010090046001600160a01b031633146118ac5760405162461bcd60e51b8152600401611472906158fd565b80600103611949576001600160a01b0383166000908152600c602052604090205482151560ff9091161515036118f45760405162461bcd60e51b8152600401611472906159ca565b6001600160a01b0383166000818152600c6020526040808220805460ff191686151590811790915590519092917f507b98c4fc0974cbaaade1c558d03191b924272e491fc34c645965b5c75420fa91a3505050565b806002036119e6576001600160a01b0383166000908152600a602052604090205482151560ff9091161515036119915760405162461bcd60e51b8152600401611472906159ca565b6001600160a01b0383166000818152600a6020526040808220805460ff191686151590811790915590519092917f89e1f304a67b18800fe8e70e1be2fe04d7c4fd682d71141198828c143c41d9b891a3505050565b80600303611a7f576001600160a01b0383166000908152600b602052604090205482151560ff909116151503611a2e5760405162461bcd60e51b8152600401611472906159ca565b6001600160a01b0383166000818152600b6020526040808220805460ff191686151590811790915590519092917fd73ba49bcc1c8c1e82b426c44467e431a9247b79f9528fac3ab2847c3202b98391a35b505050565b60006018548261168a91906159ef565b6000826001600160a01b038116611abd5760405162461bcd60e51b815260040161147290615a0e565b6001600160a01b038516600090815260156020908152604080832033845290915290205460001914611b3d576001600160a01b0385166000908152601560209081526040808320338452909152902054611b18908490615a3e565b6001600160a01b03861660009081526015602090815260408083203384529091529020555b611b4885858561442f565b50600195945050505050565b6000611b61602f54612bce565b905090565b600080611b728361274e565b9050611b7d83611690565b611b879082615999565b9392505050565b601854603d546001600160a01b03166000908152601660205260408120547f0263c2b778d062355049effc2dece97bc6547ff8a88a3258daa512061c2153dd5461dead83527f290d80ce586bfe95e1ebf348e3ba109df813891ad867417e64d38c5a50473b5754929392611c046012600a615b39565b611c1390640ba43b74006159ef565b611c1f90600019615b5b565b611c2b90600019615a3e565b611c359190615a3e565b611c3f9190615a3e565b611c499190615a3e565b611b619190615b6f565b60068181548110611c6357600080fd5b6000918252602090912001546001600160a01b0316905081565b60058181548110611c6357600080fd5b60025461010090046001600160a01b03163314611cbc5760405162461bcd60e51b8152600401611472906158fd565b6008805466ff0000000000001916600160301b831515908102919091179091556040517f7155abe5d76e40e32b68c168e9dde4055d00e1ffdb30d0e6d265622716a1d92390600090a250565b3360009081526015602090815260408083206001600160a01b0386168452909152812054611d37908390615a3e565b3360008181526015602090815260408083206001600160a01b038916808552908352928190208590555193845290927f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910161167e565b60025461010090046001600160a01b03163314611dbd5760405162461bcd60e51b8152600401611472906158fd565b6001600160a01b03821660009081526013602052604090205481151560ff909116151503611e215760405162461bcd60e51b815260206004820152601160248201527015985b1d5948185b1c9958591e481cd95d607a1b6044820152606401611472565b6001600160a01b0382166000908152601360205260409020805460ff19168215801591909117909155611e9e57600780546001810182556000919091527fa66cc928b5edb82af9bd49922954155ab7b0942694bea4ce44661d9a8736c6880180546001600160a01b0319166001600160a01b038416179055611fa8565b60005b600754811015611fa657826001600160a01b031660078281548110611ec857611ec8615954565b6000918252602090912001546001600160a01b031603611f945760078054611ef290600190615a3e565b81548110611f0257611f02615954565b600091825260209091200154600780546001600160a01b039092169183908110611f2e57611f2e615954565b9060005260206000200160006101000a8154816001600160a01b0302191690836001600160a01b031602179055506007805480611f6d57611f6d615b83565b600082815260209020810160001990810180546001600160a01b0319169055019055611fa6565b80611f9e816159b1565b915050611ea1565b505b604051811515906001600160a01b038416907f8f1936ddb0e6b394e1edf1ac695592d1a059eecc4786f7083e71b11ec945e7ca90600090a35050565b60025461010090046001600160a01b031633146120135760405162461bcd60e51b8152600401611472906158fd565b603c80546001600160a01b039586166001600160a01b031991821617909155603d805494861694821694909417909355603e805492851692841692909217909155603f8054919093169116179055565b60025461010090046001600160a01b031633146120925760405162461bcd60e51b8152600401611472906158fd565b604180546001600160a01b03199081166001600160a01b03858116918217909355604280549092168484161782553060008181526015602090815260408083209483529390528281206000199081905591815282812082905583548516815291909120555461210391166001612ed3565b806001600160a01b0316826001600160a01b03167f50bfd9c0b9815c386500292d8de123643c6c935ffd384a364381b3b11e281e5c60405160405180910390a35050565b60025460009061010090046001600160a01b031633146121795760405162461bcd60e51b8152600401611472906158fd565b6040516370a0823160e01b81523060048201526000906001600160a01b038416906370a0823190602401602060405180830381865afa1580156121c0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906121e4919061596a565b905080336001600160a01b0316846001600160a01b03167fed3c8f48a6c3247e7a68382e752734feed4bf63004c064208e3117e35097dabb4260405161222c91815260200190565b60405180910390a460405163a9059cbb60e01b8152336004820152602481018290526001600160a01b0384169063a9059cbb906044016020604051808303816000875af1158015612281573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611b879190615b99565b919050565b60025461010090046001600160a01b031633146122d95760405162461bcd60e51b8152600401611472906158fd565b603282111561232a5760405162461bcd60e51b815260206004820152601860248201527f6d617820627261636b65742066656520657863656564656400000000000000006044820152606401611472565b60388290556008805469ff0000000000000000001916600160481b8315159081029190911790915560405142919084907f0d9ee6cc1c2d2a5825fe816f3cfc6ab44f33303930004a3e26a3259616c9add890600090a45050565b60025461010090046001600160a01b031633146123b35760405162461bcd60e51b8152600401611472906158fd565b6107088111156123f05760405162461bcd60e51b81526020600482015260086024820152670a8dede40d0d2ced60c31b6044820152606401611472565b6021819055604051429082907f9147f2d3ae1a14e9012c81c143c7c834a15f3afffcd29d3b35631aa0a3b0093e90600090a350565b60025461010090046001600160a01b031633146124545760405162461bcd60e51b8152600401611472906158fd565b801515600860059054906101000a900460ff161515036124b65760405162461bcd60e51b815260206004820152601c60248201527f4275726e2066756e6374696f6e206861736e2774206368616e676564000000006044820152606401611472565b6008805465ff0000000000191665010000000000831515908102919091179091556040514291907f5fae21b30f26eaaf4f039e77ecd02610468d0745d882434a2174baae8747605290600090a350565b60025461010090046001600160a01b031633146125355760405162461bcd60e51b8152600401611472906158fd565b604080546001600160a01b0319166001600160a01b038316908117825590517faab8973b5857f63f79e83682350a71c735f612a5f7620d42d249227023f9525490600090a250565b6002600354036125cf5760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c006044820152606401611472565b6002600355336000908152600d602052604090205460ff166126245760405162461bcd60e51b815260206004820152600e60248201526d63616e206e6f742072656261736560901b6044820152606401611472565b60445460ff16156126635760405162461bcd60e51b81526020600482015260096024820152682a393c9030b3b0b4b760b91b6044820152606401611472565b4260325411156126a35760405162461bcd60e51b815260206004820152600b60248201526a4e6f7420696e2074696d6560a81b6044820152606401611472565b6000805b6017546022546019546126ba91906159ef565b6126c49190615b6f565b91506126cf82614a64565b50806126da81615bb6565b915050426032541080156126ee5750606481125b6126a7576126fa6128d2565b50506001600355565b60025461010090046001600160a01b031633146127325760405162461bcd60e51b8152600401611472906158fd565b61273a614bd3565b565b6000601854601c54611b619190615b6f565b600060185460000361276257506000919050565b6018546001600160a01b03831660009081526016602052604090205461168a9190615b6f565b60025461010090046001600160a01b031633146127b75760405162461bcd60e51b8152600401611472906158fd565b6002546040516101009091046001600160a01b0316907ff8df31144d9c2f0f6b59d69b8b98abd5459d07f2742c4df920b25aae33c6482090600090a260028054610100600160a81b0319169055565b6001600160a01b038116600090815260096020526040812060018101825b81548110156128ca57600082828154811061284157612841615954565b9060005260206000209060020201604051806040016040529081600082015481526020016001820154815250509050601d544261287e9190615a3e565b8151106128b75782828154811061289757612897615954565b906000526020600020906002020160010154856128b49190615999565b94505b50806128c2816159b1565b915050612824565b505050919050565b60005b600454811015612a4b57600481815481106128f2576128f2615954565b60009182526020822001546040805160016209351760e01b0319815290516001600160a01b039092169263fff6cae99260048084019382900301818387803b15801561293d57600080fd5b505af192505050801561294e575060015b612a395761295a615bce565b806308c379a003612a2d575061296e615c25565b806129795750612a2f565b7f6bb22edb6252e9e04a83e4886d28bc5662efe624ec664e2d0e4b38854c3c23836040516129e89060208082526027908201527f6d616e75616c53796e6328293a205f6d616b657250616972732e73796e6328296040820152660811985a5b195960ca1b606082015260800190565b60405180910390a17f6bb22edb6252e9e04a83e4886d28bc5662efe624ec664e2d0e4b38854c3c238381604051612a1f9190615604565b60405180910390a150612a39565b505b3d6000803e3d6000fd5b80612a43816159b1565b9150506128d5565b50565b60025461010090046001600160a01b03163314612a7d5760405162461bcd60e51b8152600401611472906158fd565b60405147906001600160a01b0383169082156108fc029083906000818181858888f19350505050158015612ab5573d6000803e3d6000fd5b5042826001600160a01b0316827f764ac18b38788ceb5d273876574dd816d95e562605c44e30f5638e7f92ceef8860405160405180910390a45050565b60025461010090046001600160a01b03163314612b215760405162461bcd60e51b8152600401611472906158fd565b6a013da329b63364718000008111612b6b5760405162461bcd60e51b815260206004820152600d60248201526c42656c6f77206d696e696d756d60981b6044820152606401611472565b604381905560405181907f3e2b28733d83c500897cb5d9f71e9286f059e81ba4ba63584b43a9278879ca4790600090a250565b600060048281548110612bb357612bb3615954565b6000918252602090912001546001600160a01b031692915050565b60006018548261168a9190615b6f565b60025461010090046001600160a01b03163314612c0d5760405162461bcd60e51b8152600401611472906158fd565b611c208110612c4d5760405162461bcd60e51b815260206004820152600c60248201526b6f766572203220686f75727360a01b6044820152606401611472565b601d81905560405181907f5c630b842a78838557c54c519fb3fb1eedc9157777ef4e42388dcbf5dd1f80b390600090a250565b60025461010090046001600160a01b03163314612caf5760405162461bcd60e51b8152600401611472906158fd565b80600103612d20576001600160a01b0383166000908152600d602052604090205482151560ff909116151503612cf75760405162461bcd60e51b8152600401611472906159ca565b6001600160a01b0383166000908152600d60205260409020805460ff1916831515179055612d8d565b80600203612d8d576001600160a01b0383166000908152600e602052604090205482151560ff909116151503612d685760405162461bcd60e51b8152600401611472906159ca565b6001600160a01b0383166000908152600e60205260409020805460ff19168315151790555b80821515846001600160a01b03167f94c0aba5d4b641cd28ff4ae32d7c716fd7a3fee1a1b98e6f4d81bad3256ab2be60405160405180910390a4505050565b60025461010090046001600160a01b03163314612dfb5760405162461bcd60e51b8152600401611472906158fd565b6008805460ff60601b1916600160601b831515908102919091179091556040514291907f6e78862f553225378cfb6846053b9a466b9a47afcc225a2a3263ea536d991e4090600090a350565b60025461010090046001600160a01b03163314612e765760405162461bcd60e51b8152600401611472906158fd565b6008805468ff00000000000000001916600160401b831515908102919091179091556040517f10b5d8d4b73da981d3f4003317acb1c94eb8ecc35278cbb931228c3b3032dbae90600090a250565b6060600180546115a090615920565b60025461010090046001600160a01b03163314612f025760405162461bcd60e51b8152600401611472906158fd565b6001600160a01b03821660009081526010602052604090205481151560ff909116151503612f605760405162461bcd60e51b815260206004820152600b60248201526a185b1c9958591e481cd95d60aa1b6044820152606401611472565b6001600160a01b0382166000908152601060205260409020805460ff19168215801591909117909155612fef576004805460018101825560009182527f8a35acfbc15ff81a39ae7d344fd709f28e8600b4aa8c65c6b64bfe7fe36bd19b0180546001600160a01b0319166001600160a01b038516179055602a805491612fe5836159b1565b9190505550613153565b6004546001106130335760405162461bcd60e51b815260206004820152600f60248201526e2932b8bab4b932b21018903830b4b960891b6044820152606401611472565b60005b60045481101561315157826001600160a01b03166004828154811061305d5761305d615954565b6000918252602090912001546001600160a01b03160361313f576004805461308790600190615a3e565b8154811061309757613097615954565b600091825260209091200154600480546001600160a01b0390921691839081106130c3576130c3615954565b9060005260206000200160006101000a8154816001600160a01b0302191690836001600160a01b03160217905550600480548061310257613102615b83565b600082815260208120820160001990810180546001600160a01b0319169055909101909155602a80549161313583615caf565b9190505550613151565b80613149816159b1565b915050613036565b505b604051811515906001600160a01b038416907fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab90600090a35050565b60025461010090046001600160a01b031633146131be5760405162461bcd60e51b8152600401611472906158fd565b4281116132025760405162461bcd60e51b815260206004820152601260248201527118d85b881b9bdd081899481a5b881c185cdd60721b6044820152606401611472565b6032819055604051429082907f3a97bbcdf9724661e5a691bf707b0b97b7fb6814227e9ee3253016b1198e32e790600090a350565b60025461010090046001600160a01b031633146132665760405162461bcd60e51b8152600401611472906158fd565b602855565b60025461010090046001600160a01b0316331461329a5760405162461bcd60e51b8152600401611472906158fd565b6008805467ff000000000000001916600160381b831515908102919091179091556040517f5a0f55ed896b3fb4c4609bd54602a6dc0d5b4fbb710e0a47566ae502d7d79f7490600090a250565b6000806132f383611b66565b905060006132ff6143d1565b61330a8360646159ef565b6133149190615b6f565b90506000600a821061332757600a613329565b815b90506038548161333991906159ef565b95945050505050565b3360009081526015602090815260408083206001600160a01b0386168452909152812054808310613396573360009081526015602090815260408083206001600160a01b03881684529091528120556133c5565b6133a08382615a3e565b3360009081526015602090815260408083206001600160a01b03891684529091529020555b3360008181526015602090815260408083206001600160a01b038916808552908352928190205490519081529192917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a35060019392505050565b6000826001600160a01b0381166134525760405162461bcd60e51b815260040161147290615a0e565b61345d33858561442f565b506001949350505050565b60025461010090046001600160a01b031633146134975760405162461bcd60e51b8152600401611472906158fd565b603b8290556008805460ff60581b1916600160581b8315159081029190911790915560405183907f10145d369bab6fd20cd4cd57ed0fa0d6ebb131e9bb44c901ef1796cb333be7db90600090a35050565b6000816001600160a01b0381166135115760405162461bcd60e51b815260040161147290615a0e565b600854600160381b900460ff166135595760405162461bcd60e51b815260206004820152600c60248201526b63616e206e6f74206d6f766560a01b6044820152606401611472565b600854640100000000900460ff1661359f5760405162461bcd60e51b81526020600482015260096024820152682a3930b2329037b33360b91b6044820152606401611472565b336000908152600f602052604090205460ff16156135ed5760405162461bcd60e51b815260206004820152600b60248201526a1b9bdd08185b1b1bddd95960aa1b6044820152606401611472565b60006135f83361274e565b116136315760405162461bcd60e51b81526020600482015260096024820152684e6f20746f6b656e7360b81b6044820152606401611472565b600061363c33611690565b9050801561367d5760405162461bcd60e51b815260206004820152600e60248201526d6f746865722062616c616e63657360901b6044820152606401611472565b336000908152600f60209081526040808320805460ff1916600117905560169091529020546136ac8180615a3e565b33600090815260166020526040808220929092556001600160a01b038716815220546136d9908290615999565b6001600160a01b0386166000818152601660205260409020919091556018543390600080516020615d82833981519152906137149085615b6f565b60405190815260200160405180910390a3604080513381526001600160a01b03871660208201527fb26ec1d3e73f558763eaa40e4dce759ce985575e28d56966bb2092847a786c74910160405180910390a16001935050505b50919050565b60025461010090046001600160a01b031633146137a25760405162461bcd60e51b8152600401611472906158fd565b6008805460ff60681b1916600160681b8515150217905580826137c76012600a615b39565b6137d690640ba43b74006159ef565b6137e290600019615b5b565b6137ee90600019615a3e565b6137f891906159ef565b6138029190615b6f565b601c5560405181908390851515907f512cfe1aedabdc06d12a680ace7434d88a9532c8853515536842f5ff52cbe55a90600090a4505050565b60025461010090046001600160a01b0316331461386a5760405162461bcd60e51b8152600401611472906158fd565b6001600160a01b0383166000908152601160209081526040808320805460ff1916861580159190911790915560149092529091208290556138f557600580546001810182556000919091527f036b6384b5eca791c62761152d0c79bb0604c104a5fb6f4eb0703f3154bb3db00180546001600160a01b0319166001600160a01b0385161790556139ff565b60005b6005548110156139fd57836001600160a01b03166005828154811061391f5761391f615954565b6000918252602090912001546001600160a01b0316036139eb576005805461394990600190615a3e565b8154811061395957613959615954565b600091825260209091200154600580546001600160a01b03909216918390811061398557613985615954565b9060005260206000200160006101000a8154816001600160a01b0302191690836001600160a01b0316021790555060058054806139c4576139c4615b83565b600082815260209020810160001990810180546001600160a01b03191690550190556139fd565b806139f5816159b1565b9150506138f8565b505b604051821515906001600160a01b038516907f6b76292a2c57cfaa171cd21b53bac8a6a622da6e9c08b9f63a79a50275ff538990600090a3505050565b60048181548110611c6357600080fd5b60025461010090046001600160a01b03163314613a7b5760405162461bcd60e51b8152600401611472906158fd565b6969e10de76676d08000008211613ad45760405162461bcd60e51b815260206004820152601960248201527f42656c6f77206d696e696d756d2073656c6c20616d6f756e74000000000000006044820152606401611472565b6969e10de76676d08000008111613b2d5760405162461bcd60e51b815260206004820152601860248201527f42656c6f77206d696e696d756d2062757920616d6f756e7400000000000000006044820152606401611472565b603182905560308190556040514290829084907f25a1f4940c045b289fe17c2a70381f78360db0e2ad0993cd1f3ffd04d120ad5290600090a45050565b60025461010090046001600160a01b03163314613b995760405162461bcd60e51b8152600401611472906158fd565b6008805463ff00000019166301000000831515908102919091179091556040514291907f832ed7895e341f17afc036cc051864a91809bb5c898a2d5645323b97b6925ec990600090a350565b60025461010090046001600160a01b03163314613c145760405162461bcd60e51b8152600401611472906158fd565b60085462010000900460ff1615613c635760405162461bcd60e51b8152602060048201526013602482015272105b1c9958591e481a5b9a5d1a585b1a5e9959606a1b6044820152606401611472565b604180546001600160a01b03191673a5e0829caced8ffdd4de3c43696c57f7d7a678ff908117909155306000818152601560209081526040808320948352939052828120600019908190559181529190912055613cc26012600a615b39565b613cd190640ba43b74006159ef565b601955613ce06012600a615b39565b613cef90640ba43b74006159ef565b613cfb90600019615b5b565b613d0790600019615a3e565b33600090815260166020526040902055601954613d266012600a615b39565b613d3590640ba43b74006159ef565b613d4190600019615b5b565b613d4d90600019615a3e565b613d579190615b6f565b601855603d546001600160a01b039081166000908152600c60205260408082208054600160ff199182168117909255603e54851684528284208054821683179055603f5490941683528183208054851682179055308352818320805485168217905533835291208054909216179055613dd7670de0b6b3a7640000611a84565b602f55613de633600180612c80565b613df33360016002612c80565b6008805462ff00001916620100001790556019546040513391600091600080516020615d8283398151915291613e2c9190815260200190565b60405180910390a3565b60025461010090046001600160a01b03163314613e655760405162461bcd60e51b8152600401611472906158fd565b6001600160a01b03821660009081526012602052604090205481151560ff909116151503613ec95760405162461bcd60e51b815260206004820152601160248201527015985b1d5948185b1c9958591e481cd95d607a1b6044820152606401611472565b6001600160a01b0382166000908152601260205260409020805460ff19168215801591909117909155613f4657600680546001810182556000919091527ff652222313e28459528d920b65115c16c04f3efc82aaedc97be59f3f377c0d3f0180546001600160a01b0319166001600160a01b038416179055614094565b600654600110613f8a5760405162461bcd60e51b815260206004820152600f60248201526e2932b8bab4b932b21018903830b4b960891b6044820152606401611472565b60005b60065481101561409257826001600160a01b031660068281548110613fb457613fb4615954565b6000918252602090912001546001600160a01b0316036140805760068054613fde90600190615a3e565b81548110613fee57613fee615954565b600091825260209091200154600680546001600160a01b03909216918390811061401a5761401a615954565b9060005260206000200160006101000a8154816001600160a01b0302191690836001600160a01b03160217905550600680548061405957614059615b83565b600082815260209020810160001990810180546001600160a01b0319169055019055614092565b8061408a816159b1565b915050613f8d565b505b604051811515906001600160a01b038416907fee2393666f8c8e85c7620b1b0fb0b578b424a01b40bd379a46dc1b102f68b74990600090a35050565b60025461010090046001600160a01b031633146140ff5760405162461bcd60e51b8152600401611472906158fd565b8a601e819055508960238190555088602981905550856026819055508460258190555086601b8190555087601a819055508360248190555082602781905550816020819055506000602354601b54601a54602954601e546141609190615999565b61416a9190615999565b6141749190615999565b61417e9190615999565b90506000602754602454602554602654856141999190615999565b6141a39190615999565b6141ad9190615999565b6141b79190615999565b905060fa82106141f85760405162461bcd60e51b815260206004820152600c60248201526b6d617820627579206665657360a01b6044820152606401611472565b60fa81106142385760405162461bcd60e51b815260206004820152600d60248201526c6d61782073656c6c206665657360981b6044820152606401611472565b6101eb6020541061427c5760405162461bcd60e51b815260206004820152600e60248201526d6d6178207061727479206665657360901b6044820152606401611472565b6039829055603a8190556008805460ff60501b1916600160501b85151590810291909117909155602454604080518b8152602081018b90529081018d905260608101919091526080810184905260a08101919091528b908d908f907f36595b1e2bf5f63c84d6962205722de0133c54fdd79516c6f3741aba06ee7d969060c00160405180910390a450505050505050505050505050565b60025461010090046001600160a01b031633146143425760405162461bcd60e51b8152600401611472906158fd565b6040516001600160a01b038216907fb1eb34684306bcea7f9ed508931dc13b5993c8fdd00fe65c2e4680ae2610a70190600090a2612a4b81615026565b60025461010090046001600160a01b031633146143ae5760405162461bcd60e51b8152600401611472906158fd565b6008805460ff1916911515919091179055565b60078181548110611c6357600080fd5b60008060005b60045481101561376d57614411600482815481106143f7576143f7615954565b6000918252602090912001546001600160a01b031661274e565b61441b9083615999565b915080614427816159b1565b9150506143d7565b6001600160a01b0383166000908152600c6020526040812054819060ff168061447057506001600160a01b0384166000908152600c602052604090205460ff165b600854909150640100000000900460ff16806144895750805b6144c15760405162461bcd60e51b81526020600482015260096024820152682a3930b2329037b33360b91b6044820152606401611472565b6001600160a01b03841660009081526010602052604090205460ff1680156144e7575080155b1561452e5760315483111561452e5760405162461bcd60e51b815260206004820152600d60248201526c151bdbc81b5d58da081cd95b1b609a1b6044820152606401611472565b6001600160a01b03851660009081526010602052604090205460ff168061456d57506001600160a01b03841660009081526010602052604090205460ff165b156145aa57600854610100900460ff161561459a5761458a6128d2565b6008805461ff00191690556145aa565b6008805461ff0019166101001790555b6001600160a01b03841660009081526010602052604090205460ff1680156145d0575080155b80156145f457506001600160a01b03851660009081526011602052604090205460ff165b80156146095750600854600160601b900460ff165b1561465957601f5460315461461e9190615b6f565b8311156146595760405162461bcd60e51b81526020600482015260096024820152683830b93a3c903234bb60b91b6044820152606401611472565b6001600160a01b03851660009081526010602052604090205460ff16801561467f575080155b156146c5576030548311156146c55760405162461bcd60e51b815260206004820152600c60248201526b746f6f206d7563682062757960a01b6044820152606401611472565b6001600160a01b03841660009081526010602052604090205460ff1680156146eb575080155b80156147005750600854600160401b900460ff165b156147b6576001600160a01b038516600090815260096020526040812090600182019061472c88612806565b6043546147399190615a3e565b90508086111561477a5760405162461bcd60e51b815260206004820152600c60248201526b6d617820776974686472617760a01b6044820152606401611472565b50604080518082019091524281526020808201878152835460018181018655600095865292909420925160029094029092019283559051910155505b60445460ff16156147d4576147cc8585856150d8565b915050611b87565b6000601854846147e491906159ef565b90506147ee615195565b156147fb576147fb614bd3565b6000614807878761521d565b614811578161481c565b61481c8787846152c2565b6001600160a01b038816600090815260166020526040902054909150614843908390615a3e565b6001600160a01b038089166000908152601660205260408082209390935590881681522054614873908290615999565b6001600160a01b03871660009081526016602052604090205560325442101580156148a757506008546301000000900460ff165b80156148cc57506001600160a01b03871660009081526010602052604090205460ff16155b80156148f157506001600160a01b03861660009081526010602052604090205460ff16155b1561492c576148fe615527565b6149066128d2565b61492c602b8054603355602c54603455600090819055602e8054603655602d5460355555565b6001600160a01b03871660009081526010602052604090205460ff16156149a35760185461495a9083615b6f565b602b600082825461496b9190615999565b909155505060185461497d9082615b6f565b6149879083615a3e565b602c60008282546149989190615999565b90915550614a159050565b6001600160a01b03861660009081526010602052604090205460ff1615614a15576018546149d19083615b6f565b602e60008282546149e29190615999565b90915550506018546149f49082615b6f565b6149fe9083615a3e565b602d6000828254614a0f9190615999565b90915550505b856001600160a01b0316876001600160a01b0316600080516020615d8283398151915260185484614a469190615b6f565b60405190815260200160405180910390a35060019695505050505050565b6000426032541115614aab5760405162461bcd60e51b815260206004820152601060248201526f72656261736520746f6f206561726c7960801b6044820152606401611472565b6032546000839003614afd57807f72725a3b1e5bd622d6bcd1339bb31279c351abe8f541ac7fd320f24e1b1641f2601954604051614aeb91815260200190565b60405180910390a25050601954919050565b6000831215614b2457614b0f83615cc6565b601954614b1c9190615a3e565b601955614b36565b82601954614b329190615999565b6019555b6019546001600160801b031015614b53576001600160801b036019555b601954614b626012600a615b39565b614b7190640ba43b74006159ef565b614b7d90600019615b5b565b614b8990600019615a3e565b614b939190615b6f565b601855614b9f8161558e565b807f72725a3b1e5bd622d6bcd1339bb31279c351abe8f541ac7fd320f24e1b1641f2601954604051614aeb91815260200190565b6044805460ff19166001179055600854600090600160301b900460ff16614bfb576000614bff565b601e545b90506000603a54603954614c139190615999565b90506000614c203061274e565b90506000479050600083602454601a54614c3a9190615999565b614c4490856159ef565b614c4e9190615b6f565b9050614c59816155bc565b6000600285614c6888876159ef565b614c729190615b6f565b614c7c9190615b6f565b9050600082614c8b8387615a3e565b614c959190615a3e565b60408051600280825260608201835292935060009290916020830190803683370190505090503081600081518110614ccf57614ccf615954565b6001600160a01b039283166020918202929092010152604054825191169082906001908110614d0057614d00615954565b6001600160a01b03928316602091820292909201015260415460405163791ac94760e01b815291169063791ac94790614d46908590600090869030904290600401615ce2565b600060405180830381600087803b158015614d6057600080fd5b505af1158015614d74573d6000803e3d6000fd5b5050505060008547614d869190615a3e565b90506000602454601a54614d9a9190615999565b614da560028c615b6f565b614daf908b615a3e565b614db99190615a3e565b90506000600282614dca8d866159ef565b614dd49190615b6f565b614dde9190615b6f565b9050600082602554602354614df39190615999565b614dfd90866159ef565b614e079190615b6f565b9050600083602754601b54614e1c9190615999565b614e2690876159ef565b614e309190615b6f565b905060008183614e408689615a3e565b614e4a9190615a3e565b614e549190615a3e565b603d546040519192506000916001600160a01b039091169061753090849084818181858888f193505050503d8060008114614eab576040519150601f19603f3d011682016040523d82523d6000602084013e614eb0565b606091505b5050603e546040519192506001600160a01b0316906175309086906000818181858888f193505050503d8060008114614f05576040519150601f19603f3d011682016040523d82523d6000602084013e614f0a565b606091505b5050603f546040519192506001600160a01b0316906175309085906000818181858888f193505050503d8060008114614f5f576040519150601f19603f3d011682016040523d82523d6000602084013e614f64565b606091505b5060009250508a15905061500b57604154603c5460405163f305d71960e01b8152306004820152602481018d905260006044820181905260648201526001600160a01b0391821660848201524260a482015291169063f305d71990879060c40160606040518083038185885af1158015614fe2573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906150079190615d53565b5050505b50506044805460ff1916905550505050505050505050505050565b6001600160a01b0381166150715760405162461bcd60e51b815260206004820152601260248201527104f776e65722063616e206e6f7420626520360741b6044820152606401611472565b6002546040516001600160a01b0380841692610100900416907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3600280546001600160a01b0390921661010002610100600160a81b0319909216919091179055565b600080601854836150e991906159ef565b6001600160a01b038616600090815260166020526040902054909150615110908290615a3e565b6001600160a01b038087166000908152601660205260408082209390935590861681522054615140908290615999565b6001600160a01b038086166000818152601660205260409081902093909355915190871690600080516020615d82833981519152906151829087815260200190565b60405180910390a3506001949350505050565b3360009081526010602052604081205460ff161580156151b8575060445460ff16155b80156151c657506000602854115b80156151db5750600854600160681b900460ff165b80156151f657506000603a546039546151f49190615999565b115b8015611b615750601854601c5461520d9190615b6f565b6152163061274e565b1015905090565b6001600160a01b0382166000908152600c602052604081205460ff168061525c57506001600160a01b0382166000908152600c602052604090205460ff165b156152695750600061168a565b60085460ff161561527c5750600161168a565b6001600160a01b03831660009081526010602052604090205460ff16806152bb57506001600160a01b03821660009081526010602052604090205460ff165b905061168a565b60395460085460009190600160581b900460ff16156152ee57603b546039546152eb9190615b6f565b90505b6001600160a01b0385166000908152600a602052604090205460ff1615615313575060005b6001600160a01b03841660009081526010602052604090205460ff16156153ce5750603a546001600160a01b03851660009081526011602052604090205460ff1680156153695750600854600160601b900460ff165b156153a9576001600160a01b0385166000908152601460205260409020548110156153a957506001600160a01b0384166000908152601460205260409020545b6001600160a01b0385166000908152600b602052604090205460ff16156153ce575060005b6001600160a01b03851660009081526010602052604090205460ff1661549057600854600160481b900460ff161561549057600061540b866132e7565b9050801561548e5760056154208260046159ef565b61542a9190615b6f565b6154349083615999565b60085490925065010000000000900460ff161561548e576000615458600583615b6f565b905060006103e861546983886159ef565b6154739190615b6f565b905061548b601854826154869190615b6f565b6155bc565b50505b505b60006103e861549f83866159ef565b6154a99190615b6f565b306000908152601660205260409020549091506154c7908290615999565b306000818152601660205260409020919091556018546001600160a01b03881690600080516020615d82833981519152906155029085615b6f565b60405190815260200160405180910390a361551d8185615a3e565b9695505050505050565b604454600090819060ff1661558a575b60175460225460195461554a91906159ef565b6155549190615b6f565b915061555f82614a64565b508061556a81615bb6565b9150504260325410801561557e5750606481125b6155375761558a6128d2565b5050565b60215461559b9082615999565b6032819055506001603760008282546155b49190615999565b909155505050565b61558a3061dead8361442f565b6000602082840312156155db57600080fd5b5035919050565b600080604083850312156155f557600080fd5b50508035926020909101359150565b600060208083528351808285015260005b8181101561563157858101830151858201604001528201615615565b81811115615643576000604083870101525b50601f01601f1916929092016040019392505050565b80356001600160a01b03811681146122a557600080fd5b6000806040838503121561568357600080fd5b61568c83615659565b946020939093013593505050565b6000602082840312156156ac57600080fd5b611b8782615659565b8015158114612a4b57600080fd5b6000602082840312156156d557600080fd5b8135611b87816156b5565b6000806000606084860312156156f557600080fd5b6156fe84615659565b9250602084013561570e816156b5565b929592945050506040919091013590565b60008060006060848603121561573457600080fd5b61573d84615659565b925061574b60208501615659565b9150604084013590509250925092565b6000806040838503121561576e57600080fd5b61577783615659565b91506020830135615787816156b5565b809150509250929050565b600080600080608085870312156157a857600080fd5b6157b185615659565b93506157bf60208601615659565b92506157cd60408601615659565b91506157db60608601615659565b905092959194509250565b600080604083850312156157f957600080fd5b61580283615659565b915061581060208401615659565b90509250929050565b6000806040838503121561582c57600080fd5b823591506020830135615787816156b5565b60008060006060848603121561585357600080fd5b833561585e816156b5565b95602085013595506040909401359392505050565b60008060008060008060008060008060006101608c8e03121561589557600080fd5b8b359a5060208c0135995060408c0135985060608c0135975060808c0135965060a08c0135955060c08c0135945060e08c013593506101008c013592506101208c013591506101408c01356158e9816156b5565b809150509295989b509295989b9093969950565b6020808252600990820152682737ba1037bbb732b960b91b604082015260600190565b600181811c9082168061593457607f821691505b60208210810361376d57634e487b7160e01b600052602260045260246000fd5b634e487b7160e01b600052603260045260246000fd5b60006020828403121561597c57600080fd5b5051919050565b634e487b7160e01b600052601160045260246000fd5b600082198211156159ac576159ac615983565b500190565b6000600182016159c3576159c3615983565b5060010190565b6020808252600b908201526a139bdd0818da185b99d95960aa1b604082015260600190565b6000816000190483118215151615615a0957615a09615983565b500290565b6020808252601690820152751c9958da5c1a595b9d081a5cc81b9bdd081d985b1a5960521b604082015260600190565b600082821015615a5057615a50615983565b500390565b600181815b80851115615a90578160001904821115615a7657615a76615983565b80851615615a8357918102915b93841c9390800290615a5a565b509250929050565b600082615aa75750600161168a565b81615ab45750600061168a565b8160018114615aca5760028114615ad457615af0565b600191505061168a565b60ff841115615ae557615ae5615983565b50506001821b61168a565b5060208310610133831016604e8410600b8410161715615b13575081810a61168a565b615b1d8383615a55565b8060001904821115615b3157615b31615983565b029392505050565b6000611b878383615a98565b634e487b7160e01b600052601260045260246000fd5b600082615b6a57615b6a615b45565b500690565b600082615b7e57615b7e615b45565b500490565b634e487b7160e01b600052603160045260246000fd5b600060208284031215615bab57600080fd5b8151611b87816156b5565b60006001600160ff1b0182016159c3576159c3615983565b600060033d1115615be75760046000803e5060005160e01c5b90565b601f8201601f1916810167ffffffffffffffff81118282101715615c1e57634e487b7160e01b600052604160045260246000fd5b6040525050565b600060443d1015615c335790565b6040516003193d81016004833e81513d67ffffffffffffffff8160248401118184111715615c6357505050505090565b8285019150815181811115615c7b5750505050505090565b843d8701016020828501011115615c955750505050505090565b615ca460208286010187615bea565b509095945050505050565b600081615cbe57615cbe615983565b506000190190565b6000600160ff1b8201615cdb57615cdb615983565b5060000390565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b81811015615d325784516001600160a01b031683529383019391830191600101615d0d565b50506001600160a01b03969096166060850152505050608001529392505050565b600080600060608486031215615d6857600080fd5b835192506020840151915060408401519050925092509256feddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3efa2646970667358221220bdd3d9b92984f07876687dfec4428e7abeb6447e786c0591623baa37c5646edd64736f6c634300080d0033

Deployed ByteCode Sourcemap

11305:45373:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;45083:223;;;;;;;;;;-1:-1:-1;45083:223:0;;;;;:::i;:::-;;:::i;:::-;;50965:462;;;;;;;;;;-1:-1:-1;50965:462:0;;;;;:::i;:::-;;:::i;15328:59::-;;;;;;;;;;;;;;;;;;;598:25:1;;;586:2;571:18;15328:59:0;;;;;;;;12014:37;;;;;;;;;;-1:-1:-1;12014:37:0;;;;-1:-1:-1;;;12014:37:0;;;;;;;;;799:14:1;;792:22;774:41;;762:2;747:18;12014:37:0;634:187:1;16251:83:0;;;;;;;;;;-1:-1:-1;16251:83:0;;;;-1:-1:-1;;;;;16251:83:0;;;;;;-1:-1:-1;;;;;990:32:1;;;972:51;;960:2;945:18;16251:83:0;826:203:1;1187:83:0;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;11892:32::-;;;;;;;;;;-1:-1:-1;11892:32:0;;;;;;;;;;;16051:81;;;;;;;;;;-1:-1:-1;16051:81:0;;;;-1:-1:-1;;;;;16051:81:0;;;35778:241;;;;;;;;;;-1:-1:-1;35778:241:0;;;;;:::i;:::-;;:::i;12555:49::-;;;;;;;;;;-1:-1:-1;12555:49:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;21636:463;;;;;;;;;;-1:-1:-1;21636:463:0;;;;;:::i;:::-;;:::i;43669:175::-;;;;;;;;;;-1:-1:-1;43669:175:0;;;;;:::i;:::-;;:::i;16351:69::-;;;;;;;;;;-1:-1:-1;16351:69:0;;;;-1:-1:-1;;;;;16351:69:0;;;45459:746;;;;;;;;;;-1:-1:-1;45459:746:0;;;;;:::i;:::-;;:::i;18241:102::-;;;;;;;;;;-1:-1:-1;18323:12:0;;18241:102;;19352:123;;;;;;;;;;-1:-1:-1;19352:123:0;;;;;:::i;:::-;;:::i;28804:430::-;;;;;;;;;;-1:-1:-1;28804:430:0;;;;;:::i;:::-;;:::i;15940:82::-;;;;;;;;;;-1:-1:-1;15940:82:0;;;;-1:-1:-1;;;;;15940:82:0;;;19062:103;;;;;;;;;;;;;:::i;23518:319::-;;;;;;;;;;-1:-1:-1;23518:319:0;;;;;:::i;:::-;;:::i;22226:214::-;;;;;;;;;;;;;:::i;11593:35::-;;;;;;;;;;-1:-1:-1;11593:35:0;;;;;:::i;:::-;;:::i;15236:20::-;;;;;;;;;;;;;;;;1373:83;;;;;;;;;;-1:-1:-1;1439:9:0;;1373:83;;1439:9;;;;3496:36:1;;3484:2;3469:18;1373:83:0;3354:184:1;11559:27:0;;;;;;;;;;-1:-1:-1;11559:27:0;;;;;:::i;:::-;;:::i;52008:154::-;;;;;;;;;;-1:-1:-1;52008:154:0;;;;;:::i;:::-;;:::i;12837:48::-;;;;;;;;;;-1:-1:-1;12837:48:0;;;;;:::i;:::-;;;;;;;;;;;;;;35379:391;;;;;;;;;;-1:-1:-1;35379:391:0;;;;;:::i;:::-;;:::i;12184:28::-;;;;;;;;;;-1:-1:-1;12184:28:0;;;;-1:-1:-1;;;12184:28:0;;;;;;40514:692;;;;;;;;;;-1:-1:-1;40514:692:0;;;;;:::i;:::-;;:::i;46510:415::-;;;;;;;;;;-1:-1:-1;46510:415:0;;;;;:::i;:::-;;:::i;12729:46::-;;;;;;;;;;-1:-1:-1;12729:46:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;37896:462;;;;;;;;;;-1:-1:-1;37896:462:0;;;;;:::i;:::-;;:::i;49783:345::-;;;;;;;;;;-1:-1:-1;49783:345:0;;;;;:::i;:::-;;:::i;48980:547::-;;;;;;;;;;-1:-1:-1;48980:547:0;;;;;:::i;:::-;;:::i;15100:39::-;;;;;;;;;;;;;;;;50334:267;;;;;;;;;;-1:-1:-1;50334:267:0;;;;;:::i;:::-;;:::i;50645:288::-;;;;;;;;;;-1:-1:-1;50645:288:0;;;;;:::i;:::-;;:::i;12782:48::-;;;;;;;;;;-1:-1:-1;12782:48:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;15484:42;;;;;;;;;;;;;;;;15629:30;;;;;;;;;;;;;;;;15713:83;;;;;;;;;;;;;;;;15263:58;;;;;;;;;;;;;;;;44929:146;;;;;;;;;;-1:-1:-1;44929:146:0;;;;;:::i;:::-;;:::i;15666:40::-;;;;;;;;;;;;;;;;38395:566;;;;;;;;;;;;;:::i;31713:74::-;;;;;;;;;;;;;:::i;19659:125::-;;;;;;;;;;;;;:::i;12219:31::-;;;;;;;;;;-1:-1:-1;12219:31:0;;;;-1:-1:-1;;;12219:31:0;;;;;;18642:207;;;;;;;;;;-1:-1:-1;18642:207:0;;;;;:::i;:::-;;:::i;8197:126::-;;;;;;;;;;;;;:::i;15020:31::-;;;;;;;;;;;;;;;;31887:720;;;;;;;;;;-1:-1:-1;31887:720:0;;;;;:::i;:::-;;:::i;23918:416::-;;;;;;;;;;;;;:::i;49535:240::-;;;;;;;;;;-1:-1:-1;49535:240:0;;;;;:::i;:::-;;:::i;44505:263::-;;;;;;;;;;-1:-1:-1;44505:263:0;;;;;:::i;:::-;;:::i;18897:118::-;;;;;;;;;;-1:-1:-1;18897:118:0;;;;;:::i;:::-;;:::i;19483:119::-;;;;;;;;;;-1:-1:-1;19483:119:0;;;;;:::i;:::-;;:::i;43852:230::-;;;;;;;;;;-1:-1:-1;43852:230:0;;;;;:::i;:::-;;:::i;16147:86::-;;;;;;;;;;-1:-1:-1;16147:86:0;;;;-1:-1:-1;;;;;16147:86:0;;;37357:487;;;;;;;;;;-1:-1:-1;37357:487:0;;;;;:::i;:::-;;:::i;11975:32::-;;;;;;;;;;-1:-1:-1;11975:32:0;;;;-1:-1:-1;;;11975:32:0;;;;;;48828:144;;;;;;;;;;-1:-1:-1;48828:144:0;;;;;:::i;:::-;;:::i;8008:79::-;;;;;;;;;;-1:-1:-1;8073:6:0;;;;;-1:-1:-1;;;;;8073:6:0;8008:79;;11801:30;;;;;;;;;;-1:-1:-1;11801:30:0;;;;;;;;;;;44776:145;;;;;;;;;;-1:-1:-1;44776:145:0;;;;;:::i;:::-;;:::i;1278:87::-;;;;;;;;;;;;;:::i;42845:816::-;;;;;;;;;;-1:-1:-1;42845:816:0;;;;;:::i;:::-;;:::i;51764:236::-;;;;;;;;;;-1:-1:-1;51764:236:0;;;;;:::i;:::-;;:::i;15439:38::-;;;;;;;;;;;;;;;;23062:133;;;;;;;;;;-1:-1:-1;23148:12:0;;23162:24;;23062:133;;;5030:25:1;;;5086:2;5071:18;;5064:34;;;;5003:18;23062:133:0;4856:248:1;51461:102:0;;;;;;;;;;-1:-1:-1;51461:102:0;;;;;:::i;:::-;;:::i;15803:91::-;;;;;;;;;;;;;;;;45314:137;;;;;;;;;;-1:-1:-1;45314:137:0;;;;;:::i;:::-;;:::i;22448:606::-;;;;;;;;;;-1:-1:-1;22448:606:0;;;;;:::i;:::-;;:::i;34790:581::-;;;;;;;;;;-1:-1:-1;34790:581:0;;;;;:::i;:::-;;:::i;16460:19::-;;;;;;;;;;-1:-1:-1;16460:19:0;;;;-1:-1:-1;;;;;16460:19:0;;;15901:30;;;;;;;;;;;;;;;;24384:199;;;;;;;;;;-1:-1:-1;24384:199:0;;;;;:::i;:::-;;:::i;15533:43::-;;;;;;;;;;;;;;;;52671:219;;;;;;;;;;-1:-1:-1;52671:219:0;;;;;:::i;:::-;;:::i;11931:37::-;;;;;;;;;;-1:-1:-1;11931:37:0;;;;-1:-1:-1;;;11931:37:0;;;;;;12611:57;;;;;;;;;;-1:-1:-1;12611:57:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;39010:1166;;;;;;;;;;-1:-1:-1;39010:1166:0;;;;;:::i;:::-;;:::i;15193:36::-;;;;;;;;;;;;;;;;15394:38;;;;;;;;;;;;;;;;12675:47;;;;;;;;;;-1:-1:-1;12675:47:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;46213:289;;;;;;;;;;-1:-1:-1;46213:289:0;;;;;:::i;:::-;;:::i;42166:671::-;;;;;;;;;;-1:-1:-1;42166:671:0;;;;;:::i;:::-;;:::i;11838:47::-;;;;;;;;;;-1:-1:-1;11838:47:0;;;;;;;;;;;12096:48;;;;;;;;;;-1:-1:-1;12096:48:0;;;;-1:-1:-1;;;12096:48:0;;;;;;19226:118;;;;;;;;;;-1:-1:-1;19226:118:0;;;;;:::i;:::-;-1:-1:-1;;;;;19312:24:0;19288:4;19312:24;;;:17;:24;;;;;;;;;19226:118;11524:28;;;;;;;;;;-1:-1:-1;11524:28:0;;;;;:::i;:::-;;:::i;52170:493::-;;;;;;;;;;-1:-1:-1;52170:493:0;;;;;:::i;:::-;;:::i;18429:178::-;;;;;;;;;;-1:-1:-1;18429:178:0;;;;;:::i;:::-;-1:-1:-1;;;;;18565:25:0;;;18533:7;18565:25;;;:17;:25;;;;;;;;:34;;;;;;;;;;;;;18429:178;15583:39;;;;;;;;;;;;;;;;15146:40;;;;;;;;;;;;;;;;50136:162;;;;;;;;;;-1:-1:-1;50136:162:0;;;;;:::i;:::-;;:::i;17134:1007::-;;;;;;;;;;;;;:::i;41254:904::-;;;;;;;;;;-1:-1:-1;41254:904:0;;;;;:::i;:::-;;:::i;46933:1887::-;;;;;;;;;;-1:-1:-1;46933:1887:0;;;;;:::i;:::-;;:::i;15058:35::-;;;;;;;;;;;;;;;;8331:152;;;;;;;;;;-1:-1:-1;8331:152:0;;;;;:::i;:::-;;:::i;51609:119::-;;;;;;;;;;-1:-1:-1;51609:119:0;;;;;:::i;:::-;;:::i;11635:29::-;;;;;;;;;;-1:-1:-1;11635:29:0;;;;;:::i;:::-;;:::i;12259:55::-;;;;;;;;;;-1:-1:-1;12259:55:0;;;;;:::i;:::-;;;;;;;;;;;;;;16429:24;;;;;;;;;;-1:-1:-1;16429:24:0;;;;-1:-1:-1;;;;;16429:24:0;;;23203:251;;;;;;;;;;;;;:::i;12058:31::-;;;;;;;;;;-1:-1:-1;12058:31:0;;;;-1:-1:-1;;;12058:31:0;;;;;;12151:26;;;;;;;;;;-1:-1:-1;12151:26:0;;;;-1:-1:-1;;;12151:26:0;;;;;;45083:223;8149:6;;;;;-1:-1:-1;;;;;8149:6:0;8135:10;:20;8127:42;;;;-1:-1:-1;;;8127:42:0;;;;;;;:::i;:::-;;;;;;;;;13537:2:::1;45166:6;:37;;45158:59;;;::::0;-1:-1:-1;;;45158:59:0;;7192:2:1;45158:59:0::1;::::0;::::1;7174:21:1::0;7231:1;7211:18;;;7204:29;-1:-1:-1;;;7249:18:1;;;7242:39;7298:18;;45158:59:0::1;6990:332:1::0;45158:59:0::1;45228:16;:25:::0;;;45271:27:::1;::::0;45247:6;;45271:27:::1;::::0;;;::::1;45083:223:::0;:::o;50965:462::-;51115:10;51097:29;;;;:17;:29;;;;;;;;51089:70;;;;-1:-1:-1;;;51089:70:0;;7529:2:1;51089:70:0;;;7511:21:1;7568:2;7548:18;;;7541:30;7607;7587:18;;;7580:58;7655:18;;51089:70:0;7327:352:1;51089:70:0;51170:12;:27;;;51208:24;:50;;;51274:145;;51398:10;972:51:1;;51368:15:0;;51235:23;;51185:12;;51274:145;;960:2:1;945:18;51274:145:0;;;;;;;50965:462;;:::o;1187:83::-;1224:13;1257:5;1250:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1187:83;:::o;35778:241::-;35909:10;35869:4;35891:29;;;:17;:29;;;;;;;;-1:-1:-1;;;;;35891:38:0;;;;;;;;;;:46;;;35953:36;35869:4;;35891:38;;35953:36;;;;35932:5;598:25:1;;586:2;571:18;;452:177;35953:36:0;;;;;;;;-1:-1:-1;36007:4:0;35778:241;;;;;:::o;21636:463::-;21702:7;21722:17;21757:9;21752:157;21776:12;:19;21772:23;;21752:157;;;21858:12;21871:1;21858:15;;;;;;;;:::i;:::-;;;;;;;;;;;21843:53;;-1:-1:-1;;;21843:53:0;;-1:-1:-1;;;;;990:32:1;;;21843:53:0;;;972:51:1;21858:15:0;;;;21843:45;;945:18:1;;21843:53:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;21817:80;;:9;:80;:::i;:::-;-1:-1:-1;21797:3:0;;;;:::i;:::-;;;;21752:157;;;;21924:9;21919:144;21943:18;:25;21939:29;;21919:144;;;22010:18;22029:1;22010:21;;;;;;;;:::i;:::-;;;;;;;;;;;22003:47;;-1:-1:-1;;;22003:47:0;;-1:-1:-1;;;;;990:32:1;;;22003:47:0;;;972:51:1;22010:21:0;;;;22003:39;;945:18:1;;22003:47:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;21990:61;;:9;:61;:::i;:::-;-1:-1:-1;21970:3:0;;;;:::i;:::-;;;;21919:144;;;-1:-1:-1;22082:9:0;21636:463;-1:-1:-1;;21636:463:0:o;43669:175::-;8149:6;;;;;-1:-1:-1;;;;;8149:6:0;8135:10;:20;8127:42;;;;-1:-1:-1;;;8127:42:0;;;;;;;:::i;:::-;43752:27:::1;:36:::0;;-1:-1:-1;;43752:36:0::1;::::0;;::::1;;::::0;;::::1;::::0;;;::::1;::::0;;;43806:30:::1;::::0;::::1;::::0;-1:-1:-1;;43806:30:0::1;43669:175:::0;:::o;45459:746::-;8149:6;;;;;-1:-1:-1;;;;;8149:6:0;8135:10;:20;8127:42;;;;-1:-1:-1;;;8127:42:0;;;;;;;:::i;:::-;45596:5:::1;45605:1;45596:10:::0;45592:606:::1;;-1:-1:-1::0;;;;;45631:24:0;::::1;;::::0;;;:17:::1;:24;::::0;;;;;:34;::::1;;:24;::::0;;::::1;:34;;::::0;45623:58:::1;;;;-1:-1:-1::0;;;45623:58:0::1;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;45696:24:0;::::1;;::::0;;;:17:::1;:24;::::0;;;;;:33;;-1:-1:-1;;45696:33:0::1;::::0;::::1;;::::0;;::::1;::::0;;;45749:32;;45696:33;;:24;45749:32:::1;::::0;::::1;45459:746:::0;;;:::o;45592:606::-:1;45803:5;45812:1;45803:10:::0;45799:399:::1;;-1:-1:-1::0;;;;;45838:22:0;::::1;;::::0;;;:15:::1;:22;::::0;;;;;:32;::::1;;:22;::::0;;::::1;:32;;::::0;45830:56:::1;;;;-1:-1:-1::0;;;45830:56:0::1;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;45901:22:0;::::1;;::::0;;;:15:::1;:22;::::0;;;;;:31;;-1:-1:-1;;45901:31:0::1;::::0;::::1;;::::0;;::::1;::::0;;;45952:30;;45901:31;;:22;45952:30:::1;::::0;::::1;45459:746:::0;;;:::o;45799:399::-:1;46004:5;46013:1;46004:10:::0;46000:198:::1;;-1:-1:-1::0;;;;;46039:23:0;::::1;;::::0;;;:16:::1;:23;::::0;;;;;:33;::::1;;:23;::::0;;::::1;:33;;::::0;46031:57:::1;;;;-1:-1:-1::0;;;46031:57:0::1;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;46103:23:0;::::1;;::::0;;;:16:::1;:23;::::0;;;;;:32;;-1:-1:-1;;46103:32:0::1;::::0;::::1;;::::0;;::::1;::::0;;;46155:31;;46103:32;;:23;46155:31:::1;::::0;::::1;46000:198;45459:746:::0;;;:::o;19352:123::-;19413:7;19450:16;;19440:6;:27;;;;:::i;28804:430::-;28947:4;28934:2;-1:-1:-1;;;;;16727:18:0;;16719:53;;;;-1:-1:-1;;;16719:53:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;28968:23:0;::::1;;::::0;;;:17:::1;:23;::::0;;;;;;;28992:10:::1;28968:35:::0;;;;;;;;-1:-1:-1;;28968:56:0::1;28964:198;;-1:-1:-1::0;;;;;29092:23:0;::::1;;::::0;;;:17:::1;:23;::::0;;;;;;;29116:10:::1;29092:35:::0;;;;;;;;:58:::1;::::0;29144:5;;29092:58:::1;:::i;:::-;-1:-1:-1::0;;;;;29041:23:0;::::1;;::::0;;;:17:::1;:23;::::0;;;;;;;29065:10:::1;29041:35:::0;;;;;;;:109;28964:198:::1;29174:30;29188:4;29194:2;29198:5;29174:13;:30::i;:::-;-1:-1:-1::0;29222:4:0::1;::::0;28804:430;-1:-1:-1;;;;;28804:430:0:o;19062:103::-;19109:7;19136:21;19151:5;;19136:14;:21::i;:::-;19129:28;;19062:103;:::o;23518:319::-;23616:7;23641:17;23661;23671:6;23661:9;:17::i;:::-;23641:37;;23801:27;23821:6;23801:19;:27::i;:::-;23788:41;;:9;:41;:::i;:::-;23781:48;23518:319;-1:-1:-1;;;23518:319:0:o;22226:214::-;22416:16;;22386;;-1:-1:-1;;;;;22386:16:0;22281:7;22373:30;;;:12;:30;;;;;;22352:18;;11400:42;22331:18;;;;22281:7;;22416:16;13343:14;13208:2;13343;:14;:::i;:::-;13328:29;;:12;:29;:::i;:::-;14185:38;;-1:-1:-1;;14185:38:0;:::i;:::-;14170:54;;-1:-1:-1;;14170:54:0;:::i;:::-;22318:31;;;;:::i;:::-;:52;;;;:::i;:::-;:85;;;;:::i;:::-;22317:115;;;;:::i;11593:35::-;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;11593:35:0;;-1:-1:-1;11593:35:0;:::o;11559:27::-;;;;;;;;;;;;52008:154;8149:6;;;;;-1:-1:-1;;;;;8149:6:0;8135:10;:20;8127:42;;;;-1:-1:-1;;;8127:42:0;;;;;;;:::i;:::-;52082:18:::1;:27:::0;;-1:-1:-1;;52082:27:0::1;-1:-1:-1::0;;;52082:27:0;::::1;;::::0;;::::1;::::0;;;::::1;::::0;;;52125:29:::1;::::0;::::1;::::0;-1:-1:-1;;52125:29:0::1;52008:154:::0;:::o;35379:391::-;35561:10;35471:4;35543:29;;;:17;:29;;;;;;;;-1:-1:-1;;;;;35543:38:0;;;;;;;;;;:62;;35594:10;;35543:62;:::i;:::-;35511:10;35493:29;;;;:17;:29;;;;;;;;-1:-1:-1;;;;;35493:38:0;;;;;;;;;;;;:112;;;35621:119;598:25:1;;;35493:38:0;;35621:119;;571:18:1;35621:119:0;452:177:1;40514:692:0;8149:6;;;;;-1:-1:-1;;;;;8149:6:0;8135:10;:20;8127:42;;;;-1:-1:-1;;;8127:42:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;40627:30:0;::::1;;::::0;;;:16:::1;:30;::::0;;;;;:40;::::1;;:30;::::0;;::::1;:40;;::::0;40619:70:::1;;;::::0;-1:-1:-1;;;40619:70:0;;11739:2:1;40619:70:0::1;::::0;::::1;11721:21:1::0;11778:2;11758:18;;;11751:30;-1:-1:-1;;;11797:18:1;;;11790:47;11854:18;;40619:70:0::1;11537:341:1::0;40619:70:0::1;-1:-1:-1::0;;;;;40702:30:0;::::1;;::::0;;;:16:::1;:30;::::0;;;;:39;;-1:-1:-1;;40702:39:0::1;::::0;::::1;::::0;::::1;::::0;;;::::1;::::0;;;40754:390:::1;;40781:12;:31:::0;;::::1;::::0;::::1;::::0;;-1:-1:-1;40781:31:0;;;;;::::1;::::0;;-1:-1:-1;;;;;;40781:31:0::1;-1:-1:-1::0;;;;;40781:31:0;::::1;;::::0;;40754:390:::1;;;40850:9;40845:288;40869:12;:19:::0;40865:23;::::1;40845:288;;;40937:12;-1:-1:-1::0;;;;;40918:31:0::1;:12;40931:1;40918:15;;;;;;;;:::i;:::-;;::::0;;;::::1;::::0;;;::::1;::::0;-1:-1:-1;;;;;40918:15:0::1;:31:::0;40914:204:::1;;40992:12;41005:19:::0;;:23:::1;::::0;41027:1:::1;::::0;41005:23:::1;:::i;:::-;40992:37;;;;;;;;:::i;:::-;;::::0;;;::::1;::::0;;;::::1;::::0;40974:12:::1;:15:::0;;-1:-1:-1;;;;;40992:37:0;;::::1;::::0;40987:1;;40974:15;::::1;;;;;:::i;:::-;;;;;;;;;:55;;;;;-1:-1:-1::0;;;;;40974:55:0::1;;;;;-1:-1:-1::0;;;;;40974:55:0::1;;;;;;41052:12;:18;;;;;;;:::i;:::-;;::::0;;;::::1;::::0;;;;-1:-1:-1;;41052:18:0;;;;;-1:-1:-1;;;;;;41052:18:0::1;::::0;;;;;41093:5:::1;;40914:204;40890:3:::0;::::1;::::0;::::1;:::i;:::-;;;;40845:288;;;;40754:390;41161:37;::::0;;::::1;;::::0;-1:-1:-1;;;;;41161:37:0;::::1;::::0;::::1;::::0;;;::::1;40514:692:::0;;:::o;46510:415::-;8149:6;;;;;-1:-1:-1;;;;;8149:6:0;8135:10;:20;8127:42;;;;-1:-1:-1;;;8127:42:0;;;;;;;:::i;:::-;46724:17:::1;:38:::0;;-1:-1:-1;;;;;46724:38:0;;::::1;-1:-1:-1::0;;;;;;46724:38:0;;::::1;;::::0;;;46773:16:::1;:36:::0;;;;::::1;::::0;;::::1;::::0;;;::::1;::::0;;;46820:21:::1;:46:::0;;;;::::1;::::0;;::::1;::::0;;;::::1;::::0;;;46877:18:::1;:40:::0;;;;;::::1;::::0;::::1;;::::0;;46510:415::o;37896:462::-;8149:6;;;;;-1:-1:-1;;;;;8149:6:0;8135:10;:20;8127:42;;;;-1:-1:-1;;;8127:42:0;;;;;;;:::i;:::-;37977:6:::1;:28:::0;;-1:-1:-1;;;;;;37977:28:0;;::::1;-1:-1:-1::0;;;;;37977:28:0;;::::1;::::0;;::::1;::::0;;;38016:4:::1;:12:::0;;;;::::1;::::0;;::::1;;::::0;;38067:4:::1;-1:-1:-1::0;38041:32:0;;;:17:::1;:32;::::0;;;;;;;:49;;;;;;;;;-1:-1:-1;;38041:69:0;;;;38121:32;;;:47;;;:67;;;38232:4;;;::::1;38199:38:::0;;;;;;:58;38296:4;38268:39:::1;::::0;38296:4:::1;-1:-1:-1::0;38268:27:0::1;:39::i;:::-;38344:5;-1:-1:-1::0;;;;;38325:25:0::1;38335:7;-1:-1:-1::0;;;;;38325:25:0::1;;;;;;;;;;;37896:462:::0;;:::o;49783:345::-;8149:6;;49869:12;;8149:6;;;-1:-1:-1;;;;;8149:6:0;8135:10;:20;8127:42;;;;-1:-1:-1;;;8127:42:0;;;;;;;:::i;:::-;49916:52:::1;::::0;-1:-1:-1;;;49916:52:0;;49962:4:::1;49916:52;::::0;::::1;972:51:1::0;49899:14:0::1;::::0;-1:-1:-1;;;;;49916:37:0;::::1;::::0;::::1;::::0;945:18:1;;49916:52:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;49899:69;;50022:6;50010:10;-1:-1:-1::0;;;;;49984:62:0::1;49996:12;-1:-1:-1::0;;;;;49984:62:0::1;;50030:15;49984:62;;;;598:25:1::0;;586:2;571:18;;452:177;49984:62:0::1;;;;;;;;50064:56;::::0;-1:-1:-1;;;50064:56:0;;50101:10:::1;50064:56;::::0;::::1;12189:51:1::0;12256:18;;;12249:34;;;-1:-1:-1;;;;;50064:36:0;::::1;::::0;::::1;::::0;12162:18:1;;50064:56:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;8180:1::-;49783:345:::0;;;:::o;48980:547::-;8149:6;;;;;-1:-1:-1;;;;;8149:6:0;8135:10;:20;8127:42;;;;-1:-1:-1;;;8127:42:0;;;;;;;:::i;:::-;13713:2:::1;49154:24;:52;;49132:126;;;::::0;-1:-1:-1;;;49132:126:0;;12746:2:1;49132:126:0::1;::::0;::::1;12728:21:1::0;12785:2;12765:18;;;12758:30;12824:26;12804:18;;;12797:54;12868:18;;49132:126:0::1;12544:348:1::0;49132:126:0::1;49269:20;:47:::0;;;49327:12:::1;:35:::0;;-1:-1:-1;;49327:35:0::1;-1:-1:-1::0;;;49327:35:0;::::1;;::::0;;::::1;::::0;;;::::1;::::0;;;49378:141:::1;::::0;49493:15:::1;::::0;49327:35;49269:47;;49378:141:::1;::::0;-1:-1:-1;;49378:141:0::1;48980:547:::0;;:::o;50334:267::-;8149:6;;;;;-1:-1:-1;;;;;8149:6:0;8135:10;:20;8127:42;;;;-1:-1:-1;;;8127:42:0;;;;;;;:::i;:::-;13594:4:::1;50426:16;:40;;50418:61;;;::::0;-1:-1:-1;;;50418:61:0;;13099:2:1;50418:61:0::1;::::0;::::1;13081:21:1::0;13138:1;13118:18;;;13111:29;-1:-1:-1;;;13156:18:1;;;13149:38;13204:18;;50418:61:0::1;12897:331:1::0;50418:61:0::1;50490:15;:34:::0;;;50540:53:::1;::::0;50577:15:::1;::::0;50508:16;;50540:53:::1;::::0;;;::::1;50334:267:::0;:::o;50645:288::-;8149:6;;;;;-1:-1:-1;;;;;8149:6:0;8135:10;:20;8127:42;;;;-1:-1:-1;;;8127:42:0;;;;;;;:::i;:::-;50755:14:::1;50738:31;;:13;;;;;;;;;;;:31;;::::0;50716:109:::1;;;::::0;-1:-1:-1;;;50716:109:0;;13435:2:1;50716:109:0::1;::::0;::::1;13417:21:1::0;13474:2;13454:18;;;13447:30;13513;13493:18;;;13486:58;13561:18;;50716:109:0::1;13233:352:1::0;50716:109:0::1;50836:13;:30:::0;;-1:-1:-1;;50836:30:0::1;::::0;;::::1;;::::0;;::::1;::::0;;;::::1;::::0;;;50882:43:::1;::::0;50909:15:::1;::::0;50836:30;50882:43:::1;::::0;-1:-1:-1;;50882:43:0::1;50645:288:::0;:::o;44929:146::-;8149:6;;;;;-1:-1:-1;;;;;8149:6:0;8135:10;:20;8127:42;;;;-1:-1:-1;;;8127:42:0;;;;;;;:::i;:::-;45004:9:::1;:18:::0;;-1:-1:-1;;;;;;45004:18:0::1;-1:-1:-1::0;;;;;45004:18:0;::::1;::::0;;::::1;::::0;;45040:27;;::::1;::::0;-1:-1:-1;;45040:27:0::1;44929:146:::0;:::o;38395:566::-;10358:1;10956:7;;:19;10948:63;;;;-1:-1:-1;;;10948:63:0;;13792:2:1;10948:63:0;;;13774:21:1;13831:2;13811:18;;;13804:30;13870:33;13850:18;;;13843:61;13921:18;;10948:63:0;13590:355:1;10948:63:0;10358:1;11089:7;:18;38470:10:::1;38460:21;::::0;;;:9:::1;:21;::::0;;;;;::::1;;38452:48;;;::::0;-1:-1:-1;;;38452:48:0;;14152:2:1;38452:48:0::1;::::0;::::1;14134:21:1::0;14191:2;14171:18;;;14164:30;-1:-1:-1;;;14210:18:1;;;14203:44;14264:18;;38452:48:0::1;13950:338:1::0;38452:48:0::1;38520:6;::::0;::::1;;38519:7;38511:29;;;::::0;-1:-1:-1;;;38511:29:0;;14495:2:1;38511:29:0::1;::::0;::::1;14477:21:1::0;14534:1;14514:18;;;14507:29;-1:-1:-1;;;14552:18:1;;;14545:39;14601:18;;38511:29:0::1;14293:332:1::0;38511:29:0::1;38573:15;38559:10;;:29;;38551:53;;;::::0;-1:-1:-1;;;38551:53:0;;14832:2:1;38551:53:0::1;::::0;::::1;14814:21:1::0;14871:2;14851:18;;;14844:30;-1:-1:-1;;;14890:18:1;;;14883:41;14941:18;;38551:53:0::1;14630:335:1::0;38551:53:0::1;38617:18;::::0;38671:258:::1;38763:24;;38745:12;;38729;;:29;;;;:::i;:::-;38728:60;;;;:::i;:::-;38689:114;;38818:23;38829:11;38818:10;:23::i;:::-;-1:-1:-1::0;38856:3:0;::::1;::::0;::::1;:::i;:::-;;;;38901:15;38888:10;;:28;:39;;;;;38924:3;38920:1;:7;38888:39;38671:258;;38941:12;:10;:12::i;:::-;-1:-1:-1::0;;10314:1:0;11268:7;:22;38395:566::o;31713:74::-;8149:6;;;;;-1:-1:-1;;;;;8149:6:0;8135:10;:20;8127:42;;;;-1:-1:-1;;;8127:42:0;;;;;;;:::i;:::-;31769:10:::1;:8;:10::i;:::-;31713:74::o:0;19659:125::-;19712:7;19759:16;;19739;;:37;;;;:::i;18642:207::-;18704:7;18728:16;;18748:1;18728:21;18724:62;;-1:-1:-1;18773:1:0;;18642:207;-1:-1:-1;18642:207:0:o;18724:62::-;18824:16;;-1:-1:-1;;;;;18803:17:0;;;;;;:12;:17;;;;;;:38;;18824:16;18803:38;:::i;8197:126::-;8149:6;;;;;-1:-1:-1;;;;;8149:6:0;8135:10;:20;8127:42;;;;-1:-1:-1;;;8127:42:0;;;;;;;:::i;:::-;8278:6:::1;::::0;8259:26:::1;::::0;8278:6:::1;::::0;;::::1;-1:-1:-1::0;;;;;8278:6:0::1;::::0;8259:26:::1;::::0;;;::::1;8296:6;:19:::0;;-1:-1:-1;;;;;;8296:19:0::1;::::0;;8197:126::o;31887:720::-;-1:-1:-1;;;;;32054:25:0;;31975:29;32054:25;;;:15;:25;;;;;32131:24;;;31975:29;32166:393;32190:22;;32186:26;;32166:393;;;32234:26;32263:15;32279:1;32263:18;;;;;;;;:::i;:::-;;;;;;;;;;;32234:47;;;;;;;;;;;;;;;;;;;;;;;;;;;32360:18;;32341:15;:38;;;;:::i;:::-;32318:18;;:62;32296:252;;32498:15;32514:1;32498:18;;;;;;;;:::i;:::-;;;;;;;;;;;:33;;;32456:21;:76;;;;:::i;:::-;32415:117;;32296:252;-1:-1:-1;32214:3:0;;;;:::i;:::-;;;;32166:393;;;;32571:28;;31887:720;;;:::o;23918:416::-;23963:9;23958:369;23982:11;:18;23978:22;;23958:369;;;24035:11;24047:1;24035:14;;;;;;;;:::i;:::-;;;;;;;;;;24026:31;;;-1:-1:-1;;;;;;24026:31:0;;;;-1:-1:-1;;;;;24035:14:0;;;;24026:29;;:31;;;;;;;;;;24035:14;;24026:31;;;;;;;;;;;;;;;;;;;;;;;;;24022:294;;;;:::i;:::-;;;;;;;;;:::i;:::-;;;;;;;;24151:100;;;;;16667:2:1;16649:21;;;16706:2;16686:18;;;16679:30;16745:34;16740:2;16725:18;;16718:62;-1:-1:-1;;;16811:2:1;16796:18;;16789:37;16858:3;16843:19;;16465:403;24151:100:0;;;;;;;;24275:25;24293:6;24275:25;;;;;;:::i;:::-;;;;;;;;24061:255;24022:294;;;;;;;;;;;;;24002:3;;;;:::i;:::-;;;;23958:369;;;;23918:416::o;49535:240::-;8149:6;;;;;-1:-1:-1;;;;;8149:6:0;8135:10;:20;8127:42;;;;-1:-1:-1;;;8127:42:0;;;;;;;:::i;:::-;49661:36:::1;::::0;49629:21:::1;::::0;-1:-1:-1;;;;;49661:27:0;::::1;::::0;:36;::::1;;;::::0;49629:21;;49611:15:::1;49661:36:::0;49611:15;49661:36;49629:21;49661:27;:36;::::1;;;;;;;;;;;;;::::0;::::1;;;;;;49751:15;49740:9;-1:-1:-1::0;;;;;49713:54:0::1;49731:7;49713:54;;;;;;;;;;49600:175;49535:240:::0;:::o;44505:263::-;8149:6;;;;;-1:-1:-1;;;;;8149:6:0;8135:10;:20;8127:42;;;;-1:-1:-1;;;8127:42:0;;;;;;;:::i;:::-;14030:18:::1;44599:6;:40;44591:66;;;::::0;-1:-1:-1;;;44591:66:0;;17075:2:1;44591:66:0::1;::::0;::::1;17057:21:1::0;17114:2;17094:18;;;17087:30;-1:-1:-1;;;17133:18:1;;;17126:43;17186:18;;44591:66:0::1;16873:337:1::0;44591:66:0::1;44668:27;:36:::0;;;44722:38:::1;::::0;44698:6;;44722:38:::1;::::0;;;::::1;44505:263:::0;:::o;18897:118::-;18962:7;18989:11;19001:5;18989:18;;;;;;;;:::i;:::-;;;;;;;;;;;-1:-1:-1;;;;;18989:18:0;;18897:118;-1:-1:-1;;18897:118:0:o;19483:119::-;19542:7;19577:16;;19569:4;:25;;;;:::i;43852:230::-;8149:6;;;;;-1:-1:-1;;;;;8149:6:0;8135:10;:20;8127:42;;;;-1:-1:-1;;;8127:42:0;;;;;;;:::i;:::-;13418:4:::1;43937:6;:35;43929:60;;;::::0;-1:-1:-1;;;43929:60:0;;17417:2:1;43929:60:0::1;::::0;::::1;17399:21:1::0;17456:2;17436:18;;;17429:30;-1:-1:-1;;;17475:18:1;;;17468:42;17527:18;;43929:60:0::1;17215:336:1::0;43929:60:0::1;44000:18;:27:::0;;;44045:29:::1;::::0;44021:6;;44045:29:::1;::::0;;;::::1;43852:230:::0;:::o;37357:487::-;8149:6;;;;;-1:-1:-1;;;;;8149:6:0;8135:10;:20;8127:42;;;;-1:-1:-1;;;8127:42:0;;;;;;;:::i;:::-;37495:5:::1;37504:1;37495:10:::0;37491:288:::1;;-1:-1:-1::0;;;;;37530:16:0;::::1;;::::0;;;:9:::1;:16;::::0;;;;;:26;::::1;;:16;::::0;;::::1;:26;;::::0;37522:50:::1;;;;-1:-1:-1::0;;;37522:50:0::1;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;37587:16:0;::::1;;::::0;;;:9:::1;:16;::::0;;;;:25;;-1:-1:-1;;37587:25:0::1;::::0;::::1;;;::::0;;37491:288:::1;;;37634:5;37643:1;37634:10:::0;37630:149:::1;;-1:-1:-1::0;;;;;37669:24:0;::::1;;::::0;;;:17:::1;:24;::::0;;;;;:34;::::1;;:24;::::0;;::::1;:34;;::::0;37661:58:::1;;;;-1:-1:-1::0;;;37661:58:0::1;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;37734:24:0;::::1;;::::0;;;:17:::1;:24;::::0;;;;:33;;-1:-1:-1;;37734:33:0::1;::::0;::::1;;;::::0;;37630:149:::1;37830:5;37822:6;37796:40;;37815:5;-1:-1:-1::0;;;;;37796:40:0::1;;;;;;;;;;;37357:487:::0;;;:::o;48828:144::-;8149:6;;;;;-1:-1:-1;;;;;8149:6:0;8135:10;:20;8127:42;;;;-1:-1:-1;;;8127:42:0;;;;;;;:::i;:::-;48893:9:::1;:18:::0;;-1:-1:-1;;;;48893:18:0::1;-1:-1:-1::0;;;48893:18:0;::::1;;::::0;;::::1;::::0;;;::::1;::::0;;;48927:37:::1;::::0;48948:15:::1;::::0;48893:18;48927:37:::1;::::0;-1:-1:-1;;48927:37:0::1;48828:144:::0;:::o;44776:145::-;8149:6;;;;;-1:-1:-1;;;;;8149:6:0;8135:10;:20;8127:42;;;;-1:-1:-1;;;8127:42:0;;;;;;;:::i;:::-;44847:17:::1;:26:::0;;-1:-1:-1;;44847:26:0::1;-1:-1:-1::0;;;44847:26:0;::::1;;::::0;;::::1;::::0;;;::::1;::::0;;;44891:22:::1;::::0;::::1;::::0;-1:-1:-1;;44891:22:0::1;44776:145:::0;:::o;1278:87::-;1317:13;1350:7;1343:14;;;;;:::i;42845:816::-;8149:6;;;;;-1:-1:-1;;;;;8149:6:0;8135:10;:20;8127:42;;;;-1:-1:-1;;;8127:42:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;42961:32:0;::::1;;::::0;;;:25:::1;:32;::::0;;;;;:42;::::1;;:32;::::0;;::::1;:42;;::::0;42953:66:::1;;;::::0;-1:-1:-1;;;42953:66:0;;17758:2:1;42953:66:0::1;::::0;::::1;17740:21:1::0;17797:2;17777:18;;;17770:30;-1:-1:-1;;;17816:18:1;;;17809:41;17867:18;;42953:66:0::1;17556:335:1::0;42953:66:0::1;-1:-1:-1::0;;;;;43032:32:0;::::1;;::::0;;;:25:::1;:32;::::0;;;;:41;;-1:-1:-1;;43032:41:0::1;::::0;::::1;::::0;::::1;::::0;;;::::1;::::0;;;43086:508:::1;;43113:11;:23:::0;;::::1;::::0;::::1;::::0;;-1:-1:-1;43113:23:0;;;;::::1;::::0;;-1:-1:-1;;;;;;43113:23:0::1;-1:-1:-1::0;;;;;43113:23:0;::::1;;::::0;;43151:16:::1;:18:::0;;;::::1;::::0;::::1;:::i;:::-;;;;;;43086:508;;;43210:11;:18:::0;43231:1:::1;-1:-1:-1::0;43202:50:0::1;;;::::0;-1:-1:-1;;;43202:50:0;;18098:2:1;43202:50:0::1;::::0;::::1;18080:21:1::0;18137:2;18117:18;;;18110:30;-1:-1:-1;;;18156:18:1;;;18149:45;18211:18;;43202:50:0::1;17896:339:1::0;43202:50:0::1;43272:9;43267:316;43291:11;:18:::0;43287:22;::::1;43267:316;;;43357:5;-1:-1:-1::0;;;;;43339:23:0::1;:11;43351:1;43339:14;;;;;;;;:::i;:::-;;::::0;;;::::1;::::0;;;::::1;::::0;-1:-1:-1;;;;;43339:14:0::1;:23:::0;43335:233:::1;;43404:11;43416:18:::0;;:22:::1;::::0;43437:1:::1;::::0;43416:22:::1;:::i;:::-;43404:35;;;;;;;;:::i;:::-;;::::0;;;::::1;::::0;;;::::1;::::0;43387:11:::1;:14:::0;;-1:-1:-1;;;;;43404:35:0;;::::1;::::0;43399:1;;43387:14;::::1;;;;;:::i;:::-;;;;;;;;;:52;;;;;-1:-1:-1::0;;;;;43387:52:0::1;;;;;-1:-1:-1::0;;;;;43387:52:0::1;;;;;;43462:11;:17;;;;;;;:::i;:::-;;::::0;;;::::1;::::0;;;;-1:-1:-1;;43462:17:0;;;;;-1:-1:-1;;;;;;43462:17:0::1;::::0;;;;;;;;43502:16:::1;:18:::0;;;::::1;::::0;::::1;:::i;:::-;;;;;;43543:5;;43335:233;43311:3:::0;::::1;::::0;::::1;:::i;:::-;;;;43267:316;;;;43086:508;43611:42;::::0;;::::1;;::::0;-1:-1:-1;;;;;43611:42:0;::::1;::::0;::::1;::::0;;;::::1;42845:816:::0;;:::o;51764:236::-;8149:6;;;;;-1:-1:-1;;;;;8149:6:0;8135:10;:20;8127:42;;;;-1:-1:-1;;;8127:42:0;;;;;;;:::i;:::-;51860:15:::1;51846:11;:29;51838:60;;;::::0;-1:-1:-1;;;51838:60:0;;18583:2:1;51838:60:0::1;::::0;::::1;18565:21:1::0;18622:2;18602:18;;;18595:30;-1:-1:-1;;;18641:18:1;;;18634:48;18699:18;;51838:60:0::1;18381:342:1::0;51838:60:0::1;51909:10;:24:::0;;;51949:43:::1;::::0;51976:15:::1;::::0;51922:11;;51949:43:::1;::::0;;;::::1;51764:236:::0;:::o;51461:102::-;8149:6;;;;;-1:-1:-1;;;;;8149:6:0;8135:10;:20;8127:42;;;;-1:-1:-1;;;8127:42:0;;;;;;;:::i;:::-;51533:13:::1;:22:::0;51461:102::o;45314:137::-;8149:6;;;;;-1:-1:-1;;;;;8149:6:0;8135:10;:20;8127:42;;;;-1:-1:-1;;;8127:42:0;;;;;;;:::i;:::-;45381:13:::1;:22:::0;;-1:-1:-1;;45381:22:0::1;-1:-1:-1::0;;;45381:22:0;::::1;;::::0;;::::1;::::0;;;::::1;::::0;;;45421::::1;::::0;::::1;::::0;-1:-1:-1;;45421:22:0::1;45314:137:::0;:::o;22448:606::-;22532:7;22603:17;22623:46;22660:8;22623:36;:46::i;:::-;22603:66;;22718:16;22760:26;:24;:26::i;:::-;22738:17;:9;22751:3;22738:17;:::i;:::-;22737:50;;;;:::i;:::-;22718:69;;22851:16;14272:2;22870:8;:24;:51;;14272:2;22870:51;;;22897:8;22870:51;22851:70;;22998:20;;22986:32;;;;;:::i;:::-;;22448:606;-1:-1:-1;;;;;22448:606:0:o;34790:581::-;34946:10;34887:4;34928:29;;;:17;:29;;;;;;;;-1:-1:-1;;;;;34928:38:0;;;;;;;;;;34981:27;;;34977:230;;35043:10;35066:1;35025:29;;;:17;:29;;;;;;;;-1:-1:-1;;;;;35025:38:0;;;;;;;;;:42;34977:230;;;35154:41;35179:15;35154:8;:41;:::i;:::-;35118:10;35100:29;;;;:17;:29;;;;;;;;-1:-1:-1;;;;;35100:38:0;;;;;;;;;:95;34977:230;35245:10;35292:29;;;;:17;:29;;;;;;;;-1:-1:-1;;;;;35222:119:0;;35292:38;;;;;;;;;;;35222:119;;598:25:1;;;35222:119:0;;35245:10;35222:119;;571:18:1;35222:119:0;;;;;;;-1:-1:-1;35359:4:0;;34790:581;-1:-1:-1;;;34790:581:0:o;24384:199::-;24495:4;24477:2;-1:-1:-1;;;;;16727:18:0;;16719:53;;;;-1:-1:-1;;;16719:53:0;;;;;;;:::i;:::-;24517:36:::1;24531:10;24543:2;24547:5;24517:13;:36::i;:::-;-1:-1:-1::0;24571:4:0::1;::::0;24384:199;-1:-1:-1;;;;24384:199:0:o;52671:219::-;8149:6;;;;;-1:-1:-1;;;;;8149:6:0;8135:10;:20;8127:42;;;;-1:-1:-1;;;8127:42:0;;;;;;;:::i;:::-;52776:11:::1;:26:::0;;;52813:6:::1;:16:::0;;-1:-1:-1;;;;52813:16:0::1;-1:-1:-1::0;;;52813:16:0;::::1;;::::0;;::::1;::::0;;;::::1;::::0;;;52845:37:::1;::::0;52776:26;;52845:37:::1;::::0;-1:-1:-1;;52845:37:0::1;52671:219:::0;;:::o;39010:1166::-;39097:4;39078:3;-1:-1:-1;;;;;16727:18:0;;16719:53;;;;-1:-1:-1;;;16719:53:0;;;;;;;:::i;:::-;39127:13:::1;::::0;-1:-1:-1;;;39127:13:0;::::1;;;39119:38;;;::::0;-1:-1:-1;;;39119:38:0;;18930:2:1;39119:38:0::1;::::0;::::1;18912:21:1::0;18969:2;18949:18;;;18942:30;-1:-1:-1;;;18988:18:1;;;18981:42;19040:18;;39119:38:0::1;18728:336:1::0;39119:38:0::1;39176:27;::::0;;;::::1;;;39168:49;;;::::0;-1:-1:-1;;;39168:49:0;;19271:2:1;39168:49:0::1;::::0;::::1;19253:21:1::0;19310:1;19290:18;;;19283:29;-1:-1:-1;;;19328:18:1;;;19321:39;19377:18;;39168:49:0::1;19069:332:1::0;39168:49:0::1;39299:10;39281:29;::::0;;;:17:::1;:29;::::0;;;;;::::1;;39280:30;39272:54;;;::::0;-1:-1:-1;;;39272:54:0;;19608:2:1;39272:54:0::1;::::0;::::1;19590:21:1::0;19647:2;19627:18;;;19620:30;-1:-1:-1;;;19666:18:1;;;19659:41;19717:18;;39272:54:0::1;19406:335:1::0;39272:54:0::1;39369:1;39345:21;39355:10;39345:9;:21::i;:::-;:25;39337:47;;;::::0;-1:-1:-1;;;39337:47:0;;19948:2:1;39337:47:0::1;::::0;::::1;19930:21:1::0;19987:1;19967:18;;;19960:29;-1:-1:-1;;;20005:18:1;;;19998:39;20054:18;;39337:47:0::1;19746:332:1::0;39337:47:0::1;39395:32;39471:31;39491:10;39471:19;:31::i;:::-;39444:58:::0;-1:-1:-1;39521:29:0;;39513:56:::1;;;::::0;-1:-1:-1;;;39513:56:0;;20285:2:1;39513:56:0::1;::::0;::::1;20267:21:1::0;20324:2;20304:18;;;20297:30;-1:-1:-1;;;20343:18:1;;;20336:44;20397:18;;39513:56:0::1;20083:338:1::0;39513:56:0::1;39730:10;39712:29;::::0;;;:17:::1;:29;::::0;;;;;;;:36;;-1:-1:-1;;39712:36:0::1;39744:4;39712:36;::::0;;39779:12:::1;:24:::0;;;;;;39876:38:::1;39779:24:::0;;39876:38:::1;:::i;:::-;39862:10;39849:24;::::0;;;:12:::1;:24;::::0;;;;;:65;;;;-1:-1:-1;;;;;39994:17:0;::::1;::::0;;;;:31:::1;::::0;40015:9;;39994:31:::1;:::i;:::-;-1:-1:-1::0;;;;;39974:17:0;::::1;;::::0;;;:12:::1;:17;::::0;;;;:51;;;;40083:16:::1;::::0;40052:10:::1;::::0;-1:-1:-1;;;;;;;;;;;40043:59:0;40070:30:::1;::::0;:9;:30:::1;:::i;:::-;40043:59;::::0;598:25:1;;;586:2;571:18;40043:59:0::1;;;;;;;40118:28;::::0;;40130:10:::1;20638:34:1::0;;-1:-1:-1;;;;;20708:15:1;;20703:2;20688:18;;20681:43;40118:28:0::1;::::0;20573:18:1;40118:28:0::1;;;;;;;40164:4;40157:11;;;;16783:1;39010:1166:::0;;;;:::o;46213:289::-;8149:6;;;;;-1:-1:-1;;;;;8149:6:0;8135:10;:20;8127:42;;;;-1:-1:-1;;;8127:42:0;;;;;;;:::i;:::-;46351:11:::1;:22:::0;;-1:-1:-1;;;;46351:22:0::1;-1:-1:-1::0;;;46351:22:0;::::1;;;;::::0;;46428:6;46418:4;13343:14:::1;13208:2;13343;:14;:::i;:::-;13328:29;::::0;:12:::1;:29;:::i;:::-;14185:38;::::0;-1:-1:-1;;14185:38:0::1;:::i;:::-;14170:54;::::0;-1:-1:-1;;14170:54:0::1;:::i;:::-;46404:19;;;;:::i;:::-;46403:32;;;;:::i;:::-;46384:16;:51:::0;46451:43:::1;::::0;46487:6;;46481:4;;46451:43;::::1;;::::0;::::1;::::0;;;::::1;46213:289:::0;;;:::o;42166:671::-;8149:6;;;;;-1:-1:-1;;;;;8149:6:0;8135:10;:20;8127:42;;;;-1:-1:-1;;;8127:42:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;42306:27:0;::::1;;::::0;;;:15:::1;:27;::::0;;;;;;;:36;;-1:-1:-1;;42306:36:0::1;::::0;::::1;::::0;::::1;::::0;;;::::1;::::0;;;42353:13:::1;:25:::0;;;;;;:37;;;42403:372:::1;;42430:10;:27:::0;;::::1;::::0;::::1;::::0;;-1:-1:-1;42430:27:0;;;;;::::1;::::0;;-1:-1:-1;;;;;;42430:27:0::1;-1:-1:-1::0;;;;;42430:27:0;::::1;;::::0;;42403:372:::1;;;42495:9;42490:274;42514:10;:17:::0;42510:21;::::1;42490:274;;;42578:10;-1:-1:-1::0;;;;;42561:27:0::1;:10;42572:1;42561:13;;;;;;;;:::i;:::-;;::::0;;;::::1;::::0;;;::::1;::::0;-1:-1:-1;;;;;42561:13:0::1;:27:::0;42557:192:::1;;42629:10;42640:17:::0;;:21:::1;::::0;42660:1:::1;::::0;42640:21:::1;:::i;:::-;42629:33;;;;;;;;:::i;:::-;;::::0;;;::::1;::::0;;;::::1;::::0;42613:10:::1;:13:::0;;-1:-1:-1;;;;;42629:33:0;;::::1;::::0;42624:1;;42613:13;::::1;;;;;:::i;:::-;;;;;;;;;:49;;;;;-1:-1:-1::0;;;;;42613:49:0::1;;;;;-1:-1:-1::0;;;;;42613:49:0::1;;;;;;42685:10;:16;;;;;;;:::i;:::-;;::::0;;;::::1;::::0;;;;-1:-1:-1;;42685:16:0;;;;;-1:-1:-1;;;;;;42685:16:0::1;::::0;;;;;42724:5:::1;;42557:192;42533:3:::0;::::1;::::0;::::1;:::i;:::-;;;;42490:274;;;;42403:372;42792:37;::::0;;::::1;;::::0;-1:-1:-1;;;;;42792:37:0;::::1;::::0;::::1;::::0;;;::::1;42166:671:::0;;;:::o;11524:28::-;;;;;;;;;;;;52170:493;8149:6;;;;;-1:-1:-1;;;;;8149:6:0;8135:10;:20;8127:42;;;;-1:-1:-1;;;8127:42:0;;;;;;;:::i;:::-;14103:17:::1;52311:11;:34;52289:109;;;::::0;-1:-1:-1;;;52289:109:0;;20937:2:1;52289:109:0::1;::::0;::::1;20919:21:1::0;20976:2;20956:18;;;20949:30;21015:27;20995:18;;;20988:55;21060:18;;52289:109:0::1;20735:349:1::0;52289:109:0::1;13947:17;52417:10;:32;52409:69;;;::::0;-1:-1:-1;;;52409:69:0;;21291:2:1;52409:69:0::1;::::0;::::1;21273:21:1::0;21330:2;21310:18;;;21303:30;21369:26;21349:18;;;21342:54;21413:18;;52409:69:0::1;21089:348:1::0;52409:69:0::1;52489:24;:38:::0;;;52538:23:::1;:36:::0;;;52590:65:::1;::::0;52639:15:::1;::::0;52564:10;;52516:11;;52590:65:::1;::::0;-1:-1:-1;;52590:65:0::1;52170:493:::0;;:::o;50136:162::-;8149:6;;;;;-1:-1:-1;;;;;8149:6:0;8135:10;:20;8127:42;;;;-1:-1:-1;;;8127:42:0;;;;;;;:::i;:::-;50207:10:::1;:24:::0;;-1:-1:-1;;50207:24:0::1;::::0;;::::1;;::::0;;::::1;::::0;;;::::1;::::0;;;50247:43:::1;::::0;50274:15:::1;::::0;50207:24;50247:43:::1;::::0;-1:-1:-1;;50247:43:0::1;50136:162:::0;:::o;17134:1007::-;8149:6;;;;;-1:-1:-1;;;;;8149:6:0;8135:10;:20;8127:42;;;;-1:-1:-1;;;8127:42:0;;;;;;;:::i;:::-;17189:8:::1;::::0;;;::::1;;;17188:9;17180:41;;;::::0;-1:-1:-1;;;17180:41:0;;21644:2:1;17180:41:0::1;::::0;::::1;21626:21:1::0;21683:2;21663:18;;;21656:30;-1:-1:-1;;;21702:18:1;;;21695:49;21761:18;;17180:41:0::1;21442:343:1::0;17180:41:0::1;17232:6;:63:::0;;-1:-1:-1;;;;;;17232:63:0::1;17252:42;17232:63:::0;;::::1;::::0;;;17355:4:::1;-1:-1:-1::0;17329:32:0;;;:17:::1;:32;::::0;;;;;;;:49;;;;;;;;;-1:-1:-1;;17329:69:0;;;;17409:32;;;:47;;;;:67;13343:14:::1;13208:2;13343;:14;:::i;:::-;13328:29;::::0;:12:::1;:29;:::i;:::-;17489:12;:39:::0;13343:14:::1;13208:2;13343;:14;:::i;:::-;13328:29;::::0;:12:::1;:29;:::i;:::-;14185:38;::::0;-1:-1:-1;;14185:38:0::1;:::i;:::-;14170:54;::::0;-1:-1:-1;;14170:54:0::1;:::i;:::-;17552:10;17539:24;::::0;;;:12:::1;:24;::::0;;;;:37;17620:12:::1;::::0;13343:14:::1;13208:2;13343;:14;:::i;:::-;13328:29;::::0;:12:::1;:29;:::i;:::-;14185:38;::::0;-1:-1:-1;;14185:38:0::1;:::i;:::-;14170:54;::::0;-1:-1:-1;;14170:54:0::1;:::i;:::-;17606:27;;;;:::i;:::-;17587:16;:46:::0;17664:16:::1;::::0;-1:-1:-1;;;;;17664:16:0;;::::1;17646:35;::::0;;;:17:::1;:35;::::0;;;;;:42;;17684:4:::1;-1:-1:-1::0;;17646:42:0;;::::1;::::0;::::1;::::0;;;17717:21:::1;::::0;;::::1;17699:40:::0;;;;;:47;;;::::1;::::0;::::1;::::0;;17775:18:::1;::::0;;;::::1;17757:37:::0;;;;;:44;;;::::1;::::0;::::1;::::0;;17838:4:::1;17812:32:::0;;;;;:39;;;::::1;::::0;::::1;::::0;;17880:10:::1;17862:29:::0;;;;:36;;;;::::1;;::::0;;17917:20:::1;17932:4;17917:14;:20::i;:::-;17909:5;:28:::0;17950:40:::1;17970:10;17982:4;::::0;17950:19:::1;:40::i;:::-;18001;18021:10;18033:4;18039:1;18001:19;:40::i;:::-;18054:8;:15:::0;;-1:-1:-1;;18054:15:0::1;::::0;::::1;::::0;;18120:12:::1;::::0;18085:48:::1;::::0;18108:10:::1;::::0;18054:15;;-1:-1:-1;;;;;;;;;;;18085:48:0;::::1;::::0;598:25:1;;;586:2;571:18;;452:177;18085:48:0::1;;;;;;;;17134:1007::o:0;41254:904::-;8149:6;;;;;-1:-1:-1;;;;;8149:6:0;8135:10;:20;8127:42;;;;-1:-1:-1;;;8127:42:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;41386:30:0;::::1;;::::0;;;:14:::1;:30;::::0;;;;;:40;::::1;;:30;::::0;;::::1;:40;;::::0;41364:107:::1;;;::::0;-1:-1:-1;;;41364:107:0;;11739:2:1;41364:107:0::1;::::0;::::1;11721:21:1::0;11778:2;11758:18;;;11751:30;-1:-1:-1;;;11797:18:1;;;11790:47;11854:18;;41364:107:0::1;11537:341:1::0;41364:107:0::1;-1:-1:-1::0;;;;;41484:30:0;::::1;;::::0;;;:14:::1;:30;::::0;;;;:39;;-1:-1:-1;;41484:39:0::1;::::0;::::1;::::0;::::1;::::0;;;::::1;::::0;;;41536:552:::1;;41563:18;:39:::0;;::::1;::::0;::::1;::::0;;-1:-1:-1;41563:39:0;;;;;::::1;::::0;;-1:-1:-1;;;;;;41563:39:0::1;-1:-1:-1::0;;;;;41563:39:0;::::1;;::::0;;41536:552:::1;;;41643:18;:25:::0;41671:1:::1;-1:-1:-1::0;41635:57:0::1;;;::::0;-1:-1:-1;;;41635:57:0;;18098:2:1;41635:57:0::1;::::0;::::1;18080:21:1::0;18137:2;18117:18;;;18110:30;-1:-1:-1;;;18156:18:1;;;18149:45;18211:18;;41635:57:0::1;17896:339:1::0;41635:57:0::1;41712:9;41707:370;41731:18;:25:::0;41727:29;::::1;41707:370;;;41811:14;-1:-1:-1::0;;;;;41786:39:0::1;:18;41805:1;41786:21;;;;;;;;:::i;:::-;;::::0;;;::::1;::::0;;;::::1;::::0;-1:-1:-1;;;;;41786:21:0::1;:39:::0;41782:280:::1;;41874:18;41915:25:::0;;:29:::1;::::0;41943:1:::1;::::0;41915:29:::1;:::i;:::-;41874:93;;;;;;;;:::i;:::-;;::::0;;;::::1;::::0;;;::::1;::::0;41850:18:::1;:21:::0;;-1:-1:-1;;;;;41874:93:0;;::::1;::::0;41869:1;;41850:21;::::1;;;;;:::i;:::-;;;;;;;;;:117;;;;;-1:-1:-1::0;;;;;41850:117:0::1;;;;;-1:-1:-1::0;;;;;41850:117:0::1;;;;;;41990:18;:24;;;;;;;:::i;:::-;;::::0;;;::::1;::::0;;;;-1:-1:-1;;41990:24:0;;;;;-1:-1:-1;;;;;;41990:24:0::1;::::0;;;;;42037:5:::1;;41782:280;41758:3:::0;::::1;::::0;::::1;:::i;:::-;;;;41707:370;;;;41536:552;42105:45;::::0;;::::1;;::::0;-1:-1:-1;;;;;42105:45:0;::::1;::::0;::::1;::::0;;;::::1;41254:904:::0;;:::o;46933:1887::-;8149:6;;;;;-1:-1:-1;;;;;8149:6:0;8135:10;:20;8127:42;;;;-1:-1:-1;;;8127:42:0;;;;;;;:::i;:::-;47386:13:::1;47371:12;:28;;;;47429:17;47410:16;:36;;;;47471:12;47457:11;:26;;;;47517:21;47494:20;:44;;;;47567:16;47549:15;:34;;;;47613:17;47594:16;:36;;;;47651:8;47641:7;:18;;;;47684:12;47670:11;:26;;;;47724:15;47707:14;:32;;;;47770:18;47750:17;:38;;;;47801:22;47927:16;;47897;;47876:7;;47851:11;;47826:12;;:37;;;;:::i;:::-;:58;;;;:::i;:::-;:88;;;;:::i;:::-;:118;;;;:::i;:::-;47801:143;;47957:23;48098:14;;48073:11;;48044:15;;48010:20;;47983:14;:48;;;;:::i;:::-;:77;;;;:::i;:::-;:102;;;;:::i;:::-;:130;;;;:::i;:::-;47957:156;;13772:3;48134:14;:39;48126:64;;;::::0;-1:-1:-1;;;48126:64:0;;21992:2:1;48126:64:0::1;::::0;::::1;21974:21:1::0;22031:2;22011:18;;;22004:30;-1:-1:-1;;;22050:18:1;;;22043:42;22102:18;;48126:64:0::1;21790:336:1::0;48126:64:0::1;13833:3;48211:15;:41;48203:67;;;::::0;-1:-1:-1;;;48203:67:0;;22333:2:1;48203:67:0::1;::::0;::::1;22315:21:1::0;22372:2;22352:18;;;22345:30;-1:-1:-1;;;22391:18:1;;;22384:43;22444:18;;48203:67:0::1;22131:337:1::0;48203:67:0::1;13472:3;48291:17;;:35;48283:62;;;::::0;-1:-1:-1;;;48283:62:0;;22675:2:1;48283:62:0::1;::::0;::::1;22657:21:1::0;22714:2;22694:18;;;22687:30;-1:-1:-1;;;22733:18:1;;;22726:44;22787:18;;48283:62:0::1;22473:338:1::0;48283:62:0::1;48358:11;:28:::0;;;48397:12:::1;:30:::0;;;48440:28:::1;:60:::0;;-1:-1:-1;;;;48440:60:0::1;-1:-1:-1::0;;;48440:60:0;::::1;;::::0;;::::1;::::0;;;::::1;::::0;;;48717:11:::1;::::0;48518:294:::1;::::0;;23097:25:1;;;23153:2;23138:18;;23131:34;;;23181:18;;;23174:34;;;23239:2;23224:18;;23217:34;;;;23282:3;23267:19;;23260:35;;;23326:3;23311:19;;23304:51;;;;48600:12:0;;48568:17;;48540:13;;48518:294:::1;::::0;23084:3:1;23069:19;48518:294:0::1;;;;;;;47360:1460;;46933:1887:::0;;;;;;;;;;;:::o;8331:152::-;8149:6;;;;;-1:-1:-1;;;;;8149:6:0;8135:10;:20;8127:42;;;;-1:-1:-1;;;8127:42:0;;;;;;;:::i;:::-;8409:27:::1;::::0;-1:-1:-1;;;;;8409:27:0;::::1;::::0;::::1;::::0;;;::::1;8447:28;8466:8;8447:18;:28::i;51609:119::-:0;8149:6;;;;;-1:-1:-1;;;;;8149:6:0;8135:10;:20;8127:42;;;;-1:-1:-1;;;8127:42:0;;;;;;;:::i;:::-;51688:21:::1;:32:::0;;-1:-1:-1;;51688:32:0::1;::::0;::::1;;::::0;;;::::1;::::0;;51609:119::o;11635:29::-;;;;;;;;;;;;23203:251;23260:7;23280:15;23313:9;23308:112;23332:11;:18;23328:22;;23308:112;;;23383:25;23393:11;23405:1;23393:14;;;;;;;;:::i;:::-;;;;;;;;;;;-1:-1:-1;;;;;23393:14:0;23383:9;:25::i;:::-;23372:36;;;;:::i;:::-;;-1:-1:-1;23352:3:0;;;;:::i;:::-;;;;23308:112;;25159:3637;-1:-1:-1;;;;;25325:25:0;;25285:4;25325:25;;;:17;:25;;;;;;25285:4;;25325:25;;;:66;;-1:-1:-1;;;;;;25363:28:0;;;;;;:17;:28;;;;;;;;25325:66;25412:27;;25302:89;;-1:-1:-1;25412:27:0;;;;;;:46;;;25443:15;25412:46;25404:68;;;;-1:-1:-1;;;25404:68:0;;19271:2:1;25404:68:0;;;19253:21:1;19310:1;19290:18;;;19283:29;-1:-1:-1;;;19328:18:1;;;19321:39;19377:18;;25404:68:0;19069:332:1;25404:68:0;-1:-1:-1;;;;;25489:36:0;;;;;;:25;:36;;;;;;;;:56;;;;;25530:15;25529:16;25489:56;25485:149;;;25580:24;;25570:6;:34;;25562:60;;;;-1:-1:-1;;;25562:60:0;;23568:2:1;25562:60:0;;;23550:21:1;23607:2;23587:18;;;23580:30;-1:-1:-1;;;23626:18:1;;;23619:43;23679:18;;25562:60:0;23366:337:1;25562:60:0;-1:-1:-1;;;;;25786:33:0;;;;;;:25;:33;;;;;;;;;:86;;-1:-1:-1;;;;;;25836:36:0;;;;;;:25;:36;;;;;;;;25786:86;25768:321;;;25903:17;;;;;;;25899:179;;;25941:12;:10;:12::i;:::-;25972:17;:25;;-1:-1:-1;;25972:25:0;;;25899:179;;;26038:17;:24;;-1:-1:-1;;26038:24:0;;;;;25899:179;-1:-1:-1;;;;;26119:36:0;;;;;;:25;:36;;;;;;;;:69;;;;;26173:15;26172:16;26119:69;:109;;;;-1:-1:-1;;;;;;26205:23:0;;;;;;:15;:23;;;;;;;;26119:109;:135;;;;-1:-1:-1;26245:9:0;;-1:-1:-1;;;26245:9:0;;;;26119:135;26101:320;;;26346:16;;26318:24;;:45;;;;:::i;:::-;26307:6;:57;;26281:128;;;;-1:-1:-1;;;26281:128:0;;23910:2:1;26281:128:0;;;23892:21:1;23949:1;23929:18;;;23922:29;-1:-1:-1;;;23967:18:1;;;23960:39;24016:18;;26281:128:0;23708:332:1;26281:128:0;-1:-1:-1;;;;;26437:33:0;;;;;;:25;:33;;;;;;;;:53;;;;;26475:15;26474:16;26437:53;26433:144;;;26525:23;;26515:6;:33;;26507:58;;;;-1:-1:-1;;;26507:58:0;;24247:2:1;26507:58:0;;;24229:21:1;24286:2;24266:18;;;24259:30;-1:-1:-1;;;24305:18:1;;;24298:42;24357:18;;26507:58:0;24045:336:1;26507:58:0;-1:-1:-1;;;;;26607:36:0;;;;;;:25;:36;;;;;;;;:69;;;;;26661:15;26660:16;26607:69;:112;;;;-1:-1:-1;20341:17:0;;-1:-1:-1;;;20341:17:0;;;;26693:26;26589:684;;;-1:-1:-1;;;;;26778:23:0;;26746:29;26778:23;;;:15;:23;;;;;;26911:24;;;;27024:32;26794:6;27024:24;:32::i;:::-;26980:27;;:77;;;;:::i;:::-;26950:108;;27091:18;27081:6;:28;;27073:53;;;;-1:-1:-1;;;27073:53:0;;24588:2:1;27073:53:0;;;24570:21:1;24627:2;24607:18;;;24600:30;-1:-1:-1;;;24646:18:1;;;24639:42;24698:18;;27073:53:0;24386:336:1;27073:53:0;-1:-1:-1;27180:66:0;;;;;;;;;27204:15;27180:66;;;;;;;;;27141:120;;;;;;;;-1:-1:-1;27141:120:0;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;26589:684:0;27289:6;;;;27285:87;;;27319:41;27334:6;27342:9;27353:6;27319:14;:41::i;:::-;27312:48;;;;;27285:87;27384:17;27414:16;;27404:6;:27;;;;:::i;:::-;27384:47;;27448:16;:14;:16::i;:::-;27444:59;;;27481:10;:8;:10::i;:::-;27517:25;27545:32;27559:6;27567:9;27545:13;:32::i;:::-;:102;;27638:9;27545:102;;;27589:37;27597:6;27605:9;27616;27589:7;:37::i;:::-;-1:-1:-1;;;;;27683:20:0;;;;;;:12;:20;;;;;;27517:130;;-1:-1:-1;27683:34:0;;27707:9;;27683:34;:::i;:::-;-1:-1:-1;;;;;27660:20:0;;;;;;;:12;:20;;;;;;:57;;;;27754:23;;;;;;;:45;;27781:17;;27754:45;:::i;:::-;-1:-1:-1;;;;;27728:23:0;;;;;;:12;:23;;;;;:71;19928:10;;19942:15;-1:-1:-1;19928:29:0;27830:41;;;;-1:-1:-1;27861:10:0;;;;;;;27830:41;:92;;;;-1:-1:-1;;;;;;27889:33:0;;;;;;:25;:33;;;;;;;;27888:34;27830:92;:146;;;;-1:-1:-1;;;;;;27940:36:0;;;;;;:25;:36;;;;;;;;27939:37;27830:146;27812:275;;;28003:9;:7;:9::i;:::-;28027:12;:10;:12::i;:::-;28054:21;44201:16;;;44179:19;:38;44254:20;;44228:23;:46;-1:-1:-1;44285:20:0;;;;44381:17;;;44358:20;:40;44436:21;;44409:24;:48;44468:21;44090:407;28054:21;-1:-1:-1;;;;;28149:33:0;;;;;;:25;:33;;;;;;;;28145:485;;;28233:16;;28220:30;;:9;:30;:::i;:::-;28199:16;;:52;;;;;;;:::i;:::-;;;;-1:-1:-1;;28352:16:0;;28316:53;;28317:17;28316:53;:::i;:::-;28291:78;;:9;:78;:::i;:::-;28266:20;;:104;;;;;;;:::i;:::-;;;;-1:-1:-1;28145:485:0;;-1:-1:-1;28145:485:0;;-1:-1:-1;;;;;28392:36:0;;;;;;:25;:36;;;;;;;;28388:242;;;28480:16;;28467:30;;:9;:30;:::i;:::-;28445:17;;:53;;;;;;;:::i;:::-;;;;-1:-1:-1;;28600:16:0;;28564:53;;28565:17;28564:53;:::i;:::-;28539:78;;:9;:78;:::i;:::-;28513:21;;:105;;;;;;;:::i;:::-;;;;-1:-1:-1;;28388:242:0;28691:9;-1:-1:-1;;;;;28647:117:0;28670:6;-1:-1:-1;;;;;28647:117:0;-1:-1:-1;;;;;;;;;;;28736:16:0;;28715:17;:38;;;;:::i;:::-;28647:117;;598:25:1;;;586:2;571:18;28647:117:0;;;;;;;-1:-1:-1;28784:4:0;;25159:3637;-1:-1:-1;;;;;;25159:3637:0:o;36507:778::-;36564:7;36606:15;36592:10;;:29;;36584:58;;;;-1:-1:-1;;;36584:58:0;;24929:2:1;36584:58:0;;;24911:21:1;24968:2;24948:18;;;24941:30;-1:-1:-1;;;24987:18:1;;;24980:46;25043:18;;36584:58:0;24727:340:1;36584:58:0;36669:10;;36653:13;36696:16;;;36692:118;;36744:5;36734:30;36751:12;;36734:30;;;;598:25:1;;586:2;571:18;;452:177;36734:30:0;;;;;;;;-1:-1:-1;;36786:12:0;;;36507:778;-1:-1:-1;36507:778:0:o;36692:118::-;36840:1;36826:11;:15;36822:187;;;36897:13;36899:11;36897:13;:::i;:::-;36873:12;;:39;;;;:::i;:::-;36858:12;:54;36822:187;;;36984:11;36960:12;;:37;;;;:::i;:::-;36945:12;:52;36822:187;37025:12;;-1:-1:-1;;;;;;37021:83:0;;;-1:-1:-1;;;;;37067:12:0;:25;37021:83;37149:12;;13343:14;13208:2;13343;:14;:::i;:::-;13328:29;;:12;:29;:::i;:::-;14185:38;;-1:-1:-1;;14185:38:0;:::i;:::-;14170:54;;-1:-1:-1;;14170:54:0;:::i;:::-;37135:27;;;;:::i;:::-;37116:16;:46;37175:24;37193:5;37175:17;:24::i;:::-;37227:5;37217:30;37234:12;;37217:30;;;;598:25:1;;586:2;571:18;;452:177;29242:2463:0;16606:6;:13;;-1:-1:-1;;16606:13:0;16615:4;16606:13;;;29321:18:::1;::::0;16606:6;;-1:-1:-1;;;29321:18:0;::::1;16606:13:::0;29321:18:::1;:37;;29357:1;29321:37;;;29342:12;;29321:37;29291:67;;29369:20;29407:12;;29392:11;;:28;;;;:::i;:::-;29369:51;;29433:28;29464:24;29482:4;29464:9;:24::i;:::-;29433:55;;29501:21;29525;29501:45;;29559:20;29642:12;29626:11;;29616:7;;:21;;;;:::i;:::-;29583:55;::::0;:20;:55:::1;:::i;:::-;29582:72;;;;:::i;:::-;29559:95;;29667:25;29679:12;29667:11;:25::i;:::-;29705;29827:1;29801:12:::0;29734:53:::1;29767:19:::0;29734:20;:53:::1;:::i;:::-;29733:81;;;;:::i;:::-;:96;;;;:::i;:::-;29705:124:::0;-1:-1:-1;29842:20:0::1;29926:12:::0;29865:49:::1;29705:124:::0;29865:20;:49:::1;:::i;:::-;:73;;;;:::i;:::-;29975:16;::::0;;29989:1:::1;29975:16:::0;;;;;::::1;::::0;;29842:96;;-1:-1:-1;29951:21:0::1;::::0;29975:16;;::::1;::::0;::::1;::::0;;::::1;::::0;::::1;;::::0;-1:-1:-1;29975:16:0::1;29951:40;;30020:4;30002;30007:1;30002:7;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;30002:23:0;;::::1;:7;::::0;;::::1;::::0;;;;;:23;30046:9:::1;::::0;30036:7;;30046:9;::::1;::::0;30036:4;;30046:9;;30036:7;::::1;;;;;:::i;:::-;-1:-1:-1::0;;;;;30036:19:0;;::::1;:7;::::0;;::::1;::::0;;;;;:19;30068:6:::1;::::0;:188:::1;::::0;-1:-1:-1;;;30068:188:0;;:6;::::1;::::0;:57:::1;::::0;:188:::1;::::0;30140:12;;30068:6:::1;::::0;30183:4;;30210::::1;::::0;30230:15:::1;::::0;30068:188:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;30269:19;30316:13;30291:21;:39;;;;:::i;:::-;30269:61;;30343:21;30453:11;;30443:7;;:21;;;;:::i;:::-;30394:36;30428:1;30395:19:::0;30394:36:::1;:::i;:::-;30368:62;::::0;30369:12;30368:62:::1;:::i;:::-;:97;;;;:::i;:::-;30343:123:::0;-1:-1:-1;30479:28:0::1;30587:1;30343:123:::0;30511:35:::1;30526:19:::0;30511:11;:35:::1;:::i;:::-;30510:64;;;;:::i;:::-;:79;;;;:::i;:::-;30479:110;;30602:19;30691:13;30669:15;;30649:16;;:36;;;;:::i;:::-;30625:61;::::0;:11;:61:::1;:::i;:::-;30624:81;;;;:::i;:::-;30602:103;;30718:26;30813:13;30792:14;;30772:16;;:35;;;;:::i;:::-;30748:60;::::0;:11;:60:::1;:::i;:::-;30747:80;;;;:::i;:::-;30718:109:::0;-1:-1:-1;30840:24:0::1;30718:109:::0;30925:11;30867:45:::1;30891:20:::0;30867:11;:45:::1;:::i;:::-;:70;;;;:::i;:::-;:102;;;;:::i;:::-;31008:16;::::0;31000:102:::1;::::0;30840:129;;-1:-1:-1;30983:12:0::1;::::0;-1:-1:-1;;;;;31008:16:0;;::::1;::::0;31082:5:::1;::::0;30840:129;;30983:12;31000:102;30983:12;31000:102;30840:129;31008:16;31082:5;31000:102:::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1::0;;31134:21:0::1;::::0;31126:102:::1;::::0;30982:120;;-1:-1:-1;;;;;;31134:21:0::1;::::0;31208:5:::1;::::0;31180:11;;31126:102:::1;::::0;;;31180:11;31134:21;31208:5;31126:102:::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1::0;;31260:18:0::1;::::0;31252:106:::1;::::0;31113:115;;-1:-1:-1;;;;;;31260:18:0::1;::::0;31338:5:::1;::::0;31303:18;;31252:106:::1;::::0;;;31303:18;31260;31338:5;31252:106:::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1::0;31381:5:0::1;::::0;-1:-1:-1;;31403:21:0;;;-1:-1:-1;31399:299:0::1;;31441:6;::::0;31620:17:::1;::::0;31441:245:::1;::::0;-1:-1:-1;;;31441:245:0;;31520:4:::1;31441:245;::::0;::::1;26749:34:1::0;26799:18;;;26792:34;;;31441:6:0::1;26842:18:1::0;;;26835:34;;;26885:18;;;26878:34;-1:-1:-1;;;;;31620:17:0;;::::1;26928:19:1::0;;;26921:44;31656:15:0::1;26981:19:1::0;;;26974:35;31441:6:0;::::1;::::0;:22:::1;::::0;31472:20;;26683:19:1;;31441:245:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;31399:299;-1:-1:-1::0;;16642:6:0;:14;;-1:-1:-1;;16642:14:0;;;-1:-1:-1;;;;;;;;;;;;;29242:2463:0:o;8491:209::-;-1:-1:-1;;;;;8565:22:0;;8557:53;;;;-1:-1:-1;;;8557:53:0;;27533:2:1;8557:53:0;;;27515:21:1;27572:2;27552:18;;;27545:30;-1:-1:-1;;;27591:18:1;;;27584:48;27649:18;;8557:53:0;27331:342:1;8557:53:0;8647:6;;8626:38;;-1:-1:-1;;;;;8626:38:0;;;;8647:6;;;;;8626:38;;;;;8675:6;:17;;-1:-1:-1;;;;;8675:17:0;;;;;-1:-1:-1;;;;;;8675:17:0;;;;;;;;;8491:209::o;24642:382::-;24760:4;24777:17;24807:16;;24797:6;:27;;;;:::i;:::-;-1:-1:-1;;;;;24856:18:0;;;;;;:12;:18;;;;;;24777:47;;-1:-1:-1;24856:32:0;;24777:47;;24856:32;:::i;:::-;-1:-1:-1;;;;;24835:18:0;;;;;;;:12;:18;;;;;;:53;;;;24918:16;;;;;;;:30;;24938:9;;24918:30;:::i;:::-;-1:-1:-1;;;;;24899:16:0;;;;;;;:12;:16;;;;;;;:49;;;;24966:26;;;;;;-1:-1:-1;;;;;;;;;;;24966:26:0;;;24985:6;598:25:1;;586:2;571:18;;452:177;24966:26:0;;;;;;;;-1:-1:-1;25012:4:0;;24642:382;-1:-1:-1;;;;24642:382:0:o;20587:325::-;20696:10;20636:4;20670:37;;;:25;:37;;;;;;;;20669:38;:58;;;;-1:-1:-1;20721:6:0;;;;20720:7;20669:58;:88;;;;;20756:1;20740:13;;:17;20669:88;:112;;;;-1:-1:-1;20770:11:0;;-1:-1:-1;;;20770:11:0;;;;20669:112;:157;;;;;20825:1;20809:12;;20795:11;;:26;;;;:::i;:::-;20794:32;20669:157;:235;;;;;20887:16;;20868;;:35;;;;:::i;:::-;20839:24;20857:4;20839:9;:24::i;:::-;:65;;20653:251;;20587:325;:::o;20971:399::-;-1:-1:-1;;;;;21084:23:0;;21058:4;21084:23;;;:17;:23;;;;;;;;;:48;;-1:-1:-1;;;;;;21111:21:0;;;;;;:17;:21;;;;;;;;21084:48;21080:283;;;-1:-1:-1;21156:5:0;21149:12;;21080:283;21183:21;;;;21179:184;;;-1:-1:-1;21228:4:0;21221:11;;21179:184;-1:-1:-1;;;;;21273:31:0;;;;;;:25;:31;;;;;;;;;:77;;-1:-1:-1;;;;;;21321:29:0;;;;;;:25;:29;;;;;;;;21273:77;21265:86;;;;32615:1994;32777:11;;20495:6;;32738:7;;32777:11;-1:-1:-1;;;20495:6:0;;;;32801:86;;;32863:11;;32848;;:27;;;;:::i;:::-;32837:38;;32801:86;-1:-1:-1;;;;;32903:23:0;;;;;;:15;:23;;;;;;;;32899:68;;;-1:-1:-1;32954:1:0;32899:68;-1:-1:-1;;;;;33028:36:0;;;;;;:25;:36;;;;;;;;33024:436;;;-1:-1:-1;33092:12:0;;-1:-1:-1;;;;;33192:23:0;;;;;;:15;:23;;;;;;;;:36;;;;-1:-1:-1;33219:9:0;;-1:-1:-1;;;33219:9:0;;;;33192:36;33188:168;;;-1:-1:-1;;;;;33264:21:0;;;;;;:13;:21;;;;;;33253:32;;33249:91;;;-1:-1:-1;;;;;;33319:21:0;;;;;;:13;:21;;;;;;33249:91;-1:-1:-1;;;;;33376:24:0;;;;;;:16;:24;;;;;;;;33372:77;;;-1:-1:-1;33432:1:0;33372:77;-1:-1:-1;;;;;33477:33:0;;;;;;:25;:33;;;;;;;;33472:843;;20184:12;;-1:-1:-1;;;20184:12:0;;;;33556:748;;;33602:25;33630:28;33651:6;33630:20;:28::i;:::-;33602:56;-1:-1:-1;33681:21:0;;33677:610;;33763:1;33739:21;:17;33759:1;33739:21;:::i;:::-;:25;;;;:::i;:::-;33726:39;;;;:::i;:::-;20042:13;;33726:39;;-1:-1:-1;20042:13:0;;;;;33862:404;;;33907:16;33926:21;33946:1;33926:17;:21;:::i;:::-;33907:40;-1:-1:-1;33974:18:0;13260:4;33996:22;33907:40;33996:9;:22;:::i;:::-;33995:44;;;;:::i;:::-;33974:65;;34139:103;34196:16;;34182:10;:31;;;;:::i;:::-;34139:11;:103::i;:::-;33880:386;;33862:404;33583:721;33556:748;34327:17;13260:4;34348:22;34361:8;34348:9;:22;:::i;:::-;34347:44;;;;:::i;:::-;34455:4;34434:27;;;;:12;:27;;;;;;34327:64;;-1:-1:-1;34434:41:0;;34327:64;;34434:41;:::i;:::-;34425:4;34404:27;;;;:12;:27;;;;;:71;;;;34539:16;;-1:-1:-1;;;;;34493:65:0;;;-1:-1:-1;;;;;;;;;;;34493:65:0;34526:30;;:9;:30;:::i;:::-;34493:65;;598:25:1;;;586:2;571:18;34493:65:0;;;;;;;34578:23;34591:9;34578;:23;:::i;:::-;34571:30;32615:1994;-1:-1:-1;;;;;;32615:1994:0:o;36027:449::-;36122:6;;36065:18;;;;36122:6;;36117:352;;36145:286;36245:24;;36227:12;;36211;;:29;;;;:::i;:::-;36210:60;;;;:::i;:::-;36167:122;;36308:23;36319:11;36308:10;:23::i;:::-;-1:-1:-1;36350:3:0;;;;:::i;:::-;;;;36403:15;36390:10;;:28;:39;;;;;36426:3;36422:1;:7;36390:39;36145:286;;36445:12;:10;:12::i;:::-;36054:422;;36027:449::o;40184:252::-;40306:15;;40298:23;;:5;:23;:::i;:::-;40285:10;:36;;;;40427:1;40412:11;;:16;;;;;;;:::i;:::-;;;;-1:-1:-1;;;40184:252:0:o;34655:127::-;34717:57;34739:4;11400:42;34761:12;34717:13;:57::i;14:180:1:-;73:6;126:2;114:9;105:7;101:23;97:32;94:52;;;142:1;139;132:12;94:52;-1:-1:-1;165:23:1;;14:180;-1:-1:-1;14:180:1:o;199:248::-;267:6;275;328:2;316:9;307:7;303:23;299:32;296:52;;;344:1;341;334:12;296:52;-1:-1:-1;;367:23:1;;;437:2;422:18;;;409:32;;-1:-1:-1;199:248:1:o;1034:597::-;1146:4;1175:2;1204;1193:9;1186:21;1236:6;1230:13;1279:6;1274:2;1263:9;1259:18;1252:34;1304:1;1314:140;1328:6;1325:1;1322:13;1314:140;;;1423:14;;;1419:23;;1413:30;1389:17;;;1408:2;1385:26;1378:66;1343:10;;1314:140;;;1472:6;1469:1;1466:13;1463:91;;;1542:1;1537:2;1528:6;1517:9;1513:22;1509:31;1502:42;1463:91;-1:-1:-1;1615:2:1;1594:15;-1:-1:-1;;1590:29:1;1575:45;;;;1622:2;1571:54;;1034:597;-1:-1:-1;;;1034:597:1:o;1636:173::-;1704:20;;-1:-1:-1;;;;;1753:31:1;;1743:42;;1733:70;;1799:1;1796;1789:12;1814:254;1882:6;1890;1943:2;1931:9;1922:7;1918:23;1914:32;1911:52;;;1959:1;1956;1949:12;1911:52;1982:29;2001:9;1982:29;:::i;:::-;1972:39;2058:2;2043:18;;;;2030:32;;-1:-1:-1;;;1814:254:1:o;2073:186::-;2132:6;2185:2;2173:9;2164:7;2160:23;2156:32;2153:52;;;2201:1;2198;2191:12;2153:52;2224:29;2243:9;2224:29;:::i;2264:118::-;2350:5;2343:13;2336:21;2329:5;2326:32;2316:60;;2372:1;2369;2362:12;2387:241;2443:6;2496:2;2484:9;2475:7;2471:23;2467:32;2464:52;;;2512:1;2509;2502:12;2464:52;2551:9;2538:23;2570:28;2592:5;2570:28;:::i;2633:383::-;2707:6;2715;2723;2776:2;2764:9;2755:7;2751:23;2747:32;2744:52;;;2792:1;2789;2782:12;2744:52;2815:29;2834:9;2815:29;:::i;:::-;2805:39;;2894:2;2883:9;2879:18;2866:32;2907:28;2929:5;2907:28;:::i;:::-;2633:383;;2954:5;;-1:-1:-1;;;3006:2:1;2991:18;;;;2978:32;;2633:383::o;3021:328::-;3098:6;3106;3114;3167:2;3155:9;3146:7;3142:23;3138:32;3135:52;;;3183:1;3180;3173:12;3135:52;3206:29;3225:9;3206:29;:::i;:::-;3196:39;;3254:38;3288:2;3277:9;3273:18;3254:38;:::i;:::-;3244:48;;3339:2;3328:9;3324:18;3311:32;3301:42;;3021:328;;;;;:::o;3543:315::-;3608:6;3616;3669:2;3657:9;3648:7;3644:23;3640:32;3637:52;;;3685:1;3682;3675:12;3637:52;3708:29;3727:9;3708:29;:::i;:::-;3698:39;;3787:2;3776:9;3772:18;3759:32;3800:28;3822:5;3800:28;:::i;:::-;3847:5;3837:15;;;3543:315;;;;;:::o;3863:409::-;3949:6;3957;3965;3973;4026:3;4014:9;4005:7;4001:23;3997:33;3994:53;;;4043:1;4040;4033:12;3994:53;4066:29;4085:9;4066:29;:::i;:::-;4056:39;;4114:38;4148:2;4137:9;4133:18;4114:38;:::i;:::-;4104:48;;4171:38;4205:2;4194:9;4190:18;4171:38;:::i;:::-;4161:48;;4228:38;4262:2;4251:9;4247:18;4228:38;:::i;:::-;4218:48;;3863:409;;;;;;;:::o;4277:260::-;4345:6;4353;4406:2;4394:9;4385:7;4381:23;4377:32;4374:52;;;4422:1;4419;4412:12;4374:52;4445:29;4464:9;4445:29;:::i;:::-;4435:39;;4493:38;4527:2;4516:9;4512:18;4493:38;:::i;:::-;4483:48;;4277:260;;;;;:::o;4542:309::-;4607:6;4615;4668:2;4656:9;4647:7;4643:23;4639:32;4636:52;;;4684:1;4681;4674:12;4636:52;4720:9;4707:23;4697:33;;4780:2;4769:9;4765:18;4752:32;4793:28;4815:5;4793:28;:::i;5109:377::-;5183:6;5191;5199;5252:2;5240:9;5231:7;5227:23;5223:32;5220:52;;;5268:1;5265;5258:12;5220:52;5307:9;5294:23;5326:28;5348:5;5326:28;:::i;:::-;5373:5;5425:2;5410:18;;5397:32;;-1:-1:-1;5476:2:1;5461:18;;;5448:32;;5109:377;-1:-1:-1;;;5109:377:1:o;5491:931::-;5637:6;5645;5653;5661;5669;5677;5685;5693;5701;5709;5717:7;5771:3;5759:9;5750:7;5746:23;5742:33;5739:53;;;5788:1;5785;5778:12;5739:53;5824:9;5811:23;5801:33;;5881:2;5870:9;5866:18;5853:32;5843:42;;5932:2;5921:9;5917:18;5904:32;5894:42;;5983:2;5972:9;5968:18;5955:32;5945:42;;6034:3;6023:9;6019:19;6006:33;5996:43;;6086:3;6075:9;6071:19;6058:33;6048:43;;6138:3;6127:9;6123:19;6110:33;6100:43;;6190:3;6179:9;6175:19;6162:33;6152:43;;6242:3;6231:9;6227:19;6214:33;6204:43;;6294:3;6283:9;6279:19;6266:33;6256:43;;6349:3;6338:9;6334:19;6321:33;6363:28;6385:5;6363:28;:::i;:::-;6411:5;6400:16;;;5491:931;;;;;;;;;;;;;;:::o;6653:332::-;6855:2;6837:21;;;6894:1;6874:18;;;6867:29;-1:-1:-1;;;6927:2:1;6912:18;;6905:39;6976:2;6961:18;;6653:332::o;7684:380::-;7763:1;7759:12;;;;7806;;;7827:61;;7881:4;7873:6;7869:17;7859:27;;7827:61;7934:2;7926:6;7923:14;7903:18;7900:38;7897:161;;7980:10;7975:3;7971:20;7968:1;7961:31;8015:4;8012:1;8005:15;8043:4;8040:1;8033:15;8069:127;8130:10;8125:3;8121:20;8118:1;8111:31;8161:4;8158:1;8151:15;8185:4;8182:1;8175:15;8201:184;8271:6;8324:2;8312:9;8303:7;8299:23;8295:32;8292:52;;;8340:1;8337;8330:12;8292:52;-1:-1:-1;8363:16:1;;8201:184;-1:-1:-1;8201:184:1:o;8390:127::-;8451:10;8446:3;8442:20;8439:1;8432:31;8482:4;8479:1;8472:15;8506:4;8503:1;8496:15;8522:128;8562:3;8593:1;8589:6;8586:1;8583:13;8580:39;;;8599:18;;:::i;:::-;-1:-1:-1;8635:9:1;;8522:128::o;8655:135::-;8694:3;8715:17;;;8712:43;;8735:18;;:::i;:::-;-1:-1:-1;8782:1:1;8771:13;;8655:135::o;8795:335::-;8997:2;8979:21;;;9036:2;9016:18;;;9009:30;-1:-1:-1;;;9070:2:1;9055:18;;9048:41;9121:2;9106:18;;8795:335::o;9135:168::-;9175:7;9241:1;9237;9233:6;9229:14;9226:1;9223:21;9218:1;9211:9;9204:17;9200:45;9197:71;;;9248:18;;:::i;:::-;-1:-1:-1;9288:9:1;;9135:168::o;9308:346::-;9510:2;9492:21;;;9549:2;9529:18;;;9522:30;-1:-1:-1;;;9583:2:1;9568:18;;9561:52;9645:2;9630:18;;9308:346::o;9659:125::-;9699:4;9727:1;9724;9721:8;9718:34;;;9732:18;;:::i;:::-;-1:-1:-1;9769:9:1;;9659:125::o;9789:422::-;9878:1;9921:5;9878:1;9935:270;9956:7;9946:8;9943:21;9935:270;;;10015:4;10011:1;10007:6;10003:17;9997:4;9994:27;9991:53;;;10024:18;;:::i;:::-;10074:7;10064:8;10060:22;10057:55;;;10094:16;;;;10057:55;10173:22;;;;10133:15;;;;9935:270;;;9939:3;9789:422;;;;;:::o;10216:806::-;10265:5;10295:8;10285:80;;-1:-1:-1;10336:1:1;10350:5;;10285:80;10384:4;10374:76;;-1:-1:-1;10421:1:1;10435:5;;10374:76;10466:4;10484:1;10479:59;;;;10552:1;10547:130;;;;10459:218;;10479:59;10509:1;10500:10;;10523:5;;;10547:130;10584:3;10574:8;10571:17;10568:43;;;10591:18;;:::i;:::-;-1:-1:-1;;10647:1:1;10633:16;;10662:5;;10459:218;;10761:2;10751:8;10748:16;10742:3;10736:4;10733:13;10729:36;10723:2;10713:8;10710:16;10705:2;10699:4;10696:12;10692:35;10689:77;10686:159;;;-1:-1:-1;10798:19:1;;;10830:5;;10686:159;10877:34;10902:8;10896:4;10877:34;:::i;:::-;10947:6;10943:1;10939:6;10935:19;10926:7;10923:32;10920:58;;;10958:18;;:::i;:::-;10996:20;;10216:806;-1:-1:-1;;;10216:806:1:o;11027:131::-;11087:5;11116:36;11143:8;11137:4;11116:36;:::i;11163:127::-;11224:10;11219:3;11215:20;11212:1;11205:31;11255:4;11252:1;11245:15;11279:4;11276:1;11269:15;11295:112;11327:1;11353;11343:35;;11358:18;;:::i;:::-;-1:-1:-1;11392:9:1;;11295:112::o;11412:120::-;11452:1;11478;11468:35;;11483:18;;:::i;:::-;-1:-1:-1;11517:9:1;;11412:120::o;11883:127::-;11944:10;11939:3;11935:20;11932:1;11925:31;11975:4;11972:1;11965:15;11999:4;11996:1;11989:15;12294:245;12361:6;12414:2;12402:9;12393:7;12389:23;12385:32;12382:52;;;12430:1;12427;12420:12;12382:52;12462:9;12456:16;12481:28;12503:5;12481:28;:::i;14970:147::-;15008:3;-1:-1:-1;;;;;15029:30:1;;15026:56;;15062:18;;:::i;15122:179::-;15157:3;15199:1;15181:16;15178:23;15175:120;;;15245:1;15242;15239;15224:23;-1:-1:-1;15282:1:1;15276:8;15271:3;15267:18;15175:120;15122:179;:::o;15438:346::-;15548:2;15529:13;;-1:-1:-1;;15525:27:1;15513:40;;15583:18;15568:34;;15604:22;;;15565:62;15562:185;;;15669:10;15664:3;15660:20;15657:1;15650:31;15704:4;15701:1;15694:15;15732:4;15729:1;15722:15;15562:185;15763:2;15756:22;-1:-1:-1;;15438:346:1:o;15789:671::-;15828:3;15870:4;15852:16;15849:26;15846:39;;;15789:671;:::o;15846:39::-;15912:2;15906:9;-1:-1:-1;;15977:16:1;15973:25;;15970:1;15906:9;15949:50;16028:4;16022:11;16052:16;16087:18;16158:2;16151:4;16143:6;16139:17;16136:25;16131:2;16123:6;16120:14;16117:45;16114:58;;;16165:5;;;;;15789:671;:::o;16114:58::-;16202:6;16196:4;16192:17;16181:28;;16238:3;16232:10;16265:2;16257:6;16254:14;16251:27;;;16271:5;;;;;;15789:671;:::o;16251:27::-;16355:2;16336:16;16330:4;16326:27;16322:36;16315:4;16306:6;16301:3;16297:16;16293:27;16290:69;16287:82;;;16362:5;;;;;;15789:671;:::o;16287:82::-;16378:57;16429:4;16420:6;16412;16408:19;16404:30;16398:4;16378:57;:::i;:::-;-1:-1:-1;16451:3:1;;15789:671;-1:-1:-1;;;;;15789:671:1:o;18240:136::-;18279:3;18307:5;18297:39;;18316:18;;:::i;:::-;-1:-1:-1;;;18352:18:1;;18240:136::o;25072:::-;25107:3;-1:-1:-1;;;25128:22:1;;25125:48;;25153:18;;:::i;:::-;-1:-1:-1;25193:1:1;25189:13;;25072:136::o;25213:980::-;25475:4;25523:3;25512:9;25508:19;25554:6;25543:9;25536:25;25580:2;25618:6;25613:2;25602:9;25598:18;25591:34;25661:3;25656:2;25645:9;25641:18;25634:31;25685:6;25720;25714:13;25751:6;25743;25736:22;25789:3;25778:9;25774:19;25767:26;;25828:2;25820:6;25816:15;25802:29;;25849:1;25859:195;25873:6;25870:1;25867:13;25859:195;;;25938:13;;-1:-1:-1;;;;;25934:39:1;25922:52;;26029:15;;;;25994:12;;;;25970:1;25888:9;25859:195;;;-1:-1:-1;;;;;;;26110:32:1;;;;26105:2;26090:18;;26083:60;-1:-1:-1;;;26174:3:1;26159:19;26152:35;26071:3;25213:980;-1:-1:-1;;;25213:980:1:o;27020:306::-;27108:6;27116;27124;27177:2;27165:9;27156:7;27152:23;27148:32;27145:52;;;27193:1;27190;27183:12;27145:52;27222:9;27216:16;27206:26;;27272:2;27261:9;27257:18;27251:25;27241:35;;27316:2;27305:9;27301:18;27295:25;27285:35;;27020:306;;;;;:::o

Swarm Source

ipfs://bdd3d9b92984f07876687dfec4428e7abeb6447e786c0591623baa37c5646edd
Block Transaction Gas Used Reward
Age Block Fee Address BC Fee Address Voting Power Jailed Incoming
Block Uncle Number Difficulty Gas Used Reward
Loading
Loading
Make sure to use the "Vote Down" button for any spammy posts, and the "Vote Up" for interesting conversations.