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

static method main() → dynamic {
  core::List<core::int>? list = null;
  core::print( block {
    final core::List<core::int> #t1 = core::_GrowableList::_literal2<core::int>(1, 2);
    final core::Iterable<core::int>? #t2 = list;
    if(!(#t2 == null))
      #t1.{core::List::addAll}(#t2{core::Iterable<core::int>}){(core::Iterable<core::int>) → void};
    #t1.{core::List::add}(3){(core::int) → void};
  } =>#t1);
  core::print( block {
    final core::List<core::int> #t3 = core::_GrowableList::_literal2<core::int>(1, 2);
    final core::Iterable<core::int>? #t4 = null;
    if(!(#t4 == null))
      #t3.{core::List::addAll}(#t4{core::Iterable<core::int>}){(core::Iterable<core::int>) → void};
    #t3.{core::List::add}(3){(core::int) → void};
  } =>#t3);
  core::List<core::int> list1 = block {
    final core::List<core::int> #t5 = core::_GrowableList::•<core::int>(0);
    final core::Iterable<core::int>? #t6 = list;
    if(!(#t6 == null))
      #t5.{core::List::addAll}(#t6{core::Iterable<core::int>}){(core::Iterable<core::int>) → void};
  } =>#t5;
  core::List<Never> list2 = block {
    final core::List<Never> #t7 = core::_GrowableList::•<Never>(0);
    final core::Iterable<Never>? #t8 = null;
    if(!(#t8 == null))
      #t7.{core::List::addAll}(#t8{core::Iterable<Never>}){(core::Iterable<Never>) → void};
  } =>#t7;
  core::List<core::int> list3 = block {
    final core::List<core::int> #t9 = core::_GrowableList::_literal2<core::int>(1, 2);
    final core::Iterable<core::int>? #t10 = list;
    if(!(#t10 == null))
      #t9.{core::List::addAll}(#t10{core::Iterable<core::int>}){(core::Iterable<core::int>) → void};
    #t9.{core::List::add}(3){(core::int) → void};
  } =>#t9;
  core::List<core::int> list4 = block {
    final core::List<core::int> #t11 = core::_GrowableList::_literal2<core::int>(1, 2);
    final core::Iterable<core::int>? #t12 = null;
    if(!(#t12 == null))
      #t11.{core::List::addAll}(#t12{core::Iterable<core::int>}){(core::Iterable<core::int>) → void};
    #t11.{core::List::add}(3){(core::int) → void};
  } =>#t11;
  core::Set<core::int>? set = null;
  core::print( block {
    final core::Set<core::int> #t13 = new col::_CompactLinkedHashSet::•<core::int>();
    #t13.{core::Set::add}(1){(core::int) → core::bool};
    #t13.{core::Set::add}(2){(core::int) → core::bool};
    final core::Iterable<core::int>? #t14 = set;
    if(!(#t14 == null))
      #t13.{core::Set::addAll}(#t14{core::Iterable<core::int>}){(core::Iterable<core::int>) → void};
    #t13.{core::Set::add}(3){(core::int) → core::bool};
  } =>#t13);
  core::print( block {
    final core::Set<core::int> #t15 = new col::_CompactLinkedHashSet::•<core::int>();
    #t15.{core::Set::add}(1){(core::int) → core::bool};
    #t15.{core::Set::add}(2){(core::int) → core::bool};
    final core::Iterable<core::int>? #t16 = null;
    if(!(#t16 == null))
      #t15.{core::Set::addAll}(#t16{core::Iterable<core::int>}){(core::Iterable<core::int>) → void};
    #t15.{core::Set::add}(3){(core::int) → core::bool};
  } =>#t15);
  core::Set<core::int> set1 = block {
    final core::Set<core::int> #t17 = new col::_CompactLinkedHashSet::•<core::int>();
    final core::Iterable<dynamic>? #t18 = set;
    if(!(#t18 == null)) {
      core::Iterator<dynamic> :sync-for-iterator = #t18{core::Iterable<dynamic>}.{core::Iterable::iterator};
      for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
        final dynamic #t19 = :sync-for-iterator.{core::Iterator::current};
        {
          final core::int #t20 = #t19 as{TypeError,ForNonNullableByDefault} core::int;
          #t17.{core::Set::add}(#t20){(core::int) → core::bool};
        }
      }
    }
  } =>#t17;
  core::Set<core::int> set3 = block {
    final core::Set<core::int> #t21 = new col::_CompactLinkedHashSet::•<core::int>();
    #t21.{core::Set::add}(1){(core::int) → core::bool};
    #t21.{core::Set::add}(2){(core::int) → core::bool};
    final core::Iterable<core::int>? #t22 = set;
    if(!(#t22 == null))
      #t21.{core::Set::addAll}(#t22{core::Iterable<core::int>}){(core::Iterable<core::int>) → void};
    #t21.{core::Set::add}(3){(core::int) → core::bool};
  } =>#t21;
  core::Set<core::int> set4 = block {
    final core::Set<core::int> #t23 = new col::_CompactLinkedHashSet::•<core::int>();
    #t23.{core::Set::add}(1){(core::int) → core::bool};
    #t23.{core::Set::add}(2){(core::int) → core::bool};
    final core::Iterable<core::int>? #t24 = null;
    if(!(#t24 == null))
      #t23.{core::Set::addAll}(#t24{core::Iterable<core::int>}){(core::Iterable<core::int>) → void};
    #t23.{core::Set::add}(3){(core::int) → core::bool};
  } =>#t23;
  core::Map<core::int, core::int>? map = null;
  core::print( block {
    final core::Map<core::int, core::int> #t25 = <core::int, core::int>{};
    #t25.{core::Map::[]=}(1, 1){(core::int, core::int) → void};
    #t25.{core::Map::[]=}(2, 2){(core::int, core::int) → void};
    final core::Map<core::int, core::int>? #t26 = map;
    if(!(#t26 == null)) {
      core::Iterator<core::MapEntry<core::int, core::int>> :sync-for-iterator = #t26{core::Map<core::int, core::int>}.{core::Map::entries}{core::Iterable<core::MapEntry<core::int, core::int>>}.{core::Iterable::iterator};
      for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
        final core::MapEntry<core::int, core::int> #t27 = :sync-for-iterator.{core::Iterator::current};
        #t25.{core::Map::[]=}(#t27.{core::MapEntry::key}{core::int}, #t27.{core::MapEntry::value}{core::int}){(core::int, core::int) → void};
      }
    }
    #t25.{core::Map::[]=}(3, 3){(core::int, core::int) → void};
  } =>#t25);
  core::print( block {
    final core::Map<core::int, core::int> #t28 = <core::int, core::int>{};
    #t28.{core::Map::[]=}(1, 1){(core::int, core::int) → void};
    #t28.{core::Map::[]=}(2, 2){(core::int, core::int) → void};
    final core::Map<core::int, core::int>? #t29 = null;
    if(!(#t29 == null)) {
      core::Iterator<core::MapEntry<core::int, core::int>> :sync-for-iterator = #t29{core::Map<core::int, core::int>}.{core::Map::entries}{core::Iterable<core::MapEntry<core::int, core::int>>}.{core::Iterable::iterator};
      for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
        final core::MapEntry<core::int, core::int> #t30 = :sync-for-iterator.{core::Iterator::current};
        #t28.{core::Map::[]=}(#t30.{core::MapEntry::key}{core::int}, #t30.{core::MapEntry::value}{core::int}){(core::int, core::int) → void};
      }
    }
    #t28.{core::Map::[]=}(3, 3){(core::int, core::int) → void};
  } =>#t28);
  core::Map<core::int, core::int> map1 = block {
    final core::Map<core::int, core::int> #t31 = <core::int, core::int>{};
    final core::Map<core::int, core::int>? #t32 = map;
    if(!(#t32 == null)) {
      core::Iterator<core::MapEntry<core::int, core::int>> :sync-for-iterator = #t32{core::Map<core::int, core::int>}.{core::Map::entries}{core::Iterable<core::MapEntry<core::int, core::int>>}.{core::Iterable::iterator};
      for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
        final core::MapEntry<core::int, core::int> #t33 = :sync-for-iterator.{core::Iterator::current};
        #t31.{core::Map::[]=}(#t33.{core::MapEntry::key}{core::int}, #t33.{core::MapEntry::value}{core::int}){(core::int, core::int) → void};
      }
    }
  } =>#t31;
  core::Map<core::int, core::int> map3 = block {
    final core::Map<core::int, core::int> #t34 = <core::int, core::int>{};
    #t34.{core::Map::[]=}(1, 1){(core::int, core::int) → void};
    #t34.{core::Map::[]=}(2, 2){(core::int, core::int) → void};
    final core::Map<core::int, core::int>? #t35 = map;
    if(!(#t35 == null)) {
      core::Iterator<core::MapEntry<core::int, core::int>> :sync-for-iterator = #t35{core::Map<core::int, core::int>}.{core::Map::entries}{core::Iterable<core::MapEntry<core::int, core::int>>}.{core::Iterable::iterator};
      for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
        final core::MapEntry<core::int, core::int> #t36 = :sync-for-iterator.{core::Iterator::current};
        #t34.{core::Map::[]=}(#t36.{core::MapEntry::key}{core::int}, #t36.{core::MapEntry::value}{core::int}){(core::int, core::int) → void};
      }
    }
    #t34.{core::Map::[]=}(3, 3){(core::int, core::int) → void};
  } =>#t34;
  core::Map<core::int, core::int> map4 = block {
    final core::Map<core::int, core::int> #t37 = <core::int, core::int>{};
    #t37.{core::Map::[]=}(1, 1){(core::int, core::int) → void};
    #t37.{core::Map::[]=}(2, 2){(core::int, core::int) → void};
    final core::Map<core::int, core::int>? #t38 = null;
    if(!(#t38 == null)) {
      core::Iterator<core::MapEntry<core::int, core::int>> :sync-for-iterator = #t38{core::Map<core::int, core::int>}.{core::Map::entries}{core::Iterable<core::MapEntry<core::int, core::int>>}.{core::Iterable::iterator};
      for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
        final core::MapEntry<core::int, core::int> #t39 = :sync-for-iterator.{core::Iterator::current};
        #t37.{core::Map::[]=}(#t39.{core::MapEntry::key}{core::int}, #t39.{core::MapEntry::value}{core::int}){(core::int, core::int) → void};
      }
    }
    #t37.{core::Map::[]=}(3, 3){(core::int, core::int) → void};
  } =>#t37;
}
