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

abstract class Base<T extends core::Object, U extends core::Object> extends core::Object {
  default constructor •() → void
    : super core::Object::•()
    ;
  operator [](core::String s) → self::Base::T
    return this.{self::Base::getValue}(s);
  operator []=(core::String s, self::Base::U v) → void
    return this.{self::Base::setValue}(s, v);
  abstract method getValue(core::String s) → self::Base::T;
  abstract method setValue(core::String s, self::Base::U v) → void;
}
abstract class Test1 extends self::Base<core::int, core::int> {
  default constructor •() → void
    : super self::Base::•()
    ;
  method test() → void {
    core::int v1 = let final core::String #t1 = "x" in let final core::int #t2 = self::getInt() in let final void #t3 = super.{self::Base::[]=}(#t1, #t2) in #t2;
    core::num v2 = let final core::String #t4 = "x" in let final core::num #t5 = self::getNum() in let final void #t6 = super.{self::Base::[]=}(#t4, #t5) in #t5;
    core::int v4 = let final core::String #t7 = "x" in let final core::int #t8 = super.{self::Base::[]}(#t7) in #t8.{core::num::==}(null) ?{core::int} let final core::int #t9 = self::getInt() in let final void #t10 = super.{self::Base::[]=}(#t7, #t9) in #t9 : #t8;
    core::num v5 = let final core::String #t11 = "x" in let final core::int #t12 = super.{self::Base::[]}(#t11) in #t12.{core::num::==}(null) ?{core::num} let final core::num #t13 = self::getNum() in let final void #t14 = super.{self::Base::[]=}(#t11, #t13) in #t13 : #t12;
    core::int v7 = let final core::String #t15 = "x" in let final core::int #t16 = super.{self::Base::[]}(#t15).{core::num::+}(self::getInt()) in let final void #t17 = super.{self::Base::[]=}(#t15, #t16) in #t16;
    core::num v8 = let final core::String #t18 = "x" in let final core::num #t19 = super.{self::Base::[]}(#t18).{core::num::+}(self::getNum()) in let final void #t20 = super.{self::Base::[]=}(#t18, #t19) in #t19;
    core::int v10 = let final core::String #t21 = "x" in let final core::int #t22 = super.{self::Base::[]}(#t21).{core::num::+}(1) in let final void #t23 = super.{self::Base::[]=}(#t21, #t22) in #t22;
    core::int v11 = let final core::String #t24 = "x" in let final core::int #t25 = super.{self::Base::[]}(#t24) in let final void #t26 = super.{self::Base::[]=}(#t24, #t25.{core::num::+}(1)) in #t25;
  }
}
abstract class Test2 extends self::Base<core::int, core::num> {
  default constructor •() → void
    : super self::Base::•()
    ;
  method test() → void {
    core::int v1 = let final core::String #t27 = "x" in let final core::int #t28 = self::getInt() in let final void #t29 = super.{self::Base::[]=}(#t27, #t28) in #t28;
    core::num v2 = let final core::String #t30 = "x" in let final core::num #t31 = self::getNum() in let final void #t32 = super.{self::Base::[]=}(#t30, #t31) in #t31;
    core::double v3 = let final core::String #t33 = "x" in let final core::double #t34 = self::getDouble() in let final void #t35 = super.{self::Base::[]=}(#t33, #t34) in #t34;
    core::num v4 = let final core::String #t36 = "x" in let final core::int #t37 = super.{self::Base::[]}(#t36) in #t37.{core::num::==}(null) ?{core::num} let final core::int #t38 = self::getInt() in let final void #t39 = super.{self::Base::[]=}(#t36, #t38) in #t38 : #t37;
    core::num v5 = let final core::String #t40 = "x" in let final core::int #t41 = super.{self::Base::[]}(#t40) in #t41.{core::num::==}(null) ?{core::num} let final core::num #t42 = self::getNum() in let final void #t43 = super.{self::Base::[]=}(#t40, #t42) in #t42 : #t41;
    core::num v6 = let final core::String #t44 = "x" in let final core::int #t45 = super.{self::Base::[]}(#t44) in #t45.{core::num::==}(null) ?{core::num} let final core::double #t46 = self::getDouble() in let final void #t47 = super.{self::Base::[]=}(#t44, #t46) in #t46 : #t45;
    core::num v7 = let final core::String #t48 = "x" in let final core::num #t49 = super.{self::Base::[]}(#t48).{core::num::+}(self::getInt()) in let final void #t50 = super.{self::Base::[]=}(#t48, #t49) in #t49;
    core::num v8 = let final core::String #t51 = "x" in let final core::num #t52 = super.{self::Base::[]}(#t51).{core::num::+}(self::getNum()) in let final void #t53 = super.{self::Base::[]=}(#t51, #t52) in #t52;
    core::num v9 = let final core::String #t54 = "x" in let final core::num #t55 = super.{self::Base::[]}(#t54).{core::num::+}(self::getDouble()) in let final void #t56 = super.{self::Base::[]=}(#t54, #t55) in #t55;
    core::num v10 = let final core::String #t57 = "x" in let final core::num #t58 = super.{self::Base::[]}(#t57).{core::num::+}(1) in let final void #t59 = super.{self::Base::[]=}(#t57, #t58) in #t58;
    core::num v11 = let final core::String #t60 = "x" in let final core::int #t61 = super.{self::Base::[]}(#t60) in let final void #t62 = super.{self::Base::[]=}(#t60, #t61.{core::num::+}(1)) in #t61;
  }
}
abstract class Test3 extends self::Base<core::int, core::double> {
  default constructor •() → void
    : super self::Base::•()
    ;
  method test() → void {
    core::num v2 = let final core::String #t63 = "x" in let final core::num #t64 = self::getNum() in let final void #t65 = super.{self::Base::[]=}(#t63, #t64) in #t64;
    core::double v3 = let final core::String #t66 = "x" in let final core::double #t67 = self::getDouble() in let final void #t68 = super.{self::Base::[]=}(#t66, #t67) in #t67;
    core::num v5 = let final core::String #t69 = "x" in let final core::int #t70 = super.{self::Base::[]}(#t69) in #t70.{core::num::==}(null) ?{core::num} let final core::num #t71 = self::getNum() in let final void #t72 = super.{self::Base::[]=}(#t69, #t71) in #t71 : #t70;
    core::double v6 = let final core::String #t73 = "x" in let final core::int #t74 = super.{self::Base::[]}(#t73) in #t74.{core::num::==}(null) ?{core::double} let final core::double #t75 = self::getDouble() in let final void #t76 = super.{self::Base::[]=}(#t73, #t75) in #t75 : #t74;
    core::double v7 = let final core::String #t77 = "x" in let final core::double #t78 = super.{self::Base::[]}(#t77).{core::double::+}(self::getInt()) in let final void #t79 = super.{self::Base::[]=}(#t77, #t78) in #t78;
    core::double v8 = let final core::String #t80 = "x" in let final core::double #t81 = super.{self::Base::[]}(#t80).{core::double::+}(self::getNum()) in let final void #t82 = super.{self::Base::[]=}(#t80, #t81) in #t81;
    core::double v9 = let final core::String #t83 = "x" in let final core::double #t84 = super.{self::Base::[]}(#t83).{core::double::+}(self::getDouble()) in let final void #t85 = super.{self::Base::[]=}(#t83, #t84) in #t84;
    core::double v10 = let final core::String #t86 = "x" in let final core::double #t87 = super.{self::Base::[]}(#t86).{core::double::+}(1) in let final void #t88 = super.{self::Base::[]=}(#t86, #t87) in #t87;
    core::double v11 = let final core::String #t89 = "x" in let final core::int #t90 = super.{self::Base::[]}(#t89) in let final void #t91 = super.{self::Base::[]=}(#t89, #t90.{core::double::+}(1)) in #t90;
  }
}
abstract class Test4 extends self::Base<core::num, core::int> {
  default constructor •() → void
    : super self::Base::•()
    ;
  method test() → void {
    core::int v1 = let final core::String #t92 = "x" in let final core::int #t93 = self::getInt() in let final void #t94 = super.{self::Base::[]=}(#t92, #t93) in #t93;
    core::num v2 = let final core::String #t95 = "x" in let final core::num #t96 = self::getNum() in let final void #t97 = super.{self::Base::[]=}(#t95, #t96) in #t96;
    core::int v4 = let final core::String #t98 = "x" in let final core::num #t99 = super.{self::Base::[]}(#t98) in #t99.{core::num::==}(null) ?{core::int} let final core::int #t100 = self::getInt() in let final void #t101 = super.{self::Base::[]=}(#t98, #t100) in #t100 : #t99;
    core::num v5 = let final core::String #t102 = "x" in let final core::num #t103 = super.{self::Base::[]}(#t102) in #t103.{core::num::==}(null) ?{core::num} let final core::num #t104 = self::getNum() in let final void #t105 = super.{self::Base::[]=}(#t102, #t104) in #t104 : #t103;
    core::int v7 = let final core::String #t106 = "x" in let final core::int #t107 = super.{self::Base::[]}(#t106).{core::num::+}(self::getInt()) in let final void #t108 = super.{self::Base::[]=}(#t106, #t107) in #t107;
    core::num v8 = let final core::String #t109 = "x" in let final core::num #t110 = super.{self::Base::[]}(#t109).{core::num::+}(self::getNum()) in let final void #t111 = super.{self::Base::[]=}(#t109, #t110) in #t110;
    core::int v10 = let final core::String #t112 = "x" in let final core::int #t113 = super.{self::Base::[]}(#t112).{core::num::+}(1) in let final void #t114 = super.{self::Base::[]=}(#t112, #t113) in #t113;
    core::int v11 = let final core::String #t115 = "x" in let final core::num #t116 = super.{self::Base::[]}(#t115) in let final void #t117 = super.{self::Base::[]=}(#t115, #t116.{core::num::+}(1)) in #t116;
  }
}
abstract class Test5 extends self::Base<core::num, core::num> {
  default constructor •() → void
    : super self::Base::•()
    ;
  method test() → void {
    core::int v1 = let final core::String #t118 = "x" in let final core::int #t119 = self::getInt() in let final void #t120 = super.{self::Base::[]=}(#t118, #t119) in #t119;
    core::num v2 = let final core::String #t121 = "x" in let final core::num #t122 = self::getNum() in let final void #t123 = super.{self::Base::[]=}(#t121, #t122) in #t122;
    core::double v3 = let final core::String #t124 = "x" in let final core::double #t125 = self::getDouble() in let final void #t126 = super.{self::Base::[]=}(#t124, #t125) in #t125;
    core::num v4 = let final core::String #t127 = "x" in let final core::num #t128 = super.{self::Base::[]}(#t127) in #t128.{core::num::==}(null) ?{core::num} let final core::int #t129 = self::getInt() in let final void #t130 = super.{self::Base::[]=}(#t127, #t129) in #t129 : #t128;
    core::num v5 = let final core::String #t131 = "x" in let final core::num #t132 = super.{self::Base::[]}(#t131) in #t132.{core::num::==}(null) ?{core::num} let final core::num #t133 = self::getNum() in let final void #t134 = super.{self::Base::[]=}(#t131, #t133) in #t133 : #t132;
    core::num v6 = let final core::String #t135 = "x" in let final core::num #t136 = super.{self::Base::[]}(#t135) in #t136.{core::num::==}(null) ?{core::num} let final core::double #t137 = self::getDouble() in let final void #t138 = super.{self::Base::[]=}(#t135, #t137) in #t137 : #t136;
    core::num v7 = let final core::String #t139 = "x" in let final core::num #t140 = super.{self::Base::[]}(#t139).{core::num::+}(self::getInt()) in let final void #t141 = super.{self::Base::[]=}(#t139, #t140) in #t140;
    core::num v8 = let final core::String #t142 = "x" in let final core::num #t143 = super.{self::Base::[]}(#t142).{core::num::+}(self::getNum()) in let final void #t144 = super.{self::Base::[]=}(#t142, #t143) in #t143;
    core::num v9 = let final core::String #t145 = "x" in let final core::num #t146 = super.{self::Base::[]}(#t145).{core::num::+}(self::getDouble()) in let final void #t147 = super.{self::Base::[]=}(#t145, #t146) in #t146;
    core::num v10 = let final core::String #t148 = "x" in let final core::num #t149 = super.{self::Base::[]}(#t148).{core::num::+}(1) in let final void #t150 = super.{self::Base::[]=}(#t148, #t149) in #t149;
    core::num v11 = let final core::String #t151 = "x" in let final core::num #t152 = super.{self::Base::[]}(#t151) in let final void #t153 = super.{self::Base::[]=}(#t151, #t152.{core::num::+}(1)) in #t152;
  }
}
abstract class Test6 extends self::Base<core::num, core::double> {
  default constructor •() → void
    : super self::Base::•()
    ;
  method test() → void {
    core::num v2 = let final core::String #t154 = "x" in let final core::num #t155 = self::getNum() in let final void #t156 = super.{self::Base::[]=}(#t154, #t155) in #t155;
    core::double v3 = let final core::String #t157 = "x" in let final core::double #t158 = self::getDouble() in let final void #t159 = super.{self::Base::[]=}(#t157, #t158) in #t158;
    core::num v5 = let final core::String #t160 = "x" in let final core::num #t161 = super.{self::Base::[]}(#t160) in #t161.{core::num::==}(null) ?{core::num} let final core::num #t162 = self::getNum() in let final void #t163 = super.{self::Base::[]=}(#t160, #t162) in #t162 : #t161;
    core::double v6 = let final core::String #t164 = "x" in let final core::num #t165 = super.{self::Base::[]}(#t164) in #t165.{core::num::==}(null) ?{core::double} let final core::double #t166 = self::getDouble() in let final void #t167 = super.{self::Base::[]=}(#t164, #t166) in #t166 : #t165;
    core::double v7 = let final core::String #t168 = "x" in let final core::double #t169 = super.{self::Base::[]}(#t168).{core::double::+}(self::getInt()) in let final void #t170 = super.{self::Base::[]=}(#t168, #t169) in #t169;
    core::double v8 = let final core::String #t171 = "x" in let final core::double #t172 = super.{self::Base::[]}(#t171).{core::double::+}(self::getNum()) in let final void #t173 = super.{self::Base::[]=}(#t171, #t172) in #t172;
    core::double v9 = let final core::String #t174 = "x" in let final core::double #t175 = super.{self::Base::[]}(#t174).{core::double::+}(self::getDouble()) in let final void #t176 = super.{self::Base::[]=}(#t174, #t175) in #t175;
    core::double v10 = let final core::String #t177 = "x" in let final core::double #t178 = super.{self::Base::[]}(#t177).{core::double::+}(1) in let final void #t179 = super.{self::Base::[]=}(#t177, #t178) in #t178;
    core::double v11 = let final core::String #t180 = "x" in let final core::num #t181 = super.{self::Base::[]}(#t180) in let final void #t182 = super.{self::Base::[]=}(#t180, #t181.{core::double::+}(1)) in #t181;
  }
}
abstract class Test7 extends self::Base<core::double, core::int> {
  default constructor •() → void
    : super self::Base::•()
    ;
  method test() → void {
    core::int v1 = let final core::String #t183 = "x" in let final core::int #t184 = self::getInt() in let final void #t185 = super.{self::Base::[]=}(#t183, #t184) in #t184;
    core::num v2 = let final core::String #t186 = "x" in let final core::num #t187 = self::getNum() in let final void #t188 = super.{self::Base::[]=}(#t186, #t187) in #t187;
    core::int v4 = let final core::String #t189 = "x" in let final core::double #t190 = super.{self::Base::[]}(#t189) in #t190.{core::num::==}(null) ?{core::int} let final core::int #t191 = self::getInt() in let final void #t192 = super.{self::Base::[]=}(#t189, #t191) in #t191 : #t190;
    core::num v5 = let final core::String #t193 = "x" in let final core::double #t194 = super.{self::Base::[]}(#t193) in #t194.{core::num::==}(null) ?{core::num} let final core::num #t195 = self::getNum() in let final void #t196 = super.{self::Base::[]=}(#t193, #t195) in #t195 : #t194;
    core::int v7 = let final core::String #t197 = "x" in let final core::int #t198 = super.{self::Base::[]}(#t197).{core::num::+}(self::getInt()) in let final void #t199 = super.{self::Base::[]=}(#t197, #t198) in #t198;
    core::num v8 = let final core::String #t200 = "x" in let final core::num #t201 = super.{self::Base::[]}(#t200).{core::num::+}(self::getNum()) in let final void #t202 = super.{self::Base::[]=}(#t200, #t201) in #t201;
    core::int v10 = let final core::String #t203 = "x" in let final core::int #t204 = super.{self::Base::[]}(#t203).{core::num::+}(1) in let final void #t205 = super.{self::Base::[]=}(#t203, #t204) in #t204;
    core::int v11 = let final core::String #t206 = "x" in let final core::double #t207 = super.{self::Base::[]}(#t206) in let final void #t208 = super.{self::Base::[]=}(#t206, #t207.{core::num::+}(1)) in #t207;
  }
}
abstract class Test8 extends self::Base<core::double, core::num> {
  default constructor •() → void
    : super self::Base::•()
    ;
  method test() → void {
    core::int v1 = let final core::String #t209 = "x" in let final core::int #t210 = self::getInt() in let final void #t211 = super.{self::Base::[]=}(#t209, #t210) in #t210;
    core::num v2 = let final core::String #t212 = "x" in let final core::num #t213 = self::getNum() in let final void #t214 = super.{self::Base::[]=}(#t212, #t213) in #t213;
    core::double v3 = let final core::String #t215 = "x" in let final core::double #t216 = self::getDouble() in let final void #t217 = super.{self::Base::[]=}(#t215, #t216) in #t216;
    core::num v4 = let final core::String #t218 = "x" in let final core::double #t219 = super.{self::Base::[]}(#t218) in #t219.{core::num::==}(null) ?{core::num} let final core::int #t220 = self::getInt() in let final void #t221 = super.{self::Base::[]=}(#t218, #t220) in #t220 : #t219;
    core::num v5 = let final core::String #t222 = "x" in let final core::double #t223 = super.{self::Base::[]}(#t222) in #t223.{core::num::==}(null) ?{core::num} let final core::num #t224 = self::getNum() in let final void #t225 = super.{self::Base::[]=}(#t222, #t224) in #t224 : #t223;
    core::num v6 = let final core::String #t226 = "x" in let final core::double #t227 = super.{self::Base::[]}(#t226) in #t227.{core::num::==}(null) ?{core::num} let final core::double #t228 = self::getDouble() in let final void #t229 = super.{self::Base::[]=}(#t226, #t228) in #t228 : #t227;
    core::num v7 = let final core::String #t230 = "x" in let final core::num #t231 = super.{self::Base::[]}(#t230).{core::num::+}(self::getInt()) in let final void #t232 = super.{self::Base::[]=}(#t230, #t231) in #t231;
    core::num v8 = let final core::String #t233 = "x" in let final core::num #t234 = super.{self::Base::[]}(#t233).{core::num::+}(self::getNum()) in let final void #t235 = super.{self::Base::[]=}(#t233, #t234) in #t234;
    core::num v9 = let final core::String #t236 = "x" in let final core::num #t237 = super.{self::Base::[]}(#t236).{core::num::+}(self::getDouble()) in let final void #t238 = super.{self::Base::[]=}(#t236, #t237) in #t237;
    core::num v10 = let final core::String #t239 = "x" in let final core::num #t240 = super.{self::Base::[]}(#t239).{core::num::+}(1) in let final void #t241 = super.{self::Base::[]=}(#t239, #t240) in #t240;
    core::num v11 = let final core::String #t242 = "x" in let final core::double #t243 = super.{self::Base::[]}(#t242) in let final void #t244 = super.{self::Base::[]=}(#t242, #t243.{core::num::+}(1)) in #t243;
  }
}
abstract class Test9 extends self::Base<core::double, core::double> {
  default constructor •() → void
    : super self::Base::•()
    ;
  method test() → void {
    core::num v2 = let final core::String #t245 = "x" in let final core::num #t246 = self::getNum() in let final void #t247 = super.{self::Base::[]=}(#t245, #t246) in #t246;
    core::double v3 = let final core::String #t248 = "x" in let final core::double #t249 = self::getDouble() in let final void #t250 = super.{self::Base::[]=}(#t248, #t249) in #t249;
    core::num v5 = let final core::String #t251 = "x" in let final core::double #t252 = super.{self::Base::[]}(#t251) in #t252.{core::num::==}(null) ?{core::num} let final core::num #t253 = self::getNum() in let final void #t254 = super.{self::Base::[]=}(#t251, #t253) in #t253 : #t252;
    core::double v6 = let final core::String #t255 = "x" in let final core::double #t256 = super.{self::Base::[]}(#t255) in #t256.{core::num::==}(null) ?{core::double} let final core::double #t257 = self::getDouble() in let final void #t258 = super.{self::Base::[]=}(#t255, #t257) in #t257 : #t256;
    core::double v7 = let final core::String #t259 = "x" in let final core::double #t260 = super.{self::Base::[]}(#t259).{core::double::+}(self::getInt()) in let final void #t261 = super.{self::Base::[]=}(#t259, #t260) in #t260;
    core::double v8 = let final core::String #t262 = "x" in let final core::double #t263 = super.{self::Base::[]}(#t262).{core::double::+}(self::getNum()) in let final void #t264 = super.{self::Base::[]=}(#t262, #t263) in #t263;
    core::double v9 = let final core::String #t265 = "x" in let final core::double #t266 = super.{self::Base::[]}(#t265).{core::double::+}(self::getDouble()) in let final void #t267 = super.{self::Base::[]=}(#t265, #t266) in #t266;
    core::double v10 = let final core::String #t268 = "x" in let final core::double #t269 = super.{self::Base::[]}(#t268).{core::double::+}(1) in let final void #t270 = super.{self::Base::[]=}(#t268, #t269) in #t269;
    core::double v11 = let final core::String #t271 = "x" in let final core::double #t272 = super.{self::Base::[]}(#t271) in let final void #t273 = super.{self::Base::[]=}(#t271, #t272.{core::double::+}(1)) in #t272;
  }
}
static method getInt() → core::int
  return 0;
static method getNum() → core::num
  return 0;
static method getDouble() → core::double
  return 0.0;
static method main() → dynamic {}
