ETH Price: $3,467.51 (+2.26%)
Gas: 7 Gwei

Token

iearn USDT (yUSDT)
 

Overview

Max Total Supply

99,230,808,407,943.89351 yUSDT

Holders

106 (0.00%)

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 6 Decimals)

Balance
0.000005 yUSDT

Value
$0.00
0x618D64611aF0a80F77472051077F488f12004daa
Loading...
Loading
Loading...
Loading
Loading...
Loading

Click here to update the token information / general information
# Exchange Pair Price  24H Volume % Volume

Contract Source Code Verified (Exact Match)

Contract Name:
yUSDT

Compiler Version
v0.5.16+commit.9c3226ce

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-27
*/

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

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

  Lender public provider = Lender.NONE;

  constructor () public ERC20Detailed("iearn USDT", "yUSDT", 6) {
    token = address(0xdAC17F958D2ee523a2206206994597C13D831ec7);
    apr = address(0xdD6d648C991f7d47454354f4Ef326b04025a48A8);
    dydx = address(0x1E0447b19BB6EcFdAe1e4AE1694b0C3659614e4e);
    aave = address(0x24a42fD28C976A61Df5D00D0599C34c4f90748c8);
    aavePool = address(0x3dfd23A6c5E8BbcFc9581d2E864a68feb6a076d3);
    fulcrum = address(0xF013406A0B1d544238083DF0B93ad0d2cBE0f65f);
    aaveToken = address(0x71fc860F7D3A592A4a98740e39dB31d25db65ae8);
    compound = address(0x39AA39c021dfbaE8faC545936693aC917d5E7563);
    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_ATOKEN(address _new_ATOKEN) public onlyOwner {
      aaveToken = _new_ATOKEN;
  }

  // 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(0));
      IERC20(token).safeApprove(compound, uint(-1));
      IERC20(token).safeApprove(dydx, uint(0));
      IERC20(token).safeApprove(dydx, uint(-1));
      IERC20(token).safeApprove(getAaveCore(), uint(0));
      IERC20(token).safeApprove(getAaveCore(), uint(-1));
      IERC20(token).safeApprove(fulcrum, uint(0));
      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(token).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":"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 yUSDT.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 yUSDT.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_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_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"}]

60806040526000601160146101000a81548160ff021916908360048111156200002457fe5b02179055503480156200003657600080fd5b506040518060400160405280600a81526020017f696561726e2055534454000000000000000000000000000000000000000000008152506040518060400160405280600581526020017f795553445400000000000000000000000000000000000000000000000000000081525060068260039080519060200190620000bd92919062000cb9565b508160049080519060200190620000d692919062000cb9565b5080600560006101000a81548160ff021916908360ff16021790555050505060016006819055506200010d6200049060201b60201c565b600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a373dac17f958d2ee523a2206206994597c13d831ec7600960006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555073dd6d648c991f7d47454354f4ef326b04025a48a8601160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550731e0447b19bb6ecfdae1e4ae1694b0c3659614e4e600f60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055507324a42fd28c976a61df5d00d0599c34c4f90748c8600c60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550733dfd23a6c5e8bbcfc9581d2e864a68feb6a076d3600d60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555073f013406a0b1d544238083df0b93ad0d2cbe0f65f600b60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055507371fc860f7d3a592a4a98740e39db31d25db65ae8600e60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055507339aa39c021dfbae8fac545936693ac917d5e7563600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060036010819055506200048a6200049860201b60201c565b620011ce565b600033905090565b6200050f600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166000600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16620008a860201b62003ec7179092919060201c565b620005a5600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff167fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16620008a860201b62003ec7179092919060201c565b6200061c600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166000600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16620008a860201b62003ec7179092919060201c565b620006b2600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff167fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16620008a860201b62003ec7179092919060201c565b62000716620006c662000a3360201b60201c565b6000600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16620008a860201b62003ec7179092919060201c565b620007996200072a62000a3360201b60201c565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16620008a860201b62003ec7179092919060201c565b62000810600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166000600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16620008a860201b62003ec7179092919060201c565b620008a6600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff167fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16620008a860201b62003ec7179092919060201c565b565b600081148062000948575060008373ffffffffffffffffffffffffffffffffffffffff1663dd62ed3e30856040518363ffffffff1660e01b8152600401620008f292919062000ff7565b60206040518083038186803b1580156200090b57600080fd5b505afa15801562000920573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525062000946919081019062000e05565b145b6200098a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620009819062001095565b60405180910390fd5b62000a2e838473ffffffffffffffffffffffffffffffffffffffff1663095ea7b3905060e01b8484604051602401620009c592919062001024565b604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff838183161783525050505062000ade60201b60201c565b505050565b6000600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ed6ff7606040518163ffffffff1660e01b815260040160206040518083038186803b15801562000a9e57600080fd5b505afa15801562000ab3573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525062000ad9919081019062000dad565b905090565b62000b0a8273ffffffffffffffffffffffffffffffffffffffff1662000c6d60201b620047f71760201c565b62000b4c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000b4390620010b7565b60405180910390fd5b600060608373ffffffffffffffffffffffffffffffffffffffff168360405162000b77919062000fde565b6000604051808303816000865af19150503d806000811462000bb6576040519150601f19603f3d011682016040523d82523d6000602084013e62000bbb565b606091505b50915091508162000c03576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000bfa9062001051565b60405180910390fd5b60008151111562000c67578080602001905162000c24919081019062000dd9565b62000c66576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000c5d9062001073565b60405180910390fd5b5b50505050565b60008060007fc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a47060001b9050833f91506000801b821415801562000cb05750808214155b92505050919050565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f1062000cfc57805160ff191683800117855562000d2d565b8280016001018555821562000d2d579182015b8281111562000d2c57825182559160200191906001019062000d0f565b5b50905062000d3c919062000d40565b5090565b62000d6591905b8082111562000d6157600081600090555060010162000d47565b5090565b90565b60008151905062000d798162001180565b92915050565b60008151905062000d90816200119a565b92915050565b60008151905062000da781620011b4565b92915050565b60006020828403121562000dc057600080fd5b600062000dd08482850162000d68565b91505092915050565b60006020828403121562000dec57600080fd5b600062000dfc8482850162000d7f565b91505092915050565b60006020828403121562000e1857600080fd5b600062000e288482850162000d96565b91505092915050565b62000e3c8162001100565b82525050565b600062000e4f82620010d9565b62000e5b8185620010e4565b935062000e6d8185602086016200114a565b80840191505092915050565b600062000e88602083620010ef565b91507f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65646000830152602082019050919050565b600062000eca602a83620010ef565b91507f5361666545524332303a204552433230206f7065726174696f6e20646964206e60008301527f6f742073756363656564000000000000000000000000000000000000000000006020830152604082019050919050565b600062000f32603683620010ef565b91507f5361666545524332303a20617070726f76652066726f6d206e6f6e2d7a65726f60008301527f20746f206e6f6e2d7a65726f20616c6c6f77616e6365000000000000000000006020830152604082019050919050565b600062000f9a601f83620010ef565b91507f5361666545524332303a2063616c6c20746f206e6f6e2d636f6e7472616374006000830152602082019050919050565b62000fd88162001140565b82525050565b600062000fec828462000e42565b915081905092915050565b60006040820190506200100e600083018562000e31565b6200101d602083018462000e31565b9392505050565b60006040820190506200103b600083018562000e31565b6200104a602083018462000fcd565b9392505050565b600060208201905081810360008301526200106c8162000e79565b9050919050565b600060208201905081810360008301526200108e8162000ebb565b9050919050565b60006020820190508181036000830152620010b08162000f23565b9050919050565b60006020820190508181036000830152620010d28162000f8b565b9050919050565b600081519050919050565b600081905092915050565b600082825260208201905092915050565b60006200110d8262001120565b9050919050565b60008115159050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b60005b838110156200116a5780820151818401526020810190506200114d565b838111156200117a576000848401525b50505050565b6200118b8162001100565b81146200119757600080fd5b50565b620011a58162001114565b8114620011b157600080fd5b50565b620011bf8162001140565b8114620011cb57600080fd5b50565b615fd880620011de6000396000f3fe608060405234801561001057600080fd5b50600436106103995760003560e01c80638da5cb5b116101e9578063b69ef8a81161010f578063e849d659116100ad578063f69e20461161007c578063f69e204614610a30578063f7c1ec7714610a4e578063f82ce27d14610a6c578063fc0c546a14610a8a57610399565b8063e849d659146109be578063f2fde38b146109da578063f5a41dea146109f6578063f5ff191614610a1457610399565b8063cf8ca426116100e9578063cf8ca42614610934578063d54e324414610952578063d9d7858a14610970578063dd62ed3e1461098e57610399565b8063b69ef8a8146108de578063b6b55f25146108fc578063bbf316441461091857610399565b8063a03e4bc311610187578063a9059cbb11610156578063a9059cbb14610858578063a9de245b14610888578063b098fc80146108a4578063b30d0bb2146108c257610399565b8063a03e4bc3146107ce578063a160176d146107ec578063a457c2d71461080a578063a72879711461083a57610399565b80638f9225ca116101c35780638f9225ca1461076c57806395d89b411461078a57806399b71d5c146107a85780639ff011b9146107b257610399565b80638da5cb5b146107125780638e4ec6ef146107305780638f32d59b1461074e57610399565b806346357473116102ce57806370a082311161026c5780637d7c2a1c1161023b5780637d7c2a1c146106b25780638124955c146106bc578063812adb06146106d8578063819faf7b146106f457610399565b806370a082311461063c5780637137ef991461066c578063715018a61461068a57806377c7b8fc1461069457610399565b806358782c21116102a857806358782c21146105c857806361c1ec55146105e657806365aab7491461060457806367e4b7401461062057610399565b8063463574731461057257806356cc93781461058e57806357ded9c9146105aa57610399565b806318160ddd1161033b578063313ce56711610315578063313ce567146104ea578063395093511461050857806339c0a7e11461053857806341c57c8d1461055657610399565b806318160ddd1461048057806323b872dd1461049e5780632e1a7d4d146104ce57610399565b8063085d488311610377578063085d4883146103f6578063095ea7b3146104145780630eb2a2671461044457806316f0115b1461046257610399565b806306636c1c1461039e57806306a3fe59146103ba57806306fdde03146103d8575b600080fd5b6103b860048036036103b39190810190614ce5565b610aa8565b005b6103c2610afb565b6040516103cf91906157ba565b60405180910390f35b6103e0610b21565b6040516103ed9190615902565b60405180910390f35b6103fe610bc3565b60405161040b91906158e7565b60405180910390f35b61042e60048036036104299190810190614bc8565b610bd6565b60405161043b91906158cc565b60405180910390f35b61044c610bf4565b6040516104599190615c0d565b60405180910390f35b61046a610ca6565b6040516104779190615c0d565b60405180910390f35b610488610cac565b6040516104959190615c0d565b60405180910390f35b6104b860048036036104b39190810190614b79565b610cb6565b6040516104c591906158cc565b60405180910390f35b6104e860048036036104e39190810190614ce5565b610d8f565b005b6104f2611139565b6040516104ff9190615c28565b60405180910390f35b610522600480360361051d9190810190614bc8565b611150565b60405161052f91906158cc565b60405180910390f35b610540611203565b60405161054d9190615c0d565b60405180910390f35b610570600480360361056b9190810190614ce5565b6112f3565b005b61058c60048036036105879190810190614aeb565b611346565b005b6105a860048036036105a39190810190614ce5565b6113d1565b005b6105b2611424565b6040516105bf91906157ba565b60405180910390f35b6105d061144a565b6040516105dd91906157ba565b60405180910390f35b6105ee611470565b6040516105fb9190615c0d565b60405180910390f35b61061e60048036036106199190810190614ce5565b611522565b005b61063a60048036036106359190810190614ce5565b611575565b005b61065660048036036106519190810190614aeb565b6115c8565b6040516106639190615c0d565b60405180910390f35b610674611610565b6040516106819190615c0d565b60405180910390f35b610692611683565b005b61069c61178b565b6040516106a99190615c0d565b60405180910390f35b6106ba6117cd565b005b6106d660048036036106d19190810190614ce5565b611913565b005b6106f260048036036106ed9190810190614aeb565b611966565b005b6106fc6119f1565b60405161070991906157ba565b60405180910390f35b61071a611a17565b60405161072791906157ba565b60405180910390f35b610738611a41565b60405161074591906157ba565b60405180910390f35b610756611a67565b60405161076391906158cc565b60405180910390f35b610774611ac6565b6040516107819190615c0d565b60405180910390f35b610792611b9a565b60405161079f9190615902565b60405180910390f35b6107b0611c3c565b005b6107cc60048036036107c79190810190614ce5565b612004565b005b6107d6612055565b6040516107e391906157ba565b60405180910390f35b6107f461207b565b60405161080191906158e7565b60405180910390f35b610824600480360361081f9190810190614bc8565b6121e7565b60405161083191906158cc565b60405180910390f35b6108426122b4565b60405161084f9190615c0d565b60405180910390f35b610872600480360361086d9190810190614bc8565b6123a0565b60405161087f91906158cc565b60405180910390f35b6108a2600480360361089d9190810190614aeb565b6123be565b005b6108ac612449565b6040516108b99190615c0d565b60405180910390f35b6108dc60048036036108d79190810190614ce5565b61251d565b005b6108e6612570565b6040516108f39190615c0d565b60405180910390f35b61091660048036036109119190810190614ce5565b612622565b005b610932600480360361092d9190810190614aeb565b612786565b005b61093c612811565b6040516109499190615c0d565b60405180910390f35b61095a6128c3565b6040516109679190615c0d565b60405180910390f35b610978612997565b6040516109859190615c0d565b60405180910390f35b6109a860048036036109a39190810190614b3d565b61299d565b6040516109b59190615c0d565b60405180910390f35b6109d860048036036109d39190810190614ce5565b612a24565b005b6109f460048036036109ef9190810190614aeb565b612a77565b005b6109fe612aca565b604051610a0b9190615c0d565b60405180910390f35b610a2e6004803603610a299190810190614aeb565b612b95565b005b610a38612c20565b604051610a4591906157ba565b60405180910390f35b610a56612c46565b604051610a6391906157ba565b60405180910390f35b610a74612ced565b604051610a8191906157ba565b60405180910390f35b610a92612d94565b604051610a9f91906157ba565b60405180910390f35b610ab0611a67565b610aef576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ae690615a44565b60405180910390fd5b610af881612dba565b50565b600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b606060038054600181600116156101000203166002900480601f016020809104026020016040519081016040528092919081815260200182805460018160011615610100020316600290048015610bb95780601f10610b8e57610100808354040283529160200191610bb9565b820191906000526020600020905b815481529060010190602001808311610b9c57829003601f168201915b5050505050905090565b601160149054906101000a900460ff1681565b6000610bea610be3612ff4565b8484612ffc565b6001905092915050565b6000600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401610c5191906157ba565b60206040518083038186803b158015610c6957600080fd5b505afa158015610c7d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250610ca19190810190614d0e565b905090565b60085481565b6000600254905090565b6000610cc38484846131c7565b610d8484610ccf612ff4565b610d7f85604051806060016040528060288152602001615f4960289139600160008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000610d35612ff4565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546134519092919063ffffffff16565b612ffc565b600190509392505050565b60016006600082825401925050819055506000600654905060008211610dea576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610de190615a84565b60405180910390fd5b6000610df5336115c8565b905080831115610e3a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e3190615a64565b60405180910390fd5b610e42611610565b6008819055506000610e73600254610e65866008546134ac90919063ffffffff16565b61351c90919063ffffffff16565b9050610efd846040518060400160405280601d81526020017f72656465656d20616d6f756e7420657863656564732062616c616e63650000008152506000803373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546134519092919063ffffffff16565b6000803373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550610f548460025461356690919063ffffffff16565b600281905550600073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef86604051610fb89190615c0d565b60405180910390a36000600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b815260040161101d91906157ba565b60206040518083038186803b15801561103557600080fd5b505afa158015611049573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525061106d9190810190614d0e565b9050818110156110935761109261108d828461356690919063ffffffff16565b6135b0565b5b6110e03383600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166137269092919063ffffffff16565b6110e8611610565b6008819055505050506006548114611135576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161112c90615b64565b60405180910390fd5b5050565b6000600560009054906101000a900460ff16905090565b60006111f961115d612ff4565b846111f4856001600061116e612ff4565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546137c590919063ffffffff16565b612ffc565b6001905092915050565b600061120d614842565b600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663c190c2ec60405180604001604052803073ffffffffffffffffffffffffffffffffffffffff16815260200160008152506010546040518363ffffffff1660e01b8152600401611297929190615be4565b604080518083038186803b1580156112ae57600080fd5b505afa1580156112c2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506112e69190810190614cbc565b9050806020015191505090565b6112fb611a67565b61133a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161133190615a44565b60405180910390fd5b6113438161381a565b50565b61134e611a67565b61138d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161138490615a44565b60405180910390fd5b80601160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6113d9611a67565b611418576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161140f90615a44565b60405180910390fd5b61142181613a54565b50565b601160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b81526004016114cd91906157ba565b60206040518083038186803b1580156114e557600080fd5b505afa1580156114f9573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525061151d9190810190614d0e565b905090565b61152a611a67565b611569576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161156090615a44565b60405180910390fd5b61157281613ae4565b50565b61157d611a67565b6115bc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115b390615a44565b60405180910390fd5b6115c581613b80565b50565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b600061167e61161d612570565b611670611628612811565b611662611633611203565b61165461163e612aca565b6116466122b4565b6137c590919063ffffffff16565b6137c590919063ffffffff16565b6137c590919063ffffffff16565b6137c590919063ffffffff16565b905090565b61168b611a67565b6116ca576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116c190615a44565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff16600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a36000600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b600080611796611610565b90506117c76002546117b9670de0b6b3a7640000846134ac90919063ffffffff16565b61351c90919063ffffffff16565b91505090565b60006117d761207b565b9050601160149054906101000a900460ff1660048111156117f457fe5b81600481111561180057fe5b1461180e5761180d613c26565b5b6000611818612570565b11156118ed576001600481111561182b57fe5b81600481111561183757fe5b14156118525761184d611848612570565b612dba565b6118ec565b60048081111561185e57fe5b81600481111561186a57fe5b14156118855761188061187b612570565b613ce1565b6118eb565b6002600481111561189257fe5b81600481111561189e57fe5b14156118b9576118b46118af612570565b613dd5565b6118ea565b600360048111156118c657fe5b8160048111156118d257fe5b14156118e9576118e86118e3612570565b613ae4565b5b5b5b5b5b80601160146101000a81548160ff0219169083600481111561190b57fe5b021790555050565b61191b611a67565b61195a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161195190615a44565b60405180910390fd5b61196381613ce1565b50565b61196e611a67565b6119ad576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119a490615a44565b60405180910390fd5b80600c60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16611aaa612ff4565b73ffffffffffffffffffffffffffffffffffffffff1614905090565b6000600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166040518263ffffffff1660e01b8152600401611b4591906157ba565b60206040518083038186803b158015611b5d57600080fd5b505afa158015611b71573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250611b959190810190614d0e565b905090565b606060048054600181600116156101000203166002900480601f016020809104026020016040519081016040528092919081815260200182805460018160011615610100020316600290048015611c325780601f10611c0757610100808354040283529160200191611c32565b820191906000526020600020905b815481529060010190602001808311611c1557829003601f168201915b5050505050905090565b611cac600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166000600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16613ec79092919063ffffffff16565b611d3b600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff167fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16613ec79092919063ffffffff16565b611dab600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166000600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16613ec79092919063ffffffff16565b611e3a600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff167fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16613ec79092919063ffffffff16565b611e8f611e45612ced565b6000600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16613ec79092919063ffffffff16565b611f03611e9a612ced565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16613ec79092919063ffffffff16565b611f73600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166000600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16613ec79092919063ffffffff16565b612002600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff167fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16613ec79092919063ffffffff16565b565b61200c611a67565b61204b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161204290615a44565b60405180910390fd5b8060108190555050565b600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000806000806000601160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663d88be3c0600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166040518263ffffffff1660e01b815260040161210091906157ba565b60006040518083038186803b15801561211857600080fd5b505afa15801561212c573d6000803e3d6000fd5b505050506040513d6000823e3d601f19601f820116820180604052506121559190810190614c2d565b94509450945094505060008090508085111561216f578490505b8084111561217b578390505b80831115612187578290505b80821115612193578190505b6000809050858214156121a957600290506121db565b848214156121ba57600490506121da565b838214156121cb57600390506121d9565b828214156121d857600190505b5b5b5b80965050505050505090565b60006122aa6121f4612ff4565b846122a585604051806060016040528060258152602001615f71602591396001600061221e612ff4565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546134519092919063ffffffff16565b612ffc565b6001905092915050565b6000806122bf611470565b9050600081111561239957612396670de0b6b3a7640000612388600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663182df0f56040518163ffffffff1660e01b815260040160206040518083038186803b15801561234157600080fd5b505afa158015612355573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506123799190810190614d0e565b846134ac90919063ffffffff16565b61351c90919063ffffffff16565b90505b8091505090565b60006123b46123ad612ff4565b84846131c7565b6001905092915050565b6123c6611a67565b612405576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123fc90615a44565b60405180910390fd5b80600e60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6000600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166040518263ffffffff1660e01b81526004016124c891906157ba565b60206040518083038186803b1580156124e057600080fd5b505afa1580156124f4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506125189190810190614d0e565b905090565b612525611a67565b612564576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161255b90615a44565b60405180910390fd5b61256d8161403e565b50565b6000600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b81526004016125cd91906157ba565b60206040518083038186803b1580156125e557600080fd5b505afa1580156125f9573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525061261d9190810190614d0e565b905090565b6001600660008282540192505081905550600060065490506000821161267d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161267490615b04565b60405180910390fd5b612685611610565b6008819055506126da333084600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166140e4909392919063ffffffff16565b6000809050600060085414156126f95782905082600881905550612725565b612722600854612714600254866134ac90919063ffffffff16565b61351c90919063ffffffff16565b90505b61272d611610565b60088190555061273d3382614186565b506006548114612782576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161277990615b64565b60405180910390fd5b5050565b61278e611a67565b6127cd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127c490615a44565b60405180910390fd5b80600b60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6000600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b815260040161286e91906157ba565b60206040518083038186803b15801561288657600080fd5b505afa15801561289a573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506128be9190810190614d0e565b905090565b6000600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166040518263ffffffff1660e01b815260040161294291906157ba565b60206040518083038186803b15801561295a57600080fd5b505afa15801561296e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506129929190810190614d0e565b905090565b60105481565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b612a2c611a67565b612a6b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a6290615a44565b60405180910390fd5b612a7481613dd5565b50565b612a7f611a67565b612abe576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ab590615a44565b60405180910390fd5b612ac78161430e565b50565b600080612ad5610bf4565b90506000811115612b8e57600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166306b3efd6306040518263ffffffff1660e01b8152600401612b3b91906157ba565b60206040518083038186803b158015612b5357600080fd5b505afa158015612b67573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250612b8b9190810190614d0e565b90505b8091505090565b612b9d611a67565b612bdc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612bd390615a44565b60405180910390fd5b80600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16630261bf8b6040518163ffffffff1660e01b815260040160206040518083038186803b158015612cb057600080fd5b505afa158015612cc4573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250612ce89190810190614b14565b905090565b6000600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ed6ff7606040518163ffffffff1660e01b815260040160206040518083038186803b158015612d5757600080fd5b505afa158015612d6b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250612d8f9190810190614b14565b905090565b600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60606001604051908082528060200260200182016040528015612df757816020015b612de461485e565b815260200190600190039081612ddc5790505b50905060405180604001604052803073ffffffffffffffffffffffffffffffffffffffff168152602001600081525081600081518110612e3357fe5b6020026020010181905250612e4661488e565b6040518060800160405280600115158152602001600080811115612e6657fe5b8152602001600080811115612e7757fe5b8152602001848152509050612e8a6148cc565b600081600001906001811115612e9c57fe5b90816001811115612ea957fe5b815250506000816020018181525050818160400181905250601054816060018181525050308160a0019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505060606001604051908082528060200260200182016040528015612f4257816020015b612f2f614938565b815260200190600190039081612f275790505b5090508181600081518110612f5357fe5b6020026020010181905250600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a67a6a4585836040518363ffffffff1660e01b8152600401612fbb929190615895565b600060405180830381600087803b158015612fd557600080fd5b505af1158015612fe9573d6000803e3d6000fd5b505050505050505050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141561306c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161306390615ae4565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156130dc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016130d390615984565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040516131ba9190615c0d565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415613237576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161322e90615aa4565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156132a7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161329e90615924565b60405180910390fd5b61331281604051806060016040528060268152602001615f23602691396000808773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546134519092919063ffffffff16565b6000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506133a5816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546137c590919063ffffffff16565b6000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516134449190615c0d565b60405180910390a3505050565b6000838311158290613499576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016134909190615902565b60405180910390fd5b5060008385039050809150509392505050565b6000808314156134bf5760009050613516565b60008284029050828482816134d057fe5b0414613511576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161350890615a04565b60405180910390fd5b809150505b92915050565b600061355e83836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f00000000000081525061443e565b905092915050565b60006135a883836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250613451565b905092915050565b600260048111156135bd57fe5b601160149054906101000a900460ff1660048111156135d857fe5b14156135e8576135e78161403e565b5b600360048111156135f557fe5b601160149054906101000a900460ff16600481111561361057fe5b141561366a578061361f612811565b1015613660576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161365790615ac4565b60405180910390fd5b61366981613a54565b5b6001600481111561367757fe5b601160149054906101000a900460ff16600481111561369257fe5b14156136ec57806136a1611203565b10156136e2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016136d990615ac4565b60405180910390fd5b6136eb8161381a565b5b6004808111156136f857fe5b601160149054906101000a900460ff16600481111561371357fe5b14156137235761372281613b80565b5b50565b6137c0838473ffffffffffffffffffffffffffffffffffffffff1663a9059cbb905060e01b848460405160240161375e929190615835565b604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff838183161783525050505061449f565b505050565b600080828401905083811015613810576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613807906159c4565b60405180910390fd5b8091505092915050565b6060600160405190808252806020026020018201604052801561385757816020015b61384461485e565b81526020019060019003908161383c5790505b50905060405180604001604052803073ffffffffffffffffffffffffffffffffffffffff16815260200160008152508160008151811061389357fe5b60200260200101819052506138a661488e565b60405180608001604052806000151581526020016000808111156138c657fe5b81526020016000808111156138d757fe5b81526020018481525090506138ea6148cc565b6001816000019060018111156138fc57fe5b9081600181111561390957fe5b815250506000816020018181525050818160400181905250601054816060018181525050308160a0019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050606060016040519080825280602002602001820160405280156139a257816020015b61398f614938565b8152602001906001900390816139875790505b50905081816000815181106139b357fe5b6020026020010181905250600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a67a6a4585836040518363ffffffff1660e01b8152600401613a1b929190615895565b600060405180830381600087803b158015613a3557600080fd5b505af1158015613a49573d6000803e3d6000fd5b505050505050505050565b600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663db006a75826040518263ffffffff1660e01b8152600401613aaf9190615c0d565b600060405180830381600087803b158015613ac957600080fd5b505af1158015613add573d6000803e3d6000fd5b5050505050565b613aec612c46565b73ffffffffffffffffffffffffffffffffffffffff1663d2d0e066600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff168360006040518463ffffffff1660e01b8152600401613b4b9392919061585e565b600060405180830381600087803b158015613b6557600080fd5b505af1158015613b79573d6000803e3d6000fd5b5050505050565b6000613b8a610bf4565b90506000613b96612aca565b905082811015613bdb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613bd290615ac4565b60405180910390fd5b6000613c156001613c0784613bf988886134ac90919063ffffffff16565b61351c90919063ffffffff16565b6137c590919063ffffffff16565b9050613c2081614611565b50505050565b6000613c30611470565b90506000811115613c5f57613c5e613c596001613c4b6122b4565b61356690919063ffffffff16565b61403e565b5b613c67611203565b90506000811115613c8357613c82613c7d6128c3565b61381a565b5b613c8b610bf4565b90506000811115613cba57613cb9613cb46001613ca6611ac6565b61356690919063ffffffff16565b613b80565b5b613cc2612811565b90506000811115613cde57613cdd613cd8612449565b613a54565b5b50565b6000600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166340c10f1930846040518363ffffffff1660e01b8152600401613d40929190615835565b602060405180830381600087803b158015613d5a57600080fd5b505af1158015613d6e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250613d929190810190614d0e565b11613dd2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613dc990615b24565b60405180910390fd5b50565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a0712d68836040518263ffffffff1660e01b8152600401613e329190615c0d565b602060405180830381600087803b158015613e4c57600080fd5b505af1158015613e60573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250613e849190810190614d0e565b14613ec4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613ebb906159a4565b60405180910390fd5b50565b6000811480613f60575060008373ffffffffffffffffffffffffffffffffffffffff1663dd62ed3e30856040518363ffffffff1660e01b8152600401613f0e9291906157d5565b60206040518083038186803b158015613f2657600080fd5b505afa158015613f3a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250613f5e9190810190614d0e565b145b613f9f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613f9690615b84565b60405180910390fd5b614039838473ffffffffffffffffffffffffffffffffffffffff1663095ea7b3905060e01b8484604051602401613fd7929190615835565b604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff838183161783525050505061449f565b505050565b6000614048611470565b905060006140546122b4565b905082811015614099576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161409090615ac4565b60405180910390fd5b60006140d360016140c5846140b788886134ac90919063ffffffff16565b61351c90919063ffffffff16565b6137c590919063ffffffff16565b90506140de81614705565b50505050565b614180848573ffffffffffffffffffffffffffffffffffffffff166323b872dd905060e01b85858560405160240161411e939291906157fe565b604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff838183161783525050505061449f565b50505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156141f6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016141ed90615bc4565b60405180910390fd5b61420b816002546137c590919063ffffffff16565b600281905550614262816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546137c590919063ffffffff16565b6000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516143029190615c0d565b60405180910390a35050565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141561437e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161437590615964565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a380600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60008083118290614485576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161447c9190615902565b60405180910390fd5b50600083858161449157fe5b049050809150509392505050565b6144be8273ffffffffffffffffffffffffffffffffffffffff166147f7565b6144fd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016144f490615ba4565b60405180910390fd5b600060608373ffffffffffffffffffffffffffffffffffffffff168360405161452691906157a3565b6000604051808303816000865af19150503d8060008114614563576040519150601f19603f3d011682016040523d82523d6000602084013e614568565b606091505b5091509150816145ad576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016145a4906159e4565b60405180910390fd5b60008151111561460b57808060200190516145cb9190810190614c04565b61460a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161460190615b44565b60405180910390fd5b5b50505050565b6000600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16639dc29fac30846040518363ffffffff1660e01b8152600401614670929190615835565b602060405180830381600087803b15801561468a57600080fd5b505af115801561469e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506146c29190810190614d0e565b11614702576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016146f990615a24565b60405180910390fd5b50565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663db006a75836040518263ffffffff1660e01b81526004016147629190615c0d565b602060405180830381600087803b15801561477c57600080fd5b505af1158015614790573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506147b49190810190614d0e565b146147f4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016147eb90615944565b60405180910390fd5b50565b60008060007fc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a47060001b9050833f91506000801b82141580156148395750808214155b92505050919050565b6040518060400160405280600015158152602001600081525090565b6040518060400160405280600073ffffffffffffffffffffffffffffffffffffffff168152602001600081525090565b60405180608001604052806000151581526020016000808111156148ae57fe5b81526020016000808111156148bf57fe5b8152602001600081525090565b604051806101000160405280600060018111156148e557fe5b8152602001600081526020016148f96149a4565b81526020016000815260200160008152602001600073ffffffffffffffffffffffffffffffffffffffff16815260200160008152602001606081525090565b6040518061010001604052806000600181111561495157fe5b8152602001600081526020016149656149a4565b81526020016000815260200160008152602001600073ffffffffffffffffffffffffffffffffffffffff16815260200160008152602001606081525090565b60405180608001604052806000151581526020016000808111156149c457fe5b81526020016000808111156149d557fe5b8152602001600081525090565b6000813590506149f181615edd565b92915050565b600081519050614a0681615edd565b92915050565b600081519050614a1b81615ef4565b92915050565b600082601f830112614a3257600080fd5b8151614a45614a4082615c70565b615c43565b91508082526020830160208301858383011115614a6157600080fd5b614a6c838284615e65565b50505092915050565b600060408284031215614a8757600080fd5b614a916040615c43565b90506000614aa184828501614a0c565b6000830152506020614ab584828501614ad6565b60208301525092915050565b600081359050614ad081615f0b565b92915050565b600081519050614ae581615f0b565b92915050565b600060208284031215614afd57600080fd5b6000614b0b848285016149e2565b91505092915050565b600060208284031215614b2657600080fd5b6000614b34848285016149f7565b91505092915050565b60008060408385031215614b5057600080fd5b6000614b5e858286016149e2565b9250506020614b6f858286016149e2565b9150509250929050565b600080600060608486031215614b8e57600080fd5b6000614b9c868287016149e2565b9350506020614bad868287016149e2565b9250506040614bbe86828701614ac1565b9150509250925092565b60008060408385031215614bdb57600080fd5b6000614be9858286016149e2565b9250506020614bfa85828601614ac1565b9150509250929050565b600060208284031215614c1657600080fd5b6000614c2484828501614a0c565b91505092915050565b600080600080600060a08688031215614c4557600080fd5b600086015167ffffffffffffffff811115614c5f57600080fd5b614c6b88828901614a21565b9550506020614c7c88828901614ad6565b9450506040614c8d88828901614ad6565b9350506060614c9e88828901614ad6565b9250506080614caf88828901614ad6565b9150509295509295909350565b600060408284031215614cce57600080fd5b6000614cdc84828501614a75565b91505092915050565b600060208284031215614cf757600080fd5b6000614d0584828501614ac1565b91505092915050565b600060208284031215614d2057600080fd5b6000614d2e84828501614ad6565b91505092915050565b6000614d438383615610565b905092915050565b6000614d578383615718565b60408301905092915050565b614d6c81615d5c565b82525050565b614d7b81615d5c565b82525050565b6000614d8c82615cbc565b614d968185615d0d565b935083602082028501614da885615c9c565b8060005b85811015614de45784840389528151614dc58582614d37565b9450614dd083615cf3565b925060208a01995050600181019050614dac565b50829750879550505050505092915050565b6000614e0182615cc7565b614e0b8185615d1e565b9350614e1683615cac565b8060005b83811015614e47578151614e2e8882614d4b565b9750614e3983615d00565b925050600181019050614e1a565b5085935050505092915050565b614e5d81615d6e565b82525050565b614e6c81615d6e565b82525050565b6000614e7d82615cdd565b614e878185615d40565b9350614e97818560208601615e65565b80840191505092915050565b6000614eae82615cd2565b614eb88185615d2f565b9350614ec8818560208601615e65565b614ed181615e98565b840191505092915050565b614ee581615e0b565b82525050565b614ef481615e1d565b82525050565b614f0381615e2f565b82525050565b614f1281615e41565b82525050565b614f2181615e53565b82525050565b6000614f3282615ce8565b614f3c8185615d4b565b9350614f4c818560208601615e65565b614f5581615e98565b840191505092915050565b6000614f6d602383615d4b565b91507f45524332303a207472616e7366657220746f20746865207a65726f206164647260008301527f65737300000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b6000614fd3601983615d4b565b91507f434f4d504f554e443a207769746864726177206661696c6564000000000000006000830152602082019050919050565b6000615013602683615d4b565b91507f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008301527f64647265737300000000000000000000000000000000000000000000000000006020830152604082019050919050565b6000615079602283615d4b565b91507f45524332303a20617070726f766520746f20746865207a65726f20616464726560008301527f73730000000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b60006150df601783615d4b565b91507f434f4d504f554e443a20737570706c79206661696c65640000000000000000006000830152602082019050919050565b600061511f601b83615d4b565b91507f536166654d6174683a206164646974696f6e206f766572666c6f7700000000006000830152602082019050919050565b600061515f602083615d4b565b91507f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65646000830152602082019050919050565b600061519f602183615d4b565b91507f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f60008301527f77000000000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b6000615205601883615d4b565b91507f46554c4352554d3a207769746864726177206661696c656400000000000000006000830152602082019050919050565b6000615245602083615d4b565b91507f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726000830152602082019050919050565b6000615285601483615d4b565b91507f696e73756666696369656e742062616c616e63650000000000000000000000006000830152602082019050919050565b60006152c5601f83615d4b565b91507f7769746864726177206d7573742062652067726561746572207468616e2030006000830152602082019050919050565b6000615305602583615d4b565b91507f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008301527f64726573730000000000000000000000000000000000000000000000000000006020830152604082019050919050565b600061536b601283615d4b565b91507f696e73756666696369656e742066756e647300000000000000000000000000006000830152602082019050919050565b60006153ab602483615d4b565b91507f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008301527f72657373000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b6000615411601e83615d4b565b91507f6465706f736974206d7573742062652067726561746572207468616e203000006000830152602082019050919050565b6000615451601683615d4b565b91507f46554c4352554d3a20737570706c79206661696c6564000000000000000000006000830152602082019050919050565b6000615491602a83615d4b565b91507f5361666545524332303a204552433230206f7065726174696f6e20646964206e60008301527f6f742073756363656564000000000000000000000000000000000000000000006020830152604082019050919050565b60006154f7601f83615d4b565b91507f5265656e7472616e637947756172643a207265656e7472616e742063616c6c006000830152602082019050919050565b6000615537603683615d4b565b91507f5361666545524332303a20617070726f76652066726f6d206e6f6e2d7a65726f60008301527f20746f206e6f6e2d7a65726f20616c6c6f77616e6365000000000000000000006020830152604082019050919050565b600061559d601f83615d4b565b91507f5361666545524332303a2063616c6c20746f206e6f6e2d636f6e7472616374006000830152602082019050919050565b60006155dd601f83615d4b565b91507f45524332303a206d696e7420746f20746865207a65726f2061646472657373006000830152602082019050919050565b6000610160830160008301516156296000860182614edc565b50602083015161563c6020860182615776565b50604083015161564f60408601826156c3565b50606083015161566260c0860182615776565b50608083015161567560e0860182615776565b5060a0830151615689610100860182614d63565b5060c083015161569d610120860182615776565b5060e08301518482036101408601526156b68282614ea3565b9150508091505092915050565b6080820160008201516156d96000850182614e54565b5060208201516156ec6020850182614eeb565b5060408201516156ff6040850182614efa565b5060608201516157126060850182615776565b50505050565b60408201600082015161572e6000850182614d63565b5060208201516157416020850182615776565b50505050565b60408201600082015161575d6000850182614d63565b5060208201516157706020850182615776565b50505050565b61577f81615df4565b82525050565b61578e81615df4565b82525050565b61579d81615dfe565b82525050565b60006157af8284614e72565b915081905092915050565b60006020820190506157cf6000830184614d72565b92915050565b60006040820190506157ea6000830185614d72565b6157f76020830184614d72565b9392505050565b60006060820190506158136000830186614d72565b6158206020830185614d72565b61582d6040830184615785565b949350505050565b600060408201905061584a6000830185614d72565b6158576020830184615785565b9392505050565b60006060820190506158736000830186614d72565b6158806020830185615785565b61588d6040830184614f18565b949350505050565b600060408201905081810360008301526158af8185614df6565b905081810360208301526158c38184614d81565b90509392505050565b60006020820190506158e16000830184614e63565b92915050565b60006020820190506158fc6000830184614f09565b92915050565b6000602082019050818103600083015261591c8184614f27565b905092915050565b6000602082019050818103600083015261593d81614f60565b9050919050565b6000602082019050818103600083015261595d81614fc6565b9050919050565b6000602082019050818103600083015261597d81615006565b9050919050565b6000602082019050818103600083015261599d8161506c565b9050919050565b600060208201905081810360008301526159bd816150d2565b9050919050565b600060208201905081810360008301526159dd81615112565b9050919050565b600060208201905081810360008301526159fd81615152565b9050919050565b60006020820190508181036000830152615a1d81615192565b9050919050565b60006020820190508181036000830152615a3d816151f8565b9050919050565b60006020820190508181036000830152615a5d81615238565b9050919050565b60006020820190508181036000830152615a7d81615278565b9050919050565b60006020820190508181036000830152615a9d816152b8565b9050919050565b60006020820190508181036000830152615abd816152f8565b9050919050565b60006020820190508181036000830152615add8161535e565b9050919050565b60006020820190508181036000830152615afd8161539e565b9050919050565b60006020820190508181036000830152615b1d81615404565b9050919050565b60006020820190508181036000830152615b3d81615444565b9050919050565b60006020820190508181036000830152615b5d81615484565b9050919050565b60006020820190508181036000830152615b7d816154ea565b9050919050565b60006020820190508181036000830152615b9d8161552a565b9050919050565b60006020820190508181036000830152615bbd81615590565b9050919050565b60006020820190508181036000830152615bdd816155d0565b9050919050565b6000606082019050615bf96000830185615747565b615c066040830184615785565b9392505050565b6000602082019050615c226000830184615785565b92915050565b6000602082019050615c3d6000830184615794565b92915050565b6000604051905081810181811067ffffffffffffffff82111715615c6657600080fd5b8060405250919050565b600067ffffffffffffffff821115615c8757600080fd5b601f19601f8301169050602081019050919050565b6000819050602082019050919050565b6000819050602082019050919050565b600081519050919050565b600081519050919050565b600081519050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b6000602082019050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b600082825260208201905092915050565b6000615d6782615dd4565b9050919050565b60008115159050919050565b6000819050615d8882615ea9565b919050565b6000819050615d9b82615eb6565b919050565b6000819050615dae82615ec3565b919050565b6000819050615dc182615ed0565b919050565b600061ffff82169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600060ff82169050919050565b6000615e1682615d7a565b9050919050565b6000615e2882615d8d565b9050919050565b6000615e3a82615da0565b9050919050565b6000615e4c82615db3565b9050919050565b6000615e5e82615dc6565b9050919050565b60005b83811015615e83578082015181840152602081019050615e68565b83811115615e92576000848401525b50505050565b6000601f19601f8301169050919050565b60028110615eb357fe5b50565b60018110615ec057fe5b50565b60018110615ecd57fe5b50565b60058110615eda57fe5b50565b615ee681615d5c565b8114615ef157600080fd5b50565b615efd81615d6e565b8114615f0857600080fd5b50565b615f1481615df4565b8114615f1f57600080fd5b5056fe45524332303a207472616e7366657220616d6f756e7420657863656564732062616c616e636545524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa365627a7a72315820cd0363eb01267572dd43b6ce6dc2d5ee86d41562cc3a570b0fd4bd380b247d5c6c6578706572696d656e74616cf564736f6c63430005100040

Deployed Bytecode

0x608060405234801561001057600080fd5b50600436106103995760003560e01c80638da5cb5b116101e9578063b69ef8a81161010f578063e849d659116100ad578063f69e20461161007c578063f69e204614610a30578063f7c1ec7714610a4e578063f82ce27d14610a6c578063fc0c546a14610a8a57610399565b8063e849d659146109be578063f2fde38b146109da578063f5a41dea146109f6578063f5ff191614610a1457610399565b8063cf8ca426116100e9578063cf8ca42614610934578063d54e324414610952578063d9d7858a14610970578063dd62ed3e1461098e57610399565b8063b69ef8a8146108de578063b6b55f25146108fc578063bbf316441461091857610399565b8063a03e4bc311610187578063a9059cbb11610156578063a9059cbb14610858578063a9de245b14610888578063b098fc80146108a4578063b30d0bb2146108c257610399565b8063a03e4bc3146107ce578063a160176d146107ec578063a457c2d71461080a578063a72879711461083a57610399565b80638f9225ca116101c35780638f9225ca1461076c57806395d89b411461078a57806399b71d5c146107a85780639ff011b9146107b257610399565b80638da5cb5b146107125780638e4ec6ef146107305780638f32d59b1461074e57610399565b806346357473116102ce57806370a082311161026c5780637d7c2a1c1161023b5780637d7c2a1c146106b25780638124955c146106bc578063812adb06146106d8578063819faf7b146106f457610399565b806370a082311461063c5780637137ef991461066c578063715018a61461068a57806377c7b8fc1461069457610399565b806358782c21116102a857806358782c21146105c857806361c1ec55146105e657806365aab7491461060457806367e4b7401461062057610399565b8063463574731461057257806356cc93781461058e57806357ded9c9146105aa57610399565b806318160ddd1161033b578063313ce56711610315578063313ce567146104ea578063395093511461050857806339c0a7e11461053857806341c57c8d1461055657610399565b806318160ddd1461048057806323b872dd1461049e5780632e1a7d4d146104ce57610399565b8063085d488311610377578063085d4883146103f6578063095ea7b3146104145780630eb2a2671461044457806316f0115b1461046257610399565b806306636c1c1461039e57806306a3fe59146103ba57806306fdde03146103d8575b600080fd5b6103b860048036036103b39190810190614ce5565b610aa8565b005b6103c2610afb565b6040516103cf91906157ba565b60405180910390f35b6103e0610b21565b6040516103ed9190615902565b60405180910390f35b6103fe610bc3565b60405161040b91906158e7565b60405180910390f35b61042e60048036036104299190810190614bc8565b610bd6565b60405161043b91906158cc565b60405180910390f35b61044c610bf4565b6040516104599190615c0d565b60405180910390f35b61046a610ca6565b6040516104779190615c0d565b60405180910390f35b610488610cac565b6040516104959190615c0d565b60405180910390f35b6104b860048036036104b39190810190614b79565b610cb6565b6040516104c591906158cc565b60405180910390f35b6104e860048036036104e39190810190614ce5565b610d8f565b005b6104f2611139565b6040516104ff9190615c28565b60405180910390f35b610522600480360361051d9190810190614bc8565b611150565b60405161052f91906158cc565b60405180910390f35b610540611203565b60405161054d9190615c0d565b60405180910390f35b610570600480360361056b9190810190614ce5565b6112f3565b005b61058c60048036036105879190810190614aeb565b611346565b005b6105a860048036036105a39190810190614ce5565b6113d1565b005b6105b2611424565b6040516105bf91906157ba565b60405180910390f35b6105d061144a565b6040516105dd91906157ba565b60405180910390f35b6105ee611470565b6040516105fb9190615c0d565b60405180910390f35b61061e60048036036106199190810190614ce5565b611522565b005b61063a60048036036106359190810190614ce5565b611575565b005b61065660048036036106519190810190614aeb565b6115c8565b6040516106639190615c0d565b60405180910390f35b610674611610565b6040516106819190615c0d565b60405180910390f35b610692611683565b005b61069c61178b565b6040516106a99190615c0d565b60405180910390f35b6106ba6117cd565b005b6106d660048036036106d19190810190614ce5565b611913565b005b6106f260048036036106ed9190810190614aeb565b611966565b005b6106fc6119f1565b60405161070991906157ba565b60405180910390f35b61071a611a17565b60405161072791906157ba565b60405180910390f35b610738611a41565b60405161074591906157ba565b60405180910390f35b610756611a67565b60405161076391906158cc565b60405180910390f35b610774611ac6565b6040516107819190615c0d565b60405180910390f35b610792611b9a565b60405161079f9190615902565b60405180910390f35b6107b0611c3c565b005b6107cc60048036036107c79190810190614ce5565b612004565b005b6107d6612055565b6040516107e391906157ba565b60405180910390f35b6107f461207b565b60405161080191906158e7565b60405180910390f35b610824600480360361081f9190810190614bc8565b6121e7565b60405161083191906158cc565b60405180910390f35b6108426122b4565b60405161084f9190615c0d565b60405180910390f35b610872600480360361086d9190810190614bc8565b6123a0565b60405161087f91906158cc565b60405180910390f35b6108a2600480360361089d9190810190614aeb565b6123be565b005b6108ac612449565b6040516108b99190615c0d565b60405180910390f35b6108dc60048036036108d79190810190614ce5565b61251d565b005b6108e6612570565b6040516108f39190615c0d565b60405180910390f35b61091660048036036109119190810190614ce5565b612622565b005b610932600480360361092d9190810190614aeb565b612786565b005b61093c612811565b6040516109499190615c0d565b60405180910390f35b61095a6128c3565b6040516109679190615c0d565b60405180910390f35b610978612997565b6040516109859190615c0d565b60405180910390f35b6109a860048036036109a39190810190614b3d565b61299d565b6040516109b59190615c0d565b60405180910390f35b6109d860048036036109d39190810190614ce5565b612a24565b005b6109f460048036036109ef9190810190614aeb565b612a77565b005b6109fe612aca565b604051610a0b9190615c0d565b60405180910390f35b610a2e6004803603610a299190810190614aeb565b612b95565b005b610a38612c20565b604051610a4591906157ba565b60405180910390f35b610a56612c46565b604051610a6391906157ba565b60405180910390f35b610a74612ced565b604051610a8191906157ba565b60405180910390f35b610a92612d94565b604051610a9f91906157ba565b60405180910390f35b610ab0611a67565b610aef576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ae690615a44565b60405180910390fd5b610af881612dba565b50565b600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b606060038054600181600116156101000203166002900480601f016020809104026020016040519081016040528092919081815260200182805460018160011615610100020316600290048015610bb95780601f10610b8e57610100808354040283529160200191610bb9565b820191906000526020600020905b815481529060010190602001808311610b9c57829003601f168201915b5050505050905090565b601160149054906101000a900460ff1681565b6000610bea610be3612ff4565b8484612ffc565b6001905092915050565b6000600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401610c5191906157ba565b60206040518083038186803b158015610c6957600080fd5b505afa158015610c7d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250610ca19190810190614d0e565b905090565b60085481565b6000600254905090565b6000610cc38484846131c7565b610d8484610ccf612ff4565b610d7f85604051806060016040528060288152602001615f4960289139600160008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000610d35612ff4565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546134519092919063ffffffff16565b612ffc565b600190509392505050565b60016006600082825401925050819055506000600654905060008211610dea576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610de190615a84565b60405180910390fd5b6000610df5336115c8565b905080831115610e3a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e3190615a64565b60405180910390fd5b610e42611610565b6008819055506000610e73600254610e65866008546134ac90919063ffffffff16565b61351c90919063ffffffff16565b9050610efd846040518060400160405280601d81526020017f72656465656d20616d6f756e7420657863656564732062616c616e63650000008152506000803373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546134519092919063ffffffff16565b6000803373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550610f548460025461356690919063ffffffff16565b600281905550600073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef86604051610fb89190615c0d565b60405180910390a36000600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b815260040161101d91906157ba565b60206040518083038186803b15801561103557600080fd5b505afa158015611049573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525061106d9190810190614d0e565b9050818110156110935761109261108d828461356690919063ffffffff16565b6135b0565b5b6110e03383600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166137269092919063ffffffff16565b6110e8611610565b6008819055505050506006548114611135576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161112c90615b64565b60405180910390fd5b5050565b6000600560009054906101000a900460ff16905090565b60006111f961115d612ff4565b846111f4856001600061116e612ff4565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546137c590919063ffffffff16565b612ffc565b6001905092915050565b600061120d614842565b600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663c190c2ec60405180604001604052803073ffffffffffffffffffffffffffffffffffffffff16815260200160008152506010546040518363ffffffff1660e01b8152600401611297929190615be4565b604080518083038186803b1580156112ae57600080fd5b505afa1580156112c2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506112e69190810190614cbc565b9050806020015191505090565b6112fb611a67565b61133a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161133190615a44565b60405180910390fd5b6113438161381a565b50565b61134e611a67565b61138d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161138490615a44565b60405180910390fd5b80601160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6113d9611a67565b611418576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161140f90615a44565b60405180910390fd5b61142181613a54565b50565b601160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b81526004016114cd91906157ba565b60206040518083038186803b1580156114e557600080fd5b505afa1580156114f9573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525061151d9190810190614d0e565b905090565b61152a611a67565b611569576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161156090615a44565b60405180910390fd5b61157281613ae4565b50565b61157d611a67565b6115bc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115b390615a44565b60405180910390fd5b6115c581613b80565b50565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b600061167e61161d612570565b611670611628612811565b611662611633611203565b61165461163e612aca565b6116466122b4565b6137c590919063ffffffff16565b6137c590919063ffffffff16565b6137c590919063ffffffff16565b6137c590919063ffffffff16565b905090565b61168b611a67565b6116ca576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116c190615a44565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff16600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a36000600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b600080611796611610565b90506117c76002546117b9670de0b6b3a7640000846134ac90919063ffffffff16565b61351c90919063ffffffff16565b91505090565b60006117d761207b565b9050601160149054906101000a900460ff1660048111156117f457fe5b81600481111561180057fe5b1461180e5761180d613c26565b5b6000611818612570565b11156118ed576001600481111561182b57fe5b81600481111561183757fe5b14156118525761184d611848612570565b612dba565b6118ec565b60048081111561185e57fe5b81600481111561186a57fe5b14156118855761188061187b612570565b613ce1565b6118eb565b6002600481111561189257fe5b81600481111561189e57fe5b14156118b9576118b46118af612570565b613dd5565b6118ea565b600360048111156118c657fe5b8160048111156118d257fe5b14156118e9576118e86118e3612570565b613ae4565b5b5b5b5b5b80601160146101000a81548160ff0219169083600481111561190b57fe5b021790555050565b61191b611a67565b61195a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161195190615a44565b60405180910390fd5b61196381613ce1565b50565b61196e611a67565b6119ad576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119a490615a44565b60405180910390fd5b80600c60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16611aaa612ff4565b73ffffffffffffffffffffffffffffffffffffffff1614905090565b6000600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166040518263ffffffff1660e01b8152600401611b4591906157ba565b60206040518083038186803b158015611b5d57600080fd5b505afa158015611b71573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250611b959190810190614d0e565b905090565b606060048054600181600116156101000203166002900480601f016020809104026020016040519081016040528092919081815260200182805460018160011615610100020316600290048015611c325780601f10611c0757610100808354040283529160200191611c32565b820191906000526020600020905b815481529060010190602001808311611c1557829003601f168201915b5050505050905090565b611cac600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166000600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16613ec79092919063ffffffff16565b611d3b600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff167fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16613ec79092919063ffffffff16565b611dab600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166000600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16613ec79092919063ffffffff16565b611e3a600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff167fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16613ec79092919063ffffffff16565b611e8f611e45612ced565b6000600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16613ec79092919063ffffffff16565b611f03611e9a612ced565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16613ec79092919063ffffffff16565b611f73600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166000600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16613ec79092919063ffffffff16565b612002600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff167fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16613ec79092919063ffffffff16565b565b61200c611a67565b61204b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161204290615a44565b60405180910390fd5b8060108190555050565b600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000806000806000601160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663d88be3c0600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166040518263ffffffff1660e01b815260040161210091906157ba565b60006040518083038186803b15801561211857600080fd5b505afa15801561212c573d6000803e3d6000fd5b505050506040513d6000823e3d601f19601f820116820180604052506121559190810190614c2d565b94509450945094505060008090508085111561216f578490505b8084111561217b578390505b80831115612187578290505b80821115612193578190505b6000809050858214156121a957600290506121db565b848214156121ba57600490506121da565b838214156121cb57600390506121d9565b828214156121d857600190505b5b5b5b80965050505050505090565b60006122aa6121f4612ff4565b846122a585604051806060016040528060258152602001615f71602591396001600061221e612ff4565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546134519092919063ffffffff16565b612ffc565b6001905092915050565b6000806122bf611470565b9050600081111561239957612396670de0b6b3a7640000612388600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663182df0f56040518163ffffffff1660e01b815260040160206040518083038186803b15801561234157600080fd5b505afa158015612355573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506123799190810190614d0e565b846134ac90919063ffffffff16565b61351c90919063ffffffff16565b90505b8091505090565b60006123b46123ad612ff4565b84846131c7565b6001905092915050565b6123c6611a67565b612405576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123fc90615a44565b60405180910390fd5b80600e60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6000600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166040518263ffffffff1660e01b81526004016124c891906157ba565b60206040518083038186803b1580156124e057600080fd5b505afa1580156124f4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506125189190810190614d0e565b905090565b612525611a67565b612564576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161255b90615a44565b60405180910390fd5b61256d8161403e565b50565b6000600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b81526004016125cd91906157ba565b60206040518083038186803b1580156125e557600080fd5b505afa1580156125f9573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525061261d9190810190614d0e565b905090565b6001600660008282540192505081905550600060065490506000821161267d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161267490615b04565b60405180910390fd5b612685611610565b6008819055506126da333084600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166140e4909392919063ffffffff16565b6000809050600060085414156126f95782905082600881905550612725565b612722600854612714600254866134ac90919063ffffffff16565b61351c90919063ffffffff16565b90505b61272d611610565b60088190555061273d3382614186565b506006548114612782576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161277990615b64565b60405180910390fd5b5050565b61278e611a67565b6127cd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127c490615a44565b60405180910390fd5b80600b60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6000600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b815260040161286e91906157ba565b60206040518083038186803b15801561288657600080fd5b505afa15801561289a573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506128be9190810190614d0e565b905090565b6000600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166040518263ffffffff1660e01b815260040161294291906157ba565b60206040518083038186803b15801561295a57600080fd5b505afa15801561296e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506129929190810190614d0e565b905090565b60105481565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b612a2c611a67565b612a6b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a6290615a44565b60405180910390fd5b612a7481613dd5565b50565b612a7f611a67565b612abe576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ab590615a44565b60405180910390fd5b612ac78161430e565b50565b600080612ad5610bf4565b90506000811115612b8e57600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166306b3efd6306040518263ffffffff1660e01b8152600401612b3b91906157ba565b60206040518083038186803b158015612b5357600080fd5b505afa158015612b67573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250612b8b9190810190614d0e565b90505b8091505090565b612b9d611a67565b612bdc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612bd390615a44565b60405180910390fd5b80600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16630261bf8b6040518163ffffffff1660e01b815260040160206040518083038186803b158015612cb057600080fd5b505afa158015612cc4573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250612ce89190810190614b14565b905090565b6000600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ed6ff7606040518163ffffffff1660e01b815260040160206040518083038186803b158015612d5757600080fd5b505afa158015612d6b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250612d8f9190810190614b14565b905090565b600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60606001604051908082528060200260200182016040528015612df757816020015b612de461485e565b815260200190600190039081612ddc5790505b50905060405180604001604052803073ffffffffffffffffffffffffffffffffffffffff168152602001600081525081600081518110612e3357fe5b6020026020010181905250612e4661488e565b6040518060800160405280600115158152602001600080811115612e6657fe5b8152602001600080811115612e7757fe5b8152602001848152509050612e8a6148cc565b600081600001906001811115612e9c57fe5b90816001811115612ea957fe5b815250506000816020018181525050818160400181905250601054816060018181525050308160a0019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505060606001604051908082528060200260200182016040528015612f4257816020015b612f2f614938565b815260200190600190039081612f275790505b5090508181600081518110612f5357fe5b6020026020010181905250600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a67a6a4585836040518363ffffffff1660e01b8152600401612fbb929190615895565b600060405180830381600087803b158015612fd557600080fd5b505af1158015612fe9573d6000803e3d6000fd5b505050505050505050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141561306c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161306390615ae4565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156130dc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016130d390615984565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040516131ba9190615c0d565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415613237576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161322e90615aa4565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156132a7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161329e90615924565b60405180910390fd5b61331281604051806060016040528060268152602001615f23602691396000808773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546134519092919063ffffffff16565b6000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506133a5816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546137c590919063ffffffff16565b6000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516134449190615c0d565b60405180910390a3505050565b6000838311158290613499576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016134909190615902565b60405180910390fd5b5060008385039050809150509392505050565b6000808314156134bf5760009050613516565b60008284029050828482816134d057fe5b0414613511576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161350890615a04565b60405180910390fd5b809150505b92915050565b600061355e83836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f00000000000081525061443e565b905092915050565b60006135a883836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250613451565b905092915050565b600260048111156135bd57fe5b601160149054906101000a900460ff1660048111156135d857fe5b14156135e8576135e78161403e565b5b600360048111156135f557fe5b601160149054906101000a900460ff16600481111561361057fe5b141561366a578061361f612811565b1015613660576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161365790615ac4565b60405180910390fd5b61366981613a54565b5b6001600481111561367757fe5b601160149054906101000a900460ff16600481111561369257fe5b14156136ec57806136a1611203565b10156136e2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016136d990615ac4565b60405180910390fd5b6136eb8161381a565b5b6004808111156136f857fe5b601160149054906101000a900460ff16600481111561371357fe5b14156137235761372281613b80565b5b50565b6137c0838473ffffffffffffffffffffffffffffffffffffffff1663a9059cbb905060e01b848460405160240161375e929190615835565b604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff838183161783525050505061449f565b505050565b600080828401905083811015613810576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613807906159c4565b60405180910390fd5b8091505092915050565b6060600160405190808252806020026020018201604052801561385757816020015b61384461485e565b81526020019060019003908161383c5790505b50905060405180604001604052803073ffffffffffffffffffffffffffffffffffffffff16815260200160008152508160008151811061389357fe5b60200260200101819052506138a661488e565b60405180608001604052806000151581526020016000808111156138c657fe5b81526020016000808111156138d757fe5b81526020018481525090506138ea6148cc565b6001816000019060018111156138fc57fe5b9081600181111561390957fe5b815250506000816020018181525050818160400181905250601054816060018181525050308160a0019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050606060016040519080825280602002602001820160405280156139a257816020015b61398f614938565b8152602001906001900390816139875790505b50905081816000815181106139b357fe5b6020026020010181905250600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a67a6a4585836040518363ffffffff1660e01b8152600401613a1b929190615895565b600060405180830381600087803b158015613a3557600080fd5b505af1158015613a49573d6000803e3d6000fd5b505050505050505050565b600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663db006a75826040518263ffffffff1660e01b8152600401613aaf9190615c0d565b600060405180830381600087803b158015613ac957600080fd5b505af1158015613add573d6000803e3d6000fd5b5050505050565b613aec612c46565b73ffffffffffffffffffffffffffffffffffffffff1663d2d0e066600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff168360006040518463ffffffff1660e01b8152600401613b4b9392919061585e565b600060405180830381600087803b158015613b6557600080fd5b505af1158015613b79573d6000803e3d6000fd5b5050505050565b6000613b8a610bf4565b90506000613b96612aca565b905082811015613bdb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613bd290615ac4565b60405180910390fd5b6000613c156001613c0784613bf988886134ac90919063ffffffff16565b61351c90919063ffffffff16565b6137c590919063ffffffff16565b9050613c2081614611565b50505050565b6000613c30611470565b90506000811115613c5f57613c5e613c596001613c4b6122b4565b61356690919063ffffffff16565b61403e565b5b613c67611203565b90506000811115613c8357613c82613c7d6128c3565b61381a565b5b613c8b610bf4565b90506000811115613cba57613cb9613cb46001613ca6611ac6565b61356690919063ffffffff16565b613b80565b5b613cc2612811565b90506000811115613cde57613cdd613cd8612449565b613a54565b5b50565b6000600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166340c10f1930846040518363ffffffff1660e01b8152600401613d40929190615835565b602060405180830381600087803b158015613d5a57600080fd5b505af1158015613d6e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250613d929190810190614d0e565b11613dd2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613dc990615b24565b60405180910390fd5b50565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a0712d68836040518263ffffffff1660e01b8152600401613e329190615c0d565b602060405180830381600087803b158015613e4c57600080fd5b505af1158015613e60573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250613e849190810190614d0e565b14613ec4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613ebb906159a4565b60405180910390fd5b50565b6000811480613f60575060008373ffffffffffffffffffffffffffffffffffffffff1663dd62ed3e30856040518363ffffffff1660e01b8152600401613f0e9291906157d5565b60206040518083038186803b158015613f2657600080fd5b505afa158015613f3a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250613f5e9190810190614d0e565b145b613f9f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613f9690615b84565b60405180910390fd5b614039838473ffffffffffffffffffffffffffffffffffffffff1663095ea7b3905060e01b8484604051602401613fd7929190615835565b604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff838183161783525050505061449f565b505050565b6000614048611470565b905060006140546122b4565b905082811015614099576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161409090615ac4565b60405180910390fd5b60006140d360016140c5846140b788886134ac90919063ffffffff16565b61351c90919063ffffffff16565b6137c590919063ffffffff16565b90506140de81614705565b50505050565b614180848573ffffffffffffffffffffffffffffffffffffffff166323b872dd905060e01b85858560405160240161411e939291906157fe565b604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff838183161783525050505061449f565b50505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156141f6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016141ed90615bc4565b60405180910390fd5b61420b816002546137c590919063ffffffff16565b600281905550614262816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546137c590919063ffffffff16565b6000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516143029190615c0d565b60405180910390a35050565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141561437e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161437590615964565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a380600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60008083118290614485576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161447c9190615902565b60405180910390fd5b50600083858161449157fe5b049050809150509392505050565b6144be8273ffffffffffffffffffffffffffffffffffffffff166147f7565b6144fd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016144f490615ba4565b60405180910390fd5b600060608373ffffffffffffffffffffffffffffffffffffffff168360405161452691906157a3565b6000604051808303816000865af19150503d8060008114614563576040519150601f19603f3d011682016040523d82523d6000602084013e614568565b606091505b5091509150816145ad576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016145a4906159e4565b60405180910390fd5b60008151111561460b57808060200190516145cb9190810190614c04565b61460a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161460190615b44565b60405180910390fd5b5b50505050565b6000600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16639dc29fac30846040518363ffffffff1660e01b8152600401614670929190615835565b602060405180830381600087803b15801561468a57600080fd5b505af115801561469e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506146c29190810190614d0e565b11614702576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016146f990615a24565b60405180910390fd5b50565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663db006a75836040518263ffffffff1660e01b81526004016147629190615c0d565b602060405180830381600087803b15801561477c57600080fd5b505af1158015614790573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506147b49190810190614d0e565b146147f4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016147eb90615944565b60405180910390fd5b50565b60008060007fc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a47060001b9050833f91506000801b82141580156148395750808214155b92505050919050565b6040518060400160405280600015158152602001600081525090565b6040518060400160405280600073ffffffffffffffffffffffffffffffffffffffff168152602001600081525090565b60405180608001604052806000151581526020016000808111156148ae57fe5b81526020016000808111156148bf57fe5b8152602001600081525090565b604051806101000160405280600060018111156148e557fe5b8152602001600081526020016148f96149a4565b81526020016000815260200160008152602001600073ffffffffffffffffffffffffffffffffffffffff16815260200160008152602001606081525090565b6040518061010001604052806000600181111561495157fe5b8152602001600081526020016149656149a4565b81526020016000815260200160008152602001600073ffffffffffffffffffffffffffffffffffffffff16815260200160008152602001606081525090565b60405180608001604052806000151581526020016000808111156149c457fe5b81526020016000808111156149d557fe5b8152602001600081525090565b6000813590506149f181615edd565b92915050565b600081519050614a0681615edd565b92915050565b600081519050614a1b81615ef4565b92915050565b600082601f830112614a3257600080fd5b8151614a45614a4082615c70565b615c43565b91508082526020830160208301858383011115614a6157600080fd5b614a6c838284615e65565b50505092915050565b600060408284031215614a8757600080fd5b614a916040615c43565b90506000614aa184828501614a0c565b6000830152506020614ab584828501614ad6565b60208301525092915050565b600081359050614ad081615f0b565b92915050565b600081519050614ae581615f0b565b92915050565b600060208284031215614afd57600080fd5b6000614b0b848285016149e2565b91505092915050565b600060208284031215614b2657600080fd5b6000614b34848285016149f7565b91505092915050565b60008060408385031215614b5057600080fd5b6000614b5e858286016149e2565b9250506020614b6f858286016149e2565b9150509250929050565b600080600060608486031215614b8e57600080fd5b6000614b9c868287016149e2565b9350506020614bad868287016149e2565b9250506040614bbe86828701614ac1565b9150509250925092565b60008060408385031215614bdb57600080fd5b6000614be9858286016149e2565b9250506020614bfa85828601614ac1565b9150509250929050565b600060208284031215614c1657600080fd5b6000614c2484828501614a0c565b91505092915050565b600080600080600060a08688031215614c4557600080fd5b600086015167ffffffffffffffff811115614c5f57600080fd5b614c6b88828901614a21565b9550506020614c7c88828901614ad6565b9450506040614c8d88828901614ad6565b9350506060614c9e88828901614ad6565b9250506080614caf88828901614ad6565b9150509295509295909350565b600060408284031215614cce57600080fd5b6000614cdc84828501614a75565b91505092915050565b600060208284031215614cf757600080fd5b6000614d0584828501614ac1565b91505092915050565b600060208284031215614d2057600080fd5b6000614d2e84828501614ad6565b91505092915050565b6000614d438383615610565b905092915050565b6000614d578383615718565b60408301905092915050565b614d6c81615d5c565b82525050565b614d7b81615d5c565b82525050565b6000614d8c82615cbc565b614d968185615d0d565b935083602082028501614da885615c9c565b8060005b85811015614de45784840389528151614dc58582614d37565b9450614dd083615cf3565b925060208a01995050600181019050614dac565b50829750879550505050505092915050565b6000614e0182615cc7565b614e0b8185615d1e565b9350614e1683615cac565b8060005b83811015614e47578151614e2e8882614d4b565b9750614e3983615d00565b925050600181019050614e1a565b5085935050505092915050565b614e5d81615d6e565b82525050565b614e6c81615d6e565b82525050565b6000614e7d82615cdd565b614e878185615d40565b9350614e97818560208601615e65565b80840191505092915050565b6000614eae82615cd2565b614eb88185615d2f565b9350614ec8818560208601615e65565b614ed181615e98565b840191505092915050565b614ee581615e0b565b82525050565b614ef481615e1d565b82525050565b614f0381615e2f565b82525050565b614f1281615e41565b82525050565b614f2181615e53565b82525050565b6000614f3282615ce8565b614f3c8185615d4b565b9350614f4c818560208601615e65565b614f5581615e98565b840191505092915050565b6000614f6d602383615d4b565b91507f45524332303a207472616e7366657220746f20746865207a65726f206164647260008301527f65737300000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b6000614fd3601983615d4b565b91507f434f4d504f554e443a207769746864726177206661696c6564000000000000006000830152602082019050919050565b6000615013602683615d4b565b91507f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008301527f64647265737300000000000000000000000000000000000000000000000000006020830152604082019050919050565b6000615079602283615d4b565b91507f45524332303a20617070726f766520746f20746865207a65726f20616464726560008301527f73730000000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b60006150df601783615d4b565b91507f434f4d504f554e443a20737570706c79206661696c65640000000000000000006000830152602082019050919050565b600061511f601b83615d4b565b91507f536166654d6174683a206164646974696f6e206f766572666c6f7700000000006000830152602082019050919050565b600061515f602083615d4b565b91507f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65646000830152602082019050919050565b600061519f602183615d4b565b91507f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f60008301527f77000000000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b6000615205601883615d4b565b91507f46554c4352554d3a207769746864726177206661696c656400000000000000006000830152602082019050919050565b6000615245602083615d4b565b91507f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726000830152602082019050919050565b6000615285601483615d4b565b91507f696e73756666696369656e742062616c616e63650000000000000000000000006000830152602082019050919050565b60006152c5601f83615d4b565b91507f7769746864726177206d7573742062652067726561746572207468616e2030006000830152602082019050919050565b6000615305602583615d4b565b91507f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008301527f64726573730000000000000000000000000000000000000000000000000000006020830152604082019050919050565b600061536b601283615d4b565b91507f696e73756666696369656e742066756e647300000000000000000000000000006000830152602082019050919050565b60006153ab602483615d4b565b91507f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008301527f72657373000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b6000615411601e83615d4b565b91507f6465706f736974206d7573742062652067726561746572207468616e203000006000830152602082019050919050565b6000615451601683615d4b565b91507f46554c4352554d3a20737570706c79206661696c6564000000000000000000006000830152602082019050919050565b6000615491602a83615d4b565b91507f5361666545524332303a204552433230206f7065726174696f6e20646964206e60008301527f6f742073756363656564000000000000000000000000000000000000000000006020830152604082019050919050565b60006154f7601f83615d4b565b91507f5265656e7472616e637947756172643a207265656e7472616e742063616c6c006000830152602082019050919050565b6000615537603683615d4b565b91507f5361666545524332303a20617070726f76652066726f6d206e6f6e2d7a65726f60008301527f20746f206e6f6e2d7a65726f20616c6c6f77616e6365000000000000000000006020830152604082019050919050565b600061559d601f83615d4b565b91507f5361666545524332303a2063616c6c20746f206e6f6e2d636f6e7472616374006000830152602082019050919050565b60006155dd601f83615d4b565b91507f45524332303a206d696e7420746f20746865207a65726f2061646472657373006000830152602082019050919050565b6000610160830160008301516156296000860182614edc565b50602083015161563c6020860182615776565b50604083015161564f60408601826156c3565b50606083015161566260c0860182615776565b50608083015161567560e0860182615776565b5060a0830151615689610100860182614d63565b5060c083015161569d610120860182615776565b5060e08301518482036101408601526156b68282614ea3565b9150508091505092915050565b6080820160008201516156d96000850182614e54565b5060208201516156ec6020850182614eeb565b5060408201516156ff6040850182614efa565b5060608201516157126060850182615776565b50505050565b60408201600082015161572e6000850182614d63565b5060208201516157416020850182615776565b50505050565b60408201600082015161575d6000850182614d63565b5060208201516157706020850182615776565b50505050565b61577f81615df4565b82525050565b61578e81615df4565b82525050565b61579d81615dfe565b82525050565b60006157af8284614e72565b915081905092915050565b60006020820190506157cf6000830184614d72565b92915050565b60006040820190506157ea6000830185614d72565b6157f76020830184614d72565b9392505050565b60006060820190506158136000830186614d72565b6158206020830185614d72565b61582d6040830184615785565b949350505050565b600060408201905061584a6000830185614d72565b6158576020830184615785565b9392505050565b60006060820190506158736000830186614d72565b6158806020830185615785565b61588d6040830184614f18565b949350505050565b600060408201905081810360008301526158af8185614df6565b905081810360208301526158c38184614d81565b90509392505050565b60006020820190506158e16000830184614e63565b92915050565b60006020820190506158fc6000830184614f09565b92915050565b6000602082019050818103600083015261591c8184614f27565b905092915050565b6000602082019050818103600083015261593d81614f60565b9050919050565b6000602082019050818103600083015261595d81614fc6565b9050919050565b6000602082019050818103600083015261597d81615006565b9050919050565b6000602082019050818103600083015261599d8161506c565b9050919050565b600060208201905081810360008301526159bd816150d2565b9050919050565b600060208201905081810360008301526159dd81615112565b9050919050565b600060208201905081810360008301526159fd81615152565b9050919050565b60006020820190508181036000830152615a1d81615192565b9050919050565b60006020820190508181036000830152615a3d816151f8565b9050919050565b60006020820190508181036000830152615a5d81615238565b9050919050565b60006020820190508181036000830152615a7d81615278565b9050919050565b60006020820190508181036000830152615a9d816152b8565b9050919050565b60006020820190508181036000830152615abd816152f8565b9050919050565b60006020820190508181036000830152615add8161535e565b9050919050565b60006020820190508181036000830152615afd8161539e565b9050919050565b60006020820190508181036000830152615b1d81615404565b9050919050565b60006020820190508181036000830152615b3d81615444565b9050919050565b60006020820190508181036000830152615b5d81615484565b9050919050565b60006020820190508181036000830152615b7d816154ea565b9050919050565b60006020820190508181036000830152615b9d8161552a565b9050919050565b60006020820190508181036000830152615bbd81615590565b9050919050565b60006020820190508181036000830152615bdd816155d0565b9050919050565b6000606082019050615bf96000830185615747565b615c066040830184615785565b9392505050565b6000602082019050615c226000830184615785565b92915050565b6000602082019050615c3d6000830184615794565b92915050565b6000604051905081810181811067ffffffffffffffff82111715615c6657600080fd5b8060405250919050565b600067ffffffffffffffff821115615c8757600080fd5b601f19601f8301169050602081019050919050565b6000819050602082019050919050565b6000819050602082019050919050565b600081519050919050565b600081519050919050565b600081519050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b6000602082019050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b600082825260208201905092915050565b6000615d6782615dd4565b9050919050565b60008115159050919050565b6000819050615d8882615ea9565b919050565b6000819050615d9b82615eb6565b919050565b6000819050615dae82615ec3565b919050565b6000819050615dc182615ed0565b919050565b600061ffff82169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600060ff82169050919050565b6000615e1682615d7a565b9050919050565b6000615e2882615d8d565b9050919050565b6000615e3a82615da0565b9050919050565b6000615e4c82615db3565b9050919050565b6000615e5e82615dc6565b9050919050565b60005b83811015615e83578082015181840152602081019050615e68565b83811115615e92576000848401525b50505050565b6000601f19601f8301169050919050565b60028110615eb357fe5b50565b60018110615ec057fe5b50565b60018110615ecd57fe5b50565b60058110615eda57fe5b50565b615ee681615d5c565b8114615ef157600080fd5b50565b615efd81615d6e565b8114615f0857600080fd5b50565b615f1481615df4565b8114615f1f57600080fd5b5056fe45524332303a207472616e7366657220616d6f756e7420657863656564732062616c616e636545524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa365627a7a72315820cd0363eb01267572dd43b6ce6dc2d5ee86d41562cc3a570b0fd4bd380b247d5c6c6578706572696d656e74616cf564736f6c63430005100040

Deployed Bytecode Sourcemap

13021:11630:0:-;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;13021:11630:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;24285:87;;;;;;;;;;;;;;;;:::i;:::-;;13350:24;;;:::i;:::-;;;;;;;;;;;;;;;;5991:83;;;:::i;:::-;;;;;;;;;;;;;;;;13549:36;;;:::i;:::-;;;;;;;;;;;;;;;;3011:152;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;18958:116;;;:::i;:::-;;;;;;;;;;;;;;;;13194:19;;;:::i;:::-;;;;;;;;;;;;;;;;2494:91;;;:::i;:::-;;;;;;;;;;;;;;;;3169:304;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;15510:897;;;;;;;;;;;;;;;;:::i;:::-;;6173:83;;;:::i;:::-;;;;;;;;;;;;;;;;3479:210;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;18082:166;;;:::i;:::-;;;;;;;;;;;;;;;;24188:91;;;;;;;;;;;;;;;;:::i;:::-;;14240:85;;;;;;;;;;;;;;;;:::i;:::-;;24096:88;;;;;;;;;;;;;;;;:::i;:::-;;13429:18;;;:::i;:::-;;;;;;;;;;;;;;;;13271:22;;;:::i;:::-;;;;;;;;;;;;;;;;18252:120;;;:::i;:::-;;;;;;;;;;;;;;;;24376:82;;;;;;;;;;;;;;;;:::i;:::-;;23987:105;;;;;;;;;;;;;;;;:::i;:::-;;2591:110;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;23493:217;;;:::i;:::-;;;;;;;;;;;;;;;;1769:140;;;:::i;:::-;;23716:154;;;:::i;:::-;;;;;;;;;;;;;;;;19320:547;;;:::i;:::-;;24462:90;;;;;;;;;;;;;;;;:::i;:::-;;14644:89;;;;;;;;;;;;;;;;:::i;:::-;;13298:19;;;:::i;:::-;;;;;;;;;;;;;;;;1472:79;;;:::i;:::-;;;;;;;;;;;;;;;;13379:19;;;:::i;:::-;;;;;;;;;;;;;;;;1669:94;;;:::i;:::-;;;;;;;;;;;;;;;;18628:119;;;:::i;:::-;;;;;;;;;;;;;;;;6080:87;;;:::i;:::-;;;;;;;;;;;;;;;;17383:465;;;:::i;:::-;;14543:97;;;;;;;;;;;;;;;;:::i;:::-;;13322:23;;;:::i;:::-;;;;;;;;;;;;;;;;16413:706;;;:::i;:::-;;;;;;;;;;;;;;;;3695:261;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;18376:248;;;:::i;:::-;;;;;;;;;;;;;;;;2707:158;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;14737:100;;;;;;;;;;;;;;;;:::i;:::-;;19078:117;;;:::i;:::-;;;;;;;;;;;;;;;;23876:107;;;;;;;;;;;;;;;;:::i;:::-;;17854;;;:::i;:::-;;;;;;;;;;;;;;;;14890:548;;;;;;;;;;;;;;;;:::i;:::-;;14329:101;;;;;;;;;;;;;;;;:::i;:::-;;19199:115;;;:::i;:::-;;;;;;;;;;;;;;;;17965:113;;;:::i;:::-;;;;;;;;;;;;;;;;13403:21;;;:::i;:::-;;;;;;;;;;;;;;;;2871:134;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;24556:92;;;;;;;;;;;;;;;;:::i;:::-;;1915:109;;;;;;;;;;;;;;;;:::i;:::-;;18751:203;;;:::i;:::-;;;;;;;;;;;;;;;;14434:105;;;;;;;;;;;;;;;;:::i;:::-;;13243:23;;;:::i;:::-;;;;;;;;;;;;;;;;17125:120;;;:::i;:::-;;;;;;;;;;;;;;;;17249:128;;;:::i;:::-;;;;;;;;;;;;;;;;13218:20;;;:::i;:::-;;;;;;;;;;;;;;;;24285:87;1597:9;:7;:9::i;:::-;1589:54;;;;;;;;;;;;;;;;;;;;;;24347:19;24359:6;24347:11;:19::i;:::-;24285:87;:::o;13350:24::-;;;;;;;;;;;;;:::o;5991:83::-;6028:13;6061:5;6054:12;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5991:83;:::o;13549: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;18958:116::-;19005:7;19035;;;;;;;;;;;19028:25;;;19062:4;19028:40;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;19028:40:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;19028: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;19028:40:0;;;;;;;;;19021:47;;18958:116;:::o;13194:19::-;;;;:::o;2494:91::-;2538:7;2565:12;;2558:19;;2494:91;:::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;15510:897::-;6453:1;6436:13;;:18;;;;;;;;;;;6465:20;6488:13;;6465:36;;15611:1;15601:7;:11;15593:55;;;;;;;;;;;;;;;;;;;;;;15659:16;15678:21;15688:10;15678:9;:21::i;:::-;15659:40;;15727:8;15716:7;:19;;15708:52;;;;;;;;;;;;;;;;;;;;;;15823:22;:20;:22::i;:::-;15816:4;:29;;;;15904:9;15916:37;15940:12;;15917:17;15926:7;15917:4;;:8;;:17;;;;:::i;:::-;15916:23;;:37;;;;:::i;:::-;15904:49;;15990:67;16016:7;15990:67;;;;;;;;;;;;;;;;;:9;:21;16000:10;15990:21;;;;;;;;;;;;;;;;:25;;:67;;;;;:::i;:::-;15966:9;:21;15976:10;15966:21;;;;;;;;;;;;;;;:91;;;;16081:25;16098:7;16081:12;;:16;;:25;;;;:::i;:::-;16066:12;:40;;;;16151:1;16122:41;;16131:10;16122:41;;;16155:7;16122:41;;;;;;;;;;;;;;;16198:9;16217:5;;;;;;;;;;;16210:23;;;16242:4;16210:38;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;16210:38:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;16210: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;16210:38:0;;;;;;;;;16198:50;;16265:1;16261;:5;16257:55;;;16279:23;16293:8;16299:1;16293;:5;;:8;;;;:::i;:::-;16279:13;:23::i;:::-;16257:55;16322:41;16349:10;16361:1;16329:5;;;;;;;;;;;16322:26;;;;:41;;;;;:::i;:::-;16379:22;:20;:22::i;:::-;16372:4;:29;;;;6512:1;;;6548:13;;6532:12;:29;6524:73;;;;;;;;;;;;;;;;;;;;;;15510: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;18082:166::-;18126:7;18144:14;;:::i;:::-;18166:4;;;;;;;;;;;18161:24;;;18186:22;;;;;;;;18199:4;18186:22;;;;;;18206:1;18186:22;;;18210:6;;18161:56;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;18161:56:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;18161: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;18161:56:0;;;;;;;;;18144:73;;18233:3;:9;;;18226:16;;;18082:166;:::o;24188:91::-;1597:9;:7;:9::i;:::-;1589:54;;;;;;;;;;;;;;;;;;;;;;24252:21;24266:6;24252:13;:21::i;:::-;24188:91;:::o;14240:85::-;1597:9;:7;:9::i;:::-;1589:54;;;;;;;;;;;;;;;;;;;;;;14311:8;14305:3;;:14;;;;;;;;;;;;;;;;;;14240:85;:::o;24096:88::-;1597:9;:7;:9::i;:::-;1589:54;;;;;;;;;;;;;;;;;;;;;;24157:21;24171:6;24157:13;:21::i;:::-;24096:88;:::o;13429:18::-;;;;;;;;;;;;;:::o;13271:22::-;;;;;;;;;;;;;:::o;18252:120::-;18300:7;18332:8;;;;;;;;;;;18325:26;;;18360:4;18325:41;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;18325:41:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;18325: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;18325:41:0;;;;;;;;;18318:48;;18252:120;:::o;24376:82::-;1597:9;:7;:9::i;:::-;1589:54;;;;;;;;;;;;;;;;;;;;;;24433:19;24445:6;24433:11;:19::i;:::-;24376:82;:::o;23987:105::-;1597:9;:7;:9::i;:::-;1589:54;;;;;;;;;;;;;;;;;;;;;;24057:29;24078:7;24057:20;:29::i;:::-;23987:105;:::o;2591:110::-;2648:7;2675:9;:18;2685:7;2675:18;;;;;;;;;;;;;;;;2668:25;;2591:110;;;:::o;23493:217::-;23546:4;23566:138;23694:9;:7;:9::i;:::-;23566:115;23667:13;:11;:13::i;:::-;23566:88;23640:13;:11;:13::i;:::-;23566:61;23603:23;:21;:23::i;:::-;23566:24;:22;:24::i;:::-;:36;;:61;;;;:::i;:::-;:73;;:88;;;;:::i;:::-;:100;;:115;;;;:::i;:::-;:127;;:138;;;;:::i;:::-;23559:145;;23493: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;23716:154::-;23769:4;23782:10;23795:22;:20;:22::i;:::-;23782:35;;23831:33;23851:12;;23831:15;23841:4;23831:5;:9;;:15;;;;:::i;:::-;:19;;:33;;;;:::i;:::-;23824:40;;;23716:154;:::o;19320:547::-;19355:18;19376:11;:9;:11::i;:::-;19355:32;;19415:8;;;;;;;;;;;19400:23;;;;;;;;:11;:23;;;;;;;;;19396:60;;19434:14;:12;:14::i;:::-;19396:60;19480:1;19468:9;:7;:9::i;:::-;:13;19464:367;;;19511:11;19496:26;;;;;;;;:11;:26;;;;;;;;;19492:332;;;19535:22;19547:9;:7;:9::i;:::-;19535:11;:22::i;:::-;19492:332;;;19592:14;19577:29;;;;;;;;:11;:29;;;;;;;;;19573:251;;;19619:25;19634:9;:7;:9::i;:::-;19619:14;:25::i;:::-;19573:251;;;19679:15;19664:30;;;;;;;;:11;:30;;;;;;;;;19660:164;;;19707:26;19723:9;:7;:9::i;:::-;19707:15;:26::i;:::-;19660:164;;;19768:11;19753:26;;;;;;;;:11;:26;;;;;;;;;19749:75;;;19792:22;19804:9;:7;:9::i;:::-;19792:11;:22::i;:::-;19749:75;19660:164;19573:251;19492:332;19464:367;19850:11;19839:8;;:22;;;;;;;;;;;;;;;;;;;;;;;;19320:547;:::o;24462:90::-;1597:9;:7;:9::i;:::-;1589:54;;;;;;;;;;;;;;;;;;;;;;24524:22;24539:6;24524:14;:22::i;:::-;24462:90;:::o;14644:89::-;1597:9;:7;:9::i;:::-;1589:54;;;;;;;;;;;;;;;;;;;;;;14718:9;14711:4;;:16;;;;;;;;;;;;;;;;;;14644:89;:::o;13298:19::-;;;;;;;;;;;;;:::o;1472:79::-;1510:7;1537:6;;;;;;;;;;;1530:13;;1472:79;:::o;13379:19::-;;;;;;;;;;;;;:::o;1669:94::-;1709:4;1749:6;;;;;;;;;;;1733:22;;:12;:10;:12::i;:::-;:22;;;1726:29;;1669:94;:::o;18628:119::-;18684:7;18716:5;;;;;;;;;;;18709:23;;;18733:7;;;;;;;;;;;18709:32;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;18709:32:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;18709:32: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;18709:32:0;;;;;;;;;18702:39;;18628:119;:::o;6080:87::-;6119:13;6152:7;6145:14;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6080:87;:::o;17383:465::-;17423:44;17449:8;;;;;;;;;;;17464:1;17430:5;;;;;;;;;;;17423:25;;;;:44;;;;;:::i;:::-;17476:45;17502:8;;;;;;;;;;;17517:2;17483:5;;;;;;;;;;;17476:25;;;;:45;;;;;:::i;:::-;17530:40;17556:4;;;;;;;;;;;17567:1;17537:5;;;;;;;;;;;17530:25;;;;:40;;;;;:::i;:::-;17579:41;17605:4;;;;;;;;;;;17616:2;17586:5;;;;;;;;;;;17579:25;;;;:41;;;;;:::i;:::-;17629:49;17655:13;:11;:13::i;:::-;17675:1;17636:5;;;;;;;;;;;17629:25;;;;:49;;;;;:::i;:::-;17687:50;17713:13;:11;:13::i;:::-;17733:2;17694:5;;;;;;;;;;;17687:25;;;;:50;;;;;:::i;:::-;17746:43;17772:7;;;;;;;;;;;17786:1;17753:5;;;;;;;;;;;17746:25;;;;:43;;;;;:::i;:::-;17798:44;17824:7;;;;;;;;;;;17838:2;17805:5;;;;;;;;;;;17798:25;;;;:44;;;;;:::i;:::-;17383:465::o;14543:97::-;1597:9;:7;:9::i;:::-;1589:54;;;;;;;;;;;;;;;;;;;;;;14623:11;14614:6;:20;;;;14543:97;:::o;13322:23::-;;;;;;;;;;;;;:::o;16413:706::-;16455:6;16472:12;16485;16498;16511;16541:3;;;;;;;;;;;16527:28;;;16556:5;;;;;;;;;;;16527:35;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;16527:35:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;16527:35:0;;;;;;39:16:-1;36:1;17:17;2:54;16527: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;16527:35:0;;;;;;;;;16470:92;;;;;;;;;16569:11;16583:1;16569:15;;16602:3;16595:4;:10;16591:43;;;16622:4;16616:10;;16591:43;16651:3;16644:4;:10;16640:43;;;16671:4;16665:10;;16640:43;16700:3;16693:4;:10;16689:43;;;16720:4;16714:10;;16689:43;16749:3;16742:4;:10;16738:43;;;16769:4;16763:10;;16738:43;16789:18;16810:11;16789:32;;16839:4;16832:3;:11;16828:261;;;16868:15;16854:29;;16828:261;;;16908:4;16901:3;:11;16897:192;;;16937:14;16923:28;;16897:192;;;16976:4;16969:3;:11;16965:124;;;17005:11;16991:25;;16965:124;;;17041:4;17034:3;:11;17030:59;;;17070:11;17056:25;;17030:59;16965:124;16897:192;16828:261;17102:11;17095:18;;;;;;;;16413: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;18376:248::-;18431:7;18480:9;18492:17;:15;:17::i;:::-;18480:29;;18524:1;18520;:5;18516:88;;;18540:56;18591:4;18540:46;18555:8;;;;;;;;;;;18546:37;;;:39;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;18546:39:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;18546: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;18546:39:0;;;;;;;;;18540:1;:5;;:46;;;;:::i;:::-;:50;;:56;;;;:::i;:::-;18536:60;;18516:88;18617:1;18610:8;;;18376: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;14737:100::-;1597:9;:7;:9::i;:::-;1589:54;;;;;;;;;;;;;;;;;;;;;;14820:11;14808:9;;:23;;;;;;;;;;;;;;;;;;14737:100;:::o;19078:117::-;19131:7;19163:5;;;;;;;;;;;19156:23;;;19180:8;;;;;;;;;;;19156:33;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;19156:33:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;19156: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;19156:33:0;;;;;;;;;19149:40;;19078:117;:::o;23876:107::-;1597:9;:7;:9::i;:::-;1589:54;;;;;;;;;;;;;;;;;;;;;;23947:30;23969:7;23947:21;:30::i;:::-;23876:107;:::o;17854:::-;17894:7;17924:5;;;;;;;;;;;17917:23;;;17949:4;17917:38;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;17917:38:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;17917: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;17917:38:0;;;;;;;;;17910:45;;17854:107;:::o;14890:548::-;6453:1;6436:13;;:18;;;;;;;;;;;6465:20;6488:13;;6465:36;;14990:1;14980:7;:11;14972:54;;;;;;;;;;;;;;;;;;;;;;15042:22;:20;:22::i;:::-;15035:4;:29;;;;15075:66;15106:10;15126:4;15133:7;15082:5;;;;;;;;;;;15075:30;;;;:66;;;;;;:::i;:::-;15184:14;15201:1;15184:18;;15223:1;15215:4;;:9;15211:150;;;15246:7;15237:16;;15271:7;15264:4;:14;;;;15211:150;;;15314:37;15346:4;;15315:25;15327:12;;15315:7;:11;;:25;;;;:::i;:::-;15314:31;;:37;;;;:::i;:::-;15305:46;;15211:150;15376:22;:20;:22::i;:::-;15369:4;:29;;;;15407:25;15413:10;15425:6;15407:5;:25::i;:::-;6512:1;6548:13;;6532:12;:29;6524:73;;;;;;;;;;;;;;;;;;;;;;14890:548;;:::o;14329:101::-;1597:9;:7;:9::i;:::-;1589:54;;;;;;;;;;;;;;;;;;;;;;14412:12;14402:7;;:22;;;;;;;;;;;;;;;;;;14329:101;:::o;19199:115::-;19243:7;19273:9;;;;;;;;;;;19266:27;;;19302:4;19266:42;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;19266:42:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;19266: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;19266:42:0;;;;;;;;;19259:49;;19199:115;:::o;17965:113::-;18018:7;18050:5;;;;;;;;;;;18043:23;;;18067:4;;;;;;;;;;;18043:29;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;18043:29:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;18043: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;18043:29:0;;;;;;;;;18036:36;;17965:113;:::o;13403:21::-;;;;:::o;2871:134::-;2943:7;2970:11;:18;2982:5;2970:18;;;;;;;;;;;;;;;:27;2989:7;2970:27;;;;;;;;;;;;;;;;2963:34;;2871:134;;;;:::o;24556:92::-;1597:9;:7;:9::i;:::-;1589:54;;;;;;;;;;;;;;;;;;;;;;24619:23;24635:6;24619:15;:23::i;:::-;24556:92;:::o;1915:109::-;1597:9;:7;:9::i;:::-;1589:54;;;;;;;;;;;;;;;;;;;;;;1988:28;2007:8;1988:18;:28::i;:::-;1915:109;:::o;18751:203::-;18805:7;18821:9;18833:16;:14;:16::i;:::-;18821:28;;18864:1;18860;:5;18856:78;;;18888:7;;;;;;;;;;;18880:31;;;18920:4;18880:46;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;18880:46:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;18880: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;18880:46:0;;;;;;;;;18876:50;;18856:78;18947:1;18940:8;;;18751:203;:::o;14434:105::-;1597:9;:7;:9::i;:::-;1589:54;;;;;;;;;;;;;;;;;;;;;;14520:13;14509:8;;:24;;;;;;;;;;;;;;;;;;14434:105;:::o;13243:23::-;;;;;;;;;;;;;:::o;17125:120::-;17165:7;17217:4;;;;;;;;;;;17188:49;;;:51;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;17188:51:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;17188: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;17188:51:0;;;;;;;;;17181:58;;17125:120;:::o;17249:128::-;17293:7;17345:4;;;;;;;;;;;17316:53;;;:55;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;17316:55:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;17316: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;17316:55:0;;;;;;;;;17309:62;;17249:128;:::o;13218:20::-;;;;;;;;;;;;;:::o;21558:568::-;21613:19;21646:1;21635:13;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;21613:35;;21668:22;;;;;;;;21681:4;21668:22;;;;;;21688:1;21668:22;;;21657:5;21663:1;21657:8;;;;;;;;;;;;;:33;;;;21701:22;;:::i;:::-;21726:70;;;;;;;;21738:4;21726:70;;;;;;21744:21;21726:70;;;;;;;;;;;;21767:20;21726:70;;;;;;;;;;;;21789:6;21726:70;;;21701:95;;21805:21;;:::i;:::-;21852:18;21835:3;:14;;:35;;;;;;;;;;;;;;;;;;;;;;;21895:1;21879:3;:13;;:17;;;;;21918:3;21905;:10;;:16;;;;21952:6;;21930:3;:19;;:28;;;;;21994:4;21967:3;:16;;:32;;;;;;;;;;;22010:24;22054:1;22037:19;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;22010:46;;22075:3;22065:4;22070:1;22065:7;;;;;;;;;;;;;:13;;;;22094:4;;;;;;;;;;;22089:18;;;22108:5;22115:4;22089:31;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;22089:31:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;22089:31:0;;;;21558: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;21051:501::-;21123:15;21111:27;;;;;;;;:8;;;;;;;;;;;:27;;;;;;;;;21107:80;;;21149:30;21171:7;21149:21;:30::i;:::-;21107:80;21209:11;21197:23;;;;;;;;:8;;;;;;;;;;;:23;;;;;;;;;21193:132;;;21256:7;21239:13;:11;:13::i;:::-;:24;;21231:55;;;;;;;;;;;;;;;;;;;;;;21295:22;21309:7;21295:13;:22::i;:::-;21193:132;21347:11;21335:23;;;;;;;;:8;;;;;;;;;;;:23;;;;;;;;;21331:132;;;21394:7;21377:13;:11;:13::i;:::-;:24;;21369:55;;;;;;;;;;;;;;;;;;;;;;21433:22;21447:7;21433:13;:22::i;:::-;21331:132;21485:14;21473:26;;;;;;;;:8;;;;;;;;;;;:26;;;;;;;;;21469:78;;;21510:29;21531:7;21510:20;:29::i;:::-;21469:78;21051: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;22915:572::-;22972:19;23005:1;22994:13;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;22972:35;;23027:22;;;;;;;;23040:4;23027:22;;;;;;23047:1;23027:22;;;23016:5;23022:1;23016:8;;;;;;;;;;;;;:33;;;;23060:22;;:::i;:::-;23085:71;;;;;;;;23097:5;23085:71;;;;;;23104:21;23085:71;;;;;;;;;;;;23127:20;23085:71;;;;;;;;;;;;23149:6;23085:71;;;23060:96;;23165:21;;:::i;:::-;23212:19;23195:3;:14;;:36;;;;;;;;;;;;;;;;;;;;;;;23256:1;23240:3;:13;;:17;;;;;23279:3;23266;:10;;:16;;;;23313:6;;23291:3;:19;;:28;;;;;23355:4;23328:3;:16;;:32;;;;;;;;;;;23371:24;23415:1;23398:19;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;23371:46;;23436:3;23426:4;23431:1;23426:7;;;;;;;;;;;;;:13;;;;23455:4;;;;;;;;;;;23450:18;;;23469:5;23476:4;23450:31;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;23450:31:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;23450:31:0;;;;22915:572;;;;;:::o;22521:92::-;22582:9;;;;;;;;;;;22575:24;;;22600:6;22575:32;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;22575:32:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;22575:32:0;;;;22521:92;:::o;22132:99::-;22189:9;:7;:9::i;:::-;22184:23;;;22208:5;;;;;;;;;;;22215:6;22223:1;22184:41;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;22184:41:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;22184:41:0;;;;22132:99;:::o;20721:324::-;20784:9;20796:16;:14;:16::i;:::-;20784:28;;20819:10;20832:23;:21;:23::i;:::-;20819:36;;20876:7;20870:2;:13;;20862:44;;;;;;;;;;;;;;;;;;;;;;20960:14;20977:31;21006:1;20977:24;20998:2;20978:14;20984:7;20978:1;:5;;:14;;;;:::i;:::-;20977:20;;:24;;;;:::i;:::-;:28;;:31;;;;:::i;:::-;20960:48;;21015:24;21032:6;21015:16;:24::i;:::-;20721:324;;;;:::o;19873:508::-;19913:14;19930:17;:15;:17::i;:::-;19913:34;;19967:1;19958:6;:10;19954:87;;;19979:54;20001:31;20030:1;20001:24;:22;:24::i;:::-;:28;;:31;;;;:::i;:::-;19979:21;:54::i;:::-;19954:87;20056:13;:11;:13::i;:::-;20047:22;;20089:1;20080:6;:10;20076:70;;;20101:37;20115:22;:20;:22::i;:::-;20101:13;:37::i;:::-;20076:70;20161:16;:14;:16::i;:::-;20152:25;;20197:1;20188:6;:10;20184:87;;;20209:54;20230:32;20260:1;20230:25;:23;:25::i;:::-;:29;;:32;;;;:::i;:::-;20209:20;:54::i;:::-;20184:87;20286:13;:11;:13::i;:::-;20277:22;;20319:1;20310:6;:10;20306:70;;;20331:37;20345:22;:20;:22::i;:::-;20331:13;:37::i;:::-;20306:70;19873:508;:::o;22235:144::-;22345:1;22306:7;;;;;;;;;;;22298:21;;;22328:4;22335:6;22298:44;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;22298:44:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;22298: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;22298:44:0;;;;;;;;;:48;22290:83;;;;;;;;;;;;;;;;;;;;;;22235:144;:::o;22383:134::-;22482:1;22456:8;;;;;;;;;;;22447:23;;;22471:6;22447:31;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;22447:31:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;22447: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;22447:31:0;;;;;;;;;:36;22439:72;;;;;;;;;;;;;;;;;;;;;;22383: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;20387:328::-;20451:9;20463:17;:15;:17::i;:::-;20451:29;;20487:10;20500:24;:22;:24::i;:::-;20487:37;;20545:7;20539:2;:13;;20531:44;;;;;;;;;;;;;;;;;;;;;;20629:14;20646:31;20675:1;20646:24;20667:2;20647:14;20653:7;20647:1;:5;;:14;;;;:::i;:::-;20646:20;;:24;;;;:::i;:::-;:28;;:31;;;;:::i;:::-;20629:48;;20684:25;20702:6;20684:17;:25::i;:::-;20387: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;9885:598::-;9973:27;9981:5;9973:25;;;:27::i;:::-;9965:71;;;;;;;;;;;;;;;;;;;;;;10110:12;10124:23;10159:5;10151:19;;10171:4;10151: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;;10109:67:0;;;;10195:7;10187:52;;;;;;;;;;;;;;;;;;;;;;10276:1;10256:10;:17;:21;10252:224;;;10398:10;10387:30;;;;;;;;;;;;;;10379:85;;;;;;;;;;;;;;;;;;;;;;10252:224;9885:598;;;;:::o;22617:148::-;22729:1;22690:7;;;;;;;;;;;22682:21;;;22712:4;22719:6;22682:44;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;22682:44:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;22682: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;22682:44:0;;;;;;;;;:48;22674:85;;;;;;;;;;;;;;;;;;;;;;22617:148;:::o;22769:140::-;22872:1;22844:8;;;;;;;;;;;22835:25;;;22861:6;22835:33;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;22835:33:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;22835: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;22835:33:0;;;;;;;;;:38;22827:76;;;;;;;;;;;;;;;;;;;;;;22769: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;13021:11630::-;;;;;;;;;;;;;;;;;;;;;:::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:494;;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;1155:57;1208:3;1199:6;1188:9;1184:22;1155:57;;;1148:4;1141:5;1137:16;1130:83;1083:141;1275:2;1308:60;1364:3;1355:6;1344:9;1340:22;1308:60;;;1301:4;1294:5;1290:16;1283:86;1234:146;983:407;;;;;1397:130;;1477:6;1464:20;1455:29;;1489:33;1516:5;1489:33;;;1449:78;;;;;1534:134;;1618:6;1612:13;1603:22;;1630:33;1657:5;1630:33;;;1597:71;;;;;1675:241;;1779:2;1767:9;1758:7;1754:23;1750:32;1747:2;;;1795:1;1792;1785:12;1747:2;1830:1;1847:53;1892:7;1883:6;1872:9;1868:22;1847:53;;;1837:63;;1809:97;1741:175;;;;;1923:263;;2038:2;2026:9;2017:7;2013:23;2009:32;2006:2;;;2054:1;2051;2044:12;2006:2;2089:1;2106:64;2162:7;2153:6;2142:9;2138:22;2106:64;;;2096:74;;2068:108;2000:186;;;;;2193:366;;;2314:2;2302:9;2293:7;2289:23;2285:32;2282:2;;;2330:1;2327;2320:12;2282:2;2365:1;2382:53;2427:7;2418:6;2407:9;2403:22;2382:53;;;2372:63;;2344:97;2472:2;2490:53;2535:7;2526:6;2515:9;2511:22;2490:53;;;2480:63;;2451:98;2276:283;;;;;;2566:491;;;;2704:2;2692:9;2683:7;2679:23;2675:32;2672:2;;;2720:1;2717;2710:12;2672:2;2755:1;2772:53;2817:7;2808:6;2797:9;2793:22;2772:53;;;2762:63;;2734:97;2862:2;2880:53;2925:7;2916:6;2905:9;2901:22;2880:53;;;2870:63;;2841:98;2970:2;2988:53;3033:7;3024:6;3013:9;3009:22;2988:53;;;2978:63;;2949:98;2666:391;;;;;;3064:366;;;3185:2;3173:9;3164:7;3160:23;3156:32;3153:2;;;3201:1;3198;3191:12;3153:2;3236:1;3253:53;3298:7;3289:6;3278:9;3274:22;3253:53;;;3243:63;;3215:97;3343:2;3361:53;3406:7;3397:6;3386:9;3382:22;3361:53;;;3351:63;;3322:98;3147:283;;;;;;3437:257;;3549:2;3537:9;3528:7;3524:23;3520:32;3517:2;;;3565:1;3562;3555:12;3517:2;3600:1;3617:61;3670:7;3661:6;3650:9;3646:22;3617:61;;;3607:71;;3579:105;3511:183;;;;;3701:908;;;;;;3894:3;3882:9;3873:7;3869:23;3865:33;3862:2;;;3911:1;3908;3901:12;3862:2;3967:1;3956:9;3952:17;3946:24;3990:18;3982:6;3979:30;3976:2;;;4022:1;4019;4012:12;3976:2;4042:74;4108:7;4099:6;4088:9;4084:22;4042:74;;;4032:84;;3925:197;4153:2;4171:64;4227:7;4218:6;4207:9;4203:22;4171:64;;;4161:74;;4132:109;4272:2;4290:64;4346:7;4337:6;4326:9;4322:22;4290:64;;;4280:74;;4251:109;4391:2;4409:64;4465:7;4456:6;4445:9;4441:22;4409:64;;;4399:74;;4370:109;4510:3;4529:64;4585:7;4576:6;4565:9;4561:22;4529:64;;;4519:74;;4489:110;3856:753;;;;;;;;;4616:305;;4752:2;4740:9;4731:7;4727:23;4723:32;4720:2;;;4768:1;4765;4758:12;4720:2;4803:1;4820:85;4897:7;4888:6;4877:9;4873:22;4820:85;;;4810:95;;4782:129;4714:207;;;;;4928:241;;5032:2;5020:9;5011:7;5007:23;5003:32;5000:2;;;5048:1;5045;5038:12;5000:2;5083:1;5100:53;5145:7;5136:6;5125:9;5121:22;5100:53;;;5090:63;;5062:97;4994:175;;;;;5176:263;;5291:2;5279:9;5270:7;5266:23;5262:32;5259:2;;;5307:1;5304;5297:12;5259:2;5342:1;5359:64;5415:7;5406:6;5395:9;5391:22;5359:64;;;5349:74;;5321:108;5253:186;;;;;5447:253;;5596:98;5690:3;5682:6;5596:98;;;5582:112;;5575:125;;;;;5709:249;;5832:86;5914:3;5906:6;5832:86;;;5947:4;5942:3;5938:14;5924:28;;5825:133;;;;;5966:103;6039:24;6057:5;6039:24;;;6034:3;6027:37;6021:48;;;6076:113;6159:24;6177:5;6159:24;;;6154:3;6147:37;6141:48;;;6263:1040;;6456:78;6528:5;6456:78;;;6547:110;6650:6;6645:3;6547:110;;;6540:117;;6680:3;6722:4;6714:6;6710:17;6705:3;6701:27;6749:80;6823:5;6749:80;;;6849:7;6877:1;6862:402;6887:6;6884:1;6881:13;6862:402;;;6949:9;6943:4;6939:20;6934:3;6927:33;6994:6;6988:13;7016:112;7123:4;7108:13;7016:112;;;7008:120;;7145:84;7222:6;7145:84;;;7135:94;;7252:4;7247:3;7243:14;7236:21;;6919:345;6909:1;6906;6902:9;6897:14;;6862:402;;;6866:14;7277:4;7270:11;;7294:3;7287:10;;6435:868;;;;;;;;;;7366:834;;7547:72;7613:5;7547:72;;;7632:104;7729:6;7724:3;7632:104;;;7625:111;;7757:74;7825:5;7757:74;;;7851:7;7879:1;7864:314;7889:6;7886:1;7883:13;7864:314;;;7956:6;7950:13;7977:99;8072:3;8057:13;7977:99;;;7970:106;;8093:78;8164:6;8093:78;;;8083:88;;7921:257;7911:1;7908;7904:9;7899:14;;7864:314;;;7868:14;8191:3;8184:10;;7526:674;;;;;;;;8208:94;8275:21;8290:5;8275:21;;;8270:3;8263:34;8257:45;;;8309:104;8386:21;8401:5;8386:21;;;8381:3;8374:34;8368:45;;;8420:356;;8548:38;8580:5;8548:38;;;8598:88;8679:6;8674:3;8598:88;;;8591:95;;8691:52;8736:6;8731:3;8724:4;8717:5;8713:16;8691:52;;;8764:6;8759:3;8755:16;8748:23;;8528:248;;;;;;8783:315;;8879:34;8907:5;8879:34;;;8925:60;8978:6;8973:3;8925:60;;;8918:67;;8990:52;9035:6;9030:3;9023:4;9016:5;9012:16;8990:52;;;9063:29;9085:6;9063:29;;;9058:3;9054:39;9047:46;;8859:239;;;;;;9105:142;9191:50;9235:5;9191:50;;;9186:3;9179:63;9173:74;;;9254:156;9347:57;9398:5;9347:57;;;9342:3;9335:70;9329:81;;;9417:150;9507:54;9555:5;9507:54;;;9502:3;9495:67;9489:78;;;9574:144;9666:46;9706:5;9666:46;;;9661:3;9654:59;9648:70;;;9725:140;9815:44;9853:5;9815:44;;;9810:3;9803:57;9797:68;;;9872:347;;9984:39;10017:5;9984:39;;;10035:71;10099:6;10094:3;10035:71;;;10028:78;;10111:52;10156:6;10151:3;10144:4;10137:5;10133:16;10111:52;;;10184:29;10206:6;10184:29;;;10179:3;10175:39;10168:46;;9964:255;;;;;;10227:372;;10387:67;10451:2;10446:3;10387:67;;;10380:74;;10487:34;10483:1;10478:3;10474:11;10467:55;10556:5;10551:2;10546:3;10542:12;10535:27;10590:2;10585:3;10581:12;10574:19;;10373:226;;;;10608:325;;10768:67;10832:2;10827:3;10768:67;;;10761:74;;10868:27;10864:1;10859:3;10855:11;10848:48;10924:2;10919:3;10915:12;10908:19;;10754:179;;;;10942:375;;11102:67;11166:2;11161:3;11102:67;;;11095:74;;11202:34;11198:1;11193:3;11189:11;11182:55;11271:8;11266:2;11261:3;11257:12;11250:30;11308:2;11303:3;11299:12;11292:19;;11088:229;;;;11326:371;;11486:67;11550:2;11545:3;11486:67;;;11479:74;;11586:34;11582:1;11577:3;11573:11;11566:55;11655:4;11650:2;11645:3;11641:12;11634:26;11688:2;11683:3;11679:12;11672:19;;11472:225;;;;11706:323;;11866:67;11930:2;11925:3;11866:67;;;11859:74;;11966:25;11962:1;11957:3;11953:11;11946:46;12020:2;12015:3;12011:12;12004:19;;11852:177;;;;12038:327;;12198:67;12262:2;12257:3;12198:67;;;12191:74;;12298:29;12294:1;12289:3;12285:11;12278:50;12356:2;12351:3;12347:12;12340:19;;12184:181;;;;12374:332;;12534:67;12598:2;12593:3;12534:67;;;12527:74;;12634:34;12630:1;12625:3;12621:11;12614:55;12697:2;12692:3;12688:12;12681:19;;12520:186;;;;12715:370;;12875:67;12939:2;12934:3;12875:67;;;12868:74;;12975:34;12971:1;12966:3;12962:11;12955:55;13044:3;13039:2;13034:3;13030:12;13023:25;13076:2;13071:3;13067:12;13060:19;;12861:224;;;;13094:324;;13254:67;13318:2;13313:3;13254:67;;;13247:74;;13354:26;13350:1;13345:3;13341:11;13334:47;13409:2;13404:3;13400:12;13393:19;;13240:178;;;;13427:332;;13587:67;13651:2;13646:3;13587:67;;;13580:74;;13687:34;13683:1;13678:3;13674:11;13667:55;13750:2;13745:3;13741:12;13734:19;;13573:186;;;;13768:320;;13928:67;13992:2;13987:3;13928:67;;;13921:74;;14028:22;14024:1;14019:3;14015:11;14008:43;14079:2;14074:3;14070:12;14063:19;;13914:174;;;;14097:331;;14257:67;14321:2;14316:3;14257:67;;;14250:74;;14357:33;14353:1;14348:3;14344:11;14337:54;14419:2;14414:3;14410:12;14403:19;;14243:185;;;;14437:374;;14597:67;14661:2;14656:3;14597:67;;;14590:74;;14697:34;14693:1;14688:3;14684:11;14677:55;14766:7;14761:2;14756:3;14752:12;14745:29;14802:2;14797:3;14793:12;14786:19;;14583:228;;;;14820:318;;14980:67;15044:2;15039:3;14980:67;;;14973:74;;15080:20;15076:1;15071:3;15067:11;15060:41;15129:2;15124:3;15120:12;15113:19;;14966:172;;;;15147:373;;15307:67;15371:2;15366:3;15307:67;;;15300:74;;15407:34;15403:1;15398:3;15394:11;15387:55;15476:6;15471:2;15466:3;15462:12;15455:28;15511:2;15506:3;15502:12;15495:19;;15293:227;;;;15529:330;;15689:67;15753:2;15748:3;15689:67;;;15682:74;;15789:32;15785:1;15780:3;15776:11;15769:53;15850:2;15845:3;15841:12;15834:19;;15675:184;;;;15868:322;;16028:67;16092:2;16087:3;16028:67;;;16021:74;;16128:24;16124:1;16119:3;16115:11;16108:45;16181:2;16176:3;16172:12;16165:19;;16014:176;;;;16199:379;;16359:67;16423:2;16418:3;16359:67;;;16352:74;;16459:34;16455:1;16450:3;16446:11;16439:55;16528:12;16523:2;16518:3;16514:12;16507:34;16569:2;16564:3;16560:12;16553:19;;16345:233;;;;16587:331;;16747:67;16811:2;16806:3;16747:67;;;16740:74;;16847:33;16843:1;16838:3;16834:11;16827:54;16909:2;16904:3;16900:12;16893:19;;16733:185;;;;16927:391;;17087:67;17151:2;17146:3;17087:67;;;17080:74;;17187:34;17183:1;17178:3;17174:11;17167:55;17256:24;17251:2;17246:3;17242:12;17235:46;17309:2;17304:3;17300:12;17293:19;;17073:245;;;;17327:331;;17487:67;17551:2;17546:3;17487:67;;;17480:74;;17587:33;17583:1;17578:3;17574:11;17567:54;17649:2;17644:3;17640:12;17633:19;;17473:185;;;;17667:331;;17827:67;17891:2;17886:3;17827:67;;;17820:74;;17927:33;17923:1;17918:3;17914:11;17907:54;17989:2;17984:3;17980:12;17973:19;;17813:185;;;;18067:1611;;18210:6;18205:3;18201:16;18301:4;18294:5;18290:16;18284:23;18313:76;18383:4;18378:3;18374:14;18360:12;18313:76;;;18232:163;18473:4;18466:5;18462:16;18456:23;18485:63;18542:4;18537:3;18533:14;18519:12;18485:63;;;18405:149;18629:4;18622:5;18618:16;18612:23;18641:117;18752:4;18747:3;18743:14;18729:12;18641:117;;;18564:200;18848:4;18841:5;18837:16;18831:23;18860:63;18917:4;18912:3;18908:14;18894:12;18860:63;;;18774:155;19015:4;19008:5;19004:16;18998:23;19027:63;19084:4;19079:3;19075:14;19061:12;19027:63;;;18939:157;19177:4;19170:5;19166:16;19160:23;19189:65;19246:6;19241:3;19237:16;19223:12;19189:65;;;19106:154;19343:4;19336:5;19332:16;19326:23;19355:65;19412:6;19407:3;19403:16;19389:12;19355:65;;;19270:156;19499:4;19492:5;19488:16;19482:23;19553:3;19547:4;19543:14;19534:6;19529:3;19525:16;19518:40;19573:67;19635:4;19621:12;19573:67;;;19565:75;;19436:216;19669:4;19662:11;;18183:1495;;;;;;19748:817;19885:4;19880:3;19876:14;19968:4;19961:5;19957:16;19951:23;19980:57;20031:4;20026:3;20022:14;20008:12;19980:57;;;19905:138;20124:4;20117:5;20113:16;20107:23;20136:83;20213:4;20208:3;20204:14;20190:12;20136:83;;;20053:172;20297:4;20290:5;20286:16;20280:23;20309:80;20383:4;20378:3;20374:14;20360:12;20309:80;;;20235:160;20469:4;20462:5;20458:16;20452:23;20481:63;20538:4;20533:3;20529:14;20515:12;20481:63;;;20405:145;19858:707;;;;20621:459;20744:4;20739:3;20735:14;20828:4;20821:5;20817:16;20811:23;20840:63;20897:4;20892:3;20888:14;20874:12;20840:63;;;20764:145;20984:4;20977:5;20973:16;20967:23;20996:63;21053:4;21048:3;21044:14;21030:12;20996:63;;;20919:146;20717:363;;;;21136:469;21269:4;21264:3;21260:14;21353:4;21346:5;21342:16;21336:23;21365:63;21422:4;21417:3;21413:14;21399:12;21365:63;;;21289:145;21509:4;21502:5;21498:16;21492:23;21521:63;21578:4;21573:3;21569:14;21555:12;21521:63;;;21444:146;21242:363;;;;21612:103;21685:24;21703:5;21685:24;;;21680:3;21673:37;21667:48;;;21722:113;21805:24;21823:5;21805:24;;;21800:3;21793:37;21787:48;;;21842:107;21921:22;21937:5;21921:22;;;21916:3;21909:35;21903:46;;;21956:262;;22100:93;22189:3;22180:6;22100:93;;;22093:100;;22210:3;22203:10;;22081:137;;;;;22225:213;;22343:2;22332:9;22328:18;22320:26;;22357:71;22425:1;22414:9;22410:17;22401:6;22357:71;;;22314:124;;;;;22445:324;;22591:2;22580:9;22576:18;22568:26;;22605:71;22673:1;22662:9;22658:17;22649:6;22605:71;;;22687:72;22755:2;22744:9;22740:18;22731:6;22687:72;;;22562:207;;;;;;22776:435;;22950:2;22939:9;22935:18;22927:26;;22964:71;23032:1;23021:9;23017:17;23008:6;22964:71;;;23046:72;23114:2;23103:9;23099:18;23090:6;23046:72;;;23129;23197:2;23186:9;23182:18;23173:6;23129:72;;;22921:290;;;;;;;23218:324;;23364:2;23353:9;23349:18;23341:26;;23378:71;23446:1;23435:9;23431:17;23422:6;23378:71;;;23460:72;23528:2;23517:9;23513:18;23504:6;23460:72;;;23335:207;;;;;;23549:449;;23730:2;23719:9;23715:18;23707:26;;23744:71;23812:1;23801:9;23797:17;23788:6;23744:71;;;23826:72;23894:2;23883:9;23879:18;23870:6;23826:72;;;23909:79;23984:2;23973:9;23969:18;23960:6;23909:79;;;23701:297;;;;;;;24005:788;;24335:2;24324:9;24320:18;24312:26;;24385:9;24379:4;24375:20;24371:1;24360:9;24356:17;24349:47;24410:144;24549:4;24540:6;24410:144;;;24402:152;;24602:9;24596:4;24592:20;24587:2;24576:9;24572:18;24565:48;24627:156;24778:4;24769:6;24627:156;;;24619:164;;24306:487;;;;;;24800:201;;24912:2;24901:9;24897:18;24889:26;;24926:65;24988:1;24977:9;24973:17;24964:6;24926:65;;;24883:118;;;;;25008:231;;25135:2;25124:9;25120:18;25112:26;;25149:80;25226:1;25215:9;25211:17;25202:6;25149:80;;;25106:133;;;;;25246:301;;25384:2;25373:9;25369:18;25361:26;;25434:9;25428:4;25424:20;25420:1;25409:9;25405:17;25398:47;25459:78;25532:4;25523:6;25459:78;;;25451:86;;25355:192;;;;;25554:407;;25745:2;25734:9;25730:18;25722:26;;25795:9;25789:4;25785:20;25781:1;25770:9;25766:17;25759:47;25820:131;25946:4;25820:131;;;25812:139;;25716:245;;;;25968:407;;26159:2;26148:9;26144:18;26136:26;;26209:9;26203:4;26199:20;26195:1;26184:9;26180:17;26173:47;26234:131;26360:4;26234:131;;;26226:139;;26130:245;;;;26382:407;;26573:2;26562:9;26558:18;26550:26;;26623:9;26617:4;26613:20;26609:1;26598:9;26594:17;26587:47;26648:131;26774:4;26648:131;;;26640:139;;26544:245;;;;26796:407;;26987:2;26976:9;26972:18;26964:26;;27037:9;27031:4;27027:20;27023:1;27012:9;27008:17;27001:47;27062:131;27188:4;27062:131;;;27054:139;;26958:245;;;;27210:407;;27401:2;27390:9;27386:18;27378:26;;27451:9;27445:4;27441:20;27437:1;27426:9;27422:17;27415:47;27476:131;27602:4;27476:131;;;27468:139;;27372:245;;;;27624:407;;27815:2;27804:9;27800:18;27792:26;;27865:9;27859:4;27855:20;27851:1;27840:9;27836:17;27829:47;27890:131;28016:4;27890:131;;;27882:139;;27786:245;;;;28038:407;;28229:2;28218:9;28214:18;28206:26;;28279:9;28273:4;28269:20;28265:1;28254:9;28250:17;28243:47;28304:131;28430:4;28304:131;;;28296:139;;28200:245;;;;28452:407;;28643:2;28632:9;28628:18;28620:26;;28693:9;28687:4;28683:20;28679:1;28668:9;28664:17;28657:47;28718:131;28844:4;28718:131;;;28710:139;;28614:245;;;;28866:407;;29057:2;29046:9;29042:18;29034:26;;29107:9;29101:4;29097:20;29093:1;29082:9;29078:17;29071:47;29132:131;29258:4;29132:131;;;29124:139;;29028:245;;;;29280:407;;29471:2;29460:9;29456:18;29448:26;;29521:9;29515:4;29511:20;29507:1;29496:9;29492:17;29485:47;29546:131;29672:4;29546:131;;;29538:139;;29442:245;;;;29694:407;;29885:2;29874:9;29870:18;29862:26;;29935:9;29929:4;29925:20;29921:1;29910:9;29906:17;29899:47;29960:131;30086:4;29960:131;;;29952:139;;29856:245;;;;30108:407;;30299:2;30288:9;30284:18;30276:26;;30349:9;30343:4;30339:20;30335:1;30324:9;30320:17;30313:47;30374:131;30500:4;30374:131;;;30366:139;;30270:245;;;;30522:407;;30713:2;30702:9;30698:18;30690:26;;30763:9;30757:4;30753:20;30749:1;30738:9;30734:17;30727:47;30788:131;30914:4;30788:131;;;30780:139;;30684:245;;;;30936:407;;31127:2;31116:9;31112:18;31104:26;;31177:9;31171:4;31167:20;31163:1;31152:9;31148:17;31141:47;31202:131;31328:4;31202:131;;;31194:139;;31098:245;;;;31350:407;;31541:2;31530:9;31526:18;31518:26;;31591:9;31585:4;31581:20;31577:1;31566:9;31562:17;31555:47;31616:131;31742:4;31616:131;;;31608:139;;31512:245;;;;31764:407;;31955:2;31944:9;31940:18;31932:26;;32005:9;31999:4;31995:20;31991:1;31980:9;31976:17;31969:47;32030:131;32156:4;32030:131;;;32022:139;;31926:245;;;;32178:407;;32369:2;32358:9;32354:18;32346:26;;32419:9;32413:4;32409:20;32405:1;32394:9;32390:17;32383:47;32444:131;32570:4;32444:131;;;32436:139;;32340:245;;;;32592:407;;32783:2;32772:9;32768:18;32760:26;;32833:9;32827:4;32823:20;32819:1;32808:9;32804:17;32797:47;32858:131;32984:4;32858:131;;;32850:139;;32754:245;;;;33006:407;;33197:2;33186:9;33182:18;33174:26;;33247:9;33241:4;33237:20;33233:1;33222:9;33218:17;33211:47;33272:131;33398:4;33272:131;;;33264:139;;33168:245;;;;33420:407;;33611:2;33600:9;33596:18;33588:26;;33661:9;33655:4;33651:20;33647:1;33636:9;33632:17;33625:47;33686:131;33812:4;33686:131;;;33678:139;;33582:245;;;;33834:407;;34025:2;34014:9;34010:18;34002:26;;34075:9;34069:4;34065:20;34061:1;34050:9;34046:17;34039:47;34100:131;34226:4;34100:131;;;34092:139;;33996:245;;;;34248:407;;34439:2;34428:9;34424:18;34416:26;;34489:9;34483:4;34479:20;34475:1;34464:9;34460:17;34453:47;34514:131;34640:4;34514:131;;;34506:139;;34410:245;;;;34662:404;;34848:2;34837:9;34833:18;34825:26;;34862:111;34970:1;34959:9;34955:17;34946:6;34862:111;;;34984:72;35052:2;35041:9;35037:18;35028:6;34984:72;;;34819:247;;;;;;35073:213;;35191:2;35180:9;35176:18;35168:26;;35205:71;35273:1;35262:9;35258:17;35249:6;35205:71;;;35162:124;;;;;35293:205;;35407:2;35396:9;35392:18;35384:26;;35421:67;35485:1;35474:9;35470:17;35461:6;35421:67;;;35378:120;;;;;35505:256;;35567:2;35561:9;35551:19;;35605:4;35597:6;35593:17;35704:6;35692:10;35689:22;35668:18;35656:10;35653:34;35650:62;35647:2;;;35725:1;35722;35715:12;35647:2;35745:10;35741:2;35734:22;35545:216;;;;;35768:322;;35912:18;35904:6;35901:30;35898:2;;;35944:1;35941;35934:12;35898:2;36011:4;36007:9;36000:4;35992:6;35988:17;35984:33;35976:41;;36075:4;36069;36065:15;36057:23;;35835:255;;;;36097:175;;36207:3;36199:11;;36245:4;36240:3;36236:14;36228:22;;36193:79;;;;36279:169;;36383:3;36375:11;;36421:4;36416:3;36412:14;36404:22;;36369:79;;;;36455:161;;36588:5;36582:12;36572:22;;36553:63;;;;36623:155;;36750:5;36744:12;36734:22;;36715:63;;;;36785:117;;36874:5;36868:12;36858:22;;36839:63;;;;36909:121;;37002:5;36996:12;36986:22;;36967:63;;;;37037:122;;37131:5;37125:12;37115:22;;37096:63;;;;37166:132;;37288:4;37283:3;37279:14;37271:22;;37265:33;;;;37305:126;;37421:4;37416:3;37412:14;37404:22;;37398:33;;;;37439:202;;37593:6;37588:3;37581:19;37630:4;37625:3;37621:14;37606:29;;37574:67;;;;;37650:196;;37798:6;37793:3;37786:19;37835:4;37830:3;37826:14;37811:29;;37779:67;;;;;37855:152;;37959:6;37954:3;37947:19;37996:4;37991:3;37987:14;37972:29;;37940:67;;;;;38016:144;;38151:3;38136:18;;38129:31;;;;;38169:163;;38284:6;38279:3;38272:19;38321:4;38316:3;38312:14;38297:29;;38265:67;;;;;38340:91;;38402:24;38420:5;38402:24;;;38391:35;;38385:46;;;;38438:85;;38511:5;38504:13;38497:21;38486:32;;38480:43;;;;38530:136;;38607:5;38596:16;;38613:48;38655:5;38613:48;;;38590:76;;;;38673:150;;38757:5;38746:16;;38763:55;38812:5;38763:55;;;38740:83;;;;38830:144;;38911:5;38900:16;;38917:52;38963:5;38917:52;;;38894:80;;;;38981:128;;39054:5;39043:16;;39060:44;39098:5;39060:44;;;39037:72;;;;39116:84;;39188:6;39181:5;39177:18;39166:29;;39160:40;;;;39207:121;;39280:42;39273:5;39269:54;39258:65;;39252:76;;;;39335:72;;39397:5;39386:16;;39380:27;;;;39414:81;;39485:4;39478:5;39474:16;39463:27;;39457:38;;;;39502:136;;39594:39;39627:5;39594:39;;;39581:52;;39575:63;;;;39645:150;;39744:46;39784:5;39744:46;;;39731:59;;39725:70;;;;39802:144;;39898:43;39935:5;39898:43;;;39885:56;;39879:67;;;;39953:128;;40041:35;40070:5;40041:35;;;40028:48;;40022:59;;;;40088:114;;40174:23;40191:5;40174:23;;;40161:36;;40155:47;;;;40210:268;40275:1;40282:101;40296:6;40293:1;40290:13;40282:101;;;40372:1;40367:3;40363:11;40357:18;40353:1;40348:3;40344:11;40337:39;40318:2;40315:1;40311:10;40306:15;;40282:101;;;40398:6;40395:1;40392:13;40389:2;;;40463:1;40454:6;40449:3;40445:16;40438:27;40389:2;40259:219;;;;;40486:97;;40574:2;40570:7;40565:2;40558:5;40554:14;40550:28;40540:38;;40534:49;;;;40591:106;40675:1;40668:5;40665:12;40655:2;;40681:9;40655:2;40649:48;;40704:113;40795:1;40788:5;40785:12;40775:2;;40801:9;40775:2;40769:48;;40824:110;40912:1;40905:5;40902:12;40892:2;;40918:9;40892:2;40886:48;;40941:102;41021:1;41014:5;41011:12;41001:2;;41027:9;41001:2;40995:48;;41050:117;41119:24;41137:5;41119:24;;;41112:5;41109:35;41099:2;;41158:1;41155;41148:12;41099:2;41093:74;;41174:111;41240:21;41255:5;41240:21;;;41233:5;41230:32;41220:2;;41276:1;41273;41266:12;41220:2;41214:71;;41292:117;41361:24;41379:5;41361:24;;;41354:5;41351:35;41341:2;;41400:1;41397;41390:12;41341:2;41335:74;

Swarm Source

bzzr://cd0363eb01267572dd43b6ce6dc2d5ee86d41562cc3a570b0fd4bd380b247d5c
Loading...
Loading
Loading...
Loading
[ Download: CSV Export  ]
[ Download: CSV Export  ]

A token is a representation of an on-chain or off-chain asset. The token page shows information such as price, total supply, holders, transfers and social links. Learn more about this page in our Knowledge Base.