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 get nullableTopLevelField() → core::int?
  return let final core::int? #t1 = self::_#nullableTopLevelField in _in::isSentinel(#t1) ?{core::int?} throw new _in::LateInitializationErrorImpl::•("Field 'nullableTopLevelField' has not been initialized.") : #t1{core::int?};
static set nullableTopLevelField(core::int? #t2) → void
  self::_#nullableTopLevelField = #t2;
static get nonNullableTopLevelField() → core::int
  return let final core::int? #t3 = self::_#nonNullableTopLevelField in #t3.==(null) ?{core::int} throw new _in::LateInitializationErrorImpl::•("Field 'nonNullableTopLevelField' has not been initialized.") : #t3{core::int};
static set nonNullableTopLevelField(core::int #t4) → void
  self::_#nonNullableTopLevelField = #t4;
static get nullableTopLevelFieldWithInitializer() → core::int?
  return let final core::int? #t5 = self::_#nullableTopLevelFieldWithInitializer in _in::isSentinel(#t5) ?{core::int?} self::_#nullableTopLevelFieldWithInitializer = null : #t5{core::int?};
static set nullableTopLevelFieldWithInitializer(core::int? #t6) → void
  self::_#nullableTopLevelFieldWithInitializer = #t6;
static get nonNullableTopLevelFieldWithInitializer() → core::int
  return let final core::int? #t7 = self::_#nonNullableTopLevelFieldWithInitializer in #t7.==(null) ?{core::int} self::_#nonNullableTopLevelFieldWithInitializer = 0 : #t7{core::int};
static set nonNullableTopLevelFieldWithInitializer(core::int #t8) → void
  self::_#nonNullableTopLevelFieldWithInitializer = #t8;
static get nullableFinalTopLevelField() → core::int?
  return let final core::int? #t9 = self::_#nullableFinalTopLevelField in _in::isSentinel(#t9) ?{core::int?} throw new _in::LateInitializationErrorImpl::•("Field 'nullableFinalTopLevelField' has not been initialized.") : #t9{core::int?};
static set nullableFinalTopLevelField(core::int? #t10) → void
  if(_in::isSentinel(self::_#nullableFinalTopLevelField))
    self::_#nullableFinalTopLevelField = #t10;
  else
    throw new _in::LateInitializationErrorImpl::•("Field 'nullableFinalTopLevelField' has already been initialized.");
static get nonNullableFinalTopLevelField() → core::int
  return let final core::int? #t11 = self::_#nonNullableFinalTopLevelField in #t11.==(null) ?{core::int} throw new _in::LateInitializationErrorImpl::•("Field 'nonNullableFinalTopLevelField' has not been initialized.") : #t11{core::int};
static set nonNullableFinalTopLevelField(core::int #t12) → void
  if(self::_#nonNullableFinalTopLevelField.==(null))
    self::_#nonNullableFinalTopLevelField = #t12;
  else
    throw new _in::LateInitializationErrorImpl::•("Field 'nonNullableFinalTopLevelField' has already been initialized.");
static get nullableFinalTopLevelFieldWithInitializer() → core::int?
  return let final core::int? #t13 = self::_#nullableFinalTopLevelFieldWithInitializer in _in::isSentinel(#t13) ?{core::int?} let final core::int? #t14 = null in _in::isSentinel(self::_#nullableFinalTopLevelFieldWithInitializer) ?{core::int?} self::_#nullableFinalTopLevelFieldWithInitializer = #t14 : throw new _in::LateInitializationErrorImpl::•("Field 'nullableFinalTopLevelFieldWithInitializer' has been assigned during initialization.") : #t13;
static get nonNullableFinalTopLevelFieldWithInitializer() → core::int
  return let final core::int? #t15 = self::_#nonNullableFinalTopLevelFieldWithInitializer in #t15.==(null) ?{core::int} let final core::int #t16 = 0 in self::_#nonNullableFinalTopLevelFieldWithInitializer.==(null) ?{core::int} self::_#nonNullableFinalTopLevelFieldWithInitializer = #t16 : throw new _in::LateInitializationErrorImpl::•("Field 'nonNullableFinalTopLevelFieldWithInitializer' has been assigned during initialization.") : #t15{core::int};
static method main() → dynamic {}
