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

class A1 extends core::Object {
  synthetic constructor •() → self::A1
    : super core::Object::•()
    ;
}
class B1<T extends core::Object? = dynamic> extends core::Object {
  synthetic constructor •() → self::B1<self::B1::T%>
    : super core::Object::•()
    ;
}
extension A2 on self::A1 {
  method method1 = self::A2|method1;
  method tearoff method1 = self::A2|get#method1;
  method method2 = self::A2|method2;
  method tearoff method2 = self::A2|get#method2;
  method method3 = self::A2|method3;
  method tearoff method3 = self::A2|get#method3;
  method method4 = self::A2|method4;
  method tearoff method4 = self::A2|get#method4;
}
extension B2<T extends core::Object? = dynamic> on self::B1<T%> {
  method method1 = self::B2|method1;
  method tearoff method1 = self::B2|get#method1;
  method method2 = self::B2|method2;
  method tearoff method2 = self::B2|get#method2;
}
static extension-member method A2|method1(lowered final self::A1 #this) → self::A1 {
  return #this;
}
static extension-member method A2|get#method1(lowered final self::A1 #this) → () → self::A1
  return () → self::A1 => self::A2|method1(#this);
static extension-member method A2|method2<T extends core::Object? = dynamic>(lowered final self::A1 #this, self::A2|method2::T% o) → self::A1 {
  core::print(o);
  return #this;
}
static extension-member method A2|get#method2(lowered final self::A1 #this) → <T extends core::Object? = dynamic>(T%) → self::A1
  return <T extends core::Object? = dynamic>(T% o) → self::A1 => self::A2|method2<T%>(#this, o);
static extension-member method A2|method3<T extends core::Object? = dynamic>(lowered final self::A1 #this, [self::A2|method3::T? o = #C1]) → self::A1 {
  core::print(o);
  return #this;
}
static extension-member method A2|get#method3(lowered final self::A1 #this) → <T extends core::Object? = dynamic>([T?]) → self::A1
  return <T extends core::Object? = dynamic>([T? o = #C1]) → self::A1 => self::A2|method3<T%>(#this, o);
static extension-member method A2|method4<T extends core::Object? = dynamic>(lowered final self::A1 #this, {self::A2|method4::T? o = #C1}) → self::A1 {
  core::print(o);
  return #this;
}
static extension-member method A2|get#method4(lowered final self::A1 #this) → <T extends core::Object? = dynamic>({o: T?}) → self::A1
  return <T extends core::Object? = dynamic>({T? o = #C1}) → self::A1 => self::A2|method4<T%>(#this, o: o);
static extension-member method B2|method1<T extends core::Object? = dynamic>(lowered final self::B1<self::B2|method1::T%> #this) → self::B1<self::B2|method1::T%> {
  return #this;
}
static extension-member method B2|get#method1<T extends core::Object? = dynamic>(lowered final self::B1<self::B2|get#method1::T%> #this) → () → self::B1<self::B2|get#method1::T%>
  return () → self::B1<self::B2|get#method1::T%> => self::B2|method1<self::B2|get#method1::T%>(#this);
static extension-member method B2|method2<T extends core::Object? = dynamic, S extends core::Object? = dynamic>(lowered final self::B1<self::B2|method2::T%> #this, self::B2|method2::S% o) → self::B1<self::B2|method2::T%> {
  core::print(o);
  return #this;
}
static extension-member method B2|get#method2<T extends core::Object? = dynamic>(lowered final self::B1<self::B2|get#method2::T%> #this) → <S extends core::Object? = dynamic>(S%) → self::B1<self::B2|get#method2::T%>
  return <S extends core::Object? = dynamic>(S% o) → self::B1<self::B2|get#method2::T%> => self::B2|method2<self::B2|get#method2::T%, S%>(#this, o);
static method main() → dynamic {}

constants  {
  #C1 = null
}
