library /*isNonNullableByDefault*/;
import self as self;

import "org-dartlang-testcase:///multi_export_lib1.dart" as lib;
import "org-dartlang-testcase:///multi_export_lib2.dart" as lib;
import "org-dartlang-testcase:///multi_export_lib3.dart" as lib;
import "org-dartlang-testcase:///multi_export_lib4.dart" as lib;

static method main() → dynamic
  ;

library /*isNonNullableByDefault*/;
import self as self2;
import "multi_export_lib.dart" as mul;

import "org-dartlang-testcase:///multi_export_lib.dart";

class SubClass1 extends mul::Class {
  synthetic constructor •() → self2::SubClass1
    ;
}

library /*isNonNullableByDefault*/;
import self as self3;
import "multi_export_lib.dart" as mul;
additionalExports = (mul::Extension)

import "org-dartlang-testcase:///multi_export_lib.dart";
export "org-dartlang-testcase:///multi_export_lib.dart" show Extension;

class SubClass2 extends mul::Class {
  synthetic constructor •() → self3::SubClass2
    ;
}

library /*isNonNullableByDefault*/;
import self as self4;
import "multi_export_lib.dart" as mul;
additionalExports = (mul::Extension)

import "org-dartlang-testcase:///multi_export_lib.dart";
export "org-dartlang-testcase:///multi_export_lib.dart" show Extension;

class SubClass3 extends mul::Class {
  synthetic constructor •() → self4::SubClass3
    ;
}

library /*isNonNullableByDefault*/;
import self as self5;
import "multi_export_lib.dart" as mul;
additionalExports = (mul::Extension)

import "org-dartlang-testcase:///multi_export_lib.dart";
export "org-dartlang-testcase:///multi_export_lib.dart" show Extension;

class SubClass4 extends mul::Class {
  synthetic constructor •() → self5::SubClass4
    ;
}

library /*isNonNullableByDefault*/;
import self as mul;
import "dart:core" as core;

class Class extends core::Object {
  synthetic constructor •() → mul::Class
    ;
}
extension Extension<T extends mul::Class> on T {
  method method = mul::Extension|method;
  tearoff method = mul::Extension|get#method;
}
static method Extension|method<T extends mul::Class>(lowered final mul::Extension|method::T #this) → dynamic
  ;
static method Extension|get#method<T extends mul::Class>(lowered final mul::Extension|get#method::T #this) → () → dynamic
  return () → dynamic => mul::Extension|method<mul::Extension|get#method::T>(#this);
