library;
import self as self;
import "dart:core" as core;
import "dart:collection" as col;

static method main() → dynamic {
  core::List<core::int*>* list1 = <core::int*>[0];
  core::List<core::num*>* list2 = <core::num*>[0];
  dynamic list3 = <core::int*>[0];
  core::List<core::int*>* list = block {
    final core::List<core::int*>* #t1 = <core::int*>[0];
    #t1.{core::List::addAll}(list1){(core::Iterable<core::int*>*) →* void};
    for (final dynamic #t2 in list2) {
      final core::int* #t3 = #t2 as{TypeError} core::int*;
      #t1.{core::List::add}(#t3){(core::int*) →* void};
    }
    for (final dynamic #t4 in list3 as{TypeError,ForDynamic} core::Iterable<dynamic>*) {
      final core::int* #t5 = #t4 as{TypeError} core::int*;
      #t1.{core::List::add}(#t5){(core::int*) →* void};
    }
    if(true)
      #t1.{core::List::add}(2){(core::int*) →* void};
  } =>#t1;
  core::Set<core::int*>* set1 = block {
    final core::Set<core::int*>* #t6 = col::LinkedHashSet::•<core::int*>();
    #t6.{core::Set::add}(0){(core::int*) →* core::bool*};
  } =>#t6;
  core::Set<core::num*>* set2 = block {
    final core::Set<core::num*>* #t7 = col::LinkedHashSet::•<core::num*>();
    #t7.{core::Set::add}(0){(core::num*) →* core::bool*};
  } =>#t7;
  dynamic set3 = block {
    final core::Set<core::int*>* #t8 = col::LinkedHashSet::•<core::int*>();
    #t8.{core::Set::add}(0){(core::int*) →* core::bool*};
  } =>#t8;
  core::Set<core::int*>* set = block {
    final core::Set<core::int*>* #t9 = col::LinkedHashSet::•<core::int*>();
    #t9.{core::Set::add}(0){(core::int*) →* core::bool*};
    #t9.{core::Set::addAll}(set1){(core::Iterable<core::int*>*) →* void};
    for (final dynamic #t10 in set2) {
      final core::int* #t11 = #t10 as{TypeError} core::int*;
      #t9.{core::Set::add}(#t11){(core::int*) →* core::bool*};
    }
    for (final dynamic #t12 in set3 as{TypeError,ForDynamic} core::Iterable<dynamic>*) {
      final core::int* #t13 = #t12 as{TypeError} core::int*;
      #t9.{core::Set::add}(#t13){(core::int*) →* core::bool*};
    }
    if(true)
      #t9.{core::Set::add}(2){(core::int*) →* core::bool*};
  } =>#t9;
  core::Map<core::int*, core::String*>* map1 = <core::int*, core::String*>{0: "foo"};
  core::Map<core::num*, core::Object*>* map2 = <core::num*, core::Object*>{0: "bar"};
  dynamic map3 = <core::int*, core::String*>{0: "baz"};
  core::Map<core::int*, core::String*>* map = block {
    final core::Map<core::int*, core::String*>* #t14 = <core::int*, core::String*>{};
    #t14.{core::Map::[]=}(0, "foo"){(core::int*, core::String*) →* void};
    for (final core::MapEntry<core::int*, core::String*>* #t15 in map1.{core::Map::entries}{core::Iterable<core::MapEntry<core::int*, core::String*>>})
      #t14.{core::Map::[]=}(#t15.{core::MapEntry::key}{core::int*}, #t15.{core::MapEntry::value}{core::String*}){(core::int*, core::String*) →* void};
    for (final core::MapEntry<dynamic, dynamic>* #t16 in map2.{core::Map::entries}{core::Iterable<core::MapEntry<core::int*, core::String*>>}) {
      final core::int* #t17 = #t16.{core::MapEntry::key}{dynamic} as{TypeError} core::int*;
      final core::String* #t18 = #t16.{core::MapEntry::value}{dynamic} as{TypeError} core::String*;
      #t14.{core::Map::[]=}(#t17, #t18){(core::int*, core::String*) →* void};
    }
    for (final core::MapEntry<dynamic, dynamic>* #t19 in (map3 as{TypeError,ForDynamic} core::Map<dynamic, dynamic>*).{core::Map::entries}{core::Iterable<core::MapEntry<core::int*, core::String*>>}) {
      final core::int* #t20 = #t19.{core::MapEntry::key}{dynamic} as{TypeError} core::int*;
      final core::String* #t21 = #t19.{core::MapEntry::value}{dynamic} as{TypeError} core::String*;
      #t14.{core::Map::[]=}(#t20, #t21){(core::int*, core::String*) →* void};
    }
    if(true)
      #t14.{core::Map::[]=}(2, "baz"){(core::int*, core::String*) →* void};
  } =>#t14;
}
