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

abstract class I1 extends core::Object {
  synthetic constructor •() → void
    ;
  abstract method f(core::int i) → void;
}
abstract class I2 extends core::Object {
  synthetic constructor •() → void
    ;
  abstract method f(core::Object o) → void;
}
abstract class C extends core::Object implements self::I1, self::I2 {
  synthetic constructor •() → void
    ;
}
class D extends self::C {
  synthetic constructor •() → void
    ;
  method f(core::Object o) → void
    ;
}
abstract class E extends core::Object implements self::I2, self::I1 {
  synthetic constructor •() → void
    ;
}
class F extends self::E {
  synthetic constructor •() → void
    ;
  method f(core::Object o) → void
    ;
}
static method g1(self::C c) → void
  ;
static method g2(self::E e) → void
  ;
static method main() → dynamic
  ;
