ETH Price: $2,519.31 (-0.60%)

Contract

0x9E4D8E0e1B078584f81C6090d5Ba025ee3B2f216
 

Overview

ETH Balance

0.002978309147817462 ETH

Eth Value

$7.50 (@ $2,519.31/ETH)

Token Holdings

Multichain Info

No addresses found
Transaction Hash
Method
Block
From
To
Approve173025392023-05-20 18:53:11467 days ago1684608791IN
0x9E4D8E0e...ee3B2f216
0 ETH0.0015308332.36512605
Approve171997292023-05-06 6:19:59481 days ago1683353999IN
0x9E4D8E0e...ee3B2f216
0 ETH0.00543126114.82834705
Approve171597052023-04-30 15:18:11487 days ago1682867891IN
0x9E4D8E0e...ee3B2f216
0 ETH0.0015395761.69406654
Approve171307772023-04-26 13:44:11491 days ago1682516651IN
0x9E4D8E0e...ee3B2f216
0 ETH0.001692236.0143306
Approve171065712023-04-23 4:14:35494 days ago1682223275IN
0x9E4D8E0e...ee3B2f216
0 ETH0.0015213632.20580041
Update Sell Allo...171052002023-04-22 23:37:59495 days ago1682206679IN
0x9E4D8E0e...ee3B2f216
0 ETH0.0017077246.13359001
Update BL Users171051952023-04-22 23:36:59495 days ago1682206619IN
0x9E4D8E0e...ee3B2f216
0 ETH0.0021393945.75652618
Update BL Users171051902023-04-22 23:35:59495 days ago1682206559IN
0x9E4D8E0e...ee3B2f216
0 ETH0.0022262147.61342011
Update BL Users171051902023-04-22 23:35:59495 days ago1682206559IN
0x9E4D8E0e...ee3B2f216
0 ETH0.0012781347.61342011
Update BL Users171051842023-04-22 23:34:35495 days ago1682206475IN
0x9E4D8E0e...ee3B2f216
0 ETH0.0022741248.63821152
Set Swap Enabled171051722023-04-22 23:32:11495 days ago1682206331IN
0x9E4D8E0e...ee3B2f216
0 ETH0.0017041958.72893143
Update Anomaly171051622023-04-22 23:30:11495 days ago1682206211IN
0x9E4D8E0e...ee3B2f216
0 ETH0.0016839453.23558599
Set Swap Enabled171051412023-04-22 23:25:35495 days ago1682205935IN
0x9E4D8E0e...ee3B2f216
0 ETH0.0012890344.44031864
Update Anomaly171051372023-04-22 23:24:47495 days ago1682205887IN
0x9E4D8E0e...ee3B2f216
0 ETH0.0024852348.30573543
Approve170943532023-04-21 11:04:11496 days ago1682075051IN
0x9E4D8E0e...ee3B2f216
0 ETH0.000814432.63493186
Approve170891382023-04-20 17:22:23497 days ago1682011343IN
0x9E4D8E0e...ee3B2f216
0 ETH0.00409286.6234323
Approve170883552023-04-20 14:40:47497 days ago1682001647IN
0x9E4D8E0e...ee3B2f216
0 ETH0.0032850569.91407006
Approve170876582023-04-20 12:18:23497 days ago1681993103IN
0x9E4D8E0e...ee3B2f216
0 ETH0.0024873952.58883544
Approve170764642023-04-18 22:18:35499 days ago1681856315IN
0x9E4D8E0e...ee3B2f216
0 ETH0.0037989180.31705131
Approve170764062023-04-18 22:06:23499 days ago1681855583IN
0x9E4D8E0e...ee3B2f216
0 ETH0.0040798186.87300751
Approve170755382023-04-18 19:11:11499 days ago1681845071IN
0x9E4D8E0e...ee3B2f216
0 ETH0.0033592671.02189575
Approve170751592023-04-18 17:54:23499 days ago1681840463IN
0x9E4D8E0e...ee3B2f216
0 ETH0.0034687773.7299706
Approve170675502023-04-17 16:02:59500 days ago1681747379IN
0x9E4D8E0e...ee3B2f216
0 ETH0.0021005544.46653133
Approve170662222023-04-17 11:32:23500 days ago1681731143IN
0x9E4D8E0e...ee3B2f216
0 ETH0.0009107330.48471783
Approve170601462023-04-16 14:51:11501 days ago1681656671IN
0x9E4D8E0e...ee3B2f216
0 ETH0.0019941242.15990281
View all transactions

Latest 25 internal transactions (View All)

Advanced mode:
Parent Transaction Hash Block From To
170562912023-04-16 1:42:23501 days ago1681609343
0x9E4D8E0e...ee3B2f216
0.00022605 ETH
170562912023-04-16 1:42:23501 days ago1681609343
0x9E4D8E0e...ee3B2f216
0.01713736 ETH
170562912023-04-16 1:42:23501 days ago1681609343
0x9E4D8E0e...ee3B2f216
0.02284981 ETH
170562912023-04-16 1:42:23501 days ago1681609343
0x9E4D8E0e...ee3B2f216
0.07997435 ETH
170562912023-04-16 1:42:23501 days ago1681609343
0x9E4D8E0e...ee3B2f216
0.11996152 ETH
170460962023-04-14 14:49:35503 days ago1681483775
0x9E4D8E0e...ee3B2f216
0.00081021 ETH
170460962023-04-14 14:49:35503 days ago1681483775
0x9E4D8E0e...ee3B2f216
0.03319967 ETH
170460962023-04-14 14:49:35503 days ago1681483775
0x9E4D8E0e...ee3B2f216
0.04426623 ETH
170460962023-04-14 14:49:35503 days ago1681483775
0x9E4D8E0e...ee3B2f216
0.15493181 ETH
170460962023-04-14 14:49:35503 days ago1681483775
0x9E4D8E0e...ee3B2f216
0.23239772 ETH
170451462023-04-14 11:33:11503 days ago1681471991
0x9E4D8E0e...ee3B2f216
0.00000054 ETH
170451462023-04-14 11:33:11503 days ago1681471991
0x9E4D8E0e...ee3B2f216
0.00384968 ETH
170451462023-04-14 11:33:11503 days ago1681471991
0x9E4D8E0e...ee3B2f216
0.00513291 ETH
170451462023-04-14 11:33:11503 days ago1681471991
0x9E4D8E0e...ee3B2f216
0.0179652 ETH
170451462023-04-14 11:33:11503 days ago1681471991
0x9E4D8E0e...ee3B2f216
0.0269478 ETH
170432402023-04-14 5:01:47503 days ago1681448507
0x9E4D8E0e...ee3B2f216
0.00000062 ETH
170432402023-04-14 5:01:47503 days ago1681448507
0x9E4D8E0e...ee3B2f216
0.00388799 ETH
170432402023-04-14 5:01:47503 days ago1681448507
0x9E4D8E0e...ee3B2f216
0.00518399 ETH
170432402023-04-14 5:01:47503 days ago1681448507
0x9E4D8E0e...ee3B2f216
0.01814398 ETH
170432402023-04-14 5:01:47503 days ago1681448507
0x9E4D8E0e...ee3B2f216
0.02721597 ETH
170424612023-04-14 2:21:23503 days ago1681438883
0x9E4D8E0e...ee3B2f216
0.00000068 ETH
170424612023-04-14 2:21:23503 days ago1681438883
0x9E4D8E0e...ee3B2f216
0.00392172 ETH
170424612023-04-14 2:21:23503 days ago1681438883
0x9E4D8E0e...ee3B2f216
0.00522896 ETH
170424612023-04-14 2:21:23503 days ago1681438883
0x9E4D8E0e...ee3B2f216
0.01830139 ETH
170424612023-04-14 2:21:23503 days ago1681438883
0x9E4D8E0e...ee3B2f216
0.02745208 ETH
View All Internal Transactions
Loading...
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
TOKEN

Compiler Version
v0.8.19+commit.7dd6d404

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2023-04-11
*/

// SPDX-License-Identifier: MIT

pragma solidity >= 0.8.0;

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

    function _msgData() internal view virtual returns (bytes memory) {
        this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691
        return msg.data;
    }
}
contract Ownable is Context {
    address private _owner;
    address private _previousOwner;
    uint256 private _lockTime;

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

    constructor() {
        address msgSender = _msgSender();
        _owner = msgSender;
        emit OwnershipTransferred(address(0), msgSender);
    }

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

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

}
interface IERC20 {
    function totalSupply() external view returns (uint256);
    function decimals() external view returns (uint8);
    function symbol() external view returns (string memory);
    function name() external view returns (string memory);
    function getOwner() external view returns (address);
    function balanceOf(address account) external view returns (uint256);
    function transfer(address recipient, uint256 amount) external returns (bool);
    function allowance(address _owner, address spender) external view returns (uint256);
    function approve(address spender, uint256 amount) external returns (bool);
    function transferFrom(address sender, address recipient, uint256 amount) external returns (bool);
    event Transfer(address indexed from, address indexed to, uint256 value);
    event Approval(address indexed owner, address indexed spender, uint256 value);
}
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);
    function sync() external;
}
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 addLiquidity(
        address tokenA,
        address tokenB,
        uint amountADesired,
        uint amountBDesired,
        uint amountAMin,
        uint amountBMin,
        address to,
        uint deadline
    ) external returns (uint amountA, uint amountB, uint liquidity);
    function swapExactETHForTokens(
        uint amountOutMin, 
        address[] calldata path, 
        address to, uint deadline
    ) external payable returns (uint[] memory amounts);
    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;
    function swapExactTokensForTokensSupportingFeeOnTransferTokens(
        uint amountIn,
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external;
    function swapExactTokensForTokens(
        uint amountIn,
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external returns (uint[] memory amounts);
}

 contract TOKEN is IERC20, Ownable {

  uint256 private constant _totalTokens = 1_000_000_000 * 10**DECIMALS; 
  string private constant NAME = "MOONKEYS";
  string constant private SYMBOL = "MONKEYS";
  uint8 private constant DECIMALS = 18;

  struct feeProfile{ uint8 _liquidity; uint8 _marketing; uint8 _dev; uint8 _totalFee; }

  feeProfile public  _buyProfile; // sell tax
  feeProfile public  _sellProfile; // sell tax
  feeProfile[] public _sellFees; // possible sell fees

  uint256 public _sellCooldownPeriod = 24 hours; 
  struct sellTracker { uint256 _sellAllowence; uint256 _dailySellTime; uint256 _totalSold; }
  mapping (address => bool ) public  _whitelistedUsers;
  mapping (address => bool ) public  _BlacklistedUsers;
  mapping (address => sellTracker) public _sellAllowences;
  uint256 public  _dailySell = 34; // 34% sell daily on your holding amount


  mapping (address => mapping (address => uint256)) private _allowances;
  mapping (address => uint256) private _balances; 
  mapping (address => bool) public _addressesExcludedFromFees; 

  bool public _isSwapEnabled; 
  bool public _isFeeEnabled; 
  bool public _isBuyingAllowed; //The contract will be activated once liquidity is added.
  bool public  _sellLimited;

  uint256 public _tokenSwapThreshold = _totalTokens / 1000 * 1; //0.1%

  // UNISWAP INTERFACES (For swaps)
  IRouter02 internal V2Router;
  address private V2Pair;

  address public _marketingWallet;
  address public _devWallet;

  uint256 private blockPenalty = 1;
  uint256 public tradingActiveBlock = 0; // 0 means trading is not active
  uint256 public tradingActiveTime = 0;

  uint256 public _lastAnomalyShift;
  uint256 public _anomalyCooldownPeriod = 4 hours;
  bool public _AutoAnomaly; // if anomaly is enabled
  uint256 public currentEpoch;

  uint256 internal _timeOne = 120 seconds;
  uint256 internal _timeTwo = 240 seconds;
  uint256 internal _timeThree = 480 seconds;

  event _setRouter(address _routerAddress);
  event _setThreshold(uint256 _threshold);
  event _clear(uint256 _tokenAmount);
  event _claimDust(uint256 _amount);
  event _launch(uint256 _start);
  event _swapAndLiquify(uint256 _amount);
  event _logAnomaly(uint256 indexed epoch, uint256 _tax);

  // BSC MAINNET 0x10ED43C718714eb63d5aA57B78B54704E256024E || BSC TESTNET: 0xD99D1c33F9fC3444f8101754aBC46c52416550D1 || ETH 0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D
  constructor () {
    _balances[_msgSender()] = totalSupply();
    _marketingWallet = address(0x234FeD484ABD4eC53AcCBb1eAf22194A9C2632B9);
    _devWallet = address(0xed0b859Bf18c9CC7aa1C7bc0b0857A000E56a6b6);

    // Initialize V2 router 
    setSwapRouter(address(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D));

    // Exclude contract from fees
    setExcludedFromFees(address(this), true);
    setExcludedFromFees(_msgSender(), true);
    setExcludedFromFees(_marketingWallet, true);
    setExcludedFromFees(_devWallet, true);

    UpdateBuyProfile(feeProfile({_liquidity : 0,_marketing : 0, _dev : 0, _totalFee: 0 }));
    UpdateSellProfile(true, 0, feeProfile({_liquidity : 1,_marketing : 1, _dev : 1, _totalFee: 3 }));
    UpdateSellProfile(true, 0, feeProfile({_liquidity : 1,_marketing : 3, _dev : 2, _totalFee: 6 }));
    UpdateSellProfile(true, 0, feeProfile({_liquidity : 3,_marketing : 7, _dev : 2, _totalFee: 12 }));
 

    emit Transfer(address(0), _msgSender(), totalSupply());
  }

  function Launch(uint256 _blockPenalty) external onlyOwner {
        require(!_isBuyingAllowed, "trading is already active");

        _sellProfile = _sellFees[2];

        setSwapEnabled(true);
        setFeeEnabled(true);
        _AutoAnomaly = true;
        _isBuyingAllowed = true;
        _sellLimited = true; 

        tradingActiveBlock = block.number;
        tradingActiveTime = block.timestamp;

        _lastAnomalyShift = block.timestamp;
        blockPenalty = _blockPenalty;

        emit _launch(tradingActiveBlock);
  }

    function setWallets(address _marketing, address _dev) external onlyOwner() {
        _marketingWallet = _marketing;
        _devWallet = _dev;
    }
    
    function UpdateBuyProfile(feeProfile memory _fee) public onlyOwner{
      require(_fee._totalFee <= 25, "total fee to high");
      _buyProfile = _fee;
    }

    function UpdateSellProfile(bool _new, uint8 _index, feeProfile memory _fee) public onlyOwner{
        require(_fee._totalFee <= 25, "total fee to high");
        if(_new){
            _sellFees.push(_fee);
        }else{
            _sellFees[_index] = _fee;
        }
    }
  

  function transfer(address recipient, uint256 amount) public override returns (bool) {
    doTransfer(_msgSender(), recipient, amount);
    return true;
  }

  function transferFrom(address sender, address recipient, uint256 amount) public override returns (bool) {
    doTransfer(sender, recipient, amount);
    doApprove(sender, _msgSender(), _allowances[sender][_msgSender()] - amount); // Will fail when there is not enough allowance
    return true;
  }
  
  function balanceOf(address account) public view override returns (uint256) {
    return _balances[account];
  }

  function approve(address spender, uint256 amount) public override returns (bool) {
    doApprove(_msgSender(), spender, amount);
    return true;
  }
  
  function doTransfer(address sender, address recipient, uint256 amount) internal virtual {
    require(sender != address(0), "zero address transfer is not allowed");
    require(recipient != address(0), "zero address transfer is not allowed");
    require(amount > 0, "amount must be greater than zero");
    require(!_BlacklistedUsers[sender], "blacklisted");
    if(!_isBuyingAllowed)  { require(_addressesExcludedFromFees[sender], "cant transfer"); }
    if(_isSwapEnabled){	executeSwapCheck(sender, recipient); }

    if(!_addressesExcludedFromFees[sender]){
      // buy
      if(!isPancakeswapPair(recipient)){
        // launch max buy
        require(checkLaunchCap(amount), "max buy");
      }else{
          if(_sellLimited){
            UpdateSellAlowence(sender);
            require(SellAllowencePassed(sender, amount), "sold enough.");
            // add current sell if pass checked 
            _sellAllowences[sender]._totalSold += amount;
          }
       
          // check if anomaly can shift 
          if(block.timestamp >= _lastAnomalyShift + _anomalyCooldownPeriod && _AutoAnomaly){ 
              executeAnomaly(); 
          }
        }
      }
 
    uint256 feeRate = calculateFeeRate(sender, recipient);
    uint256 feeAmount = amount * feeRate / 100;
    uint256 transferAmount = amount - feeAmount;

    updateBalances(sender, recipient, amount, feeAmount);

    emit Transfer(sender, recipient, transferAmount); 
  }

  function checkLaunchCap(uint256 _amount) internal view returns (bool){
        if(block.timestamp <= tradingActiveTime+_timeThree){
          if(block.timestamp <= tradingActiveTime+_timeOne ){
            // FIRST LIMITED
            require(_amount <= (_totalTokens * 10) / 1000 ); // 0.1%
          }else if(block.timestamp > tradingActiveTime+_timeOne && block.timestamp <= tradingActiveTime+_timeTwo){
            // TIME TW
            require(_amount <= (_totalTokens * 20) / 1000); // 0.2%
          }else if(block.timestamp > tradingActiveTime+_timeTwo && block.timestamp <= tradingActiveTime+_timeThree){
            // TIME THREE
            require(_amount <= (_totalTokens * 30) / 1000); // 0.3%
          }
          return true;
    }
    return true;
  }
  
  function executeSwapCheck(address sender, address recipient) private {
    if (!isMarketTransfer(sender, recipient)) {
      return;
    }

    uint256 tokensAvailableForSwap = balanceOf(address(this));
    if (tokensAvailableForSwap >= _tokenSwapThreshold) {
      tokensAvailableForSwap = _tokenSwapThreshold;
      if (isPancakeswapPair(recipient)) {
        executeSwap(tokensAvailableForSwap);
      }
    }
  }

  // if buildup becomes to large in contract
  function clearSwap(uint256 _tokenAmount) external onlyOwner(){
    executeSwap(_tokenAmount);
    emit _clear(_tokenAmount);
  }
  
  function executeSwap(uint256 amount) private {
    // Allow pancakeswap to spend the tokens of the address
    doApprove(address(this), address(V2Router), amount);
    uint256 total = _sellProfile._totalFee;

    uint256 tokensReservedForLiquidity = amount * _sellProfile._liquidity / total;
    uint256 tokensReservedForDev = amount * _sellProfile._dev / total ;
    uint256 tokensReservedForMarketing = amount - tokensReservedForLiquidity - tokensReservedForDev;

    uint256 tokensToSwapForLiquidity = tokensReservedForLiquidity / 2;
    uint256 tokensToAddAsLiquidity = tokensToSwapForLiquidity;

    uint256 tokensToSwap = tokensToSwapForLiquidity + tokensReservedForMarketing + tokensReservedForDev;
    uint256 ethSwapped = swapTokensForETH(tokensToSwap);
    
    uint256 ETHToBeAddedToLiquidity = ethSwapped * tokensToSwapForLiquidity / tokensToSwap;
    uint256 ETHToBeSentToDevelopment = ethSwapped * tokensReservedForDev / tokensToSwap;
    uint256 ETHToBeSentToMarketing = ethSwapped - ETHToBeAddedToLiquidity- ETHToBeSentToDevelopment;

    payable(_marketingWallet).transfer(ETHToBeSentToMarketing);
    payable(_devWallet).transfer(ETHToBeSentToDevelopment);

    try V2Router.addLiquidityETH{value: ETHToBeAddedToLiquidity}(address(this), tokensToAddAsLiquidity, 0, 0, _devWallet, block.timestamp){} catch {}
    
    emit _swapAndLiquify(ethSwapped);
  }

    // picks a random sell tax, 
    function executeAnomaly() internal  {
        _lastAnomalyShift = block.timestamp;
        uint256 index = uint256(keccak256(abi.encodePacked(block.timestamp , msg.sender)));
         // limit index
        index = index % _sellFees.length;
        _sellProfile = _sellFees[index];

        currentEpoch++;
        emit _logAnomaly(currentEpoch, _sellProfile._totalFee);
    }

    function setSell(uint256 _index) external onlyOwner(){
         _lastAnomalyShift = block.timestamp;
         _sellProfile = _sellFees[_index];
    }

  function SellAllowencePassed(address _user, uint256 _amount) public view returns (bool){
    if(_whitelistedUsers[_user]){ return true;} // no lock for WL users
    if(_sellAllowences[_user]._totalSold +_amount >  _sellAllowences[_user]._sellAllowence){ return false; }
     return true;
  }

  function UpdateSellAlowence(address _user) internal {
      if(_sellAllowences[_user]._sellAllowence == 0 || block.timestamp >= _sellAllowences[_user]._dailySellTime +_sellCooldownPeriod ){
        _sellAllowences[_user]._totalSold = 0;
         _sellAllowences[_user]._sellAllowence = _balances[_user] / 100 * _dailySell;
          _sellAllowences[_user]._dailySellTime = block.timestamp;
      }
  }

  function updateBalances(address sender, address recipient, uint256 sentAmount, uint256 feeAmount) private {
    // Calculate amount to be received by recipient
    uint256 receivedAmount = sentAmount - feeAmount;

    // Update balances
    _balances[sender] -= sentAmount;
    _balances[recipient] += receivedAmount;
    
    // Add fees to contract
    _balances[address(this)] += feeAmount;

    // hides bloat emits
    if(feeAmount > 0 ){
      emit Transfer(sender, address(this), feeAmount); 
    }
  
  }

  function doApprove(address owner, address spender, uint256 amount) private {
    require(owner != address(0), "Cannot approve from the zero address");
    require(spender != address(0), "Cannot approve to the zero address");
    _allowances[owner][spender] = amount;
    emit Approval(owner, spender, amount);
  }

  function calculateFeeRate(address sender, address recipient) private view returns(uint256) {
    bool applyFees = _isFeeEnabled && !_addressesExcludedFromFees[sender] && !_addressesExcludedFromFees[recipient];
    if (applyFees) {
          if(isPenaltyActive()){
            return 99;
          }else{
            if (isPancakeswapPair(recipient)) {
                return _sellProfile._totalFee;
            }else if(isPancakeswapPair(sender)){
                return _buyProfile._totalFee;
            }else{
                // transfer
                return _dailySell;
            }
          }
      }
    return 0;
}

  function swapTokensForETH(uint256 tokenAmount) internal returns(uint256) {
    uint256 initialBalance = address(this).balance;
  
    address[] memory path = new address[](2);
    path[0] = address(this);
    path[1] = V2Router.WETH();
    V2Router.swapExactTokensForETHSupportingFeeOnTransferTokens(tokenAmount, 0, path, address(this), block.timestamp);
 
    return address(this).balance - initialBalance;
  }

  function isSwapTransfer(address sender, address recipient) private view returns(bool) {
    bool isContractSelling = sender == address(this) && isPancakeswapPair(recipient);
    return isContractSelling;
  }

  function isMarketTransfer(address sender, address recipient) internal virtual view returns(bool) {
    return !isSwapTransfer(sender, recipient);
  }

  function amountUntilSwap() external  view returns (uint256) {
    uint256 balance = balanceOf(address(this));
    if (balance > _tokenSwapThreshold) {
      return 0;
    }
    return _tokenSwapThreshold - balance;
  }

  function increaseAllowance(address spender, uint256 addedValue) public virtual returns (bool) {
    doApprove(_msgSender(), spender, _allowances[_msgSender()][spender] + addedValue);
    return true;
  }

  function decreaseAllowance(address spender, uint256 subtractedValue) public virtual returns (bool) {
    doApprove(_msgSender(), spender, _allowances[_msgSender()][spender] - subtractedValue);
    return true;
  }

  function setSwapRouter(address routerAddress) public onlyOwner {
    require(routerAddress != address(0), "Cannot use the zero address as router address");
    V2Router = IRouter02(routerAddress);
    V2Pair = IFactoryV2(V2Router.factory()).createPair(address(this), V2Router.WETH());
    emit _setRouter(routerAddress);
  }

  function isPancakeswapPair(address addr) internal view returns(bool) {
    return V2Pair == addr;
  }

  function setTokenSwapThreshold(uint256 threshold) external  onlyOwner {
    require(threshold > 0, "Threshold must be greater than 0");
    _tokenSwapThreshold = threshold;
    emit _setThreshold(threshold);
  }

  function clearDust() external  onlyOwner{
      payable(_devWallet).transfer(address(this).balance);
      emit _claimDust(address(this).balance);
  }

    function updateBLUsers(address _user, bool _status) external onlyOwner{ _BlacklistedUsers[_user] = _status; }
    function updateWlUsers(address _user, bool _status) external onlyOwner{ _whitelistedUsers[_user] = _status; }
    function updateAnomaly(uint256 _time, bool isEnabled) external onlyOwner(){  _anomalyCooldownPeriod = _time; _AutoAnomaly = isEnabled; }
    function updateSellAllowences(uint256 _cooldownPeriod, bool isEnabled, uint256 _amount) external onlyOwner(){ _sellCooldownPeriod = _cooldownPeriod; _sellLimited = isEnabled; _dailySell = _amount; }
    function totalSupply() public override pure returns (uint256) { return _totalTokens; }
    function allowance(address user, address spender) public view override returns (uint256) { return _allowances[user][spender]; }
    function pairAddress() public view returns (address) { return V2Pair; }
    function setSwapEnabled(bool isEnabled) public onlyOwner { _isSwapEnabled = isEnabled; }
    function setFeeEnabled(bool isEnabled) public onlyOwner { _isFeeEnabled = isEnabled; }
    function setExcludedFromFees(address addr, bool value) public onlyOwner { _addressesExcludedFromFees[addr] = value; }
    function isPenaltyActive() public view returns (bool) { return tradingActiveBlock >= block.number - blockPenalty; } 
    function decimals() external pure override returns (uint8) { if (totalSupply() == 0) { revert(); } 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(); }

  receive() external payable {}
}

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"_claimDust","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"_tokenAmount","type":"uint256"}],"name":"_clear","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"_start","type":"uint256"}],"name":"_launch","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"epoch","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"_tax","type":"uint256"}],"name":"_logAnomaly","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"_routerAddress","type":"address"}],"name":"_setRouter","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"_threshold","type":"uint256"}],"name":"_setThreshold","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"_swapAndLiquify","type":"event"},{"inputs":[{"internalType":"uint256","name":"_blockPenalty","type":"uint256"}],"name":"Launch","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_user","type":"address"},{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"SellAllowencePassed","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"components":[{"internalType":"uint8","name":"_liquidity","type":"uint8"},{"internalType":"uint8","name":"_marketing","type":"uint8"},{"internalType":"uint8","name":"_dev","type":"uint8"},{"internalType":"uint8","name":"_totalFee","type":"uint8"}],"internalType":"struct TOKEN.feeProfile","name":"_fee","type":"tuple"}],"name":"UpdateBuyProfile","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_new","type":"bool"},{"internalType":"uint8","name":"_index","type":"uint8"},{"components":[{"internalType":"uint8","name":"_liquidity","type":"uint8"},{"internalType":"uint8","name":"_marketing","type":"uint8"},{"internalType":"uint8","name":"_dev","type":"uint8"},{"internalType":"uint8","name":"_totalFee","type":"uint8"}],"internalType":"struct TOKEN.feeProfile","name":"_fee","type":"tuple"}],"name":"UpdateSellProfile","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"_AutoAnomaly","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"_BlacklistedUsers","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"_addressesExcludedFromFees","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_anomalyCooldownPeriod","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_buyProfile","outputs":[{"internalType":"uint8","name":"_liquidity","type":"uint8"},{"internalType":"uint8","name":"_marketing","type":"uint8"},{"internalType":"uint8","name":"_dev","type":"uint8"},{"internalType":"uint8","name":"_totalFee","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_dailySell","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_devWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_isBuyingAllowed","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_isFeeEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_isSwapEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_lastAnomalyShift","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_marketingWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"_sellAllowences","outputs":[{"internalType":"uint256","name":"_sellAllowence","type":"uint256"},{"internalType":"uint256","name":"_dailySellTime","type":"uint256"},{"internalType":"uint256","name":"_totalSold","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_sellCooldownPeriod","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"_sellFees","outputs":[{"internalType":"uint8","name":"_liquidity","type":"uint8"},{"internalType":"uint8","name":"_marketing","type":"uint8"},{"internalType":"uint8","name":"_dev","type":"uint8"},{"internalType":"uint8","name":"_totalFee","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_sellLimited","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_sellProfile","outputs":[{"internalType":"uint8","name":"_liquidity","type":"uint8"},{"internalType":"uint8","name":"_marketing","type":"uint8"},{"internalType":"uint8","name":"_dev","type":"uint8"},{"internalType":"uint8","name":"_totalFee","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_tokenSwapThreshold","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"_whitelistedUsers","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"user","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"amountUntilSwap","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"clearDust","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_tokenAmount","type":"uint256"}],"name":"clearSwap","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"currentEpoch","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"getOwner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"isPenaltyActive","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","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":"pairAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"addr","type":"address"},{"internalType":"bool","name":"value","type":"bool"}],"name":"setExcludedFromFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"isEnabled","type":"bool"}],"name":"setFeeEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_index","type":"uint256"}],"name":"setSell","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"isEnabled","type":"bool"}],"name":"setSwapEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"routerAddress","type":"address"}],"name":"setSwapRouter","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"threshold","type":"uint256"}],"name":"setTokenSwapThreshold","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_marketing","type":"address"},{"internalType":"address","name":"_dev","type":"address"}],"name":"setWallets","outputs":[],"stateMutability":"nonpayable","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":"pure","type":"function"},{"inputs":[],"name":"tradingActiveBlock","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tradingActiveTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"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":"uint256","name":"_time","type":"uint256"},{"internalType":"bool","name":"isEnabled","type":"bool"}],"name":"updateAnomaly","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_user","type":"address"},{"internalType":"bool","name":"_status","type":"bool"}],"name":"updateBLUsers","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_cooldownPeriod","type":"uint256"},{"internalType":"bool","name":"isEnabled","type":"bool"},{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"updateSellAllowences","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_user","type":"address"},{"internalType":"bool","name":"_status","type":"bool"}],"name":"updateWlUsers","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

6080604052620151806006556022600a5560016103e86012600a62000025919062000eb3565b633b9aca0062000036919062000f04565b62000042919062000f7e565b6200004e919062000f04565b600f556001601455600060155560006016556138406018556078601b5560f0601c556101e0601d553480156200008357600080fd5b50600062000096620004a060201b60201c565b9050806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35062000144620004a860201b60201c565b600c600062000158620004a060201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555073234fed484abd4ec53accbb1eaf22194a9c2632b9601260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555073ed0b859bf18c9cc7aa1c7bc0b0857a000e56a6b6601360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555062000265737a250d5630b4cf539739df2c5dacb4c659f2488d620004d060201b60201c565b620002783060016200084860201b60201c565b6200029a6200028c620004a060201b60201c565b60016200084860201b60201c565b620002cf601260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1660016200084860201b60201c565b62000304601360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1660016200084860201b60201c565b620003456040518060800160405280600060ff168152602001600060ff168152602001600060ff168152602001600060ff168152506200094360201b60201c565b6200038a600160006040518060800160405280600160ff168152602001600160ff168152602001600160ff168152602001600360ff1681525062000abe60201b60201c565b620003cf600160006040518060800160405280600160ff168152602001600360ff168152602001600260ff168152602001600660ff1681525062000abe60201b60201c565b62000414600160006040518060800160405280600360ff168152602001600760ff168152602001600260ff168152602001600c60ff1681525062000abe60201b60201c565b62000424620004a060201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef62000483620004a860201b60201c565b60405162000492919062000fc7565b60405180910390a362001297565b600033905090565b60006012600a620004ba919062000eb3565b633b9aca00620004cb919062000f04565b905090565b620004e0620004a060201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161462000570576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620005679062001045565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603620005e2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620005d990620010dd565b60405180910390fd5b80601060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550601060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000691573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620006b7919062001169565b73ffffffffffffffffffffffffffffffffffffffff1663c9c6539630601060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000741573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000767919062001169565b6040518363ffffffff1660e01b815260040162000786929190620011ac565b6020604051808303816000875af1158015620007a6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620007cc919062001169565b601160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055507fd1431ffd6b1c0a705bfdf15dbd9a5954739e5f4f093dd08fef588fd415164261816040516200083d9190620011d9565b60405180910390a150565b62000858620004a060201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614620008e8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620008df9062001045565b60405180910390fd5b80600d60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b62000953620004a060201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614620009e3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620009da9062001045565b60405180910390fd5b6019816060015160ff16111562000a31576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000a289062001246565b60405180910390fd5b80600360008201518160000160006101000a81548160ff021916908360ff16021790555060208201518160000160016101000a81548160ff021916908360ff16021790555060408201518160000160026101000a81548160ff021916908360ff16021790555060608201518160000160036101000a81548160ff021916908360ff16021790555090505050565b62000ace620004a060201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161462000b5e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000b559062001045565b60405180910390fd5b6019816060015160ff16111562000bac576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000ba39062001246565b60405180910390fd5b821562000c67576005819080600181540180825580915050600190039060005260206000200160009091909190915060008201518160000160006101000a81548160ff021916908360ff16021790555060208201518160000160016101000a81548160ff021916908360ff16021790555060408201518160000160026101000a81548160ff021916908360ff16021790555060608201518160000160036101000a81548160ff021916908360ff160217905550505062000d14565b8060058360ff168154811062000c825762000c8162001268565b5b9060005260206000200160008201518160000160006101000a81548160ff021916908360ff16021790555060208201518160000160016101000a81548160ff021916908360ff16021790555060408201518160000160026101000a81548160ff021916908360ff16021790555060608201518160000160036101000a81548160ff021916908360ff1602179055509050505b505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60008160011c9050919050565b6000808291508390505b600185111562000da75780860481111562000d7f5762000d7e62000d19565b5b600185161562000d8f5780820291505b808102905062000d9f8562000d48565b945062000d5f565b94509492505050565b60008262000dc2576001905062000e95565b8162000dd2576000905062000e95565b816001811462000deb576002811462000df65762000e2c565b600191505062000e95565b60ff84111562000e0b5762000e0a62000d19565b5b8360020a91508482111562000e255762000e2462000d19565b5b5062000e95565b5060208310610133831016604e8410600b841016171562000e665782820a90508381111562000e605762000e5f62000d19565b5b62000e95565b62000e75848484600162000d55565b9250905081840481111562000e8f5762000e8e62000d19565b5b81810290505b9392505050565b6000819050919050565b600060ff82169050919050565b600062000ec08262000e9c565b915062000ecd8362000ea6565b925062000efc7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff848462000db0565b905092915050565b600062000f118262000e9c565b915062000f1e8362000e9c565b925082820262000f2e8162000e9c565b9150828204841483151762000f485762000f4762000d19565b5b5092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600062000f8b8262000e9c565b915062000f988362000e9c565b92508262000fab5762000faa62000f4f565b5b828204905092915050565b62000fc18162000e9c565b82525050565b600060208201905062000fde600083018462000fb6565b92915050565b600082825260208201905092915050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b60006200102d60208362000fe4565b91506200103a8262000ff5565b602082019050919050565b6000602082019050818103600083015262001060816200101e565b9050919050565b7f43616e6e6f742075736520746865207a65726f2061646472657373206173207260008201527f6f75746572206164647265737300000000000000000000000000000000000000602082015250565b6000620010c5602d8362000fe4565b9150620010d28262001067565b604082019050919050565b60006020820190508181036000830152620010f881620010b6565b9050919050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000620011318262001104565b9050919050565b620011438162001124565b81146200114f57600080fd5b50565b600081519050620011638162001138565b92915050565b600060208284031215620011825762001181620010ff565b5b6000620011928482850162001152565b91505092915050565b620011a68162001124565b82525050565b6000604082019050620011c360008301856200119b565b620011d260208301846200119b565b9392505050565b6000602082019050620011f060008301846200119b565b92915050565b7f746f74616c2066656520746f2068696768000000000000000000000000000000600082015250565b60006200122e60118362000fe4565b91506200123b82620011f6565b602082019050919050565b6000602082019050818103600083015262001261816200121f565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6152c580620012a76000396000f3fe6080604052600436106103545760003560e01c80638da5cb5b116101c6578063c122a3df116100f7578063e4ba3bc811610095578063ee40166e1161006f578063ee40166e14610ca4578063f097735714610ccf578063f16f07ae14610cf8578063fb96a95f14610d235761035b565b8063e4ba3bc814610c0e578063e59303e614610c4b578063e6f2306b14610c765761035b565b8063d3ff209d116100d1578063d3ff209d14610b54578063dd62ed3e14610b7f578063dde66cf614610bbc578063e01af92c14610be55761035b565b8063c122a3df14610ac5578063cdebd0ba14610b02578063d3f6a15714610b2b5761035b565b8063a8b0898211610164578063ac1b79b51161013e578063ac1b79b514610a19578063ae8e3c2814610a44578063b8c7ac8114610a6f578063c03fa52214610a9a5761035b565b8063a8b0898214610988578063a9059cbb146109b3578063aa60f5d0146109f05761035b565b806398e91314116101a057806398e91314146108b8578063a26d93fc146108f7578063a457c2d714610922578063a72e5e151461095f5761035b565b80638da5cb5b1461083757806395d89b4114610862578063962dfc751461088d5761035b565b80633e0bf716116102a057806359ecf39e1161023e5780637667180811610218578063766718081461079f5780637d584aa1146107ca5780637f7fcecc146107e1578063893d20e81461080c5761035b565b806359ecf39e1461070e5780635a264ca71461073757806370a08231146107625761035b565b80634f89bb9b1161027a5780634f89bb9b146106665780635031595f1461068f57806358b69bc3146106ba578063590ffdce146106e55761035b565b80633e0bf716146105e65780633fdcd7ee14610614578063412736571461063d5761035b565b806311a63e171161030d5780633094375d116102e75780633094375d1461052a57806330bcd7f614610555578063313ce5671461057e57806339509351146105a95761035b565b806311a63e171461049757806318160ddd146104c257806323b872dd146104ed5761035b565b80630432e5b71461036057806306fdde031461039d578063085a5972146103c857806309494a0114610408578063095ea7b3146104315780630db474fa1461046e5761035b565b3661035b57005b600080fd5b34801561036c57600080fd5b5061038760048036038101906103829190613fbe565b610d60565b6040516103949190614019565b60405180910390f35b3480156103a957600080fd5b506103b2610e68565b6040516103bf91906140c4565b60405180910390f35b3480156103d457600080fd5b506103ef60048036038101906103ea91906140e6565b610ea5565b6040516103ff949392919061412f565b60405180910390f35b34801561041457600080fd5b5061042f600480360381019061042a91906140e6565b610f15565b005b34801561043d57600080fd5b5061045860048036038101906104539190613fbe565b61108f565b6040516104659190614019565b60405180910390f35b34801561047a57600080fd5b50610495600480360381019061049091906141a0565b6110ad565b005b3480156104a357600080fd5b506104ac61115f565b6040516104b991906141dc565b60405180910390f35b3480156104ce57600080fd5b506104d7611185565b6040516104e49190614206565b60405180910390f35b3480156104f957600080fd5b50610514600480360381019061050f9190614221565b6111a9565b6040516105219190614019565b60405180910390f35b34801561053657600080fd5b5061053f611261565b60405161054c9190614206565b60405180910390f35b34801561056157600080fd5b5061057c60048036038101906105779190614398565b611298565b005b34801561058a57600080fd5b50610593611405565b6040516105a091906143c5565b60405180910390f35b3480156105b557600080fd5b506105d060048036038101906105cb9190613fbe565b611421565b6040516105dd9190614019565b60405180910390f35b3480156105f257600080fd5b506105fb6114cd565b60405161060b949392919061412f565b60405180910390f35b34801561062057600080fd5b5061063b600480360381019061063691906143e0565b61151f565b005b34801561064957600080fd5b50610664600480360381019061065f9190614420565b61160f565b005b34801561067257600080fd5b5061068d6004803603810190610688919061444d565b61196c565b005b34801561069b57600080fd5b506106a4611bb4565b6040516106b19190614206565b60405180910390f35b3480156106c657600080fd5b506106cf611bba565b6040516106dc9190614019565b60405180910390f35b3480156106f157600080fd5b5061070c600480360381019061070791906143e0565b611bd4565b005b34801561071a57600080fd5b50610735600480360381019061073091906140e6565b611cc4565b005b34801561074357600080fd5b5061074c611ddd565b6040516107599190614019565b60405180910390f35b34801561076e57600080fd5b5061078960048036038101906107849190614420565b611df0565b6040516107969190614206565b60405180910390f35b3480156107ab57600080fd5b506107b4611e39565b6040516107c19190614206565b60405180910390f35b3480156107d657600080fd5b506107df611e3f565b005b3480156107ed57600080fd5b506107f6611f76565b6040516108039190614019565b60405180910390f35b34801561081857600080fd5b50610821611f89565b60405161082e91906141dc565b60405180910390f35b34801561084357600080fd5b5061084c611f98565b60405161085991906141dc565b60405180910390f35b34801561086e57600080fd5b50610877611fc1565b60405161088491906140c4565b60405180910390f35b34801561089957600080fd5b506108a2611ffe565b6040516108af91906141dc565b60405180910390f35b3480156108c457600080fd5b506108df60048036038101906108da9190614420565b612024565b6040516108ee939291906144a0565b60405180910390f35b34801561090357600080fd5b5061090c61204e565b6040516109199190614206565b60405180910390f35b34801561092e57600080fd5b5061094960048036038101906109449190613fbe565b612054565b6040516109569190614019565b60405180910390f35b34801561096b57600080fd5b50610986600480360381019061098191906140e6565b612100565b005b34801561099457600080fd5b5061099d61237e565b6040516109aa91906141dc565b60405180910390f35b3480156109bf57600080fd5b506109da60048036038101906109d59190613fbe565b6123a8565b6040516109e79190614019565b60405180910390f35b3480156109fc57600080fd5b50610a176004803603810190610a1291906144d7565b6123c6565b005b348015610a2557600080fd5b50610a2e612480565b604051610a3b9190614019565b60405180910390f35b348015610a5057600080fd5b50610a59612493565b604051610a669190614206565b60405180910390f35b348015610a7b57600080fd5b50610a84612499565b604051610a919190614206565b60405180910390f35b348015610aa657600080fd5b50610aaf61249f565b604051610abc9190614019565b60405180910390f35b348015610ad157600080fd5b50610aec6004803603810190610ae79190614420565b6124b2565b604051610af99190614019565b60405180910390f35b348015610b0e57600080fd5b50610b296004803603810190610b2491906143e0565b6124d2565b005b348015610b3757600080fd5b50610b526004803603810190610b4d9190614517565b6125c2565b005b348015610b6057600080fd5b50610b696126dd565b604051610b769190614019565b60405180910390f35b348015610b8b57600080fd5b50610ba66004803603810190610ba19190614517565b6126f0565b604051610bb39190614206565b60405180910390f35b348015610bc857600080fd5b50610be36004803603810190610bde9190614557565b612777565b005b348015610bf157600080fd5b50610c0c6004803603810190610c0791906141a0565b612839565b005b348015610c1a57600080fd5b50610c356004803603810190610c309190614420565b6128eb565b604051610c429190614019565b60405180910390f35b348015610c5757600080fd5b50610c6061290b565b604051610c6d9190614206565b60405180910390f35b348015610c8257600080fd5b50610c8b612911565b604051610c9b949392919061412f565b60405180910390f35b348015610cb057600080fd5b50610cb9612963565b604051610cc69190614206565b60405180910390f35b348015610cdb57600080fd5b50610cf66004803603810190610cf191906140e6565b612969565b005b348015610d0457600080fd5b50610d0d612a41565b604051610d1a9190614206565b60405180910390f35b348015610d2f57600080fd5b50610d4a6004803603810190610d459190614420565b612a47565b604051610d579190614019565b60405180910390f35b6000600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615610dbd5760019050610e62565b600960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000015482600960008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060020154610e4e91906145d9565b1115610e5d5760009050610e62565b600190505b92915050565b60606040518060400160405280600881526020017f4d4f4f4e4b455953000000000000000000000000000000000000000000000000815250905090565b60058181548110610eb557600080fd5b906000526020600020016000915090508060000160009054906101000a900460ff16908060000160019054906101000a900460ff16908060000160029054906101000a900460ff16908060000160039054906101000a900460ff16905084565b610f1d612a67565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610faa576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fa190614659565b60405180910390fd5b4260178190555060058181548110610fc557610fc4614679565b5b9060005260206000200160046000820160009054906101000a900460ff168160000160006101000a81548160ff021916908360ff1602179055506000820160019054906101000a900460ff168160000160016101000a81548160ff021916908360ff1602179055506000820160029054906101000a900460ff168160000160026101000a81548160ff021916908360ff1602179055506000820160039054906101000a900460ff168160000160036101000a81548160ff021916908360ff16021790555090505050565b60006110a361109c612a67565b8484612a6f565b6001905092915050565b6110b5612a67565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611142576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161113990614659565b60405180910390fd5b80600e60016101000a81548160ff02191690831515021790555050565b601360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60006012600a61119591906147db565b633b9aca006111a49190614826565b905090565b60006111b6848484612c38565b611256846111c2612a67565b84600b60008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600061120c612a67565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546112519190614868565b612a6f565b600190509392505050565b60008061126d30611df0565b9050600f54811115611283576000915050611295565b80600f546112919190614868565b9150505b90565b6112a0612a67565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461132d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161132490614659565b60405180910390fd5b6019816060015160ff161115611378576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161136f906148e8565b60405180910390fd5b80600360008201518160000160006101000a81548160ff021916908360ff16021790555060208201518160000160016101000a81548160ff021916908360ff16021790555060408201518160000160026101000a81548160ff021916908360ff16021790555060608201518160000160036101000a81548160ff021916908360ff16021790555090505050565b600080611410611185565b0361141a57600080fd5b6012905090565b60006114c361142e612a67565b8484600b600061143c612a67565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546114be91906145d9565b612a6f565b6001905092915050565b60038060000160009054906101000a900460ff16908060000160019054906101000a900460ff16908060000160029054906101000a900460ff16908060000160039054906101000a900460ff16905084565b611527612a67565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146115b4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115ab90614659565b60405180910390fd5b80600860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b611617612a67565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146116a4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161169b90614659565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611713576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161170a9061497a565b60405180910390fd5b80601060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550601060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa1580156117c1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117e591906149af565b73ffffffffffffffffffffffffffffffffffffffff1663c9c6539630601060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa15801561186e573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061189291906149af565b6040518363ffffffff1660e01b81526004016118af9291906149dc565b6020604051808303816000875af11580156118ce573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118f291906149af565b601160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055507fd1431ffd6b1c0a705bfdf15dbd9a5954739e5f4f093dd08fef588fd4151642618160405161196191906141dc565b60405180910390a150565b611974612a67565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611a01576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119f890614659565b60405180910390fd5b6019816060015160ff161115611a4c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a43906148e8565b60405180910390fd5b8215611b05576005819080600181540180825580915050600190039060005260206000200160009091909190915060008201518160000160006101000a81548160ff021916908360ff16021790555060208201518160000160016101000a81548160ff021916908360ff16021790555060408201518160000160026101000a81548160ff021916908360ff16021790555060608201518160000160036101000a81548160ff021916908360ff1602179055505050611baf565b8060058360ff1681548110611b1d57611b1c614679565b5b9060005260206000200160008201518160000160006101000a81548160ff021916908360ff16021790555060208201518160000160016101000a81548160ff021916908360ff16021790555060408201518160000160026101000a81548160ff021916908360ff16021790555060608201518160000160036101000a81548160ff021916908360ff1602179055509050505b505050565b60165481565b600060145443611bca9190614868565b6015541015905090565b611bdc612a67565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611c69576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c6090614659565b60405180910390fd5b80600d60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b611ccc612a67565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611d59576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d5090614659565b60405180910390fd5b60008111611d9c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d9390614a51565b60405180910390fd5b80600f819055507f3d5472e45a39af360c106b99aa48f7356cd3b609ea581b5deb38a4b1270e898581604051611dd29190614206565b60405180910390a150565b600e60029054906101000a900460ff1681565b6000600c60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b601a5481565b611e47612a67565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611ed4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ecb90614659565b60405180910390fd5b601360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc479081150290604051600060405180830381858888f19350505050158015611f3c573d6000803e3d6000fd5b507fd1c23667321cc2db9d1de3db7f4dcf0eb5ade4f87e163713d3667eec1e92facb47604051611f6c9190614206565b60405180910390a1565b600e60009054906101000a900460ff1681565b6000611f93611f98565b905090565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60606040518060400160405280600781526020017f4d4f4e4b45595300000000000000000000000000000000000000000000000000815250905090565b601260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60096020528060005260406000206000915090508060000154908060010154908060020154905083565b600a5481565b60006120f6612061612a67565b8484600b600061206f612a67565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546120f19190614868565b612a6f565b6001905092915050565b612108612a67565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612195576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161218c90614659565b60405180910390fd5b600e60029054906101000a900460ff16156121e5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121dc90614abd565b60405180910390fd5b60056002815481106121fa576121f9614679565b5b9060005260206000200160046000820160009054906101000a900460ff168160000160006101000a81548160ff021916908360ff1602179055506000820160019054906101000a900460ff168160000160016101000a81548160ff021916908360ff1602179055506000820160029054906101000a900460ff168160000160026101000a81548160ff021916908360ff1602179055506000820160039054906101000a900460ff168160000160036101000a81548160ff021916908360ff1602179055509050506122cb6001612839565b6122d560016110ad565b6001601960006101000a81548160ff0219169083151502179055506001600e60026101000a81548160ff0219169083151502179055506001600e60036101000a81548160ff021916908315150217905550436015819055504260168190555042601781905550806014819055507f6600f6005863f92891b8c04d901a1f5d14860257428eba2058e9f3f9175b56336015546040516123739190614206565b60405180910390a150565b6000601160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60006123bc6123b5612a67565b8484612c38565b6001905092915050565b6123ce612a67565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461245b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161245290614659565b60405180910390fd5b8160188190555080601960006101000a81548160ff0219169083151502179055505050565b600e60039054906101000a900460ff1681565b60065481565b60185481565b601960009054906101000a900460ff1681565b60086020528060005260406000206000915054906101000a900460ff1681565b6124da612a67565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612567576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161255e90614659565b60405180910390fd5b80600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b6125ca612a67565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612657576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161264e90614659565b60405180910390fd5b81601260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080601360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505050565b600e60019054906101000a900460ff1681565b6000600b60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b61277f612a67565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461280c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161280390614659565b60405180910390fd5b8260068190555081600e60036101000a81548160ff02191690831515021790555080600a81905550505050565b612841612a67565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146128ce576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128c590614659565b60405180910390fd5b80600e60006101000a81548160ff02191690831515021790555050565b60076020528060005260406000206000915054906101000a900460ff1681565b60175481565b60048060000160009054906101000a900460ff16908060000160019054906101000a900460ff16908060000160029054906101000a900460ff16908060000160039054906101000a900460ff16905084565b60155481565b612971612a67565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146129fe576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016129f590614659565b60405180910390fd5b612a0781613101565b7f8d9f39d10957a4e556f944f249fcdc7cc1263cc4e31368fe3056895f85d4599d81604051612a369190614206565b60405180910390a150565b600f5481565b600d6020528060005260406000206000915054906101000a900460ff1681565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612ade576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ad590614b4f565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612b4d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b4490614be1565b60405180910390fd5b80600b60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92583604051612c2b9190614206565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612ca7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c9e90614c73565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612d16576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d0d90614c73565b60405180910390fd5b60008111612d59576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d5090614cdf565b60405180910390fd5b600860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615612de6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ddd90614d4b565b60405180910390fd5b600e60029054906101000a900460ff16612e8757600d60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16612e86576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612e7d90614db7565b60405180910390fd5b5b600e60009054906101000a900460ff1615612ea757612ea68383613437565b5b600d60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1661304e57612f0182613480565b612f5257612f0e816134da565b612f4d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612f4490614e23565b60405180910390fd5b61304d565b600e60039054906101000a900460ff161561301357612f7083613652565b612f7a8382610d60565b612fb9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612fb090614e8f565b60405180910390fd5b80600960008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600201600082825461300b91906145d9565b925050819055505b60185460175461302391906145d9565b421015801561303e5750601960009054906101000a900460ff165b1561304c5761304b613829565b5b5b5b600061305a84846139b5565b905060006064828461306c9190614826565b6130769190614ede565b9050600081846130869190614868565b905061309486868685613b02565b8473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516130f19190614206565b60405180910390a3505050505050565b61312e30601060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1683612a6f565b6000600460000160039054906101000a900460ff1660ff169050600081600460000160009054906101000a900460ff1660ff168461316c9190614826565b6131769190614ede565b9050600082600460000160029054906101000a900460ff1660ff168561319c9190614826565b6131a69190614ede565b905060008183866131b79190614868565b6131c19190614868565b905060006002846131d29190614ede565b9050600081905060008484846131e891906145d9565b6131f291906145d9565b905060006131ff82613c8a565b905060008285836132109190614826565b61321a9190614ede565b9050600083888461322b9190614826565b6132359190614ede565b905060008183856132469190614868565b6132509190614868565b9050601260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f193505050501580156132ba573d6000803e3d6000fd5b50601360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc839081150290604051600060405180830381858888f19350505050158015613323573d6000803e3d6000fd5b50601060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f305d719843089600080601360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16426040518863ffffffff1660e01b81526004016133ad96959493929190614f54565b60606040518083038185885af1935050505080156133e957506040513d601f19601f820116820180604052508101906133e69190614fca565b60015b156133f2575050505b7f7bf54cb9a865e8dabf744f65dfac5fe865060b1d1b8172c512d88fe90815cf2a846040516134219190614206565b60405180910390a1505050505050505050505050565b6134418282613eb7565b1561347c57600061345130611df0565b9050600f54811061347a57600f54905061346a82613480565b156134795761347881613101565b5b5b505b5050565b60008173ffffffffffffffffffffffffffffffffffffffff16601160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16149050919050565b6000601d546016546134ec91906145d9565b421161364857601b5460165461350291906145d9565b421161354f576103e8600a6012600a61351b91906147db565b633b9aca0061352a9190614826565b6135349190614826565b61353e9190614ede565b82111561354a57600080fd5b61363f565b601b5460165461355f91906145d9565b4211801561357c5750601c5460165461357891906145d9565b4211155b156135c8576103e860146012600a61359491906147db565b633b9aca006135a39190614826565b6135ad9190614826565b6135b79190614ede565b8211156135c357600080fd5b61363e565b601c546016546135d891906145d9565b421180156135f55750601d546016546135f191906145d9565b4211155b1561363d576103e8601e6012600a61360d91906147db565b633b9aca0061361c9190614826565b6136269190614826565b6136309190614ede565b82111561363c57600080fd5b5b5b5b6001905061364d565b600190505b919050565b6000600960008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000015414806136f25750600654600960008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600101546136ee91906145d9565b4210155b15613826576000600960008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060020181905550600a546064600c60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461378e9190614ede565b6137989190614826565b600960008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000018190555042600960008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600101819055505b50565b4260178190555060004233604051602001613845929190615086565b6040516020818303038152906040528051906020012060001c90506005805490508161387191906150b2565b90506005818154811061388757613886614679565b5b9060005260206000200160046000820160009054906101000a900460ff168160000160006101000a81548160ff021916908360ff1602179055506000820160019054906101000a900460ff168160000160016101000a81548160ff021916908360ff1602179055506000820160029054906101000a900460ff168160000160026101000a81548160ff021916908360ff1602179055506000820160039054906101000a900460ff168160000160036101000a81548160ff021916908360ff160217905550905050601a6000815480929190613961906150e3565b9190505550601a547fdb65cd45d636bb54d6d5a3c93fad39a5c8e2a905e8a3b92f485b345a9b594201600460000160039054906101000a900460ff166040516139aa919061515c565b60405180910390a250565b600080600e60019054906101000a900460ff168015613a1e5750600d60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b8015613a745750600d60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b90508015613af657613a84611bba565b15613a93576063915050613afc565b613a9c83613480565b15613abf57600460000160039054906101000a900460ff1660ff16915050613afc565b613ac884613480565b15613aeb57600360000160039054906101000a900460ff1660ff16915050613afc565b600a54915050613afc565b60009150505b92915050565b60008183613b109190614868565b905082600c60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254613b619190614868565b9250508190555080600c60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254613bb791906145d9565b9250508190555081600c60003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254613c0d91906145d9565b925050819055506000821115613c83573073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051613c7a9190614206565b60405180910390a35b5050505050565b6000804790506000600267ffffffffffffffff811115613cad57613cac614279565b5b604051908082528060200260200182016040528015613cdb5781602001602082028036833780820191505090505b5090503081600081518110613cf357613cf2614679565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050601060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015613d9a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613dbe91906149af565b81600181518110613dd257613dd1614679565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050601060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663791ac9478560008430426040518663ffffffff1660e01b8152600401613e70959493929190615235565b600060405180830381600087803b158015613e8a57600080fd5b505af1158015613e9e573d6000803e3d6000fd5b505050508147613eae9190614868565b92505050919050565b6000613ec38383613ecc565b15905092915050565b6000803073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16148015613f0f5750613f0e83613480565b5b90508091505092915050565b6000604051905090565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000613f5582613f2a565b9050919050565b613f6581613f4a565b8114613f7057600080fd5b50565b600081359050613f8281613f5c565b92915050565b6000819050919050565b613f9b81613f88565b8114613fa657600080fd5b50565b600081359050613fb881613f92565b92915050565b60008060408385031215613fd557613fd4613f25565b5b6000613fe385828601613f73565b9250506020613ff485828601613fa9565b9150509250929050565b60008115159050919050565b61401381613ffe565b82525050565b600060208201905061402e600083018461400a565b92915050565b600081519050919050565b600082825260208201905092915050565b60005b8381101561406e578082015181840152602081019050614053565b60008484015250505050565b6000601f19601f8301169050919050565b600061409682614034565b6140a0818561403f565b93506140b0818560208601614050565b6140b98161407a565b840191505092915050565b600060208201905081810360008301526140de818461408b565b905092915050565b6000602082840312156140fc576140fb613f25565b5b600061410a84828501613fa9565b91505092915050565b600060ff82169050919050565b61412981614113565b82525050565b60006080820190506141446000830187614120565b6141516020830186614120565b61415e6040830185614120565b61416b6060830184614120565b95945050505050565b61417d81613ffe565b811461418857600080fd5b50565b60008135905061419a81614174565b92915050565b6000602082840312156141b6576141b5613f25565b5b60006141c48482850161418b565b91505092915050565b6141d681613f4a565b82525050565b60006020820190506141f160008301846141cd565b92915050565b61420081613f88565b82525050565b600060208201905061421b60008301846141f7565b92915050565b60008060006060848603121561423a57614239613f25565b5b600061424886828701613f73565b935050602061425986828701613f73565b925050604061426a86828701613fa9565b9150509250925092565b600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6142b18261407a565b810181811067ffffffffffffffff821117156142d0576142cf614279565b5b80604052505050565b60006142e3613f1b565b90506142ef82826142a8565b919050565b6142fd81614113565b811461430857600080fd5b50565b60008135905061431a816142f4565b92915050565b60006080828403121561433657614335614274565b5b61434060806142d9565b905060006143508482850161430b565b60008301525060206143648482850161430b565b60208301525060406143788482850161430b565b604083015250606061438c8482850161430b565b60608301525092915050565b6000608082840312156143ae576143ad613f25565b5b60006143bc84828501614320565b91505092915050565b60006020820190506143da6000830184614120565b92915050565b600080604083850312156143f7576143f6613f25565b5b600061440585828601613f73565b92505060206144168582860161418b565b9150509250929050565b60006020828403121561443657614435613f25565b5b600061444484828501613f73565b91505092915050565b600080600060c0848603121561446657614465613f25565b5b60006144748682870161418b565b93505060206144858682870161430b565b925050604061449686828701614320565b9150509250925092565b60006060820190506144b560008301866141f7565b6144c260208301856141f7565b6144cf60408301846141f7565b949350505050565b600080604083850312156144ee576144ed613f25565b5b60006144fc85828601613fa9565b925050602061450d8582860161418b565b9150509250929050565b6000806040838503121561452e5761452d613f25565b5b600061453c85828601613f73565b925050602061454d85828601613f73565b9150509250929050565b6000806000606084860312156145705761456f613f25565b5b600061457e86828701613fa9565b935050602061458f8682870161418b565b92505060406145a086828701613fa9565b9150509250925092565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60006145e482613f88565b91506145ef83613f88565b9250828201905080821115614607576146066145aa565b5b92915050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b600061464360208361403f565b915061464e8261460d565b602082019050919050565b6000602082019050818103600083015261467281614636565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60008160011c9050919050565b6000808291508390505b60018511156146ff578086048111156146db576146da6145aa565b5b60018516156146ea5780820291505b80810290506146f8856146a8565b94506146bf565b94509492505050565b60008261471857600190506147d4565b8161472657600090506147d4565b816001811461473c576002811461474657614775565b60019150506147d4565b60ff841115614758576147576145aa565b5b8360020a91508482111561476f5761476e6145aa565b5b506147d4565b5060208310610133831016604e8410600b84101617156147aa5782820a9050838111156147a5576147a46145aa565b5b6147d4565b6147b784848460016146b5565b925090508184048111156147ce576147cd6145aa565b5b81810290505b9392505050565b60006147e682613f88565b91506147f183614113565b925061481e7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8484614708565b905092915050565b600061483182613f88565b915061483c83613f88565b925082820261484a81613f88565b91508282048414831517614861576148606145aa565b5b5092915050565b600061487382613f88565b915061487e83613f88565b9250828203905081811115614896576148956145aa565b5b92915050565b7f746f74616c2066656520746f2068696768000000000000000000000000000000600082015250565b60006148d260118361403f565b91506148dd8261489c565b602082019050919050565b60006020820190508181036000830152614901816148c5565b9050919050565b7f43616e6e6f742075736520746865207a65726f2061646472657373206173207260008201527f6f75746572206164647265737300000000000000000000000000000000000000602082015250565b6000614964602d8361403f565b915061496f82614908565b604082019050919050565b6000602082019050818103600083015261499381614957565b9050919050565b6000815190506149a981613f5c565b92915050565b6000602082840312156149c5576149c4613f25565b5b60006149d38482850161499a565b91505092915050565b60006040820190506149f160008301856141cd565b6149fe60208301846141cd565b9392505050565b7f5468726573686f6c64206d7573742062652067726561746572207468616e2030600082015250565b6000614a3b60208361403f565b9150614a4682614a05565b602082019050919050565b60006020820190508181036000830152614a6a81614a2e565b9050919050565b7f74726164696e6720697320616c72656164792061637469766500000000000000600082015250565b6000614aa760198361403f565b9150614ab282614a71565b602082019050919050565b60006020820190508181036000830152614ad681614a9a565b9050919050565b7f43616e6e6f7420617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b6000614b3960248361403f565b9150614b4482614add565b604082019050919050565b60006020820190508181036000830152614b6881614b2c565b9050919050565b7f43616e6e6f7420617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b6000614bcb60228361403f565b9150614bd682614b6f565b604082019050919050565b60006020820190508181036000830152614bfa81614bbe565b9050919050565b7f7a65726f2061646472657373207472616e73666572206973206e6f7420616c6c60008201527f6f77656400000000000000000000000000000000000000000000000000000000602082015250565b6000614c5d60248361403f565b9150614c6882614c01565b604082019050919050565b60006020820190508181036000830152614c8c81614c50565b9050919050565b7f616d6f756e74206d7573742062652067726561746572207468616e207a65726f600082015250565b6000614cc960208361403f565b9150614cd482614c93565b602082019050919050565b60006020820190508181036000830152614cf881614cbc565b9050919050565b7f626c61636b6c6973746564000000000000000000000000000000000000000000600082015250565b6000614d35600b8361403f565b9150614d4082614cff565b602082019050919050565b60006020820190508181036000830152614d6481614d28565b9050919050565b7f63616e74207472616e7366657200000000000000000000000000000000000000600082015250565b6000614da1600d8361403f565b9150614dac82614d6b565b602082019050919050565b60006020820190508181036000830152614dd081614d94565b9050919050565b7f6d61782062757900000000000000000000000000000000000000000000000000600082015250565b6000614e0d60078361403f565b9150614e1882614dd7565b602082019050919050565b60006020820190508181036000830152614e3c81614e00565b9050919050565b7f736f6c6420656e6f7567682e0000000000000000000000000000000000000000600082015250565b6000614e79600c8361403f565b9150614e8482614e43565b602082019050919050565b60006020820190508181036000830152614ea881614e6c565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000614ee982613f88565b9150614ef483613f88565b925082614f0457614f03614eaf565b5b828204905092915050565b6000819050919050565b6000819050919050565b6000614f3e614f39614f3484614f0f565b614f19565b613f88565b9050919050565b614f4e81614f23565b82525050565b600060c082019050614f6960008301896141cd565b614f7660208301886141f7565b614f836040830187614f45565b614f906060830186614f45565b614f9d60808301856141cd565b614faa60a08301846141f7565b979650505050505050565b600081519050614fc481613f92565b92915050565b600080600060608486031215614fe357614fe2613f25565b5b6000614ff186828701614fb5565b935050602061500286828701614fb5565b925050604061501386828701614fb5565b9150509250925092565b6000819050919050565b61503861503382613f88565b61501d565b82525050565b60008160601b9050919050565b60006150568261503e565b9050919050565b60006150688261504b565b9050919050565b61508061507b82613f4a565b61505d565b82525050565b60006150928285615027565b6020820191506150a2828461506f565b6014820191508190509392505050565b60006150bd82613f88565b91506150c883613f88565b9250826150d8576150d7614eaf565b5b828206905092915050565b60006150ee82613f88565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82036151205761511f6145aa565b5b600182019050919050565b600061514661514161513c84614113565b614f19565b613f88565b9050919050565b6151568161512b565b82525050565b6000602082019050615171600083018461514d565b92915050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b6151ac81613f4a565b82525050565b60006151be83836151a3565b60208301905092915050565b6000602082019050919050565b60006151e282615177565b6151ec8185615182565b93506151f783615193565b8060005b8381101561522857815161520f88826151b2565b975061521a836151ca565b9250506001810190506151fb565b5085935050505092915050565b600060a08201905061524a60008301886141f7565b6152576020830187614f45565b818103604083015261526981866151d7565b905061527860608301856141cd565b61528560808301846141f7565b969550505050505056fea264697066735822122023650bd1cbb6d35552b31090447971b28f251040c8162d4ac8be84744b0d9d0e64736f6c63430008130033

Deployed Bytecode

0x6080604052600436106103545760003560e01c80638da5cb5b116101c6578063c122a3df116100f7578063e4ba3bc811610095578063ee40166e1161006f578063ee40166e14610ca4578063f097735714610ccf578063f16f07ae14610cf8578063fb96a95f14610d235761035b565b8063e4ba3bc814610c0e578063e59303e614610c4b578063e6f2306b14610c765761035b565b8063d3ff209d116100d1578063d3ff209d14610b54578063dd62ed3e14610b7f578063dde66cf614610bbc578063e01af92c14610be55761035b565b8063c122a3df14610ac5578063cdebd0ba14610b02578063d3f6a15714610b2b5761035b565b8063a8b0898211610164578063ac1b79b51161013e578063ac1b79b514610a19578063ae8e3c2814610a44578063b8c7ac8114610a6f578063c03fa52214610a9a5761035b565b8063a8b0898214610988578063a9059cbb146109b3578063aa60f5d0146109f05761035b565b806398e91314116101a057806398e91314146108b8578063a26d93fc146108f7578063a457c2d714610922578063a72e5e151461095f5761035b565b80638da5cb5b1461083757806395d89b4114610862578063962dfc751461088d5761035b565b80633e0bf716116102a057806359ecf39e1161023e5780637667180811610218578063766718081461079f5780637d584aa1146107ca5780637f7fcecc146107e1578063893d20e81461080c5761035b565b806359ecf39e1461070e5780635a264ca71461073757806370a08231146107625761035b565b80634f89bb9b1161027a5780634f89bb9b146106665780635031595f1461068f57806358b69bc3146106ba578063590ffdce146106e55761035b565b80633e0bf716146105e65780633fdcd7ee14610614578063412736571461063d5761035b565b806311a63e171161030d5780633094375d116102e75780633094375d1461052a57806330bcd7f614610555578063313ce5671461057e57806339509351146105a95761035b565b806311a63e171461049757806318160ddd146104c257806323b872dd146104ed5761035b565b80630432e5b71461036057806306fdde031461039d578063085a5972146103c857806309494a0114610408578063095ea7b3146104315780630db474fa1461046e5761035b565b3661035b57005b600080fd5b34801561036c57600080fd5b5061038760048036038101906103829190613fbe565b610d60565b6040516103949190614019565b60405180910390f35b3480156103a957600080fd5b506103b2610e68565b6040516103bf91906140c4565b60405180910390f35b3480156103d457600080fd5b506103ef60048036038101906103ea91906140e6565b610ea5565b6040516103ff949392919061412f565b60405180910390f35b34801561041457600080fd5b5061042f600480360381019061042a91906140e6565b610f15565b005b34801561043d57600080fd5b5061045860048036038101906104539190613fbe565b61108f565b6040516104659190614019565b60405180910390f35b34801561047a57600080fd5b50610495600480360381019061049091906141a0565b6110ad565b005b3480156104a357600080fd5b506104ac61115f565b6040516104b991906141dc565b60405180910390f35b3480156104ce57600080fd5b506104d7611185565b6040516104e49190614206565b60405180910390f35b3480156104f957600080fd5b50610514600480360381019061050f9190614221565b6111a9565b6040516105219190614019565b60405180910390f35b34801561053657600080fd5b5061053f611261565b60405161054c9190614206565b60405180910390f35b34801561056157600080fd5b5061057c60048036038101906105779190614398565b611298565b005b34801561058a57600080fd5b50610593611405565b6040516105a091906143c5565b60405180910390f35b3480156105b557600080fd5b506105d060048036038101906105cb9190613fbe565b611421565b6040516105dd9190614019565b60405180910390f35b3480156105f257600080fd5b506105fb6114cd565b60405161060b949392919061412f565b60405180910390f35b34801561062057600080fd5b5061063b600480360381019061063691906143e0565b61151f565b005b34801561064957600080fd5b50610664600480360381019061065f9190614420565b61160f565b005b34801561067257600080fd5b5061068d6004803603810190610688919061444d565b61196c565b005b34801561069b57600080fd5b506106a4611bb4565b6040516106b19190614206565b60405180910390f35b3480156106c657600080fd5b506106cf611bba565b6040516106dc9190614019565b60405180910390f35b3480156106f157600080fd5b5061070c600480360381019061070791906143e0565b611bd4565b005b34801561071a57600080fd5b50610735600480360381019061073091906140e6565b611cc4565b005b34801561074357600080fd5b5061074c611ddd565b6040516107599190614019565b60405180910390f35b34801561076e57600080fd5b5061078960048036038101906107849190614420565b611df0565b6040516107969190614206565b60405180910390f35b3480156107ab57600080fd5b506107b4611e39565b6040516107c19190614206565b60405180910390f35b3480156107d657600080fd5b506107df611e3f565b005b3480156107ed57600080fd5b506107f6611f76565b6040516108039190614019565b60405180910390f35b34801561081857600080fd5b50610821611f89565b60405161082e91906141dc565b60405180910390f35b34801561084357600080fd5b5061084c611f98565b60405161085991906141dc565b60405180910390f35b34801561086e57600080fd5b50610877611fc1565b60405161088491906140c4565b60405180910390f35b34801561089957600080fd5b506108a2611ffe565b6040516108af91906141dc565b60405180910390f35b3480156108c457600080fd5b506108df60048036038101906108da9190614420565b612024565b6040516108ee939291906144a0565b60405180910390f35b34801561090357600080fd5b5061090c61204e565b6040516109199190614206565b60405180910390f35b34801561092e57600080fd5b5061094960048036038101906109449190613fbe565b612054565b6040516109569190614019565b60405180910390f35b34801561096b57600080fd5b50610986600480360381019061098191906140e6565b612100565b005b34801561099457600080fd5b5061099d61237e565b6040516109aa91906141dc565b60405180910390f35b3480156109bf57600080fd5b506109da60048036038101906109d59190613fbe565b6123a8565b6040516109e79190614019565b60405180910390f35b3480156109fc57600080fd5b50610a176004803603810190610a1291906144d7565b6123c6565b005b348015610a2557600080fd5b50610a2e612480565b604051610a3b9190614019565b60405180910390f35b348015610a5057600080fd5b50610a59612493565b604051610a669190614206565b60405180910390f35b348015610a7b57600080fd5b50610a84612499565b604051610a919190614206565b60405180910390f35b348015610aa657600080fd5b50610aaf61249f565b604051610abc9190614019565b60405180910390f35b348015610ad157600080fd5b50610aec6004803603810190610ae79190614420565b6124b2565b604051610af99190614019565b60405180910390f35b348015610b0e57600080fd5b50610b296004803603810190610b2491906143e0565b6124d2565b005b348015610b3757600080fd5b50610b526004803603810190610b4d9190614517565b6125c2565b005b348015610b6057600080fd5b50610b696126dd565b604051610b769190614019565b60405180910390f35b348015610b8b57600080fd5b50610ba66004803603810190610ba19190614517565b6126f0565b604051610bb39190614206565b60405180910390f35b348015610bc857600080fd5b50610be36004803603810190610bde9190614557565b612777565b005b348015610bf157600080fd5b50610c0c6004803603810190610c0791906141a0565b612839565b005b348015610c1a57600080fd5b50610c356004803603810190610c309190614420565b6128eb565b604051610c429190614019565b60405180910390f35b348015610c5757600080fd5b50610c6061290b565b604051610c6d9190614206565b60405180910390f35b348015610c8257600080fd5b50610c8b612911565b604051610c9b949392919061412f565b60405180910390f35b348015610cb057600080fd5b50610cb9612963565b604051610cc69190614206565b60405180910390f35b348015610cdb57600080fd5b50610cf66004803603810190610cf191906140e6565b612969565b005b348015610d0457600080fd5b50610d0d612a41565b604051610d1a9190614206565b60405180910390f35b348015610d2f57600080fd5b50610d4a6004803603810190610d459190614420565b612a47565b604051610d579190614019565b60405180910390f35b6000600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615610dbd5760019050610e62565b600960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000015482600960008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060020154610e4e91906145d9565b1115610e5d5760009050610e62565b600190505b92915050565b60606040518060400160405280600881526020017f4d4f4f4e4b455953000000000000000000000000000000000000000000000000815250905090565b60058181548110610eb557600080fd5b906000526020600020016000915090508060000160009054906101000a900460ff16908060000160019054906101000a900460ff16908060000160029054906101000a900460ff16908060000160039054906101000a900460ff16905084565b610f1d612a67565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610faa576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fa190614659565b60405180910390fd5b4260178190555060058181548110610fc557610fc4614679565b5b9060005260206000200160046000820160009054906101000a900460ff168160000160006101000a81548160ff021916908360ff1602179055506000820160019054906101000a900460ff168160000160016101000a81548160ff021916908360ff1602179055506000820160029054906101000a900460ff168160000160026101000a81548160ff021916908360ff1602179055506000820160039054906101000a900460ff168160000160036101000a81548160ff021916908360ff16021790555090505050565b60006110a361109c612a67565b8484612a6f565b6001905092915050565b6110b5612a67565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611142576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161113990614659565b60405180910390fd5b80600e60016101000a81548160ff02191690831515021790555050565b601360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60006012600a61119591906147db565b633b9aca006111a49190614826565b905090565b60006111b6848484612c38565b611256846111c2612a67565b84600b60008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600061120c612a67565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546112519190614868565b612a6f565b600190509392505050565b60008061126d30611df0565b9050600f54811115611283576000915050611295565b80600f546112919190614868565b9150505b90565b6112a0612a67565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461132d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161132490614659565b60405180910390fd5b6019816060015160ff161115611378576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161136f906148e8565b60405180910390fd5b80600360008201518160000160006101000a81548160ff021916908360ff16021790555060208201518160000160016101000a81548160ff021916908360ff16021790555060408201518160000160026101000a81548160ff021916908360ff16021790555060608201518160000160036101000a81548160ff021916908360ff16021790555090505050565b600080611410611185565b0361141a57600080fd5b6012905090565b60006114c361142e612a67565b8484600b600061143c612a67565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546114be91906145d9565b612a6f565b6001905092915050565b60038060000160009054906101000a900460ff16908060000160019054906101000a900460ff16908060000160029054906101000a900460ff16908060000160039054906101000a900460ff16905084565b611527612a67565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146115b4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115ab90614659565b60405180910390fd5b80600860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b611617612a67565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146116a4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161169b90614659565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611713576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161170a9061497a565b60405180910390fd5b80601060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550601060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa1580156117c1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117e591906149af565b73ffffffffffffffffffffffffffffffffffffffff1663c9c6539630601060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa15801561186e573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061189291906149af565b6040518363ffffffff1660e01b81526004016118af9291906149dc565b6020604051808303816000875af11580156118ce573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118f291906149af565b601160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055507fd1431ffd6b1c0a705bfdf15dbd9a5954739e5f4f093dd08fef588fd4151642618160405161196191906141dc565b60405180910390a150565b611974612a67565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611a01576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119f890614659565b60405180910390fd5b6019816060015160ff161115611a4c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a43906148e8565b60405180910390fd5b8215611b05576005819080600181540180825580915050600190039060005260206000200160009091909190915060008201518160000160006101000a81548160ff021916908360ff16021790555060208201518160000160016101000a81548160ff021916908360ff16021790555060408201518160000160026101000a81548160ff021916908360ff16021790555060608201518160000160036101000a81548160ff021916908360ff1602179055505050611baf565b8060058360ff1681548110611b1d57611b1c614679565b5b9060005260206000200160008201518160000160006101000a81548160ff021916908360ff16021790555060208201518160000160016101000a81548160ff021916908360ff16021790555060408201518160000160026101000a81548160ff021916908360ff16021790555060608201518160000160036101000a81548160ff021916908360ff1602179055509050505b505050565b60165481565b600060145443611bca9190614868565b6015541015905090565b611bdc612a67565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611c69576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c6090614659565b60405180910390fd5b80600d60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b611ccc612a67565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611d59576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d5090614659565b60405180910390fd5b60008111611d9c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d9390614a51565b60405180910390fd5b80600f819055507f3d5472e45a39af360c106b99aa48f7356cd3b609ea581b5deb38a4b1270e898581604051611dd29190614206565b60405180910390a150565b600e60029054906101000a900460ff1681565b6000600c60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b601a5481565b611e47612a67565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611ed4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ecb90614659565b60405180910390fd5b601360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc479081150290604051600060405180830381858888f19350505050158015611f3c573d6000803e3d6000fd5b507fd1c23667321cc2db9d1de3db7f4dcf0eb5ade4f87e163713d3667eec1e92facb47604051611f6c9190614206565b60405180910390a1565b600e60009054906101000a900460ff1681565b6000611f93611f98565b905090565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60606040518060400160405280600781526020017f4d4f4e4b45595300000000000000000000000000000000000000000000000000815250905090565b601260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60096020528060005260406000206000915090508060000154908060010154908060020154905083565b600a5481565b60006120f6612061612a67565b8484600b600061206f612a67565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546120f19190614868565b612a6f565b6001905092915050565b612108612a67565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612195576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161218c90614659565b60405180910390fd5b600e60029054906101000a900460ff16156121e5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121dc90614abd565b60405180910390fd5b60056002815481106121fa576121f9614679565b5b9060005260206000200160046000820160009054906101000a900460ff168160000160006101000a81548160ff021916908360ff1602179055506000820160019054906101000a900460ff168160000160016101000a81548160ff021916908360ff1602179055506000820160029054906101000a900460ff168160000160026101000a81548160ff021916908360ff1602179055506000820160039054906101000a900460ff168160000160036101000a81548160ff021916908360ff1602179055509050506122cb6001612839565b6122d560016110ad565b6001601960006101000a81548160ff0219169083151502179055506001600e60026101000a81548160ff0219169083151502179055506001600e60036101000a81548160ff021916908315150217905550436015819055504260168190555042601781905550806014819055507f6600f6005863f92891b8c04d901a1f5d14860257428eba2058e9f3f9175b56336015546040516123739190614206565b60405180910390a150565b6000601160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60006123bc6123b5612a67565b8484612c38565b6001905092915050565b6123ce612a67565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461245b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161245290614659565b60405180910390fd5b8160188190555080601960006101000a81548160ff0219169083151502179055505050565b600e60039054906101000a900460ff1681565b60065481565b60185481565b601960009054906101000a900460ff1681565b60086020528060005260406000206000915054906101000a900460ff1681565b6124da612a67565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612567576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161255e90614659565b60405180910390fd5b80600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b6125ca612a67565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612657576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161264e90614659565b60405180910390fd5b81601260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080601360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505050565b600e60019054906101000a900460ff1681565b6000600b60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b61277f612a67565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461280c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161280390614659565b60405180910390fd5b8260068190555081600e60036101000a81548160ff02191690831515021790555080600a81905550505050565b612841612a67565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146128ce576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128c590614659565b60405180910390fd5b80600e60006101000a81548160ff02191690831515021790555050565b60076020528060005260406000206000915054906101000a900460ff1681565b60175481565b60048060000160009054906101000a900460ff16908060000160019054906101000a900460ff16908060000160029054906101000a900460ff16908060000160039054906101000a900460ff16905084565b60155481565b612971612a67565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146129fe576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016129f590614659565b60405180910390fd5b612a0781613101565b7f8d9f39d10957a4e556f944f249fcdc7cc1263cc4e31368fe3056895f85d4599d81604051612a369190614206565b60405180910390a150565b600f5481565b600d6020528060005260406000206000915054906101000a900460ff1681565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612ade576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ad590614b4f565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612b4d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b4490614be1565b60405180910390fd5b80600b60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92583604051612c2b9190614206565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612ca7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c9e90614c73565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612d16576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d0d90614c73565b60405180910390fd5b60008111612d59576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d5090614cdf565b60405180910390fd5b600860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615612de6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ddd90614d4b565b60405180910390fd5b600e60029054906101000a900460ff16612e8757600d60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16612e86576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612e7d90614db7565b60405180910390fd5b5b600e60009054906101000a900460ff1615612ea757612ea68383613437565b5b600d60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1661304e57612f0182613480565b612f5257612f0e816134da565b612f4d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612f4490614e23565b60405180910390fd5b61304d565b600e60039054906101000a900460ff161561301357612f7083613652565b612f7a8382610d60565b612fb9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612fb090614e8f565b60405180910390fd5b80600960008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600201600082825461300b91906145d9565b925050819055505b60185460175461302391906145d9565b421015801561303e5750601960009054906101000a900460ff165b1561304c5761304b613829565b5b5b5b600061305a84846139b5565b905060006064828461306c9190614826565b6130769190614ede565b9050600081846130869190614868565b905061309486868685613b02565b8473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516130f19190614206565b60405180910390a3505050505050565b61312e30601060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1683612a6f565b6000600460000160039054906101000a900460ff1660ff169050600081600460000160009054906101000a900460ff1660ff168461316c9190614826565b6131769190614ede565b9050600082600460000160029054906101000a900460ff1660ff168561319c9190614826565b6131a69190614ede565b905060008183866131b79190614868565b6131c19190614868565b905060006002846131d29190614ede565b9050600081905060008484846131e891906145d9565b6131f291906145d9565b905060006131ff82613c8a565b905060008285836132109190614826565b61321a9190614ede565b9050600083888461322b9190614826565b6132359190614ede565b905060008183856132469190614868565b6132509190614868565b9050601260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f193505050501580156132ba573d6000803e3d6000fd5b50601360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc839081150290604051600060405180830381858888f19350505050158015613323573d6000803e3d6000fd5b50601060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f305d719843089600080601360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16426040518863ffffffff1660e01b81526004016133ad96959493929190614f54565b60606040518083038185885af1935050505080156133e957506040513d601f19601f820116820180604052508101906133e69190614fca565b60015b156133f2575050505b7f7bf54cb9a865e8dabf744f65dfac5fe865060b1d1b8172c512d88fe90815cf2a846040516134219190614206565b60405180910390a1505050505050505050505050565b6134418282613eb7565b1561347c57600061345130611df0565b9050600f54811061347a57600f54905061346a82613480565b156134795761347881613101565b5b5b505b5050565b60008173ffffffffffffffffffffffffffffffffffffffff16601160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16149050919050565b6000601d546016546134ec91906145d9565b421161364857601b5460165461350291906145d9565b421161354f576103e8600a6012600a61351b91906147db565b633b9aca0061352a9190614826565b6135349190614826565b61353e9190614ede565b82111561354a57600080fd5b61363f565b601b5460165461355f91906145d9565b4211801561357c5750601c5460165461357891906145d9565b4211155b156135c8576103e860146012600a61359491906147db565b633b9aca006135a39190614826565b6135ad9190614826565b6135b79190614ede565b8211156135c357600080fd5b61363e565b601c546016546135d891906145d9565b421180156135f55750601d546016546135f191906145d9565b4211155b1561363d576103e8601e6012600a61360d91906147db565b633b9aca0061361c9190614826565b6136269190614826565b6136309190614ede565b82111561363c57600080fd5b5b5b5b6001905061364d565b600190505b919050565b6000600960008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000015414806136f25750600654600960008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600101546136ee91906145d9565b4210155b15613826576000600960008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060020181905550600a546064600c60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461378e9190614ede565b6137989190614826565b600960008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000018190555042600960008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600101819055505b50565b4260178190555060004233604051602001613845929190615086565b6040516020818303038152906040528051906020012060001c90506005805490508161387191906150b2565b90506005818154811061388757613886614679565b5b9060005260206000200160046000820160009054906101000a900460ff168160000160006101000a81548160ff021916908360ff1602179055506000820160019054906101000a900460ff168160000160016101000a81548160ff021916908360ff1602179055506000820160029054906101000a900460ff168160000160026101000a81548160ff021916908360ff1602179055506000820160039054906101000a900460ff168160000160036101000a81548160ff021916908360ff160217905550905050601a6000815480929190613961906150e3565b9190505550601a547fdb65cd45d636bb54d6d5a3c93fad39a5c8e2a905e8a3b92f485b345a9b594201600460000160039054906101000a900460ff166040516139aa919061515c565b60405180910390a250565b600080600e60019054906101000a900460ff168015613a1e5750600d60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b8015613a745750600d60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b90508015613af657613a84611bba565b15613a93576063915050613afc565b613a9c83613480565b15613abf57600460000160039054906101000a900460ff1660ff16915050613afc565b613ac884613480565b15613aeb57600360000160039054906101000a900460ff1660ff16915050613afc565b600a54915050613afc565b60009150505b92915050565b60008183613b109190614868565b905082600c60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254613b619190614868565b9250508190555080600c60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254613bb791906145d9565b9250508190555081600c60003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254613c0d91906145d9565b925050819055506000821115613c83573073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051613c7a9190614206565b60405180910390a35b5050505050565b6000804790506000600267ffffffffffffffff811115613cad57613cac614279565b5b604051908082528060200260200182016040528015613cdb5781602001602082028036833780820191505090505b5090503081600081518110613cf357613cf2614679565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050601060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015613d9a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613dbe91906149af565b81600181518110613dd257613dd1614679565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050601060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663791ac9478560008430426040518663ffffffff1660e01b8152600401613e70959493929190615235565b600060405180830381600087803b158015613e8a57600080fd5b505af1158015613e9e573d6000803e3d6000fd5b505050508147613eae9190614868565b92505050919050565b6000613ec38383613ecc565b15905092915050565b6000803073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16148015613f0f5750613f0e83613480565b5b90508091505092915050565b6000604051905090565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000613f5582613f2a565b9050919050565b613f6581613f4a565b8114613f7057600080fd5b50565b600081359050613f8281613f5c565b92915050565b6000819050919050565b613f9b81613f88565b8114613fa657600080fd5b50565b600081359050613fb881613f92565b92915050565b60008060408385031215613fd557613fd4613f25565b5b6000613fe385828601613f73565b9250506020613ff485828601613fa9565b9150509250929050565b60008115159050919050565b61401381613ffe565b82525050565b600060208201905061402e600083018461400a565b92915050565b600081519050919050565b600082825260208201905092915050565b60005b8381101561406e578082015181840152602081019050614053565b60008484015250505050565b6000601f19601f8301169050919050565b600061409682614034565b6140a0818561403f565b93506140b0818560208601614050565b6140b98161407a565b840191505092915050565b600060208201905081810360008301526140de818461408b565b905092915050565b6000602082840312156140fc576140fb613f25565b5b600061410a84828501613fa9565b91505092915050565b600060ff82169050919050565b61412981614113565b82525050565b60006080820190506141446000830187614120565b6141516020830186614120565b61415e6040830185614120565b61416b6060830184614120565b95945050505050565b61417d81613ffe565b811461418857600080fd5b50565b60008135905061419a81614174565b92915050565b6000602082840312156141b6576141b5613f25565b5b60006141c48482850161418b565b91505092915050565b6141d681613f4a565b82525050565b60006020820190506141f160008301846141cd565b92915050565b61420081613f88565b82525050565b600060208201905061421b60008301846141f7565b92915050565b60008060006060848603121561423a57614239613f25565b5b600061424886828701613f73565b935050602061425986828701613f73565b925050604061426a86828701613fa9565b9150509250925092565b600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6142b18261407a565b810181811067ffffffffffffffff821117156142d0576142cf614279565b5b80604052505050565b60006142e3613f1b565b90506142ef82826142a8565b919050565b6142fd81614113565b811461430857600080fd5b50565b60008135905061431a816142f4565b92915050565b60006080828403121561433657614335614274565b5b61434060806142d9565b905060006143508482850161430b565b60008301525060206143648482850161430b565b60208301525060406143788482850161430b565b604083015250606061438c8482850161430b565b60608301525092915050565b6000608082840312156143ae576143ad613f25565b5b60006143bc84828501614320565b91505092915050565b60006020820190506143da6000830184614120565b92915050565b600080604083850312156143f7576143f6613f25565b5b600061440585828601613f73565b92505060206144168582860161418b565b9150509250929050565b60006020828403121561443657614435613f25565b5b600061444484828501613f73565b91505092915050565b600080600060c0848603121561446657614465613f25565b5b60006144748682870161418b565b93505060206144858682870161430b565b925050604061449686828701614320565b9150509250925092565b60006060820190506144b560008301866141f7565b6144c260208301856141f7565b6144cf60408301846141f7565b949350505050565b600080604083850312156144ee576144ed613f25565b5b60006144fc85828601613fa9565b925050602061450d8582860161418b565b9150509250929050565b6000806040838503121561452e5761452d613f25565b5b600061453c85828601613f73565b925050602061454d85828601613f73565b9150509250929050565b6000806000606084860312156145705761456f613f25565b5b600061457e86828701613fa9565b935050602061458f8682870161418b565b92505060406145a086828701613fa9565b9150509250925092565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60006145e482613f88565b91506145ef83613f88565b9250828201905080821115614607576146066145aa565b5b92915050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b600061464360208361403f565b915061464e8261460d565b602082019050919050565b6000602082019050818103600083015261467281614636565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60008160011c9050919050565b6000808291508390505b60018511156146ff578086048111156146db576146da6145aa565b5b60018516156146ea5780820291505b80810290506146f8856146a8565b94506146bf565b94509492505050565b60008261471857600190506147d4565b8161472657600090506147d4565b816001811461473c576002811461474657614775565b60019150506147d4565b60ff841115614758576147576145aa565b5b8360020a91508482111561476f5761476e6145aa565b5b506147d4565b5060208310610133831016604e8410600b84101617156147aa5782820a9050838111156147a5576147a46145aa565b5b6147d4565b6147b784848460016146b5565b925090508184048111156147ce576147cd6145aa565b5b81810290505b9392505050565b60006147e682613f88565b91506147f183614113565b925061481e7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8484614708565b905092915050565b600061483182613f88565b915061483c83613f88565b925082820261484a81613f88565b91508282048414831517614861576148606145aa565b5b5092915050565b600061487382613f88565b915061487e83613f88565b9250828203905081811115614896576148956145aa565b5b92915050565b7f746f74616c2066656520746f2068696768000000000000000000000000000000600082015250565b60006148d260118361403f565b91506148dd8261489c565b602082019050919050565b60006020820190508181036000830152614901816148c5565b9050919050565b7f43616e6e6f742075736520746865207a65726f2061646472657373206173207260008201527f6f75746572206164647265737300000000000000000000000000000000000000602082015250565b6000614964602d8361403f565b915061496f82614908565b604082019050919050565b6000602082019050818103600083015261499381614957565b9050919050565b6000815190506149a981613f5c565b92915050565b6000602082840312156149c5576149c4613f25565b5b60006149d38482850161499a565b91505092915050565b60006040820190506149f160008301856141cd565b6149fe60208301846141cd565b9392505050565b7f5468726573686f6c64206d7573742062652067726561746572207468616e2030600082015250565b6000614a3b60208361403f565b9150614a4682614a05565b602082019050919050565b60006020820190508181036000830152614a6a81614a2e565b9050919050565b7f74726164696e6720697320616c72656164792061637469766500000000000000600082015250565b6000614aa760198361403f565b9150614ab282614a71565b602082019050919050565b60006020820190508181036000830152614ad681614a9a565b9050919050565b7f43616e6e6f7420617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b6000614b3960248361403f565b9150614b4482614add565b604082019050919050565b60006020820190508181036000830152614b6881614b2c565b9050919050565b7f43616e6e6f7420617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b6000614bcb60228361403f565b9150614bd682614b6f565b604082019050919050565b60006020820190508181036000830152614bfa81614bbe565b9050919050565b7f7a65726f2061646472657373207472616e73666572206973206e6f7420616c6c60008201527f6f77656400000000000000000000000000000000000000000000000000000000602082015250565b6000614c5d60248361403f565b9150614c6882614c01565b604082019050919050565b60006020820190508181036000830152614c8c81614c50565b9050919050565b7f616d6f756e74206d7573742062652067726561746572207468616e207a65726f600082015250565b6000614cc960208361403f565b9150614cd482614c93565b602082019050919050565b60006020820190508181036000830152614cf881614cbc565b9050919050565b7f626c61636b6c6973746564000000000000000000000000000000000000000000600082015250565b6000614d35600b8361403f565b9150614d4082614cff565b602082019050919050565b60006020820190508181036000830152614d6481614d28565b9050919050565b7f63616e74207472616e7366657200000000000000000000000000000000000000600082015250565b6000614da1600d8361403f565b9150614dac82614d6b565b602082019050919050565b60006020820190508181036000830152614dd081614d94565b9050919050565b7f6d61782062757900000000000000000000000000000000000000000000000000600082015250565b6000614e0d60078361403f565b9150614e1882614dd7565b602082019050919050565b60006020820190508181036000830152614e3c81614e00565b9050919050565b7f736f6c6420656e6f7567682e0000000000000000000000000000000000000000600082015250565b6000614e79600c8361403f565b9150614e8482614e43565b602082019050919050565b60006020820190508181036000830152614ea881614e6c565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000614ee982613f88565b9150614ef483613f88565b925082614f0457614f03614eaf565b5b828204905092915050565b6000819050919050565b6000819050919050565b6000614f3e614f39614f3484614f0f565b614f19565b613f88565b9050919050565b614f4e81614f23565b82525050565b600060c082019050614f6960008301896141cd565b614f7660208301886141f7565b614f836040830187614f45565b614f906060830186614f45565b614f9d60808301856141cd565b614faa60a08301846141f7565b979650505050505050565b600081519050614fc481613f92565b92915050565b600080600060608486031215614fe357614fe2613f25565b5b6000614ff186828701614fb5565b935050602061500286828701614fb5565b925050604061501386828701614fb5565b9150509250925092565b6000819050919050565b61503861503382613f88565b61501d565b82525050565b60008160601b9050919050565b60006150568261503e565b9050919050565b60006150688261504b565b9050919050565b61508061507b82613f4a565b61505d565b82525050565b60006150928285615027565b6020820191506150a2828461506f565b6014820191508190509392505050565b60006150bd82613f88565b91506150c883613f88565b9250826150d8576150d7614eaf565b5b828206905092915050565b60006150ee82613f88565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82036151205761511f6145aa565b5b600182019050919050565b600061514661514161513c84614113565b614f19565b613f88565b9050919050565b6151568161512b565b82525050565b6000602082019050615171600083018461514d565b92915050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b6151ac81613f4a565b82525050565b60006151be83836151a3565b60208301905092915050565b6000602082019050919050565b60006151e282615177565b6151ec8185615182565b93506151f783615193565b8060005b8381101561522857815161520f88826151b2565b975061521a836151ca565b9250506001810190506151fb565b5085935050505092915050565b600060a08201905061524a60008301886141f7565b6152576020830187614f45565b818103604083015261526981866151d7565b905061527860608301856141cd565b61528560808301846141f7565b969550505050505056fea264697066735822122023650bd1cbb6d35552b31090447971b28f251040c8162d4ac8be84744b0d9d0e64736f6c63430008130033

Deployed Bytecode Sourcemap

4556:16538:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14861:295;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20891:79;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4993:29;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;;;;:::i;:::-;;;;;;;;14703:152;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;9808;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20342:86;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;6038:25;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19946:86;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;9379:302;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17880:224;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;8756:160;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;20679:117;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18110:206;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4898:30;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;:::i;:::-;;;;;;;;19370:109;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;18544:329;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;8924:281;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;6182:36;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20557:115;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20434:117;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;18988:215;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;5707:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;9689:113;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;6368:27;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19209:153;;;;;;;;;;;;;:::i;:::-;;5644:26;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20976:80;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;871:79;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20802:83;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;6002:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5310:55;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;;;:::i;:::-;;;;;;;;5370:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18322:216;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;8033:552;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;20171:71;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;9215:158;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19600:136;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;5798:25;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5051:45;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;6262:47;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;6314:24;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5253:52;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19485:109;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;8593:151;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;5676:25;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20038:127;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19742:198;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;20248:88;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;5196:52;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;6225:32;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4945:31;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;:::i;:::-;;;;;;;;6107:37;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;12732:131;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;5830:60;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5577:59;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;14861:295;14943:4;14958:17;:24;14976:5;14958:24;;;;;;;;;;;;;;;;;;;;;;;;;14955:43;;;14992:4;14985:11;;;;14955:43;15077:15;:22;15093:5;15077:22;;;;;;;;;;;;;;;:37;;;15066:7;15031:15;:22;15047:5;15031:22;;;;;;;;;;;;;;;:33;;;:42;;;;:::i;:::-;:83;15028:104;;;15124:5;15117:12;;;;15028:104;15146:4;15139:11;;14861:295;;;;;:::o;20891:79::-;20939:13;20963:4;;;;;;;;;;;;;;;;;20956:11;;20891:79;:::o;4993:29::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;14703:152::-;1008:12;:10;:12::i;:::-;998:22;;:6;;;;;;;;;;:22;;;990:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;14788:15:::1;14768:17;:35;;;;14830:9;14840:6;14830:17;;;;;;;;:::i;:::-;;;;;;;;;14815:12;:32;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14703:152:::0;:::o;9808:::-;9883:4;9896:40;9906:12;:10;:12::i;:::-;9920:7;9929:6;9896:9;:40::i;:::-;9950:4;9943:11;;9808:152;;;;:::o;20342:86::-;1008:12;:10;:12::i;:::-;998:22;;:6;;;;;;;;;;:22;;;990:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;20416:9:::1;20400:13;;:25;;;;;;;;;;;;;;;;;;20342:86:::0;:::o;6038:25::-;;;;;;;;;;;;;:::o;19946:86::-;19999:7;4798:2;4653;:12;;;;:::i;:::-;4637:13;:28;;;;:::i;:::-;20010:19;;19946:86;:::o;9379:302::-;9477:4;9490:37;9501:6;9509:9;9520:6;9490:10;:37::i;:::-;9534:75;9544:6;9552:12;:10;:12::i;:::-;9602:6;9566:11;:19;9578:6;9566:19;;;;;;;;;;;;;;;:33;9586:12;:10;:12::i;:::-;9566:33;;;;;;;;;;;;;;;;:42;;;;:::i;:::-;9534:9;:75::i;:::-;9671:4;9664:11;;9379:302;;;;;:::o;17880:224::-;17931:7;17947:15;17965:24;17983:4;17965:9;:24::i;:::-;17947:42;;18010:19;;18000:7;:29;17996:60;;;18047:1;18040:8;;;;;17996:60;18091:7;18069:19;;:29;;;;:::i;:::-;18062:36;;;17880:224;;:::o;8756:160::-;1008:12;:10;:12::i;:::-;998:22;;:6;;;;;;;;;;:22;;;990:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;8857:2:::1;8839:4;:14;;;:20;;;;8831:50;;;;;;;;;;;;:::i;:::-;;;;;;;;;8904:4;8890:11;:18;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8756:160:::0;:::o;20679:117::-;20731:5;20761:1;20744:13;:11;:13::i;:::-;:18;20740:37;;20766:8;;;20740:37;4798:2;20778:15;;20679:117;:::o;18110:206::-;18198:4;18211:81;18221:12;:10;:12::i;:::-;18235:7;18281:10;18244:11;:25;18256:12;:10;:12::i;:::-;18244:25;;;;;;;;;;;;;;;:34;18270:7;18244:34;;;;;;;;;;;;;;;;:47;;;;:::i;:::-;18211:9;:81::i;:::-;18306:4;18299:11;;18110:206;;;;:::o;4898:30::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;19370:109::-;1008:12;:10;:12::i;:::-;998:22;;:6;;;;;;;;;;:22;;;990:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;19469:7:::1;19442:17;:24;19460:5;19442:24;;;;;;;;;;;;;;;;:34;;;;;;;;;;;;;;;;;;19370:109:::0;;:::o;18544:329::-;1008:12;:10;:12::i;:::-;998:22;;:6;;;;;;;;;;:22;;;990:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;18647:1:::1;18622:27;;:13;:27;;::::0;18614:85:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;18727:13;18706:8;;:35;;;;;;;;;;;;;;;;;;18768:8;;;;;;;;;;;:16;;;:18;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;18757:41;;;18807:4;18814:8;;;;;;;;;;;:13;;;:15;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;18757:73;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;18748:6;;:82;;;;;;;;;;;;;;;;;;18842:25;18853:13;18842:25;;;;;;:::i;:::-;;;;;;;;18544:329:::0;:::o;8924:281::-;1008:12;:10;:12::i;:::-;998:22;;:6;;;;;;;;;;:22;;;990:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;9053:2:::1;9035:4;:14;;;:20;;;;9027:50;;;;;;;;;;;;:::i;:::-;;;;;;;;;9091:4;9088:110;;;9111:9;9126:4;9111:20;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9088:110;;;9182:4;9162:9;9172:6;9162:17;;;;;;;;;;:::i;:::-;;;;;;;;;:24;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9088:110;8924:281:::0;;;:::o;6182:36::-;;;;:::o;20557:115::-;20605:4;20657:12;;20642;:27;;;;:::i;:::-;20620:18;;:49;;20613:56;;20557:115;:::o;20434:117::-;1008:12;:10;:12::i;:::-;998:22;;:6;;;;;;;;;;:22;;;990:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;20543:5:::1;20508:26;:32;20535:4;20508:32;;;;;;;;;;;;;;;;:40;;;;;;;;;;;;;;;;;;20434:117:::0;;:::o;18988:215::-;1008:12;:10;:12::i;:::-;998:22;;:6;;;;;;;;;;:22;;;990:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;19085:1:::1;19073:9;:13;19065:58;;;;;;;;;;;;:::i;:::-;;;;;;;;;19152:9;19130:19;:31;;;;19173:24;19187:9;19173:24;;;;;;:::i;:::-;;;;;;;;18988:215:::0;:::o;5707:28::-;;;;;;;;;;;;;:::o;9689:113::-;9755:7;9778:9;:18;9788:7;9778:18;;;;;;;;;;;;;;;;9771:25;;9689:113;;;:::o;6368:27::-;;;;:::o;19209:153::-;1008:12;:10;:12::i;:::-;998:22;;:6;;;;;;;;;;:22;;;990:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;19266:10:::1;;;;;;;;;;;19258:28;;:51;19287:21;19258:51;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;19323:33;19334:21;19323:33;;;;;;:::i;:::-;;;;;;;;19209:153::o:0;5644:26::-;;;;;;;;;;;;;:::o;20976:80::-;21028:7;21046;:5;:7::i;:::-;21039:14;;20976:80;:::o;871:79::-;909:7;936:6;;;;;;;;;;;929:13;;871:79;:::o;20802:83::-;20852:13;20876:6;;;;;;;;;;;;;;;;;20869:13;;20802:83;:::o;6002:31::-;;;;;;;;;;;;;:::o;5310:55::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;5370:31::-;;;;:::o;18322:216::-;18415:4;18428:86;18438:12;:10;:12::i;:::-;18452:7;18498:15;18461:11;:25;18473:12;:10;:12::i;:::-;18461:25;;;;;;;;;;;;;;;:34;18487:7;18461:34;;;;;;;;;;;;;;;;:52;;;;:::i;:::-;18428:9;:86::i;:::-;18528:4;18521:11;;18322:216;;;;:::o;8033:552::-;1008:12;:10;:12::i;:::-;998:22;;:6;;;;;;;;;;:22;;;990:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;8111:16:::1;;;;;;;;;;;8110:17;8102:55;;;;;;;;;;;;:::i;:::-;;;;;;;;;8185:9;8195:1;8185:12;;;;;;;;:::i;:::-;;;;;;;;;8170;:27;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8210:20;8225:4;8210:14;:20::i;:::-;8241:19;8255:4;8241:13;:19::i;:::-;8286:4;8271:12;;:19;;;;;;;;;;;;;;;;;;8320:4;8301:16;;:23;;;;;;;;;;;;;;;;;;8350:4;8335:12;;:19;;;;;;;;;;;;;;;;;;8389:12;8368:18;:33;;;;8432:15;8412:17;:35;;;;8480:15;8460:17;:35;;;;8521:13;8506:12;:28;;;;8552:27;8560:18;;8552:27;;;;;;:::i;:::-;;;;;;;;8033:552:::0;:::o;20171:71::-;20215:7;20233:6;;;;;;;;;;;20226:13;;20171:71;:::o;9215:158::-;9293:4;9306:43;9317:12;:10;:12::i;:::-;9331:9;9342:6;9306:10;:43::i;:::-;9363:4;9356:11;;9215:158;;;;:::o;19600:136::-;1008:12;:10;:12::i;:::-;998:22;;:6;;;;;;;;;;:22;;;990:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;19702:5:::1;19677:22;:30;;;;19724:9;19709:12;;:24;;;;;;;;;;;;;;;;;;19600:136:::0;;:::o;5798:25::-;;;;;;;;;;;;;:::o;5051:45::-;;;;:::o;6262:47::-;;;;:::o;6314:24::-;;;;;;;;;;;;;:::o;5253:52::-;;;;;;;;;;;;;;;;;;;;;;:::o;19485:109::-;1008:12;:10;:12::i;:::-;998:22;;:6;;;;;;;;;;:22;;;990:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;19584:7:::1;19557:17;:24;19575:5;19557:24;;;;;;;;;;;;;;;;:34;;;;;;;;;;;;;;;;;;19485:109:::0;;:::o;8593:151::-;1008:12;:10;:12::i;:::-;998:22;;:6;;;;;;;;;;:22;;;990:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;8698:10:::1;8679:16;;:29;;;;;;;;;;;;;;;;;;8732:4;8719:10;;:17;;;;;;;;;;;;;;;;;;8593:151:::0;;:::o;5676:25::-;;;;;;;;;;;;;:::o;20038:127::-;20118:7;20136:11;:17;20148:4;20136:17;;;;;;;;;;;;;;;:26;20154:7;20136:26;;;;;;;;;;;;;;;;20129:33;;20038:127;;;;:::o;19742:198::-;1008:12;:10;:12::i;:::-;998:22;;:6;;;;;;;;;;:22;;;990:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;19874:15:::1;19852:19;:37;;;;19906:9;19891:12;;:24;;;;;;;;;;;;;;;;;;19930:7;19917:10;:20;;;;19742:198:::0;;;:::o;20248:88::-;1008:12;:10;:12::i;:::-;998:22;;:6;;;;;;;;;;:22;;;990:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;20324:9:::1;20307:14;;:26;;;;;;;;;;;;;;;;;;20248:88:::0;:::o;5196:52::-;;;;;;;;;;;;;;;;;;;;;;:::o;6225:32::-;;;;:::o;4945:31::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;6107:37::-;;;;:::o;12732:131::-;1008:12;:10;:12::i;:::-;998:22;;:6;;;;;;;;;;:22;;;990:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;12800:25:::1;12812:12;12800:11;:25::i;:::-;12837:20;12844:12;12837:20;;;;;;:::i;:::-;;;;;;;;12732:131:::0;:::o;5830:60::-;;;;:::o;5577:59::-;;;;;;;;;;;;;;;;;;;;;;:::o;97:115::-;150:15;193:10;178:26;;97:115;:::o;16109:318::-;16216:1;16199:19;;:5;:19;;;16191:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;16293:1;16274:21;;:7;:21;;;16266:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;16371:6;16341:11;:18;16353:5;16341:18;;;;;;;;;;;;;;;:27;16360:7;16341:27;;;;;;;;;;;;;;;:36;;;;16405:7;16389:32;;16398:5;16389:32;;;16414:6;16389:32;;;;;;:::i;:::-;;;;;;;;16109:318;;;:::o;9968:1485::-;10089:1;10071:20;;:6;:20;;;10063:69;;;;;;;;;;;;:::i;:::-;;;;;;;;;10168:1;10147:23;;:9;:23;;;10139:72;;;;;;;;;;;;:::i;:::-;;;;;;;;;10235:1;10226:6;:10;10218:55;;;;;;;;;;;;:::i;:::-;;;;;;;;;10289:17;:25;10307:6;10289:25;;;;;;;;;;;;;;;;;;;;;;;;;10288:26;10280:50;;;;;;;;;;;;:::i;:::-;;;;;;;;;10341:16;;;;;;;;;;;10337:88;;10370:26;:34;10397:6;10370:34;;;;;;;;;;;;;;;;;;;;;;;;;10362:60;;;;;;;;;;;;:::i;:::-;;;;;;;;;10337:88;10434:14;;;;;;;;;;;10431:58;;;10451:35;10468:6;10476:9;10451:16;:35::i;:::-;10431:58;10501:26;:34;10528:6;10501:34;;;;;;;;;;;;;;;;;;;;;;;;;10497:670;;10563:28;10581:9;10563:17;:28::i;:::-;10559:599;;10638:22;10653:6;10638:14;:22::i;:::-;10630:42;;;;;;;;;;;;:::i;:::-;;;;;;;;;10559:599;;;10702:12;;;;;;;;;;;10699:255;;;10730:26;10749:6;10730:18;:26::i;:::-;10779:35;10799:6;10807;10779:19;:35::i;:::-;10771:60;;;;;;;;;;;;:::i;:::-;;;;;;;;;10934:6;10896:15;:23;10912:6;10896:23;;;;;;;;;;;;;;;:34;;;:44;;;;;;;:::i;:::-;;;;;;;;10699:255;11059:22;;11039:17;;:42;;;;:::i;:::-;11020:15;:61;;:77;;;;;11085:12;;;;;;;;;;;11020:77;11017:130;;;11116:16;:14;:16::i;:::-;11017:130;10559:599;10497:670;11176:15;11194:35;11211:6;11219:9;11194:16;:35::i;:::-;11176:53;;11236:17;11275:3;11265:7;11256:6;:16;;;;:::i;:::-;:22;;;;:::i;:::-;11236:42;;11285:22;11319:9;11310:6;:18;;;;:::i;:::-;11285:43;;11337:52;11352:6;11360:9;11371:6;11379:9;11337:14;:52::i;:::-;11420:9;11403:43;;11412:6;11403:43;;;11431:14;11403:43;;;;;;:::i;:::-;;;;;;;;10056:1397;;;9968:1485;;;:::o;12871:1397::-;12984:51;13002:4;13017:8;;;;;;;;;;;13028:6;12984:9;:51::i;:::-;13042:13;13058:12;:22;;;;;;;;;;;;13042:38;;;;13089:34;13161:5;13135:12;:23;;;;;;;;;;;;13126:32;;:6;:32;;;;:::i;:::-;:40;;;;:::i;:::-;13089:77;;13173:28;13233:5;13213:12;:17;;;;;;;;;;;;13204:26;;:6;:26;;;;:::i;:::-;:34;;;;:::i;:::-;13173:65;;13246:34;13321:20;13292:26;13283:6;:35;;;;:::i;:::-;:58;;;;:::i;:::-;13246:95;;13350:32;13414:1;13385:26;:30;;;;:::i;:::-;13350:65;;13422:30;13455:24;13422:57;;13488:20;13567;13538:26;13511:24;:53;;;;:::i;:::-;:76;;;;:::i;:::-;13488:99;;13594:18;13615:30;13632:12;13615:16;:30::i;:::-;13594:51;;13658:31;13732:12;13705:24;13692:10;:37;;;;:::i;:::-;:52;;;;:::i;:::-;13658:86;;13751:32;13822:12;13799:20;13786:10;:33;;;;:::i;:::-;:48;;;;:::i;:::-;13751:83;;13841:30;13912:24;13887:23;13874:10;:36;;;;:::i;:::-;:62;;;;:::i;:::-;13841:95;;13953:16;;;;;;;;;;;13945:34;;:58;13980:22;13945:58;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14018:10;;;;;;;;;;;14010:28;;:54;14039:24;14010:54;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14077:8;;;;;;;;;;;:24;;;14109:23;14142:4;14149:22;14173:1;14176;14179:10;;;;;;;;;;;14191:15;14077:130;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;14073:145;;;;;;;14235:27;14251:10;14235:27;;;;;;:::i;:::-;;;;;;;;12916:1352;;;;;;;;;;;12871:1397;:::o;12252:428::-;12333:35;12350:6;12358:9;12333:16;:35::i;:::-;12328:65;12379:7;12328:65;12401:30;12434:24;12452:4;12434:9;:24::i;:::-;12401:57;;12495:19;;12469:22;:45;12465:210;;12550:19;;12525:44;;12582:28;12600:9;12582:17;:28::i;:::-;12578:90;;;12623:35;12635:22;12623:11;:35::i;:::-;12578:90;12465:210;12321:359;12252:428;;;:::o;18879:103::-;18942:4;18972;18962:14;;:6;;;;;;;;;;;:14;;;18955:21;;18879:103;;;:::o;11459:785::-;11523:4;11579:10;;11561:17;;:28;;;;:::i;:::-;11542:15;:47;11539:682;;11643:8;;11625:17;;:26;;;;:::i;:::-;11606:15;:45;11603:587;;11739:4;11733:2;4798;4653;:12;;;;:::i;:::-;4637:13;:28;;;;:::i;:::-;11718:17;;;;:::i;:::-;11717:26;;;;:::i;:::-;11706:7;:37;;11698:47;;;;;;11603:587;;;11811:8;;11793:17;;:26;;;;:::i;:::-;11775:15;:44;:93;;;;;11860:8;;11842:17;;:26;;;;:::i;:::-;11823:15;:45;;11775:93;11772:418;;;11949:4;11943:2;4798;4653;:12;;;;:::i;:::-;4637:13;:28;;;;:::i;:::-;11928:17;;;;:::i;:::-;11927:26;;;;:::i;:::-;11916:7;:37;;11908:46;;;;;;11772:418;;;12020:8;;12002:17;;:26;;;;:::i;:::-;11984:15;:44;:95;;;;;12069:10;;12051:17;;:28;;;;:::i;:::-;12032:15;:47;;11984:95;11981:209;;;12163:4;12157:2;4798;4653;:12;;;;:::i;:::-;4637:13;:28;;;;:::i;:::-;12142:17;;;;:::i;:::-;12141:26;;;;:::i;:::-;12130:7;:37;;12122:46;;;;;;11981:209;11772:418;11603:587;12209:4;12202:11;;;;11539:682;12234:4;12227:11;;11459:785;;;;:::o;15162:407::-;15267:1;15226:15;:22;15242:5;15226:22;;;;;;;;;;;;;;;:37;;;:42;:123;;;;15330:19;;15291:15;:22;15307:5;15291:22;;;;;;;;;;;;;;;:37;;;:58;;;;:::i;:::-;15272:15;:77;;15226:123;15223:341;;;15398:1;15362:15;:22;15378:5;15362:22;;;;;;;;;;;;;;;:33;;:37;;;;15476:10;;15470:3;15451:9;:16;15461:5;15451:16;;;;;;;;;;;;;;;;:22;;;;:::i;:::-;:35;;;;:::i;:::-;15411:15;:22;15427:5;15411:22;;;;;;;;;;;;;;;:37;;:75;;;;15539:15;15499;:22;15515:5;15499:22;;;;;;;;;;;;;;;:37;;:55;;;;15223:341;15162:407;:::o;14310:385::-;14377:15;14357:17;:35;;;;14403:13;14454:15;14472:10;14437:46;;;;;;;;;:::i;:::-;;;;;;;;;;;;;14427:57;;;;;;14419:66;;14403:82;;14537:9;:16;;;;14529:5;:24;;;;:::i;:::-;14521:32;;14579:9;14589:5;14579:16;;;;;;;;:::i;:::-;;;;;;;;;14564:12;:31;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14608:12;;:14;;;;;;;;;:::i;:::-;;;;;;14650:12;;14638:49;14664:12;:22;;;;;;;;;;;;14638:49;;;;;;:::i;:::-;;;;;;;;14346:349;14310:385::o;16433:642::-;16515:7;16531:14;16548:13;;;;;;;;;;;:52;;;;;16566:26;:34;16593:6;16566:34;;;;;;;;;;;;;;;;;;;;;;;;;16565:35;16548:52;:94;;;;;16605:26;:37;16632:9;16605:37;;;;;;;;;;;;;;;;;;;;;;;;;16604:38;16548:94;16531:111;;16653:9;16649:408;;;16680:17;:15;:17::i;:::-;16677:371;;;16720:2;16713:9;;;;;16677:371;16759:28;16777:9;16759:17;:28::i;:::-;16755:280;;;16815:12;:22;;;;;;;;;;;;16808:29;;;;;;;16755:280;16861:25;16879:6;16861:17;:25::i;:::-;16858:177;;;16913:11;:21;;;;;;;;;;;;16906:28;;;;;;;16858:177;17009:10;;17002:17;;;;;16649:408;17070:1;17063:8;;;16433:642;;;;;:::o;15575:528::-;15741:22;15779:9;15766:10;:22;;;;:::i;:::-;15741:47;;15842:10;15821:9;:17;15831:6;15821:17;;;;;;;;;;;;;;;;:31;;;;;;;:::i;:::-;;;;;;;;15883:14;15859:9;:20;15869:9;15859:20;;;;;;;;;;;;;;;;:38;;;;;;;:::i;:::-;;;;;;;;15967:9;15939;:24;15957:4;15939:24;;;;;;;;;;;;;;;;:37;;;;;;;:::i;:::-;;;;;;;;16026:1;16014:9;:13;16011:83;;;16068:4;16043:42;;16052:6;16043:42;;;16075:9;16043:42;;;;;;:::i;:::-;;;;;;;;16011:83;15681:422;15575:528;;;;:::o;17081:420::-;17145:7;17161:22;17186:21;17161:46;;17218:21;17256:1;17242:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17218:40;;17283:4;17265;17270:1;17265:7;;;;;;;;:::i;:::-;;;;;;;:23;;;;;;;;;;;17305:8;;;;;;;;;;;:13;;;:15;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;17295:4;17300:1;17295:7;;;;;;;;:::i;:::-;;;;;;;:25;;;;;;;;;;;17327:8;;;;;;;;;;;:59;;;17387:11;17400:1;17403:4;17417;17424:15;17327:113;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17481:14;17457:21;:38;;;;:::i;:::-;17450:45;;;;17081:420;;;:::o;17723:151::-;17814:4;17835:33;17850:6;17858:9;17835:14;:33::i;:::-;17834:34;17827:41;;17723:151;;;;:::o;17507:210::-;17587:4;17600:22;17643:4;17625:23;;:6;:23;;;:55;;;;;17652:28;17670:9;17652:17;:28::i;:::-;17625:55;17600:80;;17694:17;17687:24;;;17507:210;;;;:::o;7:75:1:-;40:6;73:2;67:9;57:19;;7:75;:::o;88:117::-;197:1;194;187:12;334:126;371:7;411:42;404:5;400:54;389:65;;334:126;;;:::o;466:96::-;503:7;532:24;550:5;532:24;:::i;:::-;521:35;;466:96;;;:::o;568:122::-;641:24;659:5;641:24;:::i;:::-;634:5;631:35;621:63;;680:1;677;670:12;621:63;568:122;:::o;696:139::-;742:5;780:6;767:20;758:29;;796:33;823:5;796:33;:::i;:::-;696:139;;;;:::o;841:77::-;878:7;907:5;896:16;;841:77;;;:::o;924:122::-;997:24;1015:5;997:24;:::i;:::-;990:5;987:35;977:63;;1036:1;1033;1026:12;977:63;924:122;:::o;1052:139::-;1098:5;1136:6;1123:20;1114:29;;1152:33;1179:5;1152:33;:::i;:::-;1052:139;;;;:::o;1197:474::-;1265:6;1273;1322:2;1310:9;1301:7;1297:23;1293:32;1290:119;;;1328:79;;:::i;:::-;1290:119;1448:1;1473:53;1518:7;1509:6;1498:9;1494:22;1473:53;:::i;:::-;1463:63;;1419:117;1575:2;1601:53;1646:7;1637:6;1626:9;1622:22;1601:53;:::i;:::-;1591:63;;1546:118;1197:474;;;;;:::o;1677:90::-;1711:7;1754:5;1747:13;1740:21;1729:32;;1677:90;;;:::o;1773:109::-;1854:21;1869:5;1854:21;:::i;:::-;1849:3;1842:34;1773:109;;:::o;1888:210::-;1975:4;2013:2;2002:9;1998:18;1990:26;;2026:65;2088:1;2077:9;2073:17;2064:6;2026:65;:::i;:::-;1888:210;;;;:::o;2104:99::-;2156:6;2190:5;2184:12;2174:22;;2104:99;;;:::o;2209:169::-;2293:11;2327:6;2322:3;2315:19;2367:4;2362:3;2358:14;2343:29;;2209:169;;;;:::o;2384:246::-;2465:1;2475:113;2489:6;2486:1;2483:13;2475:113;;;2574:1;2569:3;2565:11;2559:18;2555:1;2550:3;2546:11;2539:39;2511:2;2508:1;2504:10;2499:15;;2475:113;;;2622:1;2613:6;2608:3;2604:16;2597:27;2446:184;2384:246;;;:::o;2636:102::-;2677:6;2728:2;2724:7;2719:2;2712:5;2708:14;2704:28;2694:38;;2636:102;;;:::o;2744:377::-;2832:3;2860:39;2893:5;2860:39;:::i;:::-;2915:71;2979:6;2974:3;2915:71;:::i;:::-;2908:78;;2995:65;3053:6;3048:3;3041:4;3034:5;3030:16;2995:65;:::i;:::-;3085:29;3107:6;3085:29;:::i;:::-;3080:3;3076:39;3069:46;;2836:285;2744:377;;;;:::o;3127:313::-;3240:4;3278:2;3267:9;3263:18;3255:26;;3327:9;3321:4;3317:20;3313:1;3302:9;3298:17;3291:47;3355:78;3428:4;3419:6;3355:78;:::i;:::-;3347:86;;3127:313;;;;:::o;3446:329::-;3505:6;3554:2;3542:9;3533:7;3529:23;3525:32;3522:119;;;3560:79;;:::i;:::-;3522:119;3680:1;3705:53;3750:7;3741:6;3730:9;3726:22;3705:53;:::i;:::-;3695:63;;3651:117;3446:329;;;;:::o;3781:86::-;3816:7;3856:4;3849:5;3845:16;3834:27;;3781:86;;;:::o;3873:112::-;3956:22;3972:5;3956:22;:::i;:::-;3951:3;3944:35;3873:112;;:::o;3991:521::-;4152:4;4190:3;4179:9;4175:19;4167:27;;4204:67;4268:1;4257:9;4253:17;4244:6;4204:67;:::i;:::-;4281:68;4345:2;4334:9;4330:18;4321:6;4281:68;:::i;:::-;4359;4423:2;4412:9;4408:18;4399:6;4359:68;:::i;:::-;4437;4501:2;4490:9;4486:18;4477:6;4437:68;:::i;:::-;3991:521;;;;;;;:::o;4518:116::-;4588:21;4603:5;4588:21;:::i;:::-;4581:5;4578:32;4568:60;;4624:1;4621;4614:12;4568:60;4518:116;:::o;4640:133::-;4683:5;4721:6;4708:20;4699:29;;4737:30;4761:5;4737:30;:::i;:::-;4640:133;;;;:::o;4779:323::-;4835:6;4884:2;4872:9;4863:7;4859:23;4855:32;4852:119;;;4890:79;;:::i;:::-;4852:119;5010:1;5035:50;5077:7;5068:6;5057:9;5053:22;5035:50;:::i;:::-;5025:60;;4981:114;4779:323;;;;:::o;5108:118::-;5195:24;5213:5;5195:24;:::i;:::-;5190:3;5183:37;5108:118;;:::o;5232:222::-;5325:4;5363:2;5352:9;5348:18;5340:26;;5376:71;5444:1;5433:9;5429:17;5420:6;5376:71;:::i;:::-;5232:222;;;;:::o;5460:118::-;5547:24;5565:5;5547:24;:::i;:::-;5542:3;5535:37;5460:118;;:::o;5584:222::-;5677:4;5715:2;5704:9;5700:18;5692:26;;5728:71;5796:1;5785:9;5781:17;5772:6;5728:71;:::i;:::-;5584:222;;;;:::o;5812:619::-;5889:6;5897;5905;5954:2;5942:9;5933:7;5929:23;5925:32;5922:119;;;5960:79;;:::i;:::-;5922:119;6080:1;6105:53;6150:7;6141:6;6130:9;6126:22;6105:53;:::i;:::-;6095:63;;6051:117;6207:2;6233:53;6278:7;6269:6;6258:9;6254:22;6233:53;:::i;:::-;6223:63;;6178:118;6335:2;6361:53;6406:7;6397:6;6386:9;6382:22;6361:53;:::i;:::-;6351:63;;6306:118;5812:619;;;;;:::o;6437:117::-;6546:1;6543;6536:12;6560:180;6608:77;6605:1;6598:88;6705:4;6702:1;6695:15;6729:4;6726:1;6719:15;6746:281;6829:27;6851:4;6829:27;:::i;:::-;6821:6;6817:40;6959:6;6947:10;6944:22;6923:18;6911:10;6908:34;6905:62;6902:88;;;6970:18;;:::i;:::-;6902:88;7010:10;7006:2;6999:22;6789:238;6746:281;;:::o;7033:129::-;7067:6;7094:20;;:::i;:::-;7084:30;;7123:33;7151:4;7143:6;7123:33;:::i;:::-;7033:129;;;:::o;7291:118::-;7362:22;7378:5;7362:22;:::i;:::-;7355:5;7352:33;7342:61;;7399:1;7396;7389:12;7342:61;7291:118;:::o;7415:135::-;7459:5;7497:6;7484:20;7475:29;;7513:31;7538:5;7513:31;:::i;:::-;7415:135;;;;:::o;7587:907::-;7663:5;7707:4;7695:9;7690:3;7686:19;7682:30;7679:117;;;7715:79;;:::i;:::-;7679:117;7814:21;7830:4;7814:21;:::i;:::-;7805:30;;7900:1;7940:47;7983:3;7974:6;7963:9;7959:22;7940:47;:::i;:::-;7933:4;7926:5;7922:16;7915:73;7845:154;8064:2;8105:47;8148:3;8139:6;8128:9;8124:22;8105:47;:::i;:::-;8098:4;8091:5;8087:16;8080:73;8009:155;8223:2;8264:47;8307:3;8298:6;8287:9;8283:22;8264:47;:::i;:::-;8257:4;8250:5;8246:16;8239:73;8174:149;8387:2;8428:47;8471:3;8462:6;8451:9;8447:22;8428:47;:::i;:::-;8421:4;8414:5;8410:16;8403:73;8333:154;7587:907;;;;:::o;8500:384::-;8586:6;8635:3;8623:9;8614:7;8610:23;8606:33;8603:120;;;8642:79;;:::i;:::-;8603:120;8762:1;8787:80;8859:7;8850:6;8839:9;8835:22;8787:80;:::i;:::-;8777:90;;8733:144;8500:384;;;;:::o;8890:214::-;8979:4;9017:2;9006:9;9002:18;8994:26;;9030:67;9094:1;9083:9;9079:17;9070:6;9030:67;:::i;:::-;8890:214;;;;:::o;9110:468::-;9175:6;9183;9232:2;9220:9;9211:7;9207:23;9203:32;9200:119;;;9238:79;;:::i;:::-;9200:119;9358:1;9383:53;9428:7;9419:6;9408:9;9404:22;9383:53;:::i;:::-;9373:63;;9329:117;9485:2;9511:50;9553:7;9544:6;9533:9;9529:22;9511:50;:::i;:::-;9501:60;;9456:115;9110:468;;;;;:::o;9584:329::-;9643:6;9692:2;9680:9;9671:7;9667:23;9663:32;9660:119;;;9698:79;;:::i;:::-;9660:119;9818:1;9843:53;9888:7;9879:6;9868:9;9864:22;9843:53;:::i;:::-;9833:63;;9789:117;9584:329;;;;:::o;9919:664::-;10018:6;10026;10034;10083:3;10071:9;10062:7;10058:23;10054:33;10051:120;;;10090:79;;:::i;:::-;10051:120;10210:1;10235:50;10277:7;10268:6;10257:9;10253:22;10235:50;:::i;:::-;10225:60;;10181:114;10334:2;10360:51;10403:7;10394:6;10383:9;10379:22;10360:51;:::i;:::-;10350:61;;10305:116;10460:2;10486:80;10558:7;10549:6;10538:9;10534:22;10486:80;:::i;:::-;10476:90;;10431:145;9919:664;;;;;:::o;10589:442::-;10738:4;10776:2;10765:9;10761:18;10753:26;;10789:71;10857:1;10846:9;10842:17;10833:6;10789:71;:::i;:::-;10870:72;10938:2;10927:9;10923:18;10914:6;10870:72;:::i;:::-;10952;11020:2;11009:9;11005:18;10996:6;10952:72;:::i;:::-;10589:442;;;;;;:::o;11037:468::-;11102:6;11110;11159:2;11147:9;11138:7;11134:23;11130:32;11127:119;;;11165:79;;:::i;:::-;11127:119;11285:1;11310:53;11355:7;11346:6;11335:9;11331:22;11310:53;:::i;:::-;11300:63;;11256:117;11412:2;11438:50;11480:7;11471:6;11460:9;11456:22;11438:50;:::i;:::-;11428:60;;11383:115;11037:468;;;;;:::o;11511:474::-;11579:6;11587;11636:2;11624:9;11615:7;11611:23;11607:32;11604:119;;;11642:79;;:::i;:::-;11604:119;11762:1;11787:53;11832:7;11823:6;11812:9;11808:22;11787:53;:::i;:::-;11777:63;;11733:117;11889:2;11915:53;11960:7;11951:6;11940:9;11936:22;11915:53;:::i;:::-;11905:63;;11860:118;11511:474;;;;;:::o;11991:613::-;12065:6;12073;12081;12130:2;12118:9;12109:7;12105:23;12101:32;12098:119;;;12136:79;;:::i;:::-;12098:119;12256:1;12281:53;12326:7;12317:6;12306:9;12302:22;12281:53;:::i;:::-;12271:63;;12227:117;12383:2;12409:50;12451:7;12442:6;12431:9;12427:22;12409:50;:::i;:::-;12399:60;;12354:115;12508:2;12534:53;12579:7;12570:6;12559:9;12555:22;12534:53;:::i;:::-;12524:63;;12479:118;11991:613;;;;;:::o;12610:180::-;12658:77;12655:1;12648:88;12755:4;12752:1;12745:15;12779:4;12776:1;12769:15;12796:191;12836:3;12855:20;12873:1;12855:20;:::i;:::-;12850:25;;12889:20;12907:1;12889:20;:::i;:::-;12884:25;;12932:1;12929;12925:9;12918:16;;12953:3;12950:1;12947:10;12944:36;;;12960:18;;:::i;:::-;12944:36;12796:191;;;;:::o;12993:182::-;13133:34;13129:1;13121:6;13117:14;13110:58;12993:182;:::o;13181:366::-;13323:3;13344:67;13408:2;13403:3;13344:67;:::i;:::-;13337:74;;13420:93;13509:3;13420:93;:::i;:::-;13538:2;13533:3;13529:12;13522:19;;13181:366;;;:::o;13553:419::-;13719:4;13757:2;13746:9;13742:18;13734:26;;13806:9;13800:4;13796:20;13792:1;13781:9;13777:17;13770:47;13834:131;13960:4;13834:131;:::i;:::-;13826:139;;13553:419;;;:::o;13978:180::-;14026:77;14023:1;14016:88;14123:4;14120:1;14113:15;14147:4;14144:1;14137:15;14164:102;14206:8;14253:5;14250:1;14246:13;14225:34;;14164:102;;;:::o;14272:848::-;14333:5;14340:4;14364:6;14355:15;;14388:5;14379:14;;14402:712;14423:1;14413:8;14410:15;14402:712;;;14518:4;14513:3;14509:14;14503:4;14500:24;14497:50;;;14527:18;;:::i;:::-;14497:50;14577:1;14567:8;14563:16;14560:451;;;14992:4;14985:5;14981:16;14972:25;;14560:451;15042:4;15036;15032:15;15024:23;;15072:32;15095:8;15072:32;:::i;:::-;15060:44;;14402:712;;;14272:848;;;;;;;:::o;15126:1073::-;15180:5;15371:8;15361:40;;15392:1;15383:10;;15394:5;;15361:40;15420:4;15410:36;;15437:1;15428:10;;15439:5;;15410:36;15506:4;15554:1;15549:27;;;;15590:1;15585:191;;;;15499:277;;15549:27;15567:1;15558:10;;15569:5;;;15585:191;15630:3;15620:8;15617:17;15614:43;;;15637:18;;:::i;:::-;15614:43;15686:8;15683:1;15679:16;15670:25;;15721:3;15714:5;15711:14;15708:40;;;15728:18;;:::i;:::-;15708:40;15761:5;;;15499:277;;15885:2;15875:8;15872:16;15866:3;15860:4;15857:13;15853:36;15835:2;15825:8;15822:16;15817:2;15811:4;15808:12;15804:35;15788:111;15785:246;;;15941:8;15935:4;15931:19;15922:28;;15976:3;15969:5;15966:14;15963:40;;;15983:18;;:::i;:::-;15963:40;16016:5;;15785:246;16056:42;16094:3;16084:8;16078:4;16075:1;16056:42;:::i;:::-;16041:57;;;;16130:4;16125:3;16121:14;16114:5;16111:25;16108:51;;;16139:18;;:::i;:::-;16108:51;16188:4;16181:5;16177:16;16168:25;;15126:1073;;;;;;:::o;16205:281::-;16263:5;16287:23;16305:4;16287:23;:::i;:::-;16279:31;;16331:25;16347:8;16331:25;:::i;:::-;16319:37;;16375:104;16412:66;16402:8;16396:4;16375:104;:::i;:::-;16366:113;;16205:281;;;;:::o;16492:410::-;16532:7;16555:20;16573:1;16555:20;:::i;:::-;16550:25;;16589:20;16607:1;16589:20;:::i;:::-;16584:25;;16644:1;16641;16637:9;16666:30;16684:11;16666:30;:::i;:::-;16655:41;;16845:1;16836:7;16832:15;16829:1;16826:22;16806:1;16799:9;16779:83;16756:139;;16875:18;;:::i;:::-;16756:139;16540:362;16492:410;;;;:::o;16908:194::-;16948:4;16968:20;16986:1;16968:20;:::i;:::-;16963:25;;17002:20;17020:1;17002:20;:::i;:::-;16997:25;;17046:1;17043;17039:9;17031:17;;17070:1;17064:4;17061:11;17058:37;;;17075:18;;:::i;:::-;17058:37;16908:194;;;;:::o;17108:167::-;17248:19;17244:1;17236:6;17232:14;17225:43;17108:167;:::o;17281:366::-;17423:3;17444:67;17508:2;17503:3;17444:67;:::i;:::-;17437:74;;17520:93;17609:3;17520:93;:::i;:::-;17638:2;17633:3;17629:12;17622:19;;17281:366;;;:::o;17653:419::-;17819:4;17857:2;17846:9;17842:18;17834:26;;17906:9;17900:4;17896:20;17892:1;17881:9;17877:17;17870:47;17934:131;18060:4;17934:131;:::i;:::-;17926:139;;17653:419;;;:::o;18078:232::-;18218:34;18214:1;18206:6;18202:14;18195:58;18287:15;18282:2;18274:6;18270:15;18263:40;18078:232;:::o;18316:366::-;18458:3;18479:67;18543:2;18538:3;18479:67;:::i;:::-;18472:74;;18555:93;18644:3;18555:93;:::i;:::-;18673:2;18668:3;18664:12;18657:19;;18316:366;;;:::o;18688:419::-;18854:4;18892:2;18881:9;18877:18;18869:26;;18941:9;18935:4;18931:20;18927:1;18916:9;18912:17;18905:47;18969:131;19095:4;18969:131;:::i;:::-;18961:139;;18688:419;;;:::o;19113:143::-;19170:5;19201:6;19195:13;19186:22;;19217:33;19244:5;19217:33;:::i;:::-;19113:143;;;;:::o;19262:351::-;19332:6;19381:2;19369:9;19360:7;19356:23;19352:32;19349:119;;;19387:79;;:::i;:::-;19349:119;19507:1;19532:64;19588:7;19579:6;19568:9;19564:22;19532:64;:::i;:::-;19522:74;;19478:128;19262:351;;;;:::o;19619:332::-;19740:4;19778:2;19767:9;19763:18;19755:26;;19791:71;19859:1;19848:9;19844:17;19835:6;19791:71;:::i;:::-;19872:72;19940:2;19929:9;19925:18;19916:6;19872:72;:::i;:::-;19619:332;;;;;:::o;19957:182::-;20097:34;20093:1;20085:6;20081:14;20074:58;19957:182;:::o;20145:366::-;20287:3;20308:67;20372:2;20367:3;20308:67;:::i;:::-;20301:74;;20384:93;20473:3;20384:93;:::i;:::-;20502:2;20497:3;20493:12;20486:19;;20145:366;;;:::o;20517:419::-;20683:4;20721:2;20710:9;20706:18;20698:26;;20770:9;20764:4;20760:20;20756:1;20745:9;20741:17;20734:47;20798:131;20924:4;20798:131;:::i;:::-;20790:139;;20517:419;;;:::o;20942:175::-;21082:27;21078:1;21070:6;21066:14;21059:51;20942:175;:::o;21123:366::-;21265:3;21286:67;21350:2;21345:3;21286:67;:::i;:::-;21279:74;;21362:93;21451:3;21362:93;:::i;:::-;21480:2;21475:3;21471:12;21464:19;;21123:366;;;:::o;21495:419::-;21661:4;21699:2;21688:9;21684:18;21676:26;;21748:9;21742:4;21738:20;21734:1;21723:9;21719:17;21712:47;21776:131;21902:4;21776:131;:::i;:::-;21768:139;;21495:419;;;:::o;21920:223::-;22060:34;22056:1;22048:6;22044:14;22037:58;22129:6;22124:2;22116:6;22112:15;22105:31;21920:223;:::o;22149:366::-;22291:3;22312:67;22376:2;22371:3;22312:67;:::i;:::-;22305:74;;22388:93;22477:3;22388:93;:::i;:::-;22506:2;22501:3;22497:12;22490:19;;22149:366;;;:::o;22521:419::-;22687:4;22725:2;22714:9;22710:18;22702:26;;22774:9;22768:4;22764:20;22760:1;22749:9;22745:17;22738:47;22802:131;22928:4;22802:131;:::i;:::-;22794:139;;22521:419;;;:::o;22946:221::-;23086:34;23082:1;23074:6;23070:14;23063:58;23155:4;23150:2;23142:6;23138:15;23131:29;22946:221;:::o;23173:366::-;23315:3;23336:67;23400:2;23395:3;23336:67;:::i;:::-;23329:74;;23412:93;23501:3;23412:93;:::i;:::-;23530:2;23525:3;23521:12;23514:19;;23173:366;;;:::o;23545:419::-;23711:4;23749:2;23738:9;23734:18;23726:26;;23798:9;23792:4;23788:20;23784:1;23773:9;23769:17;23762:47;23826:131;23952:4;23826:131;:::i;:::-;23818:139;;23545:419;;;:::o;23970:223::-;24110:34;24106:1;24098:6;24094:14;24087:58;24179:6;24174:2;24166:6;24162:15;24155:31;23970:223;:::o;24199:366::-;24341:3;24362:67;24426:2;24421:3;24362:67;:::i;:::-;24355:74;;24438:93;24527:3;24438:93;:::i;:::-;24556:2;24551:3;24547:12;24540:19;;24199:366;;;:::o;24571:419::-;24737:4;24775:2;24764:9;24760:18;24752:26;;24824:9;24818:4;24814:20;24810:1;24799:9;24795:17;24788:47;24852:131;24978:4;24852:131;:::i;:::-;24844:139;;24571:419;;;:::o;24996:182::-;25136:34;25132:1;25124:6;25120:14;25113:58;24996:182;:::o;25184:366::-;25326:3;25347:67;25411:2;25406:3;25347:67;:::i;:::-;25340:74;;25423:93;25512:3;25423:93;:::i;:::-;25541:2;25536:3;25532:12;25525:19;;25184:366;;;:::o;25556:419::-;25722:4;25760:2;25749:9;25745:18;25737:26;;25809:9;25803:4;25799:20;25795:1;25784:9;25780:17;25773:47;25837:131;25963:4;25837:131;:::i;:::-;25829:139;;25556:419;;;:::o;25981:161::-;26121:13;26117:1;26109:6;26105:14;26098:37;25981:161;:::o;26148:366::-;26290:3;26311:67;26375:2;26370:3;26311:67;:::i;:::-;26304:74;;26387:93;26476:3;26387:93;:::i;:::-;26505:2;26500:3;26496:12;26489:19;;26148:366;;;:::o;26520:419::-;26686:4;26724:2;26713:9;26709:18;26701:26;;26773:9;26767:4;26763:20;26759:1;26748:9;26744:17;26737:47;26801:131;26927:4;26801:131;:::i;:::-;26793:139;;26520:419;;;:::o;26945:163::-;27085:15;27081:1;27073:6;27069:14;27062:39;26945:163;:::o;27114:366::-;27256:3;27277:67;27341:2;27336:3;27277:67;:::i;:::-;27270:74;;27353:93;27442:3;27353:93;:::i;:::-;27471:2;27466:3;27462:12;27455:19;;27114:366;;;:::o;27486:419::-;27652:4;27690:2;27679:9;27675:18;27667:26;;27739:9;27733:4;27729:20;27725:1;27714:9;27710:17;27703:47;27767:131;27893:4;27767:131;:::i;:::-;27759:139;;27486:419;;;:::o;27911:157::-;28051:9;28047:1;28039:6;28035:14;28028:33;27911:157;:::o;28074:365::-;28216:3;28237:66;28301:1;28296:3;28237:66;:::i;:::-;28230:73;;28312:93;28401:3;28312:93;:::i;:::-;28430:2;28425:3;28421:12;28414:19;;28074:365;;;:::o;28445:419::-;28611:4;28649:2;28638:9;28634:18;28626:26;;28698:9;28692:4;28688:20;28684:1;28673:9;28669:17;28662:47;28726:131;28852:4;28726:131;:::i;:::-;28718:139;;28445:419;;;:::o;28870:162::-;29010:14;29006:1;28998:6;28994:14;28987:38;28870:162;:::o;29038:366::-;29180:3;29201:67;29265:2;29260:3;29201:67;:::i;:::-;29194:74;;29277:93;29366:3;29277:93;:::i;:::-;29395:2;29390:3;29386:12;29379:19;;29038:366;;;:::o;29410:419::-;29576:4;29614:2;29603:9;29599:18;29591:26;;29663:9;29657:4;29653:20;29649:1;29638:9;29634:17;29627:47;29691:131;29817:4;29691:131;:::i;:::-;29683:139;;29410:419;;;:::o;29835:180::-;29883:77;29880:1;29873:88;29980:4;29977:1;29970:15;30004:4;30001:1;29994:15;30021:185;30061:1;30078:20;30096:1;30078:20;:::i;:::-;30073:25;;30112:20;30130:1;30112:20;:::i;:::-;30107:25;;30151:1;30141:35;;30156:18;;:::i;:::-;30141:35;30198:1;30195;30191:9;30186:14;;30021:185;;;;:::o;30212:85::-;30257:7;30286:5;30275:16;;30212:85;;;:::o;30303:60::-;30331:3;30352:5;30345:12;;30303:60;;;:::o;30369:158::-;30427:9;30460:61;30478:42;30487:32;30513:5;30487:32;:::i;:::-;30478:42;:::i;:::-;30460:61;:::i;:::-;30447:74;;30369:158;;;:::o;30533:147::-;30628:45;30667:5;30628:45;:::i;:::-;30623:3;30616:58;30533:147;;:::o;30686:807::-;30935:4;30973:3;30962:9;30958:19;30950:27;;30987:71;31055:1;31044:9;31040:17;31031:6;30987:71;:::i;:::-;31068:72;31136:2;31125:9;31121:18;31112:6;31068:72;:::i;:::-;31150:80;31226:2;31215:9;31211:18;31202:6;31150:80;:::i;:::-;31240;31316:2;31305:9;31301:18;31292:6;31240:80;:::i;:::-;31330:73;31398:3;31387:9;31383:19;31374:6;31330:73;:::i;:::-;31413;31481:3;31470:9;31466:19;31457:6;31413:73;:::i;:::-;30686:807;;;;;;;;;:::o;31499:143::-;31556:5;31587:6;31581:13;31572:22;;31603:33;31630:5;31603:33;:::i;:::-;31499:143;;;;:::o;31648:663::-;31736:6;31744;31752;31801:2;31789:9;31780:7;31776:23;31772:32;31769:119;;;31807:79;;:::i;:::-;31769:119;31927:1;31952:64;32008:7;31999:6;31988:9;31984:22;31952:64;:::i;:::-;31942:74;;31898:128;32065:2;32091:64;32147:7;32138:6;32127:9;32123:22;32091:64;:::i;:::-;32081:74;;32036:129;32204:2;32230:64;32286:7;32277:6;32266:9;32262:22;32230:64;:::i;:::-;32220:74;;32175:129;31648:663;;;;;:::o;32317:79::-;32356:7;32385:5;32374:16;;32317:79;;;:::o;32402:157::-;32507:45;32527:24;32545:5;32527:24;:::i;:::-;32507:45;:::i;:::-;32502:3;32495:58;32402:157;;:::o;32565:94::-;32598:8;32646:5;32642:2;32638:14;32617:35;;32565:94;;;:::o;32665:::-;32704:7;32733:20;32747:5;32733:20;:::i;:::-;32722:31;;32665:94;;;:::o;32765:100::-;32804:7;32833:26;32853:5;32833:26;:::i;:::-;32822:37;;32765:100;;;:::o;32871:157::-;32976:45;32996:24;33014:5;32996:24;:::i;:::-;32976:45;:::i;:::-;32971:3;32964:58;32871:157;;:::o;33034:397::-;33174:3;33189:75;33260:3;33251:6;33189:75;:::i;:::-;33289:2;33284:3;33280:12;33273:19;;33302:75;33373:3;33364:6;33302:75;:::i;:::-;33402:2;33397:3;33393:12;33386:19;;33422:3;33415:10;;33034:397;;;;;:::o;33437:176::-;33469:1;33486:20;33504:1;33486:20;:::i;:::-;33481:25;;33520:20;33538:1;33520:20;:::i;:::-;33515:25;;33559:1;33549:35;;33564:18;;:::i;:::-;33549:35;33605:1;33602;33598:9;33593:14;;33437:176;;;;:::o;33619:233::-;33658:3;33681:24;33699:5;33681:24;:::i;:::-;33672:33;;33727:66;33720:5;33717:77;33714:103;;33797:18;;:::i;:::-;33714:103;33844:1;33837:5;33833:13;33826:20;;33619:233;;;:::o;33858:138::-;33906:9;33939:51;33957:32;33966:22;33982:5;33966:22;:::i;:::-;33957:32;:::i;:::-;33939:51;:::i;:::-;33926:64;;33858:138;;;:::o;34002:127::-;34087:35;34116:5;34087:35;:::i;:::-;34082:3;34075:48;34002:127;;:::o;34135:218::-;34226:4;34264:2;34253:9;34249:18;34241:26;;34277:69;34343:1;34332:9;34328:17;34319:6;34277:69;:::i;:::-;34135:218;;;;:::o;34359:114::-;34426:6;34460:5;34454:12;34444:22;;34359:114;;;:::o;34479:184::-;34578:11;34612:6;34607:3;34600:19;34652:4;34647:3;34643:14;34628:29;;34479:184;;;;:::o;34669:132::-;34736:4;34759:3;34751:11;;34789:4;34784:3;34780:14;34772:22;;34669:132;;;:::o;34807:108::-;34884:24;34902:5;34884:24;:::i;:::-;34879:3;34872:37;34807:108;;:::o;34921:179::-;34990:10;35011:46;35053:3;35045:6;35011:46;:::i;:::-;35089:4;35084:3;35080:14;35066:28;;34921:179;;;;:::o;35106:113::-;35176:4;35208;35203:3;35199:14;35191:22;;35106:113;;;:::o;35255:732::-;35374:3;35403:54;35451:5;35403:54;:::i;:::-;35473:86;35552:6;35547:3;35473:86;:::i;:::-;35466:93;;35583:56;35633:5;35583:56;:::i;:::-;35662:7;35693:1;35678:284;35703:6;35700:1;35697:13;35678:284;;;35779:6;35773:13;35806:63;35865:3;35850:13;35806:63;:::i;:::-;35799:70;;35892:60;35945:6;35892:60;:::i;:::-;35882:70;;35738:224;35725:1;35722;35718:9;35713:14;;35678:284;;;35682:14;35978:3;35971:10;;35379:608;;;35255:732;;;;:::o;35993:831::-;36256:4;36294:3;36283:9;36279:19;36271:27;;36308:71;36376:1;36365:9;36361:17;36352:6;36308:71;:::i;:::-;36389:80;36465:2;36454:9;36450:18;36441:6;36389:80;:::i;:::-;36516:9;36510:4;36506:20;36501:2;36490:9;36486:18;36479:48;36544:108;36647:4;36638:6;36544:108;:::i;:::-;36536:116;;36662:72;36730:2;36719:9;36715:18;36706:6;36662:72;:::i;:::-;36744:73;36812:3;36801:9;36797:19;36788:6;36744:73;:::i;:::-;35993:831;;;;;;;;:::o

Swarm Source

ipfs://23650bd1cbb6d35552b31090447971b28f251040c8162d4ac8be84744b0d9d0e

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.