contract Frozenlist is Issuable {

  event FundsFrozen(address target);
  bytes32 public constant FROZENLISTED_ROLE = keccak256("FROZENLISTED_ROLE");

  /**
   * @dev Throws if operator is frozen.
   * @param _operator address
   */
  modifier onlyIfNotFrozen(address _operator) {
    require(!hasRole(FROZENLISTED_ROLE, _operator), "Account frozen");
    _;
  }

  /**
   * @dev add an address to the frozenlist
   * @param _operator address
   */
  function addAddressToFrozenlist(address _operator) public onlyIssuer {
    grantRole(FROZENLISTED_ROLE, _operator);
    emit FundsFrozen(_operator);
  }

  /**
   * @dev getter to determine if address is in frozenlist
   */
  function frozenlist(address _operator) public view returns (bool) {
    return hasRole(FROZENLISTED_ROLE, _operator);
  }

  /**
   * @dev add addresses to the frozenlist
   * @param _operators addresses
   */
  function addAddressesToFrozenlist(address[] memory _operators) public onlyIssuer {
    for (uint256 i = 0; i < _operators.length; i++) {
      addAddressToFrozenlist(_operators[i]);
    }
  }

  /**
   * @dev remove an address from the frozenlist
   * @param _operator address
   */
  function removeAddressFromFrozenlist(address _operator) public onlyIssuer {
    revokeRole(FROZENLISTED_ROLE, _operator);
  }

  /**
   * @dev remove addresses from the frozenlist
   * @param _operators addresses
   */
  function removeAddressesFromFrozenlist(address[] memory _operators) public onlyIssuer {
    for (uint256 i = 0; i < _operators.length; i++) {
      removeAddressFromFrozenlist(_operators[i]);
    }
  }

}
/**
 * @title Frozenlist
 * @dev The Frozenlist contract has a frozen list of addresses, and provides basic authorization control functions.
 * This simplifies the implementation of "user permissions".
 */
function addAddressToFrozenlist(address _operator) public onlyIssuer {
  grantRole(FROZENLISTED_ROLE, _operator);
  emit FundsFrozen(_operator);
}

/**
 * @dev add an address to the frozenlist
 * @param _operator address
 */