library;
import self as self;
import "dart:core" as core;

class Operators extends core::Object {
  synthetic constructor •() → self::Operators*
    : super core::Object::•()
    ;
  operator +(dynamic other) → dynamic
    return null;
  operator &(dynamic other) → dynamic
    return null;
  operator ~() → dynamic
    return null;
  operator |(dynamic other) → dynamic
    return null;
  operator ^(dynamic other) → dynamic
    return null;
  operator /(dynamic other) → dynamic
    return null;
  operator ==(dynamic other) → core::bool*
    return null;
  operator >(dynamic other) → dynamic
    return null;
  operator >=(dynamic other) → dynamic
    return null;
  operator [](dynamic index) → dynamic
    return null;
  operator []=(dynamic index, dynamic value) → void {}
  operator <<(dynamic other) → dynamic
    return null;
  operator <(dynamic other) → dynamic
    return null;
  operator <=(dynamic other) → dynamic
    return null;
  operator *(dynamic other) → dynamic
    return null;
  operator %(dynamic other) → dynamic
    return null;
  operator >>(dynamic other) → dynamic
    return null;
  operator -(dynamic other) → dynamic
    return null;
  operator ~/(dynamic other) → dynamic
    return null;
  operator unary-() → dynamic
    return null;
  abstract member-signature get _identityHashCode() → core::int*;
  abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*;
  abstract member-signature method _simpleInstanceOf(dynamic type) → core::bool*;
  abstract member-signature method _simpleInstanceOfTrue(dynamic type) → core::bool*;
  abstract member-signature method _simpleInstanceOfFalse(dynamic type) → core::bool*;
  abstract member-signature get hashCode() → core::int*;
  abstract member-signature method toString() → core::String*;
  abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic;
  abstract member-signature get runtimeType() → core::Type*;
}
static method main(dynamic arguments) → dynamic {
  self::Operators* a = new self::Operators::•();
  self::Operators* b = new self::Operators::•();
  a.{self::Operators::+}(b);
  a.{self::Operators::&}(b);
  a.{self::Operators::~}();
  a.{self::Operators::|}(b);
  a.{self::Operators::^}(b);
  a.{self::Operators::/}(b);
  a.{self::Operators::==}(b);
  a.{self::Operators::>}(b);
  a.{self::Operators::>=}(b);
  a.{self::Operators::[]}(0);
  a.{self::Operators::[]=}(0, b);
  a.{self::Operators::<<}(b);
  a.{self::Operators::<}(b);
  a.{self::Operators::<=}(b);
  a.{self::Operators::*}(b);
  a.{self::Operators::%}(b);
  a.{self::Operators::>>}(b);
  a.{self::Operators::-}(b);
  a.{self::Operators::~/}(b);
  a.{self::Operators::unary-}();
}
