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

class Class<T extends core::Object? = dynamic> extends core::Object {
  static field core::int? lateStaticField1Init = null;
  static field core::int? _#lateStaticField1 = null;
  static field core::bool _#lateStaticField1#isSet = false;
  static field core::int? lateStaticField2Init = null;
  static field core::int? _#lateStaticField2 = null;
  static field core::bool _#lateStaticField2#isSet = false;
  field core::int? lateInstanceFieldInit = null;
  field core::int? _#Class#lateInstanceField = null;
  field core::bool _#Class#lateInstanceField#isSet = false;
  generic-covariant-impl field self::Class::T? lateGenericInstanceFieldInit = null;
  final field self::Class::T? field;
  field self::Class::T? _#Class#lateGenericInstanceField = null;
  field core::bool _#Class#lateGenericInstanceField#isSet = false;
  constructor •(self::Class::T? field) → self::Class<self::Class::T%>
    : self::Class::field = field, super core::Object::•()
    ;
  static method initLateStaticField1(core::int value) → core::int? {
    return self::Class::lateStaticField1Init = value;
  }
  static get lateStaticField1() → core::int? {
    if(!self::Class::_#lateStaticField1#isSet) {
      final core::int? #t1 = self::Class::initLateStaticField1(87);
      if(self::Class::_#lateStaticField1#isSet)
        throw new _in::LateError::fieldADI("lateStaticField1");
      self::Class::_#lateStaticField1 = #t1;
      self::Class::_#lateStaticField1#isSet = true;
    }
    return self::Class::_#lateStaticField1;
  }
  static method initLateStaticField2(core::int value) → core::int? {
    return self::Class::lateStaticField2Init = value;
  }
  static get lateStaticField2() → core::int? {
    if(!self::Class::_#lateStaticField2#isSet) {
      final core::int? #t2 = self::Class::initLateStaticField2(42);
      if(self::Class::_#lateStaticField2#isSet)
        throw new _in::LateError::fieldADI("lateStaticField2");
      self::Class::_#lateStaticField2 = #t2;
      self::Class::_#lateStaticField2#isSet = true;
    }
    return self::Class::_#lateStaticField2;
  }
  static method staticMethod() → dynamic {
    self::expect(null, self::Class::lateStaticField2Init);
    self::expect(42, self::Class::lateStaticField2);
    self::expect(42, self::Class::lateStaticField2Init);
  }
  method initLateInstanceField(core::int value) → core::int? {
    return this.{self::Class::lateInstanceFieldInit} = value;
  }
  get lateInstanceField() → core::int? {
    if(!this.{self::Class::_#Class#lateInstanceField#isSet}{core::bool}) {
      final core::int? #t3 = this.{self::Class::initLateInstanceField}(16){(core::int) → core::int?};
      if(this.{self::Class::_#Class#lateInstanceField#isSet}{core::bool})
        throw new _in::LateError::fieldADI("lateInstanceField");
      this.{self::Class::_#Class#lateInstanceField} = #t3;
      this.{self::Class::_#Class#lateInstanceField#isSet} = true;
    }
    return this.{self::Class::_#Class#lateInstanceField}{core::int?};
  }
  method initLateGenericInstanceField(generic-covariant-impl self::Class::T? value) → self::Class::T? {
    return this.{self::Class::lateGenericInstanceFieldInit} = value;
  }
  get lateGenericInstanceField() → self::Class::T? {
    if(!this.{self::Class::_#Class#lateGenericInstanceField#isSet}{core::bool}) {
      final self::Class::T? #t4 = this.{self::Class::initLateGenericInstanceField}(this.{self::Class::field}{self::Class::T?}){(self::Class::T?) → self::Class::T?};
      if(this.{self::Class::_#Class#lateGenericInstanceField#isSet}{core::bool})
        throw new _in::LateError::fieldADI("lateGenericInstanceField");
      this.{self::Class::_#Class#lateGenericInstanceField} = #t4;
      this.{self::Class::_#Class#lateGenericInstanceField#isSet} = true;
    }
    return this.{self::Class::_#Class#lateGenericInstanceField}{self::Class::T?};
  }
  method instanceMethod() → dynamic {
    self::expect(null, this.{self::Class::lateInstanceFieldInit}{core::int?});
    self::expect(16, this.{self::Class::lateInstanceField}{core::int?});
    self::expect(16, this.{self::Class::lateInstanceFieldInit}{core::int?});
    self::expect(null, this.{self::Class::lateGenericInstanceFieldInit}{self::Class::T?});
    self::expect(this.{self::Class::field}{self::Class::T?}, this.{self::Class::lateGenericInstanceField}{self::Class::T?});
    self::expect(this.{self::Class::field}{self::Class::T?}, this.{self::Class::lateGenericInstanceFieldInit}{self::Class::T?});
  }
}
extension Extension<T extends core::Object? = dynamic> on self::Class<T%> {
  static field lateExtensionField1Init = self::Extension|lateExtensionField1Init;
  static method initLateExtensionField1 = self::Extension|initLateExtensionField1;
  static field lateExtensionField1 = self::_#Extension|lateExtensionField1;
  static field lateExtensionField1 = self::_#Extension|lateExtensionField1#isSet;
  static get lateExtensionField1 = get self::Extension|lateExtensionField1;
  static field lateExtensionField2Init = self::Extension|lateExtensionField2Init;
  static method initLateExtensionField2 = self::Extension|initLateExtensionField2;
  static field lateExtensionField2 = self::_#Extension|lateExtensionField2;
  static field lateExtensionField2 = self::_#Extension|lateExtensionField2#isSet;
  static get lateExtensionField2 = get self::Extension|lateExtensionField2;
  static method staticMethod = self::Extension|staticMethod;
}
static field core::int? lateTopLevelField1Init;
static field core::int? _#lateTopLevelField1 = null;
static field core::bool _#lateTopLevelField1#isSet = false;
static field core::int? Extension|lateExtensionField1Init;
static field core::int? _#Extension|lateExtensionField1 = null;
static field core::bool _#Extension|lateExtensionField1#isSet = false;
static field core::int? Extension|lateExtensionField2Init;
static field core::int? _#Extension|lateExtensionField2 = null;
static field core::bool _#Extension|lateExtensionField2#isSet = false;
static method initLateTopLevelField1(core::int value) → core::int? {
  return self::lateTopLevelField1Init = value;
}
static get lateTopLevelField1() → core::int? {
  if(!self::_#lateTopLevelField1#isSet) {
    final core::int? #t5 = self::initLateTopLevelField1(123);
    if(self::_#lateTopLevelField1#isSet)
      throw new _in::LateError::fieldADI("lateTopLevelField1");
    self::_#lateTopLevelField1 = #t5;
    self::_#lateTopLevelField1#isSet = true;
  }
  return self::_#lateTopLevelField1;
}
static method Extension|initLateExtensionField1(core::int value) → core::int? {
  return self::Extension|lateExtensionField1Init = value;
}
static get Extension|lateExtensionField1() → core::int? {
  if(!self::_#Extension|lateExtensionField1#isSet) {
    final core::int? #t6 = self::Extension|initLateExtensionField1(87);
    if(self::_#Extension|lateExtensionField1#isSet)
      throw new _in::LateError::fieldADI("lateExtensionField1");
    self::_#Extension|lateExtensionField1 = #t6;
    self::_#Extension|lateExtensionField1#isSet = true;
  }
  return self::_#Extension|lateExtensionField1;
}
static method Extension|initLateExtensionField2(core::int value) → core::int? {
  return self::Extension|lateExtensionField2Init = value;
}
static get Extension|lateExtensionField2() → core::int? {
  if(!self::_#Extension|lateExtensionField2#isSet) {
    final core::int? #t7 = self::Extension|initLateExtensionField2(42);
    if(self::_#Extension|lateExtensionField2#isSet)
      throw new _in::LateError::fieldADI("lateExtensionField2");
    self::_#Extension|lateExtensionField2 = #t7;
    self::_#Extension|lateExtensionField2#isSet = true;
  }
  return self::_#Extension|lateExtensionField2;
}
static method Extension|staticMethod() → dynamic {
  self::expect(null, self::Extension|lateExtensionField2Init);
  self::expect(42, self::Extension|lateExtensionField2);
  self::expect(42, self::Extension|lateExtensionField2Init);
}
static method main() → dynamic {
  self::expect(null, self::lateTopLevelField1Init);
  self::expect(123, self::lateTopLevelField1);
  self::expect(123, self::lateTopLevelField1Init);
  self::expect(null, self::Class::lateStaticField1Init);
  self::expect(87, self::Class::lateStaticField1);
  self::expect(87, self::Class::lateStaticField1Init);
  self::Class::staticMethod();
  new self::Class::•<core::int?>(null).{self::Class::instanceMethod}(){() → dynamic};
  new self::Class::•<core::int?>(0).{self::Class::instanceMethod}(){() → dynamic};
  new self::Class::•<core::int>(0).{self::Class::instanceMethod}(){() → dynamic};
  self::expect(null, self::Extension|lateExtensionField1Init);
  self::expect(87, self::Extension|lateExtensionField1);
  self::expect(87, self::Extension|lateExtensionField1Init);
  self::Extension|staticMethod();
}
static method expect(dynamic expected, dynamic actual) → dynamic {
  if(!(expected =={core::Object::==}{(core::Object) → core::bool} actual))
    throw "Expected ${expected}, actual ${actual}";
}
