import java.io.*
import java.util.*
fun print_day_15() {
    val yellow = "\u001B[33m"
    val reset = "\u001b[0m"
    val green = "\u001B[32m"
    println(yellow + "-".repeat(25) + "Advent of Code - Day 15" + "-".repeat(25) + reset)
    println(green)
    val process = Runtime.getRuntime().exec("figlet Chiton -c -f small")
    val reader = BufferedReader(InputStreamReader(process.inputStream))
    reader.forEachLine { println(it) }
    println(reset)
    println(yellow + "-".repeat(33) + "Output" + "-".repeat(33) + reset + "\n")
}
fun main() {
    print_day_15()
    Day15().part_1()
    Day15().part_2()
    println("\n" + "\u001B[33m" + "=".repeat(72) + "\u001b[0m" + "\n")
}

class Day15 {
    data class Node(val x:Int = 0, val y:Int = 0, val dist: Int = 0)

    fun part_1() {

        val grid = File("../Input/day15.txt").readLines().map { it.toCharArray().map{ it.digitToInt() } }
        print("Puzzle 1: ")
        findShortestPath(grid)
    }

    private fun findShortestPath(grid: List<List<Int>>) {
        val pathways =  Array(grid.size) { Array(grid[0].size) { Int.MAX_VALUE } }
        val queue = PriorityQueue<Node> { nodeA, nodeB -> nodeA.dist - nodeB.dist }

        pathways[0][0] = 0
        queue.add(Node(0,0, 0))

        while(queue.isNotEmpty()) {
            val (x, y, dist) = queue.poll()
            listOf(x to y + 1, x to y - 1, x + 1 to y, x - 1 to y).forEach { (X, Y) ->
                if (X in grid.indices && Y in grid[0].indices && pathways[X][Y] > dist + grid[X][Y]) {
                    pathways[X][Y] = dist + grid[X][Y]
                    queue.add(Node(X, Y, pathways[X][Y]))
                }
            }
        }
        println(pathways.last().last())
    }

    fun part_2() {
        val input = File("../Input/day15.txt").readLines()
        val totalY = input.size
        val totalX = input.first().length

        val grid = (0 until totalY * 5).map { y ->
            (0 until totalX * 5).map { x ->
                val baseNum = input[y % totalY][x % totalX].digitToInt()
                val tileDistance = (x/totalX) + (y/totalY)
                if (baseNum + tileDistance < 10) baseNum + tileDistance else (baseNum + tileDistance) - 9
            }
        }
        print("Puzzle 2: ")
        findShortestPath(grid)
    }
}

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

  public final void part_1();
    Code:
       0: new           #13                 // class java/io/File
       3: dup
       4: ldc           #15                 // String ../Input/day15.txt
       6: invokespecial #18                 // Method java/io/File."<init>":(Ljava/lang/String;)V
       9: aconst_null
      10: iconst_1
      11: aconst_null
      12: invokestatic  #24                 // Method kotlin/io/FilesKt.readLines$default:(Ljava/io/File;Ljava/nio/charset/Charset;ILjava/lang/Object;)Ljava/util/List;
      15: checkcast     #26                 // class java/lang/Iterable
      18: astore_2
      19: iconst_0
      20: istore_3
      21: aload_2
      22: astore        4
      24: new           #28                 // class java/util/ArrayList
      27: dup
      28: aload_2
      29: bipush        10
      31: invokestatic  #34                 // Method kotlin/collections/CollectionsKt.collectionSizeOrDefault:(Ljava/lang/Iterable;I)I
      34: invokespecial #37                 // Method java/util/ArrayList."<init>":(I)V
      37: checkcast     #39                 // class java/util/Collection
      40: astore        5
      42: iconst_0
      43: istore        6
      45: aload         4
      47: invokeinterface #43,  1           // InterfaceMethod java/lang/Iterable.iterator:()Ljava/util/Iterator;
      52: astore        7
      54: aload         7
      56: invokeinterface #49,  1           // InterfaceMethod java/util/Iterator.hasNext:()Z
      61: ifeq          201
      64: aload         7
      66: invokeinterface #53,  1           // InterfaceMethod java/util/Iterator.next:()Ljava/lang/Object;
      71: astore        8
      73: aload         5
      75: aload         8
      77: checkcast     #55                 // class java/lang/String
      80: astore        9
      82: astore        22
      84: iconst_0
      85: istore        10
      87: aload         9
      89: invokevirtual #59                 // Method java/lang/String.toCharArray:()[C
      92: dup
      93: ldc           #61                 // String toCharArray(...)
      95: invokestatic  #67                 // Method kotlin/jvm/internal/Intrinsics.checkNotNullExpressionValue:(Ljava/lang/Object;Ljava/lang/String;)V
      98: astore        11
     100: nop
     101: iconst_0
     102: istore        12
     104: aload         11
     106: astore        13
     108: new           #28                 // class java/util/ArrayList
     111: dup
     112: aload         11
     114: arraylength
     115: invokespecial #37                 // Method java/util/ArrayList."<init>":(I)V
     118: checkcast     #39                 // class java/util/Collection
     121: astore        14
     123: iconst_0
     124: istore        15
     126: iconst_0
     127: istore        16
     129: aload         13
     131: arraylength
     132: istore        17
     134: iload         16
     136: iload         17
     138: if_icmpge     182
     141: aload         13
     143: iload         16
     145: caload
     146: istore        18
     148: aload         14
     150: iload         18
     152: istore        19
     154: astore        20
     156: iconst_0
     157: istore        21
     159: iload         19
     161: invokestatic  #73                 // Method kotlin/text/CharsKt.digitToInt:(C)I
     164: invokestatic  #79                 // Method java/lang/Integer.valueOf:(I)Ljava/lang/Integer;
     167: aload         20
     169: swap
     170: invokeinterface #83,  2           // InterfaceMethod java/util/Collection.add:(Ljava/lang/Object;)Z
     175: pop
     176: iinc          16, 1
     179: goto          134
     182: aload         14
     184: checkcast     #85                 // class java/util/List
     187: nop
     188: nop
     189: aload         22
     191: swap
     192: invokeinterface #83,  2           // InterfaceMethod java/util/Collection.add:(Ljava/lang/Object;)Z
     197: pop
     198: goto          54
     201: aload         5
     203: checkcast     #85                 // class java/util/List
     206: nop
     207: astore_1
     208: ldc           #87                 // String Puzzle 1:
     210: getstatic     #93                 // Field java/lang/System.out:Ljava/io/PrintStream;
     213: swap
     214: invokevirtual #99                 // Method java/io/PrintStream.print:(Ljava/lang/Object;)V
     217: aload_0
     218: aload_1
     219: invokespecial #103                // Method findShortestPath:(Ljava/util/List;)V
     222: return

  private final void findShortestPath(java.util.List<? extends java.util.List<java.lang.Integer>>);
    Code:
       0: iconst_0
       1: istore_3
       2: aload_1
       3: invokeinterface #127,  1          // InterfaceMethod java/util/List.size:()I
       8: istore        4
      10: iload         4
      12: anewarray     #129                // class "[Ljava/lang/Integer;"
      15: astore        5
      17: iload_3
      18: iload         4
      20: if_icmpge     101
      23: iload_3
      24: istore        6
      26: aload         5
      28: iload         6
      30: iconst_0
      31: istore        7
      33: aload_1
      34: iconst_0
      35: invokeinterface #133,  2          // InterfaceMethod java/util/List.get:(I)Ljava/lang/Object;
      40: checkcast     #85                 // class java/util/List
      43: invokeinterface #127,  1          // InterfaceMethod java/util/List.size:()I
      48: istore        8
      50: iload         8
      52: anewarray     #75                 // class java/lang/Integer
      55: astore        9
      57: istore        17
      59: astore        16
      61: iload         7
      63: iload         8
      65: if_icmpge     88
      68: iload         7
      70: istore        10
      72: aload         9
      74: iload         10
      76: ldc           #134                // int 2147483647
      78: invokestatic  #79                 // Method java/lang/Integer.valueOf:(I)Ljava/lang/Integer;
      81: aastore
      82: iinc          7, 1
      85: goto          61
      88: aload         16
      90: iload         17
      92: aload         9
      94: aastore
      95: iinc          3, 1
      98: goto          17
     101: aload         5
     103: astore_2
     104: new           #136                // class java/util/PriorityQueue
     107: dup
     108: invokedynamic #156,  0            // InvokeDynamic #0:invoke:()Lkotlin/jvm/functions/Function2;
     113: invokedynamic #167,  0            // InvokeDynamic #1:compare:(Lkotlin/jvm/functions/Function2;)Ljava/util/Comparator;
     118: invokespecial #170                // Method java/util/PriorityQueue."<init>":(Ljava/util/Comparator;)V
     121: astore_3
     122: aload_2
     123: iconst_0
     124: aaload
     125: iconst_0
     126: iconst_0
     127: invokestatic  #79                 // Method java/lang/Integer.valueOf:(I)Ljava/lang/Integer;
     130: aastore
     131: aload_3
     132: new           #172                // class Day15$Node
     135: dup
     136: iconst_0
     137: iconst_0
     138: iconst_0
     139: invokespecial #175                // Method Day15$Node."<init>":(III)V
     142: invokevirtual #176                // Method java/util/PriorityQueue.add:(Ljava/lang/Object;)Z
     145: pop
     146: aload_3
     147: checkcast     #39                 // class java/util/Collection
     150: invokeinterface #179,  1          // InterfaceMethod java/util/Collection.isEmpty:()Z
     155: ifne          162
     158: iconst_1
     159: goto          163
     162: iconst_0
     163: ifeq          537
     166: aload_3
     167: invokevirtual #182                // Method java/util/PriorityQueue.poll:()Ljava/lang/Object;
     170: checkcast     #172                // class Day15$Node
     173: astore        4
     175: aload         4
     177: invokevirtual #185                // Method Day15$Node.component1:()I
     180: istore        5
     182: aload         4
     184: invokevirtual #188                // Method Day15$Node.component2:()I
     187: istore        6
     189: aload         4
     191: invokevirtual #191                // Method Day15$Node.component3:()I
     194: istore        7
     196: iconst_4
     197: anewarray     #193                // class kotlin/Pair
     200: astore        8
     202: aload         8
     204: iconst_0
     205: iload         5
     207: invokestatic  #79                 // Method java/lang/Integer.valueOf:(I)Ljava/lang/Integer;
     210: iload         6
     212: iconst_1
     213: iadd
     214: invokestatic  #79                 // Method java/lang/Integer.valueOf:(I)Ljava/lang/Integer;
     217: invokestatic  #199                // Method kotlin/TuplesKt.to:(Ljava/lang/Object;Ljava/lang/Object;)Lkotlin/Pair;
     220: aastore
     221: aload         8
     223: iconst_1
     224: iload         5
     226: invokestatic  #79                 // Method java/lang/Integer.valueOf:(I)Ljava/lang/Integer;
     229: iload         6
     231: iconst_1
     232: isub
     233: invokestatic  #79                 // Method java/lang/Integer.valueOf:(I)Ljava/lang/Integer;
     236: invokestatic  #199                // Method kotlin/TuplesKt.to:(Ljava/lang/Object;Ljava/lang/Object;)Lkotlin/Pair;
     239: aastore
     240: aload         8
     242: iconst_2
     243: iload         5
     245: iconst_1
     246: iadd
     247: invokestatic  #79                 // Method java/lang/Integer.valueOf:(I)Ljava/lang/Integer;
     250: iload         6
     252: invokestatic  #79                 // Method java/lang/Integer.valueOf:(I)Ljava/lang/Integer;
     255: invokestatic  #199                // Method kotlin/TuplesKt.to:(Ljava/lang/Object;Ljava/lang/Object;)Lkotlin/Pair;
     258: aastore
     259: aload         8
     261: iconst_3
     262: iload         5
     264: iconst_1
     265: isub
     266: invokestatic  #79                 // Method java/lang/Integer.valueOf:(I)Ljava/lang/Integer;
     269: iload         6
     271: invokestatic  #79                 // Method java/lang/Integer.valueOf:(I)Ljava/lang/Integer;
     274: invokestatic  #199                // Method kotlin/TuplesKt.to:(Ljava/lang/Object;Ljava/lang/Object;)Lkotlin/Pair;
     277: aastore
     278: aload         8
     280: invokestatic  #203                // Method kotlin/collections/CollectionsKt.listOf:([Ljava/lang/Object;)Ljava/util/List;
     283: checkcast     #26                 // class java/lang/Iterable
     286: astore        8
     288: iconst_0
     289: istore        9
     291: aload         8
     293: invokeinterface #43,  1           // InterfaceMethod java/lang/Iterable.iterator:()Ljava/util/Iterator;
     298: astore        10
     300: aload         10
     302: invokeinterface #49,  1           // InterfaceMethod java/util/Iterator.hasNext:()Z
     307: ifeq          533
     310: aload         10
     312: invokeinterface #53,  1           // InterfaceMethod java/util/Iterator.next:()Ljava/lang/Object;
     317: astore        11
     319: aload         11
     321: checkcast     #193                // class kotlin/Pair
     324: astore        12
     326: iconst_0
     327: istore        13
     329: aload         12
     331: invokevirtual #205                // Method kotlin/Pair.component1:()Ljava/lang/Object;
     334: checkcast     #207                // class java/lang/Number
     337: invokevirtual #210                // Method java/lang/Number.intValue:()I
     340: istore        14
     342: aload         12
     344: invokevirtual #212                // Method kotlin/Pair.component2:()Ljava/lang/Object;
     347: checkcast     #207                // class java/lang/Number
     350: invokevirtual #210                // Method java/lang/Number.intValue:()I
     353: istore        15
     355: iconst_0
     356: iload         14
     358: if_icmpgt     383
     361: iload         14
     363: aload_1
     364: checkcast     #39                 // class java/util/Collection
     367: invokeinterface #213,  1          // InterfaceMethod java/util/Collection.size:()I
     372: if_icmpge     379
     375: iconst_1
     376: goto          384
     379: iconst_0
     380: goto          384
     383: iconst_0
     384: ifeq          528
     387: iconst_0
     388: iload         15
     390: if_icmpgt     421
     393: iload         15
     395: aload_1
     396: iconst_0
     397: invokeinterface #133,  2          // InterfaceMethod java/util/List.get:(I)Ljava/lang/Object;
     402: checkcast     #39                 // class java/util/Collection
     405: invokeinterface #213,  1          // InterfaceMethod java/util/Collection.size:()I
     410: if_icmpge     417
     413: iconst_1
     414: goto          422
     417: iconst_0
     418: goto          422
     421: iconst_0
     422: ifeq          528
     425: aload_2
     426: iload         14
     428: aaload
     429: iload         15
     431: aaload
     432: invokevirtual #214                // Method java/lang/Integer.intValue:()I
     435: iload         7
     437: aload_1
     438: iload         14
     440: invokeinterface #133,  2          // InterfaceMethod java/util/List.get:(I)Ljava/lang/Object;
     445: checkcast     #85                 // class java/util/List
     448: iload         15
     450: invokeinterface #133,  2          // InterfaceMethod java/util/List.get:(I)Ljava/lang/Object;
     455: checkcast     #207                // class java/lang/Number
     458: invokevirtual #210                // Method java/lang/Number.intValue:()I
     461: iadd
     462: if_icmple     528
     465: aload_2
     466: iload         14
     468: aaload
     469: iload         15
     471: iload         7
     473: aload_1
     474: iload         14
     476: invokeinterface #133,  2          // InterfaceMethod java/util/List.get:(I)Ljava/lang/Object;
     481: checkcast     #85                 // class java/util/List
     484: iload         15
     486: invokeinterface #133,  2          // InterfaceMethod java/util/List.get:(I)Ljava/lang/Object;
     491: checkcast     #207                // class java/lang/Number
     494: invokevirtual #210                // Method java/lang/Number.intValue:()I
     497: iadd
     498: invokestatic  #79                 // Method java/lang/Integer.valueOf:(I)Ljava/lang/Integer;
     501: aastore
     502: aload_3
     503: new           #172                // class Day15$Node
     506: dup
     507: iload         14
     509: iload         15
     511: aload_2
     512: iload         14
     514: aaload
     515: iload         15
     517: aaload
     518: invokevirtual #214                // Method java/lang/Integer.intValue:()I
     521: invokespecial #175                // Method Day15$Node."<init>":(III)V
     524: invokevirtual #176                // Method java/util/PriorityQueue.add:(Ljava/lang/Object;)Z
     527: pop
     528: nop
     529: nop
     530: goto          300
     533: nop
     534: goto          146
     537: aload_2
     538: checkcast     #216                // class "[Ljava/lang/Object;"
     541: invokestatic  #222                // Method kotlin/collections/ArraysKt.last:([Ljava/lang/Object;)Ljava/lang/Object;
     544: checkcast     #216                // class "[Ljava/lang/Object;"
     547: invokestatic  #222                // Method kotlin/collections/ArraysKt.last:([Ljava/lang/Object;)Ljava/lang/Object;
     550: checkcast     #207                // class java/lang/Number
     553: invokevirtual #210                // Method java/lang/Number.intValue:()I
     556: istore        4
     558: getstatic     #93                 // Field java/lang/System.out:Ljava/io/PrintStream;
     561: iload         4
     563: invokevirtual #225                // Method java/io/PrintStream.println:(I)V
     566: return

  public final void part_2();
    Code:
       0: new           #13                 // class java/io/File
       3: dup
       4: ldc           #15                 // String ../Input/day15.txt
       6: invokespecial #18                 // Method java/io/File."<init>":(Ljava/lang/String;)V
       9: aconst_null
      10: iconst_1
      11: aconst_null
      12: invokestatic  #24                 // Method kotlin/io/FilesKt.readLines$default:(Ljava/io/File;Ljava/nio/charset/Charset;ILjava/lang/Object;)Ljava/util/List;
      15: astore_1
      16: aload_1
      17: invokeinterface #127,  1          // InterfaceMethod java/util/List.size:()I
      22: istore_2
      23: aload_1
      24: invokestatic  #244                // Method kotlin/collections/CollectionsKt.first:(Ljava/util/List;)Ljava/lang/Object;
      27: checkcast     #55                 // class java/lang/String
      30: invokevirtual #247                // Method java/lang/String.length:()I
      33: istore_3
      34: iconst_0
      35: iload_2
      36: iconst_5
      37: imul
      38: invokestatic  #253                // Method kotlin/ranges/RangesKt.until:(II)Lkotlin/ranges/IntRange;
      41: checkcast     #26                 // class java/lang/Iterable
      44: astore        5
      46: iconst_0
      47: istore        6
      49: aload         5
      51: astore        7
      53: new           #28                 // class java/util/ArrayList
      56: dup
      57: aload         5
      59: bipush        10
      61: invokestatic  #34                 // Method kotlin/collections/CollectionsKt.collectionSizeOrDefault:(Ljava/lang/Iterable;I)I
      64: invokespecial #37                 // Method java/util/ArrayList."<init>":(I)V
      67: checkcast     #39                 // class java/util/Collection
      70: astore        8
      72: iconst_0
      73: istore        9
      75: aload         7
      77: invokeinterface #43,  1           // InterfaceMethod java/lang/Iterable.iterator:()Ljava/util/Iterator;
      82: astore        10
      84: aload         10
      86: invokeinterface #49,  1           // InterfaceMethod java/util/Iterator.hasNext:()Z
      91: ifeq          292
      94: aload         10
      96: checkcast     #255                // class kotlin/collections/IntIterator
      99: invokevirtual #258                // Method kotlin/collections/IntIterator.nextInt:()I
     102: istore        11
     104: aload         8
     106: iload         11
     108: istore        12
     110: astore        26
     112: iconst_0
     113: istore        13
     115: iconst_0
     116: iload_3
     117: iconst_5
     118: imul
     119: invokestatic  #253                // Method kotlin/ranges/RangesKt.until:(II)Lkotlin/ranges/IntRange;
     122: checkcast     #26                 // class java/lang/Iterable
     125: astore        14
     127: iconst_0
     128: istore        15
     130: aload         14
     132: astore        16
     134: new           #28                 // class java/util/ArrayList
     137: dup
     138: aload         14
     140: bipush        10
     142: invokestatic  #34                 // Method kotlin/collections/CollectionsKt.collectionSizeOrDefault:(Ljava/lang/Iterable;I)I
     145: invokespecial #37                 // Method java/util/ArrayList."<init>":(I)V
     148: checkcast     #39                 // class java/util/Collection
     151: astore        17
     153: iconst_0
     154: istore        18
     156: aload         16
     158: invokeinterface #43,  1           // InterfaceMethod java/lang/Iterable.iterator:()Ljava/util/Iterator;
     163: astore        19
     165: aload         19
     167: invokeinterface #49,  1           // InterfaceMethod java/util/Iterator.hasNext:()Z
     172: ifeq          273
     175: aload         19
     177: checkcast     #255                // class kotlin/collections/IntIterator
     180: invokevirtual #258                // Method kotlin/collections/IntIterator.nextInt:()I
     183: istore        20
     185: aload         17
     187: iload         20
     189: istore        21
     191: astore        22
     193: iconst_0
     194: istore        23
     196: aload_1
     197: iload         12
     199: iload_2
     200: irem
     201: invokeinterface #133,  2          // InterfaceMethod java/util/List.get:(I)Ljava/lang/Object;
     206: checkcast     #55                 // class java/lang/String
     209: iload         21
     211: iload_3
     212: irem
     213: invokevirtual #262                // Method java/lang/String.charAt:(I)C
     216: invokestatic  #73                 // Method kotlin/text/CharsKt.digitToInt:(C)I
     219: istore        24
     221: iload         21
     223: iload_3
     224: idiv
     225: iload         12
     227: iload_2
     228: idiv
     229: iadd
     230: istore        25
     232: iload         24
     234: iload         25
     236: iadd
     237: bipush        10
     239: if_icmpge     250
     242: iload         24
     244: iload         25
     246: iadd
     247: goto          258
     250: iload         24
     252: iload         25
     254: iadd
     255: bipush        9
     257: isub
     258: invokestatic  #79                 // Method java/lang/Integer.valueOf:(I)Ljava/lang/Integer;
     261: aload         22
     263: swap
     264: invokeinterface #83,  2           // InterfaceMethod java/util/Collection.add:(Ljava/lang/Object;)Z
     269: pop
     270: goto          165
     273: aload         17
     275: checkcast     #85                 // class java/util/List
     278: nop
     279: nop
     280: aload         26
     282: swap
     283: invokeinterface #83,  2           // InterfaceMethod java/util/Collection.add:(Ljava/lang/Object;)Z
     288: pop
     289: goto          84
     292: aload         8
     294: checkcast     #85                 // class java/util/List
     297: nop
     298: astore        4
     300: ldc_w         #264                // String Puzzle 2:
     303: getstatic     #93                 // Field java/lang/System.out:Ljava/io/PrintStream;
     306: swap
     307: invokevirtual #99                 // Method java/io/PrintStream.print:(Ljava/lang/Object;)V
     310: aload_0
     311: aload         4
     313: invokespecial #103                // Method findShortestPath:(Ljava/util/List;)V
     316: return

  private static final int findShortestPath$lambda$2(Day15$Node, Day15$Node);
    Code:
       0: aload_0
       1: invokevirtual #274                // Method Day15$Node.getDist:()I
       4: aload_1
       5: invokevirtual #274                // Method Day15$Node.getDist:()I
       8: isub
       9: ireturn

  private static final int findShortestPath$lambda$3(kotlin.jvm.functions.Function2, java.lang.Object, java.lang.Object);
    Code:
       0: aload_0
       1: aload_1
       2: aload_2
       3: invokeinterface #281,  3          // InterfaceMethod kotlin/jvm/functions/Function2.invoke:(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
       8: checkcast     #207                // class java/lang/Number
      11: invokevirtual #210                // Method java/lang/Number.intValue:()I
      14: ireturn
}

Compiled from "day15.kt"
public final class Day15$Node {
  private final int x;

  private final int y;

  private final int dist;

  public Day15$Node(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 x:I
       9: aload_0
      10: iload_2
      11: putfield      #16                 // Field y:I
      14: aload_0
      15: iload_3
      16: putfield      #19                 // Field dist:I
      19: return

  public Day15$Node(int, int, int, int, kotlin.jvm.internal.DefaultConstructorMarker);
    Code:
       0: iload         4
       2: iconst_1
       3: iand
       4: ifeq          9
       7: iconst_0
       8: istore_1
       9: iload         4
      11: iconst_2
      12: iand
      13: ifeq          18
      16: iconst_0
      17: istore_2
      18: iload         4
      20: iconst_4
      21: iand
      22: ifeq          27
      25: iconst_0
      26: istore_3
      27: aload_0
      28: iload_1
      29: iload_2
      30: iload_3
      31: invokespecial #24                 // Method "<init>":(III)V
      34: 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 getDist();
    Code:
       0: aload_0
       1: getfield      #19                 // Field dist: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 int component3();
    Code:
       0: aload_0
       1: getfield      #19                 // Field dist:I
       4: ireturn

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

  public static Day15$Node copy$default(Day15$Node, 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 x:I
      11: istore_1
      12: iload         4
      14: iconst_2
      15: iand
      16: ifeq          24
      19: aload_0
      20: getfield      #16                 // Field y:I
      23: istore_2
      24: iload         4
      26: iconst_4
      27: iand
      28: ifeq          36
      31: aload_0
      32: getfield      #19                 // Field dist:I
      35: istore_3
      36: aload_0
      37: iload_1
      38: iload_2
      39: iload_3
      40: invokevirtual #38                 // Method copy:(III)LDay15$Node;
      43: areturn

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

  public int hashCode();
    Code:
       0: aload_0
       1: getfield      #13                 // Field x: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      #16                 // Field y:I
      16: invokestatic  #67                 // 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 dist:I
      29: invokestatic  #67                 // 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 Day15$Node
      11: ifne          16
      14: iconst_0
      15: ireturn
      16: aload_1
      17: checkcast     #2                  // class Day15$Node
      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: aload_0
      48: getfield      #19                 // Field dist:I
      51: aload_2
      52: getfield      #19                 // Field dist:I
      55: if_icmpeq     60
      58: iconst_0
      59: ireturn
      60: iconst_1
      61: ireturn

  public Day15$Node();
    Code:
       0: aload_0
       1: iconst_0
       2: iconst_0
       3: iconst_0
       4: bipush        7
       6: aconst_null
       7: invokespecial #75                 // Method "<init>":(IIIILkotlin/jvm/internal/DefaultConstructorMarker;)V
      10: return
}

Compiled from "day15.kt"
public final class Day15Kt {
  public static final void print_day_15();
    Code:
       0: ldc           #8                  // String \u001b[33m
       2: astore_0
       3: ldc           #10                 // String \u001b[0m
       5: astore_1
       6: ldc           #12                 // String \u001b[32m
       8: astore_2
       9: new           #14                 // class java/lang/StringBuilder
      12: dup
      13: invokespecial #17                 // Method java/lang/StringBuilder."<init>":()V
      16: aload_0
      17: invokevirtual #21                 // Method java/lang/StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;
      20: ldc           #23                 // String -
      22: checkcast     #25                 // class java/lang/CharSequence
      25: bipush        25
      27: invokestatic  #31                 // Method kotlin/text/StringsKt.repeat:(Ljava/lang/CharSequence;I)Ljava/lang/String;
      30: invokevirtual #21                 // Method java/lang/StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;
      33: ldc           #33                 // String Advent of Code - Day 15
      35: invokevirtual #21                 // Method java/lang/StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;
      38: ldc           #23                 // String -
      40: checkcast     #25                 // class java/lang/CharSequence
      43: bipush        25
      45: invokestatic  #31                 // Method kotlin/text/StringsKt.repeat:(Ljava/lang/CharSequence;I)Ljava/lang/String;
      48: invokevirtual #21                 // Method java/lang/StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;
      51: aload_1
      52: invokevirtual #21                 // Method java/lang/StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;
      55: invokevirtual #37                 // Method java/lang/StringBuilder.toString:()Ljava/lang/String;
      58: getstatic     #43                 // Field java/lang/System.out:Ljava/io/PrintStream;
      61: swap
      62: invokevirtual #49                 // Method java/io/PrintStream.println:(Ljava/lang/Object;)V
      65: getstatic     #43                 // Field java/lang/System.out:Ljava/io/PrintStream;
      68: aload_2
      69: invokevirtual #49                 // Method java/io/PrintStream.println:(Ljava/lang/Object;)V
      72: invokestatic  #55                 // Method java/lang/Runtime.getRuntime:()Ljava/lang/Runtime;
      75: ldc           #57                 // String figlet Chiton -c -f small
      77: invokevirtual #61                 // Method java/lang/Runtime.exec:(Ljava/lang/String;)Ljava/lang/Process;
      80: astore_3
      81: new           #63                 // class java/io/BufferedReader
      84: dup
      85: new           #65                 // class java/io/InputStreamReader
      88: dup
      89: aload_3
      90: invokevirtual #71                 // Method java/lang/Process.getInputStream:()Ljava/io/InputStream;
      93: invokespecial #74                 // Method java/io/InputStreamReader."<init>":(Ljava/io/InputStream;)V
      96: checkcast     #76                 // class java/io/Reader
      99: invokespecial #79                 // Method java/io/BufferedReader."<init>":(Ljava/io/Reader;)V
     102: astore        4
     104: aload         4
     106: checkcast     #76                 // class java/io/Reader
     109: invokedynamic #98,  0             // InvokeDynamic #0:invoke:()Lkotlin/jvm/functions/Function1;
     114: invokestatic  #104                // Method kotlin/io/TextStreamsKt.forEachLine:(Ljava/io/Reader;Lkotlin/jvm/functions/Function1;)V
     117: getstatic     #43                 // Field java/lang/System.out:Ljava/io/PrintStream;
     120: aload_1
     121: invokevirtual #49                 // Method java/io/PrintStream.println:(Ljava/lang/Object;)V
     124: new           #14                 // class java/lang/StringBuilder
     127: dup
     128: invokespecial #17                 // Method java/lang/StringBuilder."<init>":()V
     131: aload_0
     132: invokevirtual #21                 // Method java/lang/StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;
     135: ldc           #23                 // String -
     137: checkcast     #25                 // class java/lang/CharSequence
     140: bipush        33
     142: invokestatic  #31                 // Method kotlin/text/StringsKt.repeat:(Ljava/lang/CharSequence;I)Ljava/lang/String;
     145: invokevirtual #21                 // Method java/lang/StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;
     148: ldc           #106                // String Output
     150: invokevirtual #21                 // Method java/lang/StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;
     153: ldc           #23                 // String -
     155: checkcast     #25                 // class java/lang/CharSequence
     158: bipush        33
     160: invokestatic  #31                 // Method kotlin/text/StringsKt.repeat:(Ljava/lang/CharSequence;I)Ljava/lang/String;
     163: invokevirtual #21                 // Method java/lang/StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;
     166: aload_1
     167: invokevirtual #21                 // Method java/lang/StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;
     170: bipush        10
     172: invokevirtual #109                // Method java/lang/StringBuilder.append:(C)Ljava/lang/StringBuilder;
     175: invokevirtual #37                 // Method java/lang/StringBuilder.toString:()Ljava/lang/String;
     178: getstatic     #43                 // Field java/lang/System.out:Ljava/io/PrintStream;
     181: swap
     182: invokevirtual #49                 // Method java/io/PrintStream.println:(Ljava/lang/Object;)V
     185: return

  public static final void main();
    Code:
       0: invokestatic  #120                // Method print_day_15:()V
       3: new           #122                // class Day15
       6: dup
       7: invokespecial #123                // Method Day15."<init>":()V
      10: invokevirtual #126                // Method Day15.part_1:()V
      13: new           #122                // class Day15
      16: dup
      17: invokespecial #123                // Method Day15."<init>":()V
      20: invokevirtual #129                // Method Day15.part_2:()V
      23: new           #14                 // class java/lang/StringBuilder
      26: dup
      27: invokespecial #17                 // Method java/lang/StringBuilder."<init>":()V
      30: ldc           #131                // String \n\u001b[33m
      32: invokevirtual #21                 // Method java/lang/StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;
      35: ldc           #133                // String =
      37: checkcast     #25                 // class java/lang/CharSequence
      40: bipush        72
      42: invokestatic  #31                 // Method kotlin/text/StringsKt.repeat:(Ljava/lang/CharSequence;I)Ljava/lang/String;
      45: invokevirtual #21                 // Method java/lang/StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;
      48: ldc           #135                // String \u001b[0m\n
      50: invokevirtual #21                 // Method java/lang/StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;
      53: invokevirtual #37                 // Method java/lang/StringBuilder.toString:()Ljava/lang/String;
      56: getstatic     #43                 // Field java/lang/System.out:Ljava/io/PrintStream;
      59: swap
      60: invokevirtual #49                 // Method java/io/PrintStream.println:(Ljava/lang/Object;)V
      63: return

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

  private static final kotlin.Unit print_day_15$lambda$0(java.lang.String);
    Code:
       0: aload_0
       1: ldc           #142                // String it
       3: invokestatic  #148                // Method kotlin/jvm/internal/Intrinsics.checkNotNullParameter:(Ljava/lang/Object;Ljava/lang/String;)V
       6: getstatic     #43                 // Field java/lang/System.out:Ljava/io/PrintStream;
       9: aload_0
      10: invokevirtual #49                 // Method java/io/PrintStream.println:(Ljava/lang/Object;)V
      13: getstatic     #154                // Field kotlin/Unit.INSTANCE:Lkotlin/Unit;
      16: areturn
}


import java.io.*
import java.util.concurrent.atomic.AtomicInteger

fun print_day_21() {
    val yellow = "\u001B[33m"
    val reset = "\u001b[0m"
    val green = "\u001B[32m"
    println(yellow + "-".repeat(25) + "Advent of Code - Day 21" + "-".repeat(25) + reset)
    println(green)
    val process = Runtime.getRuntime().exec("figlet Dirac Dice -c -f small")
    val reader = BufferedReader(InputStreamReader(process.inputStream))
    reader.forEachLine { println(it) }
    println(reset)
    println(yellow + "-".repeat(33) + "Output" + "-".repeat(33) + reset + "\n")
}

fun main() {
    print_day_21()
    Day21().part1()
    Day21().part2()
    println("\n" + "\u001B[33m" + "=".repeat(72) + "\u001b[0m" + "\n")
}

class Day21 {
    fun part1() {
        val startPos = File("../Input/day21.txt").readLines().map { it.last().digitToInt() }
        val scores = intArrayOf(0, 0)
        val space = startPos.toIntArray()
        val dice = AtomicInteger()
        var diceRolls = 0

        fun nextRoll(): Int {
            if (dice.get() >= 100) dice.set(0)
            diceRolls++
            return dice.incrementAndGet()
        }

        while (true) {
            repeat(2) {
                val roll = nextRoll() + nextRoll() + nextRoll()
                space[it] = (space[it] + roll) % 10
                scores[it] += if (space[it] != 0) space[it] else 10

                if (scores[it] >= 1000) {
                    println("Puzzle 1: " + scores[(it + 1) % 2] * diceRolls)
                    return
                }
            }
        }
    }

    fun part2() {
        data class Universe(val p1: Int, val p2: Int, val s1: Int, val s2: Int)

        val startPos = File("../Input/day21.txt").readLines().map { it.last().digitToInt() }

        val dp = mutableMapOf<Universe, Pair<Long, Long>>()
        fun solve(u: Universe): Pair<Long, Long> {
            dp[u]?.let {
                return it
            }
            if (u.s1 >= 21) return 1L to 0L
            if (u.s2 >= 21) return 0L to 1L
            var ans = 0L to 0L
            for (d1 in 1..3) for (d2 in 1..3) for (d3 in 1..3) {
                val newP1 = (u.p1 + d1 + d2 + d3 - 1) % 10 + 1
                val newS1 = u.s1 + newP1
                val (x, y) = solve(Universe(u.p2, newP1, u.s2, newS1))
                ans = ans.first + y to ans.second + x
            }
            return ans.also { dp[u] = it }
        }
        println(
                "Puzzle 2: " +
                        solve(Universe(startPos[0], startPos[1], 0, 0)).let {
                            maxOf(it.first, it.second)
                        }
        )
    }
}

Compiled from "day21.kt"
public final class Day21$part2$Universe {
  private final int p1;

  private final int p2;

  private final int s1;

  private final int s2;

  public Day21$part2$Universe(int, 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 p1:I
       9: aload_0
      10: iload_2
      11: putfield      #16                 // Field p2:I
      14: aload_0
      15: iload_3
      16: putfield      #19                 // Field s1:I
      19: aload_0
      20: iload         4
      22: putfield      #22                 // Field s2:I
      25: return

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

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

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

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

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

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

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

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

  public final Day21$part2$Universe copy(int, int, int, int);
    Code:
       0: new           #2                  // class Day21$part2$Universe
       3: dup
       4: iload_1
       5: iload_2
       6: iload_3
       7: iload         4
       9: invokespecial #37                 // Method "<init>":(IIII)V
      12: areturn

  public static Day21$part2$Universe copy$default(Day21$part2$Universe, int, int, int, int, int, java.lang.Object);
    Code:
       0: iload         5
       2: iconst_1
       3: iand
       4: ifeq          12
       7: aload_0
       8: getfield      #13                 // Field p1:I
      11: istore_1
      12: iload         5
      14: iconst_2
      15: iand
      16: ifeq          24
      19: aload_0
      20: getfield      #16                 // Field p2:I
      23: istore_2
      24: iload         5
      26: iconst_4
      27: iand
      28: ifeq          36
      31: aload_0
      32: getfield      #19                 // Field s1:I
      35: istore_3
      36: iload         5
      38: bipush        8
      40: iand
      41: ifeq          50
      44: aload_0
      45: getfield      #22                 // Field s2:I
      48: istore        4
      50: aload_0
      51: iload_1
      52: iload_2
      53: iload_3
      54: iload         4
      56: invokevirtual #41                 // Method copy:(IIII)LDay21$part2$Universe;
      59: areturn

  public java.lang.String toString();
    Code:
       0: new           #45                 // class java/lang/StringBuilder
       3: dup
       4: invokespecial #46                 // Method java/lang/StringBuilder."<init>":()V
       7: ldc           #48                 // String Universe(p1=
       9: invokevirtual #52                 // Method java/lang/StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;
      12: aload_0
      13: getfield      #13                 // Field p1:I
      16: invokevirtual #55                 // Method java/lang/StringBuilder.append:(I)Ljava/lang/StringBuilder;
      19: ldc           #57                 // String , p2=
      21: invokevirtual #52                 // Method java/lang/StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;
      24: aload_0
      25: getfield      #16                 // Field p2:I
      28: invokevirtual #55                 // Method java/lang/StringBuilder.append:(I)Ljava/lang/StringBuilder;
      31: ldc           #59                 // String , s1=
      33: invokevirtual #52                 // Method java/lang/StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;
      36: aload_0
      37: getfield      #19                 // Field s1:I
      40: invokevirtual #55                 // Method java/lang/StringBuilder.append:(I)Ljava/lang/StringBuilder;
      43: ldc           #61                 // String , s2=
      45: invokevirtual #52                 // Method java/lang/StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;
      48: aload_0
      49: getfield      #22                 // Field s2:I
      52: invokevirtual #55                 // Method java/lang/StringBuilder.append:(I)Ljava/lang/StringBuilder;
      55: bipush        41
      57: invokevirtual #64                 // Method java/lang/StringBuilder.append:(C)Ljava/lang/StringBuilder;
      60: invokevirtual #66                 // Method java/lang/StringBuilder.toString:()Ljava/lang/String;
      63: areturn

  public int hashCode();
    Code:
       0: aload_0
       1: getfield      #13                 // Field p1:I
       4: invokestatic  #72                 // 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 p2:I
      16: invokestatic  #72                 // 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 s1:I
      29: invokestatic  #72                 // Method java/lang/Integer.hashCode:(I)I
      32: iadd
      33: istore_1
      34: iload_1
      35: bipush        31
      37: imul
      38: aload_0
      39: getfield      #22                 // Field s2:I
      42: invokestatic  #72                 // Method java/lang/Integer.hashCode:(I)I
      45: iadd
      46: istore_1
      47: iload_1
      48: 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 Day21$part2$Universe
      11: ifne          16
      14: iconst_0
      15: ireturn
      16: aload_1
      17: checkcast     #2                  // class Day21$part2$Universe
      20: astore_2
      21: aload_0
      22: getfield      #13                 // Field p1:I
      25: aload_2
      26: getfield      #13                 // Field p1:I
      29: if_icmpeq     34
      32: iconst_0
      33: ireturn
      34: aload_0
      35: getfield      #16                 // Field p2:I
      38: aload_2
      39: getfield      #16                 // Field p2:I
      42: if_icmpeq     47
      45: iconst_0
      46: ireturn
      47: aload_0
      48: getfield      #19                 // Field s1:I
      51: aload_2
      52: getfield      #19                 // Field s1:I
      55: if_icmpeq     60
      58: iconst_0
      59: ireturn
      60: aload_0
      61: getfield      #22                 // Field s2:I
      64: aload_2
      65: getfield      #22                 // Field s2:I
      68: if_icmpeq     73
      71: iconst_0
      72: ireturn
      73: iconst_1
      74: ireturn
}

Compiled from "day21.kt"
public final class Day21Kt {
  public static final void print_day_21();
    Code:
       0: ldc           #8                  // String \u001b[33m
       2: astore_0
       3: ldc           #10                 // String \u001b[0m
       5: astore_1
       6: ldc           #12                 // String \u001b[32m
       8: astore_2
       9: new           #14                 // class java/lang/StringBuilder
      12: dup
      13: invokespecial #17                 // Method java/lang/StringBuilder."<init>":()V
      16: aload_0
      17: invokevirtual #21                 // Method java/lang/StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;
      20: ldc           #23                 // String -
      22: checkcast     #25                 // class java/lang/CharSequence
      25: bipush        25
      27: invokestatic  #31                 // Method kotlin/text/StringsKt.repeat:(Ljava/lang/CharSequence;I)Ljava/lang/String;
      30: invokevirtual #21                 // Method java/lang/StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;
      33: ldc           #33                 // String Advent of Code - Day 21
      35: invokevirtual #21                 // Method java/lang/StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;
      38: ldc           #23                 // String -
      40: checkcast     #25                 // class java/lang/CharSequence
      43: bipush        25
      45: invokestatic  #31                 // Method kotlin/text/StringsKt.repeat:(Ljava/lang/CharSequence;I)Ljava/lang/String;
      48: invokevirtual #21                 // Method java/lang/StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;
      51: aload_1
      52: invokevirtual #21                 // Method java/lang/StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;
      55: invokevirtual #37                 // Method java/lang/StringBuilder.toString:()Ljava/lang/String;
      58: getstatic     #43                 // Field java/lang/System.out:Ljava/io/PrintStream;
      61: swap
      62: invokevirtual #49                 // Method java/io/PrintStream.println:(Ljava/lang/Object;)V
      65: getstatic     #43                 // Field java/lang/System.out:Ljava/io/PrintStream;
      68: aload_2
      69: invokevirtual #49                 // Method java/io/PrintStream.println:(Ljava/lang/Object;)V
      72: invokestatic  #55                 // Method java/lang/Runtime.getRuntime:()Ljava/lang/Runtime;
      75: ldc           #57                 // String figlet Dirac Dice -c -f small
      77: invokevirtual #61                 // Method java/lang/Runtime.exec:(Ljava/lang/String;)Ljava/lang/Process;
      80: astore_3
      81: new           #63                 // class java/io/BufferedReader
      84: dup
      85: new           #65                 // class java/io/InputStreamReader
      88: dup
      89: aload_3
      90: invokevirtual #71                 // Method java/lang/Process.getInputStream:()Ljava/io/InputStream;
      93: invokespecial #74                 // Method java/io/InputStreamReader."<init>":(Ljava/io/InputStream;)V
      96: checkcast     #76                 // class java/io/Reader
      99: invokespecial #79                 // Method java/io/BufferedReader."<init>":(Ljava/io/Reader;)V
     102: astore        4
     104: aload         4
     106: checkcast     #76                 // class java/io/Reader
     109: invokedynamic #98,  0             // InvokeDynamic #0:invoke:()Lkotlin/jvm/functions/Function1;
     114: invokestatic  #104                // Method kotlin/io/TextStreamsKt.forEachLine:(Ljava/io/Reader;Lkotlin/jvm/functions/Function1;)V
     117: getstatic     #43                 // Field java/lang/System.out:Ljava/io/PrintStream;
     120: aload_1
     121: invokevirtual #49                 // Method java/io/PrintStream.println:(Ljava/lang/Object;)V
     124: new           #14                 // class java/lang/StringBuilder
     127: dup
     128: invokespecial #17                 // Method java/lang/StringBuilder."<init>":()V
     131: aload_0
     132: invokevirtual #21                 // Method java/lang/StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;
     135: ldc           #23                 // String -
     137: checkcast     #25                 // class java/lang/CharSequence
     140: bipush        33
     142: invokestatic  #31                 // Method kotlin/text/StringsKt.repeat:(Ljava/lang/CharSequence;I)Ljava/lang/String;
     145: invokevirtual #21                 // Method java/lang/StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;
     148: ldc           #106                // String Output
     150: invokevirtual #21                 // Method java/lang/StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;
     153: ldc           #23                 // String -
     155: checkcast     #25                 // class java/lang/CharSequence
     158: bipush        33
     160: invokestatic  #31                 // Method kotlin/text/StringsKt.repeat:(Ljava/lang/CharSequence;I)Ljava/lang/String;
     163: invokevirtual #21                 // Method java/lang/StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;
     166: aload_1
     167: invokevirtual #21                 // Method java/lang/StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;
     170: bipush        10
     172: invokevirtual #109                // Method java/lang/StringBuilder.append:(C)Ljava/lang/StringBuilder;
     175: invokevirtual #37                 // Method java/lang/StringBuilder.toString:()Ljava/lang/String;
     178: getstatic     #43                 // Field java/lang/System.out:Ljava/io/PrintStream;
     181: swap
     182: invokevirtual #49                 // Method java/io/PrintStream.println:(Ljava/lang/Object;)V
     185: return

  public static final void main();
    Code:
       0: invokestatic  #120                // Method print_day_21:()V
       3: new           #122                // class Day21
       6: dup
       7: invokespecial #123                // Method Day21."<init>":()V
      10: invokevirtual #126                // Method Day21.part1:()V
      13: new           #122                // class Day21
      16: dup
      17: invokespecial #123                // Method Day21."<init>":()V
      20: invokevirtual #129                // Method Day21.part2:()V
      23: new           #14                 // class java/lang/StringBuilder
      26: dup
      27: invokespecial #17                 // Method java/lang/StringBuilder."<init>":()V
      30: ldc           #131                // String \n\u001b[33m
      32: invokevirtual #21                 // Method java/lang/StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;
      35: ldc           #133                // String =
      37: checkcast     #25                 // class java/lang/CharSequence
      40: bipush        72
      42: invokestatic  #31                 // Method kotlin/text/StringsKt.repeat:(Ljava/lang/CharSequence;I)Ljava/lang/String;
      45: invokevirtual #21                 // Method java/lang/StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;
      48: ldc           #135                // String \u001b[0m\n
      50: invokevirtual #21                 // Method java/lang/StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;
      53: invokevirtual #37                 // Method java/lang/StringBuilder.toString:()Ljava/lang/String;
      56: getstatic     #43                 // Field java/lang/System.out:Ljava/io/PrintStream;
      59: swap
      60: invokevirtual #49                 // Method java/io/PrintStream.println:(Ljava/lang/Object;)V
      63: return

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

  private static final kotlin.Unit print_day_21$lambda$0(java.lang.String);
    Code:
       0: aload_0
       1: ldc           #142                // String it
       3: invokestatic  #148                // Method kotlin/jvm/internal/Intrinsics.checkNotNullParameter:(Ljava/lang/Object;Ljava/lang/String;)V
       6: getstatic     #43                 // Field java/lang/System.out:Ljava/io/PrintStream;
       9: aload_0
      10: invokevirtual #49                 // Method java/io/PrintStream.println:(Ljava/lang/Object;)V
      13: getstatic     #154                // Field kotlin/Unit.INSTANCE:Lkotlin/Unit;
      16: areturn
}

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

  public final void part1();
    Code:
       0: new           #13                 // class java/io/File
       3: dup
       4: ldc           #15                 // String ../Input/day21.txt
       6: invokespecial #18                 // Method java/io/File."<init>":(Ljava/lang/String;)V
       9: aconst_null
      10: iconst_1
      11: aconst_null
      12: invokestatic  #24                 // Method kotlin/io/FilesKt.readLines$default:(Ljava/io/File;Ljava/nio/charset/Charset;ILjava/lang/Object;)Ljava/util/List;
      15: checkcast     #26                 // class java/lang/Iterable
      18: astore_2
      19: iconst_0
      20: istore_3
      21: aload_2
      22: astore        4
      24: new           #28                 // class java/util/ArrayList
      27: dup
      28: aload_2
      29: bipush        10
      31: invokestatic  #34                 // Method kotlin/collections/CollectionsKt.collectionSizeOrDefault:(Ljava/lang/Iterable;I)I
      34: invokespecial #37                 // Method java/util/ArrayList."<init>":(I)V
      37: checkcast     #39                 // class java/util/Collection
      40: astore        5
      42: iconst_0
      43: istore        6
      45: aload         4
      47: invokeinterface #43,  1           // InterfaceMethod java/lang/Iterable.iterator:()Ljava/util/Iterator;
      52: astore        7
      54: aload         7
      56: invokeinterface #49,  1           // InterfaceMethod java/util/Iterator.hasNext:()Z
      61: ifeq          113
      64: aload         7
      66: invokeinterface #53,  1           // InterfaceMethod java/util/Iterator.next:()Ljava/lang/Object;
      71: astore        8
      73: aload         5
      75: aload         8
      77: checkcast     #55                 // class java/lang/String
      80: astore        9
      82: astore        11
      84: iconst_0
      85: istore        10
      87: aload         9
      89: checkcast     #57                 // class java/lang/CharSequence
      92: invokestatic  #63                 // Method kotlin/text/StringsKt.last:(Ljava/lang/CharSequence;)C
      95: invokestatic  #69                 // Method kotlin/text/CharsKt.digitToInt:(C)I
      98: invokestatic  #75                 // Method java/lang/Integer.valueOf:(I)Ljava/lang/Integer;
     101: aload         11
     103: swap
     104: invokeinterface #79,  2           // InterfaceMethod java/util/Collection.add:(Ljava/lang/Object;)Z
     109: pop
     110: goto          54
     113: aload         5
     115: checkcast     #81                 // class java/util/List
     118: nop
     119: astore_1
     120: iconst_2
     121: newarray       int
     123: astore_3
     124: aload_3
     125: iconst_0
     126: iconst_0
     127: iastore
     128: aload_3
     129: iconst_1
     130: iconst_0
     131: iastore
     132: aload_3
     133: astore_2
     134: aload_1
     135: checkcast     #39                 // class java/util/Collection
     138: invokestatic  #85                 // Method kotlin/collections/CollectionsKt.toIntArray:(Ljava/util/Collection;)[I
     141: astore_3
     142: new           #87                 // class java/util/concurrent/atomic/AtomicInteger
     145: dup
     146: invokespecial #88                 // Method java/util/concurrent/atomic/AtomicInteger."<init>":()V
     149: astore        4
     151: new           #90                 // class kotlin/jvm/internal/Ref$IntRef
     154: dup
     155: invokespecial #91                 // Method kotlin/jvm/internal/Ref$IntRef."<init>":()V
     158: astore        5
     160: nop
     161: iconst_2
     162: istore        6
     164: iconst_0
     165: istore        7
     167: iload         7
     169: iload         6
     171: if_icmpge     160
     174: iload         7
     176: istore        8
     178: iconst_0
     179: istore        9
     181: aload         4
     183: aload         5
     185: invokestatic  #95                 // Method part1$nextRoll:(Ljava/util/concurrent/atomic/AtomicInteger;Lkotlin/jvm/internal/Ref$IntRef;)I
     188: aload         4
     190: aload         5
     192: invokestatic  #95                 // Method part1$nextRoll:(Ljava/util/concurrent/atomic/AtomicInteger;Lkotlin/jvm/internal/Ref$IntRef;)I
     195: iadd
     196: aload         4
     198: aload         5
     200: invokestatic  #95                 // Method part1$nextRoll:(Ljava/util/concurrent/atomic/AtomicInteger;Lkotlin/jvm/internal/Ref$IntRef;)I
     203: iadd
     204: istore        10
     206: aload_3
     207: iload         8
     209: aload_3
     210: iload         8
     212: iaload
     213: iload         10
     215: iadd
     216: bipush        10
     218: irem
     219: iastore
     220: aload_2
     221: iload         8
     223: aload_2
     224: iload         8
     226: iaload
     227: aload_3
     228: iload         8
     230: iaload
     231: ifeq          241
     234: aload_3
     235: iload         8
     237: iaload
     238: goto          243
     241: bipush        10
     243: iadd
     244: iastore
     245: aload_2
     246: iload         8
     248: iaload
     249: sipush        1000
     252: if_icmplt     295
     255: new           #97                 // class java/lang/StringBuilder
     258: dup
     259: invokespecial #98                 // Method java/lang/StringBuilder."<init>":()V
     262: ldc           #100                // String Puzzle 1:
     264: invokevirtual #104                // Method java/lang/StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;
     267: aload_2
     268: iload         8
     270: iconst_1
     271: iadd
     272: iconst_2
     273: irem
     274: iaload
     275: aload         5
     277: getfield      #108                // Field kotlin/jvm/internal/Ref$IntRef.element:I
     280: imul
     281: invokevirtual #111                // Method java/lang/StringBuilder.append:(I)Ljava/lang/StringBuilder;
     284: invokevirtual #115                // Method java/lang/StringBuilder.toString:()Ljava/lang/String;
     287: getstatic     #121                // Field java/lang/System.out:Ljava/io/PrintStream;
     290: swap
     291: invokevirtual #127                // Method java/io/PrintStream.println:(Ljava/lang/Object;)V
     294: return
     295: nop
     296: iinc          7, 1
     299: goto          167

  public final void part2();
    Code:
       0: new           #13                 // class java/io/File
       3: dup
       4: ldc           #15                 // String ../Input/day21.txt
       6: invokespecial #18                 // Method java/io/File."<init>":(Ljava/lang/String;)V
       9: aconst_null
      10: iconst_1
      11: aconst_null
      12: invokestatic  #24                 // Method kotlin/io/FilesKt.readLines$default:(Ljava/io/File;Ljava/nio/charset/Charset;ILjava/lang/Object;)Ljava/util/List;
      15: checkcast     #26                 // class java/lang/Iterable
      18: astore_2
      19: iconst_0
      20: istore_3
      21: aload_2
      22: astore        4
      24: new           #28                 // class java/util/ArrayList
      27: dup
      28: aload_2
      29: bipush        10
      31: invokestatic  #34                 // Method kotlin/collections/CollectionsKt.collectionSizeOrDefault:(Ljava/lang/Iterable;I)I
      34: invokespecial #37                 // Method java/util/ArrayList."<init>":(I)V
      37: checkcast     #39                 // class java/util/Collection
      40: astore        5
      42: iconst_0
      43: istore        6
      45: aload         4
      47: invokeinterface #43,  1           // InterfaceMethod java/lang/Iterable.iterator:()Ljava/util/Iterator;
      52: astore        7
      54: aload         7
      56: invokeinterface #49,  1           // InterfaceMethod java/util/Iterator.hasNext:()Z
      61: ifeq          113
      64: aload         7
      66: invokeinterface #53,  1           // InterfaceMethod java/util/Iterator.next:()Ljava/lang/Object;
      71: astore        8
      73: aload         5
      75: aload         8
      77: checkcast     #55                 // class java/lang/String
      80: astore        9
      82: astore        11
      84: iconst_0
      85: istore        10
      87: aload         9
      89: checkcast     #57                 // class java/lang/CharSequence
      92: invokestatic  #63                 // Method kotlin/text/StringsKt.last:(Ljava/lang/CharSequence;)C
      95: invokestatic  #69                 // Method kotlin/text/CharsKt.digitToInt:(C)I
      98: invokestatic  #75                 // Method java/lang/Integer.valueOf:(I)Ljava/lang/Integer;
     101: aload         11
     103: swap
     104: invokeinterface #79,  2           // InterfaceMethod java/util/Collection.add:(Ljava/lang/Object;)Z
     109: pop
     110: goto          54
     113: aload         5
     115: checkcast     #81                 // class java/util/List
     118: nop
     119: astore_1
     120: new           #154                // class java/util/LinkedHashMap
     123: dup
     124: invokespecial #155                // Method java/util/LinkedHashMap."<init>":()V
     127: checkcast     #157                // class java/util/Map
     130: astore_2
     131: new           #97                 // class java/lang/StringBuilder
     134: dup
     135: invokespecial #98                 // Method java/lang/StringBuilder."<init>":()V
     138: ldc           #159                // String Puzzle 2:
     140: invokevirtual #104                // Method java/lang/StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;
     143: aload_2
     144: new           #161                // class Day21$part2$Universe
     147: dup
     148: aload_1
     149: iconst_0
     150: invokeinterface #165,  2          // InterfaceMethod java/util/List.get:(I)Ljava/lang/Object;
     155: checkcast     #167                // class java/lang/Number
     158: invokevirtual #171                // Method java/lang/Number.intValue:()I
     161: aload_1
     162: iconst_1
     163: invokeinterface #165,  2          // InterfaceMethod java/util/List.get:(I)Ljava/lang/Object;
     168: checkcast     #167                // class java/lang/Number
     171: invokevirtual #171                // Method java/lang/Number.intValue:()I
     174: iconst_0
     175: iconst_0
     176: invokespecial #174                // Method Day21$part2$Universe."<init>":(IIII)V
     179: invokestatic  #178                // Method part2$solve:(Ljava/util/Map;LDay21$part2$Universe;)Lkotlin/Pair;
     182: astore        4
     184: astore        11
     186: iconst_0
     187: istore        5
     189: aload         4
     191: invokevirtual #183                // Method kotlin/Pair.getFirst:()Ljava/lang/Object;
     194: checkcast     #167                // class java/lang/Number
     197: invokevirtual #187                // Method java/lang/Number.longValue:()J
     200: aload         4
     202: invokevirtual #190                // Method kotlin/Pair.getSecond:()Ljava/lang/Object;
     205: checkcast     #167                // class java/lang/Number
     208: invokevirtual #187                // Method java/lang/Number.longValue:()J
     211: invokestatic  #196                // Method java/lang/Math.max:(JJ)J
     214: nop
     215: lstore        12
     217: aload         11
     219: lload         12
     221: nop
     222: invokevirtual #199                // Method java/lang/StringBuilder.append:(J)Ljava/lang/StringBuilder;
     225: invokevirtual #115                // Method java/lang/StringBuilder.toString:()Ljava/lang/String;
     228: astore_3
     229: getstatic     #121                // Field java/lang/System.out:Ljava/io/PrintStream;
     232: aload_3
     233: invokevirtual #127                // Method java/io/PrintStream.println:(Ljava/lang/Object;)V
     236: return

  private static final int part1$nextRoll(java.util.concurrent.atomic.AtomicInteger, kotlin.jvm.internal.Ref$IntRef);
    Code:
       0: aload_0
       1: invokevirtual #206                // Method java/util/concurrent/atomic/AtomicInteger.get:()I
       4: bipush        100
       6: if_icmplt     14
       9: aload_0
      10: iconst_0
      11: invokevirtual #209                // Method java/util/concurrent/atomic/AtomicInteger.set:(I)V
      14: aload_1
      15: getfield      #108                // Field kotlin/jvm/internal/Ref$IntRef.element:I
      18: istore_2
      19: aload_1
      20: iload_2
      21: iconst_1
      22: iadd
      23: putfield      #108                // Field kotlin/jvm/internal/Ref$IntRef.element:I
      26: aload_0
      27: invokevirtual #212                // Method java/util/concurrent/atomic/AtomicInteger.incrementAndGet:()I
      30: ireturn

  private static final kotlin.Pair<java.lang.Long, java.lang.Long> part2$solve(java.util.Map<Day21$part2$Universe, kotlin.Pair<java.lang.Long, java.lang.Long>>, Day21$part2$Universe);
    Code:
       0: aload_0
       1: aload_1
       2: invokeinterface #216,  2          // InterfaceMethod java/util/Map.get:(Ljava/lang/Object;)Ljava/lang/Object;
       7: checkcast     #180                // class kotlin/Pair
      10: astore_2
      11: aload_2
      12: ifnull        24
      15: aload_2
      16: astore        4
      18: iconst_0
      19: istore        5
      21: aload         4
      23: areturn
      24: aload_1
      25: invokevirtual #219                // Method Day21$part2$Universe.getS1:()I
      28: bipush        21
      30: if_icmplt     45
      33: lconst_1
      34: invokestatic  #224                // Method java/lang/Long.valueOf:(J)Ljava/lang/Long;
      37: lconst_0
      38: invokestatic  #224                // Method java/lang/Long.valueOf:(J)Ljava/lang/Long;
      41: invokestatic  #230                // Method kotlin/TuplesKt.to:(Ljava/lang/Object;Ljava/lang/Object;)Lkotlin/Pair;
      44: areturn
      45: aload_1
      46: invokevirtual #233                // Method Day21$part2$Universe.getS2:()I
      49: bipush        21
      51: if_icmplt     66
      54: lconst_0
      55: invokestatic  #224                // Method java/lang/Long.valueOf:(J)Ljava/lang/Long;
      58: lconst_1
      59: invokestatic  #224                // Method java/lang/Long.valueOf:(J)Ljava/lang/Long;
      62: invokestatic  #230                // Method kotlin/TuplesKt.to:(Ljava/lang/Object;Ljava/lang/Object;)Lkotlin/Pair;
      65: areturn
      66: lconst_0
      67: invokestatic  #224                // Method java/lang/Long.valueOf:(J)Ljava/lang/Long;
      70: lconst_0
      71: invokestatic  #224                // Method java/lang/Long.valueOf:(J)Ljava/lang/Long;
      74: invokestatic  #230                // Method kotlin/TuplesKt.to:(Ljava/lang/Object;Ljava/lang/Object;)Lkotlin/Pair;
      77: astore_2
      78: iconst_1
      79: istore_3
      80: iload_3
      81: iconst_4
      82: if_icmpge     238
      85: iconst_1
      86: istore        4
      88: iload         4
      90: iconst_4
      91: if_icmpge     232
      94: iconst_1
      95: istore        5
      97: iload         5
      99: iconst_4
     100: if_icmpge     226
     103: aload_1
     104: invokevirtual #236                // Method Day21$part2$Universe.getP1:()I
     107: iload_3
     108: iadd
     109: iload         4
     111: iadd
     112: iload         5
     114: iadd
     115: iconst_1
     116: isub
     117: bipush        10
     119: irem
     120: iconst_1
     121: iadd
     122: istore        6
     124: aload_1
     125: invokevirtual #219                // Method Day21$part2$Universe.getS1:()I
     128: iload         6
     130: iadd
     131: istore        7
     133: aload_0
     134: new           #161                // class Day21$part2$Universe
     137: dup
     138: aload_1
     139: invokevirtual #239                // Method Day21$part2$Universe.getP2:()I
     142: iload         6
     144: aload_1
     145: invokevirtual #233                // Method Day21$part2$Universe.getS2:()I
     148: iload         7
     150: invokespecial #174                // Method Day21$part2$Universe."<init>":(IIII)V
     153: invokestatic  #178                // Method part2$solve:(Ljava/util/Map;LDay21$part2$Universe;)Lkotlin/Pair;
     156: astore        8
     158: aload         8
     160: invokevirtual #242                // Method kotlin/Pair.component1:()Ljava/lang/Object;
     163: checkcast     #167                // class java/lang/Number
     166: invokevirtual #187                // Method java/lang/Number.longValue:()J
     169: lstore        9
     171: aload         8
     173: invokevirtual #245                // Method kotlin/Pair.component2:()Ljava/lang/Object;
     176: checkcast     #167                // class java/lang/Number
     179: invokevirtual #187                // Method java/lang/Number.longValue:()J
     182: lstore        11
     184: aload_2
     185: invokevirtual #183                // Method kotlin/Pair.getFirst:()Ljava/lang/Object;
     188: checkcast     #167                // class java/lang/Number
     191: invokevirtual #187                // Method java/lang/Number.longValue:()J
     194: lload         11
     196: ladd
     197: invokestatic  #224                // Method java/lang/Long.valueOf:(J)Ljava/lang/Long;
     200: aload_2
     201: invokevirtual #190                // Method kotlin/Pair.getSecond:()Ljava/lang/Object;
     204: checkcast     #167                // class java/lang/Number
     207: invokevirtual #187                // Method java/lang/Number.longValue:()J
     210: lload         9
     212: ladd
     213: invokestatic  #224                // Method java/lang/Long.valueOf:(J)Ljava/lang/Long;
     216: invokestatic  #230                // Method kotlin/TuplesKt.to:(Ljava/lang/Object;Ljava/lang/Object;)Lkotlin/Pair;
     219: astore_2
     220: iinc          5, 1
     223: goto          97
     226: iinc          4, 1
     229: goto          88
     232: iinc          3, 1
     235: goto          80
     238: aload_2
     239: astore_3
     240: aload_3
     241: astore        4
     243: iconst_0
     244: istore        5
     246: aload_0
     247: aload_1
     248: aload         4
     250: invokeinterface #249,  3          // InterfaceMethod java/util/Map.put:(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
     255: pop
     256: nop
     257: aload_3
     258: areturn
}