.<= public static void art.Trace.enableTracing(java.lang.Class,java.lang.reflect.Method,java.lang.reflect.Method,java.lang.reflect.Method,java.lang.reflect.Method,java.lang.reflect.Method,java.lang.Thread) -> <null: null>
<= public static void art.Trace.enableMethodTracing(java.lang.Class,java.lang.reflect.Method,java.lang.reflect.Method,java.lang.Thread) -> <null: null>
=> art.Test988$IterOp()
.=> public java.lang.Object()
.<= public java.lang.Object() -> <null: null>
<= art.Test988$IterOp() -> <null: null>
=> public static void art.Test988.doFibTest(int,java.util.function.IntUnaryOperator)
.=> public int art.Test988$IterOp.applyAsInt(int)
..=> static int art.Test988.iter_fibonacci(int)
..<= static int art.Test988.iter_fibonacci(int) -> <class java.lang.Integer: 832040>
.<= public int art.Test988$IterOp.applyAsInt(int) -> <class java.lang.Integer: 832040>
.=> public art.Test988$FibResult(java.lang.String,int,int)
..=> public java.lang.Object()
..<= public java.lang.Object() -> <null: null>
.<= public art.Test988$FibResult(java.lang.String,int,int) -> <null: null>
.=> public boolean java.util.ArrayList.add(java.lang.Object)
..=> private void java.util.ArrayList.ensureCapacityInternal(int)
...=> private void java.util.ArrayList.ensureExplicitCapacity(int)
...<= private void java.util.ArrayList.ensureExplicitCapacity(int) -> <null: null>
..<= private void java.util.ArrayList.ensureCapacityInternal(int) -> <null: null>
fibonacci(30)=832040
.<= public boolean java.util.ArrayList.add(java.lang.Object) -> <class java.lang.Boolean: true>
<= public static void art.Test988.doFibTest(int,java.util.function.IntUnaryOperator) -> <null: null>
=> art.Test988$RecurOp()
.=> public java.lang.Object()
.<= public java.lang.Object() -> <null: null>
<= art.Test988$RecurOp() -> <null: null>
=> public static void art.Test988.doFibTest(int,java.util.function.IntUnaryOperator)
.=> public int art.Test988$RecurOp.applyAsInt(int)
..=> static int art.Test988.fibonacci(int)
...=> static int art.Test988.fibonacci(int)
....=> static int art.Test988.fibonacci(int)
.....=> static int art.Test988.fibonacci(int)
......=> static int art.Test988.fibonacci(int)
......<= static int art.Test988.fibonacci(int) -> <class java.lang.Integer: 1>
......=> static int art.Test988.fibonacci(int)
......<= static int art.Test988.fibonacci(int) -> <class java.lang.Integer: 0>
.....<= static int art.Test988.fibonacci(int) -> <class java.lang.Integer: 1>
.....=> static int art.Test988.fibonacci(int)
.....<= static int art.Test988.fibonacci(int) -> <class java.lang.Integer: 1>
....<= static int art.Test988.fibonacci(int) -> <class java.lang.Integer: 2>
....=> static int art.Test988.fibonacci(int)
.....=> static int art.Test988.fibonacci(int)
.....<= static int art.Test988.fibonacci(int) -> <class java.lang.Integer: 1>
.....=> static int art.Test988.fibonacci(int)
.....<= static int art.Test988.fibonacci(int) -> <class java.lang.Integer: 0>
....<= static int art.Test988.fibonacci(int) -> <class java.lang.Integer: 1>
...<= static int art.Test988.fibonacci(int) -> <class java.lang.Integer: 3>
...=> static int art.Test988.fibonacci(int)
....=> static int art.Test988.fibonacci(int)
.....=> static int art.Test988.fibonacci(int)
.....<= static int art.Test988.fibonacci(int) -> <class java.lang.Integer: 1>
.....=> static int art.Test988.fibonacci(int)
.....<= static int art.Test988.fibonacci(int) -> <class java.lang.Integer: 0>
....<= static int art.Test988.fibonacci(int) -> <class java.lang.Integer: 1>
....=> static int art.Test988.fibonacci(int)
....<= static int art.Test988.fibonacci(int) -> <class java.lang.Integer: 1>
...<= static int art.Test988.fibonacci(int) -> <class java.lang.Integer: 2>
..<= static int art.Test988.fibonacci(int) -> <class java.lang.Integer: 5>
.<= public int art.Test988$RecurOp.applyAsInt(int) -> <class java.lang.Integer: 5>
.=> public art.Test988$FibResult(java.lang.String,int,int)
..=> public java.lang.Object()
..<= public java.lang.Object() -> <null: null>
.<= public art.Test988$FibResult(java.lang.String,int,int) -> <null: null>
.=> public boolean java.util.ArrayList.add(java.lang.Object)
..=> private void java.util.ArrayList.ensureCapacityInternal(int)
...=> private void java.util.ArrayList.ensureExplicitCapacity(int)
...<= private void java.util.ArrayList.ensureExplicitCapacity(int) -> <null: null>
..<= private void java.util.ArrayList.ensureCapacityInternal(int) -> <null: null>
fibonacci(5)=5
.<= public boolean java.util.ArrayList.add(java.lang.Object) -> <class java.lang.Boolean: true>
<= public static void art.Test988.doFibTest(int,java.util.function.IntUnaryOperator) -> <null: null>
=> art.Test988$IterOp()
.=> public java.lang.Object()
.<= public java.lang.Object() -> <null: null>
<= art.Test988$IterOp() -> <null: null>
=> public static void art.Test988.doFibTest(int,java.util.function.IntUnaryOperator)
.=> public int art.Test988$IterOp.applyAsInt(int)
..=> static int art.Test988.iter_fibonacci(int)
...=> public java.lang.StringBuilder()
....=> java.lang.AbstractStringBuilder(int)
.....=> public java.lang.Object()
.....<= public java.lang.Object() -> <null: null>
....<= java.lang.AbstractStringBuilder(int) -> <null: null>
...<= public java.lang.StringBuilder() -> <null: null>
...=> public java.lang.StringBuilder java.lang.StringBuilder.append(java.lang.String)
....=> public java.lang.AbstractStringBuilder java.lang.AbstractStringBuilder.append(java.lang.String)
.....=> public int java.lang.String.length()
.....<= public int java.lang.String.length() -> <class java.lang.Integer: 14>
.....=> private void java.lang.AbstractStringBuilder.ensureCapacityInternal(int)
.....<= private void java.lang.AbstractStringBuilder.ensureCapacityInternal(int) -> <null: null>
.....=> public void java.lang.String.getChars(int,int,char[],int)
......=> public int java.lang.String.length()
......<= public int java.lang.String.length() -> <class java.lang.Integer: 14>
......=> native void java.lang.String.getCharsNoCheck(int,int,char[],int)
......<= native void java.lang.String.getCharsNoCheck(int,int,char[],int) -> <null: null>
.....<= public void java.lang.String.getChars(int,int,char[],int) -> <null: null>
....<= public java.lang.AbstractStringBuilder java.lang.AbstractStringBuilder.append(java.lang.String) -> <class java.lang.StringBuilder: Bad argument: -19 < 0>
...<= public java.lang.StringBuilder java.lang.StringBuilder.append(java.lang.String) -> <class java.lang.StringBuilder: Bad argument: -19 < 0>
...=> public java.lang.StringBuilder java.lang.StringBuilder.append(int)
....=> public java.lang.AbstractStringBuilder java.lang.AbstractStringBuilder.append(int)
.....=> static int java.lang.Integer.stringSize(int)
.....<= static int java.lang.Integer.stringSize(int) -> <class java.lang.Integer: 2>
.....=> private void java.lang.AbstractStringBuilder.ensureCapacityInternal(int)
......=> private int java.lang.AbstractStringBuilder.newCapacity(int)
......<= private int java.lang.AbstractStringBuilder.newCapacity(int) -> <class java.lang.Integer: 34>
......=> public static char[] java.util.Arrays.copyOf(char[],int)
.......=> public static int java.lang.Math.min(int,int)
.......<= public static int java.lang.Math.min(int,int) -> <class java.lang.Integer: 16>
.......=> public static void java.lang.System.arraycopy(java.lang.Object,int,java.lang.Object,int,int)
.......<= public static void java.lang.System.arraycopy(java.lang.Object,int,java.lang.Object,int,int) -> <null: null>
......<= public static char[] java.util.Arrays.copyOf(char[],int) -> <class [C: [B, a, d,  , a, r, g, u, m, e, n, t, :,  , -, 1, 9,  , <,  , 0, <control-0000>, <control-0000>, <control-0000>, <control-0000>, <control-0000>, <control-0000>, <control-0000>, <control-0000>, <control-0000>, <control-0000>, <control-0000>, <control-0000>, <control-0000>]>
.....<= private void java.lang.AbstractStringBuilder.ensureCapacityInternal(int) -> <null: null>
.....=> static void java.lang.Integer.getChars(int,int,char[])
.....<= static void java.lang.Integer.getChars(int,int,char[]) -> <null: null>
....<= public java.lang.AbstractStringBuilder java.lang.AbstractStringBuilder.append(int) -> <class java.lang.StringBuilder: Bad argument: -19 < 0>
...<= public java.lang.StringBuilder java.lang.StringBuilder.append(int) -> <class java.lang.StringBuilder: Bad argument: -19 < 0>
...=> public java.lang.StringBuilder java.lang.StringBuilder.append(java.lang.String)
....=> public java.lang.AbstractStringBuilder java.lang.AbstractStringBuilder.append(java.lang.String)
.....=> public int java.lang.String.length()
.....<= public int java.lang.String.length() -> <class java.lang.Integer: 4>
.....=> private void java.lang.AbstractStringBuilder.ensureCapacityInternal(int)
.....<= private void java.lang.AbstractStringBuilder.ensureCapacityInternal(int) -> <null: null>
.....=> public void java.lang.String.getChars(int,int,char[],int)
......=> public int java.lang.String.length()
......<= public int java.lang.String.length() -> <class java.lang.Integer: 4>
......=> native void java.lang.String.getCharsNoCheck(int,int,char[],int)
......<= native void java.lang.String.getCharsNoCheck(int,int,char[],int) -> <null: null>
.....<= public void java.lang.String.getChars(int,int,char[],int) -> <null: null>
....<= public java.lang.AbstractStringBuilder java.lang.AbstractStringBuilder.append(java.lang.String) -> <class java.lang.StringBuilder: Bad argument: -19 < 0>
...<= public java.lang.StringBuilder java.lang.StringBuilder.append(java.lang.String) -> <class java.lang.StringBuilder: Bad argument: -19 < 0>
...=> public java.lang.String java.lang.StringBuilder.toString()
....=> static java.lang.String java.lang.StringFactory.newStringFromChars(int,int,char[])
....<= static java.lang.String java.lang.StringFactory.newStringFromChars(int,int,char[]) -> <class java.lang.String: Bad argument: -19 < 0>
...<= public java.lang.String java.lang.StringBuilder.toString() -> <class java.lang.String: Bad argument: -19 < 0>
...=> public java.lang.Error(java.lang.String)
....=> public java.lang.Throwable(java.lang.String)
.....=> public java.lang.Object()
.....<= public java.lang.Object() -> <null: null>
.....=> public static final java.util.List java.util.Collections.emptyList()
.....<= public static final java.util.List java.util.Collections.emptyList() -> <class java.util.Collections$EmptyList: []>
.....=> public synchronized java.lang.Throwable java.lang.Throwable.fillInStackTrace()
......=> private static java.lang.Object java.lang.Throwable.nativeFillInStackTrace()
......<= private static java.lang.Object java.lang.Throwable.nativeFillInStackTrace() -> <class [Ljava.lang.Object;: <non-deterministic>>
.....<= public synchronized java.lang.Throwable java.lang.Throwable.fillInStackTrace() -> <class java.lang.Error: java.lang.Error: Bad argument: -19 < 0
	art.Test988.iter_fibonacci(Test988.java:235)
	art.Test988$IterOp.applyAsInt(Test988.java:230)
	art.Test988.doFibTest(Test988.java:339)
	art.Test988.run(Test988.java:304)
	<additional hidden frames>
>
....<= public java.lang.Throwable(java.lang.String) -> <null: null>
...<= public java.lang.Error(java.lang.String) -> <null: null>
..<= static int art.Test988.iter_fibonacci(int) EXCEPTION
.<= public int art.Test988$IterOp.applyAsInt(int) EXCEPTION
.=> public art.Test988$FibThrow(java.lang.String,int,java.lang.Throwable)
..=> public java.lang.Object()
..<= public java.lang.Object() -> <null: null>
.<= public art.Test988$FibThrow(java.lang.String,int,java.lang.Throwable) -> <null: null>
.=> public boolean java.util.ArrayList.add(java.lang.Object)
..=> private void java.util.ArrayList.ensureCapacityInternal(int)
...=> private void java.util.ArrayList.ensureExplicitCapacity(int)
...<= private void java.util.ArrayList.ensureExplicitCapacity(int) -> <null: null>
..<= private void java.util.ArrayList.ensureCapacityInternal(int) -> <null: null>
fibonacci(-19) -> java.lang.Error: Bad argument: -19 < 0
	art.Test988.iter_fibonacci(Test988.java:235)
	art.Test988$IterOp.applyAsInt(Test988.java:230)
	art.Test988.doFibTest(Test988.java:339)
	art.Test988.run(Test988.java:304)
	<additional hidden frames>

.<= public boolean java.util.ArrayList.add(java.lang.Object) -> <class java.lang.Boolean: true>
<= public static void art.Test988.doFibTest(int,java.util.function.IntUnaryOperator) -> <null: null>
=> art.Test988$RecurOp()
.=> public java.lang.Object()
.<= public java.lang.Object() -> <null: null>
<= art.Test988$RecurOp() -> <null: null>
=> public static void art.Test988.doFibTest(int,java.util.function.IntUnaryOperator)
.=> public int art.Test988$RecurOp.applyAsInt(int)
..=> static int art.Test988.fibonacci(int)
...=> public java.lang.StringBuilder()
....=> java.lang.AbstractStringBuilder(int)
.....=> public java.lang.Object()
.....<= public java.lang.Object() -> <null: null>
....<= java.lang.AbstractStringBuilder(int) -> <null: null>
...<= public java.lang.StringBuilder() -> <null: null>
...=> public java.lang.StringBuilder java.lang.StringBuilder.append(java.lang.String)
....=> public java.lang.AbstractStringBuilder java.lang.AbstractStringBuilder.append(java.lang.String)
.....=> public int java.lang.String.length()
.....<= public int java.lang.String.length() -> <class java.lang.Integer: 14>
.....=> private void java.lang.AbstractStringBuilder.ensureCapacityInternal(int)
.....<= private void java.lang.AbstractStringBuilder.ensureCapacityInternal(int) -> <null: null>
.....=> public void java.lang.String.getChars(int,int,char[],int)
......=> public int java.lang.String.length()
......<= public int java.lang.String.length() -> <class java.lang.Integer: 14>
......=> native void java.lang.String.getCharsNoCheck(int,int,char[],int)
......<= native void java.lang.String.getCharsNoCheck(int,int,char[],int) -> <null: null>
.....<= public void java.lang.String.getChars(int,int,char[],int) -> <null: null>
....<= public java.lang.AbstractStringBuilder java.lang.AbstractStringBuilder.append(java.lang.String) -> <class java.lang.StringBuilder: Bad argument: -19 < 0>
...<= public java.lang.StringBuilder java.lang.StringBuilder.append(java.lang.String) -> <class java.lang.StringBuilder: Bad argument: -19 < 0>
...=> public java.lang.StringBuilder java.lang.StringBuilder.append(int)
....=> public java.lang.AbstractStringBuilder java.lang.AbstractStringBuilder.append(int)
.....=> static int java.lang.Integer.stringSize(int)
.....<= static int java.lang.Integer.stringSize(int) -> <class java.lang.Integer: 2>
.....=> private void java.lang.AbstractStringBuilder.ensureCapacityInternal(int)
......=> private int java.lang.AbstractStringBuilder.newCapacity(int)
......<= private int java.lang.AbstractStringBuilder.newCapacity(int) -> <class java.lang.Integer: 34>
......=> public static char[] java.util.Arrays.copyOf(char[],int)
.......=> public static int java.lang.Math.min(int,int)
.......<= public static int java.lang.Math.min(int,int) -> <class java.lang.Integer: 16>
.......=> public static void java.lang.System.arraycopy(java.lang.Object,int,java.lang.Object,int,int)
.......<= public static void java.lang.System.arraycopy(java.lang.Object,int,java.lang.Object,int,int) -> <null: null>
......<= public static char[] java.util.Arrays.copyOf(char[],int) -> <class [C: [B, a, d,  , a, r, g, u, m, e, n, t, :,  , -, 1, 9,  , <,  , 0, <control-0000>, <control-0000>, <control-0000>, <control-0000>, <control-0000>, <control-0000>, <control-0000>, <control-0000>, <control-0000>, <control-0000>, <control-0000>, <control-0000>, <control-0000>]>
.....<= private void java.lang.AbstractStringBuilder.ensureCapacityInternal(int) -> <null: null>
.....=> static void java.lang.Integer.getChars(int,int,char[])
.....<= static void java.lang.Integer.getChars(int,int,char[]) -> <null: null>
....<= public java.lang.AbstractStringBuilder java.lang.AbstractStringBuilder.append(int) -> <class java.lang.StringBuilder: Bad argument: -19 < 0>
...<= public java.lang.StringBuilder java.lang.StringBuilder.append(int) -> <class java.lang.StringBuilder: Bad argument: -19 < 0>
...=> public java.lang.StringBuilder java.lang.StringBuilder.append(java.lang.String)
....=> public java.lang.AbstractStringBuilder java.lang.AbstractStringBuilder.append(java.lang.String)
.....=> public int java.lang.String.length()
.....<= public int java.lang.String.length() -> <class java.lang.Integer: 4>
.....=> private void java.lang.AbstractStringBuilder.ensureCapacityInternal(int)
.....<= private void java.lang.AbstractStringBuilder.ensureCapacityInternal(int) -> <null: null>
.....=> public void java.lang.String.getChars(int,int,char[],int)
......=> public int java.lang.String.length()
......<= public int java.lang.String.length() -> <class java.lang.Integer: 4>
......=> native void java.lang.String.getCharsNoCheck(int,int,char[],int)
......<= native void java.lang.String.getCharsNoCheck(int,int,char[],int) -> <null: null>
.....<= public void java.lang.String.getChars(int,int,char[],int) -> <null: null>
....<= public java.lang.AbstractStringBuilder java.lang.AbstractStringBuilder.append(java.lang.String) -> <class java.lang.StringBuilder: Bad argument: -19 < 0>
...<= public java.lang.StringBuilder java.lang.StringBuilder.append(java.lang.String) -> <class java.lang.StringBuilder: Bad argument: -19 < 0>
...=> public java.lang.String java.lang.StringBuilder.toString()
....=> static java.lang.String java.lang.StringFactory.newStringFromChars(int,int,char[])
....<= static java.lang.String java.lang.StringFactory.newStringFromChars(int,int,char[]) -> <class java.lang.String: Bad argument: -19 < 0>
...<= public java.lang.String java.lang.StringBuilder.toString() -> <class java.lang.String: Bad argument: -19 < 0>
...=> public java.lang.Error(java.lang.String)
....=> public java.lang.Throwable(java.lang.String)
.....=> public java.lang.Object()
.....<= public java.lang.Object() -> <null: null>
.....=> public static final java.util.List java.util.Collections.emptyList()
.....<= public static final java.util.List java.util.Collections.emptyList() -> <class java.util.Collections$EmptyList: []>
.....=> public synchronized java.lang.Throwable java.lang.Throwable.fillInStackTrace()
......=> private static java.lang.Object java.lang.Throwable.nativeFillInStackTrace()
......<= private static java.lang.Object java.lang.Throwable.nativeFillInStackTrace() -> <class [Ljava.lang.Object;: <non-deterministic>>
.....<= public synchronized java.lang.Throwable java.lang.Throwable.fillInStackTrace() -> <class java.lang.Error: java.lang.Error: Bad argument: -19 < 0
	art.Test988.fibonacci(Test988.java:257)
	art.Test988$RecurOp.applyAsInt(Test988.java:252)
	art.Test988.doFibTest(Test988.java:339)
	art.Test988.run(Test988.java:305)
	<additional hidden frames>
>
....<= public java.lang.Throwable(java.lang.String) -> <null: null>
...<= public java.lang.Error(java.lang.String) -> <null: null>
..<= static int art.Test988.fibonacci(int) EXCEPTION
.<= public int art.Test988$RecurOp.applyAsInt(int) EXCEPTION
.=> public art.Test988$FibThrow(java.lang.String,int,java.lang.Throwable)
..=> public java.lang.Object()
..<= public java.lang.Object() -> <null: null>
.<= public art.Test988$FibThrow(java.lang.String,int,java.lang.Throwable) -> <null: null>
.=> public boolean java.util.ArrayList.add(java.lang.Object)
..=> private void java.util.ArrayList.ensureCapacityInternal(int)
...=> private void java.util.ArrayList.ensureExplicitCapacity(int)
...<= private void java.util.ArrayList.ensureExplicitCapacity(int) -> <null: null>
..<= private void java.util.ArrayList.ensureCapacityInternal(int) -> <null: null>
fibonacci(-19) -> java.lang.Error: Bad argument: -19 < 0
	art.Test988.fibonacci(Test988.java:257)
	art.Test988$RecurOp.applyAsInt(Test988.java:252)
	art.Test988.doFibTest(Test988.java:339)
	art.Test988.run(Test988.java:305)
	<additional hidden frames>

.<= public boolean java.util.ArrayList.add(java.lang.Object) -> <class java.lang.Boolean: true>
<= public static void art.Test988.doFibTest(int,java.util.function.IntUnaryOperator) -> <null: null>
=> static void art.Test988$IntrinsicsTest.doTest()
.=> static void art.Test988Intrinsics.test()
..=> public static long java.lang.Double.doubleToRawLongBits(double)
..<= public static long java.lang.Double.doubleToRawLongBits(double) -> <class java.lang.Long: 0>
..=> public static long java.lang.Double.doubleToLongBits(double)
..<= public static long java.lang.Double.doubleToLongBits(double) -> <class java.lang.Long: 0>
..=> public static boolean java.lang.Double.isInfinite(double)
..<= public static boolean java.lang.Double.isInfinite(double) -> <class java.lang.Boolean: false>
..=> public static boolean java.lang.Double.isNaN(double)
..<= public static boolean java.lang.Double.isNaN(double) -> <class java.lang.Boolean: false>
..=> public static double java.lang.Double.longBitsToDouble(long)
..<= public static double java.lang.Double.longBitsToDouble(long) -> <class java.lang.Double: 0.0>
..=> public static int java.lang.Float.floatToRawIntBits(float)
..<= public static int java.lang.Float.floatToRawIntBits(float) -> <class java.lang.Integer: 0>
..=> public static int java.lang.Float.floatToIntBits(float)
..<= public static int java.lang.Float.floatToIntBits(float) -> <class java.lang.Integer: 0>
..=> public static boolean java.lang.Float.isInfinite(float)
..<= public static boolean java.lang.Float.isInfinite(float) -> <class java.lang.Boolean: false>
..=> public static boolean java.lang.Float.isNaN(float)
..<= public static boolean java.lang.Float.isNaN(float) -> <class java.lang.Boolean: false>
..=> public static float java.lang.Float.intBitsToFloat(int)
..<= public static float java.lang.Float.intBitsToFloat(int) -> <class java.lang.Float: 0.0>
..=> public static int java.lang.Integer.reverse(int)
..<= public static int java.lang.Integer.reverse(int) -> <class java.lang.Integer: 0>
..=> public static int java.lang.Integer.reverseBytes(int)
..<= public static int java.lang.Integer.reverseBytes(int) -> <class java.lang.Integer: 0>
..=> public static int java.lang.Integer.bitCount(int)
..<= public static int java.lang.Integer.bitCount(int) -> <class java.lang.Integer: 0>
..=> public static int java.lang.Integer.compare(int,int)
..<= public static int java.lang.Integer.compare(int,int) -> <class java.lang.Integer: 0>
..=> public static int java.lang.Integer.highestOneBit(int)
..<= public static int java.lang.Integer.highestOneBit(int) -> <class java.lang.Integer: 0>
..=> public static int java.lang.Integer.lowestOneBit(int)
..<= public static int java.lang.Integer.lowestOneBit(int) -> <class java.lang.Integer: 0>
..=> public static int java.lang.Integer.numberOfLeadingZeros(int)
..<= public static int java.lang.Integer.numberOfLeadingZeros(int) -> <class java.lang.Integer: 32>
..=> public static int java.lang.Integer.numberOfTrailingZeros(int)
..<= public static int java.lang.Integer.numberOfTrailingZeros(int) -> <class java.lang.Integer: 32>
..=> public static int java.lang.Integer.rotateRight(int,int)
..<= public static int java.lang.Integer.rotateRight(int,int) -> <class java.lang.Integer: 0>
..=> public static int java.lang.Integer.rotateLeft(int,int)
..<= public static int java.lang.Integer.rotateLeft(int,int) -> <class java.lang.Integer: 0>
..=> public static int java.lang.Integer.signum(int)
..<= public static int java.lang.Integer.signum(int) -> <class java.lang.Integer: 0>
..=> public static long java.lang.Long.reverse(long)
..<= public static long java.lang.Long.reverse(long) -> <class java.lang.Long: 0>
..=> public static long java.lang.Long.reverseBytes(long)
..<= public static long java.lang.Long.reverseBytes(long) -> <class java.lang.Long: 0>
..=> public static int java.lang.Long.bitCount(long)
..<= public static int java.lang.Long.bitCount(long) -> <class java.lang.Integer: 0>
..=> public static int java.lang.Long.compare(long,long)
..<= public static int java.lang.Long.compare(long,long) -> <class java.lang.Integer: 0>
..=> public static long java.lang.Long.highestOneBit(long)
..<= public static long java.lang.Long.highestOneBit(long) -> <class java.lang.Long: 0>
..=> public static long java.lang.Long.lowestOneBit(long)
..<= public static long java.lang.Long.lowestOneBit(long) -> <class java.lang.Long: 0>
..=> public static int java.lang.Long.numberOfLeadingZeros(long)
..<= public static int java.lang.Long.numberOfLeadingZeros(long) -> <class java.lang.Integer: 64>
..=> public static int java.lang.Long.numberOfTrailingZeros(long)
..<= public static int java.lang.Long.numberOfTrailingZeros(long) -> <class java.lang.Integer: 64>
..=> public static long java.lang.Long.rotateRight(long,int)
..<= public static long java.lang.Long.rotateRight(long,int) -> <class java.lang.Long: 0>
..=> public static long java.lang.Long.rotateLeft(long,int)
..<= public static long java.lang.Long.rotateLeft(long,int) -> <class java.lang.Long: 0>
..=> public static int java.lang.Long.signum(long)
..<= public static int java.lang.Long.signum(long) -> <class java.lang.Integer: 0>
..=> public static short java.lang.Short.reverseBytes(short)
..<= public static short java.lang.Short.reverseBytes(short) -> <class java.lang.Short: 0>
..=> public static double java.lang.Math.abs(double)
..<= public static double java.lang.Math.abs(double) -> <class java.lang.Double: 0.0>
..=> public static float java.lang.Math.abs(float)
..<= public static float java.lang.Math.abs(float) -> <class java.lang.Float: 0.0>
..=> public static long java.lang.Math.abs(long)
..<= public static long java.lang.Math.abs(long) -> <class java.lang.Long: 0>
..=> public static int java.lang.Math.abs(int)
..<= public static int java.lang.Math.abs(int) -> <class java.lang.Integer: 0>
..=> public static double java.lang.Math.min(double,double)
..<= public static double java.lang.Math.min(double,double) -> <class java.lang.Double: 0.0>
..=> public static float java.lang.Math.min(float,float)
..<= public static float java.lang.Math.min(float,float) -> <class java.lang.Float: 0.0>
..=> public static long java.lang.Math.min(long,long)
..<= public static long java.lang.Math.min(long,long) -> <class java.lang.Long: 0>
..=> public static int java.lang.Math.min(int,int)
..<= public static int java.lang.Math.min(int,int) -> <class java.lang.Integer: 0>
..=> public static double java.lang.Math.max(double,double)
..<= public static double java.lang.Math.max(double,double) -> <class java.lang.Double: 0.0>
..=> public static float java.lang.Math.max(float,float)
..<= public static float java.lang.Math.max(float,float) -> <class java.lang.Float: 0.0>
..=> public static long java.lang.Math.max(long,long)
..<= public static long java.lang.Math.max(long,long) -> <class java.lang.Long: 0>
..=> public static int java.lang.Math.max(int,int)
..<= public static int java.lang.Math.max(int,int) -> <class java.lang.Integer: 0>
..=> public static double java.lang.Math.cos(double)
..<= public static double java.lang.Math.cos(double) -> <class java.lang.Double: 1.0>
..=> public static double java.lang.Math.sin(double)
..<= public static double java.lang.Math.sin(double) -> <class java.lang.Double: 0.0>
..=> public static double java.lang.Math.acos(double)
..<= public static double java.lang.Math.acos(double) -> <class java.lang.Double: 1.5707963267948966>
..=> public static double java.lang.Math.asin(double)
..<= public static double java.lang.Math.asin(double) -> <class java.lang.Double: 0.0>
..=> public static double java.lang.Math.atan(double)
..<= public static double java.lang.Math.atan(double) -> <class java.lang.Double: 0.0>
..=> public static double java.lang.Math.atan2(double,double)
..<= public static double java.lang.Math.atan2(double,double) -> <class java.lang.Double: 0.0>
..=> public static double java.lang.Math.cbrt(double)
..<= public static double java.lang.Math.cbrt(double) -> <class java.lang.Double: 0.0>
..=> public static double java.lang.Math.cosh(double)
..<= public static double java.lang.Math.cosh(double) -> <class java.lang.Double: 1.0>
..=> public static double java.lang.Math.exp(double)
..<= public static double java.lang.Math.exp(double) -> <class java.lang.Double: 1.0>
..=> public static double java.lang.Math.expm1(double)
..<= public static double java.lang.Math.expm1(double) -> <class java.lang.Double: 0.0>
..=> public static double java.lang.Math.hypot(double,double)
..<= public static double java.lang.Math.hypot(double,double) -> <class java.lang.Double: 0.0>
..=> public static double java.lang.Math.log(double)
..<= public static double java.lang.Math.log(double) -> <class java.lang.Double: -Infinity>
..=> public static double java.lang.Math.log10(double)
..<= public static double java.lang.Math.log10(double) -> <class java.lang.Double: -Infinity>
..=> public static double java.lang.Math.nextAfter(double,double)
..<= public static double java.lang.Math.nextAfter(double,double) -> <class java.lang.Double: 0.0>
..=> public static double java.lang.Math.sinh(double)
..<= public static double java.lang.Math.sinh(double) -> <class java.lang.Double: 0.0>
..=> public static double java.lang.Math.tan(double)
..<= public static double java.lang.Math.tan(double) -> <class java.lang.Double: 0.0>
..=> public static double java.lang.Math.tanh(double)
..<= public static double java.lang.Math.tanh(double) -> <class java.lang.Double: 0.0>
..=> public static double java.lang.Math.sqrt(double)
..<= public static double java.lang.Math.sqrt(double) -> <class java.lang.Double: 0.0>
..=> public static double java.lang.Math.ceil(double)
..<= public static double java.lang.Math.ceil(double) -> <class java.lang.Double: 0.0>
..=> public static double java.lang.Math.floor(double)
..<= public static double java.lang.Math.floor(double) -> <class java.lang.Double: 0.0>
..=> public static double java.lang.Math.rint(double)
..<= public static double java.lang.Math.rint(double) -> <class java.lang.Double: 0.0>
..=> public static long java.lang.Math.round(double)
..<= public static long java.lang.Math.round(double) -> <class java.lang.Long: 0>
..=> public static int java.lang.Math.round(float)
..<= public static int java.lang.Math.round(float) -> <class java.lang.Integer: 0>
..=> public static java.lang.Thread java.lang.Thread.currentThread()
..<= public static java.lang.Thread java.lang.Thread.currentThread() -> <<non-deterministic>: <non-deterministic>>
..=> public char java.lang.String.charAt(int)
..<= public char java.lang.String.charAt(int) -> <class java.lang.Character: s>
..=> public int java.lang.String.compareTo(java.lang.String)
..<= public int java.lang.String.compareTo(java.lang.String) -> <class java.lang.Integer: 11>
..=> public boolean java.lang.String.equals(java.lang.Object)
..<= public boolean java.lang.String.equals(java.lang.Object) -> <class java.lang.Boolean: false>
..=> public int java.lang.String.indexOf(int)
..<= public int java.lang.String.indexOf(int) -> <class java.lang.Integer: -1>
..=> public int java.lang.String.indexOf(int,int)
..<= public int java.lang.String.indexOf(int,int) -> <class java.lang.Integer: -1>
..=> public int java.lang.String.indexOf(java.lang.String)
..<= public int java.lang.String.indexOf(java.lang.String) -> <class java.lang.Integer: -1>
..=> public int java.lang.String.indexOf(java.lang.String,int)
..<= public int java.lang.String.indexOf(java.lang.String,int) -> <class java.lang.Integer: -1>
..=> public boolean java.lang.String.isEmpty()
..<= public boolean java.lang.String.isEmpty() -> <class java.lang.Boolean: false>
..=> public int java.lang.String.length()
..<= public int java.lang.String.length() -> <class java.lang.Integer: 17>
..=> public synchronized java.lang.StringBuffer java.lang.StringBuffer.append(java.lang.String)
..<= public synchronized java.lang.StringBuffer java.lang.StringBuffer.append(java.lang.String) -> <class java.lang.StringBuffer: some large string bufferhello>
..=> public synchronized int java.lang.StringBuffer.length()
..<= public synchronized int java.lang.StringBuffer.length() -> <class java.lang.Integer: 29>
..=> public synchronized java.lang.String java.lang.StringBuffer.toString()
..<= public synchronized java.lang.String java.lang.StringBuffer.toString() -> <class java.lang.String: some large string bufferhello>
..=> public java.lang.StringBuilder java.lang.StringBuilder.append(java.lang.String)
..<= public java.lang.StringBuilder java.lang.StringBuilder.append(java.lang.String) -> <class java.lang.StringBuilder: some large string builderhello>
..=> public int java.lang.StringBuilder.length()
..<= public int java.lang.StringBuilder.length() -> <class java.lang.Integer: 30>
..=> public java.lang.String java.lang.StringBuilder.toString()
..<= public java.lang.String java.lang.StringBuilder.toString() -> <class java.lang.String: some large string builderhello>
..=> public static java.lang.Integer java.lang.Integer.valueOf(int)
..<= public static java.lang.Integer java.lang.Integer.valueOf(int) -> <class java.lang.Integer: 0>
..=> public static boolean java.lang.Thread.interrupted()
..<= public static boolean java.lang.Thread.interrupted() -> <class java.lang.Boolean: false>
.<= static void art.Test988Intrinsics.test() -> <null: null>
.=> public static void java.lang.System.arraycopy(java.lang.Object,int,java.lang.Object,int,int)
.<= public static void java.lang.System.arraycopy(java.lang.Object,int,java.lang.Object,int,int) -> <null: null>
.=> public static void java.lang.System.arraycopy(java.lang.Object,int,java.lang.Object,int,int)
.<= public static void java.lang.System.arraycopy(java.lang.Object,int,java.lang.Object,int,int) -> <null: null>
<= static void art.Test988$IntrinsicsTest.doTest() -> <null: null>
=> public static java.lang.Thread java.lang.Thread.currentThread()
<= public static java.lang.Thread java.lang.Thread.currentThread() -> <<non-deterministic>: <non-deterministic>>
=> public static void art.Trace.disableTracing(java.lang.Thread)
