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

static method test1(dynamic x) → dynamic {
  {
    final synthesized dynamic #0#0 = x;
    if(#0#0 is core::List<core::num> && #0#0{core::List<core::num>}.{core::List::length}{core::int} =={core::num::==}{(core::Object) → core::bool} #C1 && #C2 =={core::num::==}{(core::Object) → core::bool} #0#0{core::List<core::num>}.{core::List::[]}(0){(core::int) → core::num} && #C3 =={core::num::==}{(core::Object) → core::bool} #0#0{core::List<core::num>}.{core::List::[]}(1){(core::int) → core::num} && #0#0{core::List<core::num>}.{core::List::[]}(2){(core::int) → core::num}.{core::num::<}(#C1){(core::num) → core::bool}) {
      return 0;
    }
  }
  {
    final synthesized dynamic #1#0 = x;
    synthesized core::String? #1#7;
    synthesized core::bool #1#7#isSet = false;
    {
      hoisted core::String? a;
      hoisted core::String b;
      if(#1#0 is core::List<core::String?> && #1#0{core::List<core::String?>}.{core::List::length}{core::int} =={core::num::==}{(core::Object) → core::bool} #C1 && (let final dynamic #t1 = a = #1#0{core::List<core::String?>}.{core::List::[]}(0){(core::int) → core::String?} in true) && (!((#1#7#isSet ?{core::String?} #1#7{core::String?} : let final dynamic #t2 = #1#7#isSet = true in #1#7 = #1#0{core::List<core::String?>}.{core::List::[]}(1){(core::int) → core::String?}) == null) && (((#1#7#isSet ?{core::String?} #1#7{core::String?} : let final dynamic #t3 = #1#7#isSet = true in #1#7 = #1#0{core::List<core::String?>}.{core::List::[]}(1){(core::int) → core::String?}) as{Unchecked} core::String) is core::String && (let final dynamic #t4 = b = (#1#7#isSet ?{core::String?} #1#7{core::String?} : let final dynamic #t5 = #1#7#isSet = true in #1#7 = #1#0{core::List<core::String?>}.{core::List::[]}(1){(core::int) → core::String?}) as{Unchecked} core::String in true))) && #1#0{core::List<core::String?>}.{core::List::[]}(2){(core::int) → core::String?} =={core::String::==}{(core::Object) → core::bool} #C4) {
        return 1;
      }
    }
  }
  {
    final synthesized dynamic #2#0 = x;
    synthesized dynamic #2#6;
    synthesized core::bool #2#6#isSet = false;
    synthesized core::String? #2#11;
    synthesized core::bool #2#11#isSet = false;
    {
      hoisted core::String a;
      hoisted core::String? b;
      if(#2#0 is core::List<dynamic> && #2#0{core::List<dynamic>}.{core::List::length}{core::int} =={core::num::==}{(core::Object) → core::bool} #C3 && ((#2#6#isSet ?{dynamic} #2#6{dynamic} : let final dynamic #t6 = #2#6#isSet = true in #2#6 = #2#0{core::List<dynamic>}.{core::List::[]}(0){(core::int) → dynamic}) is core::List<core::String?> && ((#2#6#isSet ?{dynamic} #2#6{dynamic} : let final dynamic #t7 = #2#6#isSet = true in #2#6 = #2#0{core::List<dynamic>}.{core::List::[]}(0){(core::int) → dynamic}) as{Unchecked} core::List<core::String?>).{core::List::length}{core::int} =={core::num::==}{(core::Object) → core::bool} #C3 && (!((#2#11#isSet ?{core::String?} #2#11{core::String?} : let final dynamic #t8 = #2#11#isSet = true in #2#11 = ((#2#6#isSet ?{dynamic} #2#6{dynamic} : let final dynamic #t9 = #2#6#isSet = true in #2#6 = #2#0{core::List<dynamic>}.{core::List::[]}(0){(core::int) → dynamic}) as{Unchecked} core::List<core::String?>).{core::List::[]}(0){(core::int) → core::String?}) == null) && (let final dynamic #t10 = a = (#2#11#isSet ?{core::String?} #2#11{core::String?} : let final dynamic #t11 = #2#11#isSet = true in #2#11 = ((#2#6#isSet ?{dynamic} #2#6{dynamic} : let final dynamic #t12 = #2#6#isSet = true in #2#6 = #2#0{core::List<dynamic>}.{core::List::[]}(0){(core::int) → dynamic}) as{Unchecked} core::List<core::String?>).{core::List::[]}(0){(core::int) → core::String?}) as{Unchecked} core::String in true)) && (let final dynamic #t13 = b = ((#2#6#isSet ?{dynamic} #2#6{dynamic} : let final dynamic #t14 = #2#6#isSet = true in #2#6 = #2#0{core::List<dynamic>}.{core::List::[]}(0){(core::int) → dynamic}) as{Unchecked} core::List<core::String?>).{core::List::[]}(1){(core::int) → core::String?} in true)) && #C5 =={core::num::==}{(core::Object) → core::bool} #2#0{core::List<dynamic>}.{core::List::[]}(1){(core::int) → dynamic}) {
        return 2;
      }
    }
  }
  {
    final synthesized dynamic #3#0 = x;
    synthesized dynamic #3#6;
    synthesized core::bool #3#6#isSet = false;
    synthesized dynamic #3#11;
    synthesized core::bool #3#11#isSet = false;
    synthesized dynamic #3#16;
    synthesized core::bool #3#16#isSet = false;
    {
      hoisted dynamic a;
      if(#3#0 is core::List<dynamic> && #3#0{core::List<dynamic>}.{core::List::length}{core::int} =={core::num::==}{(core::Object) → core::bool} #C2 && ((#3#6#isSet ?{dynamic} #3#6{dynamic} : let final dynamic #t15 = #3#6#isSet = true in #3#6 = #3#0{core::List<dynamic>}.{core::List::[]}(0){(core::int) → dynamic}) is core::List<dynamic> && ((#3#6#isSet ?{dynamic} #3#6{dynamic} : let final dynamic #t16 = #3#6#isSet = true in #3#6 = #3#0{core::List<dynamic>}.{core::List::[]}(0){(core::int) → dynamic}) as{Unchecked} core::List<dynamic>).{core::List::length}{core::int} =={core::num::==}{(core::Object) → core::bool} #C2 && ((#3#11#isSet ?{dynamic} #3#11{dynamic} : let final dynamic #t17 = #3#11#isSet = true in #3#11 = ((#3#6#isSet ?{dynamic} #3#6{dynamic} : let final dynamic #t18 = #3#6#isSet = true in #3#6 = #3#0{core::List<dynamic>}.{core::List::[]}(0){(core::int) → dynamic}) as{Unchecked} core::List<dynamic>).{core::List::[]}(0){(core::int) → dynamic}) is core::List<dynamic> && ((#3#11#isSet ?{dynamic} #3#11{dynamic} : let final dynamic #t19 = #3#11#isSet = true in #3#11 = ((#3#6#isSet ?{dynamic} #3#6{dynamic} : let final dynamic #t20 = #3#6#isSet = true in #3#6 = #3#0{core::List<dynamic>}.{core::List::[]}(0){(core::int) → dynamic}) as{Unchecked} core::List<dynamic>).{core::List::[]}(0){(core::int) → dynamic}) as{Unchecked} core::List<dynamic>).{core::List::length}{core::int} =={core::num::==}{(core::Object) → core::bool} #C2 && !((#3#16#isSet ?{dynamic} #3#16{dynamic} : let final dynamic #t21 = #3#16#isSet = true in #3#16 = ((#3#11#isSet ?{dynamic} #3#11{dynamic} : let final dynamic #t22 = #3#11#isSet = true in #3#11 = ((#3#6#isSet ?{dynamic} #3#6{dynamic} : let final dynamic #t23 = #3#6#isSet = true in #3#6 = #3#0{core::List<dynamic>}.{core::List::[]}(0){(core::int) → dynamic}) as{Unchecked} core::List<dynamic>).{core::List::[]}(0){(core::int) → dynamic}) as{Unchecked} core::List<dynamic>).{core::List::[]}(0){(core::int) → dynamic}) == null)))) {
        a = #3#16#isSet ?{dynamic} #3#16{dynamic} : let final dynamic #t24 = #3#16#isSet = true in #3#16 = ((#3#11#isSet ?{dynamic} #3#11{dynamic} : let final dynamic #t25 = #3#11#isSet = true in #3#11 = ((#3#6#isSet ?{dynamic} #3#6{dynamic} : let final dynamic #t26 = #3#6#isSet = true in #3#6 = #3#0{core::List<dynamic>}.{core::List::[]}(0){(core::int) → dynamic}) as{Unchecked} core::List<dynamic>).{core::List::[]}(0){(core::int) → dynamic}) as{Unchecked} core::List<dynamic>).{core::List::[]}(0){(core::int) → dynamic};
        {
          return 3;
        }
      }
    }
  }
  {
    final synthesized dynamic #4#0 = x;
    if(!(#4#0 == null) && (#4#0 is core::List<dynamic> && #4#0{core::List<dynamic>}.{core::List::length}{core::int} =={core::num::==}{(core::Object) → core::bool} #C1 && #C2 =={core::num::==}{(core::Object) → core::bool} #4#0{core::List<dynamic>}.{core::List::[]}(0){(core::int) → dynamic} && #C3 =={core::num::==}{(core::Object) → core::bool} #4#0{core::List<dynamic>}.{core::List::[]}(1){(core::int) → dynamic} && #C1 =={core::num::==}{(core::Object) → core::bool} #4#0{core::List<dynamic>}.{core::List::[]}(2){(core::int) → dynamic})) {
      return 4;
    }
  }
}
static method test2(core::List<core::Object?> x) → dynamic {
  {
    final synthesized core::List<core::Object?> #0#0 = x;
    if(#0#0 is core::List<core::num> && #0#0{core::List<core::num>}.{core::List::length}{core::int} =={core::num::==}{(core::Object) → core::bool} #C1 && #C2 =={core::num::==}{(core::Object) → core::bool} #0#0{core::List<core::num>}.{core::List::[]}(0){(core::int) → core::num} && #C3 =={core::num::==}{(core::Object) → core::bool} #0#0{core::List<core::num>}.{core::List::[]}(1){(core::int) → core::num} && #0#0{core::List<core::num>}.{core::List::[]}(2){(core::int) → core::num}.{core::num::<}(#C1){(core::num) → core::bool}) {
      return 0;
    }
  }
  {
    final synthesized core::List<core::Object?> #1#0 = x;
    synthesized core::String? #1#7;
    synthesized core::bool #1#7#isSet = false;
    {
      hoisted core::String? a;
      hoisted core::String b;
      if(#1#0 is core::List<core::String?> && #1#0{core::List<core::String?>}.{core::List::length}{core::int} =={core::num::==}{(core::Object) → core::bool} #C1 && (let final dynamic #t27 = a = #1#0{core::List<core::String?>}.{core::List::[]}(0){(core::int) → core::String?} in true) && (!((#1#7#isSet ?{core::String?} #1#7{core::String?} : let final dynamic #t28 = #1#7#isSet = true in #1#7 = #1#0{core::List<core::String?>}.{core::List::[]}(1){(core::int) → core::String?}) == null) && (((#1#7#isSet ?{core::String?} #1#7{core::String?} : let final dynamic #t29 = #1#7#isSet = true in #1#7 = #1#0{core::List<core::String?>}.{core::List::[]}(1){(core::int) → core::String?}) as{Unchecked} core::String) is core::String && (let final dynamic #t30 = b = (#1#7#isSet ?{core::String?} #1#7{core::String?} : let final dynamic #t31 = #1#7#isSet = true in #1#7 = #1#0{core::List<core::String?>}.{core::List::[]}(1){(core::int) → core::String?}) as{Unchecked} core::String in true))) && #1#0{core::List<core::String?>}.{core::List::[]}(2){(core::int) → core::String?} =={core::String::==}{(core::Object) → core::bool} #C4) {
        return 1;
      }
    }
  }
  {
    final synthesized core::List<core::Object?> #2#0 = x;
    synthesized core::Object? #2#4;
    synthesized core::bool #2#4#isSet = false;
    synthesized core::String? #2#9;
    synthesized core::bool #2#9#isSet = false;
    {
      hoisted core::String a;
      hoisted core::String? b;
      if(#2#0.{core::List::length}{core::int} =={core::num::==}{(core::Object) → core::bool} #C3 && ((#2#4#isSet ?{core::Object?} #2#4{core::Object?} : let final dynamic #t32 = #2#4#isSet = true in #2#4 = #2#0.{core::List::[]}(0){(core::int) → core::Object?}) is core::List<core::String?> && ((#2#4#isSet ?{core::Object?} #2#4{core::Object?} : let final dynamic #t33 = #2#4#isSet = true in #2#4 = #2#0.{core::List::[]}(0){(core::int) → core::Object?}) as{Unchecked} core::List<core::String?>).{core::List::length}{core::int} =={core::num::==}{(core::Object) → core::bool} #C3 && (!((#2#9#isSet ?{core::String?} #2#9{core::String?} : let final dynamic #t34 = #2#9#isSet = true in #2#9 = ((#2#4#isSet ?{core::Object?} #2#4{core::Object?} : let final dynamic #t35 = #2#4#isSet = true in #2#4 = #2#0.{core::List::[]}(0){(core::int) → core::Object?}) as{Unchecked} core::List<core::String?>).{core::List::[]}(0){(core::int) → core::String?}) == null) && (let final dynamic #t36 = a = (#2#9#isSet ?{core::String?} #2#9{core::String?} : let final dynamic #t37 = #2#9#isSet = true in #2#9 = ((#2#4#isSet ?{core::Object?} #2#4{core::Object?} : let final dynamic #t38 = #2#4#isSet = true in #2#4 = #2#0.{core::List::[]}(0){(core::int) → core::Object?}) as{Unchecked} core::List<core::String?>).{core::List::[]}(0){(core::int) → core::String?}) as{Unchecked} core::String in true)) && (let final dynamic #t39 = b = ((#2#4#isSet ?{core::Object?} #2#4{core::Object?} : let final dynamic #t40 = #2#4#isSet = true in #2#4 = #2#0.{core::List::[]}(0){(core::int) → core::Object?}) as{Unchecked} core::List<core::String?>).{core::List::[]}(1){(core::int) → core::String?} in true)) && #C5 =={core::num::==}{(core::Object) → core::bool} #2#0.{core::List::[]}(1){(core::int) → core::Object?}) {
        return 2;
      }
    }
  }
  {
    final synthesized core::List<core::Object?> #3#0 = x;
    synthesized core::Object? #3#4;
    synthesized core::bool #3#4#isSet = false;
    synthesized core::Object? #3#9;
    synthesized core::bool #3#9#isSet = false;
    synthesized core::Object? #3#14;
    synthesized core::bool #3#14#isSet = false;
    {
      hoisted core::Object a;
      if(#3#0.{core::List::length}{core::int} =={core::num::==}{(core::Object) → core::bool} #C2 && ((#3#4#isSet ?{core::Object?} #3#4{core::Object?} : let final dynamic #t41 = #3#4#isSet = true in #3#4 = #3#0.{core::List::[]}(0){(core::int) → core::Object?}) is core::List<core::Object?> && ((#3#4#isSet ?{core::Object?} #3#4{core::Object?} : let final dynamic #t42 = #3#4#isSet = true in #3#4 = #3#0.{core::List::[]}(0){(core::int) → core::Object?}) as{Unchecked} core::List<core::Object?>).{core::List::length}{core::int} =={core::num::==}{(core::Object) → core::bool} #C2 && ((#3#9#isSet ?{core::Object?} #3#9{core::Object?} : let final dynamic #t43 = #3#9#isSet = true in #3#9 = ((#3#4#isSet ?{core::Object?} #3#4{core::Object?} : let final dynamic #t44 = #3#4#isSet = true in #3#4 = #3#0.{core::List::[]}(0){(core::int) → core::Object?}) as{Unchecked} core::List<core::Object?>).{core::List::[]}(0){(core::int) → core::Object?}) is core::List<core::Object?> && ((#3#9#isSet ?{core::Object?} #3#9{core::Object?} : let final dynamic #t45 = #3#9#isSet = true in #3#9 = ((#3#4#isSet ?{core::Object?} #3#4{core::Object?} : let final dynamic #t46 = #3#4#isSet = true in #3#4 = #3#0.{core::List::[]}(0){(core::int) → core::Object?}) as{Unchecked} core::List<core::Object?>).{core::List::[]}(0){(core::int) → core::Object?}) as{Unchecked} core::List<core::Object?>).{core::List::length}{core::int} =={core::num::==}{(core::Object) → core::bool} #C2 && !((#3#14#isSet ?{core::Object?} #3#14{core::Object?} : let final dynamic #t47 = #3#14#isSet = true in #3#14 = ((#3#9#isSet ?{core::Object?} #3#9{core::Object?} : let final dynamic #t48 = #3#9#isSet = true in #3#9 = ((#3#4#isSet ?{core::Object?} #3#4{core::Object?} : let final dynamic #t49 = #3#4#isSet = true in #3#4 = #3#0.{core::List::[]}(0){(core::int) → core::Object?}) as{Unchecked} core::List<core::Object?>).{core::List::[]}(0){(core::int) → core::Object?}) as{Unchecked} core::List<core::Object?>).{core::List::[]}(0){(core::int) → core::Object?}) == null)))) {
        a = (#3#14#isSet ?{core::Object?} #3#14{core::Object?} : let final dynamic #t50 = #3#14#isSet = true in #3#14 = ((#3#9#isSet ?{core::Object?} #3#9{core::Object?} : let final dynamic #t51 = #3#9#isSet = true in #3#9 = ((#3#4#isSet ?{core::Object?} #3#4{core::Object?} : let final dynamic #t52 = #3#4#isSet = true in #3#4 = #3#0.{core::List::[]}(0){(core::int) → core::Object?}) as{Unchecked} core::List<core::Object?>).{core::List::[]}(0){(core::int) → core::Object?}) as{Unchecked} core::List<core::Object?>).{core::List::[]}(0){(core::int) → core::Object?}) as{Unchecked} core::Object;
        {
          return 3;
        }
      }
    }
  }
  {
    final synthesized core::List<core::Object?> #4#0 = x;
    if(!(#4#0 == null) && (#4#0.{core::List::length}{core::int} =={core::num::==}{(core::Object) → core::bool} #C1 && #C2 =={core::num::==}{(core::Object) → core::bool} #4#0.{core::List::[]}(0){(core::int) → core::Object?} && #C3 =={core::num::==}{(core::Object) → core::bool} #4#0.{core::List::[]}(1){(core::int) → core::Object?} && #C1 =={core::num::==}{(core::Object) → core::bool} #4#0.{core::List::[]}(2){(core::int) → core::Object?})) {
      return 4;
    }
  }
}
static method main() → dynamic {}

constants  {
  #C1 = 3
  #C2 = 1
  #C3 = 2
  #C4 = "bar"
  #C5 = 0
}
