main = main::main;
library from "org-dartlang-test:///lib1.dart" as lib1 {

  static field dart.core::int? _#field = null;
  static field dart.core::bool _#field#isSet = false;
  static get field() → dart.core::int
    return lib1::_#field#isSet ?{dart.core::int} let final dart.core::int? #t1 = lib1::_#field in #t1{dart.core::int} : throw new dart._internal::LateError::fieldNI("field");
  static set field(dart.core::int field#param) → void {
    lib1::_#field#isSet = true;
    lib1::_#field = field#param;
  }
  static method method() → dynamic {
    dart.core::print("bar");
  }
}
library from "org-dartlang-test:///lib2.dart" as lib2 {
additionalExports = (lib1::field,
  lib1::method,
  lib1::field)

  export "org-dartlang-test:///lib1.dart";

}
library from "org-dartlang-test:///main.dart" as main {

  import "org-dartlang-test:///lib2.dart";

  static method main() → dynamic {
    lib1::field = 87;
  }
}
