ETH Price: $2,277.83 (+1.51%)

Contract

0xa85BcBc260300253852DdC11bbAe2D565424e179
 

Overview

ETH Balance

0.000072702643321547 ETH

Eth Value

$0.17 (@ $2,277.83/ETH)

Token Holdings

Multichain Info

No addresses found
Transaction Hash
Method
Block
From
To
Approve200560132024-06-09 18:19:4790 days ago1717957187IN
0xa85BcBc2...65424e179
0 ETH0.000156555.94690641
Approve200560132024-06-09 18:19:4790 days ago1717957187IN
0xa85BcBc2...65424e179
0 ETH0.000274895.94690641
Approve170892882023-04-20 17:53:11506 days ago1682013191IN
0xa85BcBc2...65424e179
0 ETH0.0025806255.79855422
Approve158869712022-11-03 4:00:59674 days ago1667448059IN
0xa85BcBc2...65424e179
0 ETH0.0003724715.33531031
Transfer155483952022-09-16 19:56:47721 days ago1663358207IN
0xa85BcBc2...65424e179
0 ETH0.0058309210.27304143
Approve147722982022-05-14 7:27:25847 days ago1652513245IN
0xa85BcBc2...65424e179
0 ETH0.0013437928.85351897
Approve147146712022-05-05 2:37:12856 days ago1651718232IN
0xa85BcBc2...65424e179
0 ETH0.0019064840.93536803
Approve147145262022-05-05 2:07:19856 days ago1651716439IN
0xa85BcBc2...65424e179
0 ETH0.0030107564.64585678
Approve146775252022-04-29 6:08:49862 days ago1651212529IN
0xa85BcBc2...65424e179
0 ETH0.0019371941.59472527
Approve146722052022-04-28 9:57:39863 days ago1651139859IN
0xa85BcBc2...65424e179
0 ETH0.0017206936.94620315
Approve146626392022-04-26 22:00:31864 days ago1651010431IN
0xa85BcBc2...65424e179
0 ETH0.0011054445.51197345
Approve146344172022-04-22 11:34:30869 days ago1650627270IN
0xa85BcBc2...65424e179
0 ETH0.0013971930
Approve145937592022-04-16 2:41:53875 days ago1650076913IN
0xa85BcBc2...65424e179
0 ETH0.0014733631.63556184
Approve145877742022-04-15 4:14:48876 days ago1649996088IN
0xa85BcBc2...65424e179
0 ETH0.0013360428.68709623
Approve145877462022-04-15 4:10:20876 days ago1649995820IN
0xa85BcBc2...65424e179
0 ETH0.0027191658.38506473
Approve145027742022-04-01 21:26:58889 days ago1648848418IN
0xa85BcBc2...65424e179
0 ETH0.0038772983.25201631
Give Me Welfare ...144072612022-03-18 0:43:25904 days ago1647564205IN
0xa85BcBc2...65424e179
0 ETH0.004804372.51126531
Approve143965222022-03-16 8:28:19906 days ago1647419299IN
0xa85BcBc2...65424e179
0 ETH0.0010973223.56150368
Approve143780632022-03-13 11:34:03909 days ago1647171243IN
0xa85BcBc2...65424e179
0 ETH0.0008430918.1025793
Give Me Welfare ...143721582022-03-12 13:17:34910 days ago1647091054IN
0xa85BcBc2...65424e179
0 ETH0.0010451431.46496738
Approve143464792022-03-08 13:31:06914 days ago1646746266IN
0xa85BcBc2...65424e179
0 ETH0.0010025621.52666019
Approve143260542022-03-05 9:28:58917 days ago1646472538IN
0xa85BcBc2...65424e179
0 ETH0.0009849821.14937307
Give Me Welfare ...143135702022-03-03 10:47:56919 days ago1646304476IN
0xa85BcBc2...65424e179
0 ETH0.0021606432.61048197
Approve142831872022-02-26 17:49:23924 days ago1645897763IN
0xa85BcBc2...65424e179
0 ETH0.0016666835.78651515
Approve142329612022-02-18 23:17:02931 days ago1645226222IN
0xa85BcBc2...65424e179
0 ETH0.003039465.26119544
View all transactions

Latest 25 internal transactions (View All)

Advanced mode:
Parent Transaction Hash Block From To
155483952022-09-16 19:56:47721 days ago1663358207
0xa85BcBc2...65424e179
0.00057045 ETH
155483952022-09-16 19:56:47721 days ago1663358207
0xa85BcBc2...65424e179
0.00342273 ETH
155483952022-09-16 19:56:47721 days ago1663358207
0xa85BcBc2...65424e179
0.00342273 ETH
155483952022-09-16 19:56:47721 days ago1663358207
0xa85BcBc2...65424e179
0.00342273 ETH
155483952022-09-16 19:56:47721 days ago1663358207
0xa85BcBc2...65424e179
0.0000727 ETH
155483952022-09-16 19:56:47721 days ago1663358207
0xa85BcBc2...65424e179
0.00028522 ETH
155483952022-09-16 19:56:47721 days ago1663358207
0xa85BcBc2...65424e179
0.0111239 ETH
150216462022-06-25 3:19:25805 days ago1656127165
0xa85BcBc2...65424e179
0.00077173 ETH
150216462022-06-25 3:19:25805 days ago1656127165
0xa85BcBc2...65424e179
0.00463039 ETH
150216462022-06-25 3:19:25805 days ago1656127165
0xa85BcBc2...65424e179
0.00463039 ETH
150216462022-06-25 3:19:25805 days ago1656127165
0xa85BcBc2...65424e179
0.00463039 ETH
150216462022-06-25 3:19:25805 days ago1656127165
0xa85BcBc2...65424e179
0.00038586 ETH
150216462022-06-25 3:19:25805 days ago1656127165
0xa85BcBc2...65424e179
0.01504876 ETH
147146742022-05-05 2:38:31856 days ago1651718311
0xa85BcBc2...65424e179
0.00078567 ETH
147146742022-05-05 2:38:31856 days ago1651718311
0xa85BcBc2...65424e179
0.00471402 ETH
147146742022-05-05 2:38:31856 days ago1651718311
0xa85BcBc2...65424e179
0.00471402 ETH
147146742022-05-05 2:38:31856 days ago1651718311
0xa85BcBc2...65424e179
0.00471402 ETH
147146742022-05-05 2:38:31856 days ago1651718311
0xa85BcBc2...65424e179
0.00039283 ETH
147146742022-05-05 2:38:31856 days ago1651718311
0xa85BcBc2...65424e179
0.01532057 ETH
147145442022-05-05 2:10:35856 days ago1651716635
0xa85BcBc2...65424e179
0.00080519 ETH
147145442022-05-05 2:10:35856 days ago1651716635
0xa85BcBc2...65424e179
0.00483115 ETH
147145442022-05-05 2:10:35856 days ago1651716635
0xa85BcBc2...65424e179
0.00483115 ETH
147145442022-05-05 2:10:35856 days ago1651716635
0xa85BcBc2...65424e179
0.00483115 ETH
147145442022-05-05 2:10:35856 days ago1651716635
0xa85BcBc2...65424e179
0.00040259 ETH
147145442022-05-05 2:10:35856 days ago1651716635
0xa85BcBc2...65424e179
0.01570126 ETH
View All Internal Transactions
Loading...
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
HitmanWolf

Compiler Version
v0.8.11+commit.d7f03943

Optimization Enabled:
Yes with 5000 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

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

// SPDX-License-Identifier: MIT
pragma solidity >=0.6.0 <0.9.0;

abstract contract Context {
    function _msgSender() internal view returns (address payable) {
        return payable(msg.sender);
    }

    function _msgData() internal view returns (bytes memory) {
        this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691
        return msg.data;
    }
}

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

  /**
   * @dev Returns the token decimals.
   */
  function decimals() external view returns (uint8);

  /**
   * @dev Returns the token symbol.
   */
  function symbol() external view returns (string memory);

  /**
  * @dev Returns the token name.
  */
  function name() external view returns (string memory);

  /**
   * @dev Returns the bep token owner.
   */
  function getOwner() external view returns (address);

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

  /**
   * @dev Moves `amount` tokens from the caller's account to `recipient`.
   *
   * Returns a boolean value indicating whether the operation succeeded.
   *
   * Emits a {Transfer} event.
   */
  function transfer(address recipient, uint256 amount) external returns (bool);

  /**
   * @dev Returns the remaining number of tokens that `spender` will be
   * allowed to spend on behalf of `owner` through {transferFrom}. This is
   * zero by default.
   *
   * This value changes when {approve} or {transferFrom} are called.
   */
  function allowance(address _owner, address spender) external view returns (uint256);

  /**
   * @dev Sets `amount` as the allowance of `spender` over the caller's tokens.
   *
   * Returns a boolean value indicating whether the operation succeeded.
   *
   * IMPORTANT: Beware that changing an allowance with this method brings the risk
   * that someone may use both the old and the new allowance by unfortunate
   * transaction ordering. One possible solution to mitigate this race
   * condition is to first reduce the spender's allowance to 0 and set the
   * desired value afterwards:
   * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729
   *
   * Emits an {Approval} event.
   */
  function approve(address spender, uint256 amount) external returns (bool);

  /**
   * @dev Moves `amount` tokens from `sender` to `recipient` using the
   * allowance mechanism. `amount` is then deducted from the caller's
   * allowance.
   *
   * Returns a boolean value indicating whether the operation succeeded.
   *
   * Emits a {Transfer} event.
   */
  function transferFrom(address sender, address recipient, uint256 amount) external returns (bool);

  /**
   * @dev Emitted when `value` tokens are moved from one account (`from`) to
   * another (`to`).
   *
   * Note that `value` may be zero.
   */
  event Transfer(address indexed from, address indexed to, uint256 value);

  /**
   * @dev Emitted when the allowance of a `spender` for an `owner` is set by
   * a call to {approve}. `value` is the new allowance.
   */
  event Approval(address indexed owner, address indexed spender, uint256 value);
}

interface IFactoryV2 {
    event PairCreated(address indexed token0, address indexed token1, address lpPair, uint);
    function getPair(address tokenA, address tokenB) external view returns (address lpPair);
    function createPair(address tokenA, address tokenB) external returns (address lpPair);
}

interface IV2Pair {
    function factory() external view returns (address);
    function getReserves() external view returns (uint112 reserve0, uint112 reserve1, uint32 blockTimestampLast);
}

interface IRouter01 {
    function factory() external pure returns (address);
    function WETH() external pure returns (address);
    function addLiquidityETH(
        address token,
        uint amountTokenDesired,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline
    ) external payable returns (uint amountToken, uint amountETH, uint liquidity);
    function quote(uint amountA, uint reserveA, uint reserveB) external pure returns (uint amountB);
    function getAmountOut(uint amountIn, uint reserveIn, uint reserveOut) external pure returns (uint amountOut);
    function getAmountIn(uint amountOut, uint reserveIn, uint reserveOut) external pure returns (uint amountIn);
    function getAmountsOut(uint amountIn, address[] calldata path) external view returns (uint[] memory amounts);
    function getAmountsIn(uint amountOut, address[] calldata path) external view returns (uint[] memory amounts);
}

interface IRouter02 is IRouter01 {
    function swapExactTokensForETHSupportingFeeOnTransferTokens(
        uint amountIn,
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external;
    function swapExactETHForTokensSupportingFeeOnTransferTokens(
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external payable;
}

interface AntiSnipe {
    function checkUser(address from, address to, uint256 amt) external returns (bool);
    function setLaunch(address _initialLpPair, uint32 _liqAddBlock, uint64 _liqAddStamp, uint8 dec) external;
    function setLpPair(address pair, bool enabled) external;
    function setProtections(bool _as, bool _ag, bool _ab, bool _algo) external;
    function setGasPriceLimit(uint256 gas) external;
    function removeSniper(address account) external;
    function getSniperAmt() external view returns (uint256);
    function removeBlacklisted(address account) external;
    function isBlacklisted(address account) external view returns (bool);
    function transfer(address sender) external;
    function setBlacklistEnabled(address account, bool enabled) external;
    function setBlacklistEnabledMultiple(address[] memory accounts, bool enabled) external;
}

interface Cashier {
    function whomst() external view returns(address);
    function whomst_router() external view returns (address);
    function whomst_token() external view returns (address);
    function setReflectionCriteria(uint256 _minPeriod, uint256 _minReflection) external;
    function tally(address shareholder, uint256 amount) external;
    function load() external payable;
    function cashout(uint256 gas) external;
    function giveMeWelfarePlease(address hobo) external;
    function getTotalDistributed() external view returns(uint256);
    function getShareholderInfo(address shareholder) external view returns(string memory, string memory, string memory, string memory);
    function getShareholderRealized(address shareholder) external view returns (uint256);
    function getPendingRewards(address shareholder) external view returns (uint256);
    function initialize() external;
}

contract HitmanWolf is IERC20 {
    // Ownership moved to in-contract for customizability.
    address private _owner;

    mapping (address => uint256) _tOwned;
    mapping (address => bool) lpPairs;
    uint256 private timeSinceLastPair = 0;
    mapping (address => mapping (address => uint256)) _allowances;
    mapping (address => bool) _isFeeExcluded;
    mapping (address => bool) _isDividendExcluded;
    mapping (address => bool) private _liquidityHolders;
    mapping (address => uint256) firstBuy;

    uint256 private startingSupply = 100_000_000_000_000;

    string constant private _name = "Hitman Wolf";
    string constant private _symbol = "HITMAN";
    uint8 private _decimals = 9;

    uint256 private _tTotal = startingSupply * (10 ** _decimals);

    struct Fees {
        uint16 buyFee;
        uint16 sellFee;
        uint16 transferFee;
    }

    struct StaticValuesStruct {
        uint16 maxBuyTaxes;
        uint16 maxSellTaxes;
        uint16 maxTransferTaxes;
        uint16 masterTaxDivisor;
    }

    struct Ratios {
        uint16 rewards;
        uint16 liquidity;
        uint16 marketing;
        uint16 team;
        uint16 treasury;
        uint16 total;
    }

    Fees public _taxRates = Fees({
        buyFee: 1100,
        sellFee: 1400,
        transferFee: 2000
        });

    Ratios public _ratios = Ratios({
        rewards: 550,
        liquidity: 200,
        marketing: 1050,
        team: 500,
        treasury: 200,
        total: 2500
        });

    StaticValuesStruct public staticVals = StaticValuesStruct({
        maxBuyTaxes: 2500,
        maxSellTaxes: 2500,
        maxTransferTaxes: 2500,
        masterTaxDivisor: 10000
        });

    IRouter02 public dexRouter;
    address public lpPair;

    address private WETH;
    address public DEAD = 0x000000000000000000000000000000000000dEaD;

    struct TaxWallets {
        address payable marketing;
        address payable treasury;
        address payable team;
    }

    TaxWallets public _taxWallets = TaxWallets({
        marketing: payable(0xbcE0c6f1f870D2a062313c352d8e68b7Bad21BD3),
        treasury: payable(0xbcE0c6f1f870D2a062313c352d8e68b7Bad21BD3),
        team: payable(0xbcE0c6f1f870D2a062313c352d8e68b7Bad21BD3)
        });

    uint256 private _maxTxAmount = (_tTotal * 4) / 1000;
    uint256 private _maxWalletSize = (_tTotal * 16) / 1000;

    Cashier reflector;
    uint256 reflectorGas = 300000;

    bool public contractSwapEnabled = false;
    bool public processReflect = false;
    uint256 public swapThreshold = (_tTotal * 5) / 10000;
    uint256 public swapAmount = (_tTotal * 10) / 10000;
    bool inSwap;

    bool public tradingEnabled = false;
    bool public _hasLiqBeenAdded = false;
    AntiSnipe antiSnipe;

    bool public antiDump1Enabled = true;
    bool public antiDump2Enabled = true;
    uint256 public antiDump1TimeLimit = 10 minutes;
    uint256 public antiDump2TimeLimit = 48 hours;
    uint256 public antiDump1TaxFee = 3000;
    uint256 public antiDump2TaxFee = 2500;

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

    modifier onlyOwner() {
        require(_owner == msg.sender, "Ownable: caller is not the owner");
        _;
    }

    event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);
    event ContractSwapEnabledUpdated(bool enabled);
    event AutoLiquify(uint256 amountCurrency, uint256 amountTokens);
    event SniperCaught(address sniperAddress);

    constructor () payable {
        address msgSender = msg.sender;
        _tOwned[msgSender] = _tTotal;

        _owner = msgSender;

        if (block.chainid == 56) {
            dexRouter = IRouter02(0x10ED43C718714eb63d5aA57B78B54704E256024E);
        } else if (block.chainid == 97) {
            dexRouter = IRouter02(0x9Ac64Cc6e4415144C455BD8E4837Fea55603e5c3);
        } else if (block.chainid == 1 || block.chainid == 4) {
            dexRouter = IRouter02(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D);
        } else {
            revert();
        }
        lpPair = IFactoryV2(dexRouter.factory()).createPair(dexRouter.WETH(), address(this));
        lpPairs[lpPair] = true;
        _approve(msg.sender, address(dexRouter), type(uint256).max);
        _approve(address(this), address(dexRouter), type(uint256).max);

        WETH = dexRouter.WETH();

        _isFeeExcluded[owner()] = true;
        _isFeeExcluded[address(this)] = true;
        _isDividendExcluded[owner()] = true;
        _isDividendExcluded[lpPair] = true;
        _isDividendExcluded[address(this)] = true;
        _isDividendExcluded[DEAD] = true;
        _isDividendExcluded[0x0000000000000000000000000000000000000000] = true;

        emit Transfer(0x0000000000000000000000000000000000000000, msg.sender, _tTotal);
        emit OwnershipTransferred(address(0), msgSender);
    }

//===============================================================================================================
//===============================================================================================================
//===============================================================================================================
    // Ownable removed as a lib and added here to allow for custom transfers and renouncements.
    // This allows for removal of ownership privileges from the owner once renounced or transferred.
    function owner() public view returns (address) {
        return _owner;
    }

    function transferOwner(address newOwner) external onlyOwner {
        require(newOwner != address(0), "Call renounceOwnership to transfer owner to the zero address.");
        require(newOwner != DEAD, "Call renounceOwnership to transfer owner to the zero address.");
        _isFeeExcluded[_owner] = false;
        _isDividendExcluded[_owner] = false;
        _isFeeExcluded[newOwner] = true;
        _isDividendExcluded[newOwner] = true;
        
        if(_tOwned[_owner] > 0) {
            _transfer(_owner, newOwner, _tOwned[_owner]);
        }
        
        _owner = newOwner;
        emit OwnershipTransferred(_owner, newOwner);
        
    }

    function renounceOwnership() public virtual onlyOwner {
        _isFeeExcluded[_owner] = false;
        _isDividendExcluded[_owner] = false;
        _owner = address(0);
        emit OwnershipTransferred(_owner, address(0));
    }
//===============================================================================================================
//===============================================================================================================
//===============================================================================================================

    receive() external payable {}

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

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

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

        _allowances[sender][spender] = amount;
        emit Approval(sender, spender, amount);
    }

    function approveContractContingency() public onlyOwner returns (bool) {
        _approve(address(this), address(dexRouter), type(uint256).max);
        return true;
    }

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

    function transferFrom(address sender, address recipient, uint256 amount) external override returns (bool) {
        if (_allowances[sender][msg.sender] != type(uint256).max) {
            _allowances[sender][msg.sender] -= amount;
        }

        return _transfer(sender, recipient, amount);
    }

    function setBlacklistEnabled(address account, bool enabled) external onlyOwner {
        antiSnipe.setBlacklistEnabled(account, enabled);
        setDividendExcluded(account, enabled);
    }

    function setBlacklistEnabledMultiple(address[] memory accounts, bool enabled) external onlyOwner {
        antiSnipe.setBlacklistEnabledMultiple(accounts, enabled);
        for(uint256 i = 0; i < accounts.length; i++){
            setDividendExcluded(accounts[i], enabled);
        }
    }

    function isBlacklisted(address account) public view returns (bool) {
        return antiSnipe.isBlacklisted(account);
    }

    function isFeeExcluded(address account) public view returns(bool) {
        return _isFeeExcluded[account];
    }

    function isDividendExcluded(address account) public view returns(bool) {
        return _isDividendExcluded[account];
    }

    function setInitializers(address aInitializer, address cInitializer) external onlyOwner {
        require(cInitializer != address(this) && aInitializer != address(this) && cInitializer != aInitializer);
        reflector = Cashier(cInitializer);
        antiSnipe = AntiSnipe(aInitializer);
    }

    function removeSniper(address account) external onlyOwner() {
        antiSnipe.removeSniper(account);
    }

    function removeBlacklisted(address account) external onlyOwner() {
        antiSnipe.removeBlacklisted(account);
    }

    function getSniperAmt() public view returns (uint256) {
        return antiSnipe.getSniperAmt();
    }

    function setProtectionSettings(bool _antiSnipe, bool _antiGas, bool _antiBlock, bool _antiSpecial) external onlyOwner() {
        antiSnipe.setProtections(_antiSnipe, _antiGas, _antiBlock, _antiSpecial);
    }

    function setGasPriceLimit(uint256 gas) external onlyOwner {
        require(gas >= 75, "Too low.");
        antiSnipe.setGasPriceLimit(gas);
    }

    function enableTrading() public onlyOwner {
        require(!tradingEnabled, "Trading already enabled!");
        require(_hasLiqBeenAdded, "Liquidity must be added.");
        if(address(antiSnipe) == address(0)){
            antiSnipe = AntiSnipe(address(this));
        }
        try antiSnipe.setLaunch(lpPair, uint32(block.number), uint64(block.timestamp), _decimals) {} catch {}
        tradingEnabled = true;
    }

    function setDividendExcluded(address holder, bool enabled) public onlyOwner {
        require(holder != address(this) && holder != lpPair);
        _isDividendExcluded[holder] = enabled;
        if (enabled) {
            reflector.tally(holder, 0);
        } else {
            reflector.tally(holder, _tOwned[holder]);
        }
    }

    function setExcludedFromFees(address account, bool enabled) public onlyOwner {
        _isFeeExcluded[account] = enabled;
    }

    function setTaxes(uint16 buyFee, uint16 sellFee, uint16 transferFee) external onlyOwner {
        require(buyFee <= staticVals.maxBuyTaxes
                && sellFee <= staticVals.maxSellTaxes
                && transferFee <= staticVals.maxTransferTaxes);
        _taxRates.buyFee = buyFee;
        _taxRates.sellFee = sellFee;
        _taxRates.transferFee = transferFee;
    }

    function setRatios(uint16 rewards, uint16 liquidity, uint16 marketing, uint16 team, uint16 treasury) external onlyOwner {
        _ratios.rewards = rewards;
        _ratios.liquidity = liquidity;
        _ratios.marketing = marketing;
        _ratios.team = team;
        _ratios.treasury = treasury;
        _ratios.total = rewards + liquidity + marketing + team + treasury;
    }

    function setWallets(address payable marketing, address payable team, address payable treasury) external onlyOwner {
        _taxWallets.marketing = payable(marketing);
        _taxWallets.team = payable(team);
        _taxWallets.treasury = payable(treasury);
    }

    function setContractSwapSettings(bool _enabled, bool processReflectEnabled) external onlyOwner {
        contractSwapEnabled = _enabled;
        processReflect = processReflectEnabled;
    }

    function setSwapSettings(uint256 thresholdPercent, uint256 thresholdDivisor, uint256 amountPercent, uint256 amountDivisor) external onlyOwner {
        swapThreshold = (_tTotal * thresholdPercent) / thresholdDivisor;
        swapAmount = (_tTotal * amountPercent) / amountDivisor;
    }

    function setReflectionCriteria(uint256 _minPeriod, uint256 _minReflection, uint256 minReflectionMultiplier) external onlyOwner {
        _minReflection = _minReflection * 10**minReflectionMultiplier;
        reflector.setReflectionCriteria(_minPeriod, _minReflection);
    }

    function setReflectorSettings(uint256 gas) external onlyOwner {
        require(gas < 750000);
        reflectorGas = gas;
    }

    function giveMeWelfarePlease() external {
        reflector.giveMeWelfarePlease(msg.sender);
    }

    function getTotalReflected() external view returns (uint256) {
        return reflector.getTotalDistributed();
    }

    function getUserInfo(address shareholder) external view returns (string memory, string memory, string memory, string memory) {
        return reflector.getShareholderInfo(shareholder);
    }

    function getUserRealizedGains(address shareholder) external view returns (uint256) {
        return reflector.getShareholderRealized(shareholder);
    }

    function getUserUnpaidEarnings(address shareholder) external view returns (uint256) {
        return reflector.getPendingRewards(shareholder);
    }

    function getFirstBuy(address account) public view returns (uint256) {
        return firstBuy[account];
    }

    function setNewRouter(address newRouter) public onlyOwner() {
        IRouter02 _newRouter = IRouter02(newRouter);
        address get_pair = IFactoryV2(_newRouter.factory()).getPair(address(this), _newRouter.WETH());
        if (get_pair == address(0)) {
            lpPair = IFactoryV2(_newRouter.factory()).createPair(address(this), _newRouter.WETH());
        }
        else {
            lpPair = get_pair;
        }
        dexRouter = _newRouter;
        _approve(address(this), address(dexRouter), type(uint256).max);
    }

    function setLpPair(address pair, bool enabled) external onlyOwner {
        if (enabled == false) {
            lpPairs[pair] = false;
            antiSnipe.setLpPair(pair, false);
        } else {
            if (timeSinceLastPair != 0) {
                require(block.timestamp - timeSinceLastPair > 3 days, "Cannot set a new pair this week!");
            }
            lpPairs[pair] = true;
            timeSinceLastPair = block.timestamp;
            antiSnipe.setLpPair(pair, true);
        }
    }

    function setMaxTxPercent(uint256 percent, uint256 divisor) external onlyOwner {
        require((_tTotal * percent) / divisor >= (_tTotal / 1000), "Max Transaction amt must be above 0.1% of total supply.");
        _maxTxAmount = (_tTotal * percent) / divisor;
    }

    function setMaxWalletSize(uint256 percent, uint256 divisor) external onlyOwner {
        require((_tTotal * percent) / divisor >= (_tTotal / 1000), "Max Wallet amt must be above 0.1% of total supply.");
        _maxWalletSize = (_tTotal * percent) / divisor;
    }

    function getMaxTX() public view returns (uint256) {
        return _maxTxAmount / (10**_decimals);
    }

    function getMaxWallet() public view returns (uint256) {
        return _maxWalletSize / (10**_decimals);
    }

    function _hasLimits(address from, address to) private view returns (bool) {
        return from != owner()
            && to != owner()
            && tx.origin != owner()
            && !_liquidityHolders[to]
            && !_liquidityHolders[from]
            && to != DEAD
            && to != address(0)
            && from != address(this);
    }

    function _transfer(address from, address to, uint256 amount) internal returns (bool) {
        require(from != address(0), "ERC20: transfer from the zero address");
        require(to != address(0), "ERC20: transfer to the zero address");
        require(amount > 0, "Transfer amount must be greater than zero");
        if(_hasLimits(from, to)) {
            if(!tradingEnabled) {
                revert("Trading not yet enabled!");
            }

            if(lpPairs[from] || lpPairs[to]){
                require(amount <= _maxTxAmount, "Transfer amount exceeds the maxTxAmount.");
            }
            if(to != address(dexRouter) && !lpPairs[to]) {
                require(balanceOf(to) + amount <= _maxWalletSize, "Transfer amount exceeds the maxWalletSize.");
            }
        }

        if (_tOwned[to] == 0) {
            firstBuy[to] = block.timestamp;
        }

        bool takeFee = true;
        
        if(_isFeeExcluded[from] || _isFeeExcluded[to]){
            takeFee = false;
        }
        return _finalizeTransfer(from, to, amount, takeFee);
    }

    function _finalizeTransfer(address from, address to, uint256 amount, bool takeFee) internal returns (bool) {
        if (!_hasLiqBeenAdded) {
            _checkLiquidityAdd(from, to);
            if (!_hasLiqBeenAdded && _hasLimits(from, to)) {
                revert("Only owner can transfer at this time.");
            }
        }

        if(_hasLimits(from, to)) {
            bool checked;
            try antiSnipe.checkUser(from, to, amount) returns (bool check) {
                checked = check;
            } catch {
                revert();
            }

            if(!checked) {
                revert();
            }
        }

        _tOwned[from] -= amount;

        if (inSwap) {
            return _basicTransfer(from, to, amount);
        }

        uint256 contractTokenBalance = _tOwned[address(this)];
        if(contractTokenBalance >= swapAmount)
            contractTokenBalance = swapAmount;

        if (!inSwap
            && !lpPairs[from]
            && contractSwapEnabled
            && contractTokenBalance >= swapThreshold
        ) {
            contractSwap(contractTokenBalance);
        }

        uint256 amountReceived = amount;

        if (takeFee) {
            amountReceived = takeTaxes(from, to, amount);
        }

        _tOwned[to] += amountReceived;

        processTokenReflect(from, to);
        emit Transfer(from, to, amountReceived);
        return true;
    }

    function processTokenReflect(address from, address to) internal {
        if (!_isDividendExcluded[from]) {
            try reflector.tally(from, _tOwned[from]) {} catch {}
        }
        if (!_isDividendExcluded[to]) {
            try reflector.tally(to, _tOwned[to]) {} catch {}
        }
        if (processReflect) {
            try reflector.cashout(reflectorGas) {} catch {}
        }
    }

    function _basicTransfer(address sender, address recipient, uint256 amount) internal returns (bool) {
        _tOwned[recipient] += amount;
        emit Transfer(sender, recipient, amount);
        return true;
    }

    function takeTaxes(address from, address to, uint256 amount) internal returns (uint256) {
        uint256 currentFee;
        if (lpPairs[from]) {
            currentFee = _taxRates.buyFee;
        } else if (lpPairs[to]) {
            if (antiDump1Enabled && firstBuy[from] + antiDump1TimeLimit > block.timestamp) {
                currentFee = antiDump1TaxFee;
            } else if (antiDump2Enabled && firstBuy[from] + antiDump2TimeLimit > block.timestamp) {
                currentFee = antiDump2TaxFee;
            } else {
                currentFee = _taxRates.sellFee;
            }
        } else {
            currentFee = _taxRates.transferFee;
        }

        if (currentFee == 0) {
            return amount;
        }

        uint256 feeAmount = amount * currentFee / staticVals.masterTaxDivisor;

        _tOwned[address(this)] += feeAmount;
        emit Transfer(from, address(this), feeAmount);

        return amount - feeAmount;
    }

    function contractSwap(uint256 contractTokenBalance) internal swapping {
        Ratios memory ratios = _ratios;
        if (ratios.total == 0) {
            return;
        }
        
        if(_allowances[address(this)][address(dexRouter)] != type(uint256).max) {
            _allowances[address(this)][address(dexRouter)] = type(uint256).max;
        }

        uint256 toLiquify = ((contractTokenBalance * ratios.liquidity) / (ratios.total)) / 2;
        uint256 swapAmt = contractTokenBalance - toLiquify;

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

        dexRouter.swapExactTokensForETHSupportingFeeOnTransferTokens(
            swapAmt,
            0,
            path,
            address(this),
            block.timestamp
        );

        uint256 amtBalance = address(this).balance;
        uint256 liquidityBalance = (amtBalance * toLiquify) / swapAmt;
        amtBalance -= liquidityBalance;
        ratios.total -= ratios.liquidity;
        uint256 rewardsBalance = (amtBalance * ratios.rewards) / ratios.total;
        uint256 teamBalance = (amtBalance * ratios.rewards) / ratios.total;
        uint256 treasuryBalance = (amtBalance * ratios.rewards) / ratios.total;
        uint256 marketingBalance = amtBalance - (rewardsBalance + teamBalance + treasuryBalance);

        if (toLiquify > 0) {
            dexRouter.addLiquidityETH{value: liquidityBalance}(
                address(this),
                toLiquify,
                0,
                0,
                DEAD,
                block.timestamp
            );
            emit AutoLiquify(liquidityBalance, toLiquify);
        }

        try reflector.load{value: rewardsBalance}() {} catch {}

        if(amtBalance > 0){
            _taxWallets.team.transfer(teamBalance);
            _taxWallets.treasury.transfer(treasuryBalance);
            _taxWallets.marketing.transfer(marketingBalance);
        }
    }

    function setAntiDumpEnabled(bool antiDump1, bool antiDump2) external onlyOwner {
        antiDump1Enabled = antiDump1;
        antiDump2Enabled = antiDump2;
    }

    function setAntiDumpTimeLimits(uint256 antiDump1Time, uint256 antiDump2Time) external onlyOwner {
        require(antiDump1Time <= 10 minutes &&  antiDump2Time <= 48 hours && antiDump2Time > antiDump1Time);
        antiDump1TimeLimit = antiDump1Time;
        antiDump2TimeLimit = antiDump2Time;
    }

    function setAntiDumpTaxValues(uint256 antiDump1Tax, uint256 antiDump2Tax) external onlyOwner {
        require(antiDump1Tax <= 3000 && antiDump2Tax <= 2500);
        antiDump1TaxFee = antiDump1Tax;
        antiDump2TaxFee = antiDump2Tax;
    }

    function manualDeposit() external onlyOwner {
        try reflector.load{value: address(this).balance}() {} catch {}
    }

    function manualDepositMsgValue() payable external {
        try reflector.load{value: msg.value}() {} catch {}
    }

    function manualSendReflections() external {
        try reflector.cashout(reflectorGas) {} catch {}
    }

    function _checkLiquidityAdd(address from, address to) private {
        require(!_hasLiqBeenAdded, "Liquidity already added and marked.");
        if (!_hasLimits(from, to) && to == lpPair) {
            _liquidityHolders[from] = true;
            _hasLiqBeenAdded = true;
            if(address(antiSnipe) == address(0)) {
                antiSnipe = AntiSnipe(address(this));
            }
            if(address(reflector) ==  address(0)) {
                reflector = Cashier(address(this));
            }
            try reflector.initialize() {} catch {}
            contractSwapEnabled = true;
            emit ContractSwapEnabledUpdated(true);
        }
    }

    function multiSendTokens(address[] memory accounts, uint256[] memory amounts) external {
        require(accounts.length == amounts.length, "Lengths do not match.");
        for (uint8 i = 0; i < accounts.length; i++) {
            require(balanceOf(msg.sender) >= amounts[i]);
            _transfer(msg.sender, accounts[i], amounts[i]*10**_decimals);
        }
    }

    function multiSendPercents(address[] memory accounts, uint256[] memory percents, uint256[] memory divisors) external {
        require(accounts.length == percents.length && percents.length == divisors.length, "Lengths do not match.");
        for (uint8 i = 0; i < accounts.length; i++) {
            require(balanceOf(msg.sender) >= (_tTotal * percents[i]) / divisors[i]);
            _transfer(msg.sender, accounts[i], (_tTotal * percents[i]) / divisors[i]);
        }
    }
}

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"payable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"amountCurrency","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"amountTokens","type":"uint256"}],"name":"AutoLiquify","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bool","name":"enabled","type":"bool"}],"name":"ContractSwapEnabledUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"sniperAddress","type":"address"}],"name":"SniperCaught","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[],"name":"DEAD","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_hasLiqBeenAdded","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_ratios","outputs":[{"internalType":"uint16","name":"rewards","type":"uint16"},{"internalType":"uint16","name":"liquidity","type":"uint16"},{"internalType":"uint16","name":"marketing","type":"uint16"},{"internalType":"uint16","name":"team","type":"uint16"},{"internalType":"uint16","name":"treasury","type":"uint16"},{"internalType":"uint16","name":"total","type":"uint16"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_taxRates","outputs":[{"internalType":"uint16","name":"buyFee","type":"uint16"},{"internalType":"uint16","name":"sellFee","type":"uint16"},{"internalType":"uint16","name":"transferFee","type":"uint16"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_taxWallets","outputs":[{"internalType":"address payable","name":"marketing","type":"address"},{"internalType":"address payable","name":"treasury","type":"address"},{"internalType":"address payable","name":"team","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"holder","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"antiDump1Enabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"antiDump1TaxFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"antiDump1TimeLimit","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"antiDump2Enabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"antiDump2TaxFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"antiDump2TimeLimit","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"approveContractContingency","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"contractSwapEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"dexRouter","outputs":[{"internalType":"contract IRouter02","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"enableTrading","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"getFirstBuy","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getMaxTX","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getMaxWallet","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getOwner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getSniperAmt","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getTotalReflected","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"shareholder","type":"address"}],"name":"getUserInfo","outputs":[{"internalType":"string","name":"","type":"string"},{"internalType":"string","name":"","type":"string"},{"internalType":"string","name":"","type":"string"},{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"shareholder","type":"address"}],"name":"getUserRealizedGains","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"shareholder","type":"address"}],"name":"getUserUnpaidEarnings","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"giveMeWelfarePlease","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isBlacklisted","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isDividendExcluded","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isFeeExcluded","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lpPair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"manualDeposit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"manualDepositMsgValue","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"manualSendReflections","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"accounts","type":"address[]"},{"internalType":"uint256[]","name":"percents","type":"uint256[]"},{"internalType":"uint256[]","name":"divisors","type":"uint256[]"}],"name":"multiSendPercents","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"accounts","type":"address[]"},{"internalType":"uint256[]","name":"amounts","type":"uint256[]"}],"name":"multiSendTokens","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"processReflect","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"removeBlacklisted","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"removeSniper","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"antiDump1","type":"bool"},{"internalType":"bool","name":"antiDump2","type":"bool"}],"name":"setAntiDumpEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"antiDump1Tax","type":"uint256"},{"internalType":"uint256","name":"antiDump2Tax","type":"uint256"}],"name":"setAntiDumpTaxValues","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"antiDump1Time","type":"uint256"},{"internalType":"uint256","name":"antiDump2Time","type":"uint256"}],"name":"setAntiDumpTimeLimits","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"enabled","type":"bool"}],"name":"setBlacklistEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"accounts","type":"address[]"},{"internalType":"bool","name":"enabled","type":"bool"}],"name":"setBlacklistEnabledMultiple","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_enabled","type":"bool"},{"internalType":"bool","name":"processReflectEnabled","type":"bool"}],"name":"setContractSwapSettings","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"holder","type":"address"},{"internalType":"bool","name":"enabled","type":"bool"}],"name":"setDividendExcluded","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"enabled","type":"bool"}],"name":"setExcludedFromFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"gas","type":"uint256"}],"name":"setGasPriceLimit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"aInitializer","type":"address"},{"internalType":"address","name":"cInitializer","type":"address"}],"name":"setInitializers","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pair","type":"address"},{"internalType":"bool","name":"enabled","type":"bool"}],"name":"setLpPair","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"percent","type":"uint256"},{"internalType":"uint256","name":"divisor","type":"uint256"}],"name":"setMaxTxPercent","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"percent","type":"uint256"},{"internalType":"uint256","name":"divisor","type":"uint256"}],"name":"setMaxWalletSize","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newRouter","type":"address"}],"name":"setNewRouter","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_antiSnipe","type":"bool"},{"internalType":"bool","name":"_antiGas","type":"bool"},{"internalType":"bool","name":"_antiBlock","type":"bool"},{"internalType":"bool","name":"_antiSpecial","type":"bool"}],"name":"setProtectionSettings","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint16","name":"rewards","type":"uint16"},{"internalType":"uint16","name":"liquidity","type":"uint16"},{"internalType":"uint16","name":"marketing","type":"uint16"},{"internalType":"uint16","name":"team","type":"uint16"},{"internalType":"uint16","name":"treasury","type":"uint16"}],"name":"setRatios","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_minPeriod","type":"uint256"},{"internalType":"uint256","name":"_minReflection","type":"uint256"},{"internalType":"uint256","name":"minReflectionMultiplier","type":"uint256"}],"name":"setReflectionCriteria","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"gas","type":"uint256"}],"name":"setReflectorSettings","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"thresholdPercent","type":"uint256"},{"internalType":"uint256","name":"thresholdDivisor","type":"uint256"},{"internalType":"uint256","name":"amountPercent","type":"uint256"},{"internalType":"uint256","name":"amountDivisor","type":"uint256"}],"name":"setSwapSettings","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint16","name":"buyFee","type":"uint16"},{"internalType":"uint16","name":"sellFee","type":"uint16"},{"internalType":"uint16","name":"transferFee","type":"uint16"}],"name":"setTaxes","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address payable","name":"marketing","type":"address"},{"internalType":"address payable","name":"team","type":"address"},{"internalType":"address payable","name":"treasury","type":"address"}],"name":"setWallets","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"staticVals","outputs":[{"internalType":"uint16","name":"maxBuyTaxes","type":"uint16"},{"internalType":"uint16","name":"maxSellTaxes","type":"uint16"},{"internalType":"uint16","name":"maxTransferTaxes","type":"uint16"},{"internalType":"uint16","name":"masterTaxDivisor","type":"uint16"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"swapAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"swapThreshold","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tradingEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwner","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

60806040526000600355655af3107a40006009908155600a805460ff1916821781556200002d9190620008e1565b6009546200003c9190620008f9565b600b819055604080516060808201835261044c82526105786020808401919091526107d092840192909252600c805465ffffffffffff19166507d00578044c179055825160c081018452610226815260c881840181905261041a828601526101f4828401526080808301919091526109c460a0909201829052600d80546001600160601b0319166b09c400c801f4041a00c80226179055845190810185528181528084018290528085019190915261271090820152600e80546001600160401b03191667271009c409c409c41790556012805461dead6001600160a01b0319918216179091558351918201845273bce0c6f1f870d2a062313c352d8e68b7bad21bd380835292820183905292018190526013805483168217905560148054831682179055601580549092161790556103e8906200017b906004620008f9565b6200018791906200091b565b6016556103e8600b5460106200019e9190620008f9565b620001aa91906200091b565b601755620493e0601955601a805461ffff19169055600b5461271090620001d3906005620008f9565b620001df91906200091b565b601b55612710600b54600a620001f69190620008f9565b6200020291906200091b565b601c55601d805462ffff0061ffff60b81b01191661010160b81b179055610258601e556202a300601f55610bb860209081556109c4602155600b543360008181526001909352604083209190915581546001600160a01b031916811790915546603814156200029757600f80546001600160a01b0319167310ed43c718714eb63d5aa57b78b54704e256024e17905562000314565b4660611415620002cd57600f80546001600160a01b031916739ac64cc6e4415144c455bd8e4837fea55603e5c317905562000314565b4660011480620002dd5750466004145b156200030f57600f80546001600160a01b031916737a250d5630b4cf539739df2c5dacb4c659f2488d17905562000314565b600080fd5b600f60009054906101000a90046001600160a01b03166001600160a01b031663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000368573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200038e91906200093e565b6001600160a01b031663c9c65396600f60009054906101000a90046001600160a01b03166001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015620003f0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200041691906200093e565b6040516001600160e01b031960e084901b1681526001600160a01b0390911660048201523060248201526044016020604051808303816000875af115801562000463573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200048991906200093e565b601080546001600160a01b0319166001600160a01b039283169081179091556000908152600260205260409020805460ff19166001179055600f54620004d591339116600019620006a0565b600f54620004f19030906001600160a01b0316600019620006a0565b600f60009054906101000a90046001600160a01b03166001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000545573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200056b91906200093e565b601180546001600160a01b0319166001600160a01b039283161790556000805482168152600560209081526040808320805460ff19908116600190811790925530808652838620805483168417905585548716865260068552838620805483168417905560105487168652838620805483168417905585528285208054821683179055601254909516845281842080548616821790558380527f54cdd369e4e8a8515e52ca72ec816c2101831ad1f18bf44102ed171459c9b4f8805490951617909355600b54925192835233927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a36040516001600160a01b038216906000907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a35062000969565b6001600160a01b038316620007085760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b60648201526084015b60405180910390fd5b6001600160a01b0382166200076b5760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401620006ff565b6001600160a01b0383811660008181526004602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b634e487b7160e01b600052601160045260246000fd5b600181815b8085111562000823578160001904821115620008075762000807620007cc565b808516156200081557918102915b93841c9390800290620007e7565b509250929050565b6000826200083c57506001620008db565b816200084b57506000620008db565b81600181146200086457600281146200086f576200088f565b6001915050620008db565b60ff841115620008835762000883620007cc565b50506001821b620008db565b5060208310610133831016604e8410600b8410161715620008b4575081810a620008db565b620008c08383620007e2565b8060001904821115620008d757620008d7620007cc565b0290505b92915050565b6000620008f260ff8416836200082b565b9392505050565b6000816000190483118215151615620009165762000916620007cc565b500290565b6000826200093957634e487b7160e01b600052601260045260246000fd5b500490565b6000602082840312156200095157600080fd5b81516001600160a01b0381168114620008f257600080fd5b61565880620009796000396000f3fe6080604052600436106104d55760003560e01c80636ebd007811610279578063bc1a98a71161015e578063e8a0e3f9116100d6578063f7c245ea1161008a578063fb78680d1161006f578063fb78680d14610f55578063fdb78c0e14610f75578063fe575a8714610f8f57600080fd5b8063f7c245ea14610ee9578063f94aa1b414610efe57600080fd5b8063eec2744e116100bb578063eec2744e14610e8a578063efe7dc9014610eaa578063f08f43a214610ec957600080fd5b8063e8a0e3f914610e4a578063eafb5a3c14610e6a57600080fd5b8063cf8477061161012d578063dd62ed3e11610112578063dd62ed3e14610dc4578063dea528a114610e0a578063e894859114610e2a57600080fd5b8063cf84770614610d0a578063d0b1449d14610da457600080fd5b8063bc1a98a714610c5b578063bca238aa14610c91578063c6a276c214610cca578063cecd4e4f14610cea57600080fd5b80638a8c523c116101f1578063a13ce2c6116101c0578063ab5cb5a6116101a5578063ab5cb5a614610c0f578063ad064f8d14610c2f578063b0b2682e14610c4557600080fd5b8063a13ce2c614610bb9578063a9059cbb14610bef57600080fd5b80638a8c523c14610b495780638da5cb5b14610b1657806395d89b4114610b5e5780639dc6761514610ba457600080fd5b80637618ae8711610248578063891749301161022d5780638917493014610ae1578063893d20e814610b165780638a63bd9b14610b3457600080fd5b80637618ae8714610aab57806380c581d114610ac157600080fd5b80636ebd007814610a2b57806370a0823114610a40578063715018a614610a7657806375cb1bd114610a8b57600080fd5b806329dd8798116103ba578063452ed4f111610332578063590ffdce116102e65780636386c1c7116102cb5780636386c1c7146109c65780636ab86dc1146109f65780636b639a2514610a0b57600080fd5b8063590ffdce146109865780636372c68f146109a657600080fd5b80634fb2e45d116103175780634fb2e45d1461093157806350a8e0161461095157806355dbc3691461097157600080fd5b8063452ed4f1146108f25780634ada218b1461091257600080fd5b8063313ce5671161038957806333251a0b1161036e57806333251a0b146108aa57806333df2c20146108ca5780633f3cf56c146108d257600080fd5b8063313ce5671461086857806332cde6641461088a57600080fd5b806329dd8798146108075780632a1d7107146108275780632ddc7cc81461083d5780632e8fa8211461085257600080fd5b806309a8f1791161044d578063218950bc1161041c578063255a2e5411610401578063255a2e541461078e57806326003957146107c75780632610eaca146107e757600080fd5b8063218950bc1461074e57806323b872dd1461076e57600080fd5b806309a8f179146106995780630fa604e4146106b957806318160ddd146106ce5780631b6afa2d146106e357600080fd5b8063069d955f116104a45780630758d924116104895780630758d924146106295780630923160214610649578063095ea7b31461066957600080fd5b8063069d955f1461058457806306fdde03146105da57600080fd5b806302770283146104e157806303fd2a45146105035780630445b6671461054057806305bbedb61461056457600080fd5b366104dc57005b600080fd5b3480156104ed57600080fd5b506105016104fc366004614b08565b610faf565b005b34801561050f57600080fd5b50601254610523906001600160a01b031681565b6040516001600160a01b0390911681526020015b60405180910390f35b34801561054c57600080fd5b50610556601b5481565b604051908152602001610537565b34801561057057600080fd5b5061050161057f366004614c45565b611036565b34801561059057600080fd5b50600c546105b59061ffff808216916201000081048216916401000000009091041683565b6040805161ffff94851681529284166020840152921691810191909152606001610537565b3480156105e657600080fd5b5060408051808201909152600b81527f4869746d616e20576f6c6600000000000000000000000000000000000000000060208201525b6040516105379190614cef565b34801561063557600080fd5b50600f54610523906001600160a01b031681565b34801561065557600080fd5b50610501610664366004614d02565b611159565b34801561067557600080fd5b50610689610684366004614d1b565b611285565b6040519015158152602001610537565b3480156106a557600080fd5b506105016106b4366004614d47565b6112f2565b3480156106c557600080fd5b506105566113e5565b3480156106da57600080fd5b50600b54610556565b3480156106ef57600080fd5b50600e546107209061ffff808216916201000081048216916401000000008204811691660100000000000090041684565b6040805161ffff95861681529385166020850152918416918301919091529091166060820152608001610537565b34801561075a57600080fd5b50610501610769366004614d73565b61140b565b34801561077a57600080fd5b50610689610789366004614da1565b61150f565b34801561079a57600080fd5b506106896107a9366004614de2565b6001600160a01b031660009081526006602052604090205460ff1690565b3480156107d357600080fd5b506105016107e2366004614b08565b611589565b3480156107f357600080fd5b50610501610802366004614e5a565b6116a0565b34801561081357600080fd5b50610501610822366004614ebe565b6117bd565b34801561083357600080fd5b50610556601e5481565b34801561084957600080fd5b506105016118b3565b34801561085e57600080fd5b50610556601c5481565b34801561087457600080fd5b50600a5460405160ff9091168152602001610537565b34801561089657600080fd5b506105016108a5366004614f31565b61192f565b3480156108b657600080fd5b506105016108c5366004614de2565b611a4d565b610501611afa565b3480156108de57600080fd5b506105016108ed366004614b08565b611b5b565b3480156108fe57600080fd5b50601054610523906001600160a01b031681565b34801561091e57600080fd5b50601d5461068990610100900460ff1681565b34801561093d57600080fd5b5061050161094c366004614de2565b611c72565b34801561095d57600080fd5b50601d546106899062010000900460ff1681565b34801561097d57600080fd5b50610556611ebf565b34801561099257600080fd5b506105016109a1366004614f74565b611f38565b3480156109b257600080fd5b506105566109c1366004614de2565b611fbd565b3480156109d257600080fd5b506109e66109e1366004614de2565b612046565b6040516105379493929190614fa2565b348015610a0257600080fd5b506105016120e7565b348015610a1757600080fd5b50610501610a26366004614f74565b612191565b348015610a3757600080fd5b50610556612332565b348015610a4c57600080fd5b50610556610a5b366004614de2565b6001600160a01b031660009081526001602052604090205490565b348015610a8257600080fd5b50610501612353565b348015610a9757600080fd5b50610501610aa6366004614ffa565b612431565b348015610ab757600080fd5b5061055660215481565b348015610acd57600080fd5b50610501610adc366004614f74565b6124d7565b348015610aed57600080fd5b50601d546106899077010000000000000000000000000000000000000000000000900460ff1681565b348015610b2257600080fd5b506000546001600160a01b0316610523565b348015610b4057600080fd5b5061068961268b565b348015610b5557600080fd5b50610501612706565b348015610b6a57600080fd5b5060408051808201909152600681527f4849544d414e0000000000000000000000000000000000000000000000000000602082015261061c565b348015610bb057600080fd5b5061050161292a565b348015610bc557600080fd5b50610556610bd4366004614de2565b6001600160a01b031660009081526008602052604090205490565b348015610bfb57600080fd5b50610689610c0a366004614d1b565b6129a2565b348015610c1b57600080fd5b50610556610c2a366004614de2565b6129af565b348015610c3b57600080fd5b50610556601f5481565b348015610c5157600080fd5b5061055660205481565b348015610c6757600080fd5b50601d54610689907801000000000000000000000000000000000000000000000000900460ff1681565b348015610c9d57600080fd5b50610689610cac366004614de2565b6001600160a01b031660009081526005602052604090205460ff1690565b348015610cd657600080fd5b50610501610ce5366004614de2565b6129fb565b348015610cf657600080fd5b50610501610d05366004615045565b612aa8565b348015610d1657600080fd5b50600d54610d679061ffff808216916201000081048216916401000000008204811691660100000000000081048216916801000000000000000082048116916a010000000000000000000090041686565b6040805161ffff978816815295871660208701529386169385019390935290841660608401528316608083015290911660a082015260c001610537565b348015610db057600080fd5b50610501610dbf366004614d02565b612b94565b348015610dd057600080fd5b50610556610ddf366004614d73565b6001600160a01b03918216600090815260046020908152604080832093909416825291909152205490565b348015610e1657600080fd5b50610501610e25366004615045565b612c02565b348015610e3657600080fd5b50610501610e45366004614b08565b612cba565b348015610e5657600080fd5b50610501610e65366004615063565b612d48565b348015610e7657600080fd5b50610501610e85366004614de2565b612ea6565b348015610e9657600080fd5b50610501610ea5366004614f74565b613261565b348015610eb657600080fd5b50601a5461068990610100900460ff1681565b348015610ed557600080fd5b50610501610ee43660046150eb565b61334d565b348015610ef557600080fd5b506105566134e8565b348015610f0a57600080fd5b50601354601454601554610f2b926001600160a01b03908116928116911683565b604080516001600160a01b0394851681529284166020840152921691810191909152606001610537565b348015610f6157600080fd5b50610501610f70366004615150565b61354b565b348015610f8157600080fd5b50601a546106899060ff1681565b348015610f9b57600080fd5b50610689610faa366004614de2565b6135e4565b6000546001600160a01b0316331461100e5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064015b60405180910390fd5b610bb8821115801561102257506109c48111155b61102b57600080fd5b602091909155602155565b6000546001600160a01b031633146110905760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401611005565b601d546040517f05bbedb600000000000000000000000000000000000000000000000000000000815263010000009091046001600160a01b0316906305bbedb6906110e190859085906004016151c6565b600060405180830381600087803b1580156110fb57600080fd5b505af115801561110f573d6000803e3d6000fd5b5050505060005b825181101561115457611142838281518110611134576111346151ea565b602002602001015183612191565b8061114c81615248565b915050611116565b505050565b6000546001600160a01b031633146111b35760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401611005565b604b8110156112045760405162461bcd60e51b815260206004820152600860248201527f546f6f206c6f772e0000000000000000000000000000000000000000000000006044820152606401611005565b601d546040517f092316020000000000000000000000000000000000000000000000000000000081526004810183905263010000009091046001600160a01b0316906309231602906024015b600060405180830381600087803b15801561126a57600080fd5b505af115801561127e573d6000803e3d6000fd5b5050505050565b3360008181526004602090815260408083206001600160a01b038716808552925280832085905551919290917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925906112e09086815260200190565b60405180910390a35060015b92915050565b6000546001600160a01b0316331461134c5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401611005565b61135781600a615347565b6113619083615353565b6018546040517f8cd7f02e00000000000000000000000000000000000000000000000000000000815260048101869052602481018390529193506001600160a01b031690638cd7f02e90604401600060405180830381600087803b1580156113c857600080fd5b505af11580156113dc573d6000803e3d6000fd5b50505050505050565b600a80546000916113f99160ff1690615372565b6017546114069190615381565b905090565b6000546001600160a01b031633146114655760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401611005565b6001600160a01b038116301480159061148757506001600160a01b0382163014155b80156114a55750816001600160a01b0316816001600160a01b031614155b6114ae57600080fd5b6018805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b03928316179055601d80547fffffffffffffffffff0000000000000000000000000000000000000000ffffff1663010000009390921692909202179055565b6001600160a01b038316600090815260046020908152604080832033845290915281205460001914611574576001600160a01b03841660009081526004602090815260408083203384529091528120805484929061156e9084906153bc565b90915550505b61157f848484613673565b90505b9392505050565b6000546001600160a01b031633146115e35760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401611005565b6103e8600b546115f39190615381565b8183600b546116029190615353565b61160c9190615381565b10156116805760405162461bcd60e51b815260206004820152603260248201527f4d61782057616c6c657420616d74206d7573742062652061626f766520302e3160448201527f25206f6620746f74616c20737570706c792e00000000000000000000000000006064820152608401611005565b8082600b5461168f9190615353565b6116999190615381565b6017555050565b80518251146116f15760405162461bcd60e51b815260206004820152601560248201527f4c656e6774687320646f206e6f74206d617463682e00000000000000000000006044820152606401611005565b60005b82518160ff16101561115457818160ff1681518110611715576117156151ea565b602002602001015161173c336001600160a01b031660009081526001602052604090205490565b101561174757600080fd5b6117aa33848360ff1681518110611760576117606151ea565b6020908102919091010151600a805461177e9160ff90911690615372565b858560ff1681518110611793576117936151ea565b60200260200101516117a59190615353565b613673565b50806117b5816153d3565b9150506116f4565b6000546001600160a01b031633146118175760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401611005565b601d546040517f0109da69000000000000000000000000000000000000000000000000000000008152851515600482015284151560248201528315156044820152821515606482015263010000009091046001600160a01b031690630109da6990608401600060405180830381600087803b15801561189557600080fd5b505af11580156118a9573d6000803e3d6000fd5b5050505050505050565b6018546019546040517fa9e732bb0000000000000000000000000000000000000000000000000000000081526001600160a01b039092169163a9e732bb916119019160040190815260200190565b600060405180830381600087803b15801561191b57600080fd5b505af192505050801561192c575060015b50565b6000546001600160a01b031633146119895760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401611005565b600e5461ffff908116908416118015906119b35750600e5461ffff62010000909104811690831611155b80156119d15750600e5461ffff640100000000909104811690821611155b6119da57600080fd5b600c805461ffff9485167fffffffffffffffffffffffffffffffffffffffffffffffffffffffff00000000909116176201000093851693909302929092177fffffffffffffffffffffffffffffffffffffffffffffffffffff0000ffffffff166401000000009190931602919091179055565b6000546001600160a01b03163314611aa75760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401611005565b601d546040517f33251a0b0000000000000000000000000000000000000000000000000000000081526001600160a01b0383811660048301526301000000909204909116906333251a0b90602401611250565b601860009054906101000a90046001600160a01b03166001600160a01b03166386d5c4be346040518263ffffffff1660e01b81526004016000604051808303818588803b158015611b4a57600080fd5b505af19350505050801561192c5750565b6000546001600160a01b03163314611bb55760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401611005565b6103e8600b54611bc59190615381565b8183600b54611bd49190615353565b611bde9190615381565b1015611c525760405162461bcd60e51b815260206004820152603760248201527f4d6178205472616e73616374696f6e20616d74206d7573742062652061626f7660448201527f6520302e3125206f6620746f74616c20737570706c792e0000000000000000006064820152608401611005565b8082600b54611c619190615353565b611c6b9190615381565b6016555050565b6000546001600160a01b03163314611ccc5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401611005565b6001600160a01b038116611d485760405162461bcd60e51b815260206004820152603d60248201527f43616c6c2072656e6f756e63654f776e65727368697020746f207472616e736660448201527f6572206f776e657220746f20746865207a65726f20616464726573732e0000006064820152608401611005565b6012546001600160a01b0382811691161415611dcc5760405162461bcd60e51b815260206004820152603d60248201527f43616c6c2072656e6f756e63654f776e65727368697020746f207472616e736660448201527f6572206f776e657220746f20746865207a65726f20616464726573732e0000006064820152608401611005565b600080546001600160a01b039081168252600560208181526040808520805460ff1990811690915585548516865260068084528287208054831690558786168752938352818620805482166001908117909155938352818620805490911684179055845490931684525290205415611e6757600080546001600160a01b03168082526001602052604090912054611e6591908390613673565b505b6000805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b0383169081178255604051909182917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a350565b6000601d60039054906101000a90046001600160a01b03166001600160a01b03166355dbc3696040518163ffffffff1660e01b8152600401602060405180830381865afa158015611f14573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061140691906153f3565b6000546001600160a01b03163314611f925760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401611005565b6001600160a01b03919091166000908152600560205260409020805460ff1916911515919091179055565b6018546040517fd59b2ffd0000000000000000000000000000000000000000000000000000000081526001600160a01b038381166004830152600092169063d59b2ffd906024015b602060405180830381865afa158015612022573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112ec91906153f3565b6018546040517f5e6056bb0000000000000000000000000000000000000000000000000000000081526001600160a01b0383811660048301526060928392839283921690635e6056bb90602401600060405180830381865afa1580156120b0573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526120d89190810190615470565b93509350935093509193509193565b6000546001600160a01b031633146121415760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401611005565b601860009054906101000a90046001600160a01b03166001600160a01b03166386d5c4be476040518263ffffffff1660e01b81526004016000604051808303818588803b158015611b4a57600080fd5b6000546001600160a01b031633146121eb5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401611005565b6001600160a01b038216301480159061221257506010546001600160a01b03838116911614155b61221b57600080fd5b6001600160a01b0382166000908152600660205260409020805460ff191682158015919091179091556122cc576018546040517fdf047e9e0000000000000000000000000000000000000000000000000000000081526001600160a01b038481166004830152600060248301529091169063df047e9e906044015b600060405180830381600087803b1580156122b057600080fd5b505af11580156122c4573d6000803e3d6000fd5b505050505050565b6018546001600160a01b03838116600081815260016020526040908190205490517fdf047e9e0000000000000000000000000000000000000000000000000000000081526004810192909252602482015291169063df047e9e90604401612296565b5050565b600a80546000916123469160ff1690615372565b6016546114069190615381565b6000546001600160a01b031633146123ad5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401611005565b600080546001600160a01b039081168252600560209081526040808420805460ff199081169091558454909316845260069091528083208054909216909155815473ffffffffffffffffffffffffffffffffffffffff191682555181907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a3565b6000546001600160a01b0316331461248b5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401611005565b601380546001600160a01b0394851673ffffffffffffffffffffffffffffffffffffffff1991821617909155601580549385169382169390931790925560148054919093169116179055565b6000546001600160a01b031633146125315760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401611005565b806125a9576001600160a01b03828116600081815260026020526040808220805460ff19169055601d5490517f80c581d10000000000000000000000000000000000000000000000000000000081526004810193909352602483019190915263010000009004909116906380c581d190604401612296565b60035415612610576203f480600354426125c391906153bc565b116126105760405162461bcd60e51b815260206004820181905260248201527f43616e6e6f74207365742061206e657720706169722074686973207765656b216044820152606401611005565b6001600160a01b0382811660008181526002602052604090819020805460ff1916600190811790915542600355601d5491517f80c581d10000000000000000000000000000000000000000000000000000000081526004810193909352602483015263010000009004909116906380c581d190604401612296565b600080546001600160a01b031633146126e65760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401611005565b600f546127009030906001600160a01b0316600019613a7b565b50600190565b6000546001600160a01b031633146127605760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401611005565b601d54610100900460ff16156127b85760405162461bcd60e51b815260206004820152601860248201527f54726164696e6720616c726561647920656e61626c65642100000000000000006044820152606401611005565b601d5462010000900460ff166128105760405162461bcd60e51b815260206004820152601860248201527f4c6971756964697479206d7573742062652061646465642e00000000000000006044820152606401611005565b601d54630100000090046001600160a01b031661285857601d80547fffffffffffffffffff0000000000000000000000000000000000000000ffffff16306301000000021790555b601d54601054600a546040517f6c115c340000000000000000000000000000000000000000000000000000000081526001600160a01b03928316600482015263ffffffff4316602482015267ffffffffffffffff4216604482015260ff909116606482015263010000009092041690636c115c3490608401600060405180830381600087803b1580156128ea57600080fd5b505af19250505080156128fb575060015b50601d80547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff16610100179055565b6018546040517f2e6f0efd0000000000000000000000000000000000000000000000000000000081523360048201526001600160a01b0390911690632e6f0efd90602401600060405180830381600087803b15801561298857600080fd5b505af115801561299c573d6000803e3d6000fd5b50505050565b6000611582338484613673565b6018546040517ff6ed20170000000000000000000000000000000000000000000000000000000081526001600160a01b038381166004830152600092169063f6ed201790602401612005565b6000546001600160a01b03163314612a555760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401611005565b601d546040517fc6a276c20000000000000000000000000000000000000000000000000000000081526001600160a01b03838116600483015263010000009092049091169063c6a276c290602401611250565b6000546001600160a01b03163314612b025760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401611005565b601d80547fffffffffffffff0000ffffffffffffffffffffffffffffffffffffffffffffff1677010000000000000000000000000000000000000000000000931515939093027fffffffffffffff00ffffffffffffffffffffffffffffffffffffffffffffffff1692909217780100000000000000000000000000000000000000000000000091151591909102179055565b6000546001600160a01b03163314612bee5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401611005565b620b71b08110612bfd57600080fd5b601955565b6000546001600160a01b03163314612c5c5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401611005565b601a80547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000169215157fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff169290921761010091151591909102179055565b6000546001600160a01b03163314612d145760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401611005565b6102588211158015612d2957506202a3008111155b8015612d3457508181115b612d3d57600080fd5b601e91909155601f55565b81518351148015612d5a575080518251145b612da65760405162461bcd60e51b815260206004820152601560248201527f4c656e6774687320646f206e6f74206d617463682e00000000000000000000006044820152606401611005565b60005b83518160ff16101561299c57818160ff1681518110612dca57612dca6151ea565b6020026020010151838260ff1681518110612de757612de76151ea565b6020026020010151600b54612dfc9190615353565b612e069190615381565b336000908152600160205260409020541015612e2157600080fd5b612e9333858360ff1681518110612e3a57612e3a6151ea565b6020026020010151848460ff1681518110612e5757612e576151ea565b6020026020010151868560ff1681518110612e7457612e746151ea565b6020026020010151600b54612e899190615353565b6117a59190615381565b5080612e9e816153d3565b915050612da9565b6000546001600160a01b03163314612f005760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401611005565b60008190506000816001600160a01b031663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015612f45573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612f69919061551d565b6001600160a01b031663e6a4390530846001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015612fb6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612fda919061551d565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e085901b1681526001600160a01b03928316600482015291166024820152604401602060405180830381865afa15801561303d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613061919061551d565b90506001600160a01b0381166131ff57816001600160a01b031663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa1580156130af573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906130d3919061551d565b6001600160a01b031663c9c6539630846001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015613120573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613144919061551d565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e085901b1681526001600160a01b039283166004820152911660248201526044016020604051808303816000875af11580156131a9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906131cd919061551d565b6010805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b0392909216919091179055613228565b6010805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b0383161790555b600f805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b038416908117909155611154903090600019613a7b565b6000546001600160a01b031633146132bb5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401611005565b601d546040517feec2744e0000000000000000000000000000000000000000000000000000000081526001600160a01b038481166004830152831515602483015263010000009092049091169063eec2744e90604401600060405180830381600087803b15801561332b57600080fd5b505af115801561333f573d6000803e3d6000fd5b5050505061232e8282612191565b6000546001600160a01b031633146133a75760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401611005565b600d805461ffff8781167fffffffffffffffffffffffffffffffffffffffffffffffffffffffff00000000909216919091176201000087831602177fffffffffffffffffffffffffffffffffffffffffffffffff00000000ffffffff16640100000000868316027fffffffffffffffffffffffffffffffffffffffffffffffff0000ffffffffffff1617660100000000000085831602177fffffffffffffffffffffffffffffffffffffffffffff0000ffffffffffffffff166801000000000000000091841691909102179055808284613481878961553a565b61348b919061553a565b613495919061553a565b61349f919061553a565b600d805461ffff929092166a0100000000000000000000027fffffffffffffffffffffffffffffffffffffffff0000ffffffffffffffffffff9092169190911790555050505050565b601854604080517f5695fa5800000000000000000000000000000000000000000000000000000000815290516000926001600160a01b031691635695fa589160048083019260209291908290030181865afa158015611f14573d6000803e3d6000fd5b6000546001600160a01b031633146135a55760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401611005565b8284600b546135b49190615353565b6135be9190615381565b601b55600b5481906135d1908490615353565b6135db9190615381565b601c5550505050565b601d546040517ffe575a870000000000000000000000000000000000000000000000000000000081526001600160a01b03838116600483015260009263010000009004169063fe575a8790602401602060405180830381865afa15801561364f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112ec9190615560565b60006001600160a01b0384166136f15760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f20616460448201527f64726573730000000000000000000000000000000000000000000000000000006064820152608401611005565b6001600160a01b03831661376d5760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201527f65737300000000000000000000000000000000000000000000000000000000006064820152608401611005565b600082116137e35760405162461bcd60e51b815260206004820152602960248201527f5472616e7366657220616d6f756e74206d75737420626520677265617465722060448201527f7468616e207a65726f00000000000000000000000000000000000000000000006064820152608401611005565b6137ed8484613bd3565b156139e257601d54610100900460ff166138495760405162461bcd60e51b815260206004820152601860248201527f54726164696e67206e6f742079657420656e61626c65642100000000000000006044820152606401611005565b6001600160a01b03841660009081526002602052604090205460ff168061388857506001600160a01b03831660009081526002602052604090205460ff165b15613905576016548211156139055760405162461bcd60e51b815260206004820152602860248201527f5472616e7366657220616d6f756e74206578636565647320746865206d61785460448201527f78416d6f756e742e0000000000000000000000000000000000000000000000006064820152608401611005565b600f546001600160a01b0384811691161480159061393c57506001600160a01b03831660009081526002602052604090205460ff16155b156139e25760175482613964856001600160a01b031660009081526001602052604090205490565b61396e919061557d565b11156139e25760405162461bcd60e51b815260206004820152602a60248201527f5472616e7366657220616d6f756e74206578636565647320746865206d61785760448201527f616c6c657453697a652e000000000000000000000000000000000000000000006064820152608401611005565b6001600160a01b038316600090815260016020526040902054613a1b576001600160a01b03831660009081526008602052604090204290555b6001600160a01b03841660009081526005602052604090205460019060ff1680613a5d57506001600160a01b03841660009081526005602052604090205460ff165b15613a66575060005b613a7285858584613ca7565b95945050505050565b6001600160a01b038316613af65760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460448201527f72657373000000000000000000000000000000000000000000000000000000006064820152608401611005565b6001600160a01b038216613b725760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f20616464726560448201527f73730000000000000000000000000000000000000000000000000000000000006064820152608401611005565b6001600160a01b0383811660008181526004602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b600080546001600160a01b03848116911614801590613c0057506000546001600160a01b03838116911614155b8015613c1757506000546001600160a01b03163214155b8015613c3c57506001600160a01b03821660009081526007602052604090205460ff16155b8015613c6157506001600160a01b03831660009081526007602052604090205460ff16155b8015613c7b57506012546001600160a01b03838116911614155b8015613c8f57506001600160a01b03821615155b8015611582575050506001600160a01b031630141590565b601d5460009062010000900460ff16613d5557613cc48585613f7a565b601d5462010000900460ff16158015613ce25750613ce28585613bd3565b15613d555760405162461bcd60e51b815260206004820152602560248201527f4f6e6c79206f776e65722063616e207472616e7366657220617420746869732060448201527f74696d652e0000000000000000000000000000000000000000000000000000006064820152608401611005565b613d5f8585613bd3565b15613e1357601d546040517fecd07a530000000000000000000000000000000000000000000000000000000081526001600160a01b03878116600483015286811660248301526044820186905260009263010000009004169063ecd07a53906064016020604051808303816000875af1925050508015613dfc575060408051601f3d908101601f19168201909252613df991810190615560565b60015b613e0557600080fd5b905080613e1157600080fd5b505b6001600160a01b03851660009081526001602052604081208054859290613e3b9084906153bc565b9091555050601d5460ff1615613e5d57613e5685858561418b565b9050613f72565b30600090815260016020526040902054601c548110613e7b5750601c545b601d5460ff16158015613ea757506001600160a01b03861660009081526002602052604090205460ff16155b8015613eb55750601a5460ff165b8015613ec35750601b548110155b15613ed157613ed181614213565b838315613ee657613ee387878761473c565b90505b6001600160a01b03861660009081526001602052604081208054839290613f0e90849061557d565b90915550613f1e90508787614923565b856001600160a01b0316876001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051613f6391815260200190565b60405180910390a36001925050505b949350505050565b601d5462010000900460ff1615613ff95760405162461bcd60e51b815260206004820152602360248201527f4c697175696469747920616c726561647920616464656420616e64206d61726b60448201527f65642e00000000000000000000000000000000000000000000000000000000006064820152608401611005565b6140038282613bd3565b15801561401d57506010546001600160a01b038281169116145b1561232e576001600160a01b038083166000908152600760205260409020805460ff19166001179055601d80547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ffff1662010000179081905563010000009004166140b257601d80547fffffffffffffffffff0000000000000000000000000000000000000000ffffff16306301000000021790555b6018546001600160a01b03166140e2576018805473ffffffffffffffffffffffffffffffffffffffff1916301790555b601860009054906101000a90046001600160a01b03166001600160a01b0316638129fc1c6040518163ffffffff1660e01b8152600401600060405180830381600087803b15801561413257600080fd5b505af1925050508015614143575060015b50601a805460ff191660019081179091556040519081527f7b0a47d3b0234280b6c9213c5bbff44c8b6001bea7770b3950280f91410532579060200160405180910390a15050565b6001600160a01b0382166000908152600160205260408120805483919083906141b590849061557d565b92505081905550826001600160a01b0316846001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8460405161420191815260200190565b60405180910390a35060019392505050565b601d805460ff191660011790556040805160c081018252600d5461ffff80821683526201000082048116602084015264010000000082048116938301939093526601000000000000810483166060830152680100000000000000008104831660808301526a0100000000000000000000900490911660a08201819052614299575061472f565b306000908152600460209081526040808320600f546001600160a01b03168452909152902054600019146142f257306000908152600460209081526040808320600f546001600160a01b03168452909152902060001990555b600060028260a0015161ffff16836020015161ffff16856143139190615353565b61431d9190615381565b6143279190615381565b9050600061433582856153bc565b6040805160028082526060820183529293506000929091602083019080368337019050509050308160008151811061436f5761436f6151ea565b6001600160a01b0392831660209182029290920101526011548251911690829060019081106143a0576143a06151ea565b6001600160a01b039283166020918202929092010152600f546040517f791ac94700000000000000000000000000000000000000000000000000000000815291169063791ac947906143ff908590600090869030904290600401615595565b600060405180830381600087803b15801561441957600080fd5b505af115801561442d573d6000803e3d6000fd5b50479250600091508490506144428684615353565b61444c9190615381565b905061445881836153bc565b915085602001518660a00181815161447091906155d1565b61ffff90811690915260a088015188516000935090821691614493911685615353565b61449d9190615381565b905060008760a0015161ffff16886000015161ffff16856144be9190615353565b6144c89190615381565b905060008860a0015161ffff16896000015161ffff16866144e99190615353565b6144f39190615381565b9050600081614502848661557d565b61450c919061557d565b61451690876153bc565b9050881561460957600f546012546040517ff305d719000000000000000000000000000000000000000000000000000000008152306004820152602481018c905260006044820181905260648201526001600160a01b0391821660848201524260a482015291169063f305d71990879060c40160606040518083038185885af11580156145a7573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906145cc91906155f4565b505060408051878152602081018c90527f424db2872186fa7e7afa7a5e902ed3b49a2ef19c2f5431e672462495dd6b450692500160405180910390a15b601860009054906101000a90046001600160a01b03166001600160a01b03166386d5c4be856040518263ffffffff1660e01b81526004016000604051808303818588803b15801561465957600080fd5b505af19350505050801561466b575060015b508515614724576015546040516001600160a01b039091169084156108fc029085906000818181858888f193505050501580156146ac573d6000803e3d6000fd5b506014546040516001600160a01b039091169083156108fc029084906000818181858888f193505050501580156146e7573d6000803e3d6000fd5b506013546040516001600160a01b039091169082156108fc029083906000818181858888f19350505050158015614722573d6000803e3d6000fd5b505b505050505050505050505b50601d805460ff19169055565b6001600160a01b038316600090815260026020526040812054819060ff161561476c5750600c5461ffff16614870565b6001600160a01b03841660009081526002602052604090205460ff161561485f57601d5477010000000000000000000000000000000000000000000000900460ff1680156147de5750601e546001600160a01b03861660009081526008602052604090205442916147dc9161557d565b115b156147ec5750602054614870565b601d547801000000000000000000000000000000000000000000000000900460ff16801561483e5750601f546001600160a01b038616600090815260086020526040902054429161483c9161557d565b115b1561484c5750602154614870565b50600c5462010000900461ffff16614870565b50600c54640100000000900461ffff165b8061487e5782915050611582565b600e546000906601000000000000900461ffff1661489c8386615353565b6148a69190615381565b306000908152600160205260408120805492935083929091906148ca90849061557d565b909155505060405181815230906001600160a01b038816907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a361491981856153bc565b9695505050505050565b6001600160a01b03821660009081526006602052604090205460ff166149cd576018546001600160a01b03838116600081815260016020526040908190205490517fdf047e9e0000000000000000000000000000000000000000000000000000000081526004810192909252602482015291169063df047e9e90604401600060405180830381600087803b1580156149ba57600080fd5b505af19250505080156149cb575060015b505b6001600160a01b03811660009081526006602052604090205460ff16614a77576018546001600160a01b03828116600081815260016020526040908190205490517fdf047e9e0000000000000000000000000000000000000000000000000000000081526004810192909252602482015291169063df047e9e90604401600060405180830381600087803b158015614a6457600080fd5b505af1925050508015614a75575060015b505b601a54610100900460ff161561232e576018546019546040517fa9e732bb0000000000000000000000000000000000000000000000000000000081526001600160a01b039092169163a9e732bb91614ad59160040190815260200190565b600060405180830381600087803b158015614aef57600080fd5b505af1925050508015614b00575060015b61232e575050565b60008060408385031215614b1b57600080fd5b50508035926020909101359150565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff81118282101715614b8257614b82614b2a565b604052919050565b600067ffffffffffffffff821115614ba457614ba4614b2a565b5060051b60200190565b6001600160a01b038116811461192c57600080fd5b600082601f830112614bd457600080fd5b81356020614be9614be483614b8a565b614b59565b82815260059290921b84018101918181019086841115614c0857600080fd5b8286015b84811015614c2c578035614c1f81614bae565b8352918301918301614c0c565b509695505050505050565b801515811461192c57600080fd5b60008060408385031215614c5857600080fd5b823567ffffffffffffffff811115614c6f57600080fd5b614c7b85828601614bc3565b9250506020830135614c8c81614c37565b809150509250929050565b60005b83811015614cb2578181015183820152602001614c9a565b8381111561299c5750506000910152565b60008151808452614cdb816020860160208601614c97565b601f01601f19169290920160200192915050565b6020815260006115826020830184614cc3565b600060208284031215614d1457600080fd5b5035919050565b60008060408385031215614d2e57600080fd5b8235614d3981614bae565b946020939093013593505050565b600080600060608486031215614d5c57600080fd5b505081359360208301359350604090920135919050565b60008060408385031215614d8657600080fd5b8235614d9181614bae565b91506020830135614c8c81614bae565b600080600060608486031215614db657600080fd5b8335614dc181614bae565b92506020840135614dd181614bae565b929592945050506040919091013590565b600060208284031215614df457600080fd5b813561158281614bae565b600082601f830112614e1057600080fd5b81356020614e20614be483614b8a565b82815260059290921b84018101918181019086841115614e3f57600080fd5b8286015b84811015614c2c5780358352918301918301614e43565b60008060408385031215614e6d57600080fd5b823567ffffffffffffffff80821115614e8557600080fd5b614e9186838701614bc3565b93506020850135915080821115614ea757600080fd5b50614eb485828601614dff565b9150509250929050565b60008060008060808587031215614ed457600080fd5b8435614edf81614c37565b93506020850135614eef81614c37565b92506040850135614eff81614c37565b91506060850135614f0f81614c37565b939692955090935050565b803561ffff81168114614f2c57600080fd5b919050565b600080600060608486031215614f4657600080fd5b614f4f84614f1a565b9250614f5d60208501614f1a565b9150614f6b60408501614f1a565b90509250925092565b60008060408385031215614f8757600080fd5b8235614f9281614bae565b91506020830135614c8c81614c37565b608081526000614fb56080830187614cc3565b8281036020840152614fc78187614cc3565b90508281036040840152614fdb8186614cc3565b90508281036060840152614fef8185614cc3565b979650505050505050565b60008060006060848603121561500f57600080fd5b833561501a81614bae565b9250602084013561502a81614bae565b9150604084013561503a81614bae565b809150509250925092565b6000806040838503121561505857600080fd5b8235614f9281614c37565b60008060006060848603121561507857600080fd5b833567ffffffffffffffff8082111561509057600080fd5b61509c87838801614bc3565b945060208601359150808211156150b257600080fd5b6150be87838801614dff565b935060408601359150808211156150d457600080fd5b506150e186828701614dff565b9150509250925092565b600080600080600060a0868803121561510357600080fd5b61510c86614f1a565b945061511a60208701614f1a565b935061512860408701614f1a565b925061513660608701614f1a565b915061514460808701614f1a565b90509295509295909350565b6000806000806080858703121561516657600080fd5b5050823594602084013594506040840135936060013592509050565b600081518084526020808501945080840160005b838110156151bb5781516001600160a01b031687529582019590820190600101615196565b509495945050505050565b6040815260006151d96040830185615182565b905082151560208301529392505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600060001982141561525c5761525c615219565b5060010190565b600181815b8085111561529e57816000190482111561528457615284615219565b8085161561529157918102915b93841c9390800290615268565b509250929050565b6000826152b5575060016112ec565b816152c2575060006112ec565b81600181146152d857600281146152e2576152fe565b60019150506112ec565b60ff8411156152f3576152f3615219565b50506001821b6112ec565b5060208310610133831016604e8410600b8410161715615321575081810a6112ec565b61532b8383615263565b806000190482111561533f5761533f615219565b029392505050565b600061158283836152a6565b600081600019048311821515161561536d5761536d615219565b500290565b600061158260ff8416836152a6565b6000826153b7577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500490565b6000828210156153ce576153ce615219565b500390565b600060ff821660ff8114156153ea576153ea615219565b60010192915050565b60006020828403121561540557600080fd5b5051919050565b600082601f83011261541d57600080fd5b815167ffffffffffffffff81111561543757615437614b2a565b61544a6020601f19601f84011601614b59565b81815284602083860101111561545f57600080fd5b613f72826020830160208701614c97565b6000806000806080858703121561548657600080fd5b845167ffffffffffffffff8082111561549e57600080fd5b6154aa8883890161540c565b955060208701519150808211156154c057600080fd5b6154cc8883890161540c565b945060408701519150808211156154e257600080fd5b6154ee8883890161540c565b9350606087015191508082111561550457600080fd5b506155118782880161540c565b91505092959194509250565b60006020828403121561552f57600080fd5b815161158281614bae565b600061ffff80831681851680830382111561555757615557615219565b01949350505050565b60006020828403121561557257600080fd5b815161158281614c37565b6000821982111561559057615590615219565b500190565b85815284602082015260a0604082015260006155b460a0830186615182565b6001600160a01b0394909416606083015250608001529392505050565b600061ffff838116908316818110156155ec576155ec615219565b039392505050565b60008060006060848603121561560957600080fd5b835192506020840151915060408401519050925092509256fea2646970667358221220618f460f924275158d4e85cf6c9766f1eccdba43056142e8e489dc4999965e0464736f6c634300080b0033

Deployed Bytecode

0x6080604052600436106104d55760003560e01c80636ebd007811610279578063bc1a98a71161015e578063e8a0e3f9116100d6578063f7c245ea1161008a578063fb78680d1161006f578063fb78680d14610f55578063fdb78c0e14610f75578063fe575a8714610f8f57600080fd5b8063f7c245ea14610ee9578063f94aa1b414610efe57600080fd5b8063eec2744e116100bb578063eec2744e14610e8a578063efe7dc9014610eaa578063f08f43a214610ec957600080fd5b8063e8a0e3f914610e4a578063eafb5a3c14610e6a57600080fd5b8063cf8477061161012d578063dd62ed3e11610112578063dd62ed3e14610dc4578063dea528a114610e0a578063e894859114610e2a57600080fd5b8063cf84770614610d0a578063d0b1449d14610da457600080fd5b8063bc1a98a714610c5b578063bca238aa14610c91578063c6a276c214610cca578063cecd4e4f14610cea57600080fd5b80638a8c523c116101f1578063a13ce2c6116101c0578063ab5cb5a6116101a5578063ab5cb5a614610c0f578063ad064f8d14610c2f578063b0b2682e14610c4557600080fd5b8063a13ce2c614610bb9578063a9059cbb14610bef57600080fd5b80638a8c523c14610b495780638da5cb5b14610b1657806395d89b4114610b5e5780639dc6761514610ba457600080fd5b80637618ae8711610248578063891749301161022d5780638917493014610ae1578063893d20e814610b165780638a63bd9b14610b3457600080fd5b80637618ae8714610aab57806380c581d114610ac157600080fd5b80636ebd007814610a2b57806370a0823114610a40578063715018a614610a7657806375cb1bd114610a8b57600080fd5b806329dd8798116103ba578063452ed4f111610332578063590ffdce116102e65780636386c1c7116102cb5780636386c1c7146109c65780636ab86dc1146109f65780636b639a2514610a0b57600080fd5b8063590ffdce146109865780636372c68f146109a657600080fd5b80634fb2e45d116103175780634fb2e45d1461093157806350a8e0161461095157806355dbc3691461097157600080fd5b8063452ed4f1146108f25780634ada218b1461091257600080fd5b8063313ce5671161038957806333251a0b1161036e57806333251a0b146108aa57806333df2c20146108ca5780633f3cf56c146108d257600080fd5b8063313ce5671461086857806332cde6641461088a57600080fd5b806329dd8798146108075780632a1d7107146108275780632ddc7cc81461083d5780632e8fa8211461085257600080fd5b806309a8f1791161044d578063218950bc1161041c578063255a2e5411610401578063255a2e541461078e57806326003957146107c75780632610eaca146107e757600080fd5b8063218950bc1461074e57806323b872dd1461076e57600080fd5b806309a8f179146106995780630fa604e4146106b957806318160ddd146106ce5780631b6afa2d146106e357600080fd5b8063069d955f116104a45780630758d924116104895780630758d924146106295780630923160214610649578063095ea7b31461066957600080fd5b8063069d955f1461058457806306fdde03146105da57600080fd5b806302770283146104e157806303fd2a45146105035780630445b6671461054057806305bbedb61461056457600080fd5b366104dc57005b600080fd5b3480156104ed57600080fd5b506105016104fc366004614b08565b610faf565b005b34801561050f57600080fd5b50601254610523906001600160a01b031681565b6040516001600160a01b0390911681526020015b60405180910390f35b34801561054c57600080fd5b50610556601b5481565b604051908152602001610537565b34801561057057600080fd5b5061050161057f366004614c45565b611036565b34801561059057600080fd5b50600c546105b59061ffff808216916201000081048216916401000000009091041683565b6040805161ffff94851681529284166020840152921691810191909152606001610537565b3480156105e657600080fd5b5060408051808201909152600b81527f4869746d616e20576f6c6600000000000000000000000000000000000000000060208201525b6040516105379190614cef565b34801561063557600080fd5b50600f54610523906001600160a01b031681565b34801561065557600080fd5b50610501610664366004614d02565b611159565b34801561067557600080fd5b50610689610684366004614d1b565b611285565b6040519015158152602001610537565b3480156106a557600080fd5b506105016106b4366004614d47565b6112f2565b3480156106c557600080fd5b506105566113e5565b3480156106da57600080fd5b50600b54610556565b3480156106ef57600080fd5b50600e546107209061ffff808216916201000081048216916401000000008204811691660100000000000090041684565b6040805161ffff95861681529385166020850152918416918301919091529091166060820152608001610537565b34801561075a57600080fd5b50610501610769366004614d73565b61140b565b34801561077a57600080fd5b50610689610789366004614da1565b61150f565b34801561079a57600080fd5b506106896107a9366004614de2565b6001600160a01b031660009081526006602052604090205460ff1690565b3480156107d357600080fd5b506105016107e2366004614b08565b611589565b3480156107f357600080fd5b50610501610802366004614e5a565b6116a0565b34801561081357600080fd5b50610501610822366004614ebe565b6117bd565b34801561083357600080fd5b50610556601e5481565b34801561084957600080fd5b506105016118b3565b34801561085e57600080fd5b50610556601c5481565b34801561087457600080fd5b50600a5460405160ff9091168152602001610537565b34801561089657600080fd5b506105016108a5366004614f31565b61192f565b3480156108b657600080fd5b506105016108c5366004614de2565b611a4d565b610501611afa565b3480156108de57600080fd5b506105016108ed366004614b08565b611b5b565b3480156108fe57600080fd5b50601054610523906001600160a01b031681565b34801561091e57600080fd5b50601d5461068990610100900460ff1681565b34801561093d57600080fd5b5061050161094c366004614de2565b611c72565b34801561095d57600080fd5b50601d546106899062010000900460ff1681565b34801561097d57600080fd5b50610556611ebf565b34801561099257600080fd5b506105016109a1366004614f74565b611f38565b3480156109b257600080fd5b506105566109c1366004614de2565b611fbd565b3480156109d257600080fd5b506109e66109e1366004614de2565b612046565b6040516105379493929190614fa2565b348015610a0257600080fd5b506105016120e7565b348015610a1757600080fd5b50610501610a26366004614f74565b612191565b348015610a3757600080fd5b50610556612332565b348015610a4c57600080fd5b50610556610a5b366004614de2565b6001600160a01b031660009081526001602052604090205490565b348015610a8257600080fd5b50610501612353565b348015610a9757600080fd5b50610501610aa6366004614ffa565b612431565b348015610ab757600080fd5b5061055660215481565b348015610acd57600080fd5b50610501610adc366004614f74565b6124d7565b348015610aed57600080fd5b50601d546106899077010000000000000000000000000000000000000000000000900460ff1681565b348015610b2257600080fd5b506000546001600160a01b0316610523565b348015610b4057600080fd5b5061068961268b565b348015610b5557600080fd5b50610501612706565b348015610b6a57600080fd5b5060408051808201909152600681527f4849544d414e0000000000000000000000000000000000000000000000000000602082015261061c565b348015610bb057600080fd5b5061050161292a565b348015610bc557600080fd5b50610556610bd4366004614de2565b6001600160a01b031660009081526008602052604090205490565b348015610bfb57600080fd5b50610689610c0a366004614d1b565b6129a2565b348015610c1b57600080fd5b50610556610c2a366004614de2565b6129af565b348015610c3b57600080fd5b50610556601f5481565b348015610c5157600080fd5b5061055660205481565b348015610c6757600080fd5b50601d54610689907801000000000000000000000000000000000000000000000000900460ff1681565b348015610c9d57600080fd5b50610689610cac366004614de2565b6001600160a01b031660009081526005602052604090205460ff1690565b348015610cd657600080fd5b50610501610ce5366004614de2565b6129fb565b348015610cf657600080fd5b50610501610d05366004615045565b612aa8565b348015610d1657600080fd5b50600d54610d679061ffff808216916201000081048216916401000000008204811691660100000000000081048216916801000000000000000082048116916a010000000000000000000090041686565b6040805161ffff978816815295871660208701529386169385019390935290841660608401528316608083015290911660a082015260c001610537565b348015610db057600080fd5b50610501610dbf366004614d02565b612b94565b348015610dd057600080fd5b50610556610ddf366004614d73565b6001600160a01b03918216600090815260046020908152604080832093909416825291909152205490565b348015610e1657600080fd5b50610501610e25366004615045565b612c02565b348015610e3657600080fd5b50610501610e45366004614b08565b612cba565b348015610e5657600080fd5b50610501610e65366004615063565b612d48565b348015610e7657600080fd5b50610501610e85366004614de2565b612ea6565b348015610e9657600080fd5b50610501610ea5366004614f74565b613261565b348015610eb657600080fd5b50601a5461068990610100900460ff1681565b348015610ed557600080fd5b50610501610ee43660046150eb565b61334d565b348015610ef557600080fd5b506105566134e8565b348015610f0a57600080fd5b50601354601454601554610f2b926001600160a01b03908116928116911683565b604080516001600160a01b0394851681529284166020840152921691810191909152606001610537565b348015610f6157600080fd5b50610501610f70366004615150565b61354b565b348015610f8157600080fd5b50601a546106899060ff1681565b348015610f9b57600080fd5b50610689610faa366004614de2565b6135e4565b6000546001600160a01b0316331461100e5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064015b60405180910390fd5b610bb8821115801561102257506109c48111155b61102b57600080fd5b602091909155602155565b6000546001600160a01b031633146110905760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401611005565b601d546040517f05bbedb600000000000000000000000000000000000000000000000000000000815263010000009091046001600160a01b0316906305bbedb6906110e190859085906004016151c6565b600060405180830381600087803b1580156110fb57600080fd5b505af115801561110f573d6000803e3d6000fd5b5050505060005b825181101561115457611142838281518110611134576111346151ea565b602002602001015183612191565b8061114c81615248565b915050611116565b505050565b6000546001600160a01b031633146111b35760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401611005565b604b8110156112045760405162461bcd60e51b815260206004820152600860248201527f546f6f206c6f772e0000000000000000000000000000000000000000000000006044820152606401611005565b601d546040517f092316020000000000000000000000000000000000000000000000000000000081526004810183905263010000009091046001600160a01b0316906309231602906024015b600060405180830381600087803b15801561126a57600080fd5b505af115801561127e573d6000803e3d6000fd5b5050505050565b3360008181526004602090815260408083206001600160a01b038716808552925280832085905551919290917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925906112e09086815260200190565b60405180910390a35060015b92915050565b6000546001600160a01b0316331461134c5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401611005565b61135781600a615347565b6113619083615353565b6018546040517f8cd7f02e00000000000000000000000000000000000000000000000000000000815260048101869052602481018390529193506001600160a01b031690638cd7f02e90604401600060405180830381600087803b1580156113c857600080fd5b505af11580156113dc573d6000803e3d6000fd5b50505050505050565b600a80546000916113f99160ff1690615372565b6017546114069190615381565b905090565b6000546001600160a01b031633146114655760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401611005565b6001600160a01b038116301480159061148757506001600160a01b0382163014155b80156114a55750816001600160a01b0316816001600160a01b031614155b6114ae57600080fd5b6018805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b03928316179055601d80547fffffffffffffffffff0000000000000000000000000000000000000000ffffff1663010000009390921692909202179055565b6001600160a01b038316600090815260046020908152604080832033845290915281205460001914611574576001600160a01b03841660009081526004602090815260408083203384529091528120805484929061156e9084906153bc565b90915550505b61157f848484613673565b90505b9392505050565b6000546001600160a01b031633146115e35760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401611005565b6103e8600b546115f39190615381565b8183600b546116029190615353565b61160c9190615381565b10156116805760405162461bcd60e51b815260206004820152603260248201527f4d61782057616c6c657420616d74206d7573742062652061626f766520302e3160448201527f25206f6620746f74616c20737570706c792e00000000000000000000000000006064820152608401611005565b8082600b5461168f9190615353565b6116999190615381565b6017555050565b80518251146116f15760405162461bcd60e51b815260206004820152601560248201527f4c656e6774687320646f206e6f74206d617463682e00000000000000000000006044820152606401611005565b60005b82518160ff16101561115457818160ff1681518110611715576117156151ea565b602002602001015161173c336001600160a01b031660009081526001602052604090205490565b101561174757600080fd5b6117aa33848360ff1681518110611760576117606151ea565b6020908102919091010151600a805461177e9160ff90911690615372565b858560ff1681518110611793576117936151ea565b60200260200101516117a59190615353565b613673565b50806117b5816153d3565b9150506116f4565b6000546001600160a01b031633146118175760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401611005565b601d546040517f0109da69000000000000000000000000000000000000000000000000000000008152851515600482015284151560248201528315156044820152821515606482015263010000009091046001600160a01b031690630109da6990608401600060405180830381600087803b15801561189557600080fd5b505af11580156118a9573d6000803e3d6000fd5b5050505050505050565b6018546019546040517fa9e732bb0000000000000000000000000000000000000000000000000000000081526001600160a01b039092169163a9e732bb916119019160040190815260200190565b600060405180830381600087803b15801561191b57600080fd5b505af192505050801561192c575060015b50565b6000546001600160a01b031633146119895760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401611005565b600e5461ffff908116908416118015906119b35750600e5461ffff62010000909104811690831611155b80156119d15750600e5461ffff640100000000909104811690821611155b6119da57600080fd5b600c805461ffff9485167fffffffffffffffffffffffffffffffffffffffffffffffffffffffff00000000909116176201000093851693909302929092177fffffffffffffffffffffffffffffffffffffffffffffffffffff0000ffffffff166401000000009190931602919091179055565b6000546001600160a01b03163314611aa75760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401611005565b601d546040517f33251a0b0000000000000000000000000000000000000000000000000000000081526001600160a01b0383811660048301526301000000909204909116906333251a0b90602401611250565b601860009054906101000a90046001600160a01b03166001600160a01b03166386d5c4be346040518263ffffffff1660e01b81526004016000604051808303818588803b158015611b4a57600080fd5b505af19350505050801561192c5750565b6000546001600160a01b03163314611bb55760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401611005565b6103e8600b54611bc59190615381565b8183600b54611bd49190615353565b611bde9190615381565b1015611c525760405162461bcd60e51b815260206004820152603760248201527f4d6178205472616e73616374696f6e20616d74206d7573742062652061626f7660448201527f6520302e3125206f6620746f74616c20737570706c792e0000000000000000006064820152608401611005565b8082600b54611c619190615353565b611c6b9190615381565b6016555050565b6000546001600160a01b03163314611ccc5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401611005565b6001600160a01b038116611d485760405162461bcd60e51b815260206004820152603d60248201527f43616c6c2072656e6f756e63654f776e65727368697020746f207472616e736660448201527f6572206f776e657220746f20746865207a65726f20616464726573732e0000006064820152608401611005565b6012546001600160a01b0382811691161415611dcc5760405162461bcd60e51b815260206004820152603d60248201527f43616c6c2072656e6f756e63654f776e65727368697020746f207472616e736660448201527f6572206f776e657220746f20746865207a65726f20616464726573732e0000006064820152608401611005565b600080546001600160a01b039081168252600560208181526040808520805460ff1990811690915585548516865260068084528287208054831690558786168752938352818620805482166001908117909155938352818620805490911684179055845490931684525290205415611e6757600080546001600160a01b03168082526001602052604090912054611e6591908390613673565b505b6000805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b0383169081178255604051909182917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a350565b6000601d60039054906101000a90046001600160a01b03166001600160a01b03166355dbc3696040518163ffffffff1660e01b8152600401602060405180830381865afa158015611f14573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061140691906153f3565b6000546001600160a01b03163314611f925760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401611005565b6001600160a01b03919091166000908152600560205260409020805460ff1916911515919091179055565b6018546040517fd59b2ffd0000000000000000000000000000000000000000000000000000000081526001600160a01b038381166004830152600092169063d59b2ffd906024015b602060405180830381865afa158015612022573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112ec91906153f3565b6018546040517f5e6056bb0000000000000000000000000000000000000000000000000000000081526001600160a01b0383811660048301526060928392839283921690635e6056bb90602401600060405180830381865afa1580156120b0573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526120d89190810190615470565b93509350935093509193509193565b6000546001600160a01b031633146121415760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401611005565b601860009054906101000a90046001600160a01b03166001600160a01b03166386d5c4be476040518263ffffffff1660e01b81526004016000604051808303818588803b158015611b4a57600080fd5b6000546001600160a01b031633146121eb5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401611005565b6001600160a01b038216301480159061221257506010546001600160a01b03838116911614155b61221b57600080fd5b6001600160a01b0382166000908152600660205260409020805460ff191682158015919091179091556122cc576018546040517fdf047e9e0000000000000000000000000000000000000000000000000000000081526001600160a01b038481166004830152600060248301529091169063df047e9e906044015b600060405180830381600087803b1580156122b057600080fd5b505af11580156122c4573d6000803e3d6000fd5b505050505050565b6018546001600160a01b03838116600081815260016020526040908190205490517fdf047e9e0000000000000000000000000000000000000000000000000000000081526004810192909252602482015291169063df047e9e90604401612296565b5050565b600a80546000916123469160ff1690615372565b6016546114069190615381565b6000546001600160a01b031633146123ad5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401611005565b600080546001600160a01b039081168252600560209081526040808420805460ff199081169091558454909316845260069091528083208054909216909155815473ffffffffffffffffffffffffffffffffffffffff191682555181907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a3565b6000546001600160a01b0316331461248b5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401611005565b601380546001600160a01b0394851673ffffffffffffffffffffffffffffffffffffffff1991821617909155601580549385169382169390931790925560148054919093169116179055565b6000546001600160a01b031633146125315760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401611005565b806125a9576001600160a01b03828116600081815260026020526040808220805460ff19169055601d5490517f80c581d10000000000000000000000000000000000000000000000000000000081526004810193909352602483019190915263010000009004909116906380c581d190604401612296565b60035415612610576203f480600354426125c391906153bc565b116126105760405162461bcd60e51b815260206004820181905260248201527f43616e6e6f74207365742061206e657720706169722074686973207765656b216044820152606401611005565b6001600160a01b0382811660008181526002602052604090819020805460ff1916600190811790915542600355601d5491517f80c581d10000000000000000000000000000000000000000000000000000000081526004810193909352602483015263010000009004909116906380c581d190604401612296565b600080546001600160a01b031633146126e65760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401611005565b600f546127009030906001600160a01b0316600019613a7b565b50600190565b6000546001600160a01b031633146127605760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401611005565b601d54610100900460ff16156127b85760405162461bcd60e51b815260206004820152601860248201527f54726164696e6720616c726561647920656e61626c65642100000000000000006044820152606401611005565b601d5462010000900460ff166128105760405162461bcd60e51b815260206004820152601860248201527f4c6971756964697479206d7573742062652061646465642e00000000000000006044820152606401611005565b601d54630100000090046001600160a01b031661285857601d80547fffffffffffffffffff0000000000000000000000000000000000000000ffffff16306301000000021790555b601d54601054600a546040517f6c115c340000000000000000000000000000000000000000000000000000000081526001600160a01b03928316600482015263ffffffff4316602482015267ffffffffffffffff4216604482015260ff909116606482015263010000009092041690636c115c3490608401600060405180830381600087803b1580156128ea57600080fd5b505af19250505080156128fb575060015b50601d80547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff16610100179055565b6018546040517f2e6f0efd0000000000000000000000000000000000000000000000000000000081523360048201526001600160a01b0390911690632e6f0efd90602401600060405180830381600087803b15801561298857600080fd5b505af115801561299c573d6000803e3d6000fd5b50505050565b6000611582338484613673565b6018546040517ff6ed20170000000000000000000000000000000000000000000000000000000081526001600160a01b038381166004830152600092169063f6ed201790602401612005565b6000546001600160a01b03163314612a555760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401611005565b601d546040517fc6a276c20000000000000000000000000000000000000000000000000000000081526001600160a01b03838116600483015263010000009092049091169063c6a276c290602401611250565b6000546001600160a01b03163314612b025760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401611005565b601d80547fffffffffffffff0000ffffffffffffffffffffffffffffffffffffffffffffff1677010000000000000000000000000000000000000000000000931515939093027fffffffffffffff00ffffffffffffffffffffffffffffffffffffffffffffffff1692909217780100000000000000000000000000000000000000000000000091151591909102179055565b6000546001600160a01b03163314612bee5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401611005565b620b71b08110612bfd57600080fd5b601955565b6000546001600160a01b03163314612c5c5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401611005565b601a80547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000169215157fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff169290921761010091151591909102179055565b6000546001600160a01b03163314612d145760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401611005565b6102588211158015612d2957506202a3008111155b8015612d3457508181115b612d3d57600080fd5b601e91909155601f55565b81518351148015612d5a575080518251145b612da65760405162461bcd60e51b815260206004820152601560248201527f4c656e6774687320646f206e6f74206d617463682e00000000000000000000006044820152606401611005565b60005b83518160ff16101561299c57818160ff1681518110612dca57612dca6151ea565b6020026020010151838260ff1681518110612de757612de76151ea565b6020026020010151600b54612dfc9190615353565b612e069190615381565b336000908152600160205260409020541015612e2157600080fd5b612e9333858360ff1681518110612e3a57612e3a6151ea565b6020026020010151848460ff1681518110612e5757612e576151ea565b6020026020010151868560ff1681518110612e7457612e746151ea565b6020026020010151600b54612e899190615353565b6117a59190615381565b5080612e9e816153d3565b915050612da9565b6000546001600160a01b03163314612f005760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401611005565b60008190506000816001600160a01b031663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015612f45573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612f69919061551d565b6001600160a01b031663e6a4390530846001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015612fb6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612fda919061551d565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e085901b1681526001600160a01b03928316600482015291166024820152604401602060405180830381865afa15801561303d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613061919061551d565b90506001600160a01b0381166131ff57816001600160a01b031663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa1580156130af573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906130d3919061551d565b6001600160a01b031663c9c6539630846001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015613120573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613144919061551d565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e085901b1681526001600160a01b039283166004820152911660248201526044016020604051808303816000875af11580156131a9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906131cd919061551d565b6010805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b0392909216919091179055613228565b6010805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b0383161790555b600f805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b038416908117909155611154903090600019613a7b565b6000546001600160a01b031633146132bb5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401611005565b601d546040517feec2744e0000000000000000000000000000000000000000000000000000000081526001600160a01b038481166004830152831515602483015263010000009092049091169063eec2744e90604401600060405180830381600087803b15801561332b57600080fd5b505af115801561333f573d6000803e3d6000fd5b5050505061232e8282612191565b6000546001600160a01b031633146133a75760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401611005565b600d805461ffff8781167fffffffffffffffffffffffffffffffffffffffffffffffffffffffff00000000909216919091176201000087831602177fffffffffffffffffffffffffffffffffffffffffffffffff00000000ffffffff16640100000000868316027fffffffffffffffffffffffffffffffffffffffffffffffff0000ffffffffffff1617660100000000000085831602177fffffffffffffffffffffffffffffffffffffffffffff0000ffffffffffffffff166801000000000000000091841691909102179055808284613481878961553a565b61348b919061553a565b613495919061553a565b61349f919061553a565b600d805461ffff929092166a0100000000000000000000027fffffffffffffffffffffffffffffffffffffffff0000ffffffffffffffffffff9092169190911790555050505050565b601854604080517f5695fa5800000000000000000000000000000000000000000000000000000000815290516000926001600160a01b031691635695fa589160048083019260209291908290030181865afa158015611f14573d6000803e3d6000fd5b6000546001600160a01b031633146135a55760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401611005565b8284600b546135b49190615353565b6135be9190615381565b601b55600b5481906135d1908490615353565b6135db9190615381565b601c5550505050565b601d546040517ffe575a870000000000000000000000000000000000000000000000000000000081526001600160a01b03838116600483015260009263010000009004169063fe575a8790602401602060405180830381865afa15801561364f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112ec9190615560565b60006001600160a01b0384166136f15760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f20616460448201527f64726573730000000000000000000000000000000000000000000000000000006064820152608401611005565b6001600160a01b03831661376d5760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201527f65737300000000000000000000000000000000000000000000000000000000006064820152608401611005565b600082116137e35760405162461bcd60e51b815260206004820152602960248201527f5472616e7366657220616d6f756e74206d75737420626520677265617465722060448201527f7468616e207a65726f00000000000000000000000000000000000000000000006064820152608401611005565b6137ed8484613bd3565b156139e257601d54610100900460ff166138495760405162461bcd60e51b815260206004820152601860248201527f54726164696e67206e6f742079657420656e61626c65642100000000000000006044820152606401611005565b6001600160a01b03841660009081526002602052604090205460ff168061388857506001600160a01b03831660009081526002602052604090205460ff165b15613905576016548211156139055760405162461bcd60e51b815260206004820152602860248201527f5472616e7366657220616d6f756e74206578636565647320746865206d61785460448201527f78416d6f756e742e0000000000000000000000000000000000000000000000006064820152608401611005565b600f546001600160a01b0384811691161480159061393c57506001600160a01b03831660009081526002602052604090205460ff16155b156139e25760175482613964856001600160a01b031660009081526001602052604090205490565b61396e919061557d565b11156139e25760405162461bcd60e51b815260206004820152602a60248201527f5472616e7366657220616d6f756e74206578636565647320746865206d61785760448201527f616c6c657453697a652e000000000000000000000000000000000000000000006064820152608401611005565b6001600160a01b038316600090815260016020526040902054613a1b576001600160a01b03831660009081526008602052604090204290555b6001600160a01b03841660009081526005602052604090205460019060ff1680613a5d57506001600160a01b03841660009081526005602052604090205460ff165b15613a66575060005b613a7285858584613ca7565b95945050505050565b6001600160a01b038316613af65760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460448201527f72657373000000000000000000000000000000000000000000000000000000006064820152608401611005565b6001600160a01b038216613b725760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f20616464726560448201527f73730000000000000000000000000000000000000000000000000000000000006064820152608401611005565b6001600160a01b0383811660008181526004602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b600080546001600160a01b03848116911614801590613c0057506000546001600160a01b03838116911614155b8015613c1757506000546001600160a01b03163214155b8015613c3c57506001600160a01b03821660009081526007602052604090205460ff16155b8015613c6157506001600160a01b03831660009081526007602052604090205460ff16155b8015613c7b57506012546001600160a01b03838116911614155b8015613c8f57506001600160a01b03821615155b8015611582575050506001600160a01b031630141590565b601d5460009062010000900460ff16613d5557613cc48585613f7a565b601d5462010000900460ff16158015613ce25750613ce28585613bd3565b15613d555760405162461bcd60e51b815260206004820152602560248201527f4f6e6c79206f776e65722063616e207472616e7366657220617420746869732060448201527f74696d652e0000000000000000000000000000000000000000000000000000006064820152608401611005565b613d5f8585613bd3565b15613e1357601d546040517fecd07a530000000000000000000000000000000000000000000000000000000081526001600160a01b03878116600483015286811660248301526044820186905260009263010000009004169063ecd07a53906064016020604051808303816000875af1925050508015613dfc575060408051601f3d908101601f19168201909252613df991810190615560565b60015b613e0557600080fd5b905080613e1157600080fd5b505b6001600160a01b03851660009081526001602052604081208054859290613e3b9084906153bc565b9091555050601d5460ff1615613e5d57613e5685858561418b565b9050613f72565b30600090815260016020526040902054601c548110613e7b5750601c545b601d5460ff16158015613ea757506001600160a01b03861660009081526002602052604090205460ff16155b8015613eb55750601a5460ff165b8015613ec35750601b548110155b15613ed157613ed181614213565b838315613ee657613ee387878761473c565b90505b6001600160a01b03861660009081526001602052604081208054839290613f0e90849061557d565b90915550613f1e90508787614923565b856001600160a01b0316876001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051613f6391815260200190565b60405180910390a36001925050505b949350505050565b601d5462010000900460ff1615613ff95760405162461bcd60e51b815260206004820152602360248201527f4c697175696469747920616c726561647920616464656420616e64206d61726b60448201527f65642e00000000000000000000000000000000000000000000000000000000006064820152608401611005565b6140038282613bd3565b15801561401d57506010546001600160a01b038281169116145b1561232e576001600160a01b038083166000908152600760205260409020805460ff19166001179055601d80547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ffff1662010000179081905563010000009004166140b257601d80547fffffffffffffffffff0000000000000000000000000000000000000000ffffff16306301000000021790555b6018546001600160a01b03166140e2576018805473ffffffffffffffffffffffffffffffffffffffff1916301790555b601860009054906101000a90046001600160a01b03166001600160a01b0316638129fc1c6040518163ffffffff1660e01b8152600401600060405180830381600087803b15801561413257600080fd5b505af1925050508015614143575060015b50601a805460ff191660019081179091556040519081527f7b0a47d3b0234280b6c9213c5bbff44c8b6001bea7770b3950280f91410532579060200160405180910390a15050565b6001600160a01b0382166000908152600160205260408120805483919083906141b590849061557d565b92505081905550826001600160a01b0316846001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8460405161420191815260200190565b60405180910390a35060019392505050565b601d805460ff191660011790556040805160c081018252600d5461ffff80821683526201000082048116602084015264010000000082048116938301939093526601000000000000810483166060830152680100000000000000008104831660808301526a0100000000000000000000900490911660a08201819052614299575061472f565b306000908152600460209081526040808320600f546001600160a01b03168452909152902054600019146142f257306000908152600460209081526040808320600f546001600160a01b03168452909152902060001990555b600060028260a0015161ffff16836020015161ffff16856143139190615353565b61431d9190615381565b6143279190615381565b9050600061433582856153bc565b6040805160028082526060820183529293506000929091602083019080368337019050509050308160008151811061436f5761436f6151ea565b6001600160a01b0392831660209182029290920101526011548251911690829060019081106143a0576143a06151ea565b6001600160a01b039283166020918202929092010152600f546040517f791ac94700000000000000000000000000000000000000000000000000000000815291169063791ac947906143ff908590600090869030904290600401615595565b600060405180830381600087803b15801561441957600080fd5b505af115801561442d573d6000803e3d6000fd5b50479250600091508490506144428684615353565b61444c9190615381565b905061445881836153bc565b915085602001518660a00181815161447091906155d1565b61ffff90811690915260a088015188516000935090821691614493911685615353565b61449d9190615381565b905060008760a0015161ffff16886000015161ffff16856144be9190615353565b6144c89190615381565b905060008860a0015161ffff16896000015161ffff16866144e99190615353565b6144f39190615381565b9050600081614502848661557d565b61450c919061557d565b61451690876153bc565b9050881561460957600f546012546040517ff305d719000000000000000000000000000000000000000000000000000000008152306004820152602481018c905260006044820181905260648201526001600160a01b0391821660848201524260a482015291169063f305d71990879060c40160606040518083038185885af11580156145a7573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906145cc91906155f4565b505060408051878152602081018c90527f424db2872186fa7e7afa7a5e902ed3b49a2ef19c2f5431e672462495dd6b450692500160405180910390a15b601860009054906101000a90046001600160a01b03166001600160a01b03166386d5c4be856040518263ffffffff1660e01b81526004016000604051808303818588803b15801561465957600080fd5b505af19350505050801561466b575060015b508515614724576015546040516001600160a01b039091169084156108fc029085906000818181858888f193505050501580156146ac573d6000803e3d6000fd5b506014546040516001600160a01b039091169083156108fc029084906000818181858888f193505050501580156146e7573d6000803e3d6000fd5b506013546040516001600160a01b039091169082156108fc029083906000818181858888f19350505050158015614722573d6000803e3d6000fd5b505b505050505050505050505b50601d805460ff19169055565b6001600160a01b038316600090815260026020526040812054819060ff161561476c5750600c5461ffff16614870565b6001600160a01b03841660009081526002602052604090205460ff161561485f57601d5477010000000000000000000000000000000000000000000000900460ff1680156147de5750601e546001600160a01b03861660009081526008602052604090205442916147dc9161557d565b115b156147ec5750602054614870565b601d547801000000000000000000000000000000000000000000000000900460ff16801561483e5750601f546001600160a01b038616600090815260086020526040902054429161483c9161557d565b115b1561484c5750602154614870565b50600c5462010000900461ffff16614870565b50600c54640100000000900461ffff165b8061487e5782915050611582565b600e546000906601000000000000900461ffff1661489c8386615353565b6148a69190615381565b306000908152600160205260408120805492935083929091906148ca90849061557d565b909155505060405181815230906001600160a01b038816907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a361491981856153bc565b9695505050505050565b6001600160a01b03821660009081526006602052604090205460ff166149cd576018546001600160a01b03838116600081815260016020526040908190205490517fdf047e9e0000000000000000000000000000000000000000000000000000000081526004810192909252602482015291169063df047e9e90604401600060405180830381600087803b1580156149ba57600080fd5b505af19250505080156149cb575060015b505b6001600160a01b03811660009081526006602052604090205460ff16614a77576018546001600160a01b03828116600081815260016020526040908190205490517fdf047e9e0000000000000000000000000000000000000000000000000000000081526004810192909252602482015291169063df047e9e90604401600060405180830381600087803b158015614a6457600080fd5b505af1925050508015614a75575060015b505b601a54610100900460ff161561232e576018546019546040517fa9e732bb0000000000000000000000000000000000000000000000000000000081526001600160a01b039092169163a9e732bb91614ad59160040190815260200190565b600060405180830381600087803b158015614aef57600080fd5b505af1925050508015614b00575060015b61232e575050565b60008060408385031215614b1b57600080fd5b50508035926020909101359150565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff81118282101715614b8257614b82614b2a565b604052919050565b600067ffffffffffffffff821115614ba457614ba4614b2a565b5060051b60200190565b6001600160a01b038116811461192c57600080fd5b600082601f830112614bd457600080fd5b81356020614be9614be483614b8a565b614b59565b82815260059290921b84018101918181019086841115614c0857600080fd5b8286015b84811015614c2c578035614c1f81614bae565b8352918301918301614c0c565b509695505050505050565b801515811461192c57600080fd5b60008060408385031215614c5857600080fd5b823567ffffffffffffffff811115614c6f57600080fd5b614c7b85828601614bc3565b9250506020830135614c8c81614c37565b809150509250929050565b60005b83811015614cb2578181015183820152602001614c9a565b8381111561299c5750506000910152565b60008151808452614cdb816020860160208601614c97565b601f01601f19169290920160200192915050565b6020815260006115826020830184614cc3565b600060208284031215614d1457600080fd5b5035919050565b60008060408385031215614d2e57600080fd5b8235614d3981614bae565b946020939093013593505050565b600080600060608486031215614d5c57600080fd5b505081359360208301359350604090920135919050565b60008060408385031215614d8657600080fd5b8235614d9181614bae565b91506020830135614c8c81614bae565b600080600060608486031215614db657600080fd5b8335614dc181614bae565b92506020840135614dd181614bae565b929592945050506040919091013590565b600060208284031215614df457600080fd5b813561158281614bae565b600082601f830112614e1057600080fd5b81356020614e20614be483614b8a565b82815260059290921b84018101918181019086841115614e3f57600080fd5b8286015b84811015614c2c5780358352918301918301614e43565b60008060408385031215614e6d57600080fd5b823567ffffffffffffffff80821115614e8557600080fd5b614e9186838701614bc3565b93506020850135915080821115614ea757600080fd5b50614eb485828601614dff565b9150509250929050565b60008060008060808587031215614ed457600080fd5b8435614edf81614c37565b93506020850135614eef81614c37565b92506040850135614eff81614c37565b91506060850135614f0f81614c37565b939692955090935050565b803561ffff81168114614f2c57600080fd5b919050565b600080600060608486031215614f4657600080fd5b614f4f84614f1a565b9250614f5d60208501614f1a565b9150614f6b60408501614f1a565b90509250925092565b60008060408385031215614f8757600080fd5b8235614f9281614bae565b91506020830135614c8c81614c37565b608081526000614fb56080830187614cc3565b8281036020840152614fc78187614cc3565b90508281036040840152614fdb8186614cc3565b90508281036060840152614fef8185614cc3565b979650505050505050565b60008060006060848603121561500f57600080fd5b833561501a81614bae565b9250602084013561502a81614bae565b9150604084013561503a81614bae565b809150509250925092565b6000806040838503121561505857600080fd5b8235614f9281614c37565b60008060006060848603121561507857600080fd5b833567ffffffffffffffff8082111561509057600080fd5b61509c87838801614bc3565b945060208601359150808211156150b257600080fd5b6150be87838801614dff565b935060408601359150808211156150d457600080fd5b506150e186828701614dff565b9150509250925092565b600080600080600060a0868803121561510357600080fd5b61510c86614f1a565b945061511a60208701614f1a565b935061512860408701614f1a565b925061513660608701614f1a565b915061514460808701614f1a565b90509295509295909350565b6000806000806080858703121561516657600080fd5b5050823594602084013594506040840135936060013592509050565b600081518084526020808501945080840160005b838110156151bb5781516001600160a01b031687529582019590820190600101615196565b509495945050505050565b6040815260006151d96040830185615182565b905082151560208301529392505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600060001982141561525c5761525c615219565b5060010190565b600181815b8085111561529e57816000190482111561528457615284615219565b8085161561529157918102915b93841c9390800290615268565b509250929050565b6000826152b5575060016112ec565b816152c2575060006112ec565b81600181146152d857600281146152e2576152fe565b60019150506112ec565b60ff8411156152f3576152f3615219565b50506001821b6112ec565b5060208310610133831016604e8410600b8410161715615321575081810a6112ec565b61532b8383615263565b806000190482111561533f5761533f615219565b029392505050565b600061158283836152a6565b600081600019048311821515161561536d5761536d615219565b500290565b600061158260ff8416836152a6565b6000826153b7577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500490565b6000828210156153ce576153ce615219565b500390565b600060ff821660ff8114156153ea576153ea615219565b60010192915050565b60006020828403121561540557600080fd5b5051919050565b600082601f83011261541d57600080fd5b815167ffffffffffffffff81111561543757615437614b2a565b61544a6020601f19601f84011601614b59565b81815284602083860101111561545f57600080fd5b613f72826020830160208701614c97565b6000806000806080858703121561548657600080fd5b845167ffffffffffffffff8082111561549e57600080fd5b6154aa8883890161540c565b955060208701519150808211156154c057600080fd5b6154cc8883890161540c565b945060408701519150808211156154e257600080fd5b6154ee8883890161540c565b9350606087015191508082111561550457600080fd5b506155118782880161540c565b91505092959194509250565b60006020828403121561552f57600080fd5b815161158281614bae565b600061ffff80831681851680830382111561555757615557615219565b01949350505050565b60006020828403121561557257600080fd5b815161158281614c37565b6000821982111561559057615590615219565b500190565b85815284602082015260a0604082015260006155b460a0830186615182565b6001600160a01b0394909416606083015250608001529392505050565b600061ffff838116908316818110156155ec576155ec615219565b039392505050565b60008060006060848603121561560957600080fd5b835192506020840151915060408401519050925092509256fea2646970667358221220618f460f924275158d4e85cf6c9766f1eccdba43056142e8e489dc4999965e0464736f6c634300080b0033

Deployed Bytecode Sourcemap

7155:25750:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30721:247;;;;;;;;;;-1:-1:-1;30721:247:0;;;;;:::i;:::-;;:::i;:::-;;9013:64;;;;;;;;;;-1:-1:-1;9013:64:0;;;;-1:-1:-1;;;;;9013:64:0;;;;;;-1:-1:-1;;;;;431:55:1;;;413:74;;401:2;386:18;9013:64:0;;;;;;;;9769:52;;;;;;;;;;;;;;;;;;;644:25:1;;;632:2;617:18;9769:52:0;498:177:1;16230:294:0;;;;;;;;;;-1:-1:-1;16230:294:0;;;;;:::i;:::-;;:::i;8403:116::-;;;;;;;;;;-1:-1:-1;8403:116:0;;;;;;;;;;;;;;;;;;;;;;;;;;3108:6:1;3141:15;;;3123:34;;3193:15;;;3188:2;3173:18;;3166:43;3245:15;;3225:18;;;3218:43;;;;3086:2;3071:18;8403:116:0;2902:365:1;14379:80:0;;;;;;;;;;-1:-1:-1;14451:5:0;;;;;;;;;;;;;;;;;14379:80;;;;;;;:::i;8923:26::-;;;;;;;;;;-1:-1:-1;8923:26:0;;;;-1:-1:-1;;;;;8923:26:0;;;17806:149;;;;;;;;;;-1:-1:-1;17806:149:0;;;;;:::i;:::-;;:::i;14801:216::-;;;;;;;;;;-1:-1:-1;14801:216:0;;;;;:::i;:::-;;:::i;:::-;;;5000:14:1;;4993:22;4975:41;;4963:2;4948:18;14801:216:0;4835:187:1;20454:277:0;;;;;;;;;;-1:-1:-1;20454:277:0;;;;;:::i;:::-;;:::i;23491:112::-;;;;;;;;;;;;;:::i;14114:83::-;;;;;;;;;;-1:-1:-1;14187:7:0;;14114:83;;8720:194;;;;;;;;;;-1:-1:-1;8720:194:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5581:6:1;5614:15;;;5596:34;;5666:15;;;5661:2;5646:18;;5639:43;5718:15;;;5698:18;;;5691:43;;;;5770:15;;;5765:2;5750:18;;5743:43;5558:3;5543:19;8720:194:0;5348:444:1;16921:300:0;;;;;;;;;;-1:-1:-1;16921:300:0;;;;;:::i;:::-;;:::i;15715:306::-;;;;;;;;;;-1:-1:-1;15715:306:0;;;;;:::i;:::-;;:::i;16788:125::-;;;;;;;;;;-1:-1:-1;16788:125:0;;;;;:::i;:::-;-1:-1:-1;;;;;16877:28:0;16853:4;16877:28;;;:19;:28;;;;;;;;;16788:125;23102:267;;;;;;;;;;-1:-1:-1;23102:267:0;;;;;:::i;:::-;;:::i;32039:373::-;;;;;;;;;;-1:-1:-1;32039:373:0;;;;;:::i;:::-;;:::i;17587:211::-;;;;;;;;;;-1:-1:-1;17587:211:0;;;;;:::i;:::-;;:::i;10101:46::-;;;;;;;;;;;;;;;;31234:107;;;;;;;;;;;;;:::i;9828:50::-;;;;;;;;;;;;;;;;14203:80;;;;;;;;;;-1:-1:-1;14271:9:0;;14203:80;;14271:9;;;;8964:36:1;;8952:2;8937:18;14203:80:0;8822:184:1;18889:386:0;;;;;;;;;;-1:-1:-1;18889:386:0;;;;;:::i;:::-;;:::i;17229:110::-;;;;;;;;;;-1:-1:-1;17229:110:0;;;;;:::i;:::-;;:::i;31108:118::-;;;:::i;22825:269::-;;;;;;;;;;-1:-1:-1;22825:269:0;;;;;:::i;:::-;;:::i;8956:21::-;;;;;;;;;;-1:-1:-1;8956:21:0;;;;-1:-1:-1;;;;;8956:21:0;;;9905:34;;;;;;;;;;-1:-1:-1;9905:34:0;;;;;;;;;;;12812:669;;;;;;;;;;-1:-1:-1;12812:669:0;;;;;:::i;:::-;;:::i;9946:36::-;;;;;;;;;;-1:-1:-1;9946:36:0;;;;;;;;;;;17475:104;;;;;;;;;;;;;:::i;18752:129::-;;;;;;;;;;-1:-1:-1;18752:129:0;;;;;:::i;:::-;;:::i;21312:154::-;;;;;;;;;;-1:-1:-1;21312:154:0;;;;;:::i;:::-;;:::i;21112:192::-;;;;;;;;;;-1:-1:-1;21112:192:0;;;;;:::i;:::-;;:::i;:::-;;;;;;;;;;:::i;30976:124::-;;;;;;;;;;;;;:::i;18400:344::-;;;;;;;;;;-1:-1:-1;18400:344:0;;;;;:::i;:::-;;:::i;23377:106::-;;;;;;;;;;;;;:::i;14551:103::-;;;;;;;;;;-1:-1:-1;14551:103:0;;;;;:::i;:::-;-1:-1:-1;;;;;14635:16:0;14617:7;14635:16;;;:7;:16;;;;;;;14551:103;13489:235;;;;;;;;;;;;;:::i;19679:269::-;;;;;;;;;;-1:-1:-1;19679:269:0;;;;;:::i;:::-;;:::i;10249:37::-;;;;;;;;;;;;;;;;22301:516;;;;;;;;;;-1:-1:-1;22301:516:0;;;;;:::i;:::-;;:::i;10017:35::-;;;;;;;;;;-1:-1:-1;10017:35:0;;;;;;;;;;;14465:80;;;;;;;;;;-1:-1:-1;14517:7:0;12790:6;-1:-1:-1;;;;;12790:6:0;14465:80;23491:112;15374:173;;;;;;;;;;;;;:::i;17963:429::-;;;;;;;;;;;;;:::i;14289:84::-;;;;;;;;;;-1:-1:-1;14363:7:0;;;;;;;;;;;;;;;;;14289:84;;20878:100;;;;;;;;;;;;;:::i;21632:111::-;;;;;;;;;;-1:-1:-1;21632:111:0;;;;;:::i;:::-;-1:-1:-1;;;;;21718:17:0;21691:7;21718:17;;;:8;:17;;;;;;;21632:111;15555:152;;;;;;;;;;-1:-1:-1;15555:152:0;;;;;:::i;:::-;;:::i;21474:150::-;;;;;;;;;;-1:-1:-1;21474:150:0;;;;;:::i;:::-;;:::i;10154:44::-;;;;;;;;;;;;;;;;10205:37;;;;;;;;;;;;;;;;10059:35;;;;;;;;;;-1:-1:-1;10059:35:0;;;;;;;;;;;16665:115;;;;;;;;;;-1:-1:-1;16665:115:0;;;;;:::i;:::-;-1:-1:-1;;;;;16749:23:0;16725:4;16749:23;;;:14;:23;;;;;;;;;16665:115;17347:120;;;;;;;;;;-1:-1:-1;17347:120:0;;;;;:::i;:::-;;:::i;30236:165::-;;;;;;;;;;-1:-1:-1;30236:165:0;;;;;:::i;:::-;;:::i;8528:183::-;;;;;;;;;;-1:-1:-1;8528:183:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11835:6:1;11868:15;;;11850:34;;11920:15;;;11915:2;11900:18;;11893:43;11972:15;;;11952:18;;;11945:43;;;;12024:15;;;12019:2;12004:18;;11997:43;12077:15;;12071:3;12056:19;;12049:44;12130:15;;;12124:3;12109:19;;12102:44;11812:3;11797:19;8528:183:0;11550:602:1;20739:131:0;;;;;;;;;;-1:-1:-1;20739:131:0;;;;;:::i;:::-;;:::i;14660:133::-;;;;;;;;;;-1:-1:-1;14660:133:0;;;;;:::i;:::-;-1:-1:-1;;;;;14762:19:0;;;14744:7;14762:19;;;:11;:19;;;;;;;;:28;;;;;;;;;;;;;14660:133;19956:193;;;;;;;;;;-1:-1:-1;19956:193:0;;;;;:::i;:::-;;:::i;30409:304::-;;;;;;;;;;-1:-1:-1;30409:304:0;;;;;:::i;:::-;;:::i;32420:482::-;;;;;;;;;;-1:-1:-1;32420:482:0;;;;;:::i;:::-;;:::i;21751:542::-;;;;;;;;;;-1:-1:-1;21751:542:0;;;;;:::i;:::-;;:::i;16029:193::-;;;;;;;;;;-1:-1:-1;16029:193:0;;;;;:::i;:::-;;:::i;9728:34::-;;;;;;;;;;-1:-1:-1;9728:34:0;;;;;;;;;;;19283:388;;;;;;;;;;-1:-1:-1;19283:388:0;;;;;:::i;:::-;;:::i;20986:118::-;;;;;;;;;;;;;:::i;9222:268::-;;;;;;;;;;-1:-1:-1;9222:268:0;;;;;;;;-1:-1:-1;;;;;9222:268:0;;;;;;;;;;;;;;-1:-1:-1;;;;;13791:15:1;;;13773:34;;13843:15;;;13838:2;13823:18;;13816:43;13895:15;;13875:18;;;13868:43;;;;13700:2;13685:18;9222:268:0;13462:455:1;20157:289:0;;;;;;;;;;-1:-1:-1;20157:289:0;;;;;:::i;:::-;;:::i;9682:39::-;;;;;;;;;;-1:-1:-1;9682:39:0;;;;;;;;16532:125;;;;;;;;;;-1:-1:-1;16532:125:0;;;;;:::i;:::-;;:::i;30721:247::-;10432:6;;-1:-1:-1;;;;;10432:6:0;10442:10;10432:20;10424:65;;;;-1:-1:-1;;;10424:65:0;;14514:2:1;10424:65:0;;;14496:21:1;;;14533:18;;;14526:30;14592:34;14572:18;;;14565:62;14644:18;;10424:65:0;;;;;;;;;30849:4:::1;30833:12;:20;;:44;;;;;30873:4;30857:12;:20;;30833:44;30825:53;;;::::0;::::1;;30889:15;:30:::0;;;;30930:15:::1;:30:::0;30721:247::o;16230:294::-;10432:6;;-1:-1:-1;;;;;10432:6:0;10442:10;10432:20;10424:65;;;;-1:-1:-1;;;10424:65:0;;14514:2:1;10424:65:0;;;14496:21:1;;;14533:18;;;14526:30;14592:34;14572:18;;;14565:62;14644:18;;10424:65:0;14312:356:1;10424:65:0;16338:9:::1;::::0;:56:::1;::::0;;;;:9;;;::::1;-1:-1:-1::0;;;;;16338:9:0::1;::::0;:37:::1;::::0;:56:::1;::::0;16376:8;;16386:7;;16338:56:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;16409:9;16405:112;16428:8;:15;16424:1;:19;16405:112;;;16464:41;16484:8;16493:1;16484:11;;;;;;;;:::i;:::-;;;;;;;16497:7;16464:19;:41::i;:::-;16445:3:::0;::::1;::::0;::::1;:::i;:::-;;;;16405:112;;;;16230:294:::0;;:::o;17806:149::-;10432:6;;-1:-1:-1;;;;;10432:6:0;10442:10;10432:20;10424:65;;;;-1:-1:-1;;;10424:65:0;;14514:2:1;10424:65:0;;;14496:21:1;;;14533:18;;;14526:30;14592:34;14572:18;;;14565:62;14644:18;;10424:65:0;14312:356:1;10424:65:0;17890:2:::1;17883:3;:9;;17875:30;;;::::0;-1:-1:-1;;;17875:30:0;;16289:2:1;17875:30:0::1;::::0;::::1;16271:21:1::0;16328:1;16308:18;;;16301:29;16366:10;16346:18;;;16339:38;16394:18;;17875:30:0::1;16087:331:1::0;17875:30:0::1;17916:9;::::0;:31:::1;::::0;;;;::::1;::::0;::::1;644:25:1::0;;;17916:9:0;;;::::1;-1:-1:-1::0;;;;;17916:9:0::1;::::0;:26:::1;::::0;617:18:1;;17916:31:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;17806:149:::0;:::o;14801:216::-;14905:10;14876:4;14893:23;;;:11;:23;;;;;;;;-1:-1:-1;;;;;14893:32:0;;;;;;;;;;:41;;;14950:37;14876:4;;14893:32;;14950:37;;;;14928:6;644:25:1;;632:2;617:18;;498:177;14950:37:0;;;;;;;;-1:-1:-1;15005:4:0;14801:216;;;;;:::o;20454:277::-;10432:6;;-1:-1:-1;;;;;10432:6:0;10442:10;10432:20;10424:65;;;;-1:-1:-1;;;10424:65:0;;14514:2:1;10424:65:0;;;14496:21:1;;;14533:18;;;14526:30;14592:34;14572:18;;;14565:62;14644:18;;10424:65:0;14312:356:1;10424:65:0;20626:27:::1;20630:23:::0;20626:2:::1;:27;:::i;:::-;20609:44;::::0;:14;:44:::1;:::i;:::-;20664:9;::::0;:59:::1;::::0;;;;::::1;::::0;::::1;18324:25:1::0;;;18365:18;;;18358:34;;;20592:61:0;;-1:-1:-1;;;;;;20664:9:0::1;::::0;:31:::1;::::0;18297:18:1;;20664:59:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;20454:277:::0;;;:::o;23491:112::-;23585:9;;;23536:7;;23581:13;;23585:9;;;23581:13;:::i;:::-;23563:14;;:32;;;;:::i;:::-;23556:39;;23491:112;:::o;16921:300::-;10432:6;;-1:-1:-1;;;;;10432:6:0;10442:10;10432:20;10424:65;;;;-1:-1:-1;;;10424:65:0;;14514:2:1;10424:65:0;;;14496:21:1;;;14533:18;;;14526:30;14592:34;14572:18;;;14565:62;14644:18;;10424:65:0;14312:356:1;10424:65:0;-1:-1:-1;;;;;17028:29:0;::::1;17052:4;17028:29;::::0;::::1;::::0;:62:::1;;-1:-1:-1::0;;;;;;17061:29:0;::::1;17085:4;17061:29;;17028:62;:94;;;;;17110:12;-1:-1:-1::0;;;;;17094:28:0::1;:12;-1:-1:-1::0;;;;;17094:28:0::1;;;17028:94;17020:103;;;::::0;::::1;;17134:9;:33:::0;;-1:-1:-1;;17134:33:0::1;-1:-1:-1::0;;;;;17134:33:0;;::::1;;::::0;;17178:9:::1;:35:::0;;;::::1;::::0;;;;::::1;::::0;;;::::1;;::::0;;16921:300::o;15715:306::-;-1:-1:-1;;;;;15836:19:0;;15815:4;15836:19;;;:11;:19;;;;;;;;15856:10;15836:31;;;;;;;;-1:-1:-1;;15836:52:0;15832:126;;-1:-1:-1;;;;;15905:19:0;;;;;;:11;:19;;;;;;;;15925:10;15905:31;;;;;;;:41;;15940:6;;15905:19;:41;;15940:6;;15905:41;:::i;:::-;;;;-1:-1:-1;;15832:126:0;15977:36;15987:6;15995:9;16006:6;15977:9;:36::i;:::-;15970:43;;15715:306;;;;;;:::o;23102:267::-;10432:6;;-1:-1:-1;;;;;10432:6:0;10442:10;10432:20;10424:65;;;;-1:-1:-1;;;10424:65:0;;14514:2:1;10424:65:0;;;14496:21:1;;;14533:18;;;14526:30;14592:34;14572:18;;;14565:62;14644:18;;10424:65:0;14312:356:1;10424:65:0;23244:4:::1;23234:7;;:14;;;;:::i;:::-;23222:7;23211;23201;;:17;;;;:::i;:::-;23200:29;;;;:::i;:::-;:49;;23192:112;;;::::0;-1:-1:-1;;;23192:112:0;;19159:2:1;23192:112:0::1;::::0;::::1;19141:21:1::0;19198:2;19178:18;;;19171:30;19237:34;19217:18;;;19210:62;19308:20;19288:18;;;19281:48;19346:19;;23192:112:0::1;18957:414:1::0;23192:112:0::1;23354:7;23343;23333;;:17;;;;:::i;:::-;23332:29;;;;:::i;:::-;23315:14;:46:::0;-1:-1:-1;;23102:267:0:o;32039:373::-;32164:7;:14;32145:8;:15;:33;32137:67;;;;-1:-1:-1;;;32137:67:0;;19578:2:1;32137:67:0;;;19560:21:1;19617:2;19597:18;;;19590:30;19656:23;19636:18;;;19629:51;19697:18;;32137:67:0;19376:345:1;32137:67:0;32220:7;32215:190;32237:8;:15;32233:1;:19;;;32215:190;;;32307:7;32315:1;32307:10;;;;;;;;;;:::i;:::-;;;;;;;32282:21;32292:10;-1:-1:-1;;;;;14635:16:0;14617:7;14635:16;;;:7;:16;;;;;;;14551:103;32282:21;:35;;32274:44;;;;;;32333:60;32343:10;32355:8;32364:1;32355:11;;;;;;;;;;:::i;:::-;;;;;;;;;;;32383:9;;;32379:13;;32383:9;;;;;32379:13;:::i;:::-;32368:7;32376:1;32368:10;;;;;;;;;;:::i;:::-;;;;;;;:24;;;;:::i;:::-;32333:9;:60::i;:::-;-1:-1:-1;32254:3:0;;;;:::i;:::-;;;;32215:190;;17587:211;10432:6;;-1:-1:-1;;;;;10432:6:0;10442:10;10432:20;10424:65;;;;-1:-1:-1;;;10424:65:0;;14514:2:1;10424:65:0;;;14496:21:1;;;14533:18;;;14526:30;14592:34;14572:18;;;14565:62;14644:18;;10424:65:0;14312:356:1;10424:65:0;17718:9:::1;::::0;:72:::1;::::0;;;;20138:14:1;;20131:22;17718:72:0::1;::::0;::::1;20113:41:1::0;20197:14;;20190:22;20170:18;;;20163:50;20256:14;;20249:22;20229:18;;;20222:50;20315:14;;20308:22;20288:18;;;20281:50;17718:9:0;;;::::1;-1:-1:-1::0;;;;;17718:9:0::1;::::0;:24:::1;::::0;20085:19:1;;17718:72:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;17587:211:::0;;;;:::o;31234:107::-;31291:9;;31309:12;;31291:31;;;;;-1:-1:-1;;;;;31291:9:0;;;;:17;;:31;;;;644:25:1;;;632:2;617:18;;498:177;31291:31:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;31287:47;31234:107::o;18889:386::-;10432:6;;-1:-1:-1;;;;;10432:6:0;10442:10;10432:20;10424:65;;;;-1:-1:-1;;;10424:65:0;;14514:2:1;10424:65:0;;;14496:21:1;;;14533:18;;;14526:30;14592:34;14572:18;;;14565:62;14644:18;;10424:65:0;14312:356:1;10424:65:0;19006:10:::1;:22:::0;::::1;::::0;;::::1;18996:32:::0;;::::1;;::::0;::::1;::::0;:87:::1;;-1:-1:-1::0;19060:10:0::1;:23:::0;::::1;::::0;;;::::1;::::0;::::1;19049:34:::0;;::::1;;;18996:87;:150;;;;-1:-1:-1::0;19119:10:0::1;:27:::0;::::1;::::0;;;::::1;::::0;::::1;19104:42:::0;;::::1;;;18996:150;18988:159;;;::::0;::::1;;19158:9;:25:::0;;::::1;::::0;;::::1;19194:27:::0;;;;;;;;::::1;::::0;;;::::1;::::0;;;::::1;19232:35:::0;::::1;::::0;;;;::::1;;::::0;;;::::1;::::0;;18889:386::o;17229:110::-;10432:6;;-1:-1:-1;;;;;10432:6:0;10442:10;10432:20;10424:65;;;;-1:-1:-1;;;10424:65:0;;14514:2:1;10424:65:0;;;14496:21:1;;;14533:18;;;14526:30;14592:34;14572:18;;;14565:62;14644:18;;10424:65:0;14312:356:1;10424:65:0;17300:9:::1;::::0;:31:::1;::::0;;;;-1:-1:-1;;;;;431:55:1;;;17300:31:0::1;::::0;::::1;413:74:1::0;17300:9:0;;;::::1;::::0;;::::1;::::0;:22:::1;::::0;386:18:1;;17300:31:0::1;267:226:1::0;31108:118:0;31173:9;;;;;;;;;-1:-1:-1;;;;;31173:9:0;-1:-1:-1;;;;;31173:14:0;;31195:9;31173:34;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;31234:107:0:o;22825:269::-;10432:6;;-1:-1:-1;;;;;10432:6:0;10442:10;10432:20;10424:65;;;;-1:-1:-1;;;10424:65:0;;14514:2:1;10424:65:0;;;14496:21:1;;;14533:18;;;14526:30;14592:34;14572:18;;;14565:62;14644:18;;10424:65:0;14312:356:1;10424:65:0;22966:4:::1;22956:7;;:14;;;;:::i;:::-;22944:7;22933;22923;;:17;;;;:::i;:::-;22922:29;;;;:::i;:::-;:49;;22914:117;;;::::0;-1:-1:-1;;;22914:117:0;;20544:2:1;22914:117:0::1;::::0;::::1;20526:21:1::0;20583:2;20563:18;;;20556:30;20622:34;20602:18;;;20595:62;20693:25;20673:18;;;20666:53;20736:19;;22914:117:0::1;20342:419:1::0;22914:117:0::1;23079:7;23068;23058;;:17;;;;:::i;:::-;23057:29;;;;:::i;:::-;23042:12;:44:::0;-1:-1:-1;;22825:269:0:o;12812:669::-;10432:6;;-1:-1:-1;;;;;10432:6:0;10442:10;10432:20;10424:65;;;;-1:-1:-1;;;10424:65:0;;14514:2:1;10424:65:0;;;14496:21:1;;;14533:18;;;14526:30;14592:34;14572:18;;;14565:62;14644:18;;10424:65:0;14312:356:1;10424:65:0;-1:-1:-1;;;;;12891:22:0;::::1;12883:96;;;::::0;-1:-1:-1;;;12883:96:0;;20968:2:1;12883:96:0::1;::::0;::::1;20950:21:1::0;21007:2;20987:18;;;20980:30;21046:34;21026:18;;;21019:62;21117:31;21097:18;;;21090:59;21166:19;;12883:96:0::1;20766:425:1::0;12883:96:0::1;13010:4;::::0;-1:-1:-1;;;;;12998:16:0;;::::1;13010:4:::0;::::1;12998:16;;12990:90;;;::::0;-1:-1:-1;;;12990:90:0;;20968:2:1;12990:90:0::1;::::0;::::1;20950:21:1::0;21007:2;20987:18;;;20980:30;21046:34;21026:18;;;21019:62;21117:31;21097:18;;;21090:59;21166:19;;12990:90:0::1;20766:425:1::0;12990:90:0::1;13116:5;13106:6:::0;;-1:-1:-1;;;;;13106:6:0;;::::1;13091:22:::0;;:14:::1;:22;::::0;;;;;;;:30;;-1:-1:-1;;13091:30:0;;::::1;::::0;;;13152:6;;;::::1;13132:27:::0;;:19:::1;:27:::0;;;;;;:35;;;::::1;::::0;;13178:24;;::::1;::::0;;;;;;;;:31;;;::::1;13106:6:::0;13178:31;;::::1;::::0;;;13220:29;;;;;;:36;;;;::::1;::::0;::::1;::::0;;13288:6;;;;::::1;13280:15:::0;;;;;;:19;13277:95:::1;;13326:6;::::0;;-1:-1:-1;;;;;13326:6:0::1;13344:15:::0;;;13326:6;13344:15:::1;::::0;;;;;;13316:44:::1;::::0;13326:6;13334:8;;13316:9:::1;:44::i;:::-;;13277:95;13392:6;:17:::0;;-1:-1:-1;;13392:17:0::1;-1:-1:-1::0;;;;;13392:17:0;::::1;::::0;;::::1;::::0;;13425:38:::1;::::0;13392:17;;;;13425:38:::1;::::0;13392:6;13425:38:::1;12812:669:::0;:::o;17475:104::-;17520:7;17547:9;;;;;;;;;-1:-1:-1;;;;;17547:9:0;-1:-1:-1;;;;;17547:22:0;;:24;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;18752:129::-;10432:6;;-1:-1:-1;;;;;10432:6:0;10442:10;10432:20;10424:65;;;;-1:-1:-1;;;10424:65:0;;14514:2:1;10424:65:0;;;14496:21:1;;;14533:18;;;14526:30;14592:34;14572:18;;;14565:62;14644:18;;10424:65:0;14312:356:1;10424:65:0;-1:-1:-1;;;;;18840:23:0;;;::::1;;::::0;;;:14:::1;:23;::::0;;;;:33;;-1:-1:-1;;18840:33:0::1;::::0;::::1;;::::0;;;::::1;::::0;;18752:129::o;21312:154::-;21413:9;;:45;;;;;-1:-1:-1;;;;;431:55:1;;;21413:45:0;;;413:74:1;21386:7:0;;21413:9;;:32;;386:18:1;;21413:45:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;21112:192::-;21255:9;;:41;;;;;-1:-1:-1;;;;;431:55:1;;;21255:41:0;;;413:74:1;21177:13:0;;;;;;;;21255:9;;:28;;386:18:1;;21255:41:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;21255:41:0;;;;;;;;;;;;:::i;:::-;21248:48;;;;;;;;21112:192;;;;;:::o;30976:124::-;10432:6;;-1:-1:-1;;;;;10432:6:0;10442:10;10432:20;10424:65;;;;-1:-1:-1;;;10424:65:0;;14514:2:1;10424:65:0;;;14496:21:1;;;14533:18;;;14526:30;14592:34;14572:18;;;14565:62;14644:18;;10424:65:0;14312:356:1;10424:65:0;31035:9:::1;;;;;;;;;-1:-1:-1::0;;;;;31035:9:0::1;-1:-1:-1::0;;;;;31035:14:0::1;;31057:21;31035:46;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;18400:344:::0;10432:6;;-1:-1:-1;;;;;10432:6:0;10442:10;10432:20;10424:65;;;;-1:-1:-1;;;10424:65:0;;14514:2:1;10424:65:0;;;14496:21:1;;;14533:18;;;14526:30;14592:34;14572:18;;;14565:62;14644:18;;10424:65:0;14312:356:1;10424:65:0;-1:-1:-1;;;;;18495:23:0;::::1;18513:4;18495:23;::::0;::::1;::::0;:43:::1;;-1:-1:-1::0;18532:6:0::1;::::0;-1:-1:-1;;;;;18522:16:0;;::::1;18532:6:::0;::::1;18522:16;;18495:43;18487:52;;;::::0;::::1;;-1:-1:-1::0;;;;;18550:27:0;::::1;;::::0;;;:19:::1;:27;::::0;;;;:37;;-1:-1:-1;;18550:37:0::1;::::0;::::1;::::0;::::1;::::0;;;::::1;::::0;;;18598:139:::1;;18626:9;::::0;:26:::1;::::0;;;;-1:-1:-1;;;;;23122:55:1;;;18626:26:0::1;::::0;::::1;23104:74:1::0;18626:9:0::1;23194:18:1::0;;;23187:34;18626:9:0;;::::1;::::0;:15:::1;::::0;23077:18:1;;18626:26:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;18400:344:::0;;:::o;18598:139::-:1;18685:9;::::0;-1:-1:-1;;;;;18709:15:0;;::::1;18685:9;18709:15:::0;;;18685:9;18709:15:::1;::::0;;;;;;;18685:40;;;;;::::1;::::0;::::1;23104:74:1::0;;;;23194:18;;;23187:34;18685:9:0;::::1;::::0;:15:::1;::::0;23077:18:1;;18685:40:0::1;22922:305:1::0;18598:139:0::1;18400:344:::0;;:::o;23377:106::-;23465:9;;;23418:7;;23461:13;;23465:9;;;23461:13;:::i;:::-;23445:12;;:30;;;;:::i;13489:235::-;10432:6;;-1:-1:-1;;;;;10432:6:0;10442:10;10432:20;10424:65;;;;-1:-1:-1;;;10424:65:0;;14514:2:1;10424:65:0;;;14496:21:1;;;14533:18;;;14526:30;14592:34;14572:18;;;14565:62;14644:18;;10424:65:0;14312:356:1;10424:65:0;13579:5:::1;13569:6:::0;;-1:-1:-1;;;;;13569:6:0;;::::1;13554:22:::0;;:14:::1;:22;::::0;;;;;;;:30;;-1:-1:-1;;13554:30:0;;::::1;::::0;;;13615:6;;;;::::1;13595:27:::0;;:19:::1;:27:::0;;;;;;:35;;;;::::1;::::0;;;13641:19;;-1:-1:-1;;13641:19:0::1;::::0;;13676:40;13579:5;;13676:40:::1;::::0;13579:5;;13676:40:::1;13489:235::o:0;19679:269::-;10432:6;;-1:-1:-1;;;;;10432:6:0;10442:10;10432:20;10424:65;;;;-1:-1:-1;;;10424:65:0;;14514:2:1;10424:65:0;;;14496:21:1;;;14533:18;;;14526:30;14592:34;14572:18;;;14565:62;14644:18;;10424:65:0;14312:356:1;10424:65:0;19804:11:::1;:42:::0;;-1:-1:-1;;;;;19804:42:0;;::::1;-1:-1:-1::0;;19804:42:0;;::::1;;::::0;;;19857:16;:32;;;;::::1;::::0;;::::1;::::0;;;::::1;::::0;;;19900:20;:40;;;;;::::1;::::0;::::1;;::::0;;19679:269::o;22301:516::-;10432:6;;-1:-1:-1;;;;;10432:6:0;10442:10;10432:20;10424:65;;;;-1:-1:-1;;;10424:65:0;;14514:2:1;10424:65:0;;;14496:21:1;;;14533:18;;;14526:30;14592:34;14572:18;;;14565:62;14644:18;;10424:65:0;14312:356:1;10424:65:0;22382:16;22378:432:::1;;-1:-1:-1::0;;;;;22415:13:0;;::::1;22431:5;22415:13:::0;;;:7:::1;:13;::::0;;;;;:21;;-1:-1:-1;;22415:21:0::1;::::0;;22451:9:::1;::::0;:32;;;;;::::1;::::0;::::1;23702:74:1::0;;;;23792:18;;;23785:50;;;;22451:9:0;;::::1;::::0;;::::1;::::0;:19:::1;::::0;23675:18:1;;22451:32:0::1;23534:307:1::0;22378:432:0::1;22520:17;::::0;:22;22516:152:::1;;22609:6;22589:17;;22571:15;:35;;;;:::i;:::-;:44;22563:89;;;::::0;-1:-1:-1;;;22563:89:0;;24048:2:1;22563:89:0::1;::::0;::::1;24030:21:1::0;;;24067:18;;;24060:30;24126:34;24106:18;;;24099:62;24178:18;;22563:89:0::1;23846:356:1::0;22563:89:0::1;-1:-1:-1::0;;;;;22682:13:0;;::::1;;::::0;;;:7:::1;:13;::::0;;;;;;:20;;-1:-1:-1;;22682:20:0::1;22698:4;22682:20:::0;;::::1;::::0;;;22737:15:::1;22717:17;:35:::0;22767:9:::1;::::0;:31;;;;;::::1;::::0;::::1;23702:74:1::0;;;;23792:18;;;23785:50;22767:9:0;;::::1;::::0;;::::1;::::0;:19:::1;::::0;23675:18:1;;22767:31:0::1;23534:307:1::0;15374:173:0;15438:4;10432:6;;-1:-1:-1;;;;;10432:6:0;10442:10;10432:20;10424:65;;;;-1:-1:-1;;;10424:65:0;;14514:2:1;10424:65:0;;;14496:21:1;;;14533:18;;;14526:30;14592:34;14572:18;;;14565:62;14644:18;;10424:65:0;14312:356:1;10424:65:0;15487:9:::1;::::0;15455:62:::1;::::0;15472:4:::1;::::0;-1:-1:-1;;;;;15487:9:0::1;-1:-1:-1::0;;15455:8:0::1;:62::i;:::-;-1:-1:-1::0;15535:4:0::1;15374:173:::0;:::o;17963:429::-;10432:6;;-1:-1:-1;;;;;10432:6:0;10442:10;10432:20;10424:65;;;;-1:-1:-1;;;10424:65:0;;14514:2:1;10424:65:0;;;14496:21:1;;;14533:18;;;14526:30;14592:34;14572:18;;;14565:62;14644:18;;10424:65:0;14312:356:1;10424:65:0;18025:14:::1;::::0;::::1;::::0;::::1;;;18024:15;18016:52;;;::::0;-1:-1:-1;;;18016:52:0;;24409:2:1;18016:52:0::1;::::0;::::1;24391:21:1::0;24448:2;24428:18;;;24421:30;24487:26;24467:18;;;24460:54;24531:18;;18016:52:0::1;24207:348:1::0;18016:52:0::1;18087:16;::::0;;;::::1;;;18079:53;;;::::0;-1:-1:-1;;;18079:53:0;;24762:2:1;18079:53:0::1;::::0;::::1;24744:21:1::0;24801:2;24781:18;;;24774:30;24840:26;24820:18;;;24813:54;24884:18;;18079:53:0::1;24560:348:1::0;18079:53:0::1;18154:9;::::0;;;::::1;-1:-1:-1::0;;;;;18154:9:0::1;18143:99;;18194:9;:36:::0;;;::::1;18224:4;18194:36:::0;::::1;;::::0;;18143:99:::1;18256:9;::::0;18276:6:::1;::::0;18331:9:::1;::::0;18256:85:::1;::::0;;;;-1:-1:-1;;;;;18276:6:0;;::::1;18256:85;::::0;::::1;25136:74:1::0;25258:10;18291:12:0::1;25246:23:1::0;25226:18;;;25219:51;25318:18;18313:15:0::1;25306:31:1::0;25286:18;;;25279:59;18331:9:0::1;::::0;;::::1;25354:18:1::0;;;25347:45;18256:9:0;;;::::1;;::::0;:19:::1;::::0;25108::1;;18256:85:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;18252:101:::0;18363:14:::1;:21:::0;;;::::1;;;::::0;;17963:429::o;20878:100::-;20929:9;;:41;;;;;20959:10;20929:41;;;413:74:1;-1:-1:-1;;;;;20929:9:0;;;;:29;;386:18:1;;20929:41:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;20878:100::o;15555:152::-;15635:4;15659:40;15669:10;15681:9;15692:6;15659:9;:40::i;21474:150::-;21576:9;;:40;;;;;-1:-1:-1;;;;;431:55:1;;;21576:40:0;;;413:74:1;21549:7:0;;21576:9;;:27;;386:18:1;;21576:40:0;267:226:1;17347:120:0;10432:6;;-1:-1:-1;;;;;10432:6:0;10442:10;10432:20;10424:65;;;;-1:-1:-1;;;10424:65:0;;14514:2:1;10424:65:0;;;14496:21:1;;;14533:18;;;14526:30;14592:34;14572:18;;;14565:62;14644:18;;10424:65:0;14312:356:1;10424:65:0;17423:9:::1;::::0;:36:::1;::::0;;;;-1:-1:-1;;;;;431:55:1;;;17423:36:0::1;::::0;::::1;413:74:1::0;17423:9:0;;;::::1;::::0;;::::1;::::0;:27:::1;::::0;386:18:1;;17423:36:0::1;267:226:1::0;30236:165:0;10432:6;;-1:-1:-1;;;;;10432:6:0;10442:10;10432:20;10424:65;;;;-1:-1:-1;;;10424:65:0;;14514:2:1;10424:65:0;;;14496:21:1;;;14533:18;;;14526:30;14592:34;14572:18;;;14565:62;14644:18;;10424:65:0;14312:356:1;10424:65:0;30326:16:::1;:28:::0;;30365;;30326;;::::1;;::::0;;;::::1;30365::::0;;;;;;;;::::1;;::::0;;;::::1;;::::0;;30236:165::o;20739:131::-;10432:6;;-1:-1:-1;;;;;10432:6:0;10442:10;10432:20;10424:65;;;;-1:-1:-1;;;10424:65:0;;14514:2:1;10424:65:0;;;14496:21:1;;;14533:18;;;14526:30;14592:34;14572:18;;;14565:62;14644:18;;10424:65:0;14312:356:1;10424:65:0;20826:6:::1;20820:3;:12;20812:21;;;::::0;::::1;;20844:12;:18:::0;20739:131::o;19956:193::-;10432:6;;-1:-1:-1;;;;;10432:6:0;10442:10;10432:20;10424:65;;;;-1:-1:-1;;;10424:65:0;;14514:2:1;10424:65:0;;;14496:21:1;;;14533:18;;;14526:30;14592:34;14572:18;;;14565:62;14644:18;;10424:65:0;14312:356:1;10424:65:0;20062:19:::1;:30:::0;;20103:38;;20062:30;::::1;;20103:38:::0;;;;;;20062:30:::1;20103:38:::0;::::1;;::::0;;;::::1;;::::0;;19956:193::o;30409:304::-;10432:6;;-1:-1:-1;;;;;10432:6:0;10442:10;10432:20;10424:65;;;;-1:-1:-1;;;10424:65:0;;14514:2:1;10424:65:0;;;14496:21:1;;;14533:18;;;14526:30;14592:34;14572:18;;;14565:62;14644:18;;10424:65:0;14312:356:1;10424:65:0;30541:10:::1;30524:13;:27;;:57;;;;;30573:8;30556:13;:25;;30524:57;:90;;;;;30601:13;30585;:29;30524:90;30516:99;;;::::0;::::1;;30626:18;:34:::0;;;;30671:18:::1;:34:::0;30409:304::o;32420:482::-;32575:8;:15;32556:8;:15;:34;:72;;;;;32613:8;:15;32594:8;:15;:34;32556:72;32548:106;;;;-1:-1:-1;;;32548:106:0;;19578:2:1;32548:106:0;;;19560:21:1;19617:2;19597:18;;;19590:30;19656:23;19636:18;;;19629:51;19697:18;;32548:106:0;19376:345:1;32548:106:0;32670:7;32665:230;32687:8;:15;32683:1;:19;;;32665:230;;;32783:8;32792:1;32783:11;;;;;;;;;;:::i;:::-;;;;;;;32768:8;32777:1;32768:11;;;;;;;;;;:::i;:::-;;;;;;;32758:7;;:21;;;;:::i;:::-;32757:37;;;;:::i;:::-;32742:10;14617:7;14635:16;;;:7;:16;;;;;;32732:62;;32724:71;;;;;;32810:73;32820:10;32832:8;32841:1;32832:11;;;;;;;;;;:::i;:::-;;;;;;;32871:8;32880:1;32871:11;;;;;;;;;;:::i;:::-;;;;;;;32856:8;32865:1;32856:11;;;;;;;;;;:::i;:::-;;;;;;;32846:7;;:21;;;;:::i;:::-;32845:37;;;;:::i;32810:73::-;-1:-1:-1;32704:3:0;;;;:::i;:::-;;;;32665:230;;21751:542;10432:6;;-1:-1:-1;;;;;10432:6:0;10442:10;10432:20;10424:65;;;;-1:-1:-1;;;10424:65:0;;14514:2:1;10424:65:0;;;14496:21:1;;;14533:18;;;14526:30;14592:34;14572:18;;;14565:62;14644:18;;10424:65:0;14312:356:1;10424:65:0;21822:20:::1;21855:9;21822:43;;21876:16;21906:10;-1:-1:-1::0;;;;;21906:18:0::1;;:20;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;21895:40:0::1;;21944:4;21951:10;-1:-1:-1::0;;;;;21951:15:0::1;;:17;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;21895:74;::::0;;::::1;::::0;;;;;;-1:-1:-1;;;;;25912:15:1;;;21895:74:0::1;::::0;::::1;25894:34:1::0;25964:15;;25944:18;;;25937:43;25806:18;;21895:74:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;21876:93:::0;-1:-1:-1;;;;;;21984:22:0;::::1;21980:200;;22043:10;-1:-1:-1::0;;;;;22043:18:0::1;;:20;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;22032:43:0::1;;22084:4;22091:10;-1:-1:-1::0;;;;;22091:15:0::1;;:17;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;22032:77;::::0;;::::1;::::0;;;;;;-1:-1:-1;;;;;25912:15:1;;;22032:77:0::1;::::0;::::1;25894:34:1::0;25964:15;;25944:18;;;25937:43;25806:18;;22032:77:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;22023:6;:86:::0;;-1:-1:-1;;22023:86:0::1;-1:-1:-1::0;;;;;22023:86:0;;;::::1;::::0;;;::::1;::::0;;21980:200:::1;;;22151:6;:17:::0;;-1:-1:-1;;22151:17:0::1;-1:-1:-1::0;;;;;22151:17:0;::::1;;::::0;;21980:200:::1;22190:9;:22:::0;;-1:-1:-1;;22190:22:0::1;-1:-1:-1::0;;;;;22190:22:0;::::1;::::0;;::::1;::::0;;;22223:62:::1;::::0;22240:4:::1;::::0;-1:-1:-1;;22223:8:0::1;:62::i;16029:193::-:0;10432:6;;-1:-1:-1;;;;;10432:6:0;10442:10;10432:20;10424:65;;;;-1:-1:-1;;;10424:65:0;;14514:2:1;10424:65:0;;;14496:21:1;;;14533:18;;;14526:30;14592:34;14572:18;;;14565:62;14644:18;;10424:65:0;14312:356:1;10424:65:0;16119:9:::1;::::0;:47:::1;::::0;;;;-1:-1:-1;;;;;23720:55:1;;;16119:47:0::1;::::0;::::1;23702:74:1::0;23819:14;;23812:22;23792:18;;;23785:50;16119:9:0;;;::::1;::::0;;::::1;::::0;:29:::1;::::0;23675:18:1;;16119:47:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;16177:37;16197:7;16206;16177:19;:37::i;19283:388::-:0;10432:6;;-1:-1:-1;;;;;10432:6:0;10442:10;10432:20;10424:65;;;;-1:-1:-1;;;10424:65:0;;14514:2:1;10424:65:0;;;14496:21:1;;;14533:18;;;14526:30;14592:34;14572:18;;;14565:62;14644:18;;10424:65:0;14312:356:1;10424:65:0;19414:7:::1;:25:::0;;::::1;::::0;;::::1;19450:29:::0;;;;;;;;;;;::::1;;;19530:19:::0;;19490:29;;;::::1;;19530:19:::0;;;;;;::::1;;;19560:27:::0;::::1;::::0;;;::::1;::::0;;;::::1;;::::0;;;19530:19;19490:29;19614:19:::1;19450:29:::0;19414:25;19614:19:::1;:::i;:::-;:31;;;;:::i;:::-;:38;;;;:::i;:::-;:49;;;;:::i;:::-;19598:7;:65:::0;;::::1;::::0;;;::::1;::::0;::::1;::::0;;;::::1;::::0;;;::::1;::::0;;-1:-1:-1;;;;;19283:388:0:o;20986:118::-;21065:9;;:31;;;;;;;;21038:7;;-1:-1:-1;;;;;21065:9:0;;:29;;:31;;;;;;;;;;;;;;:9;:31;;;;;;;;;;;;;;20157:289;10432:6;;-1:-1:-1;;;;;10432:6:0;10442:10;10432:20;10424:65;;;;-1:-1:-1;;;10424:65:0;;14514:2:1;10424:65:0;;;14496:21:1;;;14533:18;;;14526:30;14592:34;14572:18;;;14565:62;14644:18;;10424:65:0;14312:356:1;10424:65:0;20357:16:::1;20337;20327:7;;:26;;;;:::i;:::-;20326:47;;;;:::i;:::-;20310:13;:63:::0;20398:7:::1;::::0;20425:13;;20398:23:::1;::::0;20408:13;;20398:23:::1;:::i;:::-;20397:41;;;;:::i;:::-;20384:10;:54:::0;-1:-1:-1;;;;20157:289:0:o;16532:125::-;16617:9;;:32;;;;;-1:-1:-1;;;;;431:55:1;;;16617:32:0;;;413:74:1;16593:4:0;;16617:9;;;;;:23;;386:18:1;;16617:32:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;23979:1112::-;24058:4;-1:-1:-1;;;;;24083:18:0;;24075:68;;;;-1:-1:-1;;;24075:68:0;;26672:2:1;24075:68:0;;;26654:21:1;26711:2;26691:18;;;26684:30;26750:34;26730:18;;;26723:62;26821:7;26801:18;;;26794:35;26846:19;;24075:68:0;26470:401:1;24075:68:0;-1:-1:-1;;;;;24162:16:0;;24154:64;;;;-1:-1:-1;;;24154:64:0;;27078:2:1;24154:64:0;;;27060:21:1;27117:2;27097:18;;;27090:30;27156:34;27136:18;;;27129:62;27227:5;27207:18;;;27200:33;27250:19;;24154:64:0;26876:399:1;24154:64:0;24246:1;24237:6;:10;24229:64;;;;-1:-1:-1;;;24229:64:0;;27482:2:1;24229:64:0;;;27464:21:1;27521:2;27501:18;;;27494:30;27560:34;27540:18;;;27533:62;27631:11;27611:18;;;27604:39;27660:19;;24229:64:0;27280:405:1;24229:64:0;24307:20;24318:4;24324:2;24307:10;:20::i;:::-;24304:487;;;24348:14;;;;;;;24344:89;;24383:34;;-1:-1:-1;;;24383:34:0;;27892:2:1;24383:34:0;;;27874:21:1;27931:2;27911:18;;;27904:30;27970:26;27950:18;;;27943:54;28014:18;;24383:34:0;27690:348:1;24344:89:0;-1:-1:-1;;;;;24452:13:0;;;;;;:7;:13;;;;;;;;;:28;;-1:-1:-1;;;;;;24469:11:0;;;;;;:7;:11;;;;;;;;24452:28;24449:142;;;24518:12;;24508:6;:22;;24500:75;;;;-1:-1:-1;;;24500:75:0;;28245:2:1;24500:75:0;;;28227:21:1;28284:2;28264:18;;;28257:30;28323:34;28303:18;;;28296:62;28394:10;28374:18;;;28367:38;28422:19;;24500:75:0;28043:404:1;24500:75:0;24622:9;;-1:-1:-1;;;;;24608:24:0;;;24622:9;;24608:24;;;;:40;;-1:-1:-1;;;;;;24637:11:0;;;;;;:7;:11;;;;;;;;24636:12;24608:40;24605:175;;;24703:14;;24693:6;24677:13;24687:2;-1:-1:-1;;;;;14635:16:0;14617:7;14635:16;;;:7;:16;;;;;;;14551:103;24677:13;:22;;;;:::i;:::-;:40;;24669:95;;;;-1:-1:-1;;;24669:95:0;;28787:2:1;24669:95:0;;;28769:21:1;28826:2;28806:18;;;28799:30;28865:34;28845:18;;;28838:62;28936:12;28916:18;;;28909:40;28966:19;;24669:95:0;28585:406:1;24669:95:0;-1:-1:-1;;;;;24807:11:0;;;;;;:7;:11;;;;;;24803:79;;-1:-1:-1;;;;;24840:12:0;;;;;;:8;:12;;;;;24855:15;24840:30;;24803:79;-1:-1:-1;;;;;24937:20:0;;24894:12;24937:20;;;:14;:20;;;;;;24909:4;;24937:20;;;:42;;-1:-1:-1;;;;;;24961:18:0;;;;;;:14;:18;;;;;;;;24937:42;24934:88;;;-1:-1:-1;25005:5:0;24934:88;25039:44;25057:4;25063:2;25067:6;25075:7;25039:17;:44::i;:::-;25032:51;23979:1112;-1:-1:-1;;;;;23979:1112:0:o;15025:341::-;-1:-1:-1;;;;;15119:20:0;;15111:69;;;;-1:-1:-1;;;15111:69:0;;29198:2:1;15111:69:0;;;29180:21:1;29237:2;29217:18;;;29210:30;29276:34;29256:18;;;29249:62;29347:6;29327:18;;;29320:34;29371:19;;15111:69:0;28996:400:1;15111:69:0;-1:-1:-1;;;;;15199:21:0;;15191:68;;;;-1:-1:-1;;;15191:68:0;;29603:2:1;15191:68:0;;;29585:21:1;29642:2;29622:18;;;29615:30;29681:34;29661:18;;;29654:62;29752:4;29732:18;;;29725:32;29774:19;;15191:68:0;29401:398:1;15191:68:0;-1:-1:-1;;;;;15272:19:0;;;;;;;:11;:19;;;;;;;;:28;;;;;;;;;;;;;:37;;;15325:33;;644:25:1;;;15325:33:0;;617:18:1;15325:33:0;;;;;;;15025:341;;;:::o;23611:360::-;23679:4;12790:6;;-1:-1:-1;;;;;23703:15:0;;;12790:6;;23703:15;;;;:45;;-1:-1:-1;12763:7:0;12790:6;-1:-1:-1;;;;;23735:13:0;;;12790:6;;23735:13;;23703:45;:82;;;;-1:-1:-1;12763:7:0;12790:6;-1:-1:-1;;;;;12790:6:0;23765:9;:20;;23703:82;:121;;;;-1:-1:-1;;;;;;23803:21:0;;;;;;:17;:21;;;;;;;;23802:22;23703:121;:162;;;;-1:-1:-1;;;;;;23842:23:0;;;;;;:17;:23;;;;;;;;23841:24;23703:162;:189;;;;-1:-1:-1;23888:4:0;;-1:-1:-1;;;;;23882:10:0;;;23888:4;;23882:10;;23703:189;:222;;;;-1:-1:-1;;;;;;23909:16:0;;;;23703:222;:260;;;;-1:-1:-1;;;;;;;;23942:21:0;23958:4;23942:21;;;23611:360::o;25099:1472::-;25222:16;;25200:4;;25222:16;;;;;25217:221;;25255:28;25274:4;25280:2;25255:18;:28::i;:::-;25303:16;;;;;;;25302:17;:41;;;;;25323:20;25334:4;25340:2;25323:10;:20::i;:::-;25298:129;;;25364:47;;-1:-1:-1;;;25364:47:0;;30006:2:1;25364:47:0;;;29988:21:1;30045:2;30025:18;;;30018:30;30084:34;30064:18;;;30057:62;30155:7;30135:18;;;30128:35;30180:19;;25364:47:0;29804:401:1;25298:129:0;25453:20;25464:4;25470:2;25453:10;:20::i;:::-;25450:313;;;25521:9;;:37;;;;;-1:-1:-1;;;;;30491:15:1;;;25521:37:0;;;30473:34:1;30543:15;;;30523:18;;;30516:43;30575:18;;;30568:34;;;25490:12:0;;25521:9;;;;;:19;;30385:18:1;;25521:37:0;;;;;;;;;;;;;;;;;;;-1:-1:-1;25521:37:0;;;;;;;;-1:-1:-1;;25521:37:0;;;;;;;;;;;;:::i;:::-;;;25517:163;;25656:8;;;25517:163;25609:5;-1:-1:-1;25700:7:0;25696:56;;25728:8;;;25696:56;25475:288;25450:313;-1:-1:-1;;;;;25775:13:0;;;;;;:7;:13;;;;;:23;;25792:6;;25775:13;:23;;25792:6;;25775:23;:::i;:::-;;;;-1:-1:-1;;25815:6:0;;;;25811:78;;;25845:32;25860:4;25866:2;25870:6;25845:14;:32::i;:::-;25838:39;;;;25811:78;25948:4;25901:28;25932:22;;;:7;:22;;;;;;25992:10;;25968:34;;25965:85;;-1:-1:-1;26040:10:0;;25965:85;26068:6;;;;26067:7;:38;;;;-1:-1:-1;;;;;;26092:13:0;;;;;;:7;:13;;;;;;;;26091:14;26067:38;:74;;;;-1:-1:-1;26122:19:0;;;;26067:74;:128;;;;;26182:13;;26158:20;:37;;26067:128;26063:205;;;26222:34;26235:20;26222:12;:34::i;:::-;26305:6;26324:84;;;;26369:27;26379:4;26385:2;26389:6;26369:9;:27::i;:::-;26352:44;;26324:84;-1:-1:-1;;;;;26420:11:0;;;;;;:7;:11;;;;;:29;;26435:14;;26420:11;:29;;26435:14;;26420:29;:::i;:::-;;;;-1:-1:-1;26462:29:0;;-1:-1:-1;26482:4:0;26488:2;26462:19;:29::i;:::-;26522:2;-1:-1:-1;;;;;26507:34:0;26516:4;-1:-1:-1;;;;;26507:34:0;;26526:14;26507:34;;;;644:25:1;;632:2;617:18;;498:177;26507:34:0;;;;;;;;26559:4;26552:11;;;;25099:1472;;;;;;;:::o;31349:682::-;31431:16;;;;;;;31430:17;31422:65;;;;-1:-1:-1;;;31422:65:0;;30815:2:1;31422:65:0;;;30797:21:1;30854:2;30834:18;;;30827:30;30893:34;30873:18;;;30866:62;30964:5;30944:18;;;30937:33;30987:19;;31422:65:0;30613:399:1;31422:65:0;31503:20;31514:4;31520:2;31503:10;:20::i;:::-;31502:21;:37;;;;-1:-1:-1;31533:6:0;;-1:-1:-1;;;;;31527:12:0;;;31533:6;;31527:12;31502:37;31498:526;;;-1:-1:-1;;;;;31556:23:0;;;;;;;:17;:23;;;;;:30;;-1:-1:-1;;31556:30:0;31582:4;31556:30;;;31601:16;:23;;;;;;;;;;31650:9;;;;31639:108;;31695:9;:36;;;;31725:4;31695:36;;;;;31639:108;31772:9;;-1:-1:-1;;;;;31772:9:0;31761:107;;31818:9;:34;;-1:-1:-1;;31818:34:0;31846:4;31818:34;;;31761:107;31886:9;;;;;;;;;-1:-1:-1;;;;;31886:9:0;-1:-1:-1;;;;;31886:20:0;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;31934:19:0;:26;;-1:-1:-1;;31934:26:0;31956:4;31934:26;;;;;;31980:32;;4975:41:1;;;31980:32:0;;4963:2:1;4948:18;31980:32:0;;;;;;;31349:682;;:::o;26996:219::-;-1:-1:-1;;;;;27106:18:0;;27089:4;27106:18;;;:7;:18;;;;;:28;;27128:6;;27106:18;27089:4;;27106:28;;27128:6;;27106:28;:::i;:::-;;;;;;;;27167:9;-1:-1:-1;;;;;27150:35:0;27159:6;-1:-1:-1;;;;;27150:35:0;;27178:6;27150:35;;;;644:25:1;;632:2;617:18;;498:177;27150:35:0;;;;;;;;-1:-1:-1;27203:4:0;26996:219;;;;;:::o;28215:2013::-;10326:6;:13;;-1:-1:-1;;10326:13:0;10335:4;10326:13;;;28296:30:::1;::::0;;::::1;::::0;::::1;::::0;;28319:7:::1;28296:30:::0;::::1;::::0;;::::1;::::0;;;;::::1;::::0;::::1;;::::0;::::1;::::0;;;::::1;::::0;::::1;::::0;;;;;;;;;::::1;::::0;::::1;::::0;;;;;;::::1;::::0;::::1;::::0;;;;;;::::1;::::0;;::::1;::::0;;;;;;28337:56:::1;;28375:7;;;28337:56;28436:4;28416:26;::::0;;;:11:::1;:26;::::0;;;;;;;28451:9:::1;::::0;-1:-1:-1;;;;;28451:9:0::1;28416:46:::0;;;;;;;;-1:-1:-1;;28416:67:0::1;28413:165;;28520:4;28500:26;::::0;;;:11:::1;:26;::::0;;;;;;;28535:9:::1;::::0;-1:-1:-1;;;;;28535:9:0::1;28500:46:::0;;;;;;;-1:-1:-1;;28500:66:0;;28413:165:::1;28590:17;28673:1;28656:6;:12;;;28611:58;;28635:6;:16;;;28612:39;;:20;:39;;;;:::i;:::-;28611:58;;;;:::i;:::-;28610:64;;;;:::i;:::-;28590:84:::0;-1:-1:-1;28685:15:0::1;28703:32;28590:84:::0;28703:20;:32:::1;:::i;:::-;28772:16;::::0;;28786:1:::1;28772:16:::0;;;;;::::1;::::0;;28685:50;;-1:-1:-1;28748:21:0::1;::::0;28772:16;;::::1;::::0;::::1;::::0;;::::1;::::0;::::1;;::::0;-1:-1:-1;28772:16:0::1;28748:40;;28817:4;28799;28804:1;28799:7;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;28799:23:0;;::::1;:7;::::0;;::::1;::::0;;;;;:23;28843:4:::1;::::0;28833:7;;28843:4;::::1;::::0;28833;;28843;;28833:7;::::1;;;;;:::i;:::-;-1:-1:-1::0;;;;;28833:14:0;;::::1;:7;::::0;;::::1;::::0;;;;;:14;28860:9:::1;::::0;:186:::1;::::0;;;;:9;::::1;::::0;:60:::1;::::0;:186:::1;::::0;28935:7;;28860:9:::1;::::0;28973:4;;29000::::1;::::0;29020:15:::1;::::0;28860:186:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;-1:-1:-1::0;29080:21:0::1;::::0;-1:-1:-1;29059:18:0::1;::::0;-1:-1:-1;29166:7:0;;-1:-1:-1;29140:22:0::1;29153:9:::0;29080:21;29140:22:::1;:::i;:::-;29139:34;;;;:::i;:::-;29112:61:::0;-1:-1:-1;29184:30:0::1;29112:61:::0;29184:30;::::1;:::i;:::-;;;29241:6;:16;;;29225:6;:12;;:32;;;;;;;:::i;:::-;;::::0;;::::1;::::0;;;29325:12:::1;::::0;::::1;::::0;29307:14;;29268:22:::1;::::0;-1:-1:-1;29293:44:0;;::::1;::::0;29294:27:::1;::::0;::::1;:10:::0;:27:::1;:::i;:::-;29293:44;;;;:::i;:::-;29268:69;;29348:19;29402:6;:12;;;29370:44;;29384:6;:14;;;29371:27;;:10;:27;;;;:::i;:::-;29370:44;;;;:::i;:::-;29348:66;;29425:23;29483:6;:12;;;29451:44;;29465:6;:14;;;29452:27;;:10;:27;;;;:::i;:::-;29451:44;;;;:::i;:::-;29425:70:::0;-1:-1:-1;29506:24:0::1;29425:70:::0;29547:28:::1;29564:11:::0;29547:14;:28:::1;:::i;:::-;:46;;;;:::i;:::-;29533:61;::::0;:10;:61:::1;:::i;:::-;29506:88:::0;-1:-1:-1;29611:13:0;;29607:328:::1;;29641:9;::::0;29810:4:::1;::::0;29641:222:::1;::::0;;;;29718:4:::1;29641:222;::::0;::::1;32213:34:1::0;32263:18;;;32256:34;;;29641:9:0::1;32306:18:1::0;;;32299:34;;;32349:18;;;32342:34;-1:-1:-1;;;;;29810:4:0;;::::1;32392:19:1::0;;;32385:44;29833:15:0::1;32445:19:1::0;;;32438:35;29641:9:0;::::1;::::0;:25:::1;::::0;29674:16;;32124:19:1;;29641:222:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;29883:40:0::1;::::0;;18324:25:1;;;18380:2;18365:18;;18358:34;;;29883:40:0::1;::::0;-1:-1:-1;18297:18:1;29883:40:0::1;;;;;;;29607:328;29951:9;;;;;;;;;-1:-1:-1::0;;;;;29951:9:0::1;-1:-1:-1::0;;;;;29951:14:0::1;;29973;29951:39;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;29947:55:::0;30017:14;;30014:207:::1;;30047:16:::0;;:38:::1;::::0;-1:-1:-1;;;;;30047:16:0;;::::1;::::0;:38;::::1;;;::::0;30073:11;;30047:16:::1;:38:::0;:16;:38;30073:11;30047:16;:38;::::1;;;;;;;;;;;;;::::0;::::1;;;;;-1:-1:-1::0;30100:20:0;;:46:::1;::::0;-1:-1:-1;;;;;30100:20:0;;::::1;::::0;:46;::::1;;;::::0;30130:15;;30100:20:::1;:46:::0;:20;:46;30130:15;30100:20;:46;::::1;;;;;;;;;;;;;::::0;::::1;;;;;-1:-1:-1::0;30161:11:0::1;:21:::0;:48:::1;::::0;-1:-1:-1;;;;;30161:21:0;;::::1;::::0;:48;::::1;;;::::0;30192:16;;30161:21:::1;:48:::0;:21;:48;30192:16;30161:21;:48;::::1;;;;;;;;;;;;;::::0;::::1;;;;;;30014:207;28285:1943;;;;;;;;;;10350:1;-1:-1:-1::0;10362:6:0;:14;;-1:-1:-1;;10362:14:0;;;28215:2013::o;27223:984::-;-1:-1:-1;;;;;27355:13:0;;27302:7;27355:13;;;:7;:13;;;;;;27302:7;;27355:13;;27351:552;;;-1:-1:-1;27398:9:0;:16;;;27351:552;;;-1:-1:-1;;;;;27436:11:0;;;;;;:7;:11;;;;;;;;27432:471;;;27468:16;;;;;;;:73;;;;-1:-1:-1;27505:18:0;;-1:-1:-1;;;;;27488:14:0;;;;;;:8;:14;;;;;;27526:15;;27488:35;;;:::i;:::-;:53;27468:73;27464:361;;;-1:-1:-1;27575:15:0;;27432:471;;27464:361;27616:16;;;;;;;:73;;;;-1:-1:-1;27653:18:0;;-1:-1:-1;;;;;27636:14:0;;;;;;:8;:14;;;;;;27674:15;;27636:35;;;:::i;:::-;:53;27616:73;27612:213;;;-1:-1:-1;27723:15:0;;27432:471;;27612:213;-1:-1:-1;27792:9:0;:17;;;;;;27432:471;;;-1:-1:-1;27870:9:0;:21;;;;;;27432:471;27919:15;27915:61;;27958:6;27951:13;;;;;27915:61;28030:10;:27;27988:17;;28030:27;;;;;28008:19;28017:10;28008:6;:19;:::i;:::-;:49;;;;:::i;:::-;28086:4;28070:22;;;;:7;:22;;;;;:35;;27988:69;;-1:-1:-1;27988:69:0;;28070:22;;;:35;;27988:69;;28070:35;:::i;:::-;;;;-1:-1:-1;;28121:40:0;;644:25:1;;;28144:4:0;;-1:-1:-1;;;;;28121:40:0;;;;;632:2:1;617:18;28121:40:0;;;;;;;28181:18;28190:9;28181:6;:18;:::i;:::-;28174:25;27223:984;-1:-1:-1;;;;;;27223:984:0:o;26579:409::-;-1:-1:-1;;;;;26659:25:0;;;;;;:19;:25;;;;;;;;26654:110;;26705:9;;-1:-1:-1;;;;;26727:13:0;;;26705:9;26727:13;;;26705:9;26727:13;;;;;;;;26705:36;;;;;;;;23104:74:1;;;;23194:18;;;23187:34;26705:9:0;;;:15;;23077:18:1;;26705:36:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26701:52;;-1:-1:-1;;;;;26779:23:0;;;;;;:19;:23;;;;;;;;26774:104;;26823:9;;-1:-1:-1;;;;;26843:11:0;;;26823:9;26843:11;;;26823:9;26843:11;;;;;;;;26823:32;;;;;;;;23104:74:1;;;;23194:18;;;23187:34;26823:9:0;;;:15;;23077:18:1;;26823:32:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26819:48;;26892:14;;;;;;;26888:93;;;26927:9;;26945:12;;26927:31;;;;;-1:-1:-1;;;;;26927:9:0;;;;:17;;:31;;;;644:25:1;;;632:2;617:18;;498:177;26927:31:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26923:47;;18400:344;;:::o;14:248:1:-;82:6;90;143:2;131:9;122:7;118:23;114:32;111:52;;;159:1;156;149:12;111:52;-1:-1:-1;;182:23:1;;;252:2;237:18;;;224:32;;-1:-1:-1;14:248:1:o;680:184::-;732:77;729:1;722:88;829:4;826:1;819:15;853:4;850:1;843:15;869:334;940:2;934:9;996:2;986:13;;-1:-1:-1;;982:86:1;970:99;;1099:18;1084:34;;1120:22;;;1081:62;1078:88;;;1146:18;;:::i;:::-;1182:2;1175:22;869:334;;-1:-1:-1;869:334:1:o;1208:183::-;1268:4;1301:18;1293:6;1290:30;1287:56;;;1323:18;;:::i;:::-;-1:-1:-1;1368:1:1;1364:14;1380:4;1360:25;;1208:183::o;1396:154::-;-1:-1:-1;;;;;1475:5:1;1471:54;1464:5;1461:65;1451:93;;1540:1;1537;1530:12;1555:737;1609:5;1662:3;1655:4;1647:6;1643:17;1639:27;1629:55;;1680:1;1677;1670:12;1629:55;1716:6;1703:20;1742:4;1766:60;1782:43;1822:2;1782:43;:::i;:::-;1766:60;:::i;:::-;1860:15;;;1946:1;1942:10;;;;1930:23;;1926:32;;;1891:12;;;;1970:15;;;1967:35;;;1998:1;1995;1988:12;1967:35;2034:2;2026:6;2022:15;2046:217;2062:6;2057:3;2054:15;2046:217;;;2142:3;2129:17;2159:31;2184:5;2159:31;:::i;:::-;2203:18;;2241:12;;;;2079;;2046:217;;;-1:-1:-1;2281:5:1;1555:737;-1:-1:-1;;;;;;1555:737:1:o;2297:118::-;2383:5;2376:13;2369:21;2362:5;2359:32;2349:60;;2405:1;2402;2395:12;2420:477;2510:6;2518;2571:2;2559:9;2550:7;2546:23;2542:32;2539:52;;;2587:1;2584;2577:12;2539:52;2627:9;2614:23;2660:18;2652:6;2649:30;2646:50;;;2692:1;2689;2682:12;2646:50;2715:61;2768:7;2759:6;2748:9;2744:22;2715:61;:::i;:::-;2705:71;;;2826:2;2815:9;2811:18;2798:32;2839:28;2861:5;2839:28;:::i;:::-;2886:5;2876:15;;;2420:477;;;;;:::o;3272:258::-;3344:1;3354:113;3368:6;3365:1;3362:13;3354:113;;;3444:11;;;3438:18;3425:11;;;3418:39;3390:2;3383:10;3354:113;;;3485:6;3482:1;3479:13;3476:48;;;-1:-1:-1;;3520:1:1;3502:16;;3495:27;3272:258::o;3535:317::-;3577:3;3615:5;3609:12;3642:6;3637:3;3630:19;3658:63;3714:6;3707:4;3702:3;3698:14;3691:4;3684:5;3680:16;3658:63;:::i;:::-;3766:2;3754:15;-1:-1:-1;;3750:88:1;3741:98;;;;3841:4;3737:109;;3535:317;-1:-1:-1;;3535:317:1:o;3857:220::-;4006:2;3995:9;3988:21;3969:4;4026:45;4067:2;4056:9;4052:18;4044:6;4026:45;:::i;4330:180::-;4389:6;4442:2;4430:9;4421:7;4417:23;4413:32;4410:52;;;4458:1;4455;4448:12;4410:52;-1:-1:-1;4481:23:1;;4330:180;-1:-1:-1;4330:180:1:o;4515:315::-;4583:6;4591;4644:2;4632:9;4623:7;4619:23;4615:32;4612:52;;;4660:1;4657;4650:12;4612:52;4699:9;4686:23;4718:31;4743:5;4718:31;:::i;:::-;4768:5;4820:2;4805:18;;;;4792:32;;-1:-1:-1;;;4515:315:1:o;5027:316::-;5104:6;5112;5120;5173:2;5161:9;5152:7;5148:23;5144:32;5141:52;;;5189:1;5186;5179:12;5141:52;-1:-1:-1;;5212:23:1;;;5282:2;5267:18;;5254:32;;-1:-1:-1;5333:2:1;5318:18;;;5305:32;;5027:316;-1:-1:-1;5027:316:1:o;5797:388::-;5865:6;5873;5926:2;5914:9;5905:7;5901:23;5897:32;5894:52;;;5942:1;5939;5932:12;5894:52;5981:9;5968:23;6000:31;6025:5;6000:31;:::i;:::-;6050:5;-1:-1:-1;6107:2:1;6092:18;;6079:32;6120:33;6079:32;6120:33;:::i;6190:456::-;6267:6;6275;6283;6336:2;6324:9;6315:7;6311:23;6307:32;6304:52;;;6352:1;6349;6342:12;6304:52;6391:9;6378:23;6410:31;6435:5;6410:31;:::i;:::-;6460:5;-1:-1:-1;6517:2:1;6502:18;;6489:32;6530:33;6489:32;6530:33;:::i;:::-;6190:456;;6582:7;;-1:-1:-1;;;6636:2:1;6621:18;;;;6608:32;;6190:456::o;6651:247::-;6710:6;6763:2;6751:9;6742:7;6738:23;6734:32;6731:52;;;6779:1;6776;6769:12;6731:52;6818:9;6805:23;6837:31;6862:5;6837:31;:::i;6903:662::-;6957:5;7010:3;7003:4;6995:6;6991:17;6987:27;6977:55;;7028:1;7025;7018:12;6977:55;7064:6;7051:20;7090:4;7114:60;7130:43;7170:2;7130:43;:::i;7114:60::-;7208:15;;;7294:1;7290:10;;;;7278:23;;7274:32;;;7239:12;;;;7318:15;;;7315:35;;;7346:1;7343;7336:12;7315:35;7382:2;7374:6;7370:15;7394:142;7410:6;7405:3;7402:15;7394:142;;;7476:17;;7464:30;;7514:12;;;;7427;;7394:142;;7570:595;7688:6;7696;7749:2;7737:9;7728:7;7724:23;7720:32;7717:52;;;7765:1;7762;7755:12;7717:52;7805:9;7792:23;7834:18;7875:2;7867:6;7864:14;7861:34;;;7891:1;7888;7881:12;7861:34;7914:61;7967:7;7958:6;7947:9;7943:22;7914:61;:::i;:::-;7904:71;;8028:2;8017:9;8013:18;8000:32;7984:48;;8057:2;8047:8;8044:16;8041:36;;;8073:1;8070;8063:12;8041:36;;8096:63;8151:7;8140:8;8129:9;8125:24;8096:63;:::i;:::-;8086:73;;;7570:595;;;;;:::o;8170:647::-;8244:6;8252;8260;8268;8321:3;8309:9;8300:7;8296:23;8292:33;8289:53;;;8338:1;8335;8328:12;8289:53;8377:9;8364:23;8396:28;8418:5;8396:28;:::i;:::-;8443:5;-1:-1:-1;8500:2:1;8485:18;;8472:32;8513:30;8472:32;8513:30;:::i;:::-;8562:7;-1:-1:-1;8621:2:1;8606:18;;8593:32;8634:30;8593:32;8634:30;:::i;:::-;8683:7;-1:-1:-1;8742:2:1;8727:18;;8714:32;8755:30;8714:32;8755:30;:::i;:::-;8170:647;;;;-1:-1:-1;8170:647:1;;-1:-1:-1;;8170:647:1:o;9011:159::-;9078:20;;9138:6;9127:18;;9117:29;;9107:57;;9160:1;9157;9150:12;9107:57;9011:159;;;:::o;9175:328::-;9249:6;9257;9265;9318:2;9306:9;9297:7;9293:23;9289:32;9286:52;;;9334:1;9331;9324:12;9286:52;9357:28;9375:9;9357:28;:::i;:::-;9347:38;;9404:37;9437:2;9426:9;9422:18;9404:37;:::i;:::-;9394:47;;9460:37;9493:2;9482:9;9478:18;9460:37;:::i;:::-;9450:47;;9175:328;;;;;:::o;9508:382::-;9573:6;9581;9634:2;9622:9;9613:7;9609:23;9605:32;9602:52;;;9650:1;9647;9640:12;9602:52;9689:9;9676:23;9708:31;9733:5;9708:31;:::i;:::-;9758:5;-1:-1:-1;9815:2:1;9800:18;;9787:32;9828:30;9787:32;9828:30;:::i;9895:711::-;10188:3;10177:9;10170:22;10151:4;10215:46;10256:3;10245:9;10241:19;10233:6;10215:46;:::i;:::-;10309:9;10301:6;10297:22;10292:2;10281:9;10277:18;10270:50;10343:33;10369:6;10361;10343:33;:::i;:::-;10329:47;;10424:9;10416:6;10412:22;10407:2;10396:9;10392:18;10385:50;10458:33;10484:6;10476;10458:33;:::i;:::-;10444:47;;10539:9;10531:6;10527:22;10522:2;10511:9;10507:18;10500:50;10567:33;10593:6;10585;10567:33;:::i;:::-;10559:41;9895:711;-1:-1:-1;;;;;;;9895:711:1:o;10611:553::-;10712:6;10720;10728;10781:2;10769:9;10760:7;10756:23;10752:32;10749:52;;;10797:1;10794;10787:12;10749:52;10836:9;10823:23;10855:31;10880:5;10855:31;:::i;:::-;10905:5;-1:-1:-1;10962:2:1;10947:18;;10934:32;10975:33;10934:32;10975:33;:::i;:::-;11027:7;-1:-1:-1;11086:2:1;11071:18;;11058:32;11099:33;11058:32;11099:33;:::i;:::-;11151:7;11141:17;;;10611:553;;;;;:::o;11169:376::-;11231:6;11239;11292:2;11280:9;11271:7;11267:23;11263:32;11260:52;;;11308:1;11305;11298:12;11260:52;11347:9;11334:23;11366:28;11388:5;11366:28;:::i;12157:821::-;12309:6;12317;12325;12378:2;12366:9;12357:7;12353:23;12349:32;12346:52;;;12394:1;12391;12384:12;12346:52;12434:9;12421:23;12463:18;12504:2;12496:6;12493:14;12490:34;;;12520:1;12517;12510:12;12490:34;12543:61;12596:7;12587:6;12576:9;12572:22;12543:61;:::i;:::-;12533:71;;12657:2;12646:9;12642:18;12629:32;12613:48;;12686:2;12676:8;12673:16;12670:36;;;12702:1;12699;12692:12;12670:36;12725:63;12780:7;12769:8;12758:9;12754:24;12725:63;:::i;:::-;12715:73;;12841:2;12830:9;12826:18;12813:32;12797:48;;12870:2;12860:8;12857:16;12854:36;;;12886:1;12883;12876:12;12854:36;;12909:63;12964:7;12953:8;12942:9;12938:24;12909:63;:::i;:::-;12899:73;;;12157:821;;;;;:::o;12983:474::-;13073:6;13081;13089;13097;13105;13158:3;13146:9;13137:7;13133:23;13129:33;13126:53;;;13175:1;13172;13165:12;13126:53;13198:28;13216:9;13198:28;:::i;:::-;13188:38;;13245:37;13278:2;13267:9;13263:18;13245:37;:::i;:::-;13235:47;;13301:37;13334:2;13323:9;13319:18;13301:37;:::i;:::-;13291:47;;13357:37;13390:2;13379:9;13375:18;13357:37;:::i;:::-;13347:47;;13413:38;13446:3;13435:9;13431:19;13413:38;:::i;:::-;13403:48;;12983:474;;;;;;;;:::o;13922:385::-;14008:6;14016;14024;14032;14085:3;14073:9;14064:7;14060:23;14056:33;14053:53;;;14102:1;14099;14092:12;14053:53;-1:-1:-1;;14125:23:1;;;14195:2;14180:18;;14167:32;;-1:-1:-1;14246:2:1;14231:18;;14218:32;;14297:2;14282:18;14269:32;;-1:-1:-1;13922:385:1;-1:-1:-1;13922:385:1:o;14673:484::-;14726:3;14764:5;14758:12;14791:6;14786:3;14779:19;14817:4;14846:2;14841:3;14837:12;14830:19;;14883:2;14876:5;14872:14;14904:1;14914:218;14928:6;14925:1;14922:13;14914:218;;;14993:13;;-1:-1:-1;;;;;14989:62:1;14977:75;;15072:12;;;;15107:15;;;;14950:1;14943:9;14914:218;;;-1:-1:-1;15148:3:1;;14673:484;-1:-1:-1;;;;;14673:484:1:o;15162:342::-;15363:2;15352:9;15345:21;15326:4;15383:56;15435:2;15424:9;15420:18;15412:6;15383:56;:::i;:::-;15375:64;;15489:6;15482:14;15475:22;15470:2;15459:9;15455:18;15448:50;15162:342;;;;;:::o;15509:184::-;15561:77;15558:1;15551:88;15658:4;15655:1;15648:15;15682:4;15679:1;15672:15;15698:184;15750:77;15747:1;15740:88;15847:4;15844:1;15837:15;15871:4;15868:1;15861:15;15887:195;15926:3;-1:-1:-1;;15950:5:1;15947:77;15944:103;;;16027:18;;:::i;:::-;-1:-1:-1;16074:1:1;16063:13;;15887:195::o;16423:482::-;16512:1;16555:5;16512:1;16569:330;16590:7;16580:8;16577:21;16569:330;;;16709:4;-1:-1:-1;;16637:77:1;16631:4;16628:87;16625:113;;;16718:18;;:::i;:::-;16768:7;16758:8;16754:22;16751:55;;;16788:16;;;;16751:55;16867:22;;;;16827:15;;;;16569:330;;;16573:3;16423:482;;;;;:::o;16910:866::-;16959:5;16989:8;16979:80;;-1:-1:-1;17030:1:1;17044:5;;16979:80;17078:4;17068:76;;-1:-1:-1;17115:1:1;17129:5;;17068:76;17160:4;17178:1;17173:59;;;;17246:1;17241:130;;;;17153:218;;17173:59;17203:1;17194:10;;17217:5;;;17241:130;17278:3;17268:8;17265:17;17262:43;;;17285:18;;:::i;:::-;-1:-1:-1;;17341:1:1;17327:16;;17356:5;;17153:218;;17455:2;17445:8;17442:16;17436:3;17430:4;17427:13;17423:36;17417:2;17407:8;17404:16;17399:2;17393:4;17390:12;17386:35;17383:77;17380:159;;;-1:-1:-1;17492:19:1;;;17524:5;;17380:159;17571:34;17596:8;17590:4;17571:34;:::i;:::-;17701:6;-1:-1:-1;;17629:79:1;17620:7;17617:92;17614:118;;;17712:18;;:::i;:::-;17750:20;;16910:866;-1:-1:-1;;;16910:866:1:o;17781:131::-;17841:5;17870:36;17897:8;17891:4;17870:36;:::i;17917:228::-;17957:7;18083:1;-1:-1:-1;;18011:74:1;18008:1;18005:81;18000:1;17993:9;17986:17;17982:105;17979:131;;;18090:18;;:::i;:::-;-1:-1:-1;18130:9:1;;17917:228::o;18403:140::-;18461:5;18490:47;18531:4;18521:8;18517:19;18511:4;18490:47;:::i;18548:274::-;18588:1;18614;18604:189;;18649:77;18646:1;18639:88;18750:4;18747:1;18740:15;18778:4;18775:1;18768:15;18604:189;-1:-1:-1;18807:9:1;;18548:274::o;18827:125::-;18867:4;18895:1;18892;18889:8;18886:34;;;18900:18;;:::i;:::-;-1:-1:-1;18937:9:1;;18827:125::o;19726:175::-;19763:3;19807:4;19800:5;19796:16;19836:4;19827:7;19824:17;19821:43;;;19844:18;;:::i;:::-;19893:1;19880:15;;19726:175;-1:-1:-1;;19726:175:1:o;21196:184::-;21266:6;21319:2;21307:9;21298:7;21294:23;21290:32;21287:52;;;21335:1;21332;21325:12;21287:52;-1:-1:-1;21358:16:1;;21196:184;-1:-1:-1;21196:184:1:o;21385:556::-;21439:5;21492:3;21485:4;21477:6;21473:17;21469:27;21459:55;;21510:1;21507;21500:12;21459:55;21539:6;21533:13;21565:18;21561:2;21558:26;21555:52;;;21587:18;;:::i;:::-;21631:114;21739:4;-1:-1:-1;;21663:4:1;21659:2;21655:13;21651:86;21647:97;21631:114;:::i;:::-;21770:2;21761:7;21754:19;21816:3;21809:4;21804:2;21796:6;21792:15;21788:26;21785:35;21782:55;;;21833:1;21830;21823:12;21782:55;21846:64;21907:2;21900:4;21891:7;21887:18;21880:4;21872:6;21868:17;21846:64;:::i;21946:971::-;22083:6;22091;22099;22107;22160:3;22148:9;22139:7;22135:23;22131:33;22128:53;;;22177:1;22174;22167:12;22128:53;22210:9;22204:16;22239:18;22280:2;22272:6;22269:14;22266:34;;;22296:1;22293;22286:12;22266:34;22319:61;22372:7;22363:6;22352:9;22348:22;22319:61;:::i;:::-;22309:71;;22426:2;22415:9;22411:18;22405:25;22389:41;;22455:2;22445:8;22442:16;22439:36;;;22471:1;22468;22461:12;22439:36;22494:63;22549:7;22538:8;22527:9;22523:24;22494:63;:::i;:::-;22484:73;;22603:2;22592:9;22588:18;22582:25;22566:41;;22632:2;22622:8;22619:16;22616:36;;;22648:1;22645;22638:12;22616:36;22671:63;22726:7;22715:8;22704:9;22700:24;22671:63;:::i;:::-;22661:73;;22780:2;22769:9;22765:18;22759:25;22743:41;;22809:2;22799:8;22796:16;22793:36;;;22825:1;22822;22815:12;22793:36;;22848:63;22903:7;22892:8;22881:9;22877:24;22848:63;:::i;:::-;22838:73;;;21946:971;;;;;;;:::o;25403:251::-;25473:6;25526:2;25514:9;25505:7;25501:23;25497:32;25494:52;;;25542:1;25539;25532:12;25494:52;25574:9;25568:16;25593:31;25618:5;25593:31;:::i;25991:224::-;26030:3;26058:6;26091:2;26088:1;26084:10;26121:2;26118:1;26114:10;26152:3;26148:2;26144:12;26139:3;26136:21;26133:47;;;26160:18;;:::i;:::-;26196:13;;25991:224;-1:-1:-1;;;;25991:224:1:o;26220:245::-;26287:6;26340:2;26328:9;26319:7;26315:23;26311:32;26308:52;;;26356:1;26353;26346:12;26308:52;26388:9;26382:16;26407:28;26429:5;26407:28;:::i;28452:128::-;28492:3;28523:1;28519:6;28516:1;28513:13;28510:39;;;28529:18;;:::i;:::-;-1:-1:-1;28565:9:1;;28452:128::o;31017:605::-;31316:6;31305:9;31298:25;31359:6;31354:2;31343:9;31339:18;31332:34;31402:3;31397:2;31386:9;31382:18;31375:31;31279:4;31423:57;31475:3;31464:9;31460:19;31452:6;31423:57;:::i;:::-;-1:-1:-1;;;;;31516:55:1;;;;31511:2;31496:18;;31489:83;-1:-1:-1;31603:3:1;31588:19;31581:35;31415:65;31017:605;-1:-1:-1;;;31017:605:1:o;31627:217::-;31666:4;31695:6;31751:10;;;;31721;;31773:12;;;31770:38;;;31788:18;;:::i;:::-;31825:13;;31627:217;-1:-1:-1;;;31627:217:1:o;32484:306::-;32572:6;32580;32588;32641:2;32629:9;32620:7;32616:23;32612:32;32609:52;;;32657:1;32654;32647:12;32609:52;32686:9;32680:16;32670:26;;32736:2;32725:9;32721:18;32715:25;32705:35;;32780:2;32769:9;32765:18;32759:25;32749:35;;32484:306;;;;;:::o

Swarm Source

ipfs://618f460f924275158d4e85cf6c9766f1eccdba43056142e8e489dc4999965e04

Block Transaction Difficulty Gas Used Reward
View All Blocks Produced

Block Uncle Number Difficulty Gas Used Reward
View All Uncles
Loading...
Loading
Loading...
Loading

Validator Index Block Amount
View All Withdrawals

Transaction Hash Block Value Eth2 PubKey Valid
View All Deposits
Loading...
Loading
[ Download: CSV Export  ]
[ Download: CSV Export  ]

A contract address hosts a smart contract, which is a set of code stored on the blockchain that runs when predetermined conditions are met. Learn more about addresses in our Knowledge Base.