ETH Price: $3,246.62 (+2.39%)
Gas: 2 Gwei

Contract

0xC2cB1040220768554cf699b0d863A3cd4324ce32
 
Transaction Hash
Method
Block
From
To
Approve200024512024-06-02 6:49:3554 days ago1717310975IN
yearn: yDAI Token 3
0 ETH0.000186743.95132335
Approve198643732024-05-13 23:27:5973 days ago1715642879IN
yearn: yDAI Token 3
0 ETH0.000238215.07
Transfer190315222024-01-18 4:59:59190 days ago1705553999IN
yearn: yDAI Token 3
0 ETH0.0011622224.42166896
Approve180033782023-08-27 3:40:23334 days ago1693107623IN
yearn: yDAI Token 3
0 ETH0.0005321511.34351843
Approve179205412023-08-15 13:28:59345 days ago1692106139IN
yearn: yDAI Token 3
0 ETH0.0011745324.85202282
Withdraw178091522023-07-30 23:35:35361 days ago1690760135IN
yearn: yDAI Token 3
0 ETH0.0029601514.34683246
Approve175633332023-06-26 11:34:35396 days ago1687779275IN
yearn: yDAI Token 3
0 ETH0.0005761412.28106043
Approve163481042023-01-06 13:40:47566 days ago1673012447IN
yearn: yDAI Token 3
0 ETH0.0007540915.95600349
Approve161204582022-12-05 18:45:11598 days ago1670265911IN
yearn: yDAI Token 3
0 ETH0.000783116.56981175
Approve161007892022-12-03 0:45:23601 days ago1670028323IN
yearn: yDAI Token 3
0 ETH0.0006143913
Withdraw155879512022-09-22 9:21:11673 days ago1663838471IN
yearn: yDAI Token 3
0 ETH0.000844784.0948537
Withdraw148839882022-06-01 9:15:04786 days ago1654074904IN
yearn: yDAI Token 3
0 ETH0.0147772870
Withdraw140604292022-01-23 7:05:00915 days ago1642921500IN
yearn: yDAI Token 3
0 ETH0.0156344174.0778132
Withdraw139451092022-01-05 11:13:19933 days ago1641381199IN
yearn: yDAI Token 3
0 ETH0.0159699470
Withdraw139118542021-12-31 7:42:22938 days ago1640936542IN
yearn: yDAI Token 3
0 ETH0.0147737870
Withdraw135490042021-11-04 7:54:29995 days ago1636012469IN
yearn: yDAI Token 3
0 ETH0.02274835107.7722916
Deposit131487262021-09-02 21:28:201057 days ago1630618100IN
yearn: yDAI Token 3
0 ETH0.0155096275
Transfer130605932021-08-20 6:34:591071 days ago1629441299IN
yearn: yDAI Token 3
0 ETH0.0014676230.8
Withdraw130587482021-08-19 23:39:081071 days ago1629416348IN
yearn: yDAI Token 3
0 ETH0.0069647833
Deposit130584242021-08-19 22:22:321071 days ago1629411752IN
yearn: yDAI Token 3
0 ETH0.0060504527
Withdraw129900522021-08-09 9:19:591082 days ago1628500799IN
yearn: yDAI Token 3
0 ETH0.008214436
Deposit129837732021-08-08 10:03:011083 days ago1628416981IN
yearn: yDAI Token 3
0 ETH0.0049062622
Deposit129080412021-07-27 12:20:231094 days ago1627388423IN
yearn: yDAI Token 3
0 ETH0.0064674128
Withdraw127534942021-07-03 8:17:371119 days ago1625300257IN
yearn: yDAI Token 3
0 ETH0.002532512
Approve126676942021-06-19 23:16:451132 days ago1624144605IN
yearn: yDAI Token 3
0 ETH0.0004726110
View all transactions

View more zero value Internal Transactions in Advanced View mode

Advanced mode:
Loading...
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
yDAI

Compiler Version
v0.5.12+commit.7709ece9

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2020-02-25
*/

pragma solidity ^0.5.0;
pragma experimental ABIEncoderV2;

interface IERC20 {
    function totalSupply() external view returns (uint256);
    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);
}

contract Context {
    constructor () internal { }
    // solhint-disable-previous-line no-empty-blocks

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

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

contract Ownable is Context {
    address private _owner;

    event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);
    constructor () internal {
        _owner = _msgSender();
        emit OwnershipTransferred(address(0), _owner);
    }
    function owner() public view returns (address) {
        return _owner;
    }
    modifier onlyOwner() {
        require(isOwner(), "Ownable: caller is not the owner");
        _;
    }
    function isOwner() public view returns (bool) {
        return _msgSender() == _owner;
    }
    function renounceOwnership() public onlyOwner {
        emit OwnershipTransferred(_owner, address(0));
        _owner = address(0);
    }
    function transferOwnership(address newOwner) public onlyOwner {
        _transferOwnership(newOwner);
    }
    function _transferOwnership(address newOwner) internal {
        require(newOwner != address(0), "Ownable: new owner is the zero address");
        emit OwnershipTransferred(_owner, newOwner);
        _owner = newOwner;
    }
}

contract ERC20 is Context, IERC20 {
    using SafeMath for uint256;

    mapping (address => uint256) _balances;

    mapping (address => mapping (address => uint256)) private _allowances;

    uint256 _totalSupply;
    function totalSupply() public view returns (uint256) {
        return _totalSupply;
    }
    function balanceOf(address account) public view returns (uint256) {
        return _balances[account];
    }
    function transfer(address recipient, uint256 amount) public returns (bool) {
        _transfer(_msgSender(), recipient, amount);
        return true;
    }
    function allowance(address owner, address spender) public view returns (uint256) {
        return _allowances[owner][spender];
    }
    function approve(address spender, uint256 amount) public returns (bool) {
        _approve(_msgSender(), spender, amount);
        return true;
    }
    function transferFrom(address sender, address recipient, uint256 amount) public returns (bool) {
        _transfer(sender, recipient, amount);
        _approve(sender, _msgSender(), _allowances[sender][_msgSender()].sub(amount, "ERC20: transfer amount exceeds allowance"));
        return true;
    }
    function increaseAllowance(address spender, uint256 addedValue) public returns (bool) {
        _approve(_msgSender(), spender, _allowances[_msgSender()][spender].add(addedValue));
        return true;
    }
    function decreaseAllowance(address spender, uint256 subtractedValue) public returns (bool) {
        _approve(_msgSender(), spender, _allowances[_msgSender()][spender].sub(subtractedValue, "ERC20: decreased allowance below zero"));
        return true;
    }
    function _transfer(address sender, address recipient, uint256 amount) internal {
        require(sender != address(0), "ERC20: transfer from the zero address");
        require(recipient != address(0), "ERC20: transfer to the zero address");

        _balances[sender] = _balances[sender].sub(amount, "ERC20: transfer amount exceeds balance");
        _balances[recipient] = _balances[recipient].add(amount);
        emit Transfer(sender, recipient, amount);
    }
    function _mint(address account, uint256 amount) internal {
        require(account != address(0), "ERC20: mint to the zero address");

        _totalSupply = _totalSupply.add(amount);
        _balances[account] = _balances[account].add(amount);
        emit Transfer(address(0), account, amount);
    }
    function _burn(address account, uint256 amount) internal {
        require(account != address(0), "ERC20: burn from the zero address");

        _balances[account] = _balances[account].sub(amount, "ERC20: burn amount exceeds balance");
        _totalSupply = _totalSupply.sub(amount);
        emit Transfer(account, address(0), amount);
    }
    function _approve(address owner, address spender, uint256 amount) internal {
        require(owner != address(0), "ERC20: approve from the zero address");
        require(spender != address(0), "ERC20: approve to the zero address");

        _allowances[owner][spender] = amount;
        emit Approval(owner, spender, amount);
    }
    function _burnFrom(address account, uint256 amount) internal {
        _burn(account, amount);
        _approve(account, _msgSender(), _allowances[account][_msgSender()].sub(amount, "ERC20: burn amount exceeds allowance"));
    }
}

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

    constructor (string memory name, string memory symbol, uint8 decimals) public {
        _name = name;
        _symbol = symbol;
        _decimals = decimals;
    }
    function name() public view returns (string memory) {
        return _name;
    }
    function symbol() public view returns (string memory) {
        return _symbol;
    }
    function decimals() public view returns (uint8) {
        return _decimals;
    }
}

contract ReentrancyGuard {
    uint256 private _guardCounter;

    constructor () internal {
        _guardCounter = 1;
    }

    modifier nonReentrant() {
        _guardCounter += 1;
        uint256 localCounter = _guardCounter;
        _;
        require(localCounter == _guardCounter, "ReentrancyGuard: reentrant call");
    }
}

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

        return c;
    }
    function sub(uint256 a, uint256 b) internal pure returns (uint256) {
        return sub(a, b, "SafeMath: subtraction overflow");
    }
    function sub(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
        require(b <= a, errorMessage);
        uint256 c = a - b;

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

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

        return c;
    }
    function div(uint256 a, uint256 b) internal pure returns (uint256) {
        return div(a, b, "SafeMath: division by zero");
    }
    function div(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
        // Solidity only automatically asserts when dividing by 0
        require(b > 0, errorMessage);
        uint256 c = a / b;

        return c;
    }
    function mod(uint256 a, uint256 b) internal pure returns (uint256) {
        return mod(a, b, "SafeMath: modulo by zero");
    }
    function mod(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
        require(b != 0, errorMessage);
        return a % b;
    }
}

library Address {
    function isContract(address account) internal view returns (bool) {
        bytes32 codehash;
        bytes32 accountHash = 0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470;
        // solhint-disable-next-line no-inline-assembly
        assembly { codehash := extcodehash(account) }
        return (codehash != 0x0 && codehash != accountHash);
    }
    function toPayable(address account) internal pure returns (address payable) {
        return address(uint160(account));
    }
    function sendValue(address payable recipient, uint256 amount) internal {
        require(address(this).balance >= amount, "Address: insufficient balance");

        // solhint-disable-next-line avoid-call-value
        (bool success, ) = recipient.call.value(amount)("");
        require(success, "Address: unable to send value, recipient may have reverted");
    }
}

library SafeERC20 {
    using SafeMath for uint256;
    using Address for address;

    function safeTransfer(IERC20 token, address to, uint256 value) internal {
        callOptionalReturn(token, abi.encodeWithSelector(token.transfer.selector, to, value));
    }

    function safeTransferFrom(IERC20 token, address from, address to, uint256 value) internal {
        callOptionalReturn(token, abi.encodeWithSelector(token.transferFrom.selector, from, to, value));
    }

    function safeApprove(IERC20 token, address spender, uint256 value) internal {
        require((value == 0) || (token.allowance(address(this), spender) == 0),
            "SafeERC20: approve from non-zero to non-zero allowance"
        );
        callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, value));
    }

    function safeIncreaseAllowance(IERC20 token, address spender, uint256 value) internal {
        uint256 newAllowance = token.allowance(address(this), spender).add(value);
        callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, newAllowance));
    }

    function safeDecreaseAllowance(IERC20 token, address spender, uint256 value) internal {
        uint256 newAllowance = token.allowance(address(this), spender).sub(value, "SafeERC20: decreased allowance below zero");
        callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, newAllowance));
    }
    function callOptionalReturn(IERC20 token, bytes memory data) private {
        require(address(token).isContract(), "SafeERC20: call to non-contract");

        // solhint-disable-next-line avoid-low-level-calls
        (bool success, bytes memory returndata) = address(token).call(data);
        require(success, "SafeERC20: low-level call failed");

        if (returndata.length > 0) { // Return data is optional
            // solhint-disable-next-line max-line-length
            require(abi.decode(returndata, (bool)), "SafeERC20: ERC20 operation did not succeed");
        }
    }
}

interface Compound {
    function mint ( uint256 mintAmount ) external returns ( uint256 );
    function redeem(uint256 redeemTokens) external returns (uint256);
    function exchangeRateStored() external view returns (uint);
}

interface Fulcrum {
    function mint(address receiver, uint256 amount) external payable returns (uint256 mintAmount);
    function burn(address receiver, uint256 burnAmount) external returns (uint256 loanAmountPaid);
    function assetBalanceOf(address _owner) external view returns (uint256 balance);
}

interface ILendingPoolAddressesProvider {
    function getLendingPool() external view returns (address);
}

interface Aave {
    function deposit(address _reserve, uint256 _amount, uint16 _referralCode) external;
}

interface AToken {
    function redeem(uint256 amount) external;
}

interface IIEarnManager {
    function recommend(address _token) external view returns (
      string memory choice,
      uint256 capr,
      uint256 iapr,
      uint256 aapr,
      uint256 dapr
    );
}

contract Structs {
    struct Val {
        uint256 value;
    }

    enum ActionType {
        Deposit,   // supply tokens
        Withdraw  // borrow tokens
    }

    enum AssetDenomination {
        Wei // the amount is denominated in wei
    }

    enum AssetReference {
        Delta // the amount is given as a delta from the current value
    }

    struct AssetAmount {
        bool sign; // true if positive
        AssetDenomination denomination;
        AssetReference ref;
        uint256 value;
    }

    struct ActionArgs {
        ActionType actionType;
        uint256 accountId;
        AssetAmount amount;
        uint256 primaryMarketId;
        uint256 secondaryMarketId;
        address otherAddress;
        uint256 otherAccountId;
        bytes data;
    }

    struct Info {
        address owner;  // The address that owns the account
        uint256 number; // A nonce that allows a single address to control many accounts
    }

    struct Wei {
        bool sign; // true if positive
        uint256 value;
    }
}

contract DyDx is Structs {
    function getAccountWei(Info memory account, uint256 marketId) public view returns (Wei memory);
    function operate(Info[] memory, ActionArgs[] memory) public;
}

interface LendingPoolAddressesProvider {
    function getLendingPool() external view returns (address);
    function getLendingPoolCore() external view returns (address);
}

contract yDAI is ERC20, ERC20Detailed, ReentrancyGuard, Structs, Ownable {
  using SafeERC20 for IERC20;
  using Address for address;
  using SafeMath for uint256;

  uint256 public pool;
  address public token;
  address public compound;
  address public fulcrum;
  address public aave;
  address public aavePool;
  address public aaveToken;
  address public dydx;
  uint256 public dToken;
  address public apr;
  address public chai;

  enum Lender {
      NONE,
      DYDX,
      COMPOUND,
      AAVE,
      FULCRUM
  }

  Lender public provider = Lender.NONE;

  constructor () public ERC20Detailed("iearn DAI", "yDAI", 18) {
    token = address(0x6B175474E89094C44Da98b954EedeAC495271d0F);
    apr = address(0xdD6d648C991f7d47454354f4Ef326b04025a48A8);
    dydx = address(0x1E0447b19BB6EcFdAe1e4AE1694b0C3659614e4e);
    aave = address(0x24a42fD28C976A61Df5D00D0599C34c4f90748c8);
    aavePool = address(0x3dfd23A6c5E8BbcFc9581d2E864a68feb6a076d3);
    fulcrum = address(0x493C57C4763932315A328269E1ADaD09653B9081);
    aaveToken = address(0xfC1E690f61EFd961294b3e1Ce3313fBD8aa4f85d);
    compound = address(0x5d3a536E4D6DbD6114cc1Ead35777bAB948E3643);
    chai = address(0x06AF07097C9Eeb7fD685c692751D5C66dB49c215);
    dToken = 3;
    approveToken();
  }

  function set_new_APR(address _new_APR) public onlyOwner {
      apr = _new_APR;
  }
  function set_new_FULCRUM(address _new_FULCRUM) public onlyOwner {
      fulcrum = _new_FULCRUM;
  }
  function set_new_COMPOUND(address _new_COMPOUND) public onlyOwner {
      compound = _new_COMPOUND;
  }
  function set_new_DTOKEN(uint256 _new_DTOKEN) public onlyOwner {
      dToken = _new_DTOKEN;
  }
  function set_new_AAVE(address _new_AAVE) public onlyOwner {
      aave = _new_AAVE;
  }
  function set_new_APOOL(address _new_APOOL) public onlyOwner {
      aavePool = _new_APOOL;
  }
  function set_new_ATOKEN(address _new_ATOKEN) public onlyOwner {
      aaveToken = _new_ATOKEN;
  }
  function set_new_CHAI(address _new_CHAI) public onlyOwner {
      chai = _new_CHAI;
  }

  // Quick swap low gas method for pool swaps
  function deposit(uint256 _amount)
      external
      nonReentrant
  {
      require(_amount > 0, "deposit must be greater than 0");
      pool = calcPoolValueInToken();

      IERC20(token).safeTransferFrom(msg.sender, address(this), _amount);

      // Calculate pool shares
      uint256 shares = 0;
      if (pool == 0) {
        shares = _amount;
        pool = _amount;
      } else {
        shares = (_amount.mul(_totalSupply)).div(pool);
      }
      pool = calcPoolValueInToken();
      _mint(msg.sender, shares);
  }

  // No rebalance implementation for lower fees and faster swaps
  function withdraw(uint256 _shares)
      external
      nonReentrant
  {
      require(_shares > 0, "withdraw must be greater than 0");

      uint256 ibalance = balanceOf(msg.sender);
      require(_shares <= ibalance, "insufficient balance");

      // Could have over value from cTokens
      pool = calcPoolValueInToken();
      // Calc to redeem before updating balances
      uint256 r = (pool.mul(_shares)).div(_totalSupply);


      _balances[msg.sender] = _balances[msg.sender].sub(_shares, "redeem amount exceeds balance");
      _totalSupply = _totalSupply.sub(_shares);

      emit Transfer(msg.sender, address(0), _shares);

      // Check balance
      uint256 b = IERC20(token).balanceOf(address(this));
      if (b < r) {
        _withdrawSome(r.sub(b));
      }

      IERC20(token).safeTransfer(msg.sender, r);
      pool = calcPoolValueInToken();
  }

  function recommend() public view returns (Lender) {
    (,uint256 capr,uint256 iapr,uint256 aapr,uint256 dapr) = IIEarnManager(apr).recommend(token);
    uint256 max = 0;
    if (capr > max) {
      max = capr;
    }
    if (iapr > max) {
      max = iapr;
    }
    if (aapr > max) {
      max = aapr;
    }
    if (dapr > max) {
      max = dapr;
    }

    Lender newProvider = Lender.NONE;
    if (max == capr) {
      newProvider = Lender.COMPOUND;
    } else if (max == iapr) {
      newProvider = Lender.FULCRUM;
    } else if (max == aapr) {
      newProvider = Lender.AAVE;
    } else if (max == dapr) {
      newProvider = Lender.DYDX;
    }
    return newProvider;
  }

  function getAave() public view returns (address) {
    return LendingPoolAddressesProvider(aave).getLendingPool();
  }
  function getAaveCore() public view returns (address) {
    return LendingPoolAddressesProvider(aave).getLendingPoolCore();
  }

  function approveToken() public {
      IERC20(token).safeApprove(compound, uint(-1));
      IERC20(token).safeApprove(dydx, uint(-1));
      IERC20(token).safeApprove(getAaveCore(), uint(-1));
      IERC20(token).safeApprove(fulcrum, uint(-1));
  }

  function balance() public view returns (uint256) {
    return IERC20(token).balanceOf(address(this));
  }
  function balanceDydxAvailable() public view returns (uint256) {
      return IERC20(token).balanceOf(dydx);
  }
  function balanceDydx() public view returns (uint256) {
      Wei memory bal = DyDx(dydx).getAccountWei(Info(address(this), 0), dToken);
      return bal.value;
  }
  function balanceCompound() public view returns (uint256) {
      return IERC20(compound).balanceOf(address(this));
  }
  function balanceCompoundInToken() public view returns (uint256) {
    // Mantisa 1e18 to decimals
    uint256 b = balanceCompound();
    if (b > 0) {
      b = b.mul(Compound(compound).exchangeRateStored()).div(1e18);
    }
    return b;
  }
  function balanceFulcrumAvailable() public view returns (uint256) {
      return IERC20(chai).balanceOf(fulcrum);
  }
  function balanceFulcrumInToken() public view returns (uint256) {
    uint256 b = balanceFulcrum();
    if (b > 0) {
      b = Fulcrum(fulcrum).assetBalanceOf(address(this));
    }
    return b;
  }
  function balanceFulcrum() public view returns (uint256) {
    return IERC20(fulcrum).balanceOf(address(this));
  }
  function balanceAaveAvailable() public view returns (uint256) {
      return IERC20(token).balanceOf(aavePool);
  }
  function balanceAave() public view returns (uint256) {
    return IERC20(aaveToken).balanceOf(address(this));
  }

  function rebalance() public {
    Lender newProvider = recommend();

    if (newProvider != provider) {
      _withdrawAll();
    }

    if (balance() > 0) {
      if (newProvider == Lender.DYDX) {
        _supplyDydx(balance());
      } else if (newProvider == Lender.FULCRUM) {
        _supplyFulcrum(balance());
      } else if (newProvider == Lender.COMPOUND) {
        _supplyCompound(balance());
      } else if (newProvider == Lender.AAVE) {
        _supplyAave(balance());
      }
    }

    provider = newProvider;
  }

  function _withdrawAll() internal {
    uint256 amount = balanceCompound();
    if (amount > 0) {
      _withdrawSomeCompound(balanceCompoundInToken().sub(1));
    }
    amount = balanceDydx();
    if (amount > 0) {
      _withdrawDydx(balanceDydxAvailable());
    }
    amount = balanceFulcrum();
    if (amount > 0) {
      _withdrawSomeFulcrum(balanceFulcrumAvailable().sub(1));
    }
    amount = balanceAave();
    if (amount > 0) {
      _withdrawAave(balanceAaveAvailable());
    }
  }

  function _withdrawSomeCompound(uint256 _amount) internal {
    uint256 b = balanceCompound();
    uint256 bT = balanceCompoundInToken();
    require(bT >= _amount, "insufficient funds");
    // can have unintentional rounding errors
    uint256 amount = (b.mul(_amount)).div(bT).add(1);
    _withdrawCompound(amount);
  }

  function _withdrawSomeFulcrum(uint256 _amount) internal {
    uint256 b = balanceFulcrum();
    uint256 bT = balanceFulcrumInToken();
    require(bT >= _amount, "insufficient funds");
    // can have unintentional rounding errors
    uint256 amount = (b.mul(_amount)).div(bT).add(1);
    _withdrawFulcrum(amount);
  }

  function _withdrawSome(uint256 _amount) internal {
    if (provider == Lender.COMPOUND) {
      _withdrawSomeCompound(_amount);
    }
    if (provider == Lender.AAVE) {
      require(balanceAave() >= _amount, "insufficient funds");
      _withdrawAave(_amount);
    }
    if (provider == Lender.DYDX) {
      require(balanceDydx() >= _amount, "insufficient funds");
      _withdrawDydx(_amount);
    }
    if (provider == Lender.FULCRUM) {
      _withdrawSomeFulcrum(_amount);
    }
  }

  function _supplyDydx(uint256 amount) internal {
      Info[] memory infos = new Info[](1);
      infos[0] = Info(address(this), 0);

      AssetAmount memory amt = AssetAmount(true, AssetDenomination.Wei, AssetReference.Delta, amount);
      ActionArgs memory act;
      act.actionType = ActionType.Deposit;
      act.accountId = 0;
      act.amount = amt;
      act.primaryMarketId = dToken;
      act.otherAddress = address(this);

      ActionArgs[] memory args = new ActionArgs[](1);
      args[0] = act;

      DyDx(dydx).operate(infos, args);
  }

  function _supplyAave(uint amount) internal {
      Aave(getAave()).deposit(token, amount, 0);
  }
  function _supplyFulcrum(uint amount) internal {
      require(Fulcrum(fulcrum).mint(address(this), amount) > 0, "FULCRUM: supply failed");
  }
  function _supplyCompound(uint amount) internal {
      require(Compound(compound).mint(amount) == 0, "COMPOUND: supply failed");
  }
  function _withdrawAave(uint amount) internal {
      AToken(aaveToken).redeem(amount);
  }
  function _withdrawFulcrum(uint amount) internal {
      require(Fulcrum(fulcrum).burn(address(this), amount) > 0, "FULCRUM: withdraw failed");
  }
  function _withdrawCompound(uint amount) internal {
      require(Compound(compound).redeem(amount) == 0, "COMPOUND: withdraw failed");
  }

  function _withdrawDydx(uint256 amount) internal {
      Info[] memory infos = new Info[](1);
      infos[0] = Info(address(this), 0);

      AssetAmount memory amt = AssetAmount(false, AssetDenomination.Wei, AssetReference.Delta, amount);
      ActionArgs memory act;
      act.actionType = ActionType.Withdraw;
      act.accountId = 0;
      act.amount = amt;
      act.primaryMarketId = dToken;
      act.otherAddress = address(this);

      ActionArgs[] memory args = new ActionArgs[](1);
      args[0] = act;

      DyDx(dydx).operate(infos, args);
  }

  function calcPoolValueInToken() public view returns (uint) {
    return balanceCompoundInToken()
      .add(balanceFulcrumInToken())
      .add(balanceDydx())
      .add(balanceAave())
      .add(balance());
  }

  function getPricePerFullShare() public view returns (uint) {
    uint _pool = calcPoolValueInToken();
    return _pool.mul(1e18).div(_totalSupply);
  }

  function withdrawSomeCompound(uint256 _amount) public onlyOwner {
    _withdrawSomeCompound(_amount);
  }
  function withdrawSomeFulcrum(uint256 _amount) public onlyOwner {
    _withdrawSomeFulcrum(_amount);
  }
  function withdrawAave(uint amount) public onlyOwner {
      _withdrawAave(amount);
  }
  function withdrawDydx(uint256 amount) public onlyOwner {
      _withdrawDydx(amount);
  }

  function supplyDydx(uint256 amount) public onlyOwner {
      _supplyDydx(amount);
  }
  function supplyAave(uint amount) public onlyOwner {
    _supplyAave(amount);
  }
  function supplyFulcrum(uint amount) public onlyOwner {
      _supplyFulcrum(amount);
  }
  function supplyCompound(uint amount) public onlyOwner {
      _supplyCompound(amount);
  }
}

Contract Security Audit

Contract ABI

[{"inputs":[],"payable":false,"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"},{"constant":true,"inputs":[],"name":"aave","outputs":[{"internalType":"address","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"aavePool","outputs":[{"internalType":"address","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"aaveToken","outputs":[{"internalType":"address","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[],"name":"approveToken","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"apr","outputs":[{"internalType":"address","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"balance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"balanceAave","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"balanceAaveAvailable","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"balanceCompound","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"balanceCompoundInToken","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"balanceDydx","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"balanceDydxAvailable","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"balanceFulcrum","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"balanceFulcrumAvailable","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"balanceFulcrumInToken","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"calcPoolValueInToken","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"chai","outputs":[{"internalType":"address","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"compound","outputs":[{"internalType":"address","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"dToken","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"deposit","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"dydx","outputs":[{"internalType":"address","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"fulcrum","outputs":[{"internalType":"address","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"getAave","outputs":[{"internalType":"address","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"getAaveCore","outputs":[{"internalType":"address","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"getPricePerFullShare","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"isOwner","outputs":[{"internalType":"bool","name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"pool","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"provider","outputs":[{"internalType":"enum yDAI.Lender","name":"","type":"uint8"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[],"name":"rebalance","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"recommend","outputs":[{"internalType":"enum yDAI.Lender","name":"","type":"uint8"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[],"name":"renounceOwnership","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"_new_AAVE","type":"address"}],"name":"set_new_AAVE","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"_new_APOOL","type":"address"}],"name":"set_new_APOOL","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"_new_APR","type":"address"}],"name":"set_new_APR","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"_new_ATOKEN","type":"address"}],"name":"set_new_ATOKEN","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"_new_CHAI","type":"address"}],"name":"set_new_CHAI","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"_new_COMPOUND","type":"address"}],"name":"set_new_COMPOUND","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"uint256","name":"_new_DTOKEN","type":"uint256"}],"name":"set_new_DTOKEN","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"_new_FULCRUM","type":"address"}],"name":"set_new_FULCRUM","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"supplyAave","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"supplyCompound","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"supplyDydx","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"supplyFulcrum","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"token","outputs":[{"internalType":"address","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"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"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"uint256","name":"_shares","type":"uint256"}],"name":"withdraw","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"withdrawAave","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"withdrawDydx","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"withdrawSomeCompound","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"withdrawSomeFulcrum","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"}]

60806040526000601260146101000a81548160ff021916908360048111156200002457fe5b02179055503480156200003657600080fd5b506040518060400160405280600981526020017f696561726e2044414900000000000000000000000000000000000000000000008152506040518060400160405280600481526020017f794441490000000000000000000000000000000000000000000000000000000081525060128260039080519060200190620000bd92919062000b45565b508160049080519060200190620000d692919062000b45565b5080600560006101000a81548160ff021916908360ff16021790555050505060016006819055506200010d620004e560201b60201c565b600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3736b175474e89094c44da98b954eedeac495271d0f600960006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555073dd6d648c991f7d47454354f4ef326b04025a48a8601160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550731e0447b19bb6ecfdae1e4ae1694b0c3659614e4e600f60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055507324a42fd28c976a61df5d00d0599c34c4f90748c8600c60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550733dfd23a6c5e8bbcfc9581d2e864a68feb6a076d3600d60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555073493c57c4763932315a328269e1adad09653b9081600b60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555073fc1e690f61efd961294b3e1ce3313fbd8aa4f85d600e60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550735d3a536e4d6dbd6114cc1ead35777bab948e3643600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055507306af07097c9eeb7fd685c692751d5c66db49c215601260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506003601081905550620004df620004ed60201b60201c565b6200105a565b600033905090565b62000583600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff167fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166200073460201b62003ed5179092919060201c565b62000619600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff167fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166200073460201b62003ed5179092919060201c565b6200069c6200062d620008bf60201b60201c565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166200073460201b62003ed5179092919060201c565b62000732600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff167fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166200073460201b62003ed5179092919060201c565b565b6000811480620007d4575060008373ffffffffffffffffffffffffffffffffffffffff1663dd62ed3e30856040518363ffffffff1660e01b81526004016200077e92919062000e83565b60206040518083038186803b1580156200079757600080fd5b505afa158015620007ac573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250620007d2919081019062000c91565b145b62000816576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200080d9062000f21565b60405180910390fd5b620008ba838473ffffffffffffffffffffffffffffffffffffffff1663095ea7b3905060e01b84846040516024016200085192919062000eb0565b604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff83818316178352505050506200096a60201b60201c565b505050565b6000600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ed6ff7606040518163ffffffff1660e01b815260040160206040518083038186803b1580156200092a57600080fd5b505afa1580156200093f573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525062000965919081019062000c39565b905090565b620009968273ffffffffffffffffffffffffffffffffffffffff1662000af960201b620048051760201c565b620009d8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620009cf9062000f43565b60405180910390fd5b600060608373ffffffffffffffffffffffffffffffffffffffff168360405162000a03919062000e6a565b6000604051808303816000865af19150503d806000811462000a42576040519150601f19603f3d011682016040523d82523d6000602084013e62000a47565b606091505b50915091508162000a8f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000a869062000edd565b60405180910390fd5b60008151111562000af3578080602001905162000ab0919081019062000c65565b62000af2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000ae99062000eff565b60405180910390fd5b5b50505050565b60008060007fc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a47060001b9050833f91506000801b821415801562000b3c5750808214155b92505050919050565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f1062000b8857805160ff191683800117855562000bb9565b8280016001018555821562000bb9579182015b8281111562000bb857825182559160200191906001019062000b9b565b5b50905062000bc8919062000bcc565b5090565b62000bf191905b8082111562000bed57600081600090555060010162000bd3565b5090565b90565b60008151905062000c05816200100c565b92915050565b60008151905062000c1c8162001026565b92915050565b60008151905062000c338162001040565b92915050565b60006020828403121562000c4c57600080fd5b600062000c5c8482850162000bf4565b91505092915050565b60006020828403121562000c7857600080fd5b600062000c888482850162000c0b565b91505092915050565b60006020828403121562000ca457600080fd5b600062000cb48482850162000c22565b91505092915050565b62000cc88162000f8c565b82525050565b600062000cdb8262000f65565b62000ce7818562000f70565b935062000cf981856020860162000fd6565b80840191505092915050565b600062000d1460208362000f7b565b91507f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65646000830152602082019050919050565b600062000d56602a8362000f7b565b91507f5361666545524332303a204552433230206f7065726174696f6e20646964206e60008301527f6f742073756363656564000000000000000000000000000000000000000000006020830152604082019050919050565b600062000dbe60368362000f7b565b91507f5361666545524332303a20617070726f76652066726f6d206e6f6e2d7a65726f60008301527f20746f206e6f6e2d7a65726f20616c6c6f77616e6365000000000000000000006020830152604082019050919050565b600062000e26601f8362000f7b565b91507f5361666545524332303a2063616c6c20746f206e6f6e2d636f6e7472616374006000830152602082019050919050565b62000e648162000fcc565b82525050565b600062000e78828462000cce565b915081905092915050565b600060408201905062000e9a600083018562000cbd565b62000ea9602083018462000cbd565b9392505050565b600060408201905062000ec7600083018562000cbd565b62000ed6602083018462000e59565b9392505050565b6000602082019050818103600083015262000ef88162000d05565b9050919050565b6000602082019050818103600083015262000f1a8162000d47565b9050919050565b6000602082019050818103600083015262000f3c8162000daf565b9050919050565b6000602082019050818103600083015262000f5e8162000e17565b9050919050565b600081519050919050565b600081905092915050565b600082825260208201905092915050565b600062000f998262000fac565b9050919050565b60008115159050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b60005b8381101562000ff657808201518184015260208101905062000fd9565b8381111562001006576000848401525b50505050565b620010178162000f8c565b81146200102357600080fd5b50565b620010318162000fa0565b81146200103d57600080fd5b50565b6200104b8162000fcc565b81146200105757600080fd5b50565b615fe6806200106a6000396000f3fe608060405234801561001057600080fd5b50600436106103ba5760003560e01c80638da5cb5b116101f4578063b69d04561161011a578063e849d659116100ad578063f69e20461161007c578063f69e204614610aa7578063f7c1ec7714610ac5578063f82ce27d14610ae3578063fc0c546a14610b01576103ba565b8063e849d65914610a35578063f2fde38b14610a51578063f5a41dea14610a6d578063f5ff191614610a8b576103ba565b8063cf8ca426116100e9578063cf8ca426146109ab578063d54e3244146109c9578063d9d7858a146109e7578063dd62ed3e14610a05576103ba565b8063b69d045614610937578063b69ef8a814610955578063b6b55f2514610973578063bbf316441461098f576103ba565b8063a03e4bc311610192578063a9059cbb11610161578063a9059cbb146108b1578063a9de245b146108e1578063b098fc80146108fd578063b30d0bb21461091b576103ba565b8063a03e4bc314610827578063a160176d14610845578063a457c2d714610863578063a728797114610893576103ba565b80638f9225ca116101ce5780638f9225ca146107c557806395d89b41146107e357806399b71d5c146108015780639ff011b91461080b576103ba565b80638da5cb5b1461076b5780638e4ec6ef146107895780638f32d59b146107a7576103ba565b806346357473116102e457806370a08231116102775780637d7c2a1c116102465780637d7c2a1c1461070b5780638124955c14610715578063812adb0614610731578063819faf7b1461074d576103ba565b806370a08231146106955780637137ef99146106c5578063715018a6146106e357806377c7b8fc146106ed576103ba565b806361c1ec55116102b357806361c1ec551461062357806365aab7491461064157806367e4b7401461065d5780636f3a08e914610679576103ba565b806346357473146105af57806356cc9378146105cb57806357ded9c9146105e757806358782c2114610605576103ba565b806318160ddd1161035c578063313ce5671161032b578063313ce56714610527578063395093511461054557806339c0a7e11461057557806341c57c8d14610593576103ba565b806318160ddd146104a157806319c13d54146104bf57806323b872dd146104db5780632e1a7d4d1461050b576103ba565b8063085d488311610398578063085d488314610417578063095ea7b3146104355780630eb2a2671461046557806316f0115b14610483576103ba565b806306636c1c146103bf57806306a3fe59146103db57806306fdde03146103f9575b600080fd5b6103d960048036036103d49190810190614cf3565b610b1f565b005b6103e3610b72565b6040516103f091906157c8565b60405180910390f35b610401610b98565b60405161040e9190615910565b60405180910390f35b61041f610c3a565b60405161042c91906158f5565b60405180910390f35b61044f600480360361044a9190810190614bd6565b610c4d565b60405161045c91906158da565b60405180910390f35b61046d610c6b565b60405161047a9190615c1b565b60405180910390f35b61048b610d1d565b6040516104989190615c1b565b60405180910390f35b6104a9610d23565b6040516104b69190615c1b565b60405180910390f35b6104d960048036036104d49190810190614af9565b610d2d565b005b6104f560048036036104f09190810190614b87565b610db8565b60405161050291906158da565b60405180910390f35b61052560048036036105209190810190614cf3565b610e91565b005b61052f61123b565b60405161053c9190615c36565b60405180910390f35b61055f600480360361055a9190810190614bd6565b611252565b60405161056c91906158da565b60405180910390f35b61057d611305565b60405161058a9190615c1b565b60405180910390f35b6105ad60048036036105a89190810190614cf3565b6113f5565b005b6105c960048036036105c49190810190614af9565b611448565b005b6105e560048036036105e09190810190614cf3565b6114d3565b005b6105ef611526565b6040516105fc91906157c8565b60405180910390f35b61060d61154c565b60405161061a91906157c8565b60405180910390f35b61062b611572565b6040516106389190615c1b565b60405180910390f35b61065b60048036036106569190810190614cf3565b611624565b005b61067760048036036106729190810190614cf3565b611677565b005b610693600480360361068e9190810190614af9565b6116ca565b005b6106af60048036036106aa9190810190614af9565b611755565b6040516106bc9190615c1b565b60405180910390f35b6106cd61179d565b6040516106da9190615c1b565b60405180910390f35b6106eb611810565b005b6106f5611918565b6040516107029190615c1b565b60405180910390f35b61071361195a565b005b61072f600480360361072a9190810190614cf3565b611aa0565b005b61074b60048036036107469190810190614af9565b611af3565b005b610755611b7e565b60405161076291906157c8565b60405180910390f35b610773611ba4565b60405161078091906157c8565b60405180910390f35b610791611bce565b60405161079e91906157c8565b60405180910390f35b6107af611bf4565b6040516107bc91906158da565b60405180910390f35b6107cd611c53565b6040516107da9190615c1b565b60405180910390f35b6107eb611d27565b6040516107f89190615910565b60405180910390f35b610809611dc9565b005b61082560048036036108209190810190614cf3565b611fec565b005b61082f61203d565b60405161083c91906157c8565b60405180910390f35b61084d612063565b60405161085a91906158f5565b60405180910390f35b61087d60048036036108789190810190614bd6565b6121cf565b60405161088a91906158da565b60405180910390f35b61089b61229c565b6040516108a89190615c1b565b60405180910390f35b6108cb60048036036108c69190810190614bd6565b612388565b6040516108d891906158da565b60405180910390f35b6108fb60048036036108f69190810190614af9565b6123a6565b005b610905612431565b6040516109129190615c1b565b60405180910390f35b61093560048036036109309190810190614cf3565b612505565b005b61093f612558565b60405161094c91906157c8565b60405180910390f35b61095d61257e565b60405161096a9190615c1b565b60405180910390f35b61098d60048036036109889190810190614cf3565b612630565b005b6109a960048036036109a49190810190614af9565b612794565b005b6109b361281f565b6040516109c09190615c1b565b60405180910390f35b6109d16128d1565b6040516109de9190615c1b565b60405180910390f35b6109ef6129a5565b6040516109fc9190615c1b565b60405180910390f35b610a1f6004803603610a1a9190810190614b4b565b6129ab565b604051610a2c9190615c1b565b60405180910390f35b610a4f6004803603610a4a9190810190614cf3565b612a32565b005b610a6b6004803603610a669190810190614af9565b612a85565b005b610a75612ad8565b604051610a829190615c1b565b60405180910390f35b610aa56004803603610aa09190810190614af9565b612ba3565b005b610aaf612c2e565b604051610abc91906157c8565b60405180910390f35b610acd612c54565b604051610ada91906157c8565b60405180910390f35b610aeb612cfb565b604051610af891906157c8565b60405180910390f35b610b09612da2565b604051610b1691906157c8565b60405180910390f35b610b27611bf4565b610b66576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b5d90615a52565b60405180910390fd5b610b6f81612dc8565b50565b600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b606060038054600181600116156101000203166002900480601f016020809104026020016040519081016040528092919081815260200182805460018160011615610100020316600290048015610c305780601f10610c0557610100808354040283529160200191610c30565b820191906000526020600020905b815481529060010190602001808311610c1357829003601f168201915b5050505050905090565b601260149054906101000a900460ff1681565b6000610c61610c5a613002565b848461300a565b6001905092915050565b6000600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401610cc891906157c8565b60206040518083038186803b158015610ce057600080fd5b505afa158015610cf4573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250610d189190810190614d1c565b905090565b60085481565b6000600254905090565b610d35611bf4565b610d74576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d6b90615a52565b60405180910390fd5b80600d60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6000610dc58484846131d5565b610e8684610dd1613002565b610e8185604051806060016040528060288152602001615f5760289139600160008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000610e37613002565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461345f9092919063ffffffff16565b61300a565b600190509392505050565b60016006600082825401925050819055506000600654905060008211610eec576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ee390615a92565b60405180910390fd5b6000610ef733611755565b905080831115610f3c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f3390615a72565b60405180910390fd5b610f4461179d565b6008819055506000610f75600254610f67866008546134ba90919063ffffffff16565b61352a90919063ffffffff16565b9050610fff846040518060400160405280601d81526020017f72656465656d20616d6f756e7420657863656564732062616c616e63650000008152506000803373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461345f9092919063ffffffff16565b6000803373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506110568460025461357490919063ffffffff16565b600281905550600073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef866040516110ba9190615c1b565b60405180910390a36000600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b815260040161111f91906157c8565b60206040518083038186803b15801561113757600080fd5b505afa15801561114b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525061116f9190810190614d1c565b9050818110156111955761119461118f828461357490919063ffffffff16565b6135be565b5b6111e23383600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166137349092919063ffffffff16565b6111ea61179d565b6008819055505050506006548114611237576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161122e90615b72565b60405180910390fd5b5050565b6000600560009054906101000a900460ff16905090565b60006112fb61125f613002565b846112f68560016000611270613002565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546137d390919063ffffffff16565b61300a565b6001905092915050565b600061130f614850565b600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663c190c2ec60405180604001604052803073ffffffffffffffffffffffffffffffffffffffff16815260200160008152506010546040518363ffffffff1660e01b8152600401611399929190615bf2565b604080518083038186803b1580156113b057600080fd5b505afa1580156113c4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506113e89190810190614cca565b9050806020015191505090565b6113fd611bf4565b61143c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161143390615a52565b60405180910390fd5b61144581613828565b50565b611450611bf4565b61148f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161148690615a52565b60405180910390fd5b80601160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6114db611bf4565b61151a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161151190615a52565b60405180910390fd5b61152381613a62565b50565b601160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b81526004016115cf91906157c8565b60206040518083038186803b1580156115e757600080fd5b505afa1580156115fb573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525061161f9190810190614d1c565b905090565b61162c611bf4565b61166b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161166290615a52565b60405180910390fd5b61167481613af2565b50565b61167f611bf4565b6116be576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116b590615a52565b60405180910390fd5b6116c781613b8e565b50565b6116d2611bf4565b611711576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161170890615a52565b60405180910390fd5b80601260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b600061180b6117aa61257e565b6117fd6117b561281f565b6117ef6117c0611305565b6117e16117cb612ad8565b6117d361229c565b6137d390919063ffffffff16565b6137d390919063ffffffff16565b6137d390919063ffffffff16565b6137d390919063ffffffff16565b905090565b611818611bf4565b611857576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161184e90615a52565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff16600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a36000600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b60008061192361179d565b9050611954600254611946670de0b6b3a7640000846134ba90919063ffffffff16565b61352a90919063ffffffff16565b91505090565b6000611964612063565b9050601260149054906101000a900460ff16600481111561198157fe5b81600481111561198d57fe5b1461199b5761199a613c34565b5b60006119a561257e565b1115611a7a57600160048111156119b857fe5b8160048111156119c457fe5b14156119df576119da6119d561257e565b612dc8565b611a79565b6004808111156119eb57fe5b8160048111156119f757fe5b1415611a1257611a0d611a0861257e565b613cef565b611a78565b60026004811115611a1f57fe5b816004811115611a2b57fe5b1415611a4657611a41611a3c61257e565b613de3565b611a77565b60036004811115611a5357fe5b816004811115611a5f57fe5b1415611a7657611a75611a7061257e565b613af2565b5b5b5b5b5b80601260146101000a81548160ff02191690836004811115611a9857fe5b021790555050565b611aa8611bf4565b611ae7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ade90615a52565b60405180910390fd5b611af081613cef565b50565b611afb611bf4565b611b3a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b3190615a52565b60405180910390fd5b80600c60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16611c37613002565b73ffffffffffffffffffffffffffffffffffffffff1614905090565b6000601260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166040518263ffffffff1660e01b8152600401611cd291906157c8565b60206040518083038186803b158015611cea57600080fd5b505afa158015611cfe573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250611d229190810190614d1c565b905090565b606060048054600181600116156101000203166002900480601f016020809104026020016040519081016040528092919081815260200182805460018160011615610100020316600290048015611dbf5780601f10611d9457610100808354040283529160200191611dbf565b820191906000526020600020905b815481529060010190602001808311611da257829003601f168201915b5050505050905090565b611e58600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff167fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16613ed59092919063ffffffff16565b611ee7600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff167fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16613ed59092919063ffffffff16565b611f5b611ef2612cfb565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16613ed59092919063ffffffff16565b611fea600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff167fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16613ed59092919063ffffffff16565b565b611ff4611bf4565b612033576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161202a90615a52565b60405180910390fd5b8060108190555050565b600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000806000806000601160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663d88be3c0600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166040518263ffffffff1660e01b81526004016120e891906157c8565b60006040518083038186803b15801561210057600080fd5b505afa158015612114573d6000803e3d6000fd5b505050506040513d6000823e3d601f19601f8201168201806040525061213d9190810190614c3b565b945094509450945050600080905080851115612157578490505b80841115612163578390505b8083111561216f578290505b8082111561217b578190505b60008090508582141561219157600290506121c3565b848214156121a257600490506121c2565b838214156121b357600390506121c1565b828214156121c057600190505b5b5b5b80965050505050505090565b60006122926121dc613002565b8461228d85604051806060016040528060258152602001615f7f6025913960016000612206613002565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461345f9092919063ffffffff16565b61300a565b6001905092915050565b6000806122a7611572565b905060008111156123815761237e670de0b6b3a7640000612370600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663182df0f56040518163ffffffff1660e01b815260040160206040518083038186803b15801561232957600080fd5b505afa15801561233d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506123619190810190614d1c565b846134ba90919063ffffffff16565b61352a90919063ffffffff16565b90505b8091505090565b600061239c612395613002565b84846131d5565b6001905092915050565b6123ae611bf4565b6123ed576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123e490615a52565b60405180910390fd5b80600e60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6000600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166040518263ffffffff1660e01b81526004016124b091906157c8565b60206040518083038186803b1580156124c857600080fd5b505afa1580156124dc573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506125009190810190614d1c565b905090565b61250d611bf4565b61254c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161254390615a52565b60405180910390fd5b6125558161404c565b50565b601260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b81526004016125db91906157c8565b60206040518083038186803b1580156125f357600080fd5b505afa158015612607573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525061262b9190810190614d1c565b905090565b6001600660008282540192505081905550600060065490506000821161268b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161268290615b12565b60405180910390fd5b61269361179d565b6008819055506126e8333084600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166140f2909392919063ffffffff16565b6000809050600060085414156127075782905082600881905550612733565b612730600854612722600254866134ba90919063ffffffff16565b61352a90919063ffffffff16565b90505b61273b61179d565b60088190555061274b3382614194565b506006548114612790576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161278790615b72565b60405180910390fd5b5050565b61279c611bf4565b6127db576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127d290615a52565b60405180910390fd5b80600b60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6000600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b815260040161287c91906157c8565b60206040518083038186803b15801561289457600080fd5b505afa1580156128a8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506128cc9190810190614d1c565b905090565b6000600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166040518263ffffffff1660e01b815260040161295091906157c8565b60206040518083038186803b15801561296857600080fd5b505afa15801561297c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506129a09190810190614d1c565b905090565b60105481565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b612a3a611bf4565b612a79576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a7090615a52565b60405180910390fd5b612a8281613de3565b50565b612a8d611bf4565b612acc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ac390615a52565b60405180910390fd5b612ad58161431c565b50565b600080612ae3610c6b565b90506000811115612b9c57600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166306b3efd6306040518263ffffffff1660e01b8152600401612b4991906157c8565b60206040518083038186803b158015612b6157600080fd5b505afa158015612b75573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250612b999190810190614d1c565b90505b8091505090565b612bab611bf4565b612bea576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612be190615a52565b60405180910390fd5b80600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16630261bf8b6040518163ffffffff1660e01b815260040160206040518083038186803b158015612cbe57600080fd5b505afa158015612cd2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250612cf69190810190614b22565b905090565b6000600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ed6ff7606040518163ffffffff1660e01b815260040160206040518083038186803b158015612d6557600080fd5b505afa158015612d79573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250612d9d9190810190614b22565b905090565b600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60606001604051908082528060200260200182016040528015612e0557816020015b612df261486c565b815260200190600190039081612dea5790505b50905060405180604001604052803073ffffffffffffffffffffffffffffffffffffffff168152602001600081525081600081518110612e4157fe5b6020026020010181905250612e5461489c565b6040518060800160405280600115158152602001600080811115612e7457fe5b8152602001600080811115612e8557fe5b8152602001848152509050612e986148da565b600081600001906001811115612eaa57fe5b90816001811115612eb757fe5b815250506000816020018181525050818160400181905250601054816060018181525050308160a0019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505060606001604051908082528060200260200182016040528015612f5057816020015b612f3d614946565b815260200190600190039081612f355790505b5090508181600081518110612f6157fe5b6020026020010181905250600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a67a6a4585836040518363ffffffff1660e01b8152600401612fc99291906158a3565b600060405180830381600087803b158015612fe357600080fd5b505af1158015612ff7573d6000803e3d6000fd5b505050505050505050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141561307a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161307190615af2565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156130ea576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016130e190615992565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040516131c89190615c1b565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415613245576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161323c90615ab2565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156132b5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016132ac90615932565b60405180910390fd5b61332081604051806060016040528060268152602001615f31602691396000808773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461345f9092919063ffffffff16565b6000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506133b3816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546137d390919063ffffffff16565b6000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516134529190615c1b565b60405180910390a3505050565b60008383111582906134a7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161349e9190615910565b60405180910390fd5b5060008385039050809150509392505050565b6000808314156134cd5760009050613524565b60008284029050828482816134de57fe5b041461351f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161351690615a12565b60405180910390fd5b809150505b92915050565b600061356c83836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f00000000000081525061444c565b905092915050565b60006135b683836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f77000081525061345f565b905092915050565b600260048111156135cb57fe5b601260149054906101000a900460ff1660048111156135e657fe5b14156135f6576135f58161404c565b5b6003600481111561360357fe5b601260149054906101000a900460ff16600481111561361e57fe5b1415613678578061362d61281f565b101561366e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161366590615ad2565b60405180910390fd5b61367781613a62565b5b6001600481111561368557fe5b601260149054906101000a900460ff1660048111156136a057fe5b14156136fa57806136af611305565b10156136f0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016136e790615ad2565b60405180910390fd5b6136f981613828565b5b60048081111561370657fe5b601260149054906101000a900460ff16600481111561372157fe5b14156137315761373081613b8e565b5b50565b6137ce838473ffffffffffffffffffffffffffffffffffffffff1663a9059cbb905060e01b848460405160240161376c929190615843565b604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff83818316178352505050506144ad565b505050565b60008082840190508381101561381e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613815906159d2565b60405180910390fd5b8091505092915050565b6060600160405190808252806020026020018201604052801561386557816020015b61385261486c565b81526020019060019003908161384a5790505b50905060405180604001604052803073ffffffffffffffffffffffffffffffffffffffff1681526020016000815250816000815181106138a157fe5b60200260200101819052506138b461489c565b60405180608001604052806000151581526020016000808111156138d457fe5b81526020016000808111156138e557fe5b81526020018481525090506138f86148da565b60018160000190600181111561390a57fe5b9081600181111561391757fe5b815250506000816020018181525050818160400181905250601054816060018181525050308160a0019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050606060016040519080825280602002602001820160405280156139b057816020015b61399d614946565b8152602001906001900390816139955790505b50905081816000815181106139c157fe5b6020026020010181905250600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a67a6a4585836040518363ffffffff1660e01b8152600401613a299291906158a3565b600060405180830381600087803b158015613a4357600080fd5b505af1158015613a57573d6000803e3d6000fd5b505050505050505050565b600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663db006a75826040518263ffffffff1660e01b8152600401613abd9190615c1b565b600060405180830381600087803b158015613ad757600080fd5b505af1158015613aeb573d6000803e3d6000fd5b5050505050565b613afa612c54565b73ffffffffffffffffffffffffffffffffffffffff1663d2d0e066600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff168360006040518463ffffffff1660e01b8152600401613b599392919061586c565b600060405180830381600087803b158015613b7357600080fd5b505af1158015613b87573d6000803e3d6000fd5b5050505050565b6000613b98610c6b565b90506000613ba4612ad8565b905082811015613be9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613be090615ad2565b60405180910390fd5b6000613c236001613c1584613c0788886134ba90919063ffffffff16565b61352a90919063ffffffff16565b6137d390919063ffffffff16565b9050613c2e8161461f565b50505050565b6000613c3e611572565b90506000811115613c6d57613c6c613c676001613c5961229c565b61357490919063ffffffff16565b61404c565b5b613c75611305565b90506000811115613c9157613c90613c8b6128d1565b613828565b5b613c99610c6b565b90506000811115613cc857613cc7613cc26001613cb4611c53565b61357490919063ffffffff16565b613b8e565b5b613cd061281f565b90506000811115613cec57613ceb613ce6612431565b613a62565b5b50565b6000600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166340c10f1930846040518363ffffffff1660e01b8152600401613d4e929190615843565b602060405180830381600087803b158015613d6857600080fd5b505af1158015613d7c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250613da09190810190614d1c565b11613de0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613dd790615b32565b60405180910390fd5b50565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a0712d68836040518263ffffffff1660e01b8152600401613e409190615c1b565b602060405180830381600087803b158015613e5a57600080fd5b505af1158015613e6e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250613e929190810190614d1c565b14613ed2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613ec9906159b2565b60405180910390fd5b50565b6000811480613f6e575060008373ffffffffffffffffffffffffffffffffffffffff1663dd62ed3e30856040518363ffffffff1660e01b8152600401613f1c9291906157e3565b60206040518083038186803b158015613f3457600080fd5b505afa158015613f48573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250613f6c9190810190614d1c565b145b613fad576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613fa490615b92565b60405180910390fd5b614047838473ffffffffffffffffffffffffffffffffffffffff1663095ea7b3905060e01b8484604051602401613fe5929190615843565b604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff83818316178352505050506144ad565b505050565b6000614056611572565b9050600061406261229c565b9050828110156140a7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161409e90615ad2565b60405180910390fd5b60006140e160016140d3846140c588886134ba90919063ffffffff16565b61352a90919063ffffffff16565b6137d390919063ffffffff16565b90506140ec81614713565b50505050565b61418e848573ffffffffffffffffffffffffffffffffffffffff166323b872dd905060e01b85858560405160240161412c9392919061580c565b604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff83818316178352505050506144ad565b50505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415614204576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016141fb90615bd2565b60405180910390fd5b614219816002546137d390919063ffffffff16565b600281905550614270816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546137d390919063ffffffff16565b6000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516143109190615c1b565b60405180910390a35050565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141561438c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161438390615972565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a380600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60008083118290614493576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161448a9190615910565b60405180910390fd5b50600083858161449f57fe5b049050809150509392505050565b6144cc8273ffffffffffffffffffffffffffffffffffffffff16614805565b61450b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161450290615bb2565b60405180910390fd5b600060608373ffffffffffffffffffffffffffffffffffffffff168360405161453491906157b1565b6000604051808303816000865af19150503d8060008114614571576040519150601f19603f3d011682016040523d82523d6000602084013e614576565b606091505b5091509150816145bb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016145b2906159f2565b60405180910390fd5b60008151111561461957808060200190516145d99190810190614c12565b614618576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161460f90615b52565b60405180910390fd5b5b50505050565b6000600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16639dc29fac30846040518363ffffffff1660e01b815260040161467e929190615843565b602060405180830381600087803b15801561469857600080fd5b505af11580156146ac573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506146d09190810190614d1c565b11614710576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161470790615a32565b60405180910390fd5b50565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663db006a75836040518263ffffffff1660e01b81526004016147709190615c1b565b602060405180830381600087803b15801561478a57600080fd5b505af115801561479e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506147c29190810190614d1c565b14614802576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016147f990615952565b60405180910390fd5b50565b60008060007fc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a47060001b9050833f91506000801b82141580156148475750808214155b92505050919050565b6040518060400160405280600015158152602001600081525090565b6040518060400160405280600073ffffffffffffffffffffffffffffffffffffffff168152602001600081525090565b60405180608001604052806000151581526020016000808111156148bc57fe5b81526020016000808111156148cd57fe5b8152602001600081525090565b604051806101000160405280600060018111156148f357fe5b8152602001600081526020016149076149b2565b81526020016000815260200160008152602001600073ffffffffffffffffffffffffffffffffffffffff16815260200160008152602001606081525090565b6040518061010001604052806000600181111561495f57fe5b8152602001600081526020016149736149b2565b81526020016000815260200160008152602001600073ffffffffffffffffffffffffffffffffffffffff16815260200160008152602001606081525090565b60405180608001604052806000151581526020016000808111156149d257fe5b81526020016000808111156149e357fe5b8152602001600081525090565b6000813590506149ff81615eeb565b92915050565b600081519050614a1481615eeb565b92915050565b600081519050614a2981615f02565b92915050565b600082601f830112614a4057600080fd5b8151614a53614a4e82615c7e565b615c51565b91508082526020830160208301858383011115614a6f57600080fd5b614a7a838284615e73565b50505092915050565b600060408284031215614a9557600080fd5b614a9f6040615c51565b90506000614aaf84828501614a1a565b6000830152506020614ac384828501614ae4565b60208301525092915050565b600081359050614ade81615f19565b92915050565b600081519050614af381615f19565b92915050565b600060208284031215614b0b57600080fd5b6000614b19848285016149f0565b91505092915050565b600060208284031215614b3457600080fd5b6000614b4284828501614a05565b91505092915050565b60008060408385031215614b5e57600080fd5b6000614b6c858286016149f0565b9250506020614b7d858286016149f0565b9150509250929050565b600080600060608486031215614b9c57600080fd5b6000614baa868287016149f0565b9350506020614bbb868287016149f0565b9250506040614bcc86828701614acf565b9150509250925092565b60008060408385031215614be957600080fd5b6000614bf7858286016149f0565b9250506020614c0885828601614acf565b9150509250929050565b600060208284031215614c2457600080fd5b6000614c3284828501614a1a565b91505092915050565b600080600080600060a08688031215614c5357600080fd5b600086015167ffffffffffffffff811115614c6d57600080fd5b614c7988828901614a2f565b9550506020614c8a88828901614ae4565b9450506040614c9b88828901614ae4565b9350506060614cac88828901614ae4565b9250506080614cbd88828901614ae4565b9150509295509295909350565b600060408284031215614cdc57600080fd5b6000614cea84828501614a83565b91505092915050565b600060208284031215614d0557600080fd5b6000614d1384828501614acf565b91505092915050565b600060208284031215614d2e57600080fd5b6000614d3c84828501614ae4565b91505092915050565b6000614d51838361561e565b905092915050565b6000614d658383615726565b60408301905092915050565b614d7a81615d6a565b82525050565b614d8981615d6a565b82525050565b6000614d9a82615cca565b614da48185615d1b565b935083602082028501614db685615caa565b8060005b85811015614df25784840389528151614dd38582614d45565b9450614dde83615d01565b925060208a01995050600181019050614dba565b50829750879550505050505092915050565b6000614e0f82615cd5565b614e198185615d2c565b9350614e2483615cba565b8060005b83811015614e55578151614e3c8882614d59565b9750614e4783615d0e565b925050600181019050614e28565b5085935050505092915050565b614e6b81615d7c565b82525050565b614e7a81615d7c565b82525050565b6000614e8b82615ceb565b614e958185615d4e565b9350614ea5818560208601615e73565b80840191505092915050565b6000614ebc82615ce0565b614ec68185615d3d565b9350614ed6818560208601615e73565b614edf81615ea6565b840191505092915050565b614ef381615e19565b82525050565b614f0281615e2b565b82525050565b614f1181615e3d565b82525050565b614f2081615e4f565b82525050565b614f2f81615e61565b82525050565b6000614f4082615cf6565b614f4a8185615d59565b9350614f5a818560208601615e73565b614f6381615ea6565b840191505092915050565b6000614f7b602383615d59565b91507f45524332303a207472616e7366657220746f20746865207a65726f206164647260008301527f65737300000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b6000614fe1601983615d59565b91507f434f4d504f554e443a207769746864726177206661696c6564000000000000006000830152602082019050919050565b6000615021602683615d59565b91507f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008301527f64647265737300000000000000000000000000000000000000000000000000006020830152604082019050919050565b6000615087602283615d59565b91507f45524332303a20617070726f766520746f20746865207a65726f20616464726560008301527f73730000000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b60006150ed601783615d59565b91507f434f4d504f554e443a20737570706c79206661696c65640000000000000000006000830152602082019050919050565b600061512d601b83615d59565b91507f536166654d6174683a206164646974696f6e206f766572666c6f7700000000006000830152602082019050919050565b600061516d602083615d59565b91507f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65646000830152602082019050919050565b60006151ad602183615d59565b91507f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f60008301527f77000000000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b6000615213601883615d59565b91507f46554c4352554d3a207769746864726177206661696c656400000000000000006000830152602082019050919050565b6000615253602083615d59565b91507f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726000830152602082019050919050565b6000615293601483615d59565b91507f696e73756666696369656e742062616c616e63650000000000000000000000006000830152602082019050919050565b60006152d3601f83615d59565b91507f7769746864726177206d7573742062652067726561746572207468616e2030006000830152602082019050919050565b6000615313602583615d59565b91507f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008301527f64726573730000000000000000000000000000000000000000000000000000006020830152604082019050919050565b6000615379601283615d59565b91507f696e73756666696369656e742066756e647300000000000000000000000000006000830152602082019050919050565b60006153b9602483615d59565b91507f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008301527f72657373000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b600061541f601e83615d59565b91507f6465706f736974206d7573742062652067726561746572207468616e203000006000830152602082019050919050565b600061545f601683615d59565b91507f46554c4352554d3a20737570706c79206661696c6564000000000000000000006000830152602082019050919050565b600061549f602a83615d59565b91507f5361666545524332303a204552433230206f7065726174696f6e20646964206e60008301527f6f742073756363656564000000000000000000000000000000000000000000006020830152604082019050919050565b6000615505601f83615d59565b91507f5265656e7472616e637947756172643a207265656e7472616e742063616c6c006000830152602082019050919050565b6000615545603683615d59565b91507f5361666545524332303a20617070726f76652066726f6d206e6f6e2d7a65726f60008301527f20746f206e6f6e2d7a65726f20616c6c6f77616e6365000000000000000000006020830152604082019050919050565b60006155ab601f83615d59565b91507f5361666545524332303a2063616c6c20746f206e6f6e2d636f6e7472616374006000830152602082019050919050565b60006155eb601f83615d59565b91507f45524332303a206d696e7420746f20746865207a65726f2061646472657373006000830152602082019050919050565b6000610160830160008301516156376000860182614eea565b50602083015161564a6020860182615784565b50604083015161565d60408601826156d1565b50606083015161567060c0860182615784565b50608083015161568360e0860182615784565b5060a0830151615697610100860182614d71565b5060c08301516156ab610120860182615784565b5060e08301518482036101408601526156c48282614eb1565b9150508091505092915050565b6080820160008201516156e76000850182614e62565b5060208201516156fa6020850182614ef9565b50604082015161570d6040850182614f08565b5060608201516157206060850182615784565b50505050565b60408201600082015161573c6000850182614d71565b50602082015161574f6020850182615784565b50505050565b60408201600082015161576b6000850182614d71565b50602082015161577e6020850182615784565b50505050565b61578d81615e02565b82525050565b61579c81615e02565b82525050565b6157ab81615e0c565b82525050565b60006157bd8284614e80565b915081905092915050565b60006020820190506157dd6000830184614d80565b92915050565b60006040820190506157f86000830185614d80565b6158056020830184614d80565b9392505050565b60006060820190506158216000830186614d80565b61582e6020830185614d80565b61583b6040830184615793565b949350505050565b60006040820190506158586000830185614d80565b6158656020830184615793565b9392505050565b60006060820190506158816000830186614d80565b61588e6020830185615793565b61589b6040830184614f26565b949350505050565b600060408201905081810360008301526158bd8185614e04565b905081810360208301526158d18184614d8f565b90509392505050565b60006020820190506158ef6000830184614e71565b92915050565b600060208201905061590a6000830184614f17565b92915050565b6000602082019050818103600083015261592a8184614f35565b905092915050565b6000602082019050818103600083015261594b81614f6e565b9050919050565b6000602082019050818103600083015261596b81614fd4565b9050919050565b6000602082019050818103600083015261598b81615014565b9050919050565b600060208201905081810360008301526159ab8161507a565b9050919050565b600060208201905081810360008301526159cb816150e0565b9050919050565b600060208201905081810360008301526159eb81615120565b9050919050565b60006020820190508181036000830152615a0b81615160565b9050919050565b60006020820190508181036000830152615a2b816151a0565b9050919050565b60006020820190508181036000830152615a4b81615206565b9050919050565b60006020820190508181036000830152615a6b81615246565b9050919050565b60006020820190508181036000830152615a8b81615286565b9050919050565b60006020820190508181036000830152615aab816152c6565b9050919050565b60006020820190508181036000830152615acb81615306565b9050919050565b60006020820190508181036000830152615aeb8161536c565b9050919050565b60006020820190508181036000830152615b0b816153ac565b9050919050565b60006020820190508181036000830152615b2b81615412565b9050919050565b60006020820190508181036000830152615b4b81615452565b9050919050565b60006020820190508181036000830152615b6b81615492565b9050919050565b60006020820190508181036000830152615b8b816154f8565b9050919050565b60006020820190508181036000830152615bab81615538565b9050919050565b60006020820190508181036000830152615bcb8161559e565b9050919050565b60006020820190508181036000830152615beb816155de565b9050919050565b6000606082019050615c076000830185615755565b615c146040830184615793565b9392505050565b6000602082019050615c306000830184615793565b92915050565b6000602082019050615c4b60008301846157a2565b92915050565b6000604051905081810181811067ffffffffffffffff82111715615c7457600080fd5b8060405250919050565b600067ffffffffffffffff821115615c9557600080fd5b601f19601f8301169050602081019050919050565b6000819050602082019050919050565b6000819050602082019050919050565b600081519050919050565b600081519050919050565b600081519050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b6000602082019050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b600082825260208201905092915050565b6000615d7582615de2565b9050919050565b60008115159050919050565b6000819050615d9682615eb7565b919050565b6000819050615da982615ec4565b919050565b6000819050615dbc82615ed1565b919050565b6000819050615dcf82615ede565b919050565b600061ffff82169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600060ff82169050919050565b6000615e2482615d88565b9050919050565b6000615e3682615d9b565b9050919050565b6000615e4882615dae565b9050919050565b6000615e5a82615dc1565b9050919050565b6000615e6c82615dd4565b9050919050565b60005b83811015615e91578082015181840152602081019050615e76565b83811115615ea0576000848401525b50505050565b6000601f19601f8301169050919050565b60028110615ec157fe5b50565b60018110615ece57fe5b50565b60018110615edb57fe5b50565b60058110615ee857fe5b50565b615ef481615d6a565b8114615eff57600080fd5b50565b615f0b81615d7c565b8114615f1657600080fd5b50565b615f2281615e02565b8114615f2d57600080fd5b5056fe45524332303a207472616e7366657220616d6f756e7420657863656564732062616c616e636545524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa365627a7a723158205d63a9aed02232ef2d927eae21be871f5592c3c5313194edd27b325c3818c3b76c6578706572696d656e74616cf564736f6c634300050c0040

Deployed Bytecode

0x608060405234801561001057600080fd5b50600436106103ba5760003560e01c80638da5cb5b116101f4578063b69d04561161011a578063e849d659116100ad578063f69e20461161007c578063f69e204614610aa7578063f7c1ec7714610ac5578063f82ce27d14610ae3578063fc0c546a14610b01576103ba565b8063e849d65914610a35578063f2fde38b14610a51578063f5a41dea14610a6d578063f5ff191614610a8b576103ba565b8063cf8ca426116100e9578063cf8ca426146109ab578063d54e3244146109c9578063d9d7858a146109e7578063dd62ed3e14610a05576103ba565b8063b69d045614610937578063b69ef8a814610955578063b6b55f2514610973578063bbf316441461098f576103ba565b8063a03e4bc311610192578063a9059cbb11610161578063a9059cbb146108b1578063a9de245b146108e1578063b098fc80146108fd578063b30d0bb21461091b576103ba565b8063a03e4bc314610827578063a160176d14610845578063a457c2d714610863578063a728797114610893576103ba565b80638f9225ca116101ce5780638f9225ca146107c557806395d89b41146107e357806399b71d5c146108015780639ff011b91461080b576103ba565b80638da5cb5b1461076b5780638e4ec6ef146107895780638f32d59b146107a7576103ba565b806346357473116102e457806370a08231116102775780637d7c2a1c116102465780637d7c2a1c1461070b5780638124955c14610715578063812adb0614610731578063819faf7b1461074d576103ba565b806370a08231146106955780637137ef99146106c5578063715018a6146106e357806377c7b8fc146106ed576103ba565b806361c1ec55116102b357806361c1ec551461062357806365aab7491461064157806367e4b7401461065d5780636f3a08e914610679576103ba565b806346357473146105af57806356cc9378146105cb57806357ded9c9146105e757806358782c2114610605576103ba565b806318160ddd1161035c578063313ce5671161032b578063313ce56714610527578063395093511461054557806339c0a7e11461057557806341c57c8d14610593576103ba565b806318160ddd146104a157806319c13d54146104bf57806323b872dd146104db5780632e1a7d4d1461050b576103ba565b8063085d488311610398578063085d488314610417578063095ea7b3146104355780630eb2a2671461046557806316f0115b14610483576103ba565b806306636c1c146103bf57806306a3fe59146103db57806306fdde03146103f9575b600080fd5b6103d960048036036103d49190810190614cf3565b610b1f565b005b6103e3610b72565b6040516103f091906157c8565b60405180910390f35b610401610b98565b60405161040e9190615910565b60405180910390f35b61041f610c3a565b60405161042c91906158f5565b60405180910390f35b61044f600480360361044a9190810190614bd6565b610c4d565b60405161045c91906158da565b60405180910390f35b61046d610c6b565b60405161047a9190615c1b565b60405180910390f35b61048b610d1d565b6040516104989190615c1b565b60405180910390f35b6104a9610d23565b6040516104b69190615c1b565b60405180910390f35b6104d960048036036104d49190810190614af9565b610d2d565b005b6104f560048036036104f09190810190614b87565b610db8565b60405161050291906158da565b60405180910390f35b61052560048036036105209190810190614cf3565b610e91565b005b61052f61123b565b60405161053c9190615c36565b60405180910390f35b61055f600480360361055a9190810190614bd6565b611252565b60405161056c91906158da565b60405180910390f35b61057d611305565b60405161058a9190615c1b565b60405180910390f35b6105ad60048036036105a89190810190614cf3565b6113f5565b005b6105c960048036036105c49190810190614af9565b611448565b005b6105e560048036036105e09190810190614cf3565b6114d3565b005b6105ef611526565b6040516105fc91906157c8565b60405180910390f35b61060d61154c565b60405161061a91906157c8565b60405180910390f35b61062b611572565b6040516106389190615c1b565b60405180910390f35b61065b60048036036106569190810190614cf3565b611624565b005b61067760048036036106729190810190614cf3565b611677565b005b610693600480360361068e9190810190614af9565b6116ca565b005b6106af60048036036106aa9190810190614af9565b611755565b6040516106bc9190615c1b565b60405180910390f35b6106cd61179d565b6040516106da9190615c1b565b60405180910390f35b6106eb611810565b005b6106f5611918565b6040516107029190615c1b565b60405180910390f35b61071361195a565b005b61072f600480360361072a9190810190614cf3565b611aa0565b005b61074b60048036036107469190810190614af9565b611af3565b005b610755611b7e565b60405161076291906157c8565b60405180910390f35b610773611ba4565b60405161078091906157c8565b60405180910390f35b610791611bce565b60405161079e91906157c8565b60405180910390f35b6107af611bf4565b6040516107bc91906158da565b60405180910390f35b6107cd611c53565b6040516107da9190615c1b565b60405180910390f35b6107eb611d27565b6040516107f89190615910565b60405180910390f35b610809611dc9565b005b61082560048036036108209190810190614cf3565b611fec565b005b61082f61203d565b60405161083c91906157c8565b60405180910390f35b61084d612063565b60405161085a91906158f5565b60405180910390f35b61087d60048036036108789190810190614bd6565b6121cf565b60405161088a91906158da565b60405180910390f35b61089b61229c565b6040516108a89190615c1b565b60405180910390f35b6108cb60048036036108c69190810190614bd6565b612388565b6040516108d891906158da565b60405180910390f35b6108fb60048036036108f69190810190614af9565b6123a6565b005b610905612431565b6040516109129190615c1b565b60405180910390f35b61093560048036036109309190810190614cf3565b612505565b005b61093f612558565b60405161094c91906157c8565b60405180910390f35b61095d61257e565b60405161096a9190615c1b565b60405180910390f35b61098d60048036036109889190810190614cf3565b612630565b005b6109a960048036036109a49190810190614af9565b612794565b005b6109b361281f565b6040516109c09190615c1b565b60405180910390f35b6109d16128d1565b6040516109de9190615c1b565b60405180910390f35b6109ef6129a5565b6040516109fc9190615c1b565b60405180910390f35b610a1f6004803603610a1a9190810190614b4b565b6129ab565b604051610a2c9190615c1b565b60405180910390f35b610a4f6004803603610a4a9190810190614cf3565b612a32565b005b610a6b6004803603610a669190810190614af9565b612a85565b005b610a75612ad8565b604051610a829190615c1b565b60405180910390f35b610aa56004803603610aa09190810190614af9565b612ba3565b005b610aaf612c2e565b604051610abc91906157c8565b60405180910390f35b610acd612c54565b604051610ada91906157c8565b60405180910390f35b610aeb612cfb565b604051610af891906157c8565b60405180910390f35b610b09612da2565b604051610b1691906157c8565b60405180910390f35b610b27611bf4565b610b66576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b5d90615a52565b60405180910390fd5b610b6f81612dc8565b50565b600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b606060038054600181600116156101000203166002900480601f016020809104026020016040519081016040528092919081815260200182805460018160011615610100020316600290048015610c305780601f10610c0557610100808354040283529160200191610c30565b820191906000526020600020905b815481529060010190602001808311610c1357829003601f168201915b5050505050905090565b601260149054906101000a900460ff1681565b6000610c61610c5a613002565b848461300a565b6001905092915050565b6000600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401610cc891906157c8565b60206040518083038186803b158015610ce057600080fd5b505afa158015610cf4573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250610d189190810190614d1c565b905090565b60085481565b6000600254905090565b610d35611bf4565b610d74576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d6b90615a52565b60405180910390fd5b80600d60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6000610dc58484846131d5565b610e8684610dd1613002565b610e8185604051806060016040528060288152602001615f5760289139600160008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000610e37613002565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461345f9092919063ffffffff16565b61300a565b600190509392505050565b60016006600082825401925050819055506000600654905060008211610eec576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ee390615a92565b60405180910390fd5b6000610ef733611755565b905080831115610f3c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f3390615a72565b60405180910390fd5b610f4461179d565b6008819055506000610f75600254610f67866008546134ba90919063ffffffff16565b61352a90919063ffffffff16565b9050610fff846040518060400160405280601d81526020017f72656465656d20616d6f756e7420657863656564732062616c616e63650000008152506000803373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461345f9092919063ffffffff16565b6000803373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506110568460025461357490919063ffffffff16565b600281905550600073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef866040516110ba9190615c1b565b60405180910390a36000600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b815260040161111f91906157c8565b60206040518083038186803b15801561113757600080fd5b505afa15801561114b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525061116f9190810190614d1c565b9050818110156111955761119461118f828461357490919063ffffffff16565b6135be565b5b6111e23383600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166137349092919063ffffffff16565b6111ea61179d565b6008819055505050506006548114611237576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161122e90615b72565b60405180910390fd5b5050565b6000600560009054906101000a900460ff16905090565b60006112fb61125f613002565b846112f68560016000611270613002565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546137d390919063ffffffff16565b61300a565b6001905092915050565b600061130f614850565b600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663c190c2ec60405180604001604052803073ffffffffffffffffffffffffffffffffffffffff16815260200160008152506010546040518363ffffffff1660e01b8152600401611399929190615bf2565b604080518083038186803b1580156113b057600080fd5b505afa1580156113c4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506113e89190810190614cca565b9050806020015191505090565b6113fd611bf4565b61143c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161143390615a52565b60405180910390fd5b61144581613828565b50565b611450611bf4565b61148f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161148690615a52565b60405180910390fd5b80601160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6114db611bf4565b61151a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161151190615a52565b60405180910390fd5b61152381613a62565b50565b601160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b81526004016115cf91906157c8565b60206040518083038186803b1580156115e757600080fd5b505afa1580156115fb573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525061161f9190810190614d1c565b905090565b61162c611bf4565b61166b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161166290615a52565b60405180910390fd5b61167481613af2565b50565b61167f611bf4565b6116be576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116b590615a52565b60405180910390fd5b6116c781613b8e565b50565b6116d2611bf4565b611711576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161170890615a52565b60405180910390fd5b80601260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b600061180b6117aa61257e565b6117fd6117b561281f565b6117ef6117c0611305565b6117e16117cb612ad8565b6117d361229c565b6137d390919063ffffffff16565b6137d390919063ffffffff16565b6137d390919063ffffffff16565b6137d390919063ffffffff16565b905090565b611818611bf4565b611857576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161184e90615a52565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff16600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a36000600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b60008061192361179d565b9050611954600254611946670de0b6b3a7640000846134ba90919063ffffffff16565b61352a90919063ffffffff16565b91505090565b6000611964612063565b9050601260149054906101000a900460ff16600481111561198157fe5b81600481111561198d57fe5b1461199b5761199a613c34565b5b60006119a561257e565b1115611a7a57600160048111156119b857fe5b8160048111156119c457fe5b14156119df576119da6119d561257e565b612dc8565b611a79565b6004808111156119eb57fe5b8160048111156119f757fe5b1415611a1257611a0d611a0861257e565b613cef565b611a78565b60026004811115611a1f57fe5b816004811115611a2b57fe5b1415611a4657611a41611a3c61257e565b613de3565b611a77565b60036004811115611a5357fe5b816004811115611a5f57fe5b1415611a7657611a75611a7061257e565b613af2565b5b5b5b5b5b80601260146101000a81548160ff02191690836004811115611a9857fe5b021790555050565b611aa8611bf4565b611ae7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ade90615a52565b60405180910390fd5b611af081613cef565b50565b611afb611bf4565b611b3a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b3190615a52565b60405180910390fd5b80600c60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16611c37613002565b73ffffffffffffffffffffffffffffffffffffffff1614905090565b6000601260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166040518263ffffffff1660e01b8152600401611cd291906157c8565b60206040518083038186803b158015611cea57600080fd5b505afa158015611cfe573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250611d229190810190614d1c565b905090565b606060048054600181600116156101000203166002900480601f016020809104026020016040519081016040528092919081815260200182805460018160011615610100020316600290048015611dbf5780601f10611d9457610100808354040283529160200191611dbf565b820191906000526020600020905b815481529060010190602001808311611da257829003601f168201915b5050505050905090565b611e58600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff167fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16613ed59092919063ffffffff16565b611ee7600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff167fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16613ed59092919063ffffffff16565b611f5b611ef2612cfb565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16613ed59092919063ffffffff16565b611fea600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff167fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16613ed59092919063ffffffff16565b565b611ff4611bf4565b612033576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161202a90615a52565b60405180910390fd5b8060108190555050565b600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000806000806000601160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663d88be3c0600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166040518263ffffffff1660e01b81526004016120e891906157c8565b60006040518083038186803b15801561210057600080fd5b505afa158015612114573d6000803e3d6000fd5b505050506040513d6000823e3d601f19601f8201168201806040525061213d9190810190614c3b565b945094509450945050600080905080851115612157578490505b80841115612163578390505b8083111561216f578290505b8082111561217b578190505b60008090508582141561219157600290506121c3565b848214156121a257600490506121c2565b838214156121b357600390506121c1565b828214156121c057600190505b5b5b5b80965050505050505090565b60006122926121dc613002565b8461228d85604051806060016040528060258152602001615f7f6025913960016000612206613002565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461345f9092919063ffffffff16565b61300a565b6001905092915050565b6000806122a7611572565b905060008111156123815761237e670de0b6b3a7640000612370600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663182df0f56040518163ffffffff1660e01b815260040160206040518083038186803b15801561232957600080fd5b505afa15801561233d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506123619190810190614d1c565b846134ba90919063ffffffff16565b61352a90919063ffffffff16565b90505b8091505090565b600061239c612395613002565b84846131d5565b6001905092915050565b6123ae611bf4565b6123ed576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123e490615a52565b60405180910390fd5b80600e60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6000600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166040518263ffffffff1660e01b81526004016124b091906157c8565b60206040518083038186803b1580156124c857600080fd5b505afa1580156124dc573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506125009190810190614d1c565b905090565b61250d611bf4565b61254c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161254390615a52565b60405180910390fd5b6125558161404c565b50565b601260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b81526004016125db91906157c8565b60206040518083038186803b1580156125f357600080fd5b505afa158015612607573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525061262b9190810190614d1c565b905090565b6001600660008282540192505081905550600060065490506000821161268b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161268290615b12565b60405180910390fd5b61269361179d565b6008819055506126e8333084600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166140f2909392919063ffffffff16565b6000809050600060085414156127075782905082600881905550612733565b612730600854612722600254866134ba90919063ffffffff16565b61352a90919063ffffffff16565b90505b61273b61179d565b60088190555061274b3382614194565b506006548114612790576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161278790615b72565b60405180910390fd5b5050565b61279c611bf4565b6127db576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127d290615a52565b60405180910390fd5b80600b60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6000600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b815260040161287c91906157c8565b60206040518083038186803b15801561289457600080fd5b505afa1580156128a8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506128cc9190810190614d1c565b905090565b6000600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166040518263ffffffff1660e01b815260040161295091906157c8565b60206040518083038186803b15801561296857600080fd5b505afa15801561297c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506129a09190810190614d1c565b905090565b60105481565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b612a3a611bf4565b612a79576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a7090615a52565b60405180910390fd5b612a8281613de3565b50565b612a8d611bf4565b612acc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ac390615a52565b60405180910390fd5b612ad58161431c565b50565b600080612ae3610c6b565b90506000811115612b9c57600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166306b3efd6306040518263ffffffff1660e01b8152600401612b4991906157c8565b60206040518083038186803b158015612b6157600080fd5b505afa158015612b75573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250612b999190810190614d1c565b90505b8091505090565b612bab611bf4565b612bea576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612be190615a52565b60405180910390fd5b80600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16630261bf8b6040518163ffffffff1660e01b815260040160206040518083038186803b158015612cbe57600080fd5b505afa158015612cd2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250612cf69190810190614b22565b905090565b6000600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ed6ff7606040518163ffffffff1660e01b815260040160206040518083038186803b158015612d6557600080fd5b505afa158015612d79573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250612d9d9190810190614b22565b905090565b600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60606001604051908082528060200260200182016040528015612e0557816020015b612df261486c565b815260200190600190039081612dea5790505b50905060405180604001604052803073ffffffffffffffffffffffffffffffffffffffff168152602001600081525081600081518110612e4157fe5b6020026020010181905250612e5461489c565b6040518060800160405280600115158152602001600080811115612e7457fe5b8152602001600080811115612e8557fe5b8152602001848152509050612e986148da565b600081600001906001811115612eaa57fe5b90816001811115612eb757fe5b815250506000816020018181525050818160400181905250601054816060018181525050308160a0019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505060606001604051908082528060200260200182016040528015612f5057816020015b612f3d614946565b815260200190600190039081612f355790505b5090508181600081518110612f6157fe5b6020026020010181905250600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a67a6a4585836040518363ffffffff1660e01b8152600401612fc99291906158a3565b600060405180830381600087803b158015612fe357600080fd5b505af1158015612ff7573d6000803e3d6000fd5b505050505050505050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141561307a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161307190615af2565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156130ea576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016130e190615992565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040516131c89190615c1b565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415613245576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161323c90615ab2565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156132b5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016132ac90615932565b60405180910390fd5b61332081604051806060016040528060268152602001615f31602691396000808773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461345f9092919063ffffffff16565b6000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506133b3816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546137d390919063ffffffff16565b6000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516134529190615c1b565b60405180910390a3505050565b60008383111582906134a7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161349e9190615910565b60405180910390fd5b5060008385039050809150509392505050565b6000808314156134cd5760009050613524565b60008284029050828482816134de57fe5b041461351f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161351690615a12565b60405180910390fd5b809150505b92915050565b600061356c83836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f00000000000081525061444c565b905092915050565b60006135b683836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f77000081525061345f565b905092915050565b600260048111156135cb57fe5b601260149054906101000a900460ff1660048111156135e657fe5b14156135f6576135f58161404c565b5b6003600481111561360357fe5b601260149054906101000a900460ff16600481111561361e57fe5b1415613678578061362d61281f565b101561366e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161366590615ad2565b60405180910390fd5b61367781613a62565b5b6001600481111561368557fe5b601260149054906101000a900460ff1660048111156136a057fe5b14156136fa57806136af611305565b10156136f0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016136e790615ad2565b60405180910390fd5b6136f981613828565b5b60048081111561370657fe5b601260149054906101000a900460ff16600481111561372157fe5b14156137315761373081613b8e565b5b50565b6137ce838473ffffffffffffffffffffffffffffffffffffffff1663a9059cbb905060e01b848460405160240161376c929190615843565b604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff83818316178352505050506144ad565b505050565b60008082840190508381101561381e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613815906159d2565b60405180910390fd5b8091505092915050565b6060600160405190808252806020026020018201604052801561386557816020015b61385261486c565b81526020019060019003908161384a5790505b50905060405180604001604052803073ffffffffffffffffffffffffffffffffffffffff1681526020016000815250816000815181106138a157fe5b60200260200101819052506138b461489c565b60405180608001604052806000151581526020016000808111156138d457fe5b81526020016000808111156138e557fe5b81526020018481525090506138f86148da565b60018160000190600181111561390a57fe5b9081600181111561391757fe5b815250506000816020018181525050818160400181905250601054816060018181525050308160a0019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050606060016040519080825280602002602001820160405280156139b057816020015b61399d614946565b8152602001906001900390816139955790505b50905081816000815181106139c157fe5b6020026020010181905250600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a67a6a4585836040518363ffffffff1660e01b8152600401613a299291906158a3565b600060405180830381600087803b158015613a4357600080fd5b505af1158015613a57573d6000803e3d6000fd5b505050505050505050565b600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663db006a75826040518263ffffffff1660e01b8152600401613abd9190615c1b565b600060405180830381600087803b158015613ad757600080fd5b505af1158015613aeb573d6000803e3d6000fd5b5050505050565b613afa612c54565b73ffffffffffffffffffffffffffffffffffffffff1663d2d0e066600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff168360006040518463ffffffff1660e01b8152600401613b599392919061586c565b600060405180830381600087803b158015613b7357600080fd5b505af1158015613b87573d6000803e3d6000fd5b5050505050565b6000613b98610c6b565b90506000613ba4612ad8565b905082811015613be9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613be090615ad2565b60405180910390fd5b6000613c236001613c1584613c0788886134ba90919063ffffffff16565b61352a90919063ffffffff16565b6137d390919063ffffffff16565b9050613c2e8161461f565b50505050565b6000613c3e611572565b90506000811115613c6d57613c6c613c676001613c5961229c565b61357490919063ffffffff16565b61404c565b5b613c75611305565b90506000811115613c9157613c90613c8b6128d1565b613828565b5b613c99610c6b565b90506000811115613cc857613cc7613cc26001613cb4611c53565b61357490919063ffffffff16565b613b8e565b5b613cd061281f565b90506000811115613cec57613ceb613ce6612431565b613a62565b5b50565b6000600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166340c10f1930846040518363ffffffff1660e01b8152600401613d4e929190615843565b602060405180830381600087803b158015613d6857600080fd5b505af1158015613d7c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250613da09190810190614d1c565b11613de0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613dd790615b32565b60405180910390fd5b50565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a0712d68836040518263ffffffff1660e01b8152600401613e409190615c1b565b602060405180830381600087803b158015613e5a57600080fd5b505af1158015613e6e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250613e929190810190614d1c565b14613ed2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613ec9906159b2565b60405180910390fd5b50565b6000811480613f6e575060008373ffffffffffffffffffffffffffffffffffffffff1663dd62ed3e30856040518363ffffffff1660e01b8152600401613f1c9291906157e3565b60206040518083038186803b158015613f3457600080fd5b505afa158015613f48573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250613f6c9190810190614d1c565b145b613fad576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613fa490615b92565b60405180910390fd5b614047838473ffffffffffffffffffffffffffffffffffffffff1663095ea7b3905060e01b8484604051602401613fe5929190615843565b604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff83818316178352505050506144ad565b505050565b6000614056611572565b9050600061406261229c565b9050828110156140a7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161409e90615ad2565b60405180910390fd5b60006140e160016140d3846140c588886134ba90919063ffffffff16565b61352a90919063ffffffff16565b6137d390919063ffffffff16565b90506140ec81614713565b50505050565b61418e848573ffffffffffffffffffffffffffffffffffffffff166323b872dd905060e01b85858560405160240161412c9392919061580c565b604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff83818316178352505050506144ad565b50505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415614204576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016141fb90615bd2565b60405180910390fd5b614219816002546137d390919063ffffffff16565b600281905550614270816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546137d390919063ffffffff16565b6000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516143109190615c1b565b60405180910390a35050565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141561438c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161438390615972565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a380600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60008083118290614493576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161448a9190615910565b60405180910390fd5b50600083858161449f57fe5b049050809150509392505050565b6144cc8273ffffffffffffffffffffffffffffffffffffffff16614805565b61450b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161450290615bb2565b60405180910390fd5b600060608373ffffffffffffffffffffffffffffffffffffffff168360405161453491906157b1565b6000604051808303816000865af19150503d8060008114614571576040519150601f19603f3d011682016040523d82523d6000602084013e614576565b606091505b5091509150816145bb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016145b2906159f2565b60405180910390fd5b60008151111561461957808060200190516145d99190810190614c12565b614618576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161460f90615b52565b60405180910390fd5b5b50505050565b6000600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16639dc29fac30846040518363ffffffff1660e01b815260040161467e929190615843565b602060405180830381600087803b15801561469857600080fd5b505af11580156146ac573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506146d09190810190614d1c565b11614710576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161470790615a32565b60405180910390fd5b50565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663db006a75836040518263ffffffff1660e01b81526004016147709190615c1b565b602060405180830381600087803b15801561478a57600080fd5b505af115801561479e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506147c29190810190614d1c565b14614802576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016147f990615952565b60405180910390fd5b50565b60008060007fc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a47060001b9050833f91506000801b82141580156148475750808214155b92505050919050565b6040518060400160405280600015158152602001600081525090565b6040518060400160405280600073ffffffffffffffffffffffffffffffffffffffff168152602001600081525090565b60405180608001604052806000151581526020016000808111156148bc57fe5b81526020016000808111156148cd57fe5b8152602001600081525090565b604051806101000160405280600060018111156148f357fe5b8152602001600081526020016149076149b2565b81526020016000815260200160008152602001600073ffffffffffffffffffffffffffffffffffffffff16815260200160008152602001606081525090565b6040518061010001604052806000600181111561495f57fe5b8152602001600081526020016149736149b2565b81526020016000815260200160008152602001600073ffffffffffffffffffffffffffffffffffffffff16815260200160008152602001606081525090565b60405180608001604052806000151581526020016000808111156149d257fe5b81526020016000808111156149e357fe5b8152602001600081525090565b6000813590506149ff81615eeb565b92915050565b600081519050614a1481615eeb565b92915050565b600081519050614a2981615f02565b92915050565b600082601f830112614a4057600080fd5b8151614a53614a4e82615c7e565b615c51565b91508082526020830160208301858383011115614a6f57600080fd5b614a7a838284615e73565b50505092915050565b600060408284031215614a9557600080fd5b614a9f6040615c51565b90506000614aaf84828501614a1a565b6000830152506020614ac384828501614ae4565b60208301525092915050565b600081359050614ade81615f19565b92915050565b600081519050614af381615f19565b92915050565b600060208284031215614b0b57600080fd5b6000614b19848285016149f0565b91505092915050565b600060208284031215614b3457600080fd5b6000614b4284828501614a05565b91505092915050565b60008060408385031215614b5e57600080fd5b6000614b6c858286016149f0565b9250506020614b7d858286016149f0565b9150509250929050565b600080600060608486031215614b9c57600080fd5b6000614baa868287016149f0565b9350506020614bbb868287016149f0565b9250506040614bcc86828701614acf565b9150509250925092565b60008060408385031215614be957600080fd5b6000614bf7858286016149f0565b9250506020614c0885828601614acf565b9150509250929050565b600060208284031215614c2457600080fd5b6000614c3284828501614a1a565b91505092915050565b600080600080600060a08688031215614c5357600080fd5b600086015167ffffffffffffffff811115614c6d57600080fd5b614c7988828901614a2f565b9550506020614c8a88828901614ae4565b9450506040614c9b88828901614ae4565b9350506060614cac88828901614ae4565b9250506080614cbd88828901614ae4565b9150509295509295909350565b600060408284031215614cdc57600080fd5b6000614cea84828501614a83565b91505092915050565b600060208284031215614d0557600080fd5b6000614d1384828501614acf565b91505092915050565b600060208284031215614d2e57600080fd5b6000614d3c84828501614ae4565b91505092915050565b6000614d51838361561e565b905092915050565b6000614d658383615726565b60408301905092915050565b614d7a81615d6a565b82525050565b614d8981615d6a565b82525050565b6000614d9a82615cca565b614da48185615d1b565b935083602082028501614db685615caa565b8060005b85811015614df25784840389528151614dd38582614d45565b9450614dde83615d01565b925060208a01995050600181019050614dba565b50829750879550505050505092915050565b6000614e0f82615cd5565b614e198185615d2c565b9350614e2483615cba565b8060005b83811015614e55578151614e3c8882614d59565b9750614e4783615d0e565b925050600181019050614e28565b5085935050505092915050565b614e6b81615d7c565b82525050565b614e7a81615d7c565b82525050565b6000614e8b82615ceb565b614e958185615d4e565b9350614ea5818560208601615e73565b80840191505092915050565b6000614ebc82615ce0565b614ec68185615d3d565b9350614ed6818560208601615e73565b614edf81615ea6565b840191505092915050565b614ef381615e19565b82525050565b614f0281615e2b565b82525050565b614f1181615e3d565b82525050565b614f2081615e4f565b82525050565b614f2f81615e61565b82525050565b6000614f4082615cf6565b614f4a8185615d59565b9350614f5a818560208601615e73565b614f6381615ea6565b840191505092915050565b6000614f7b602383615d59565b91507f45524332303a207472616e7366657220746f20746865207a65726f206164647260008301527f65737300000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b6000614fe1601983615d59565b91507f434f4d504f554e443a207769746864726177206661696c6564000000000000006000830152602082019050919050565b6000615021602683615d59565b91507f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008301527f64647265737300000000000000000000000000000000000000000000000000006020830152604082019050919050565b6000615087602283615d59565b91507f45524332303a20617070726f766520746f20746865207a65726f20616464726560008301527f73730000000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b60006150ed601783615d59565b91507f434f4d504f554e443a20737570706c79206661696c65640000000000000000006000830152602082019050919050565b600061512d601b83615d59565b91507f536166654d6174683a206164646974696f6e206f766572666c6f7700000000006000830152602082019050919050565b600061516d602083615d59565b91507f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65646000830152602082019050919050565b60006151ad602183615d59565b91507f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f60008301527f77000000000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b6000615213601883615d59565b91507f46554c4352554d3a207769746864726177206661696c656400000000000000006000830152602082019050919050565b6000615253602083615d59565b91507f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726000830152602082019050919050565b6000615293601483615d59565b91507f696e73756666696369656e742062616c616e63650000000000000000000000006000830152602082019050919050565b60006152d3601f83615d59565b91507f7769746864726177206d7573742062652067726561746572207468616e2030006000830152602082019050919050565b6000615313602583615d59565b91507f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008301527f64726573730000000000000000000000000000000000000000000000000000006020830152604082019050919050565b6000615379601283615d59565b91507f696e73756666696369656e742066756e647300000000000000000000000000006000830152602082019050919050565b60006153b9602483615d59565b91507f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008301527f72657373000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b600061541f601e83615d59565b91507f6465706f736974206d7573742062652067726561746572207468616e203000006000830152602082019050919050565b600061545f601683615d59565b91507f46554c4352554d3a20737570706c79206661696c6564000000000000000000006000830152602082019050919050565b600061549f602a83615d59565b91507f5361666545524332303a204552433230206f7065726174696f6e20646964206e60008301527f6f742073756363656564000000000000000000000000000000000000000000006020830152604082019050919050565b6000615505601f83615d59565b91507f5265656e7472616e637947756172643a207265656e7472616e742063616c6c006000830152602082019050919050565b6000615545603683615d59565b91507f5361666545524332303a20617070726f76652066726f6d206e6f6e2d7a65726f60008301527f20746f206e6f6e2d7a65726f20616c6c6f77616e6365000000000000000000006020830152604082019050919050565b60006155ab601f83615d59565b91507f5361666545524332303a2063616c6c20746f206e6f6e2d636f6e7472616374006000830152602082019050919050565b60006155eb601f83615d59565b91507f45524332303a206d696e7420746f20746865207a65726f2061646472657373006000830152602082019050919050565b6000610160830160008301516156376000860182614eea565b50602083015161564a6020860182615784565b50604083015161565d60408601826156d1565b50606083015161567060c0860182615784565b50608083015161568360e0860182615784565b5060a0830151615697610100860182614d71565b5060c08301516156ab610120860182615784565b5060e08301518482036101408601526156c48282614eb1565b9150508091505092915050565b6080820160008201516156e76000850182614e62565b5060208201516156fa6020850182614ef9565b50604082015161570d6040850182614f08565b5060608201516157206060850182615784565b50505050565b60408201600082015161573c6000850182614d71565b50602082015161574f6020850182615784565b50505050565b60408201600082015161576b6000850182614d71565b50602082015161577e6020850182615784565b50505050565b61578d81615e02565b82525050565b61579c81615e02565b82525050565b6157ab81615e0c565b82525050565b60006157bd8284614e80565b915081905092915050565b60006020820190506157dd6000830184614d80565b92915050565b60006040820190506157f86000830185614d80565b6158056020830184614d80565b9392505050565b60006060820190506158216000830186614d80565b61582e6020830185614d80565b61583b6040830184615793565b949350505050565b60006040820190506158586000830185614d80565b6158656020830184615793565b9392505050565b60006060820190506158816000830186614d80565b61588e6020830185615793565b61589b6040830184614f26565b949350505050565b600060408201905081810360008301526158bd8185614e04565b905081810360208301526158d18184614d8f565b90509392505050565b60006020820190506158ef6000830184614e71565b92915050565b600060208201905061590a6000830184614f17565b92915050565b6000602082019050818103600083015261592a8184614f35565b905092915050565b6000602082019050818103600083015261594b81614f6e565b9050919050565b6000602082019050818103600083015261596b81614fd4565b9050919050565b6000602082019050818103600083015261598b81615014565b9050919050565b600060208201905081810360008301526159ab8161507a565b9050919050565b600060208201905081810360008301526159cb816150e0565b9050919050565b600060208201905081810360008301526159eb81615120565b9050919050565b60006020820190508181036000830152615a0b81615160565b9050919050565b60006020820190508181036000830152615a2b816151a0565b9050919050565b60006020820190508181036000830152615a4b81615206565b9050919050565b60006020820190508181036000830152615a6b81615246565b9050919050565b60006020820190508181036000830152615a8b81615286565b9050919050565b60006020820190508181036000830152615aab816152c6565b9050919050565b60006020820190508181036000830152615acb81615306565b9050919050565b60006020820190508181036000830152615aeb8161536c565b9050919050565b60006020820190508181036000830152615b0b816153ac565b9050919050565b60006020820190508181036000830152615b2b81615412565b9050919050565b60006020820190508181036000830152615b4b81615452565b9050919050565b60006020820190508181036000830152615b6b81615492565b9050919050565b60006020820190508181036000830152615b8b816154f8565b9050919050565b60006020820190508181036000830152615bab81615538565b9050919050565b60006020820190508181036000830152615bcb8161559e565b9050919050565b60006020820190508181036000830152615beb816155de565b9050919050565b6000606082019050615c076000830185615755565b615c146040830184615793565b9392505050565b6000602082019050615c306000830184615793565b92915050565b6000602082019050615c4b60008301846157a2565b92915050565b6000604051905081810181811067ffffffffffffffff82111715615c7457600080fd5b8060405250919050565b600067ffffffffffffffff821115615c9557600080fd5b601f19601f8301169050602081019050919050565b6000819050602082019050919050565b6000819050602082019050919050565b600081519050919050565b600081519050919050565b600081519050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b6000602082019050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b600082825260208201905092915050565b6000615d7582615de2565b9050919050565b60008115159050919050565b6000819050615d9682615eb7565b919050565b6000819050615da982615ec4565b919050565b6000819050615dbc82615ed1565b919050565b6000819050615dcf82615ede565b919050565b600061ffff82169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600060ff82169050919050565b6000615e2482615d88565b9050919050565b6000615e3682615d9b565b9050919050565b6000615e4882615dae565b9050919050565b6000615e5a82615dc1565b9050919050565b6000615e6c82615dd4565b9050919050565b60005b83811015615e91578082015181840152602081019050615e76565b83811115615ea0576000848401525b50505050565b6000601f19601f8301169050919050565b60028110615ec157fe5b50565b60018110615ece57fe5b50565b60018110615edb57fe5b50565b60058110615ee857fe5b50565b615ef481615d6a565b8114615eff57600080fd5b50565b615f0b81615d7c565b8114615f1657600080fd5b50565b615f2281615e02565b8114615f2d57600080fd5b5056fe45524332303a207472616e7366657220616d6f756e7420657863656564732062616c616e636545524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa365627a7a723158205d63a9aed02232ef2d927eae21be871f5592c3c5313194edd27b325c3818c3b76c6578706572696d656e74616cf564736f6c634300050c0040

Deployed Bytecode Sourcemap

13652:11697:0:-;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;13652:11697:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;24983:87;;;;;;;;;;;;;;;;:::i;:::-;;13980:24;;;:::i;:::-;;;;;;;;;;;;;;;;5991:83;;;:::i;:::-;;;;;;;;;;;;;;;;14203:36;;;:::i;:::-;;;;;;;;;;;;;;;;3011:152;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;19656:116;;;:::i;:::-;;;;;;;;;;;;;;;;13824:19;;;:::i;:::-;;;;;;;;;;;;;;;;2494:91;;;:::i;:::-;;;;;;;;;;;;;;;;15455:96;;;;;;;;;;;;;;;;:::i;:::-;;3169:304;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;16421:897;;;;;;;;;;;;;;;;:::i;:::-;;6173:83;;;:::i;:::-;;;;;;;;;;;;;;;;3479:210;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;18781:166;;;:::i;:::-;;;;;;;;;;;;;;;;24886:91;;;;;;;;;;;;;;;;:::i;:::-;;14958:85;;;;;;;;;;;;;;;;:::i;:::-;;24794:88;;;;;;;;;;;;;;;;:::i;:::-;;14059:18;;;:::i;:::-;;;;;;;;;;;;;;;;13901:22;;;:::i;:::-;;;;;;;;;;;;;;;;18951:120;;;:::i;:::-;;;;;;;;;;;;;;;;25074:82;;;;;;;;;;;;;;;;:::i;:::-;;24685:105;;;;;;;;;;;;;;;;:::i;:::-;;15659:89;;;;;;;;;;;;;;;;:::i;:::-;;2591:110;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;24191:217;;;:::i;:::-;;;;;;;;;;;;;;;;1769:140;;;:::i;:::-;;24414:154;;;:::i;:::-;;;;;;;;;;;;;;;;20018:547;;;:::i;:::-;;25160:90;;;;;;;;;;;;;;;;:::i;:::-;;15362:89;;;;;;;;;;;;;;;;:::i;:::-;;13928:19;;;:::i;:::-;;;;;;;;;;;;;;;;1472:79;;;:::i;:::-;;;;;;;;;;;;;;;;14009:19;;;:::i;:::-;;;;;;;;;;;;;;;;1669:94;;;:::i;:::-;;;;;;;;;;;;;;;;19327:118;;;:::i;:::-;;;;;;;;;;;;;;;;6080:87;;;:::i;:::-;;;;;;;;;;;;;;;;18294:253;;;:::i;:::-;;15261:97;;;;;;;;;;;;;;;;:::i;:::-;;13952:23;;;:::i;:::-;;;;;;;;;;;;;;;;17324:706;;;:::i;:::-;;;;;;;;;;;;;;;;3695:261;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;19075:248;;;:::i;:::-;;;;;;;;;;;;;;;;2707:158;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;15555:100;;;;;;;;;;;;;;;;:::i;:::-;;19776:117;;;:::i;:::-;;;;;;;;;;;;;;;;24574:107;;;;;;;;;;;;;;;;:::i;:::-;;14082:19;;;:::i;:::-;;;;;;;;;;;;;;;;18553:107;;;:::i;:::-;;;;;;;;;;;;;;;;15801:548;;;;;;;;;;;;;;;;:::i;:::-;;15047:101;;;;;;;;;;;;;;;;:::i;:::-;;19897:115;;;:::i;:::-;;;;;;;;;;;;;;;;18664:113;;;:::i;:::-;;;;;;;;;;;;;;;;14033:21;;;:::i;:::-;;;;;;;;;;;;;;;;2871:134;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;25254:92;;;;;;;;;;;;;;;;:::i;:::-;;1915:109;;;;;;;;;;;;;;;;:::i;:::-;;19449:203;;;:::i;:::-;;;;;;;;;;;;;;;;15152:105;;;;;;;;;;;;;;;;:::i;:::-;;13873:23;;;:::i;:::-;;;;;;;;;;;;;;;;18036:120;;;:::i;:::-;;;;;;;;;;;;;;;;18160:128;;;:::i;:::-;;;;;;;;;;;;;;;;13848:20;;;:::i;:::-;;;;;;;;;;;;;;;;24983:87;1597:9;:7;:9::i;:::-;1589:54;;;;;;;;;;;;;;;;;;;;;;25045:19;25057:6;25045:11;:19::i;:::-;24983:87;:::o;13980:24::-;;;;;;;;;;;;;:::o;5991:83::-;6028:13;6061:5;6054:12;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5991:83;:::o;14203:36::-;;;;;;;;;;;;;:::o;3011:152::-;3077:4;3094:39;3103:12;:10;:12::i;:::-;3117:7;3126:6;3094:8;:39::i;:::-;3151:4;3144:11;;3011:152;;;;:::o;19656:116::-;19703:7;19733;;;;;;;;;;;19726:25;;;19760:4;19726:40;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;19726:40:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;19726:40:0;;;;;;;101:4:-1;97:9;90:4;84;80:15;76:31;69:5;65:43;126:6;120:4;113:20;0:138;19726:40:0;;;;;;;;;19719:47;;19656:116;:::o;13824:19::-;;;;:::o;2494:91::-;2538:7;2565:12;;2558:19;;2494:91;:::o;15455:96::-;1597:9;:7;:9::i;:::-;1589:54;;;;;;;;;;;;;;;;;;;;;;15535:10;15524:8;;:21;;;;;;;;;;;;;;;;;;15455:96;:::o;3169:304::-;3258:4;3275:36;3285:6;3293:9;3304:6;3275:9;:36::i;:::-;3322:121;3331:6;3339:12;:10;:12::i;:::-;3353:89;3391:6;3353:89;;;;;;;;;;;;;;;;;:11;:19;3365:6;3353:19;;;;;;;;;;;;;;;:33;3373:12;:10;:12::i;:::-;3353:33;;;;;;;;;;;;;;;;:37;;:89;;;;;:::i;:::-;3322:8;:121::i;:::-;3461:4;3454:11;;3169:304;;;;;:::o;16421:897::-;6453:1;6436:13;;:18;;;;;;;;;;;6465:20;6488:13;;6465:36;;16522:1;16512:7;:11;16504:55;;;;;;;;;;;;;;;;;;;;;;16570:16;16589:21;16599:10;16589:9;:21::i;:::-;16570:40;;16638:8;16627:7;:19;;16619:52;;;;;;;;;;;;;;;;;;;;;;16734:22;:20;:22::i;:::-;16727:4;:29;;;;16815:9;16827:37;16851:12;;16828:17;16837:7;16828:4;;:8;;:17;;;;:::i;:::-;16827:23;;:37;;;;:::i;:::-;16815:49;;16901:67;16927:7;16901:67;;;;;;;;;;;;;;;;;:9;:21;16911:10;16901:21;;;;;;;;;;;;;;;;:25;;:67;;;;;:::i;:::-;16877:9;:21;16887:10;16877:21;;;;;;;;;;;;;;;:91;;;;16992:25;17009:7;16992:12;;:16;;:25;;;;:::i;:::-;16977:12;:40;;;;17062:1;17033:41;;17042:10;17033:41;;;17066:7;17033:41;;;;;;;;;;;;;;;17109:9;17128:5;;;;;;;;;;;17121:23;;;17153:4;17121:38;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;17121:38:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;17121:38:0;;;;;;;101:4:-1;97:9;90:4;84;80:15;76:31;69:5;65:43;126:6;120:4;113:20;0:138;17121:38:0;;;;;;;;;17109:50;;17176:1;17172;:5;17168:55;;;17190:23;17204:8;17210:1;17204;:5;;:8;;;;:::i;:::-;17190:13;:23::i;:::-;17168:55;17233:41;17260:10;17272:1;17240:5;;;;;;;;;;;17233:26;;;;:41;;;;;:::i;:::-;17290:22;:20;:22::i;:::-;17283:4;:29;;;;6512:1;;;6548:13;;6532:12;:29;6524:73;;;;;;;;;;;;;;;;;;;;;;16421:897;;:::o;6173:83::-;6214:5;6239:9;;;;;;;;;;;6232:16;;6173:83;:::o;3479:210::-;3559:4;3576:83;3585:12;:10;:12::i;:::-;3599:7;3608:50;3647:10;3608:11;:25;3620:12;:10;:12::i;:::-;3608:25;;;;;;;;;;;;;;;:34;3634:7;3608:34;;;;;;;;;;;;;;;;:38;;:50;;;;:::i;:::-;3576:8;:83::i;:::-;3677:4;3670:11;;3479:210;;;;:::o;18781:166::-;18825:7;18843:14;;:::i;:::-;18865:4;;;;;;;;;;;18860:24;;;18885:22;;;;;;;;18898:4;18885:22;;;;;;18905:1;18885:22;;;18909:6;;18860:56;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;18860:56:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;18860:56:0;;;;;;;101:4:-1;97:9;90:4;84;80:15;76:31;69:5;65:43;126:6;120:4;113:20;0:138;18860:56:0;;;;;;;;;18843:73;;18932:3;:9;;;18925:16;;;18781:166;:::o;24886:91::-;1597:9;:7;:9::i;:::-;1589:54;;;;;;;;;;;;;;;;;;;;;;24950:21;24964:6;24950:13;:21::i;:::-;24886:91;:::o;14958:85::-;1597:9;:7;:9::i;:::-;1589:54;;;;;;;;;;;;;;;;;;;;;;15029:8;15023:3;;:14;;;;;;;;;;;;;;;;;;14958:85;:::o;24794:88::-;1597:9;:7;:9::i;:::-;1589:54;;;;;;;;;;;;;;;;;;;;;;24855:21;24869:6;24855:13;:21::i;:::-;24794:88;:::o;14059:18::-;;;;;;;;;;;;;:::o;13901:22::-;;;;;;;;;;;;;:::o;18951:120::-;18999:7;19031:8;;;;;;;;;;;19024:26;;;19059:4;19024:41;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;19024:41:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;19024:41:0;;;;;;;101:4:-1;97:9;90:4;84;80:15;76:31;69:5;65:43;126:6;120:4;113:20;0:138;19024:41:0;;;;;;;;;19017:48;;18951:120;:::o;25074:82::-;1597:9;:7;:9::i;:::-;1589:54;;;;;;;;;;;;;;;;;;;;;;25131:19;25143:6;25131:11;:19::i;:::-;25074:82;:::o;24685:105::-;1597:9;:7;:9::i;:::-;1589:54;;;;;;;;;;;;;;;;;;;;;;24755:29;24776:7;24755:20;:29::i;:::-;24685:105;:::o;15659:89::-;1597:9;:7;:9::i;:::-;1589:54;;;;;;;;;;;;;;;;;;;;;;15733:9;15726:4;;:16;;;;;;;;;;;;;;;;;;15659:89;:::o;2591:110::-;2648:7;2675:9;:18;2685:7;2675:18;;;;;;;;;;;;;;;;2668:25;;2591:110;;;:::o;24191:217::-;24244:4;24264:138;24392:9;:7;:9::i;:::-;24264:115;24365:13;:11;:13::i;:::-;24264:88;24338:13;:11;:13::i;:::-;24264:61;24301:23;:21;:23::i;:::-;24264:24;:22;:24::i;:::-;:36;;:61;;;;:::i;:::-;:73;;:88;;;;:::i;:::-;:100;;:115;;;;:::i;:::-;:127;;:138;;;;:::i;:::-;24257:145;;24191:217;:::o;1769:140::-;1597:9;:7;:9::i;:::-;1589:54;;;;;;;;;;;;;;;;;;;;;;1868:1;1831:40;;1852:6;;;;;;;;;;;1831:40;;;;;;;;;;;;1899:1;1882:6;;:19;;;;;;;;;;;;;;;;;;1769:140::o;24414:154::-;24467:4;24480:10;24493:22;:20;:22::i;:::-;24480:35;;24529:33;24549:12;;24529:15;24539:4;24529:5;:9;;:15;;;;:::i;:::-;:19;;:33;;;;:::i;:::-;24522:40;;;24414:154;:::o;20018:547::-;20053:18;20074:11;:9;:11::i;:::-;20053:32;;20113:8;;;;;;;;;;;20098:23;;;;;;;;:11;:23;;;;;;;;;20094:60;;20132:14;:12;:14::i;:::-;20094:60;20178:1;20166:9;:7;:9::i;:::-;:13;20162:367;;;20209:11;20194:26;;;;;;;;:11;:26;;;;;;;;;20190:332;;;20233:22;20245:9;:7;:9::i;:::-;20233:11;:22::i;:::-;20190:332;;;20290:14;20275:29;;;;;;;;:11;:29;;;;;;;;;20271:251;;;20317:25;20332:9;:7;:9::i;:::-;20317:14;:25::i;:::-;20271:251;;;20377:15;20362:30;;;;;;;;:11;:30;;;;;;;;;20358:164;;;20405:26;20421:9;:7;:9::i;:::-;20405:15;:26::i;:::-;20358:164;;;20466:11;20451:26;;;;;;;;:11;:26;;;;;;;;;20447:75;;;20490:22;20502:9;:7;:9::i;:::-;20490:11;:22::i;:::-;20447:75;20358:164;20271:251;20190:332;20162:367;20548:11;20537:8;;:22;;;;;;;;;;;;;;;;;;;;;;;;20018:547;:::o;25160:90::-;1597:9;:7;:9::i;:::-;1589:54;;;;;;;;;;;;;;;;;;;;;;25222:22;25237:6;25222:14;:22::i;:::-;25160:90;:::o;15362:89::-;1597:9;:7;:9::i;:::-;1589:54;;;;;;;;;;;;;;;;;;;;;;15436:9;15429:4;;:16;;;;;;;;;;;;;;;;;;15362:89;:::o;13928:19::-;;;;;;;;;;;;;:::o;1472:79::-;1510:7;1537:6;;;;;;;;;;;1530:13;;1472:79;:::o;14009:19::-;;;;;;;;;;;;;:::o;1669:94::-;1709:4;1749:6;;;;;;;;;;;1733:22;;:12;:10;:12::i;:::-;:22;;;1726:29;;1669:94;:::o;19327:118::-;19383:7;19415:4;;;;;;;;;;;19408:22;;;19431:7;;;;;;;;;;;19408:31;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;19408:31:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;19408:31:0;;;;;;;101:4:-1;97:9;90:4;84;80:15;76:31;69:5;65:43;126:6;120:4;113:20;0:138;19408:31:0;;;;;;;;;19401:38;;19327:118;:::o;6080:87::-;6119:13;6152:7;6145:14;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6080:87;:::o;18294:253::-;18334:45;18360:8;;;;;;;;;;;18375:2;18341:5;;;;;;;;;;;18334:25;;;;:45;;;;;:::i;:::-;18388:41;18414:4;;;;;;;;;;;18425:2;18395:5;;;;;;;;;;;18388:25;;;;:41;;;;;:::i;:::-;18438:50;18464:13;:11;:13::i;:::-;18484:2;18445:5;;;;;;;;;;;18438:25;;;;:50;;;;;:::i;:::-;18497:44;18523:7;;;;;;;;;;;18537:2;18504:5;;;;;;;;;;;18497:25;;;;:44;;;;;:::i;:::-;18294:253::o;15261:97::-;1597:9;:7;:9::i;:::-;1589:54;;;;;;;;;;;;;;;;;;;;;;15341:11;15332:6;:20;;;;15261:97;:::o;13952:23::-;;;;;;;;;;;;;:::o;17324:706::-;17366:6;17383:12;17396;17409;17422;17452:3;;;;;;;;;;;17438:28;;;17467:5;;;;;;;;;;;17438:35;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;17438:35:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;17438:35:0;;;;;;39:16:-1;36:1;17:17;2:54;17438:35:0;101:4:-1;97:9;90:4;84;80:15;76:31;69:5;65:43;126:6;120:4;113:20;0:138;17438:35:0;;;;;;;;;17381:92;;;;;;;;;17480:11;17494:1;17480:15;;17513:3;17506:4;:10;17502:43;;;17533:4;17527:10;;17502:43;17562:3;17555:4;:10;17551:43;;;17582:4;17576:10;;17551:43;17611:3;17604:4;:10;17600:43;;;17631:4;17625:10;;17600:43;17660:3;17653:4;:10;17649:43;;;17680:4;17674:10;;17649:43;17700:18;17721:11;17700:32;;17750:4;17743:3;:11;17739:261;;;17779:15;17765:29;;17739:261;;;17819:4;17812:3;:11;17808:192;;;17848:14;17834:28;;17808:192;;;17887:4;17880:3;:11;17876:124;;;17916:11;17902:25;;17876:124;;;17952:4;17945:3;:11;17941:59;;;17981:11;17967:25;;17941:59;17876:124;17808:192;17739:261;18013:11;18006:18;;;;;;;;17324:706;:::o;3695:261::-;3780:4;3797:129;3806:12;:10;:12::i;:::-;3820:7;3829:96;3868:15;3829:96;;;;;;;;;;;;;;;;;:11;:25;3841:12;:10;:12::i;:::-;3829:25;;;;;;;;;;;;;;;:34;3855:7;3829:34;;;;;;;;;;;;;;;;:38;;:96;;;;;:::i;:::-;3797:8;:129::i;:::-;3944:4;3937:11;;3695:261;;;;:::o;19075:248::-;19130:7;19179:9;19191:17;:15;:17::i;:::-;19179:29;;19223:1;19219;:5;19215:88;;;19239:56;19290:4;19239:46;19254:8;;;;;;;;;;;19245:37;;;:39;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;19245:39:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;19245:39:0;;;;;;;101:4:-1;97:9;90:4;84;80:15;76:31;69:5;65:43;126:6;120:4;113:20;0:138;19245:39:0;;;;;;;;;19239:1;:5;;:46;;;;:::i;:::-;:50;;:56;;;;:::i;:::-;19235:60;;19215:88;19316:1;19309:8;;;19075:248;:::o;2707:158::-;2776:4;2793:42;2803:12;:10;:12::i;:::-;2817:9;2828:6;2793:9;:42::i;:::-;2853:4;2846:11;;2707:158;;;;:::o;15555:100::-;1597:9;:7;:9::i;:::-;1589:54;;;;;;;;;;;;;;;;;;;;;;15638:11;15626:9;;:23;;;;;;;;;;;;;;;;;;15555:100;:::o;19776:117::-;19829:7;19861:5;;;;;;;;;;;19854:23;;;19878:8;;;;;;;;;;;19854:33;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;19854:33:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;19854:33:0;;;;;;;101:4:-1;97:9;90:4;84;80:15;76:31;69:5;65:43;126:6;120:4;113:20;0:138;19854:33:0;;;;;;;;;19847:40;;19776:117;:::o;24574:107::-;1597:9;:7;:9::i;:::-;1589:54;;;;;;;;;;;;;;;;;;;;;;24645:30;24667:7;24645:21;:30::i;:::-;24574:107;:::o;14082:19::-;;;;;;;;;;;;;:::o;18553:107::-;18593:7;18623:5;;;;;;;;;;;18616:23;;;18648:4;18616:38;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;18616:38:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;18616:38:0;;;;;;;101:4:-1;97:9;90:4;84;80:15;76:31;69:5;65:43;126:6;120:4;113:20;0:138;18616:38:0;;;;;;;;;18609:45;;18553:107;:::o;15801:548::-;6453:1;6436:13;;:18;;;;;;;;;;;6465:20;6488:13;;6465:36;;15901:1;15891:7;:11;15883:54;;;;;;;;;;;;;;;;;;;;;;15953:22;:20;:22::i;:::-;15946:4;:29;;;;15986:66;16017:10;16037:4;16044:7;15993:5;;;;;;;;;;;15986:30;;;;:66;;;;;;:::i;:::-;16095:14;16112:1;16095:18;;16134:1;16126:4;;:9;16122:150;;;16157:7;16148:16;;16182:7;16175:4;:14;;;;16122:150;;;16225:37;16257:4;;16226:25;16238:12;;16226:7;:11;;:25;;;;:::i;:::-;16225:31;;:37;;;;:::i;:::-;16216:46;;16122:150;16287:22;:20;:22::i;:::-;16280:4;:29;;;;16318:25;16324:10;16336:6;16318:5;:25::i;:::-;6512:1;6548:13;;6532:12;:29;6524:73;;;;;;;;;;;;;;;;;;;;;;15801:548;;:::o;15047:101::-;1597:9;:7;:9::i;:::-;1589:54;;;;;;;;;;;;;;;;;;;;;;15130:12;15120:7;;:22;;;;;;;;;;;;;;;;;;15047:101;:::o;19897:115::-;19941:7;19971:9;;;;;;;;;;;19964:27;;;20000:4;19964:42;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;19964:42:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;19964:42:0;;;;;;;101:4:-1;97:9;90:4;84;80:15;76:31;69:5;65:43;126:6;120:4;113:20;0:138;19964:42:0;;;;;;;;;19957:49;;19897:115;:::o;18664:113::-;18717:7;18749:5;;;;;;;;;;;18742:23;;;18766:4;;;;;;;;;;;18742:29;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;18742:29:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;18742:29:0;;;;;;;101:4:-1;97:9;90:4;84;80:15;76:31;69:5;65:43;126:6;120:4;113:20;0:138;18742:29:0;;;;;;;;;18735:36;;18664:113;:::o;14033:21::-;;;;:::o;2871:134::-;2943:7;2970:11;:18;2982:5;2970:18;;;;;;;;;;;;;;;:27;2989:7;2970:27;;;;;;;;;;;;;;;;2963:34;;2871:134;;;;:::o;25254:92::-;1597:9;:7;:9::i;:::-;1589:54;;;;;;;;;;;;;;;;;;;;;;25317:23;25333:6;25317:15;:23::i;:::-;25254:92;:::o;1915:109::-;1597:9;:7;:9::i;:::-;1589:54;;;;;;;;;;;;;;;;;;;;;;1988:28;2007:8;1988:18;:28::i;:::-;1915:109;:::o;19449:203::-;19503:7;19519:9;19531:16;:14;:16::i;:::-;19519:28;;19562:1;19558;:5;19554:78;;;19586:7;;;;;;;;;;;19578:31;;;19618:4;19578:46;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;19578:46:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;19578:46:0;;;;;;;101:4:-1;97:9;90:4;84;80:15;76:31;69:5;65:43;126:6;120:4;113:20;0:138;19578:46:0;;;;;;;;;19574:50;;19554:78;19645:1;19638:8;;;19449:203;:::o;15152:105::-;1597:9;:7;:9::i;:::-;1589:54;;;;;;;;;;;;;;;;;;;;;;15238:13;15227:8;;:24;;;;;;;;;;;;;;;;;;15152:105;:::o;13873:23::-;;;;;;;;;;;;;:::o;18036:120::-;18076:7;18128:4;;;;;;;;;;;18099:49;;;:51;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;18099:51:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;18099:51:0;;;;;;;101:4:-1;97:9;90:4;84;80:15;76:31;69:5;65:43;126:6;120:4;113:20;0:138;18099:51:0;;;;;;;;;18092:58;;18036:120;:::o;18160:128::-;18204:7;18256:4;;;;;;;;;;;18227:53;;;:55;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;18227:55:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;18227:55:0;;;;;;;101:4:-1;97:9;90:4;84;80:15;76:31;69:5;65:43;126:6;120:4;113:20;0:138;18227:55:0;;;;;;;;;18220:62;;18160:128;:::o;13848:20::-;;;;;;;;;;;;;:::o;22256:568::-;22311:19;22344:1;22333:13;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;22311:35;;22366:22;;;;;;;;22379:4;22366:22;;;;;;22386:1;22366:22;;;22355:5;22361:1;22355:8;;;;;;;;;;;;;:33;;;;22399:22;;:::i;:::-;22424:70;;;;;;;;22436:4;22424:70;;;;;;22442:21;22424:70;;;;;;;;;;;;22465:20;22424:70;;;;;;;;;;;;22487:6;22424:70;;;22399:95;;22503:21;;:::i;:::-;22550:18;22533:3;:14;;:35;;;;;;;;;;;;;;;;;;;;;;;22593:1;22577:3;:13;;:17;;;;;22616:3;22603;:10;;:16;;;;22650:6;;22628:3;:19;;:28;;;;;22692:4;22665:3;:16;;:32;;;;;;;;;;;22708:24;22752:1;22735:19;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;22708:46;;22773:3;22763:4;22768:1;22763:7;;;;;;;;;;;;;:13;;;;22792:4;;;;;;;;;;;22787:18;;;22806:5;22813:4;22787:31;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;22787:31:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;22787:31:0;;;;22256:568;;;;;:::o;852:98::-;897:15;932:10;925:17;;852:98;:::o;5107:338::-;5218:1;5201:19;;:5;:19;;;;5193:68;;;;;;;;;;;;;;;;;;;;;;5299:1;5280:21;;:7;:21;;;;5272:68;;;;;;;;;;;;;;;;;;;;;;5383:6;5353:11;:18;5365:5;5353:18;;;;;;;;;;;;;;;:27;5372:7;5353:27;;;;;;;;;;;;;;;:36;;;;5421:7;5405:32;;5414:5;5405:32;;;5430:6;5405:32;;;;;;;;;;;;;;;5107:338;;;:::o;3962:471::-;4078:1;4060:20;;:6;:20;;;;4052:70;;;;;;;;;;;;;;;;;;;;;;4162:1;4141:23;;:9;:23;;;;4133:71;;;;;;;;;;;;;;;;;;;;;;4237;4259:6;4237:71;;;;;;;;;;;;;;;;;:9;:17;4247:6;4237:17;;;;;;;;;;;;;;;;:21;;:71;;;;;:::i;:::-;4217:9;:17;4227:6;4217:17;;;;;;;;;;;;;;;:91;;;;4342:32;4367:6;4342:9;:20;4352:9;4342:20;;;;;;;;;;;;;;;;:24;;:32;;;;:::i;:::-;4319:9;:20;4329:9;4319:20;;;;;;;;;;;;;;;:55;;;;4407:9;4390:35;;4399:6;4390:35;;;4418:6;4390:35;;;;;;;;;;;;;;;3962:471;;;:::o;6965:192::-;7051:7;7084:1;7079;:6;;7087:12;7071:29;;;;;;;;;;;;;;;;;;;;;;;;;7111:9;7127:1;7123;:5;7111:17;;7148:1;7141:8;;;6965:192;;;;;:::o;7163:250::-;7221:7;7250:1;7245;:6;7241:47;;;7275:1;7268:8;;;;7241:47;7300:9;7316:1;7312;:5;7300:17;;7345:1;7340;7336;:5;;;;;;:10;7328:56;;;;;;;;;;;;;;;;;;;;;;7404:1;7397:8;;;7163:250;;;;;:::o;7419:132::-;7477:7;7504:39;7508:1;7511;7504:39;;;;;;;;;;;;;;;;;:3;:39::i;:::-;7497:46;;7419:132;;;;:::o;6823:136::-;6881:7;6908:43;6912:1;6915;6908:43;;;;;;;;;;;;;;;;;:3;:43::i;:::-;6901:50;;6823:136;;;;:::o;21749:501::-;21821:15;21809:27;;;;;;;;:8;;;;;;;;;;;:27;;;;;;;;;21805:80;;;21847:30;21869:7;21847:21;:30::i;:::-;21805:80;21907:11;21895:23;;;;;;;;:8;;;;;;;;;;;:23;;;;;;;;;21891:132;;;21954:7;21937:13;:11;:13::i;:::-;:24;;21929:55;;;;;;;;;;;;;;;;;;;;;;21993:22;22007:7;21993:13;:22::i;:::-;21891:132;22045:11;22033:23;;;;;;;;:8;;;;;;;;;;;:23;;;;;;;;;22029:132;;;22092:7;22075:13;:11;:13::i;:::-;:24;;22067:55;;;;;;;;;;;;;;;;;;;;;;22131:22;22145:7;22131:13;:22::i;:::-;22029:132;22183:14;22171:26;;;;;;;;:8;;;;;;;;;;;:26;;;;;;;;;22167:78;;;22208:29;22229:7;22208:20;:29::i;:::-;22167:78;21749:501;:::o;9136:176::-;9219:85;9238:5;9268;:14;;;:23;;;;9293:2;9297:5;9245:58;;;;;;;;;;;;;49:4:-1;39:7;30;26:21;22:32;13:7;6:49;9245:58:0;;;;;;;38:4:-1;29:7;25:18;67:10;61:17;96:58;199:8;192:4;186;182:15;179:29;167:10;160:49;0:215;;;9245:58:0;9219:18;:85::i;:::-;9136:176;;;:::o;6636:181::-;6694:7;6714:9;6730:1;6726;:5;6714:17;;6755:1;6750;:6;;6742:46;;;;;;;;;;;;;;;;;;;;;;6808:1;6801:8;;;6636:181;;;;:::o;23613:572::-;23670:19;23703:1;23692:13;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;23670:35;;23725:22;;;;;;;;23738:4;23725:22;;;;;;23745:1;23725:22;;;23714:5;23720:1;23714:8;;;;;;;;;;;;;:33;;;;23758:22;;:::i;:::-;23783:71;;;;;;;;23795:5;23783:71;;;;;;23802:21;23783:71;;;;;;;;;;;;23825:20;23783:71;;;;;;;;;;;;23847:6;23783:71;;;23758:96;;23863:21;;:::i;:::-;23910:19;23893:3;:14;;:36;;;;;;;;;;;;;;;;;;;;;;;23954:1;23938:3;:13;;:17;;;;;23977:3;23964;:10;;:16;;;;24011:6;;23989:3;:19;;:28;;;;;24053:4;24026:3;:16;;:32;;;;;;;;;;;24069:24;24113:1;24096:19;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;24069:46;;24134:3;24124:4;24129:1;24124:7;;;;;;;;;;;;;:13;;;;24153:4;;;;;;;;;;;24148:18;;;24167:5;24174:4;24148:31;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;24148:31:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;24148:31:0;;;;23613:572;;;;;:::o;23219:92::-;23280:9;;;;;;;;;;;23273:24;;;23298:6;23273:32;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;23273:32:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;23273:32:0;;;;23219:92;:::o;22830:99::-;22887:9;:7;:9::i;:::-;22882:23;;;22906:5;;;;;;;;;;;22913:6;22921:1;22882:41;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;22882:41:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;22882:41:0;;;;22830:99;:::o;21419:324::-;21482:9;21494:16;:14;:16::i;:::-;21482:28;;21517:10;21530:23;:21;:23::i;:::-;21517:36;;21574:7;21568:2;:13;;21560:44;;;;;;;;;;;;;;;;;;;;;;21658:14;21675:31;21704:1;21675:24;21696:2;21676:14;21682:7;21676:1;:5;;:14;;;;:::i;:::-;21675:20;;:24;;;;:::i;:::-;:28;;:31;;;;:::i;:::-;21658:48;;21713:24;21730:6;21713:16;:24::i;:::-;21419:324;;;;:::o;20571:508::-;20611:14;20628:17;:15;:17::i;:::-;20611:34;;20665:1;20656:6;:10;20652:87;;;20677:54;20699:31;20728:1;20699:24;:22;:24::i;:::-;:28;;:31;;;;:::i;:::-;20677:21;:54::i;:::-;20652:87;20754:13;:11;:13::i;:::-;20745:22;;20787:1;20778:6;:10;20774:70;;;20799:37;20813:22;:20;:22::i;:::-;20799:13;:37::i;:::-;20774:70;20859:16;:14;:16::i;:::-;20850:25;;20895:1;20886:6;:10;20882:87;;;20907:54;20928:32;20958:1;20928:25;:23;:25::i;:::-;:29;;:32;;;;:::i;:::-;20907:20;:54::i;:::-;20882:87;20984:13;:11;:13::i;:::-;20975:22;;21017:1;21008:6;:10;21004:70;;;21029:37;21043:22;:20;:22::i;:::-;21029:13;:37::i;:::-;21004:70;20571:508;:::o;22933:144::-;23043:1;23004:7;;;;;;;;;;;22996:21;;;23026:4;23033:6;22996:44;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;22996:44:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;22996:44:0;;;;;;;101:4:-1;97:9;90:4;84;80:15;76:31;69:5;65:43;126:6;120:4;113:20;0:138;22996:44:0;;;;;;;;;:48;22988:83;;;;;;;;;;;;;;;;;;;;;;22933:144;:::o;23081:134::-;23180:1;23154:8;;;;;;;;;;;23145:23;;;23169:6;23145:31;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;23145:31:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;23145:31:0;;;;;;;101:4:-1;97:9;90:4;84;80:15;76:31;69:5;65:43;126:6;120:4;113:20;0:138;23145:31:0;;;;;;;;;:36;23137:72;;;;;;;;;;;;;;;;;;;;;;23081:134;:::o;9532:347::-;9637:1;9628:5;:10;9627:62;;;;9687:1;9644:5;:15;;;9668:4;9675:7;9644:39;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;9644:39:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;9644:39:0;;;;;;;101:4:-1;97:9;90:4;84;80:15;76:31;69:5;65:43;126:6;120:4;113:20;0:138;9644:39:0;;;;;;;;;:44;9627:62;9619:152;;;;;;;;;;;;;;;;;;;;;;9782:89;9801:5;9831;:13;;;:22;;;;9855:7;9864:5;9808:62;;;;;;;;;;;;;49:4:-1;39:7;30;26:21;22:32;13:7;6:49;9808:62:0;;;;;;;38:4:-1;29:7;25:18;67:10;61:17;96:58;199:8;192:4;186;182:15;179:29;167:10;160:49;0:215;;;9808:62:0;9782:18;:89::i;:::-;9532:347;;;:::o;21085:328::-;21149:9;21161:17;:15;:17::i;:::-;21149:29;;21185:10;21198:24;:22;:24::i;:::-;21185:37;;21243:7;21237:2;:13;;21229:44;;;;;;;;;;;;;;;;;;;;;;21327:14;21344:31;21373:1;21344:24;21365:2;21345:14;21351:7;21345:1;:5;;:14;;;;:::i;:::-;21344:20;;:24;;;;:::i;:::-;:28;;:31;;;;:::i;:::-;21327:48;;21382:25;21400:6;21382:17;:25::i;:::-;21085:328;;;;:::o;9320:204::-;9421:95;9440:5;9470;:18;;;:27;;;;9499:4;9505:2;9509:5;9447:68;;;;;;;;;;;;;;49:4:-1;39:7;30;26:21;22:32;13:7;6:49;9447:68:0;;;;;;;38:4:-1;29:7;25:18;67:10;61:17;96:58;199:8;192:4;186;182:15;179:29;167:10;160:49;0:215;;;9447:68:0;9421:18;:95::i;:::-;9320:204;;;;:::o;4439:308::-;4534:1;4515:21;;:7;:21;;;;4507:65;;;;;;;;;;;;;;;;;;;;;;4600:24;4617:6;4600:12;;:16;;:24;;;;:::i;:::-;4585:12;:39;;;;4656:30;4679:6;4656:9;:18;4666:7;4656:18;;;;;;;;;;;;;;;;:22;;:30;;;;:::i;:::-;4635:9;:18;4645:7;4635:18;;;;;;;;;;;;;;;:51;;;;4723:7;4702:37;;4719:1;4702:37;;;4732:6;4702:37;;;;;;;;;;;;;;;4439:308;;:::o;2030:229::-;2124:1;2104:22;;:8;:22;;;;2096:73;;;;;;;;;;;;;;;;;;;;;;2214:8;2185:38;;2206:6;;;;;;;;;;;2185:38;;;;;;;;;;;;2243:8;2234:6;;:17;;;;;;;;;;;;;;;;;;2030:229;:::o;7557:258::-;7643:7;7742:1;7738;:5;7745:12;7730:28;;;;;;;;;;;;;;;;;;;;;;;;;7769:9;7785:1;7781;:5;;;;;;7769:17;;7806:1;7799:8;;;7557:258;;;;;:::o;10516:598::-;10604:27;10612:5;10604:25;;;:27::i;:::-;10596:71;;;;;;;;;;;;;;;;;;;;;;10741:12;10755:23;10790:5;10782:19;;10802:4;10782:25;;;;;;;;;;;;;;;;;;;;;;;14:1:-1;21;16:31;;;;75:4;69:11;64:16;;144:4;140:9;133:4;115:16;111:27;107:43;104:1;100:51;94:4;87:65;169:16;166:1;159:27;225:16;222:1;215:4;212:1;208:12;193:49;7:242;;16:31;36:4;31:9;;7:242;;10740:67:0;;;;10826:7;10818:52;;;;;;;;;;;;;;;;;;;;;;10907:1;10887:10;:17;:21;10883:224;;;11029:10;11018:30;;;;;;;;;;;;;;11010:85;;;;;;;;;;;;;;;;;;;;;;10883:224;10516:598;;;;:::o;23315:148::-;23427:1;23388:7;;;;;;;;;;;23380:21;;;23410:4;23417:6;23380:44;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;23380:44:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;23380:44:0;;;;;;;101:4:-1;97:9;90:4;84;80:15;76:31;69:5;65:43;126:6;120:4;113:20;0:138;23380:44:0;;;;;;;;;:48;23372:85;;;;;;;;;;;;;;;;;;;;;;23315:148;:::o;23467:140::-;23570:1;23542:8;;;;;;;;;;;23533:25;;;23559:6;23533:33;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;23533:33:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;23533:33:0;;;;;;;101:4:-1;97:9;90:4;84;80:15;76:31;69:5;65:43;126:6;120:4;113:20;0:138;23533:33:0;;;;;;;;;:38;23525:76;;;;;;;;;;;;;;;;;;;;;;23467:140;:::o;8153:374::-;8213:4;8230:16;8257:19;8279:66;8257:88;;;;8448:7;8436:20;8424:32;;8488:3;8476:15;;:8;:15;;:42;;;;;8507:11;8495:8;:23;;8476:42;8468:51;;;;8153:374;;;:::o;13652:11697::-;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;5:130:-1:-;;85:6;72:20;63:29;;97:33;124:5;97:33;;;57:78;;;;;142:134;;226:6;220:13;211:22;;238:33;265:5;238:33;;;205:71;;;;;283:128;;364:6;358:13;349:22;;376:30;400:5;376:30;;;343:68;;;;;419:444;;532:3;525:4;517:6;513:17;509:27;499:2;;550:1;547;540:12;499:2;580:6;574:13;602:65;617:49;659:6;617:49;;;602:65;;;593:74;;687:6;680:5;673:21;723:4;715:6;711:17;756:4;749:5;745:16;791:3;782:6;777:3;773:16;770:25;767:2;;;808:1;805;798:12;767:2;818:39;850:6;845:3;840;818:39;;;492:371;;;;;;;;896:493;;1017:4;1005:9;1000:3;996:19;992:30;989:2;;;1035:1;1032;1025:12;989:2;1053:20;1068:4;1053:20;;;1044:29;;1123:1;1154:57;1207:3;1198:6;1187:9;1183:22;1154:57;;;1148:3;1141:5;1137:15;1130:82;1083:140;1274:2;1307:60;1363:3;1354:6;1343:9;1339:22;1307:60;;;1300:4;1293:5;1289:16;1282:86;1233:146;983:406;;;;;1396:130;;1476:6;1463:20;1454:29;;1488:33;1515:5;1488:33;;;1448:78;;;;;1533:134;;1617:6;1611:13;1602:22;;1629:33;1656:5;1629:33;;;1596:71;;;;;1674:241;;1778:2;1766:9;1757:7;1753:23;1749:32;1746:2;;;1794:1;1791;1784:12;1746:2;1829:1;1846:53;1891:7;1882:6;1871:9;1867:22;1846:53;;;1836:63;;1808:97;1740:175;;;;;1922:263;;2037:2;2025:9;2016:7;2012:23;2008:32;2005:2;;;2053:1;2050;2043:12;2005:2;2088:1;2105:64;2161:7;2152:6;2141:9;2137:22;2105:64;;;2095:74;;2067:108;1999:186;;;;;2192:366;;;2313:2;2301:9;2292:7;2288:23;2284:32;2281:2;;;2329:1;2326;2319:12;2281:2;2364:1;2381:53;2426:7;2417:6;2406:9;2402:22;2381:53;;;2371:63;;2343:97;2471:2;2489:53;2534:7;2525:6;2514:9;2510:22;2489:53;;;2479:63;;2450:98;2275:283;;;;;;2565:491;;;;2703:2;2691:9;2682:7;2678:23;2674:32;2671:2;;;2719:1;2716;2709:12;2671:2;2754:1;2771:53;2816:7;2807:6;2796:9;2792:22;2771:53;;;2761:63;;2733:97;2861:2;2879:53;2924:7;2915:6;2904:9;2900:22;2879:53;;;2869:63;;2840:98;2969:2;2987:53;3032:7;3023:6;3012:9;3008:22;2987:53;;;2977:63;;2948:98;2665:391;;;;;;3063:366;;;3184:2;3172:9;3163:7;3159:23;3155:32;3152:2;;;3200:1;3197;3190:12;3152:2;3235:1;3252:53;3297:7;3288:6;3277:9;3273:22;3252:53;;;3242:63;;3214:97;3342:2;3360:53;3405:7;3396:6;3385:9;3381:22;3360:53;;;3350:63;;3321:98;3146:283;;;;;;3436:257;;3548:2;3536:9;3527:7;3523:23;3519:32;3516:2;;;3564:1;3561;3554:12;3516:2;3599:1;3616:61;3669:7;3660:6;3649:9;3645:22;3616:61;;;3606:71;;3578:105;3510:183;;;;;3700:908;;;;;;3893:3;3881:9;3872:7;3868:23;3864:33;3861:2;;;3910:1;3907;3900:12;3861:2;3966:1;3955:9;3951:17;3945:24;3989:18;3981:6;3978:30;3975:2;;;4021:1;4018;4011:12;3975:2;4041:74;4107:7;4098:6;4087:9;4083:22;4041:74;;;4031:84;;3924:197;4152:2;4170:64;4226:7;4217:6;4206:9;4202:22;4170:64;;;4160:74;;4131:109;4271:2;4289:64;4345:7;4336:6;4325:9;4321:22;4289:64;;;4279:74;;4250:109;4390:2;4408:64;4464:7;4455:6;4444:9;4440:22;4408:64;;;4398:74;;4369:109;4509:3;4528:64;4584:7;4575:6;4564:9;4560:22;4528:64;;;4518:74;;4488:110;3855:753;;;;;;;;;4615:305;;4751:2;4739:9;4730:7;4726:23;4722:32;4719:2;;;4767:1;4764;4757:12;4719:2;4802:1;4819:85;4896:7;4887:6;4876:9;4872:22;4819:85;;;4809:95;;4781:129;4713:207;;;;;4927:241;;5031:2;5019:9;5010:7;5006:23;5002:32;4999:2;;;5047:1;5044;5037:12;4999:2;5082:1;5099:53;5144:7;5135:6;5124:9;5120:22;5099:53;;;5089:63;;5061:97;4993:175;;;;;5175:263;;5290:2;5278:9;5269:7;5265:23;5261:32;5258:2;;;5306:1;5303;5296:12;5258:2;5341:1;5358:64;5414:7;5405:6;5394:9;5390:22;5358:64;;;5348:74;;5320:108;5252:186;;;;;5446:253;;5595:98;5689:3;5681:6;5595:98;;;5581:112;;5574:125;;;;;5708:249;;5831:86;5913:3;5905:6;5831:86;;;5946:4;5941:3;5937:14;5923:28;;5824:133;;;;;5965:103;6038:24;6056:5;6038:24;;;6033:3;6026:37;6020:48;;;6075:113;6158:24;6176:5;6158:24;;;6153:3;6146:37;6140:48;;;6262:1040;;6455:78;6527:5;6455:78;;;6546:110;6649:6;6644:3;6546:110;;;6539:117;;6679:3;6721:4;6713:6;6709:17;6704:3;6700:27;6748:80;6822:5;6748:80;;;6848:7;6876:1;6861:402;6886:6;6883:1;6880:13;6861:402;;;6948:9;6942:4;6938:20;6933:3;6926:33;6993:6;6987:13;7015:112;7122:4;7107:13;7015:112;;;7007:120;;7144:84;7221:6;7144:84;;;7134:94;;7251:4;7246:3;7242:14;7235:21;;6918:345;6908:1;6905;6901:9;6896:14;;6861:402;;;6865:14;7276:4;7269:11;;7293:3;7286:10;;6434:868;;;;;;;;;;7365:834;;7546:72;7612:5;7546:72;;;7631:104;7728:6;7723:3;7631:104;;;7624:111;;7756:74;7824:5;7756:74;;;7850:7;7878:1;7863:314;7888:6;7885:1;7882:13;7863:314;;;7955:6;7949:13;7976:99;8071:3;8056:13;7976:99;;;7969:106;;8092:78;8163:6;8092:78;;;8082:88;;7920:257;7910:1;7907;7903:9;7898:14;;7863:314;;;7867:14;8190:3;8183:10;;7525:674;;;;;;;;8207:94;8274:21;8289:5;8274:21;;;8269:3;8262:34;8256:45;;;8308:104;8385:21;8400:5;8385:21;;;8380:3;8373:34;8367:45;;;8419:356;;8547:38;8579:5;8547:38;;;8597:88;8678:6;8673:3;8597:88;;;8590:95;;8690:52;8735:6;8730:3;8723:4;8716:5;8712:16;8690:52;;;8763:6;8758:3;8754:16;8747:23;;8527:248;;;;;;8782:315;;8878:34;8906:5;8878:34;;;8924:60;8977:6;8972:3;8924:60;;;8917:67;;8989:52;9034:6;9029:3;9022:4;9015:5;9011:16;8989:52;;;9062:29;9084:6;9062:29;;;9057:3;9053:39;9046:46;;8858:239;;;;;;9104:142;9190:50;9234:5;9190:50;;;9185:3;9178:63;9172:74;;;9253:156;9346:57;9397:5;9346:57;;;9341:3;9334:70;9328:81;;;9416:150;9506:54;9554:5;9506:54;;;9501:3;9494:67;9488:78;;;9573:144;9665:46;9705:5;9665:46;;;9660:3;9653:59;9647:70;;;9724:140;9814:44;9852:5;9814:44;;;9809:3;9802:57;9796:68;;;9871:347;;9983:39;10016:5;9983:39;;;10034:71;10098:6;10093:3;10034:71;;;10027:78;;10110:52;10155:6;10150:3;10143:4;10136:5;10132:16;10110:52;;;10183:29;10205:6;10183:29;;;10178:3;10174:39;10167:46;;9963:255;;;;;;10226:465;;10386:67;10450:2;10445:3;10386:67;;;10379:74;;10486:66;10482:1;10477:3;10473:11;10466:87;10587:66;10582:2;10577:3;10573:12;10566:88;10682:2;10677:3;10673:12;10666:19;;10372:319;;;;10700:364;;10860:67;10924:2;10919:3;10860:67;;;10853:74;;10960:66;10956:1;10951:3;10947:11;10940:87;11055:2;11050:3;11046:12;11039:19;;10846:218;;;;11073:465;;11233:67;11297:2;11292:3;11233:67;;;11226:74;;11333:66;11329:1;11324:3;11320:11;11313:87;11434:66;11429:2;11424:3;11420:12;11413:88;11529:2;11524:3;11520:12;11513:19;;11219:319;;;;11547:465;;11707:67;11771:2;11766:3;11707:67;;;11700:74;;11807:66;11803:1;11798:3;11794:11;11787:87;11908:66;11903:2;11898:3;11894:12;11887:88;12003:2;11998:3;11994:12;11987:19;;11693:319;;;;12021:364;;12181:67;12245:2;12240:3;12181:67;;;12174:74;;12281:66;12277:1;12272:3;12268:11;12261:87;12376:2;12371:3;12367:12;12360:19;;12167:218;;;;12394:364;;12554:67;12618:2;12613:3;12554:67;;;12547:74;;12654:66;12650:1;12645:3;12641:11;12634:87;12749:2;12744:3;12740:12;12733:19;;12540:218;;;;12767:364;;12927:67;12991:2;12986:3;12927:67;;;12920:74;;13027:66;13023:1;13018:3;13014:11;13007:87;13122:2;13117:3;13113:12;13106:19;;12913:218;;;;13140:465;;13300:67;13364:2;13359:3;13300:67;;;13293:74;;13400:66;13396:1;13391:3;13387:11;13380:87;13501:66;13496:2;13491:3;13487:12;13480:88;13596:2;13591:3;13587:12;13580:19;;13286:319;;;;13614:364;;13774:67;13838:2;13833:3;13774:67;;;13767:74;;13874:66;13870:1;13865:3;13861:11;13854:87;13969:2;13964:3;13960:12;13953:19;;13760:218;;;;13987:364;;14147:67;14211:2;14206:3;14147:67;;;14140:74;;14247:66;14243:1;14238:3;14234:11;14227:87;14342:2;14337:3;14333:12;14326:19;;14133:218;;;;14360:364;;14520:67;14584:2;14579:3;14520:67;;;14513:74;;14620:66;14616:1;14611:3;14607:11;14600:87;14715:2;14710:3;14706:12;14699:19;;14506:218;;;;14733:364;;14893:67;14957:2;14952:3;14893:67;;;14886:74;;14993:66;14989:1;14984:3;14980:11;14973:87;15088:2;15083:3;15079:12;15072:19;;14879:218;;;;15106:465;;15266:67;15330:2;15325:3;15266:67;;;15259:74;;15366:66;15362:1;15357:3;15353:11;15346:87;15467:66;15462:2;15457:3;15453:12;15446:88;15562:2;15557:3;15553:12;15546:19;;15252:319;;;;15580:364;;15740:67;15804:2;15799:3;15740:67;;;15733:74;;15840:66;15836:1;15831:3;15827:11;15820:87;15935:2;15930:3;15926:12;15919:19;;15726:218;;;;15953:465;;16113:67;16177:2;16172:3;16113:67;;;16106:74;;16213:66;16209:1;16204:3;16200:11;16193:87;16314:66;16309:2;16304:3;16300:12;16293:88;16409:2;16404:3;16400:12;16393:19;;16099:319;;;;16427:364;;16587:67;16651:2;16646:3;16587:67;;;16580:74;;16687:66;16683:1;16678:3;16674:11;16667:87;16782:2;16777:3;16773:12;16766:19;;16573:218;;;;16800:364;;16960:67;17024:2;17019:3;16960:67;;;16953:74;;17060:66;17056:1;17051:3;17047:11;17040:87;17155:2;17150:3;17146:12;17139:19;;16946:218;;;;17173:465;;17333:67;17397:2;17392:3;17333:67;;;17326:74;;17433:66;17429:1;17424:3;17420:11;17413:87;17534:66;17529:2;17524:3;17520:12;17513:88;17629:2;17624:3;17620:12;17613:19;;17319:319;;;;17647:364;;17807:67;17871:2;17866:3;17807:67;;;17800:74;;17907:66;17903:1;17898:3;17894:11;17887:87;18002:2;17997:3;17993:12;17986:19;;17793:218;;;;18020:465;;18180:67;18244:2;18239:3;18180:67;;;18173:74;;18280:66;18276:1;18271:3;18267:11;18260:87;18381:66;18376:2;18371:3;18367:12;18360:88;18476:2;18471:3;18467:12;18460:19;;18166:319;;;;18494:364;;18654:67;18718:2;18713:3;18654:67;;;18647:74;;18754:66;18750:1;18745:3;18741:11;18734:87;18849:2;18844:3;18840:12;18833:19;;18640:218;;;;18867:364;;19027:67;19091:2;19086:3;19027:67;;;19020:74;;19127:66;19123:1;19118:3;19114:11;19107:87;19222:2;19217:3;19213:12;19206:19;;19013:218;;;;19300:1605;;19443:5;19438:3;19434:15;19533:3;19526:5;19522:15;19516:22;19544:75;19614:3;19609;19605:13;19591:12;19544:75;;;19464:161;19703:4;19696:5;19692:16;19686:23;19715:63;19772:4;19767:3;19763:14;19749:12;19715:63;;;19635:149;19859:4;19852:5;19848:16;19842:23;19871:117;19982:4;19977:3;19973:14;19959:12;19871:117;;;19794:200;20078:4;20071:5;20067:16;20061:23;20090:63;20147:4;20142:3;20138:14;20124:12;20090:63;;;20004:155;20245:4;20238:5;20234:16;20228:23;20257:63;20314:4;20309:3;20305:14;20291:12;20257:63;;;20169:157;20407:4;20400:5;20396:16;20390:23;20419:64;20476:5;20471:3;20467:15;20453:12;20419:64;;;20336:153;20572:4;20565:5;20561:16;20555:23;20584:64;20641:5;20636:3;20632:15;20618:12;20584:64;;;20499:155;20727:4;20720:5;20716:16;20710:23;20780:3;20774:4;20770:14;20762:5;20757:3;20753:15;20746:39;20800:67;20862:4;20848:12;20800:67;;;20792:75;;20664:215;20896:4;20889:11;;19416:1489;;;;;;20975:815;21112:4;21107:3;21103:14;21195:3;21188:5;21184:15;21178:22;21206:56;21257:3;21252;21248:13;21234:12;21206:56;;;21132:136;21349:4;21342:5;21338:16;21332:23;21361:83;21438:4;21433:3;21429:14;21415:12;21361:83;;;21278:172;21522:4;21515:5;21511:16;21505:23;21534:80;21608:4;21603:3;21599:14;21585:12;21534:80;;;21460:160;21694:4;21687:5;21683:16;21677:23;21706:63;21763:4;21758:3;21754:14;21740:12;21706:63;;;21630:145;21085:705;;;;21846:457;21969:4;21964:3;21960:14;22053:3;22046:5;22042:15;22036:22;22064:62;22121:3;22116;22112:13;22098:12;22064:62;;;21989:143;22207:4;22200:5;22196:16;22190:23;22219:63;22276:4;22271:3;22267:14;22253:12;22219:63;;;22142:146;21942:361;;;;22359:467;22492:4;22487:3;22483:14;22576:3;22569:5;22565:15;22559:22;22587:62;22644:3;22639;22635:13;22621:12;22587:62;;;22512:143;22730:4;22723:5;22719:16;22713:23;22742:63;22799:4;22794:3;22790:14;22776:12;22742:63;;;22665:146;22465:361;;;;22833:103;22906:24;22924:5;22906:24;;;22901:3;22894:37;22888:48;;;22943:113;23026:24;23044:5;23026:24;;;23021:3;23014:37;23008:48;;;23063:107;23142:22;23158:5;23142:22;;;23137:3;23130:35;23124:46;;;23177:262;;23321:93;23410:3;23401:6;23321:93;;;23314:100;;23431:3;23424:10;;23302:137;;;;;23446:213;;23564:2;23553:9;23549:18;23541:26;;23578:71;23646:1;23635:9;23631:17;23622:6;23578:71;;;23535:124;;;;;23666:324;;23812:2;23801:9;23797:18;23789:26;;23826:71;23894:1;23883:9;23879:17;23870:6;23826:71;;;23908:72;23976:2;23965:9;23961:18;23952:6;23908:72;;;23783:207;;;;;;23997:435;;24171:2;24160:9;24156:18;24148:26;;24185:71;24253:1;24242:9;24238:17;24229:6;24185:71;;;24267:72;24335:2;24324:9;24320:18;24311:6;24267:72;;;24350;24418:2;24407:9;24403:18;24394:6;24350:72;;;24142:290;;;;;;;24439:324;;24585:2;24574:9;24570:18;24562:26;;24599:71;24667:1;24656:9;24652:17;24643:6;24599:71;;;24681:72;24749:2;24738:9;24734:18;24725:6;24681:72;;;24556:207;;;;;;24770:449;;24951:2;24940:9;24936:18;24928:26;;24965:71;25033:1;25022:9;25018:17;25009:6;24965:71;;;25047:72;25115:2;25104:9;25100:18;25091:6;25047:72;;;25130:79;25205:2;25194:9;25190:18;25181:6;25130:79;;;24922:297;;;;;;;25226:788;;25556:2;25545:9;25541:18;25533:26;;25606:9;25600:4;25596:20;25592:1;25581:9;25577:17;25570:47;25631:144;25770:4;25761:6;25631:144;;;25623:152;;25823:9;25817:4;25813:20;25808:2;25797:9;25793:18;25786:48;25848:156;25999:4;25990:6;25848:156;;;25840:164;;25527:487;;;;;;26021:201;;26133:2;26122:9;26118:18;26110:26;;26147:65;26209:1;26198:9;26194:17;26185:6;26147:65;;;26104:118;;;;;26229:231;;26356:2;26345:9;26341:18;26333:26;;26370:80;26447:1;26436:9;26432:17;26423:6;26370:80;;;26327:133;;;;;26467:301;;26605:2;26594:9;26590:18;26582:26;;26655:9;26649:4;26645:20;26641:1;26630:9;26626:17;26619:47;26680:78;26753:4;26744:6;26680:78;;;26672:86;;26576:192;;;;;26775:407;;26966:2;26955:9;26951:18;26943:26;;27016:9;27010:4;27006:20;27002:1;26991:9;26987:17;26980:47;27041:131;27167:4;27041:131;;;27033:139;;26937:245;;;;27189:407;;27380:2;27369:9;27365:18;27357:26;;27430:9;27424:4;27420:20;27416:1;27405:9;27401:17;27394:47;27455:131;27581:4;27455:131;;;27447:139;;27351:245;;;;27603:407;;27794:2;27783:9;27779:18;27771:26;;27844:9;27838:4;27834:20;27830:1;27819:9;27815:17;27808:47;27869:131;27995:4;27869:131;;;27861:139;;27765:245;;;;28017:407;;28208:2;28197:9;28193:18;28185:26;;28258:9;28252:4;28248:20;28244:1;28233:9;28229:17;28222:47;28283:131;28409:4;28283:131;;;28275:139;;28179:245;;;;28431:407;;28622:2;28611:9;28607:18;28599:26;;28672:9;28666:4;28662:20;28658:1;28647:9;28643:17;28636:47;28697:131;28823:4;28697:131;;;28689:139;;28593:245;;;;28845:407;;29036:2;29025:9;29021:18;29013:26;;29086:9;29080:4;29076:20;29072:1;29061:9;29057:17;29050:47;29111:131;29237:4;29111:131;;;29103:139;;29007:245;;;;29259:407;;29450:2;29439:9;29435:18;29427:26;;29500:9;29494:4;29490:20;29486:1;29475:9;29471:17;29464:47;29525:131;29651:4;29525:131;;;29517:139;;29421:245;;;;29673:407;;29864:2;29853:9;29849:18;29841:26;;29914:9;29908:4;29904:20;29900:1;29889:9;29885:17;29878:47;29939:131;30065:4;29939:131;;;29931:139;;29835:245;;;;30087:407;;30278:2;30267:9;30263:18;30255:26;;30328:9;30322:4;30318:20;30314:1;30303:9;30299:17;30292:47;30353:131;30479:4;30353:131;;;30345:139;;30249:245;;;;30501:407;;30692:2;30681:9;30677:18;30669:26;;30742:9;30736:4;30732:20;30728:1;30717:9;30713:17;30706:47;30767:131;30893:4;30767:131;;;30759:139;;30663:245;;;;30915:407;;31106:2;31095:9;31091:18;31083:26;;31156:9;31150:4;31146:20;31142:1;31131:9;31127:17;31120:47;31181:131;31307:4;31181:131;;;31173:139;;31077:245;;;;31329:407;;31520:2;31509:9;31505:18;31497:26;;31570:9;31564:4;31560:20;31556:1;31545:9;31541:17;31534:47;31595:131;31721:4;31595:131;;;31587:139;;31491:245;;;;31743:407;;31934:2;31923:9;31919:18;31911:26;;31984:9;31978:4;31974:20;31970:1;31959:9;31955:17;31948:47;32009:131;32135:4;32009:131;;;32001:139;;31905:245;;;;32157:407;;32348:2;32337:9;32333:18;32325:26;;32398:9;32392:4;32388:20;32384:1;32373:9;32369:17;32362:47;32423:131;32549:4;32423:131;;;32415:139;;32319:245;;;;32571:407;;32762:2;32751:9;32747:18;32739:26;;32812:9;32806:4;32802:20;32798:1;32787:9;32783:17;32776:47;32837:131;32963:4;32837:131;;;32829:139;;32733:245;;;;32985:407;;33176:2;33165:9;33161:18;33153:26;;33226:9;33220:4;33216:20;33212:1;33201:9;33197:17;33190:47;33251:131;33377:4;33251:131;;;33243:139;;33147:245;;;;33399:407;;33590:2;33579:9;33575:18;33567:26;;33640:9;33634:4;33630:20;33626:1;33615:9;33611:17;33604:47;33665:131;33791:4;33665:131;;;33657:139;;33561:245;;;;33813:407;;34004:2;33993:9;33989:18;33981:26;;34054:9;34048:4;34044:20;34040:1;34029:9;34025:17;34018:47;34079:131;34205:4;34079:131;;;34071:139;;33975:245;;;;34227:407;;34418:2;34407:9;34403:18;34395:26;;34468:9;34462:4;34458:20;34454:1;34443:9;34439:17;34432:47;34493:131;34619:4;34493:131;;;34485:139;;34389:245;;;;34641:407;;34832:2;34821:9;34817:18;34809:26;;34882:9;34876:4;34872:20;34868:1;34857:9;34853:17;34846:47;34907:131;35033:4;34907:131;;;34899:139;;34803:245;;;;35055:407;;35246:2;35235:9;35231:18;35223:26;;35296:9;35290:4;35286:20;35282:1;35271:9;35267:17;35260:47;35321:131;35447:4;35321:131;;;35313:139;;35217:245;;;;35469:407;;35660:2;35649:9;35645:18;35637:26;;35710:9;35704:4;35700:20;35696:1;35685:9;35681:17;35674:47;35735:131;35861:4;35735:131;;;35727:139;;35631:245;;;;35883:404;;36069:2;36058:9;36054:18;36046:26;;36083:111;36191:1;36180:9;36176:17;36167:6;36083:111;;;36205:72;36273:2;36262:9;36258:18;36249:6;36205:72;;;36040:247;;;;;;36294:213;;36412:2;36401:9;36397:18;36389:26;;36426:71;36494:1;36483:9;36479:17;36470:6;36426:71;;;36383:124;;;;;36514:205;;36628:2;36617:9;36613:18;36605:26;;36642:67;36706:1;36695:9;36691:17;36682:6;36642:67;;;36599:120;;;;;36726:256;;36788:2;36782:9;36772:19;;36826:4;36818:6;36814:17;36925:6;36913:10;36910:22;36889:18;36877:10;36874:34;36871:62;36868:2;;;36946:1;36943;36936:12;36868:2;36966:10;36962:2;36955:22;36766:216;;;;;36989:322;;37133:18;37125:6;37122:30;37119:2;;;37165:1;37162;37155:12;37119:2;37232:4;37228:9;37221:4;37213:6;37209:17;37205:33;37197:41;;37296:4;37290;37286:15;37278:23;;37056:255;;;;37318:175;;37428:3;37420:11;;37466:4;37461:3;37457:14;37449:22;;37414:79;;;;37500:169;;37604:3;37596:11;;37642:4;37637:3;37633:14;37625:22;;37590:79;;;;37676:161;;37809:5;37803:12;37793:22;;37774:63;;;;37844:155;;37971:5;37965:12;37955:22;;37936:63;;;;38006:117;;38095:5;38089:12;38079:22;;38060:63;;;;38130:121;;38223:5;38217:12;38207:22;;38188:63;;;;38258:122;;38352:5;38346:12;38336:22;;38317:63;;;;38387:132;;38509:4;38504:3;38500:14;38492:22;;38486:33;;;;38526:126;;38642:4;38637:3;38633:14;38625:22;;38619:33;;;;38660:202;;38814:6;38809:3;38802:19;38851:4;38846:3;38842:14;38827:29;;38795:67;;;;;38871:196;;39019:6;39014:3;39007:19;39056:4;39051:3;39047:14;39032:29;;39000:67;;;;;39076:152;;39180:6;39175:3;39168:19;39217:4;39212:3;39208:14;39193:29;;39161:67;;;;;39237:144;;39372:3;39357:18;;39350:31;;;;;39390:163;;39505:6;39500:3;39493:19;39542:4;39537:3;39533:14;39518:29;;39486:67;;;;;39561:91;;39623:24;39641:5;39623:24;;;39612:35;;39606:46;;;;39659:85;;39732:5;39725:13;39718:21;39707:32;;39701:43;;;;39751:136;;39828:5;39817:16;;39834:48;39876:5;39834:48;;;39811:76;;;;39894:150;;39978:5;39967:16;;39984:55;40033:5;39984:55;;;39961:83;;;;40051:144;;40132:5;40121:16;;40138:52;40184:5;40138:52;;;40115:80;;;;40202:128;;40275:5;40264:16;;40281:44;40319:5;40281:44;;;40258:72;;;;40337:84;;40409:6;40402:5;40398:18;40387:29;;40381:40;;;;40428:121;;40501:42;40494:5;40490:54;40479:65;;40473:76;;;;40556:72;;40618:5;40607:16;;40601:27;;;;40635:81;;40706:4;40699:5;40695:16;40684:27;;40678:38;;;;40723:136;;40815:39;40848:5;40815:39;;;40802:52;;40796:63;;;;40866:150;;40965:46;41005:5;40965:46;;;40952:59;;40946:70;;;;41023:144;;41119:43;41156:5;41119:43;;;41106:56;;41100:67;;;;41174:128;;41262:35;41291:5;41262:35;;;41249:48;;41243:59;;;;41309:114;;41395:23;41412:5;41395:23;;;41382:36;;41376:47;;;;41431:268;41496:1;41503:101;41517:6;41514:1;41511:13;41503:101;;;41593:1;41588:3;41584:11;41578:18;41574:1;41569:3;41565:11;41558:39;41539:2;41536:1;41532:10;41527:15;;41503:101;;;41619:6;41616:1;41613:13;41610:2;;;41684:1;41675:6;41670:3;41666:16;41659:27;41610:2;41480:219;;;;;41707:97;;41795:2;41791:7;41786:2;41779:5;41775:14;41771:28;41761:38;;41755:49;;;;41812:106;41896:1;41889:5;41886:12;41876:2;;41902:9;41876:2;41870:48;;41925:113;42016:1;42009:5;42006:12;41996:2;;42022:9;41996:2;41990:48;;42045:110;42133:1;42126:5;42123:12;42113:2;;42139:9;42113:2;42107:48;;42162:102;42242:1;42235:5;42232:12;42222:2;;42248:9;42222:2;42216:48;;42271:117;42340:24;42358:5;42340:24;;;42333:5;42330:35;42320:2;;42379:1;42376;42369:12;42320:2;42314:74;;42395:111;42461:21;42476:5;42461:21;;;42454:5;42451:32;42441:2;;42497:1;42494;42487:12;42441:2;42435:71;;42513:117;42582:24;42600:5;42582:24;;;42575:5;42572:35;42562:2;;42621:1;42618;42611:12;42562:2;42556:74;

Swarm Source

bzzr://5d63a9aed02232ef2d927eae21be871f5592c3c5313194edd27b325c3818c3b7

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  ]

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.