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

static field core::int? _#nullableTopLevelField = _in::createSentinel<core::int?>();
static field core::int? _#nonNullableTopLevelField = null;
static field core::int? _#nullableTopLevelFieldWithInitializer = _in::createSentinel<core::int?>();
static field core::int? _#nonNullableTopLevelFieldWithInitializer = null;
static field core::int? _#nullableFinalTopLevelField = _in::createSentinel<core::int?>();
static field core::int? _#nonNullableFinalTopLevelField = null;
static field core::int? _#nullableFinalTopLevelFieldWithInitializer = _in::createSentinel<core::int?>();
static field core::int? _#nonNullableFinalTopLevelFieldWithInitializer = null;
static field Never? _#neverTopLevelField = null;
static get nullableTopLevelField() → core::int?
  return let final core::int? #t1 = self::_#nullableTopLevelField in _in::isSentinel(#t1) ?{core::int?} throw new _in::LateError::fieldNI("nullableTopLevelField") : #t1{core::int?};
static set nullableTopLevelField(core::int? nullableTopLevelField#param) → void
  self::_#nullableTopLevelField = nullableTopLevelField#param;
static get nonNullableTopLevelField() → core::int
  return let final core::int? #t2 = self::_#nonNullableTopLevelField in #t2 == null ?{core::int} throw new _in::LateError::fieldNI("nonNullableTopLevelField") : #t2{core::int};
static set nonNullableTopLevelField(core::int nonNullableTopLevelField#param) → void
  self::_#nonNullableTopLevelField = nonNullableTopLevelField#param;
static get nullableTopLevelFieldWithInitializer() → core::int?
  return let final core::int? #t3 = self::_#nullableTopLevelFieldWithInitializer in _in::isSentinel(#t3) ?{core::int?} self::_#nullableTopLevelFieldWithInitializer = null : #t3{core::int?};
static set nullableTopLevelFieldWithInitializer(core::int? nullableTopLevelFieldWithInitializer#param) → void
  self::_#nullableTopLevelFieldWithInitializer = nullableTopLevelFieldWithInitializer#param;
static get nonNullableTopLevelFieldWithInitializer() → core::int
  return let final core::int? #t4 = self::_#nonNullableTopLevelFieldWithInitializer in #t4 == null ?{core::int} self::_#nonNullableTopLevelFieldWithInitializer = 0 : #t4{core::int};
static set nonNullableTopLevelFieldWithInitializer(core::int nonNullableTopLevelFieldWithInitializer#param) → void
  self::_#nonNullableTopLevelFieldWithInitializer = nonNullableTopLevelFieldWithInitializer#param;
static get nullableFinalTopLevelField() → core::int?
  return let final core::int? #t5 = self::_#nullableFinalTopLevelField in _in::isSentinel(#t5) ?{core::int?} throw new _in::LateError::fieldNI("nullableFinalTopLevelField") : #t5{core::int?};
static set nullableFinalTopLevelField(core::int? nullableFinalTopLevelField#param) → void
  if(_in::isSentinel(self::_#nullableFinalTopLevelField))
    self::_#nullableFinalTopLevelField = nullableFinalTopLevelField#param;
  else
    throw new _in::LateError::fieldAI("nullableFinalTopLevelField");
static get nonNullableFinalTopLevelField() → core::int
  return let final core::int? #t6 = self::_#nonNullableFinalTopLevelField in #t6 == null ?{core::int} throw new _in::LateError::fieldNI("nonNullableFinalTopLevelField") : #t6{core::int};
static set nonNullableFinalTopLevelField(core::int nonNullableFinalTopLevelField#param) → void
  if(self::_#nonNullableFinalTopLevelField == null)
    self::_#nonNullableFinalTopLevelField = nonNullableFinalTopLevelField#param;
  else
    throw new _in::LateError::fieldAI("nonNullableFinalTopLevelField");
static get nullableFinalTopLevelFieldWithInitializer() → core::int?
  return let final core::int? #t7 = self::_#nullableFinalTopLevelFieldWithInitializer in _in::isSentinel(#t7) ?{core::int?} let final has-declared-initializer core::int? #t8 = null in _in::isSentinel(self::_#nullableFinalTopLevelFieldWithInitializer) ?{core::int?} self::_#nullableFinalTopLevelFieldWithInitializer = #t8 : throw new _in::LateError::fieldADI("nullableFinalTopLevelFieldWithInitializer") : #t7;
static get nonNullableFinalTopLevelFieldWithInitializer() → core::int
  return let final core::int? #t9 = self::_#nonNullableFinalTopLevelFieldWithInitializer in #t9 == null ?{core::int} let final core::int #t10 = 0 in self::_#nonNullableFinalTopLevelFieldWithInitializer == null ?{core::int} self::_#nonNullableFinalTopLevelFieldWithInitializer = #t10 : throw new _in::LateError::fieldADI("nonNullableFinalTopLevelFieldWithInitializer") : #t9{core::int};
static get neverTopLevelField() → Never
  return let final Never? #t11 = self::_#neverTopLevelField in #t11 == null ?{Never} throw new _in::LateError::fieldNI("neverTopLevelField") : #t11{Never};
static set neverTopLevelField(Never neverTopLevelField#param) → void
  self::_#neverTopLevelField = neverTopLevelField#param;
static method main() → dynamic {}
