import kotlin.collections.HashMap

class Day05 {

    fun part1(input: String): String {
        return getTopCrates(input, CrateMoverModel.CrateMover9000)
    }

    fun part2(input: String): String {
        return getTopCrates(input, CrateMoverModel.CrateMover9001)
    }

    private fun getTopCrates(input: String, modelType: CrateMoverModel): String {
        val (cranes, instructions) = input.split("\n\n")
        val cranesNumber = cranes.parseCranesNumber()
        val boxes = cranes.lines().dropLast(1).flatMap { line -> line.mapToBoxes(cranesNumber) }

        val craneOperator = CraneOperator(cranesNumber, modelType, boxes)

        val craneInstructions = instructions.parseToCommands()
        craneOperator.executeCommands(craneInstructions)
        return craneOperator.getTopCrates()
    }

    private fun String.parseCranesNumber() = lines()
        .last()
        .split(" ")
        .filter { it.isNotEmpty() }
        .map { it.toInt() }
        .count()

    private fun String.parseToCommands() = lines().map {
        val (p1, p2) = it.split(" from ")
        val moveQuantity = p1.replace("move ", "").toInt()
        val (from, to) = p2.split(" to ")
        CraneCommand(moveQuantity, from.toInt(), to.toInt())
    }

    data class Box(val index: Int, val content: String)
    data class CraneCommand(val quantity: Int, val from: Int, val to: Int)
    enum class CrateMoverModel { CrateMover9000, CrateMover9001 }

    private fun String.mapToBoxes(size: Int): List<Box> {
        return (1..size)
            .map { craneNumber -> Box(craneNumber, this.parseBoxFromCraneNumber(craneNumber)) }
            .filter { it.content.isNotBlank() }
    }

    private fun String.parseBoxFromCraneNumber(n: Int): String {
        val craneRow = n - 1
        return substring(4 * craneRow + 1, 4 * craneRow + 2)
    }

    private class CraneOperator(numberOfCranes: Int, private val modelType: CrateMoverModel, boxes: List<Box>) {
        private val boxStacks: HashMap<Int, ArrayDeque<String>> = HashMap()

        init {
            (1..numberOfCranes).forEach { boxStacks[it] = ArrayDeque() }
            boxes.forEach { putBoxInCrane(it) }
        }

        private fun putBoxInCrane(box: Box) {
            boxStacks[box.index]?.addFirst(box.content)
        }

        fun executeCommands(commands: List<CraneCommand>) {
            commands.forEach { command ->
                val toMove = (1..command.quantity).map { boxStacks[command.from]?.removeLast()!! }
                when (modelType) {
                    CrateMoverModel.CrateMover9000 -> {
                        boxStacks[command.to]?.addAll(toMove)
                    }
                    CrateMoverModel.CrateMover9001 -> {
                        boxStacks[command.to]?.addAll(toMove.reversed())
                    }
                }
            }

        }

        fun getTopCrates(): String {
            return boxStacks.values.joinToString(separator = "") { it.last() }
        }
    }

}

Compiled from "Day05.kt"
public final class Day05$CraneOperator$WhenMappings {
  public static final int[] $EnumSwitchMapping$0;

  static {};
    Code:
       0: invokestatic  #14                 // Method Day05$CrateMoverModel.values:()[LDay05$CrateMoverModel;
       3: arraylength
       4: newarray       int
       6: astore_0
       7: nop
       8: aload_0
       9: getstatic     #18                 // Field Day05$CrateMoverModel.CrateMover9000:LDay05$CrateMoverModel;
      12: invokevirtual #22                 // Method Day05$CrateMoverModel.ordinal:()I
      15: iconst_1
      16: iastore
      17: goto          21
      20: astore_1
      21: nop
      22: aload_0
      23: getstatic     #25                 // Field Day05$CrateMoverModel.CrateMover9001:LDay05$CrateMoverModel;
      26: invokevirtual #22                 // Method Day05$CrateMoverModel.ordinal:()I
      29: iconst_2
      30: iastore
      31: goto          35
      34: astore_1
      35: aload_0
      36: putstatic     #29                 // Field $EnumSwitchMapping$0:[I
      39: return
    Exception table:
       from    to  target type
           7    17    20   Class java/lang/NoSuchFieldError
          21    31    34   Class java/lang/NoSuchFieldError
}

Compiled from "Day05.kt"
public final class Day05$Box {
  private final int index;

  private final java.lang.String content;

  public Day05$Box(int, java.lang.String);
    Code:
       0: aload_2
       1: ldc           #9                  // String content
       3: invokestatic  #15                 // Method kotlin/jvm/internal/Intrinsics.checkNotNullParameter:(Ljava/lang/Object;Ljava/lang/String;)V
       6: aload_0
       7: invokespecial #18                 // Method java/lang/Object."<init>":()V
      10: aload_0
      11: iload_1
      12: putfield      #22                 // Field index:I
      15: aload_0
      16: aload_2
      17: putfield      #25                 // Field content:Ljava/lang/String;
      20: return

  public final int getIndex();
    Code:
       0: aload_0
       1: getfield      #22                 // Field index:I
       4: ireturn

  public final java.lang.String getContent();
    Code:
       0: aload_0
       1: getfield      #25                 // Field content:Ljava/lang/String;
       4: areturn

  public final int component1();
    Code:
       0: aload_0
       1: getfield      #22                 // Field index:I
       4: ireturn

  public final java.lang.String component2();
    Code:
       0: aload_0
       1: getfield      #25                 // Field content:Ljava/lang/String;
       4: areturn

  public final Day05$Box copy(int, java.lang.String);
    Code:
       0: aload_2
       1: ldc           #9                  // String content
       3: invokestatic  #15                 // Method kotlin/jvm/internal/Intrinsics.checkNotNullParameter:(Ljava/lang/Object;Ljava/lang/String;)V
       6: new           #2                  // class Day05$Box
       9: dup
      10: iload_1
      11: aload_2
      12: invokespecial #37                 // Method "<init>":(ILjava/lang/String;)V
      15: areturn

  public static Day05$Box copy$default(Day05$Box, int, java.lang.String, int, java.lang.Object);
    Code:
       0: iload_3
       1: iconst_1
       2: iand
       3: ifeq          11
       6: aload_0
       7: getfield      #22                 // Field index:I
      10: istore_1
      11: iload_3
      12: iconst_2
      13: iand
      14: ifeq          22
      17: aload_0
      18: getfield      #25                 // Field content:Ljava/lang/String;
      21: astore_2
      22: aload_0
      23: iload_1
      24: aload_2
      25: invokevirtual #41                 // Method copy:(ILjava/lang/String;)LDay05$Box;
      28: areturn

  public java.lang.String toString();
    Code:
       0: new           #44                 // class java/lang/StringBuilder
       3: dup
       4: invokespecial #45                 // Method java/lang/StringBuilder."<init>":()V
       7: ldc           #47                 // String Box(index=
       9: invokevirtual #51                 // Method java/lang/StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;
      12: aload_0
      13: getfield      #22                 // Field index:I
      16: invokevirtual #54                 // Method java/lang/StringBuilder.append:(I)Ljava/lang/StringBuilder;
      19: ldc           #56                 // String , content=
      21: invokevirtual #51                 // Method java/lang/StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;
      24: aload_0
      25: getfield      #25                 // Field content:Ljava/lang/String;
      28: invokevirtual #51                 // Method java/lang/StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;
      31: bipush        41
      33: invokevirtual #59                 // Method java/lang/StringBuilder.append:(C)Ljava/lang/StringBuilder;
      36: invokevirtual #61                 // Method java/lang/StringBuilder.toString:()Ljava/lang/String;
      39: areturn

  public int hashCode();
    Code:
       0: aload_0
       1: getfield      #22                 // Field index:I
       4: invokestatic  #67                 // Method java/lang/Integer.hashCode:(I)I
       7: istore_1
       8: iload_1
       9: bipush        31
      11: imul
      12: aload_0
      13: getfield      #25                 // Field content:Ljava/lang/String;
      16: invokevirtual #71                 // Method java/lang/String.hashCode:()I
      19: iadd
      20: istore_1
      21: iload_1
      22: ireturn

  public boolean equals(java.lang.Object);
    Code:
       0: aload_0
       1: aload_1
       2: if_acmpne     7
       5: iconst_1
       6: ireturn
       7: aload_1
       8: instanceof    #2                  // class Day05$Box
      11: ifne          16
      14: iconst_0
      15: ireturn
      16: aload_1
      17: checkcast     #2                  // class Day05$Box
      20: astore_2
      21: aload_0
      22: getfield      #22                 // Field index:I
      25: aload_2
      26: getfield      #22                 // Field index:I
      29: if_icmpeq     34
      32: iconst_0
      33: ireturn
      34: aload_0
      35: getfield      #25                 // Field content:Ljava/lang/String;
      38: aload_2
      39: getfield      #25                 // Field content:Ljava/lang/String;
      42: invokestatic  #79                 // Method kotlin/jvm/internal/Intrinsics.areEqual:(Ljava/lang/Object;Ljava/lang/Object;)Z
      45: ifne          50
      48: iconst_0
      49: ireturn
      50: iconst_1
      51: ireturn
}

Compiled from "Day05.kt"
public final class Day05 {
  public Day05();
    Code:
       0: aload_0
       1: invokespecial #8                  // Method java/lang/Object."<init>":()V
       4: return

  public final java.lang.String part1(java.lang.String);
    Code:
       0: aload_1
       1: ldc           #15                 // String input
       3: invokestatic  #21                 // Method kotlin/jvm/internal/Intrinsics.checkNotNullParameter:(Ljava/lang/Object;Ljava/lang/String;)V
       6: aload_0
       7: aload_1
       8: getstatic     #27                 // Field Day05$CrateMoverModel.CrateMover9000:LDay05$CrateMoverModel;
      11: invokespecial #31                 // Method getTopCrates:(Ljava/lang/String;LDay05$CrateMoverModel;)Ljava/lang/String;
      14: areturn

  public final java.lang.String part2(java.lang.String);
    Code:
       0: aload_1
       1: ldc           #15                 // String input
       3: invokestatic  #21                 // Method kotlin/jvm/internal/Intrinsics.checkNotNullParameter:(Ljava/lang/Object;Ljava/lang/String;)V
       6: aload_0
       7: aload_1
       8: getstatic     #36                 // Field Day05$CrateMoverModel.CrateMover9001:LDay05$CrateMoverModel;
      11: invokespecial #31                 // Method getTopCrates:(Ljava/lang/String;LDay05$CrateMoverModel;)Ljava/lang/String;
      14: areturn

  private final java.lang.String getTopCrates(java.lang.String, Day05$CrateMoverModel);
    Code:
       0: aload_1
       1: checkcast     #38                 // class java/lang/CharSequence
       4: iconst_1
       5: anewarray     #40                 // class java/lang/String
       8: astore        4
      10: aload         4
      12: iconst_0
      13: ldc           #42                 // String \n\n
      15: aastore
      16: aload         4
      18: iconst_0
      19: iconst_0
      20: bipush        6
      22: aconst_null
      23: invokestatic  #48                 // Method kotlin/text/StringsKt.split$default:(Ljava/lang/CharSequence;[Ljava/lang/String;ZIILjava/lang/Object;)Ljava/util/List;
      26: astore_3
      27: aload_3
      28: iconst_0
      29: invokeinterface #54,  2           // InterfaceMethod java/util/List.get:(I)Ljava/lang/Object;
      34: checkcast     #40                 // class java/lang/String
      37: astore        4
      39: aload_3
      40: iconst_1
      41: invokeinterface #54,  2           // InterfaceMethod java/util/List.get:(I)Ljava/lang/Object;
      46: checkcast     #40                 // class java/lang/String
      49: astore        5
      51: aload_0
      52: aload         4
      54: invokespecial #58                 // Method parseCranesNumber:(Ljava/lang/String;)I
      57: istore        6
      59: aload         4
      61: checkcast     #38                 // class java/lang/CharSequence
      64: invokestatic  #62                 // Method kotlin/text/StringsKt.lines:(Ljava/lang/CharSequence;)Ljava/util/List;
      67: iconst_1
      68: invokestatic  #68                 // Method kotlin/collections/CollectionsKt.dropLast:(Ljava/util/List;I)Ljava/util/List;
      71: checkcast     #70                 // class java/lang/Iterable
      74: astore        8
      76: iconst_0
      77: istore        9
      79: aload         8
      81: astore        10
      83: new           #72                 // class java/util/ArrayList
      86: dup
      87: invokespecial #73                 // Method java/util/ArrayList."<init>":()V
      90: checkcast     #75                 // class java/util/Collection
      93: astore        11
      95: iconst_0
      96: istore        12
      98: aload         10
     100: invokeinterface #79,  1           // InterfaceMethod java/lang/Iterable.iterator:()Ljava/util/Iterator;
     105: astore        13
     107: aload         13
     109: invokeinterface #85,  1           // InterfaceMethod java/util/Iterator.hasNext:()Z
     114: ifeq          160
     117: aload         13
     119: invokeinterface #89,  1           // InterfaceMethod java/util/Iterator.next:()Ljava/lang/Object;
     124: astore        14
     126: aload         14
     128: checkcast     #40                 // class java/lang/String
     131: astore        15
     133: iconst_0
     134: istore        16
     136: aload_0
     137: aload         15
     139: iload         6
     141: invokespecial #93                 // Method mapToBoxes:(Ljava/lang/String;I)Ljava/util/List;
     144: checkcast     #70                 // class java/lang/Iterable
     147: astore        15
     149: aload         11
     151: aload         15
     153: invokestatic  #97                 // Method kotlin/collections/CollectionsKt.addAll:(Ljava/util/Collection;Ljava/lang/Iterable;)Z
     156: pop
     157: goto          107
     160: aload         11
     162: checkcast     #50                 // class java/util/List
     165: nop
     166: astore        7
     168: new           #99                 // class Day05$CraneOperator
     171: dup
     172: iload         6
     174: aload_2
     175: aload         7
     177: invokespecial #102                // Method Day05$CraneOperator."<init>":(ILDay05$CrateMoverModel;Ljava/util/List;)V
     180: astore        8
     182: aload_0
     183: aload         5
     185: invokespecial #106                // Method parseToCommands:(Ljava/lang/String;)Ljava/util/List;
     188: astore        9
     190: aload         8
     192: aload         9
     194: invokevirtual #110                // Method Day05$CraneOperator.executeCommands:(Ljava/util/List;)V
     197: aload         8
     199: invokevirtual #113                // Method Day05$CraneOperator.getTopCrates:()Ljava/lang/String;
     202: areturn

  private final int parseCranesNumber(java.lang.String);
    Code:
       0: aload_1
       1: checkcast     #38                 // class java/lang/CharSequence
       4: invokestatic  #62                 // Method kotlin/text/StringsKt.lines:(Ljava/lang/CharSequence;)Ljava/util/List;
       7: invokestatic  #139                // Method kotlin/collections/CollectionsKt.last:(Ljava/util/List;)Ljava/lang/Object;
      10: checkcast     #38                 // class java/lang/CharSequence
      13: iconst_1
      14: anewarray     #40                 // class java/lang/String
      17: astore_2
      18: aload_2
      19: iconst_0
      20: ldc           #141                // String
      22: aastore
      23: aload_2
      24: iconst_0
      25: iconst_0
      26: bipush        6
      28: aconst_null
      29: invokestatic  #48                 // Method kotlin/text/StringsKt.split$default:(Ljava/lang/CharSequence;[Ljava/lang/String;ZIILjava/lang/Object;)Ljava/util/List;
      32: checkcast     #70                 // class java/lang/Iterable
      35: astore_2
      36: nop
      37: iconst_0
      38: istore_3
      39: aload_2
      40: astore        4
      42: new           #72                 // class java/util/ArrayList
      45: dup
      46: invokespecial #73                 // Method java/util/ArrayList."<init>":()V
      49: checkcast     #75                 // class java/util/Collection
      52: astore        5
      54: iconst_0
      55: istore        6
      57: aload         4
      59: invokeinterface #79,  1           // InterfaceMethod java/lang/Iterable.iterator:()Ljava/util/Iterator;
      64: astore        7
      66: aload         7
      68: invokeinterface #85,  1           // InterfaceMethod java/util/Iterator.hasNext:()Z
      73: ifeq          130
      76: aload         7
      78: invokeinterface #89,  1           // InterfaceMethod java/util/Iterator.next:()Ljava/lang/Object;
      83: astore        8
      85: aload         8
      87: checkcast     #40                 // class java/lang/String
      90: astore        9
      92: iconst_0
      93: istore        10
      95: aload         9
      97: checkcast     #38                 // class java/lang/CharSequence
     100: invokeinterface #145,  1          // InterfaceMethod java/lang/CharSequence.length:()I
     105: ifle          112
     108: iconst_1
     109: goto          113
     112: iconst_0
     113: nop
     114: ifeq          66
     117: aload         5
     119: aload         8
     121: invokeinterface #149,  2          // InterfaceMethod java/util/Collection.add:(Ljava/lang/Object;)Z
     126: pop
     127: goto          66
     130: aload         5
     132: checkcast     #50                 // class java/util/List
     135: nop
     136: checkcast     #70                 // class java/lang/Iterable
     139: astore_2
     140: nop
     141: iconst_0
     142: istore_3
     143: aload_2
     144: astore        4
     146: new           #72                 // class java/util/ArrayList
     149: dup
     150: aload_2
     151: bipush        10
     153: invokestatic  #153                // Method kotlin/collections/CollectionsKt.collectionSizeOrDefault:(Ljava/lang/Iterable;I)I
     156: invokespecial #156                // Method java/util/ArrayList."<init>":(I)V
     159: checkcast     #75                 // class java/util/Collection
     162: astore        5
     164: iconst_0
     165: istore        6
     167: aload         4
     169: invokeinterface #79,  1           // InterfaceMethod java/lang/Iterable.iterator:()Ljava/util/Iterator;
     174: astore        7
     176: aload         7
     178: invokeinterface #85,  1           // InterfaceMethod java/util/Iterator.hasNext:()Z
     183: ifeq          230
     186: aload         7
     188: invokeinterface #89,  1           // InterfaceMethod java/util/Iterator.next:()Ljava/lang/Object;
     193: astore        8
     195: aload         5
     197: aload         8
     199: checkcast     #40                 // class java/lang/String
     202: astore        9
     204: astore        11
     206: iconst_0
     207: istore        10
     209: aload         9
     211: invokestatic  #161                // Method java/lang/Integer.parseInt:(Ljava/lang/String;)I
     214: nop
     215: invokestatic  #165                // Method java/lang/Integer.valueOf:(I)Ljava/lang/Integer;
     218: aload         11
     220: swap
     221: invokeinterface #149,  2          // InterfaceMethod java/util/Collection.add:(Ljava/lang/Object;)Z
     226: pop
     227: goto          176
     230: aload         5
     232: checkcast     #50                 // class java/util/List
     235: nop
     236: checkcast     #75                 // class java/util/Collection
     239: invokeinterface #168,  1          // InterfaceMethod java/util/Collection.size:()I
     244: ireturn

  private final java.util.List<Day05$CraneCommand> parseToCommands(java.lang.String);
    Code:
       0: aload_1
       1: checkcast     #38                 // class java/lang/CharSequence
       4: invokestatic  #62                 // Method kotlin/text/StringsKt.lines:(Ljava/lang/CharSequence;)Ljava/util/List;
       7: checkcast     #70                 // class java/lang/Iterable
      10: astore_2
      11: iconst_0
      12: istore_3
      13: aload_2
      14: astore        4
      16: new           #72                 // class java/util/ArrayList
      19: dup
      20: aload_2
      21: bipush        10
      23: invokestatic  #153                // Method kotlin/collections/CollectionsKt.collectionSizeOrDefault:(Ljava/lang/Iterable;I)I
      26: invokespecial #156                // Method java/util/ArrayList."<init>":(I)V
      29: checkcast     #75                 // class java/util/Collection
      32: astore        5
      34: iconst_0
      35: istore        6
      37: aload         4
      39: invokeinterface #79,  1           // InterfaceMethod java/lang/Iterable.iterator:()Ljava/util/Iterator;
      44: astore        7
      46: aload         7
      48: invokeinterface #85,  1           // InterfaceMethod java/util/Iterator.hasNext:()Z
      53: ifeq          237
      56: aload         7
      58: invokeinterface #89,  1           // InterfaceMethod java/util/Iterator.next:()Ljava/lang/Object;
      63: astore        8
      65: aload         5
      67: aload         8
      69: checkcast     #40                 // class java/lang/String
      72: astore        9
      74: astore        18
      76: iconst_0
      77: istore        10
      79: aload         9
      81: checkcast     #38                 // class java/lang/CharSequence
      84: iconst_1
      85: anewarray     #40                 // class java/lang/String
      88: astore        11
      90: aload         11
      92: iconst_0
      93: ldc           #184                // String  from
      95: aastore
      96: aload         11
      98: iconst_0
      99: iconst_0
     100: bipush        6
     102: aconst_null
     103: invokestatic  #48                 // Method kotlin/text/StringsKt.split$default:(Ljava/lang/CharSequence;[Ljava/lang/String;ZIILjava/lang/Object;)Ljava/util/List;
     106: astore        12
     108: aload         12
     110: iconst_0
     111: invokeinterface #54,  2           // InterfaceMethod java/util/List.get:(I)Ljava/lang/Object;
     116: checkcast     #40                 // class java/lang/String
     119: astore        11
     121: aload         12
     123: iconst_1
     124: invokeinterface #54,  2           // InterfaceMethod java/util/List.get:(I)Ljava/lang/Object;
     129: checkcast     #40                 // class java/lang/String
     132: astore        13
     134: aload         11
     136: ldc           #186                // String move
     138: ldc           #188                // String
     140: iconst_0
     141: iconst_4
     142: aconst_null
     143: invokestatic  #192                // Method kotlin/text/StringsKt.replace$default:(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;ZILjava/lang/Object;)Ljava/lang/String;
     146: invokestatic  #161                // Method java/lang/Integer.parseInt:(Ljava/lang/String;)I
     149: istore        14
     151: aload         13
     153: checkcast     #38                 // class java/lang/CharSequence
     156: iconst_1
     157: anewarray     #40                 // class java/lang/String
     160: astore        15
     162: aload         15
     164: iconst_0
     165: ldc           #194                // String  to
     167: aastore
     168: aload         15
     170: iconst_0
     171: iconst_0
     172: bipush        6
     174: aconst_null
     175: invokestatic  #48                 // Method kotlin/text/StringsKt.split$default:(Ljava/lang/CharSequence;[Ljava/lang/String;ZIILjava/lang/Object;)Ljava/util/List;
     178: astore        16
     180: aload         16
     182: iconst_0
     183: invokeinterface #54,  2           // InterfaceMethod java/util/List.get:(I)Ljava/lang/Object;
     188: checkcast     #40                 // class java/lang/String
     191: astore        15
     193: aload         16
     195: iconst_1
     196: invokeinterface #54,  2           // InterfaceMethod java/util/List.get:(I)Ljava/lang/Object;
     201: checkcast     #40                 // class java/lang/String
     204: astore        17
     206: new           #196                // class Day05$CraneCommand
     209: dup
     210: iload         14
     212: aload         15
     214: invokestatic  #161                // Method java/lang/Integer.parseInt:(Ljava/lang/String;)I
     217: aload         17
     219: invokestatic  #161                // Method java/lang/Integer.parseInt:(Ljava/lang/String;)I
     222: invokespecial #199                // Method Day05$CraneCommand."<init>":(III)V
     225: aload         18
     227: swap
     228: invokeinterface #149,  2          // InterfaceMethod java/util/Collection.add:(Ljava/lang/Object;)Z
     233: pop
     234: goto          46
     237: aload         5
     239: checkcast     #50                 // class java/util/List
     242: nop
     243: areturn

  private final java.util.List<Day05$Box> mapToBoxes(java.lang.String, int);
    Code:
       0: new           #209                // class kotlin/ranges/IntRange
       3: dup
       4: iconst_1
       5: iload_2
       6: invokespecial #212                // Method kotlin/ranges/IntRange."<init>":(II)V
       9: checkcast     #70                 // class java/lang/Iterable
      12: astore_3
      13: nop
      14: iconst_0
      15: istore        4
      17: aload_3
      18: astore        5
      20: new           #72                 // class java/util/ArrayList
      23: dup
      24: aload_3
      25: bipush        10
      27: invokestatic  #153                // Method kotlin/collections/CollectionsKt.collectionSizeOrDefault:(Ljava/lang/Iterable;I)I
      30: invokespecial #156                // Method java/util/ArrayList."<init>":(I)V
      33: checkcast     #75                 // class java/util/Collection
      36: astore        6
      38: iconst_0
      39: istore        7
      41: aload         5
      43: invokeinterface #79,  1           // InterfaceMethod java/lang/Iterable.iterator:()Ljava/util/Iterator;
      48: astore        8
      50: aload         8
      52: invokeinterface #85,  1           // InterfaceMethod java/util/Iterator.hasNext:()Z
      57: ifeq          109
      60: aload         8
      62: checkcast     #214                // class kotlin/collections/IntIterator
      65: invokevirtual #217                // Method kotlin/collections/IntIterator.nextInt:()I
      68: istore        9
      70: aload         6
      72: iload         9
      74: istore        10
      76: astore        12
      78: iconst_0
      79: istore        11
      81: new           #219                // class Day05$Box
      84: dup
      85: iload         10
      87: aload_0
      88: aload_1
      89: iload         10
      91: invokespecial #223                // Method parseBoxFromCraneNumber:(Ljava/lang/String;I)Ljava/lang/String;
      94: invokespecial #226                // Method Day05$Box."<init>":(ILjava/lang/String;)V
      97: aload         12
      99: swap
     100: invokeinterface #149,  2          // InterfaceMethod java/util/Collection.add:(Ljava/lang/Object;)Z
     105: pop
     106: goto          50
     109: aload         6
     111: checkcast     #50                 // class java/util/List
     114: nop
     115: checkcast     #70                 // class java/lang/Iterable
     118: astore_3
     119: nop
     120: iconst_0
     121: istore        4
     123: aload_3
     124: astore        5
     126: new           #72                 // class java/util/ArrayList
     129: dup
     130: invokespecial #73                 // Method java/util/ArrayList."<init>":()V
     133: checkcast     #75                 // class java/util/Collection
     136: astore        6
     138: iconst_0
     139: istore        7
     141: aload         5
     143: invokeinterface #79,  1           // InterfaceMethod java/lang/Iterable.iterator:()Ljava/util/Iterator;
     148: astore        8
     150: aload         8
     152: invokeinterface #85,  1           // InterfaceMethod java/util/Iterator.hasNext:()Z
     157: ifeq          215
     160: aload         8
     162: invokeinterface #89,  1           // InterfaceMethod java/util/Iterator.next:()Ljava/lang/Object;
     167: astore        9
     169: aload         9
     171: checkcast     #219                // class Day05$Box
     174: astore        10
     176: iconst_0
     177: istore        11
     179: aload         10
     181: invokevirtual #229                // Method Day05$Box.getContent:()Ljava/lang/String;
     184: checkcast     #38                 // class java/lang/CharSequence
     187: invokestatic  #233                // Method kotlin/text/StringsKt.isBlank:(Ljava/lang/CharSequence;)Z
     190: ifne          197
     193: iconst_1
     194: goto          198
     197: iconst_0
     198: nop
     199: ifeq          150
     202: aload         6
     204: aload         9
     206: invokeinterface #149,  2          // InterfaceMethod java/util/Collection.add:(Ljava/lang/Object;)Z
     211: pop
     212: goto          150
     215: aload         6
     217: checkcast     #50                 // class java/util/List
     220: nop
     221: areturn

  private final java.lang.String parseBoxFromCraneNumber(java.lang.String, int);
    Code:
       0: iload_2
       1: iconst_1
       2: isub
       3: istore_3
       4: aload_1
       5: iconst_4
       6: iload_3
       7: imul
       8: iconst_1
       9: iadd
      10: iconst_4
      11: iload_3
      12: imul
      13: iconst_2
      14: iadd
      15: invokevirtual #242                // Method java/lang/String.substring:(II)Ljava/lang/String;
      18: dup
      19: ldc           #244                // String substring(...)
      21: invokestatic  #247                // Method kotlin/jvm/internal/Intrinsics.checkNotNullExpressionValue:(Ljava/lang/Object;Ljava/lang/String;)V
      24: areturn
}

Compiled from "Day05.kt"
final class Day05$CraneOperator {
  private final Day05$CrateMoverModel modelType;

  private final java.util.HashMap<java.lang.Integer, kotlin.collections.ArrayDeque<java.lang.String>> boxStacks;

  public Day05$CraneOperator(int, Day05$CrateMoverModel, java.util.List<Day05$Box>);
    Code:
       0: aload_2
       1: ldc           #10                 // String modelType
       3: invokestatic  #16                 // Method kotlin/jvm/internal/Intrinsics.checkNotNullParameter:(Ljava/lang/Object;Ljava/lang/String;)V
       6: aload_3
       7: ldc           #18                 // String boxes
       9: invokestatic  #16                 // Method kotlin/jvm/internal/Intrinsics.checkNotNullParameter:(Ljava/lang/Object;Ljava/lang/String;)V
      12: aload_0
      13: invokespecial #21                 // Method java/lang/Object."<init>":()V
      16: aload_0
      17: aload_2
      18: putfield      #24                 // Field modelType:LDay05$CrateMoverModel;
      21: aload_0
      22: new           #26                 // class java/util/HashMap
      25: dup
      26: invokespecial #27                 // Method java/util/HashMap."<init>":()V
      29: putfield      #31                 // Field boxStacks:Ljava/util/HashMap;
      32: nop
      33: new           #33                 // class kotlin/ranges/IntRange
      36: dup
      37: iconst_1
      38: iload_1
      39: invokespecial #36                 // Method kotlin/ranges/IntRange."<init>":(II)V
      42: checkcast     #38                 // class java/lang/Iterable
      45: astore        4
      47: iconst_0
      48: istore        5
      50: aload         4
      52: invokeinterface #42,  1           // InterfaceMethod java/lang/Iterable.iterator:()Ljava/util/Iterator;
      57: astore        6
      59: aload         6
      61: invokeinterface #48,  1           // InterfaceMethod java/util/Iterator.hasNext:()Z
      66: ifeq          120
      69: aload         6
      71: checkcast     #50                 // class kotlin/collections/IntIterator
      74: invokevirtual #54                 // Method kotlin/collections/IntIterator.nextInt:()I
      77: istore        7
      79: iload         7
      81: istore        8
      83: iconst_0
      84: istore        9
      86: iload         8
      88: invokestatic  #60                 // Method java/lang/Integer.valueOf:(I)Ljava/lang/Integer;
      91: astore        10
      93: aload_0
      94: getfield      #31                 // Field boxStacks:Ljava/util/HashMap;
      97: checkcast     #62                 // class java/util/Map
     100: aload         10
     102: new           #64                 // class kotlin/collections/ArrayDeque
     105: dup
     106: invokespecial #65                 // Method kotlin/collections/ArrayDeque."<init>":()V
     109: invokeinterface #69,  3           // InterfaceMethod java/util/Map.put:(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
     114: pop
     115: nop
     116: nop
     117: goto          59
     120: nop
     121: aload_3
     122: checkcast     #38                 // class java/lang/Iterable
     125: astore        4
     127: iconst_0
     128: istore        5
     130: aload         4
     132: invokeinterface #42,  1           // InterfaceMethod java/lang/Iterable.iterator:()Ljava/util/Iterator;
     137: astore        6
     139: aload         6
     141: invokeinterface #48,  1           // InterfaceMethod java/util/Iterator.hasNext:()Z
     146: ifeq          178
     149: aload         6
     151: invokeinterface #73,  1           // InterfaceMethod java/util/Iterator.next:()Ljava/lang/Object;
     156: astore        7
     158: aload         7
     160: checkcast     #75                 // class Day05$Box
     163: astore        8
     165: iconst_0
     166: istore        9
     168: aload_0
     169: aload         8
     171: invokespecial #79                 // Method putBoxInCrane:(LDay05$Box;)V
     174: nop
     175: goto          139
     178: nop
     179: nop
     180: return

  private final void putBoxInCrane(Day05$Box);
    Code:
       0: aload_0
       1: getfield      #31                 // Field boxStacks:Ljava/util/HashMap;
       4: aload_1
       5: invokevirtual #100                // Method Day05$Box.getIndex:()I
       8: invokestatic  #60                 // Method java/lang/Integer.valueOf:(I)Ljava/lang/Integer;
      11: invokevirtual #104                // Method java/util/HashMap.get:(Ljava/lang/Object;)Ljava/lang/Object;
      14: checkcast     #64                 // class kotlin/collections/ArrayDeque
      17: dup
      18: ifnull        31
      21: aload_1
      22: invokevirtual #108                // Method Day05$Box.getContent:()Ljava/lang/String;
      25: invokevirtual #112                // Method kotlin/collections/ArrayDeque.addFirst:(Ljava/lang/Object;)V
      28: goto          32
      31: pop
      32: return

  public final void executeCommands(java.util.List<Day05$CraneCommand>);
    Code:
       0: aload_1
       1: ldc           #118                // String commands
       3: invokestatic  #16                 // Method kotlin/jvm/internal/Intrinsics.checkNotNullParameter:(Ljava/lang/Object;Ljava/lang/String;)V
       6: aload_1
       7: checkcast     #38                 // class java/lang/Iterable
      10: astore_2
      11: iconst_0
      12: istore_3
      13: aload_2
      14: invokeinterface #42,  1           // InterfaceMethod java/lang/Iterable.iterator:()Ljava/util/Iterator;
      19: astore        4
      21: aload         4
      23: invokeinterface #48,  1           // InterfaceMethod java/util/Iterator.hasNext:()Z
      28: ifeq          323
      31: aload         4
      33: invokeinterface #73,  1           // InterfaceMethod java/util/Iterator.next:()Ljava/lang/Object;
      38: astore        5
      40: aload         5
      42: checkcast     #120                // class Day05$CraneCommand
      45: astore        6
      47: iconst_0
      48: istore        7
      50: new           #33                 // class kotlin/ranges/IntRange
      53: dup
      54: iconst_1
      55: aload         6
      57: invokevirtual #123                // Method Day05$CraneCommand.getQuantity:()I
      60: invokespecial #36                 // Method kotlin/ranges/IntRange."<init>":(II)V
      63: checkcast     #38                 // class java/lang/Iterable
      66: astore        8
      68: iconst_0
      69: istore        9
      71: aload         8
      73: astore        10
      75: new           #125                // class java/util/ArrayList
      78: dup
      79: aload         8
      81: bipush        10
      83: invokestatic  #131                // Method kotlin/collections/CollectionsKt.collectionSizeOrDefault:(Ljava/lang/Iterable;I)I
      86: invokespecial #134                // Method java/util/ArrayList."<init>":(I)V
      89: checkcast     #136                // class java/util/Collection
      92: astore        11
      94: iconst_0
      95: istore        12
      97: aload         10
      99: invokeinterface #42,  1           // InterfaceMethod java/lang/Iterable.iterator:()Ljava/util/Iterator;
     104: astore        13
     106: aload         13
     108: invokeinterface #48,  1           // InterfaceMethod java/util/Iterator.hasNext:()Z
     113: ifeq          186
     116: aload         13
     118: checkcast     #50                 // class kotlin/collections/IntIterator
     121: invokevirtual #54                 // Method kotlin/collections/IntIterator.nextInt:()I
     124: istore        14
     126: aload         11
     128: iload         14
     130: istore        15
     132: astore        16
     134: iconst_0
     135: istore        17
     137: aload_0
     138: getfield      #31                 // Field boxStacks:Ljava/util/HashMap;
     141: aload         6
     143: invokevirtual #139                // Method Day05$CraneCommand.getFrom:()I
     146: invokestatic  #60                 // Method java/lang/Integer.valueOf:(I)Ljava/lang/Integer;
     149: invokevirtual #104                // Method java/util/HashMap.get:(Ljava/lang/Object;)Ljava/lang/Object;
     152: checkcast     #64                 // class kotlin/collections/ArrayDeque
     155: dup
     156: ifnull        168
     159: invokevirtual #142                // Method kotlin/collections/ArrayDeque.removeLast:()Ljava/lang/Object;
     162: checkcast     #144                // class java/lang/String
     165: goto          170
     168: pop
     169: aconst_null
     170: dup
     171: invokestatic  #147                // Method kotlin/jvm/internal/Intrinsics.checkNotNull:(Ljava/lang/Object;)V
     174: aload         16
     176: swap
     177: invokeinterface #151,  2          // InterfaceMethod java/util/Collection.add:(Ljava/lang/Object;)Z
     182: pop
     183: goto          106
     186: aload         11
     188: checkcast     #97                 // class java/util/List
     191: nop
     192: astore        18
     194: aload_0
     195: getfield      #24                 // Field modelType:LDay05$CrateMoverModel;
     198: getstatic     #157                // Field Day05$CraneOperator$WhenMappings.$EnumSwitchMapping$0:[I
     201: swap
     202: invokevirtual #160                // Method Day05$CrateMoverModel.ordinal:()I
     205: iaload
     206: tableswitch   { // 1 to 2
                     1: 228
                     2: 266
               default: 310
          }
     228: aload_0
     229: getfield      #31                 // Field boxStacks:Ljava/util/HashMap;
     232: aload         6
     234: invokevirtual #163                // Method Day05$CraneCommand.getTo:()I
     237: invokestatic  #60                 // Method java/lang/Integer.valueOf:(I)Ljava/lang/Integer;
     240: invokevirtual #104                // Method java/util/HashMap.get:(Ljava/lang/Object;)Ljava/lang/Object;
     243: checkcast     #64                 // class kotlin/collections/ArrayDeque
     246: dup
     247: ifnull        262
     250: aload         18
     252: checkcast     #136                // class java/util/Collection
     255: invokevirtual #167                // Method kotlin/collections/ArrayDeque.addAll:(Ljava/util/Collection;)Z
     258: pop
     259: goto          318
     262: pop
     263: goto          318
     266: aload_0
     267: getfield      #31                 // Field boxStacks:Ljava/util/HashMap;
     270: aload         6
     272: invokevirtual #163                // Method Day05$CraneCommand.getTo:()I
     275: invokestatic  #60                 // Method java/lang/Integer.valueOf:(I)Ljava/lang/Integer;
     278: invokevirtual #104                // Method java/util/HashMap.get:(Ljava/lang/Object;)Ljava/lang/Object;
     281: checkcast     #64                 // class kotlin/collections/ArrayDeque
     284: dup
     285: ifnull        306
     288: aload         18
     290: checkcast     #38                 // class java/lang/Iterable
     293: invokestatic  #171                // Method kotlin/collections/CollectionsKt.reversed:(Ljava/lang/Iterable;)Ljava/util/List;
     296: checkcast     #136                // class java/util/Collection
     299: invokevirtual #167                // Method kotlin/collections/ArrayDeque.addAll:(Ljava/util/Collection;)Z
     302: pop
     303: goto          318
     306: pop
     307: goto          318
     310: new           #173                // class kotlin/NoWhenBranchMatchedException
     313: dup
     314: invokespecial #174                // Method kotlin/NoWhenBranchMatchedException."<init>":()V
     317: athrow
     318: nop
     319: nop
     320: goto          21
     323: nop
     324: return

  public final java.lang.String getTopCrates();
    Code:
       0: aload_0
       1: getfield      #31                 // Field boxStacks:Ljava/util/HashMap;
       4: invokevirtual #191                // Method java/util/HashMap.values:()Ljava/util/Collection;
       7: dup
       8: ldc           #193                // String <get-values>(...)
      10: invokestatic  #196                // Method kotlin/jvm/internal/Intrinsics.checkNotNullExpressionValue:(Ljava/lang/Object;Ljava/lang/String;)V
      13: checkcast     #38                 // class java/lang/Iterable
      16: ldc           #198                // String
      18: checkcast     #200                // class java/lang/CharSequence
      21: aconst_null
      22: aconst_null
      23: iconst_0
      24: aconst_null
      25: invokedynamic #218,  0            // InvokeDynamic #0:invoke:()Lkotlin/jvm/functions/Function1;
      30: bipush        30
      32: aconst_null
      33: invokestatic  #222                // Method kotlin/collections/CollectionsKt.joinToString$default:(Ljava/lang/Iterable;Ljava/lang/CharSequence;Ljava/lang/CharSequence;Ljava/lang/CharSequence;ILjava/lang/CharSequence;Lkotlin/jvm/functions/Function1;ILjava/lang/Object;)Ljava/lang/String;
      36: areturn

  private static final java.lang.CharSequence getTopCrates$lambda$4(kotlin.collections.ArrayDeque);
    Code:
       0: aload_0
       1: ldc           #223                // String it
       3: invokestatic  #16                 // Method kotlin/jvm/internal/Intrinsics.checkNotNullParameter:(Ljava/lang/Object;Ljava/lang/String;)V
       6: aload_0
       7: invokevirtual #226                // Method kotlin/collections/ArrayDeque.last:()Ljava/lang/Object;
      10: checkcast     #200                // class java/lang/CharSequence
      13: areturn
}

Compiled from "Day05.kt"
public final class Day05$CraneCommand {
  private final int quantity;

  private final int from;

  private final int to;

  public Day05$CraneCommand(int, int, int);
    Code:
       0: aload_0
       1: invokespecial #9                  // Method java/lang/Object."<init>":()V
       4: aload_0
       5: iload_1
       6: putfield      #13                 // Field quantity:I
       9: aload_0
      10: iload_2
      11: putfield      #16                 // Field from:I
      14: aload_0
      15: iload_3
      16: putfield      #19                 // Field to:I
      19: return

  public final int getQuantity();
    Code:
       0: aload_0
       1: getfield      #13                 // Field quantity:I
       4: ireturn

  public final int getFrom();
    Code:
       0: aload_0
       1: getfield      #16                 // Field from:I
       4: ireturn

  public final int getTo();
    Code:
       0: aload_0
       1: getfield      #19                 // Field to:I
       4: ireturn

  public final int component1();
    Code:
       0: aload_0
       1: getfield      #13                 // Field quantity:I
       4: ireturn

  public final int component2();
    Code:
       0: aload_0
       1: getfield      #16                 // Field from:I
       4: ireturn

  public final int component3();
    Code:
       0: aload_0
       1: getfield      #19                 // Field to:I
       4: ireturn

  public final Day05$CraneCommand copy(int, int, int);
    Code:
       0: new           #2                  // class Day05$CraneCommand
       3: dup
       4: iload_1
       5: iload_2
       6: iload_3
       7: invokespecial #33                 // Method "<init>":(III)V
      10: areturn

  public static Day05$CraneCommand copy$default(Day05$CraneCommand, int, int, int, int, java.lang.Object);
    Code:
       0: iload         4
       2: iconst_1
       3: iand
       4: ifeq          12
       7: aload_0
       8: getfield      #13                 // Field quantity:I
      11: istore_1
      12: iload         4
      14: iconst_2
      15: iand
      16: ifeq          24
      19: aload_0
      20: getfield      #16                 // Field from:I
      23: istore_2
      24: iload         4
      26: iconst_4
      27: iand
      28: ifeq          36
      31: aload_0
      32: getfield      #19                 // Field to:I
      35: istore_3
      36: aload_0
      37: iload_1
      38: iload_2
      39: iload_3
      40: invokevirtual #37                 // Method copy:(III)LDay05$CraneCommand;
      43: areturn

  public java.lang.String toString();
    Code:
       0: new           #41                 // class java/lang/StringBuilder
       3: dup
       4: invokespecial #42                 // Method java/lang/StringBuilder."<init>":()V
       7: ldc           #44                 // String CraneCommand(quantity=
       9: invokevirtual #48                 // Method java/lang/StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;
      12: aload_0
      13: getfield      #13                 // Field quantity:I
      16: invokevirtual #51                 // Method java/lang/StringBuilder.append:(I)Ljava/lang/StringBuilder;
      19: ldc           #53                 // String , from=
      21: invokevirtual #48                 // Method java/lang/StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;
      24: aload_0
      25: getfield      #16                 // Field from:I
      28: invokevirtual #51                 // Method java/lang/StringBuilder.append:(I)Ljava/lang/StringBuilder;
      31: ldc           #55                 // String , to=
      33: invokevirtual #48                 // Method java/lang/StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;
      36: aload_0
      37: getfield      #19                 // Field to:I
      40: invokevirtual #51                 // Method java/lang/StringBuilder.append:(I)Ljava/lang/StringBuilder;
      43: bipush        41
      45: invokevirtual #58                 // Method java/lang/StringBuilder.append:(C)Ljava/lang/StringBuilder;
      48: invokevirtual #60                 // Method java/lang/StringBuilder.toString:()Ljava/lang/String;
      51: areturn

  public int hashCode();
    Code:
       0: aload_0
       1: getfield      #13                 // Field quantity:I
       4: invokestatic  #66                 // Method java/lang/Integer.hashCode:(I)I
       7: istore_1
       8: iload_1
       9: bipush        31
      11: imul
      12: aload_0
      13: getfield      #16                 // Field from:I
      16: invokestatic  #66                 // Method java/lang/Integer.hashCode:(I)I
      19: iadd
      20: istore_1
      21: iload_1
      22: bipush        31
      24: imul
      25: aload_0
      26: getfield      #19                 // Field to:I
      29: invokestatic  #66                 // Method java/lang/Integer.hashCode:(I)I
      32: iadd
      33: istore_1
      34: iload_1
      35: ireturn

  public boolean equals(java.lang.Object);
    Code:
       0: aload_0
       1: aload_1
       2: if_acmpne     7
       5: iconst_1
       6: ireturn
       7: aload_1
       8: instanceof    #2                  // class Day05$CraneCommand
      11: ifne          16
      14: iconst_0
      15: ireturn
      16: aload_1
      17: checkcast     #2                  // class Day05$CraneCommand
      20: astore_2
      21: aload_0
      22: getfield      #13                 // Field quantity:I
      25: aload_2
      26: getfield      #13                 // Field quantity:I
      29: if_icmpeq     34
      32: iconst_0
      33: ireturn
      34: aload_0
      35: getfield      #16                 // Field from:I
      38: aload_2
      39: getfield      #16                 // Field from:I
      42: if_icmpeq     47
      45: iconst_0
      46: ireturn
      47: aload_0
      48: getfield      #19                 // Field to:I
      51: aload_2
      52: getfield      #19                 // Field to:I
      55: if_icmpeq     60
      58: iconst_0
      59: ireturn
      60: iconst_1
      61: ireturn
}

Compiled from "Day05.kt"
public final class Day05$CrateMoverModel extends java.lang.Enum<Day05$CrateMoverModel> {
  public static final Day05$CrateMoverModel CrateMover9000;

  public static final Day05$CrateMoverModel CrateMover9001;

  private static final Day05$CrateMoverModel[] $VALUES;

  private static final kotlin.enums.EnumEntries $ENTRIES;

  private Day05$CrateMoverModel();
    Code:
       0: aload_0
       1: aload_1
       2: iload_2
       3: invokespecial #10                 // Method java/lang/Enum."<init>":(Ljava/lang/String;I)V
       6: return

  public static Day05$CrateMoverModel[] values();
    Code:
       0: getstatic     #22                 // Field $VALUES:[LDay05$CrateMoverModel;
       3: invokevirtual #28                 // Method java/lang/Object.clone:()Ljava/lang/Object;
       6: checkcast     #29                 // class "[LDay05$CrateMoverModel;"
       9: areturn

  public static Day05$CrateMoverModel valueOf(java.lang.String);
    Code:
       0: ldc           #2                  // class Day05$CrateMoverModel
       2: aload_0
       3: invokestatic  #34                 // Method java/lang/Enum.valueOf:(Ljava/lang/Class;Ljava/lang/String;)Ljava/lang/Enum;
       6: checkcast     #2                  // class Day05$CrateMoverModel
       9: areturn

  public static kotlin.enums.EnumEntries<Day05$CrateMoverModel> getEntries();
    Code:
       0: getstatic     #43                 // Field $ENTRIES:Lkotlin/enums/EnumEntries;
       3: areturn

  private static final Day05$CrateMoverModel[] $values();
    Code:
       0: iconst_2
       1: anewarray     #2                  // class Day05$CrateMoverModel
       4: astore_0
       5: aload_0
       6: iconst_0
       7: getstatic     #47                 // Field CrateMover9000:LDay05$CrateMoverModel;
      10: aastore
      11: aload_0
      12: iconst_1
      13: getstatic     #50                 // Field CrateMover9001:LDay05$CrateMoverModel;
      16: aastore
      17: aload_0
      18: areturn

  static {};
    Code:
       0: new           #2                  // class Day05$CrateMoverModel
       3: dup
       4: ldc           #52                 // String CrateMover9000
       6: iconst_0
       7: invokespecial #53                 // Method "<init>":(Ljava/lang/String;I)V
      10: putstatic     #47                 // Field CrateMover9000:LDay05$CrateMoverModel;
      13: new           #2                  // class Day05$CrateMoverModel
      16: dup
      17: ldc           #54                 // String CrateMover9001
      19: iconst_1
      20: invokespecial #53                 // Method "<init>":(Ljava/lang/String;I)V
      23: putstatic     #50                 // Field CrateMover9001:LDay05$CrateMoverModel;
      26: invokestatic  #56                 // Method $values:()[LDay05$CrateMoverModel;
      29: putstatic     #22                 // Field $VALUES:[LDay05$CrateMoverModel;
      32: getstatic     #22                 // Field $VALUES:[LDay05$CrateMoverModel;
      35: checkcast     #58                 // class "[Ljava/lang/Enum;"
      38: invokestatic  #64                 // Method kotlin/enums/EnumEntriesKt.enumEntries:([Ljava/lang/Enum;)Lkotlin/enums/EnumEntries;
      41: putstatic     #43                 // Field $ENTRIES:Lkotlin/enums/EnumEntries;
      44: return
}