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

typedef F<invariant X extends core::Object* = dynamic> = <Y extends X* = dynamic>() →* void;
typedef Fcov<X extends core::Object* = dynamic> = () →* X*;
typedef Fcon<contravariant X extends core::Object* = dynamic> = (X*) →* dynamic;
typedef Finv<invariant X extends core::Object* = dynamic> = (X*) →* X*;
typedef FcovBound<X extends core::num* = core::num*> = () →* X*;
typedef FconBound<contravariant X extends core::num* = core::num*> = (X*) →* dynamic;
typedef FinvBound<invariant X extends core::num* = core::num*> = (X*) →* X*;
typedef FcovCyclicBound<X extends self::A<X*>* = self::A<dynamic>*> = () →* X*;
typedef FconCyclicBound<contravariant X extends self::A<X*>* = self::A<core::Null?>*> = (X*) →* dynamic;
typedef FinvCyclicBound<invariant X extends self::A<X*>* = self::A<dynamic>*> = (X*) →* X*;
typedef FcovCyclicCoBound<X extends (X*) →* dynamic = (core::Null?) →* dynamic> = () →* X*;
typedef FconCyclicCoBound<contravariant X extends (X*) →* dynamic = (dynamic) →* dynamic> = (X*) →* dynamic;
typedef FinvCyclicCoBound<invariant X extends (X*) →* dynamic = (dynamic) →* dynamic> = (X*) →* X*;
class A<X extends core::Object* = dynamic> extends core::Object {
  synthetic constructor •() → self::A<self::A::X*>*
    : super core::Object::•()
    ;
}
class B<X extends core::Object* = dynamic> extends core::Object {
  synthetic constructor •() → self::B<self::B::X*>*
    : super core::Object::•()
    ;
}
static method toF<X extends core::Object* = dynamic>(self::toF::X* x) → <Y extends self::toF::X* = dynamic>() →* void
  return null;
static method testTopLevel() → void {
  () →* dynamic source1;
  <Y extends () →* dynamic = dynamic>() →* void fsource1 = self::toF<() →* dynamic>(source1);
  <Y extends () →* dynamic = dynamic>() →* void target1 = fsource1;
  (dynamic) →* dynamic source2;
  <Y extends (dynamic) →* dynamic = dynamic>() →* void fsource2 = self::toF<(dynamic) →* dynamic>(source2);
  <Y extends (dynamic) →* dynamic = dynamic>() →* void target2 = fsource2;
  (dynamic) →* dynamic source3;
  <Y extends (dynamic) →* dynamic = dynamic>() →* void fsource3 = self::toF<(dynamic) →* dynamic>(source3);
  <Y extends (dynamic) →* dynamic = dynamic>() →* void target3 = fsource3;
  () →* core::num* source4;
  <Y extends () →* core::num* = dynamic>() →* void fsource4 = self::toF<() →* core::num*>(source4);
  <Y extends () →* core::num* = dynamic>() →* void target4 = fsource4;
  (core::num*) →* dynamic source5;
  <Y extends (core::num*) →* dynamic = dynamic>() →* void fsource5 = self::toF<(core::num*) →* dynamic>(source5);
  <Y extends (core::num*) →* dynamic = dynamic>() →* void target5 = fsource5;
  (core::num*) →* core::num* source6;
  <Y extends (core::num*) →* core::num* = dynamic>() →* void fsource6 = self::toF<(core::num*) →* core::num*>(source6);
  <Y extends (core::num*) →* core::num* = dynamic>() →* void target6 = fsource6;
  () →* self::A<dynamic>* source7;
  <Y extends () →* self::A<dynamic>* = dynamic>() →* void fsource7 = self::toF<() →* self::A<dynamic>*>(source7);
  <Y extends () →* self::A<dynamic>* = dynamic>() →* void target7 = fsource7;
  (self::A<core::Null?>*) →* dynamic source8;
  <Y extends (self::A<core::Null?>*) →* dynamic = dynamic>() →* void fsource8 = self::toF<(self::A<core::Null?>*) →* dynamic>(source8);
  <Y extends (self::A<core::Null*>*) →* dynamic = dynamic>() →* void target8 = fsource8;
  (self::A<dynamic>*) →* self::A<dynamic>* source9;
  () →* (core::Null?) →* dynamic source10;
  <Y extends () →* (core::Null?) →* dynamic = dynamic>() →* void fsource10 = self::toF<() →* (core::Null?) →* dynamic>(source10);
  <Y extends () →* (core::Null*) →* dynamic = dynamic>() →* void target10 = fsource10;
  ((dynamic) →* dynamic) →* dynamic source11;
  <Y extends ((dynamic) →* dynamic) →* dynamic = dynamic>() →* void fsource11 = self::toF<((dynamic) →* dynamic) →* dynamic>(source11);
  <Y extends ((dynamic) →* dynamic) →* dynamic = dynamic>() →* void target11 = fsource11;
  ((dynamic) →* dynamic) →* (dynamic) →* dynamic source12;
  <Y extends ((dynamic) →* dynamic) →* (dynamic) →* dynamic = dynamic>() →* void fsource12 = self::toF<((dynamic) →* dynamic) →* (dynamic) →* dynamic>(source12);
  <Y extends ((dynamic) →* dynamic) →* (dynamic) →* dynamic = dynamic>() →* void target12 = fsource12;
}
static method testNested() → void {
  self::B<() →* dynamic>* source1;
  <Y extends self::B<() →* dynamic>* = dynamic>() →* void fsource1 = self::toF<self::B<() →* dynamic>*>(source1);
  <Y extends self::B<() →* dynamic>* = dynamic>() →* void target1 = fsource1;
  self::B<(dynamic) →* dynamic>* source2;
  <Y extends self::B<(dynamic) →* dynamic>* = dynamic>() →* void fsource2 = self::toF<self::B<(dynamic) →* dynamic>*>(source2);
  <Y extends self::B<(dynamic) →* dynamic>* = dynamic>() →* void target2 = fsource2;
  self::B<(dynamic) →* dynamic>* source3;
  <Y extends self::B<(dynamic) →* dynamic>* = dynamic>() →* void fsource3 = self::toF<self::B<(dynamic) →* dynamic>*>(source3);
  <Y extends self::B<(dynamic) →* dynamic>* = dynamic>() →* void target3 = fsource3;
  self::B<() →* core::num*>* source4;
  <Y extends self::B<() →* core::num*>* = dynamic>() →* void fsource4 = self::toF<self::B<() →* core::num*>*>(source4);
  <Y extends self::B<() →* core::num*>* = dynamic>() →* void target4 = fsource4;
  self::B<(core::num*) →* dynamic>* source5;
  <Y extends self::B<(core::num*) →* dynamic>* = dynamic>() →* void fsource5 = self::toF<self::B<(core::num*) →* dynamic>*>(source5);
  <Y extends self::B<(core::num*) →* dynamic>* = dynamic>() →* void target5 = fsource5;
  self::B<(core::num*) →* core::num*>* source6;
  <Y extends self::B<(core::num*) →* core::num*>* = dynamic>() →* void fsource6 = self::toF<self::B<(core::num*) →* core::num*>*>(source6);
  <Y extends self::B<(core::num*) →* core::num*>* = dynamic>() →* void target6 = fsource6;
  self::B<() →* self::A<dynamic>*>* source7;
  <Y extends self::B<() →* self::A<dynamic>*>* = dynamic>() →* void fsource7 = self::toF<self::B<() →* self::A<dynamic>*>*>(source7);
  <Y extends self::B<() →* self::A<dynamic>*>* = dynamic>() →* void target7 = fsource7;
  self::B<(self::A<core::Null?>*) →* dynamic>* source8;
  <Y extends self::B<(self::A<core::Null?>*) →* dynamic>* = dynamic>() →* void fsource8 = self::toF<self::B<(self::A<core::Null?>*) →* dynamic>*>(source8);
  <Y extends self::B<(self::A<core::Null*>*) →* dynamic>* = dynamic>() →* void target8 = fsource8;
  self::B<(self::A<dynamic>*) →* self::A<dynamic>*>* source9;
  self::B<() →* (core::Null?) →* dynamic>* source10;
  <Y extends self::B<() →* (core::Null?) →* dynamic>* = dynamic>() →* void fsource10 = self::toF<self::B<() →* (core::Null?) →* dynamic>*>(source10);
  <Y extends self::B<() →* (core::Null*) →* dynamic>* = dynamic>() →* void target10 = fsource10;
  self::B<((dynamic) →* dynamic) →* dynamic>* source11;
  <Y extends self::B<((dynamic) →* dynamic) →* dynamic>* = dynamic>() →* void fsource11 = self::toF<self::B<((dynamic) →* dynamic) →* dynamic>*>(source11);
  <Y extends self::B<((dynamic) →* dynamic) →* dynamic>* = dynamic>() →* void target11 = fsource11;
  self::B<((dynamic) →* dynamic) →* (dynamic) →* dynamic>* source12;
  <Y extends self::B<((dynamic) →* dynamic) →* (dynamic) →* dynamic>* = dynamic>() →* void fsource12 = self::toF<self::B<((dynamic) →* dynamic) →* (dynamic) →* dynamic>*>(source12);
  <Y extends self::B<((dynamic) →* dynamic) →* (dynamic) →* dynamic>* = dynamic>() →* void target12 = fsource12;
}
static method main() → dynamic {
  self::testTopLevel();
  self::testNested();
}
