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

abstract class A<T extends core::Object? = dynamic> extends core::Object {
  synthetic constructor •() → self::A<self::A::T%>
    ;
  abstract method foo(covariant-by-class self::A::T% x) → dynamic;
}
abstract class B<T extends core::Object? = dynamic> extends core::Object implements self::A<self::B::T%> /*isMixinDeclaration*/  {
}
class C extends core::Object {
  synthetic constructor •() → self::C
    ;
  method foo(core::num x) → dynamic
    ;
}
class D<T extends core::num> extends self::_D&C&B<self::D::T> {
  synthetic constructor •() → self::D<self::D::T>
    ;
}
class E<T extends core::num> = self::C with self::B<self::E::T> {
  synthetic constructor •() → self::E<self::E::T>
    : super self::C::•()
    ;
  forwarding-stub synthetic method foo(covariant-by-class core::num x) → dynamic
    return super.{self::C::foo}(x);
}
abstract class _D&C&B<T extends core::num> = self::C with self::B<self::_D&C&B::T> /*isAnonymousMixin*/  {
  synthetic constructor •() → self::_D&C&B<self::_D&C&B::T>
    : super self::C::•()
    ;
  forwarding-stub synthetic method foo(covariant-by-class core::num x) → dynamic
    return super.{self::C::foo}(x);
}
static method main() → dynamic
  ;
