import java.util.*
import kotlin.math.abs

fun main() = Blizzards.solve()

private object Blizzards {
    fun solve() {
        var board = readInput()

        val start = Pos(1, 0)
        val target = Pos(board.cells.last().indexOfFirst { it is Space }, board.cells.size - 1)
        val initialPath = Path(
            start,
            target,
            0
        )
        val bestFwd = findPath(initialPath, board)
        println("Best path S->F takes $bestFwd steps")
        (1..bestFwd).forEach { board = board.next() }
        val backPath = Path(target, start, 0)
        val bestBack = findPath(backPath, board)
        println("Best path F->S takes $bestBack steps")
        (1..bestBack).forEach { board = board.next() }
        val bestBackAgain = findPath(initialPath, board)
        println("Best path S->F (again) takes $bestBackAgain steps")
        println("Total: ${bestFwd + bestBack + bestBackAgain}")
    }

    private fun findPath(initialPath: Path, initialBoard: Board): Int {
        val boards = mutableListOf(initialBoard)
        val queue = PriorityQueue<Path>()
        val visited = mutableSetOf<Path>()
        queue.add(initialPath)
        while (queue.isNotEmpty()) {
            val path = queue.remove()
            if (path.pos == path.target) {
                return path.turn
            }

            if (path in visited) continue
            else visited.add(path)

            val nextTurn = path.turn + 1
//            println("$nextTurn $path")
            if (boards.size == nextTurn) {
                boards.add(boards.last().next())
            }
            val nextBoard = boards[nextTurn]
            val nextPositions = listOf(
                path.pos,
                Pos(path.pos.x - 1, path.pos.y), Pos(path.pos.x + 1, path.pos.y),
                Pos(path.pos.x, path.pos.y - 1), Pos(path.pos.x, path.pos.y + 1)
            ).filter { pos ->
                (nextBoard.cells.getOrNull(pos.y)?.getOrNull(pos.x) as? Space)?.winds?.isEmpty() ?: false
            }
            nextPositions.forEach { pos ->
                queue.add(Path(pos, path.target, nextTurn))
            }
        }
        return -1
    }

    private fun readInput(): Board {
        val cells = generateSequence(::readLine).map { line ->
            line.toCharArray().map { char ->
                when (char) {
                    '#' -> Wall
                    '.' -> Space(mutableListOf())
                    '^' -> Space(mutableListOf(Wind.North))
                    '>' -> Space(mutableListOf(Wind.East))
                    '<' -> Space(mutableListOf(Wind.West))
                    'v' -> Space(mutableListOf(Wind.South))
                    else -> throw Error("Failed to parse char $char")
                }
            }
        }.toList()
        return Board(cells)
    }

    data class Board(val cells: List<List<Cell>>) {
        fun visualize() {
            for (line in cells) {
                for (cell in line) {
                    val char = when (cell) {
                        Wall -> '#'
                        is Space -> {
                            if (cell.winds.isEmpty()) {
                                '.'
                            } else if (cell.winds.size == 1) {
                                when (cell.winds.first()) {
                                    Wind.North -> '^'
                                    Wind.East -> '>'
                                    Wind.South -> 'v'
                                    Wind.West -> '<'
                                }
                            } else {
                                cell.winds.size
                            }
                        }
                    }
                    print(char)
                }
                println()
            }
            println()
        }

        fun next(): Board {
            val nextCells = cells.map {
                it.map { cell ->
                    when (cell) {
                        Wall -> Wall
                        is Space -> Space(mutableListOf())
                    }
                }
            }
            cells.forEachIndexed { y, line ->
                line.forEachIndexed { x, cell ->
                    when (cell) {
                        Wall -> {}
                        is Space -> {
                            cell.winds.forEach { wind ->
                                val nextPos = nextWindPos(wind, Pos(x, y))
                                val nextCell = nextCells[nextPos.y][nextPos.x]
                                require(nextCell is Space)
                                nextCell.winds.add(wind)
                            }
                        }
                    }
                }
            }
            return Board(nextCells)
        }

        private fun nextWindPos(wind: Wind, pos: Pos): Pos {
            var nextX = pos.x + wind.dx
            var nextY = pos.y + wind.dy
            // Simplified wrapping, assumes walls are always in outer row
            if (nextX == 0) {
                nextX = width() - 2
            } else if (nextX >= width() - 1) {
                nextX = 1
            }
            if (nextY == 0) {
                nextY = height() - 2
            } else if (nextY >= height() - 1) {
                nextY = 1
            }
            return Pos(nextX, nextY)
        }

        private fun width(): Int = cells.first().size
        private fun height(): Int = cells.size
    }

    sealed interface Cell

    object Wall : Cell
    data class Space(val winds: MutableList<Wind>) : Cell

    enum class Wind(val dx: Int, val dy: Int) {
        West(-1, 0),
        North(0, -1),
        East(1, 0),
        South(0, 1)
    }

    data class Pos(val x: Int, val y: Int)

    data class Path(val pos: Pos, val target: Pos, val turn: Int) : Comparable<Path> {
        override fun compareTo(other: Path): Int = minTurnsToTarget().compareTo(other.minTurnsToTarget())

        private fun minTurnsToTarget() = abs(target.x - pos.x) + abs(target.y - pos.y) + turn
    }
}

Compiled from "Blizzards.kt"
final class Blizzards$readInput$cells$1 extends kotlin.jvm.internal.FunctionReferenceImpl implements kotlin.jvm.functions.Function0<java.lang.String> {
  public static final Blizzards$readInput$cells$1 INSTANCE;

  Blizzards$readInput$cells$1();
    Code:
       0: aload_0
       1: iconst_0
       2: ldc           #11                 // class kotlin/io/ConsoleKt
       4: ldc           #13                 // String readLine
       6: ldc           #15                 // String readLine()Ljava/lang/String;
       8: iconst_1
       9: invokespecial #18                 // Method kotlin/jvm/internal/FunctionReferenceImpl."<init>":(ILjava/lang/Class;Ljava/lang/String;Ljava/lang/String;I)V
      12: return

  public final java.lang.String invoke();
    Code:
       0: invokestatic  #24                 // Method kotlin/io/ConsoleKt.readLine:()Ljava/lang/String;
       3: areturn

  public java.lang.Object invoke();
    Code:
       0: aload_0
       1: invokevirtual #27                 // Method invoke:()Ljava/lang/String;
       4: areturn

  static {};
    Code:
       0: new           #2                  // class Blizzards$readInput$cells$1
       3: dup
       4: invokespecial #30                 // Method "<init>":()V
       7: putstatic     #33                 // Field INSTANCE:LBlizzards$readInput$cells$1;
      10: return
}

Compiled from "Blizzards.kt"
public interface Blizzards$Cell {
}

Compiled from "Blizzards.kt"
public final class Blizzards$Space implements Blizzards$Cell {
  private final java.util.List<Blizzards$Wind> winds;

  public Blizzards$Space(java.util.List<Blizzards$Wind>);
    Code:
       0: aload_1
       1: ldc           #12                 // String winds
       3: invokestatic  #18                 // Method kotlin/jvm/internal/Intrinsics.checkNotNullParameter:(Ljava/lang/Object;Ljava/lang/String;)V
       6: aload_0
       7: invokespecial #21                 // Method java/lang/Object."<init>":()V
      10: aload_0
      11: aload_1
      12: putfield      #24                 // Field winds:Ljava/util/List;
      15: return

  public final java.util.List<Blizzards$Wind> getWinds();
    Code:
       0: aload_0
       1: getfield      #24                 // Field winds:Ljava/util/List;
       4: areturn

  public final java.util.List<Blizzards$Wind> component1();
    Code:
       0: aload_0
       1: getfield      #24                 // Field winds:Ljava/util/List;
       4: areturn

  public final Blizzards$Space copy(java.util.List<Blizzards$Wind>);
    Code:
       0: aload_1
       1: ldc           #12                 // String winds
       3: invokestatic  #18                 // Method kotlin/jvm/internal/Intrinsics.checkNotNullParameter:(Ljava/lang/Object;Ljava/lang/String;)V
       6: new           #2                  // class Blizzards$Space
       9: dup
      10: aload_1
      11: invokespecial #35                 // Method "<init>":(Ljava/util/List;)V
      14: areturn

  public static Blizzards$Space copy$default(Blizzards$Space, java.util.List, int, java.lang.Object);
    Code:
       0: iload_2
       1: iconst_1
       2: iand
       3: ifeq          11
       6: aload_0
       7: getfield      #24                 // Field winds:Ljava/util/List;
      10: astore_1
      11: aload_0
      12: aload_1
      13: invokevirtual #39                 // Method copy:(Ljava/util/List;)LBlizzards$Space;
      16: areturn

  public java.lang.String toString();
    Code:
       0: new           #43                 // class java/lang/StringBuilder
       3: dup
       4: invokespecial #44                 // Method java/lang/StringBuilder."<init>":()V
       7: ldc           #46                 // String Space(winds=
       9: invokevirtual #50                 // Method java/lang/StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;
      12: aload_0
      13: getfield      #24                 // Field winds:Ljava/util/List;
      16: invokevirtual #53                 // Method java/lang/StringBuilder.append:(Ljava/lang/Object;)Ljava/lang/StringBuilder;
      19: bipush        41
      21: invokevirtual #56                 // Method java/lang/StringBuilder.append:(C)Ljava/lang/StringBuilder;
      24: invokevirtual #58                 // Method java/lang/StringBuilder.toString:()Ljava/lang/String;
      27: areturn

  public int hashCode();
    Code:
       0: aload_0
       1: getfield      #24                 // Field winds:Ljava/util/List;
       4: invokevirtual #62                 // Method java/lang/Object.hashCode:()I
       7: 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 Blizzards$Space
      11: ifne          16
      14: iconst_0
      15: ireturn
      16: aload_1
      17: checkcast     #2                  // class Blizzards$Space
      20: astore_2
      21: aload_0
      22: getfield      #24                 // Field winds:Ljava/util/List;
      25: aload_2
      26: getfield      #24                 // Field winds:Ljava/util/List;
      29: invokestatic  #69                 // Method kotlin/jvm/internal/Intrinsics.areEqual:(Ljava/lang/Object;Ljava/lang/Object;)Z
      32: ifne          37
      35: iconst_0
      36: ireturn
      37: iconst_1
      38: ireturn
}

Compiled from "Blizzards.kt"
public final class Blizzards$Board {
  private final java.util.List<java.util.List<Blizzards$Cell>> cells;

  public Blizzards$Board(java.util.List<? extends java.util.List<? extends Blizzards$Cell>>);
    Code:
       0: aload_1
       1: ldc           #10                 // String cells
       3: invokestatic  #16                 // Method kotlin/jvm/internal/Intrinsics.checkNotNullParameter:(Ljava/lang/Object;Ljava/lang/String;)V
       6: aload_0
       7: invokespecial #19                 // Method java/lang/Object."<init>":()V
      10: aload_0
      11: aload_1
      12: putfield      #22                 // Field cells:Ljava/util/List;
      15: return

  public final java.util.List<java.util.List<Blizzards$Cell>> getCells();
    Code:
       0: aload_0
       1: getfield      #22                 // Field cells:Ljava/util/List;
       4: areturn

  public final void visualize();
    Code:
       0: aload_0
       1: getfield      #22                 // Field cells:Ljava/util/List;
       4: invokeinterface #34,  1           // InterfaceMethod java/util/List.iterator:()Ljava/util/Iterator;
       9: astore_1
      10: aload_1
      11: invokeinterface #40,  1           // InterfaceMethod java/util/Iterator.hasNext:()Z
      16: ifeq          263
      19: aload_1
      20: invokeinterface #44,  1           // InterfaceMethod java/util/Iterator.next:()Ljava/lang/Object;
      25: checkcast     #30                 // class java/util/List
      28: astore_2
      29: aload_2
      30: invokeinterface #34,  1           // InterfaceMethod java/util/List.iterator:()Ljava/util/Iterator;
      35: astore_3
      36: aload_3
      37: invokeinterface #40,  1           // InterfaceMethod java/util/Iterator.hasNext:()Z
      42: ifeq          254
      45: aload_3
      46: invokeinterface #44,  1           // InterfaceMethod java/util/Iterator.next:()Ljava/lang/Object;
      51: checkcast     #46                 // class Blizzards$Cell
      54: astore        4
      56: aload         4
      58: astore        6
      60: aload         6
      62: getstatic     #52                 // Field Blizzards$Wall.INSTANCE:LBlizzards$Wall;
      65: invokestatic  #56                 // Method kotlin/jvm/internal/Intrinsics.areEqual:(Ljava/lang/Object;Ljava/lang/Object;)Z
      68: ifeq          79
      71: bipush        35
      73: invokestatic  #62                 // Method java/lang/Character.valueOf:(C)Ljava/lang/Character;
      76: goto          241
      79: aload         6
      81: instanceof    #64                 // class Blizzards$Space
      84: ifeq          233
      87: aload         4
      89: checkcast     #64                 // class Blizzards$Space
      92: invokevirtual #67                 // Method Blizzards$Space.getWinds:()Ljava/util/List;
      95: invokeinterface #70,  1           // InterfaceMethod java/util/List.isEmpty:()Z
     100: ifeq          111
     103: bipush        46
     105: invokestatic  #62                 // Method java/lang/Character.valueOf:(C)Ljava/lang/Character;
     108: goto          241
     111: aload         4
     113: checkcast     #64                 // class Blizzards$Space
     116: invokevirtual #67                 // Method Blizzards$Space.getWinds:()Ljava/util/List;
     119: invokeinterface #74,  1           // InterfaceMethod java/util/List.size:()I
     124: iconst_1
     125: if_icmpne     214
     128: aload         4
     130: checkcast     #64                 // class Blizzards$Space
     133: invokevirtual #67                 // Method Blizzards$Space.getWinds:()Ljava/util/List;
     136: invokestatic  #80                 // Method kotlin/collections/CollectionsKt.first:(Ljava/util/List;)Ljava/lang/Object;
     139: checkcast     #82                 // class Blizzards$Wind
     142: getstatic     #88                 // Field Blizzards$Board$WhenMappings.$EnumSwitchMapping$0:[I
     145: swap
     146: invokevirtual #91                 // Method Blizzards$Wind.ordinal:()I
     149: iaload
     150: tableswitch   { // 1 to 4
                     1: 180
                     2: 185
                     3: 190
                     4: 195
               default: 200
          }
     180: bipush        94
     182: goto          208
     185: bipush        62
     187: goto          208
     190: bipush        118
     192: goto          208
     195: bipush        60
     197: goto          208
     200: new           #93                 // class kotlin/NoWhenBranchMatchedException
     203: dup
     204: invokespecial #94                 // Method kotlin/NoWhenBranchMatchedException."<init>":()V
     207: athrow
     208: invokestatic  #62                 // Method java/lang/Character.valueOf:(C)Ljava/lang/Character;
     211: goto          241
     214: aload         4
     216: checkcast     #64                 // class Blizzards$Space
     219: invokevirtual #67                 // Method Blizzards$Space.getWinds:()Ljava/util/List;
     222: invokeinterface #74,  1           // InterfaceMethod java/util/List.size:()I
     227: invokestatic  #99                 // Method java/lang/Integer.valueOf:(I)Ljava/lang/Integer;
     230: goto          241
     233: new           #93                 // class kotlin/NoWhenBranchMatchedException
     236: dup
     237: invokespecial #94                 // Method kotlin/NoWhenBranchMatchedException."<init>":()V
     240: athrow
     241: astore        5
     243: getstatic     #105                // Field java/lang/System.out:Ljava/io/PrintStream;
     246: aload         5
     248: invokevirtual #111                // Method java/io/PrintStream.print:(Ljava/lang/Object;)V
     251: goto          36
     254: getstatic     #105                // Field java/lang/System.out:Ljava/io/PrintStream;
     257: invokevirtual #114                // Method java/io/PrintStream.println:()V
     260: goto          10
     263: getstatic     #105                // Field java/lang/System.out:Ljava/io/PrintStream;
     266: invokevirtual #114                // Method java/io/PrintStream.println:()V
     269: return

  public final Blizzards$Board next();
    Code:
       0: aload_0
       1: getfield      #22                 // Field cells:Ljava/util/List;
       4: checkcast     #122                // class java/lang/Iterable
       7: astore_2
       8: iconst_0
       9: istore_3
      10: aload_2
      11: astore        4
      13: new           #124                // class java/util/ArrayList
      16: dup
      17: aload_2
      18: bipush        10
      20: invokestatic  #128                // Method kotlin/collections/CollectionsKt.collectionSizeOrDefault:(Ljava/lang/Iterable;I)I
      23: invokespecial #131                // Method java/util/ArrayList."<init>":(I)V
      26: checkcast     #133                // class java/util/Collection
      29: astore        5
      31: iconst_0
      32: istore        6
      34: aload         4
      36: invokeinterface #134,  1          // InterfaceMethod java/lang/Iterable.iterator:()Ljava/util/Iterator;
      41: astore        7
      43: aload         7
      45: invokeinterface #40,  1           // InterfaceMethod java/util/Iterator.hasNext:()Z
      50: ifeq          249
      53: aload         7
      55: invokeinterface #44,  1           // InterfaceMethod java/util/Iterator.next:()Ljava/lang/Object;
      60: astore        8
      62: aload         5
      64: aload         8
      66: checkcast     #30                 // class java/util/List
      69: astore        9
      71: astore        30
      73: iconst_0
      74: istore        10
      76: aload         9
      78: checkcast     #122                // class java/lang/Iterable
      81: astore        11
      83: iconst_0
      84: istore        12
      86: aload         11
      88: astore        13
      90: new           #124                // class java/util/ArrayList
      93: dup
      94: aload         11
      96: bipush        10
      98: invokestatic  #128                // Method kotlin/collections/CollectionsKt.collectionSizeOrDefault:(Ljava/lang/Iterable;I)I
     101: invokespecial #131                // Method java/util/ArrayList."<init>":(I)V
     104: checkcast     #133                // class java/util/Collection
     107: astore        14
     109: iconst_0
     110: istore        15
     112: aload         13
     114: invokeinterface #134,  1          // InterfaceMethod java/lang/Iterable.iterator:()Ljava/util/Iterator;
     119: astore        16
     121: aload         16
     123: invokeinterface #40,  1           // InterfaceMethod java/util/Iterator.hasNext:()Z
     128: ifeq          230
     131: aload         16
     133: invokeinterface #44,  1           // InterfaceMethod java/util/Iterator.next:()Ljava/lang/Object;
     138: astore        17
     140: aload         14
     142: aload         17
     144: checkcast     #46                 // class Blizzards$Cell
     147: astore        18
     149: astore        19
     151: iconst_0
     152: istore        20
     154: aload         18
     156: astore        21
     158: aload         21
     160: getstatic     #52                 // Field Blizzards$Wall.INSTANCE:LBlizzards$Wall;
     163: invokestatic  #56                 // Method kotlin/jvm/internal/Intrinsics.areEqual:(Ljava/lang/Object;Ljava/lang/Object;)Z
     166: ifeq          178
     169: getstatic     #52                 // Field Blizzards$Wall.INSTANCE:LBlizzards$Wall;
     172: checkcast     #46                 // class Blizzards$Cell
     175: goto          217
     178: aload         21
     180: instanceof    #64                 // class Blizzards$Space
     183: ifeq          209
     186: new           #64                 // class Blizzards$Space
     189: dup
     190: new           #124                // class java/util/ArrayList
     193: dup
     194: invokespecial #135                // Method java/util/ArrayList."<init>":()V
     197: checkcast     #30                 // class java/util/List
     200: invokespecial #137                // Method Blizzards$Space."<init>":(Ljava/util/List;)V
     203: checkcast     #46                 // class Blizzards$Cell
     206: goto          217
     209: new           #93                 // class kotlin/NoWhenBranchMatchedException
     212: dup
     213: invokespecial #94                 // Method kotlin/NoWhenBranchMatchedException."<init>":()V
     216: athrow
     217: nop
     218: aload         19
     220: swap
     221: invokeinterface #141,  2          // InterfaceMethod java/util/Collection.add:(Ljava/lang/Object;)Z
     226: pop
     227: goto          121
     230: aload         14
     232: checkcast     #30                 // class java/util/List
     235: nop
     236: nop
     237: aload         30
     239: swap
     240: invokeinterface #141,  2          // InterfaceMethod java/util/Collection.add:(Ljava/lang/Object;)Z
     245: pop
     246: goto          43
     249: aload         5
     251: checkcast     #30                 // class java/util/List
     254: nop
     255: astore_1
     256: aload_0
     257: getfield      #22                 // Field cells:Ljava/util/List;
     260: checkcast     #122                // class java/lang/Iterable
     263: astore_2
     264: iconst_0
     265: istore_3
     266: iconst_0
     267: istore        4
     269: aload_2
     270: invokeinterface #134,  1          // InterfaceMethod java/lang/Iterable.iterator:()Ljava/util/Iterator;
     275: astore        5
     277: aload         5
     279: invokeinterface #40,  1           // InterfaceMethod java/util/Iterator.hasNext:()Z
     284: ifeq          589
     287: aload         5
     289: invokeinterface #44,  1           // InterfaceMethod java/util/Iterator.next:()Ljava/lang/Object;
     294: astore        6
     296: iload         4
     298: iinc          4, 1
     301: istore        7
     303: iload         7
     305: ifge          311
     308: invokestatic  #144                // Method kotlin/collections/CollectionsKt.throwIndexOverflow:()V
     311: iload         7
     313: aload         6
     315: checkcast     #30                 // class java/util/List
     318: astore        8
     320: istore        9
     322: iconst_0
     323: istore        10
     325: aload         8
     327: checkcast     #122                // class java/lang/Iterable
     330: astore        11
     332: iconst_0
     333: istore        12
     335: iconst_0
     336: istore        13
     338: aload         11
     340: invokeinterface #134,  1          // InterfaceMethod java/lang/Iterable.iterator:()Ljava/util/Iterator;
     345: astore        14
     347: aload         14
     349: invokeinterface #40,  1           // InterfaceMethod java/util/Iterator.hasNext:()Z
     354: ifeq          583
     357: aload         14
     359: invokeinterface #44,  1           // InterfaceMethod java/util/Iterator.next:()Ljava/lang/Object;
     364: astore        15
     366: iload         13
     368: iinc          13, 1
     371: istore        16
     373: iload         16
     375: ifge          381
     378: invokestatic  #144                // Method kotlin/collections/CollectionsKt.throwIndexOverflow:()V
     381: iload         16
     383: aload         15
     385: checkcast     #46                 // class Blizzards$Cell
     388: astore        17
     390: istore        18
     392: iconst_0
     393: istore        19
     395: aload         17
     397: astore        20
     399: aload         20
     401: getstatic     #52                 // Field Blizzards$Wall.INSTANCE:LBlizzards$Wall;
     404: invokestatic  #56                 // Method kotlin/jvm/internal/Intrinsics.areEqual:(Ljava/lang/Object;Ljava/lang/Object;)Z
     407: ifne          578
     410: aload         20
     412: instanceof    #64                 // class Blizzards$Space
     415: ifeq          570
     418: aload         17
     420: checkcast     #64                 // class Blizzards$Space
     423: invokevirtual #67                 // Method Blizzards$Space.getWinds:()Ljava/util/List;
     426: checkcast     #122                // class java/lang/Iterable
     429: astore        21
     431: iconst_0
     432: istore        22
     434: aload         21
     436: invokeinterface #134,  1          // InterfaceMethod java/lang/Iterable.iterator:()Ljava/util/Iterator;
     441: astore        23
     443: aload         23
     445: invokeinterface #40,  1           // InterfaceMethod java/util/Iterator.hasNext:()Z
     450: ifeq          566
     453: aload         23
     455: invokeinterface #44,  1           // InterfaceMethod java/util/Iterator.next:()Ljava/lang/Object;
     460: astore        24
     462: aload         24
     464: checkcast     #82                 // class Blizzards$Wind
     467: astore        25
     469: iconst_0
     470: istore        26
     472: aload_0
     473: aload         25
     475: new           #146                // class Blizzards$Pos
     478: dup
     479: iload         18
     481: iload         9
     483: invokespecial #149                // Method Blizzards$Pos."<init>":(II)V
     486: invokespecial #153                // Method nextWindPos:(LBlizzards$Wind;LBlizzards$Pos;)LBlizzards$Pos;
     489: astore        27
     491: aload_1
     492: aload         27
     494: invokevirtual #156                // Method Blizzards$Pos.getY:()I
     497: invokeinterface #160,  2          // InterfaceMethod java/util/List.get:(I)Ljava/lang/Object;
     502: checkcast     #30                 // class java/util/List
     505: aload         27
     507: invokevirtual #163                // Method Blizzards$Pos.getX:()I
     510: invokeinterface #160,  2          // InterfaceMethod java/util/List.get:(I)Ljava/lang/Object;
     515: checkcast     #46                 // class Blizzards$Cell
     518: astore        28
     520: aload         28
     522: instanceof    #64                 // class Blizzards$Space
     525: ifne          545
     528: ldc           #165                // String Failed requirement.
     530: astore        29
     532: new           #167                // class java/lang/IllegalArgumentException
     535: dup
     536: aload         29
     538: invokevirtual #171                // Method java/lang/Object.toString:()Ljava/lang/String;
     541: invokespecial #174                // Method java/lang/IllegalArgumentException."<init>":(Ljava/lang/String;)V
     544: athrow
     545: aload         28
     547: checkcast     #64                 // class Blizzards$Space
     550: invokevirtual #67                 // Method Blizzards$Space.getWinds:()Ljava/util/List;
     553: aload         25
     555: invokeinterface #175,  2          // InterfaceMethod java/util/List.add:(Ljava/lang/Object;)Z
     560: pop
     561: nop
     562: nop
     563: goto          443
     566: nop
     567: goto          578
     570: new           #93                 // class kotlin/NoWhenBranchMatchedException
     573: dup
     574: invokespecial #94                 // Method kotlin/NoWhenBranchMatchedException."<init>":()V
     577: athrow
     578: nop
     579: nop
     580: goto          347
     583: nop
     584: nop
     585: nop
     586: goto          277
     589: nop
     590: new           #2                  // class Blizzards$Board
     593: dup
     594: aload_1
     595: invokespecial #176                // Method "<init>":(Ljava/util/List;)V
     598: areturn

  private final Blizzards$Pos nextWindPos(Blizzards$Wind, Blizzards$Pos);
    Code:
       0: aload_2
       1: invokevirtual #163                // Method Blizzards$Pos.getX:()I
       4: aload_1
       5: invokevirtual #209                // Method Blizzards$Wind.getDx:()I
       8: iadd
       9: istore_3
      10: aload_2
      11: invokevirtual #156                // Method Blizzards$Pos.getY:()I
      14: aload_1
      15: invokevirtual #212                // Method Blizzards$Wind.getDy:()I
      18: iadd
      19: istore        4
      21: iload_3
      22: ifne          35
      25: aload_0
      26: invokespecial #215                // Method width:()I
      29: iconst_2
      30: isub
      31: istore_3
      32: goto          47
      35: iload_3
      36: aload_0
      37: invokespecial #215                // Method width:()I
      40: iconst_1
      41: isub
      42: if_icmplt     47
      45: iconst_1
      46: istore_3
      47: iload         4
      49: ifne          63
      52: aload_0
      53: invokespecial #218                // Method height:()I
      56: iconst_2
      57: isub
      58: istore        4
      60: goto          77
      63: iload         4
      65: aload_0
      66: invokespecial #218                // Method height:()I
      69: iconst_1
      70: isub
      71: if_icmplt     77
      74: iconst_1
      75: istore        4
      77: new           #146                // class Blizzards$Pos
      80: dup
      81: iload_3
      82: iload         4
      84: invokespecial #149                // Method Blizzards$Pos."<init>":(II)V
      87: areturn

  private final int width();
    Code:
       0: aload_0
       1: getfield      #22                 // Field cells:Ljava/util/List;
       4: invokestatic  #80                 // Method kotlin/collections/CollectionsKt.first:(Ljava/util/List;)Ljava/lang/Object;
       7: checkcast     #30                 // class java/util/List
      10: invokeinterface #74,  1           // InterfaceMethod java/util/List.size:()I
      15: ireturn

  private final int height();
    Code:
       0: aload_0
       1: getfield      #22                 // Field cells:Ljava/util/List;
       4: invokeinterface #74,  1           // InterfaceMethod java/util/List.size:()I
       9: ireturn

  public final java.util.List<java.util.List<Blizzards$Cell>> component1();
    Code:
       0: aload_0
       1: getfield      #22                 // Field cells:Ljava/util/List;
       4: areturn

  public final Blizzards$Board copy(java.util.List<? extends java.util.List<? extends Blizzards$Cell>>);
    Code:
       0: aload_1
       1: ldc           #10                 // String cells
       3: invokestatic  #16                 // Method kotlin/jvm/internal/Intrinsics.checkNotNullParameter:(Ljava/lang/Object;Ljava/lang/String;)V
       6: new           #2                  // class Blizzards$Board
       9: dup
      10: aload_1
      11: invokespecial #176                // Method "<init>":(Ljava/util/List;)V
      14: areturn

  public static Blizzards$Board copy$default(Blizzards$Board, java.util.List, int, java.lang.Object);
    Code:
       0: iload_2
       1: iconst_1
       2: iand
       3: ifeq          11
       6: aload_0
       7: getfield      #22                 // Field cells:Ljava/util/List;
      10: astore_1
      11: aload_0
      12: aload_1
      13: invokevirtual #229                // Method copy:(Ljava/util/List;)LBlizzards$Board;
      16: areturn

  public java.lang.String toString();
    Code:
       0: new           #231                // class java/lang/StringBuilder
       3: dup
       4: invokespecial #232                // Method java/lang/StringBuilder."<init>":()V
       7: ldc           #234                // String Board(cells=
       9: invokevirtual #238                // Method java/lang/StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;
      12: aload_0
      13: getfield      #22                 // Field cells:Ljava/util/List;
      16: invokevirtual #241                // Method java/lang/StringBuilder.append:(Ljava/lang/Object;)Ljava/lang/StringBuilder;
      19: bipush        41
      21: invokevirtual #244                // Method java/lang/StringBuilder.append:(C)Ljava/lang/StringBuilder;
      24: invokevirtual #245                // Method java/lang/StringBuilder.toString:()Ljava/lang/String;
      27: areturn

  public int hashCode();
    Code:
       0: aload_0
       1: getfield      #22                 // Field cells:Ljava/util/List;
       4: invokevirtual #248                // Method java/lang/Object.hashCode:()I
       7: 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 Blizzards$Board
      11: ifne          16
      14: iconst_0
      15: ireturn
      16: aload_1
      17: checkcast     #2                  // class Blizzards$Board
      20: astore_2
      21: aload_0
      22: getfield      #22                 // Field cells:Ljava/util/List;
      25: aload_2
      26: getfield      #22                 // Field cells:Ljava/util/List;
      29: invokestatic  #56                 // Method kotlin/jvm/internal/Intrinsics.areEqual:(Ljava/lang/Object;Ljava/lang/Object;)Z
      32: ifne          37
      35: iconst_0
      36: ireturn
      37: iconst_1
      38: ireturn
}

Compiled from "Blizzards.kt"
public final class Blizzards$Wind extends java.lang.Enum<Blizzards$Wind> {
  private final int dx;

  private final int dy;

  public static final Blizzards$Wind West;

  public static final Blizzards$Wind North;

  public static final Blizzards$Wind East;

  public static final Blizzards$Wind South;

  private static final Blizzards$Wind[] $VALUES;

  private static final kotlin.enums.EnumEntries $ENTRIES;

  private Blizzards$Wind(int, int);
    Code:
       0: aload_0
       1: aload_1
       2: iload_2
       3: invokespecial #11                 // Method java/lang/Enum."<init>":(Ljava/lang/String;I)V
       6: aload_0
       7: iload_3
       8: putfield      #15                 // Field dx:I
      11: aload_0
      12: iload         4
      14: putfield      #18                 // Field dy:I
      17: return

  public final int getDx();
    Code:
       0: aload_0
       1: getfield      #15                 // Field dx:I
       4: ireturn

  public final int getDy();
    Code:
       0: aload_0
       1: getfield      #18                 // Field dy:I
       4: ireturn

  public static Blizzards$Wind[] values();
    Code:
       0: getstatic     #32                 // Field $VALUES:[LBlizzards$Wind;
       3: invokevirtual #38                 // Method java/lang/Object.clone:()Ljava/lang/Object;
       6: checkcast     #39                 // class "[LBlizzards$Wind;"
       9: areturn

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

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

  private static final Blizzards$Wind[] $values();
    Code:
       0: iconst_4
       1: anewarray     #2                  // class Blizzards$Wind
       4: astore_0
       5: aload_0
       6: iconst_0
       7: getstatic     #57                 // Field West:LBlizzards$Wind;
      10: aastore
      11: aload_0
      12: iconst_1
      13: getstatic     #60                 // Field North:LBlizzards$Wind;
      16: aastore
      17: aload_0
      18: iconst_2
      19: getstatic     #63                 // Field East:LBlizzards$Wind;
      22: aastore
      23: aload_0
      24: iconst_3
      25: getstatic     #66                 // Field South:LBlizzards$Wind;
      28: aastore
      29: aload_0
      30: areturn

  static {};
    Code:
       0: new           #2                  // class Blizzards$Wind
       3: dup
       4: ldc           #69                 // String West
       6: iconst_0
       7: iconst_m1
       8: iconst_0
       9: invokespecial #71                 // Method "<init>":(Ljava/lang/String;III)V
      12: putstatic     #57                 // Field West:LBlizzards$Wind;
      15: new           #2                  // class Blizzards$Wind
      18: dup
      19: ldc           #72                 // String North
      21: iconst_1
      22: iconst_0
      23: iconst_m1
      24: invokespecial #71                 // Method "<init>":(Ljava/lang/String;III)V
      27: putstatic     #60                 // Field North:LBlizzards$Wind;
      30: new           #2                  // class Blizzards$Wind
      33: dup
      34: ldc           #73                 // String East
      36: iconst_2
      37: iconst_1
      38: iconst_0
      39: invokespecial #71                 // Method "<init>":(Ljava/lang/String;III)V
      42: putstatic     #63                 // Field East:LBlizzards$Wind;
      45: new           #2                  // class Blizzards$Wind
      48: dup
      49: ldc           #74                 // String South
      51: iconst_3
      52: iconst_0
      53: iconst_1
      54: invokespecial #71                 // Method "<init>":(Ljava/lang/String;III)V
      57: putstatic     #66                 // Field South:LBlizzards$Wind;
      60: invokestatic  #76                 // Method $values:()[LBlizzards$Wind;
      63: putstatic     #32                 // Field $VALUES:[LBlizzards$Wind;
      66: getstatic     #32                 // Field $VALUES:[LBlizzards$Wind;
      69: checkcast     #78                 // class "[Ljava/lang/Enum;"
      72: invokestatic  #84                 // Method kotlin/enums/EnumEntriesKt.enumEntries:([Ljava/lang/Enum;)Lkotlin/enums/EnumEntries;
      75: putstatic     #53                 // Field $ENTRIES:Lkotlin/enums/EnumEntries;
      78: return
}

Compiled from "Blizzards.kt"
public final class Blizzards$Pos {
  private final int x;

  private final int y;

  public Blizzards$Pos(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 x:I
       9: aload_0
      10: iload_2
      11: putfield      #16                 // Field y:I
      14: return

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

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

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

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

  public final Blizzards$Pos copy(int, int);
    Code:
       0: new           #2                  // class Blizzards$Pos
       3: dup
       4: iload_1
       5: iload_2
       6: invokespecial #28                 // Method "<init>":(II)V
       9: areturn

  public static Blizzards$Pos copy$default(Blizzards$Pos, int, int, int, java.lang.Object);
    Code:
       0: iload_3
       1: iconst_1
       2: iand
       3: ifeq          11
       6: aload_0
       7: getfield      #13                 // Field x:I
      10: istore_1
      11: iload_3
      12: iconst_2
      13: iand
      14: ifeq          22
      17: aload_0
      18: getfield      #16                 // Field y:I
      21: istore_2
      22: aload_0
      23: iload_1
      24: iload_2
      25: invokevirtual #32                 // Method copy:(II)LBlizzards$Pos;
      28: areturn

  public java.lang.String toString();
    Code:
       0: new           #36                 // class java/lang/StringBuilder
       3: dup
       4: invokespecial #37                 // Method java/lang/StringBuilder."<init>":()V
       7: ldc           #39                 // String Pos(x=
       9: invokevirtual #43                 // Method java/lang/StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;
      12: aload_0
      13: getfield      #13                 // Field x:I
      16: invokevirtual #46                 // Method java/lang/StringBuilder.append:(I)Ljava/lang/StringBuilder;
      19: ldc           #48                 // String , y=
      21: invokevirtual #43                 // Method java/lang/StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;
      24: aload_0
      25: getfield      #16                 // Field y:I
      28: invokevirtual #46                 // Method java/lang/StringBuilder.append:(I)Ljava/lang/StringBuilder;
      31: bipush        41
      33: invokevirtual #51                 // Method java/lang/StringBuilder.append:(C)Ljava/lang/StringBuilder;
      36: invokevirtual #53                 // Method java/lang/StringBuilder.toString:()Ljava/lang/String;
      39: areturn

  public int hashCode();
    Code:
       0: aload_0
       1: getfield      #13                 // Field x:I
       4: invokestatic  #59                 // 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 y:I
      16: invokestatic  #59                 // Method java/lang/Integer.hashCode:(I)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 Blizzards$Pos
      11: ifne          16
      14: iconst_0
      15: ireturn
      16: aload_1
      17: checkcast     #2                  // class Blizzards$Pos
      20: astore_2
      21: aload_0
      22: getfield      #13                 // Field x:I
      25: aload_2
      26: getfield      #13                 // Field x:I
      29: if_icmpeq     34
      32: iconst_0
      33: ireturn
      34: aload_0
      35: getfield      #16                 // Field y:I
      38: aload_2
      39: getfield      #16                 // Field y:I
      42: if_icmpeq     47
      45: iconst_0
      46: ireturn
      47: iconst_1
      48: ireturn
}

Compiled from "Blizzards.kt"
public final class BlizzardsKt {
  public static final void main();
    Code:
       0: getstatic     #12                 // Field Blizzards.INSTANCE:LBlizzards;
       3: invokevirtual #15                 // Method Blizzards.solve:()V
       6: return

  public static void main(java.lang.String[]);
    Code:
       0: invokestatic  #18                 // Method main:()V
       3: return
}

Compiled from "Blizzards.kt"
public final class Blizzards$Path implements java.lang.Comparable<Blizzards$Path> {
  private final Blizzards$Pos pos;

  private final Blizzards$Pos target;

  private final int turn;

  public Blizzards$Path(Blizzards$Pos, Blizzards$Pos, int);
    Code:
       0: aload_1
       1: ldc           #12                 // String pos
       3: invokestatic  #18                 // Method kotlin/jvm/internal/Intrinsics.checkNotNullParameter:(Ljava/lang/Object;Ljava/lang/String;)V
       6: aload_2
       7: ldc           #20                 // String target
       9: invokestatic  #18                 // Method kotlin/jvm/internal/Intrinsics.checkNotNullParameter:(Ljava/lang/Object;Ljava/lang/String;)V
      12: aload_0
      13: invokespecial #23                 // Method java/lang/Object."<init>":()V
      16: aload_0
      17: aload_1
      18: putfield      #26                 // Field pos:LBlizzards$Pos;
      21: aload_0
      22: aload_2
      23: putfield      #28                 // Field target:LBlizzards$Pos;
      26: aload_0
      27: iload_3
      28: putfield      #32                 // Field turn:I
      31: return

  public final Blizzards$Pos getPos();
    Code:
       0: aload_0
       1: getfield      #26                 // Field pos:LBlizzards$Pos;
       4: areturn

  public final Blizzards$Pos getTarget();
    Code:
       0: aload_0
       1: getfield      #28                 // Field target:LBlizzards$Pos;
       4: areturn

  public final int getTurn();
    Code:
       0: aload_0
       1: getfield      #32                 // Field turn:I
       4: ireturn

  public int compareTo(Blizzards$Path);
    Code:
       0: aload_1
       1: ldc           #43                 // String other
       3: invokestatic  #18                 // Method kotlin/jvm/internal/Intrinsics.checkNotNullParameter:(Ljava/lang/Object;Ljava/lang/String;)V
       6: aload_0
       7: invokespecial #46                 // Method minTurnsToTarget:()I
      10: aload_1
      11: invokespecial #46                 // Method minTurnsToTarget:()I
      14: invokestatic  #50                 // Method kotlin/jvm/internal/Intrinsics.compare:(II)I
      17: ireturn

  private final int minTurnsToTarget();
    Code:
       0: aload_0
       1: getfield      #28                 // Field target:LBlizzards$Pos;
       4: invokevirtual #55                 // Method Blizzards$Pos.getX:()I
       7: aload_0
       8: getfield      #26                 // Field pos:LBlizzards$Pos;
      11: invokevirtual #55                 // Method Blizzards$Pos.getX:()I
      14: isub
      15: invokestatic  #61                 // Method java/lang/Math.abs:(I)I
      18: aload_0
      19: getfield      #28                 // Field target:LBlizzards$Pos;
      22: invokevirtual #64                 // Method Blizzards$Pos.getY:()I
      25: aload_0
      26: getfield      #26                 // Field pos:LBlizzards$Pos;
      29: invokevirtual #64                 // Method Blizzards$Pos.getY:()I
      32: isub
      33: invokestatic  #61                 // Method java/lang/Math.abs:(I)I
      36: iadd
      37: aload_0
      38: getfield      #32                 // Field turn:I
      41: iadd
      42: ireturn

  public final Blizzards$Pos component1();
    Code:
       0: aload_0
       1: getfield      #26                 // Field pos:LBlizzards$Pos;
       4: areturn

  public final Blizzards$Pos component2();
    Code:
       0: aload_0
       1: getfield      #28                 // Field target:LBlizzards$Pos;
       4: areturn

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

  public final Blizzards$Path copy(Blizzards$Pos, Blizzards$Pos, int);
    Code:
       0: aload_1
       1: ldc           #12                 // String pos
       3: invokestatic  #18                 // Method kotlin/jvm/internal/Intrinsics.checkNotNullParameter:(Ljava/lang/Object;Ljava/lang/String;)V
       6: aload_2
       7: ldc           #20                 // String target
       9: invokestatic  #18                 // Method kotlin/jvm/internal/Intrinsics.checkNotNullParameter:(Ljava/lang/Object;Ljava/lang/String;)V
      12: new           #2                  // class Blizzards$Path
      15: dup
      16: aload_1
      17: aload_2
      18: iload_3
      19: invokespecial #71                 // Method "<init>":(LBlizzards$Pos;LBlizzards$Pos;I)V
      22: areturn

  public static Blizzards$Path copy$default(Blizzards$Path, Blizzards$Pos, Blizzards$Pos, int, int, java.lang.Object);
    Code:
       0: iload         4
       2: iconst_1
       3: iand
       4: ifeq          12
       7: aload_0
       8: getfield      #26                 // Field pos:LBlizzards$Pos;
      11: astore_1
      12: iload         4
      14: iconst_2
      15: iand
      16: ifeq          24
      19: aload_0
      20: getfield      #28                 // Field target:LBlizzards$Pos;
      23: astore_2
      24: iload         4
      26: iconst_4
      27: iand
      28: ifeq          36
      31: aload_0
      32: getfield      #32                 // Field turn:I
      35: istore_3
      36: aload_0
      37: aload_1
      38: aload_2
      39: iload_3
      40: invokevirtual #75                 // Method copy:(LBlizzards$Pos;LBlizzards$Pos;I)LBlizzards$Path;
      43: areturn

  public java.lang.String toString();
    Code:
       0: new           #79                 // class java/lang/StringBuilder
       3: dup
       4: invokespecial #80                 // Method java/lang/StringBuilder."<init>":()V
       7: ldc           #82                 // String Path(pos=
       9: invokevirtual #86                 // Method java/lang/StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;
      12: aload_0
      13: getfield      #26                 // Field pos:LBlizzards$Pos;
      16: invokevirtual #89                 // Method java/lang/StringBuilder.append:(Ljava/lang/Object;)Ljava/lang/StringBuilder;
      19: ldc           #91                 // String , target=
      21: invokevirtual #86                 // Method java/lang/StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;
      24: aload_0
      25: getfield      #28                 // Field target:LBlizzards$Pos;
      28: invokevirtual #89                 // Method java/lang/StringBuilder.append:(Ljava/lang/Object;)Ljava/lang/StringBuilder;
      31: ldc           #93                 // String , turn=
      33: invokevirtual #86                 // Method java/lang/StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;
      36: aload_0
      37: getfield      #32                 // Field turn:I
      40: invokevirtual #96                 // Method java/lang/StringBuilder.append:(I)Ljava/lang/StringBuilder;
      43: bipush        41
      45: invokevirtual #99                 // Method java/lang/StringBuilder.append:(C)Ljava/lang/StringBuilder;
      48: invokevirtual #101                // Method java/lang/StringBuilder.toString:()Ljava/lang/String;
      51: areturn

  public int hashCode();
    Code:
       0: aload_0
       1: getfield      #26                 // Field pos:LBlizzards$Pos;
       4: invokevirtual #104                // Method Blizzards$Pos.hashCode:()I
       7: istore_1
       8: iload_1
       9: bipush        31
      11: imul
      12: aload_0
      13: getfield      #28                 // Field target:LBlizzards$Pos;
      16: invokevirtual #104                // Method Blizzards$Pos.hashCode:()I
      19: iadd
      20: istore_1
      21: iload_1
      22: bipush        31
      24: imul
      25: aload_0
      26: getfield      #32                 // Field turn:I
      29: invokestatic  #108                // 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 Blizzards$Path
      11: ifne          16
      14: iconst_0
      15: ireturn
      16: aload_1
      17: checkcast     #2                  // class Blizzards$Path
      20: astore_2
      21: aload_0
      22: getfield      #26                 // Field pos:LBlizzards$Pos;
      25: aload_2
      26: getfield      #26                 // Field pos:LBlizzards$Pos;
      29: invokestatic  #116                // Method kotlin/jvm/internal/Intrinsics.areEqual:(Ljava/lang/Object;Ljava/lang/Object;)Z
      32: ifne          37
      35: iconst_0
      36: ireturn
      37: aload_0
      38: getfield      #28                 // Field target:LBlizzards$Pos;
      41: aload_2
      42: getfield      #28                 // Field target:LBlizzards$Pos;
      45: invokestatic  #116                // Method kotlin/jvm/internal/Intrinsics.areEqual:(Ljava/lang/Object;Ljava/lang/Object;)Z
      48: ifne          53
      51: iconst_0
      52: ireturn
      53: aload_0
      54: getfield      #32                 // Field turn:I
      57: aload_2
      58: getfield      #32                 // Field turn:I
      61: if_icmpeq     66
      64: iconst_0
      65: ireturn
      66: iconst_1
      67: ireturn

  public int compareTo(java.lang.Object);
    Code:
       0: aload_0
       1: aload_1
       2: checkcast     #2                  // class Blizzards$Path
       5: invokevirtual #120                // Method compareTo:(LBlizzards$Path;)I
       8: ireturn
}

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

  static {};
    Code:
       0: invokestatic  #14                 // Method Blizzards$Wind.values:()[LBlizzards$Wind;
       3: arraylength
       4: newarray       int
       6: astore_0
       7: nop
       8: aload_0
       9: getstatic     #18                 // Field Blizzards$Wind.North:LBlizzards$Wind;
      12: invokevirtual #22                 // Method Blizzards$Wind.ordinal:()I
      15: iconst_1
      16: iastore
      17: goto          21
      20: astore_1
      21: nop
      22: aload_0
      23: getstatic     #25                 // Field Blizzards$Wind.East:LBlizzards$Wind;
      26: invokevirtual #22                 // Method Blizzards$Wind.ordinal:()I
      29: iconst_2
      30: iastore
      31: goto          35
      34: astore_1
      35: nop
      36: aload_0
      37: getstatic     #28                 // Field Blizzards$Wind.South:LBlizzards$Wind;
      40: invokevirtual #22                 // Method Blizzards$Wind.ordinal:()I
      43: iconst_3
      44: iastore
      45: goto          49
      48: astore_1
      49: nop
      50: aload_0
      51: getstatic     #31                 // Field Blizzards$Wind.West:LBlizzards$Wind;
      54: invokevirtual #22                 // Method Blizzards$Wind.ordinal:()I
      57: iconst_4
      58: iastore
      59: goto          63
      62: astore_1
      63: aload_0
      64: putstatic     #35                 // Field $EnumSwitchMapping$0:[I
      67: return
    Exception table:
       from    to  target type
           7    17    20   Class java/lang/NoSuchFieldError
          21    31    34   Class java/lang/NoSuchFieldError
          35    45    48   Class java/lang/NoSuchFieldError
          49    59    62   Class java/lang/NoSuchFieldError
}

Compiled from "Blizzards.kt"
final class Blizzards {
  public static final Blizzards INSTANCE;

  private Blizzards();
    Code:
       0: aload_0
       1: invokespecial #8                  // Method java/lang/Object."<init>":()V
       4: return

  public final void solve();
    Code:
       0: aconst_null
       1: astore_1
       2: aload_0
       3: invokespecial #15                 // Method readInput:()LBlizzards$Board;
       6: astore_1
       7: new           #17                 // class Blizzards$Pos
      10: dup
      11: iconst_1
      12: iconst_0
      13: invokespecial #20                 // Method Blizzards$Pos."<init>":(II)V
      16: astore_2
      17: aload_1
      18: invokevirtual #26                 // Method Blizzards$Board.getCells:()Ljava/util/List;
      21: invokestatic  #32                 // Method kotlin/collections/CollectionsKt.last:(Ljava/util/List;)Ljava/lang/Object;
      24: checkcast     #34                 // class java/util/List
      27: astore        4
      29: iconst_0
      30: istore        5
      32: iconst_0
      33: istore        6
      35: aload         4
      37: invokeinterface #38,  1           // InterfaceMethod java/util/List.iterator:()Ljava/util/Iterator;
      42: astore        7
      44: aload         7
      46: invokeinterface #44,  1           // InterfaceMethod java/util/Iterator.hasNext:()Z
      51: ifeq          92
      54: aload         7
      56: invokeinterface #48,  1           // InterfaceMethod java/util/Iterator.next:()Ljava/lang/Object;
      61: astore        8
      63: aload         8
      65: checkcast     #50                 // class Blizzards$Cell
      68: astore        9
      70: iconst_0
      71: istore        10
      73: aload         9
      75: instanceof    #52                 // class Blizzards$Space
      78: ifeq          86
      81: iload         6
      83: goto          93
      86: iinc          6, 1
      89: goto          44
      92: iconst_m1
      93: aload_1
      94: invokevirtual #26                 // Method Blizzards$Board.getCells:()Ljava/util/List;
      97: invokeinterface #56,  1           // InterfaceMethod java/util/List.size:()I
     102: iconst_1
     103: isub
     104: istore        14
     106: istore        15
     108: new           #17                 // class Blizzards$Pos
     111: dup
     112: iload         15
     114: iload         14
     116: invokespecial #20                 // Method Blizzards$Pos."<init>":(II)V
     119: astore_3
     120: new           #58                 // class Blizzards$Path
     123: dup
     124: aload_2
     125: aload_3
     126: iconst_0
     127: invokespecial #61                 // Method Blizzards$Path."<init>":(LBlizzards$Pos;LBlizzards$Pos;I)V
     130: astore        4
     132: aload_0
     133: aload         4
     135: aload_1
     136: invokespecial #65                 // Method findPath:(LBlizzards$Path;LBlizzards$Board;)I
     139: istore        5
     141: new           #67                 // class java/lang/StringBuilder
     144: dup
     145: invokespecial #68                 // Method java/lang/StringBuilder."<init>":()V
     148: ldc           #70                 // String Best path S->F takes
     150: invokevirtual #74                 // Method java/lang/StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;
     153: iload         5
     155: invokevirtual #77                 // Method java/lang/StringBuilder.append:(I)Ljava/lang/StringBuilder;
     158: ldc           #79                 // String  steps
     160: invokevirtual #74                 // Method java/lang/StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;
     163: invokevirtual #83                 // Method java/lang/StringBuilder.toString:()Ljava/lang/String;
     166: getstatic     #89                 // Field java/lang/System.out:Ljava/io/PrintStream;
     169: swap
     170: invokevirtual #95                 // Method java/io/PrintStream.println:(Ljava/lang/Object;)V
     173: new           #97                 // class kotlin/ranges/IntRange
     176: dup
     177: iconst_1
     178: iload         5
     180: invokespecial #98                 // Method kotlin/ranges/IntRange."<init>":(II)V
     183: checkcast     #100                // class java/lang/Iterable
     186: astore        6
     188: iconst_0
     189: istore        7
     191: aload         6
     193: invokeinterface #101,  1          // InterfaceMethod java/lang/Iterable.iterator:()Ljava/util/Iterator;
     198: astore        8
     200: aload         8
     202: invokeinterface #44,  1           // InterfaceMethod java/util/Iterator.hasNext:()Z
     207: ifeq          236
     210: aload         8
     212: checkcast     #103                // class kotlin/collections/IntIterator
     215: invokevirtual #106                // Method kotlin/collections/IntIterator.nextInt:()I
     218: istore        9
     220: iload         9
     222: istore        10
     224: iconst_0
     225: istore        11
     227: aload_1
     228: invokevirtual #108                // Method Blizzards$Board.next:()LBlizzards$Board;
     231: astore_1
     232: nop
     233: goto          200
     236: nop
     237: new           #58                 // class Blizzards$Path
     240: dup
     241: aload_3
     242: aload_2
     243: iconst_0
     244: invokespecial #61                 // Method Blizzards$Path."<init>":(LBlizzards$Pos;LBlizzards$Pos;I)V
     247: astore        6
     249: aload_0
     250: aload         6
     252: aload_1
     253: invokespecial #65                 // Method findPath:(LBlizzards$Path;LBlizzards$Board;)I
     256: istore        7
     258: new           #67                 // class java/lang/StringBuilder
     261: dup
     262: invokespecial #68                 // Method java/lang/StringBuilder."<init>":()V
     265: ldc           #110                // String Best path F->S takes
     267: invokevirtual #74                 // Method java/lang/StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;
     270: iload         7
     272: invokevirtual #77                 // Method java/lang/StringBuilder.append:(I)Ljava/lang/StringBuilder;
     275: ldc           #79                 // String  steps
     277: invokevirtual #74                 // Method java/lang/StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;
     280: invokevirtual #83                 // Method java/lang/StringBuilder.toString:()Ljava/lang/String;
     283: getstatic     #89                 // Field java/lang/System.out:Ljava/io/PrintStream;
     286: swap
     287: invokevirtual #95                 // Method java/io/PrintStream.println:(Ljava/lang/Object;)V
     290: new           #97                 // class kotlin/ranges/IntRange
     293: dup
     294: iconst_1
     295: iload         7
     297: invokespecial #98                 // Method kotlin/ranges/IntRange."<init>":(II)V
     300: checkcast     #100                // class java/lang/Iterable
     303: astore        8
     305: iconst_0
     306: istore        9
     308: aload         8
     310: invokeinterface #101,  1          // InterfaceMethod java/lang/Iterable.iterator:()Ljava/util/Iterator;
     315: astore        10
     317: aload         10
     319: invokeinterface #44,  1           // InterfaceMethod java/util/Iterator.hasNext:()Z
     324: ifeq          353
     327: aload         10
     329: checkcast     #103                // class kotlin/collections/IntIterator
     332: invokevirtual #106                // Method kotlin/collections/IntIterator.nextInt:()I
     335: istore        11
     337: iload         11
     339: istore        12
     341: iconst_0
     342: istore        13
     344: aload_1
     345: invokevirtual #108                // Method Blizzards$Board.next:()LBlizzards$Board;
     348: astore_1
     349: nop
     350: goto          317
     353: nop
     354: aload_0
     355: aload         4
     357: aload_1
     358: invokespecial #65                 // Method findPath:(LBlizzards$Path;LBlizzards$Board;)I
     361: istore        8
     363: new           #67                 // class java/lang/StringBuilder
     366: dup
     367: invokespecial #68                 // Method java/lang/StringBuilder."<init>":()V
     370: ldc           #112                // String Best path S->F (again) takes
     372: invokevirtual #74                 // Method java/lang/StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;
     375: iload         8
     377: invokevirtual #77                 // Method java/lang/StringBuilder.append:(I)Ljava/lang/StringBuilder;
     380: ldc           #79                 // String  steps
     382: invokevirtual #74                 // Method java/lang/StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;
     385: invokevirtual #83                 // Method java/lang/StringBuilder.toString:()Ljava/lang/String;
     388: getstatic     #89                 // Field java/lang/System.out:Ljava/io/PrintStream;
     391: swap
     392: invokevirtual #95                 // Method java/io/PrintStream.println:(Ljava/lang/Object;)V
     395: new           #67                 // class java/lang/StringBuilder
     398: dup
     399: invokespecial #68                 // Method java/lang/StringBuilder."<init>":()V
     402: ldc           #114                // String Total:
     404: invokevirtual #74                 // Method java/lang/StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;
     407: iload         5
     409: iload         7
     411: iadd
     412: iload         8
     414: iadd
     415: invokevirtual #77                 // Method java/lang/StringBuilder.append:(I)Ljava/lang/StringBuilder;
     418: invokevirtual #83                 // Method java/lang/StringBuilder.toString:()Ljava/lang/String;
     421: getstatic     #89                 // Field java/lang/System.out:Ljava/io/PrintStream;
     424: swap
     425: invokevirtual #95                 // Method java/io/PrintStream.println:(Ljava/lang/Object;)V
     428: return

  private final int findPath(Blizzards$Path, Blizzards$Board);
    Code:
       0: iconst_1
       1: anewarray     #22                 // class Blizzards$Board
       4: astore        4
       6: aload         4
       8: iconst_0
       9: aload_2
      10: aastore
      11: aload         4
      13: invokestatic  #144                // Method kotlin/collections/CollectionsKt.mutableListOf:([Ljava/lang/Object;)Ljava/util/List;
      16: astore_3
      17: new           #146                // class java/util/PriorityQueue
      20: dup
      21: invokespecial #147                // Method java/util/PriorityQueue."<init>":()V
      24: astore        4
      26: new           #149                // class java/util/LinkedHashSet
      29: dup
      30: invokespecial #150                // Method java/util/LinkedHashSet."<init>":()V
      33: checkcast     #152                // class java/util/Set
      36: astore        5
      38: aload         4
      40: aload_1
      41: invokevirtual #156                // Method java/util/PriorityQueue.add:(Ljava/lang/Object;)Z
      44: pop
      45: aload         4
      47: checkcast     #158                // class java/util/Collection
      50: invokeinterface #161,  1          // InterfaceMethod java/util/Collection.isEmpty:()Z
      55: ifne          62
      58: iconst_1
      59: goto          63
      62: iconst_0
      63: ifeq          556
      66: aload         4
      68: invokevirtual #164                // Method java/util/PriorityQueue.remove:()Ljava/lang/Object;
      71: checkcast     #58                 // class Blizzards$Path
      74: astore        6
      76: aload         6
      78: invokevirtual #168                // Method Blizzards$Path.getPos:()LBlizzards$Pos;
      81: aload         6
      83: invokevirtual #171                // Method Blizzards$Path.getTarget:()LBlizzards$Pos;
      86: invokestatic  #177                // Method kotlin/jvm/internal/Intrinsics.areEqual:(Ljava/lang/Object;Ljava/lang/Object;)Z
      89: ifeq          98
      92: aload         6
      94: invokevirtual #180                // Method Blizzards$Path.getTurn:()I
      97: ireturn
      98: aload         5
     100: aload         6
     102: invokeinterface #183,  2          // InterfaceMethod java/util/Set.contains:(Ljava/lang/Object;)Z
     107: ifne          45
     110: aload         5
     112: aload         6
     114: invokestatic  #186                // Method kotlin/jvm/internal/Intrinsics.checkNotNull:(Ljava/lang/Object;)V
     117: aload         6
     119: invokeinterface #187,  2          // InterfaceMethod java/util/Set.add:(Ljava/lang/Object;)Z
     124: pop
     125: aload         6
     127: invokevirtual #180                // Method Blizzards$Path.getTurn:()I
     130: iconst_1
     131: iadd
     132: istore        7
     134: aload_3
     135: invokeinterface #56,  1           // InterfaceMethod java/util/List.size:()I
     140: iload         7
     142: if_icmpne     162
     145: aload_3
     146: aload_3
     147: invokestatic  #32                 // Method kotlin/collections/CollectionsKt.last:(Ljava/util/List;)Ljava/lang/Object;
     150: checkcast     #22                 // class Blizzards$Board
     153: invokevirtual #108                // Method Blizzards$Board.next:()LBlizzards$Board;
     156: invokeinterface #188,  2          // InterfaceMethod java/util/List.add:(Ljava/lang/Object;)Z
     161: pop
     162: aload_3
     163: iload         7
     165: invokeinterface #192,  2          // InterfaceMethod java/util/List.get:(I)Ljava/lang/Object;
     170: checkcast     #22                 // class Blizzards$Board
     173: astore        8
     175: iconst_5
     176: anewarray     #17                 // class Blizzards$Pos
     179: astore        10
     181: aload         10
     183: iconst_0
     184: aload         6
     186: invokevirtual #168                // Method Blizzards$Path.getPos:()LBlizzards$Pos;
     189: aastore
     190: aload         10
     192: iconst_1
     193: new           #17                 // class Blizzards$Pos
     196: dup
     197: aload         6
     199: invokevirtual #168                // Method Blizzards$Path.getPos:()LBlizzards$Pos;
     202: invokevirtual #195                // Method Blizzards$Pos.getX:()I
     205: iconst_1
     206: isub
     207: aload         6
     209: invokevirtual #168                // Method Blizzards$Path.getPos:()LBlizzards$Pos;
     212: invokevirtual #198                // Method Blizzards$Pos.getY:()I
     215: invokespecial #20                 // Method Blizzards$Pos."<init>":(II)V
     218: aastore
     219: aload         10
     221: iconst_2
     222: new           #17                 // class Blizzards$Pos
     225: dup
     226: aload         6
     228: invokevirtual #168                // Method Blizzards$Path.getPos:()LBlizzards$Pos;
     231: invokevirtual #195                // Method Blizzards$Pos.getX:()I
     234: iconst_1
     235: iadd
     236: aload         6
     238: invokevirtual #168                // Method Blizzards$Path.getPos:()LBlizzards$Pos;
     241: invokevirtual #198                // Method Blizzards$Pos.getY:()I
     244: invokespecial #20                 // Method Blizzards$Pos."<init>":(II)V
     247: aastore
     248: aload         10
     250: iconst_3
     251: new           #17                 // class Blizzards$Pos
     254: dup
     255: aload         6
     257: invokevirtual #168                // Method Blizzards$Path.getPos:()LBlizzards$Pos;
     260: invokevirtual #195                // Method Blizzards$Pos.getX:()I
     263: aload         6
     265: invokevirtual #168                // Method Blizzards$Path.getPos:()LBlizzards$Pos;
     268: invokevirtual #198                // Method Blizzards$Pos.getY:()I
     271: iconst_1
     272: isub
     273: invokespecial #20                 // Method Blizzards$Pos."<init>":(II)V
     276: aastore
     277: aload         10
     279: iconst_4
     280: new           #17                 // class Blizzards$Pos
     283: dup
     284: aload         6
     286: invokevirtual #168                // Method Blizzards$Path.getPos:()LBlizzards$Pos;
     289: invokevirtual #195                // Method Blizzards$Pos.getX:()I
     292: aload         6
     294: invokevirtual #168                // Method Blizzards$Path.getPos:()LBlizzards$Pos;
     297: invokevirtual #198                // Method Blizzards$Pos.getY:()I
     300: iconst_1
     301: iadd
     302: invokespecial #20                 // Method Blizzards$Pos."<init>":(II)V
     305: aastore
     306: aload         10
     308: invokestatic  #201                // Method kotlin/collections/CollectionsKt.listOf:([Ljava/lang/Object;)Ljava/util/List;
     311: checkcast     #100                // class java/lang/Iterable
     314: astore        10
     316: nop
     317: iconst_0
     318: istore        11
     320: aload         10
     322: astore        12
     324: new           #203                // class java/util/ArrayList
     327: dup
     328: invokespecial #204                // Method java/util/ArrayList."<init>":()V
     331: checkcast     #158                // class java/util/Collection
     334: astore        13
     336: iconst_0
     337: istore        14
     339: aload         12
     341: invokeinterface #101,  1          // InterfaceMethod java/lang/Iterable.iterator:()Ljava/util/Iterator;
     346: astore        15
     348: aload         15
     350: invokeinterface #44,  1           // InterfaceMethod java/util/Iterator.hasNext:()Z
     355: ifeq          469
     358: aload         15
     360: invokeinterface #48,  1           // InterfaceMethod java/util/Iterator.next:()Ljava/lang/Object;
     365: astore        16
     367: aload         16
     369: checkcast     #17                 // class Blizzards$Pos
     372: astore        17
     374: iconst_0
     375: istore        18
     377: aload         8
     379: invokevirtual #26                 // Method Blizzards$Board.getCells:()Ljava/util/List;
     382: aload         17
     384: invokevirtual #198                // Method Blizzards$Pos.getY:()I
     387: invokestatic  #208                // Method kotlin/collections/CollectionsKt.getOrNull:(Ljava/util/List;I)Ljava/lang/Object;
     390: checkcast     #34                 // class java/util/List
     393: dup
     394: ifnull        411
     397: aload         17
     399: invokevirtual #195                // Method Blizzards$Pos.getX:()I
     402: invokestatic  #208                // Method kotlin/collections/CollectionsKt.getOrNull:(Ljava/util/List;I)Ljava/lang/Object;
     405: checkcast     #50                 // class Blizzards$Cell
     408: goto          413
     411: pop
     412: aconst_null
     413: astore        19
     415: aload         19
     417: instanceof    #52                 // class Blizzards$Space
     420: ifeq          431
     423: aload         19
     425: checkcast     #52                 // class Blizzards$Space
     428: goto          432
     431: aconst_null
     432: dup
     433: ifnull        451
     436: invokevirtual #211                // Method Blizzards$Space.getWinds:()Ljava/util/List;
     439: dup
     440: ifnull        451
     443: invokeinterface #212,  1          // InterfaceMethod java/util/List.isEmpty:()Z
     448: goto          453
     451: pop
     452: iconst_0
     453: ifeq          348
     456: aload         13
     458: aload         16
     460: invokeinterface #213,  2          // InterfaceMethod java/util/Collection.add:(Ljava/lang/Object;)Z
     465: pop
     466: goto          348
     469: aload         13
     471: checkcast     #34                 // class java/util/List
     474: nop
     475: astore        9
     477: aload         9
     479: checkcast     #100                // class java/lang/Iterable
     482: astore        10
     484: iconst_0
     485: istore        11
     487: aload         10
     489: invokeinterface #101,  1          // InterfaceMethod java/lang/Iterable.iterator:()Ljava/util/Iterator;
     494: astore        12
     496: aload         12
     498: invokeinterface #44,  1           // InterfaceMethod java/util/Iterator.hasNext:()Z
     503: ifeq          552
     506: aload         12
     508: invokeinterface #48,  1           // InterfaceMethod java/util/Iterator.next:()Ljava/lang/Object;
     513: astore        13
     515: aload         13
     517: checkcast     #17                 // class Blizzards$Pos
     520: astore        14
     522: iconst_0
     523: istore        15
     525: aload         4
     527: new           #58                 // class Blizzards$Path
     530: dup
     531: aload         14
     533: aload         6
     535: invokevirtual #171                // Method Blizzards$Path.getTarget:()LBlizzards$Pos;
     538: iload         7
     540: invokespecial #61                 // Method Blizzards$Path."<init>":(LBlizzards$Pos;LBlizzards$Pos;I)V
     543: invokevirtual #156                // Method java/util/PriorityQueue.add:(Ljava/lang/Object;)Z
     546: pop
     547: nop
     548: nop
     549: goto          496
     552: nop
     553: goto          45
     556: iconst_m1
     557: ireturn

  private final Blizzards$Board readInput();
    Code:
       0: getstatic     #240                // Field Blizzards$readInput$cells$1.INSTANCE:LBlizzards$readInput$cells$1;
       3: checkcast     #242                // class kotlin/jvm/functions/Function0
       6: invokestatic  #248                // Method kotlin/sequences/SequencesKt.generateSequence:(Lkotlin/jvm/functions/Function0;)Lkotlin/sequences/Sequence;
       9: invokedynamic #267,  0            // InvokeDynamic #0:invoke:()Lkotlin/jvm/functions/Function1;
      14: invokestatic  #271                // Method kotlin/sequences/SequencesKt.map:(Lkotlin/sequences/Sequence;Lkotlin/jvm/functions/Function1;)Lkotlin/sequences/Sequence;
      17: invokestatic  #275                // Method kotlin/sequences/SequencesKt.toList:(Lkotlin/sequences/Sequence;)Ljava/util/List;
      20: astore_1
      21: new           #22                 // class Blizzards$Board
      24: dup
      25: aload_1
      26: invokespecial #278                // Method Blizzards$Board."<init>":(Ljava/util/List;)V
      29: areturn

  private static final java.util.List readInput$lambda$6(java.lang.String);
    Code:
       0: aload_0
       1: ldc_w         #281                // String line
       4: invokestatic  #285                // Method kotlin/jvm/internal/Intrinsics.checkNotNullParameter:(Ljava/lang/Object;Ljava/lang/String;)V
       7: aload_0
       8: invokevirtual #291                // Method java/lang/String.toCharArray:()[C
      11: dup
      12: ldc_w         #293                // String toCharArray(...)
      15: invokestatic  #296                // Method kotlin/jvm/internal/Intrinsics.checkNotNullExpressionValue:(Ljava/lang/Object;Ljava/lang/String;)V
      18: astore_1
      19: nop
      20: iconst_0
      21: istore_2
      22: aload_1
      23: astore_3
      24: new           #203                // class java/util/ArrayList
      27: dup
      28: aload_1
      29: arraylength
      30: invokespecial #299                // Method java/util/ArrayList."<init>":(I)V
      33: checkcast     #158                // class java/util/Collection
      36: astore        4
      38: iconst_0
      39: istore        5
      41: iconst_0
      42: istore        6
      44: aload_3
      45: arraylength
      46: istore        7
      48: iload         6
      50: iload         7
      52: if_icmpge     333
      55: aload_3
      56: iload         6
      58: caload
      59: istore        8
      61: aload         4
      63: iload         8
      65: istore        9
      67: astore        12
      69: iconst_0
      70: istore        10
      72: iload         9
      74: lookupswitch  { // 6
                    35: 132
                    46: 141
                    60: 226
                    62: 195
                    94: 164
                   118: 257
               default: 288
          }
     132: getstatic     #304                // Field Blizzards$Wall.INSTANCE:LBlizzards$Wall;
     135: checkcast     #50                 // class Blizzards$Cell
     138: goto          317
     141: new           #52                 // class Blizzards$Space
     144: dup
     145: new           #203                // class java/util/ArrayList
     148: dup
     149: invokespecial #204                // Method java/util/ArrayList."<init>":()V
     152: checkcast     #34                 // class java/util/List
     155: invokespecial #305                // Method Blizzards$Space."<init>":(Ljava/util/List;)V
     158: checkcast     #50                 // class Blizzards$Cell
     161: goto          317
     164: new           #52                 // class Blizzards$Space
     167: dup
     168: iconst_1
     169: anewarray     #307                // class Blizzards$Wind
     172: astore        11
     174: aload         11
     176: iconst_0
     177: getstatic     #311                // Field Blizzards$Wind.North:LBlizzards$Wind;
     180: aastore
     181: aload         11
     183: invokestatic  #144                // Method kotlin/collections/CollectionsKt.mutableListOf:([Ljava/lang/Object;)Ljava/util/List;
     186: invokespecial #305                // Method Blizzards$Space."<init>":(Ljava/util/List;)V
     189: checkcast     #50                 // class Blizzards$Cell
     192: goto          317
     195: new           #52                 // class Blizzards$Space
     198: dup
     199: iconst_1
     200: anewarray     #307                // class Blizzards$Wind
     203: astore        11
     205: aload         11
     207: iconst_0
     208: getstatic     #314                // Field Blizzards$Wind.East:LBlizzards$Wind;
     211: aastore
     212: aload         11
     214: invokestatic  #144                // Method kotlin/collections/CollectionsKt.mutableListOf:([Ljava/lang/Object;)Ljava/util/List;
     217: invokespecial #305                // Method Blizzards$Space."<init>":(Ljava/util/List;)V
     220: checkcast     #50                 // class Blizzards$Cell
     223: goto          317
     226: new           #52                 // class Blizzards$Space
     229: dup
     230: iconst_1
     231: anewarray     #307                // class Blizzards$Wind
     234: astore        11
     236: aload         11
     238: iconst_0
     239: getstatic     #317                // Field Blizzards$Wind.West:LBlizzards$Wind;
     242: aastore
     243: aload         11
     245: invokestatic  #144                // Method kotlin/collections/CollectionsKt.mutableListOf:([Ljava/lang/Object;)Ljava/util/List;
     248: invokespecial #305                // Method Blizzards$Space."<init>":(Ljava/util/List;)V
     251: checkcast     #50                 // class Blizzards$Cell
     254: goto          317
     257: new           #52                 // class Blizzards$Space
     260: dup
     261: iconst_1
     262: anewarray     #307                // class Blizzards$Wind
     265: astore        11
     267: aload         11
     269: iconst_0
     270: getstatic     #320                // Field Blizzards$Wind.South:LBlizzards$Wind;
     273: aastore
     274: aload         11
     276: invokestatic  #144                // Method kotlin/collections/CollectionsKt.mutableListOf:([Ljava/lang/Object;)Ljava/util/List;
     279: invokespecial #305                // Method Blizzards$Space."<init>":(Ljava/util/List;)V
     282: checkcast     #50                 // class Blizzards$Cell
     285: goto          317
     288: new           #322                // class java/lang/Error
     291: dup
     292: new           #67                 // class java/lang/StringBuilder
     295: dup
     296: invokespecial #68                 // Method java/lang/StringBuilder."<init>":()V
     299: ldc_w         #324                // String Failed to parse char
     302: invokevirtual #74                 // Method java/lang/StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;
     305: iload         9
     307: invokevirtual #327                // Method java/lang/StringBuilder.append:(C)Ljava/lang/StringBuilder;
     310: invokevirtual #83                 // Method java/lang/StringBuilder.toString:()Ljava/lang/String;
     313: invokespecial #330                // Method java/lang/Error."<init>":(Ljava/lang/String;)V
     316: athrow
     317: nop
     318: aload         12
     320: swap
     321: invokeinterface #213,  2          // InterfaceMethod java/util/Collection.add:(Ljava/lang/Object;)Z
     326: pop
     327: iinc          6, 1
     330: goto          48
     333: aload         4
     335: checkcast     #34                 // class java/util/List
     338: nop
     339: areturn

  static {};
    Code:
       0: new           #2                  // class Blizzards
       3: dup
       4: invokespecial #343                // Method "<init>":()V
       7: putstatic     #345                // Field INSTANCE:LBlizzards;
      10: return
}

Compiled from "Blizzards.kt"
public final class Blizzards$Wall implements Blizzards$Cell {
  public static final Blizzards$Wall INSTANCE;

  private Blizzards$Wall();
    Code:
       0: aload_0
       1: invokespecial #10                 // Method java/lang/Object."<init>":()V
       4: return

  static {};
    Code:
       0: new           #2                  // class Blizzards$Wall
       3: dup
       4: invokespecial #14                 // Method "<init>":()V
       7: putstatic     #17                 // Field INSTANCE:LBlizzards$Wall;
      10: return
}