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

abstract class M extends core::Object {
  field dynamic m;
  synthetic constructor •() → self::M*
    ;
}
abstract class N extends self::M {
  synthetic constructor •() → self::N*
    ;
  set superM(dynamic value) → void
    ;
  get superM() → dynamic
    ;
}
class S extends core::Object {
  synthetic constructor •() → self::S*
    ;
}
abstract class _Named&S&M = self::S with self::M /*isAnonymousMixin*/  {
  synthetic constructor •() → self::_Named&S&M*
    : super self::S::•()
    ;
}
abstract class _Named&S&M&N = self::_Named&S&M with self::N /*isAnonymousMixin*/  {
  synthetic constructor •() → self::_Named&S&M&N*
    : super self::_Named&S&M::•()
    ;
}
class Named = self::_Named&S&M&N with self::M {
  synthetic constructor •() → self::Named*
    : super self::_Named&S&M&N::•()
    ;
}
static method main() → dynamic
  ;
