public class freemarker.core.ArithmeticEngine$ConservativeEngine extends freemarker.core.ArithmeticEngine
  minor version: 0
  major version: 59
  flags: flags: (0x0021) ACC_PUBLIC, ACC_SUPER
  this_class: freemarker.core.ArithmeticEngine$ConservativeEngine
  super_class: freemarker.core.ArithmeticEngine
{
  private static final int INTEGER;
    descriptor: I
    flags: (0x001a) ACC_PRIVATE, ACC_STATIC, ACC_FINAL
    ConstantValue: 0

  private static final int LONG;
    descriptor: I
    flags: (0x001a) ACC_PRIVATE, ACC_STATIC, ACC_FINAL
    ConstantValue: 1

  private static final int FLOAT;
    descriptor: I
    flags: (0x001a) ACC_PRIVATE, ACC_STATIC, ACC_FINAL
    ConstantValue: 2

  private static final int DOUBLE;
    descriptor: I
    flags: (0x001a) ACC_PRIVATE, ACC_STATIC, ACC_FINAL
    ConstantValue: 3

  private static final int BIGINTEGER;
    descriptor: I
    flags: (0x001a) ACC_PRIVATE, ACC_STATIC, ACC_FINAL
    ConstantValue: 4

  private static final int BIGDECIMAL;
    descriptor: I
    flags: (0x001a) ACC_PRIVATE, ACC_STATIC, ACC_FINAL
    ConstantValue: 5

  private static final java.util.Map classCodes;
    descriptor: Ljava/util/Map;
    flags: (0x001a) ACC_PRIVATE, ACC_STATIC, ACC_FINAL

  static void <clinit>();
    descriptor: ()V
    flags: (0x0008) ACC_STATIC
    Code:
      stack=1, locals=0, args_size=0
         0: .line 287
            invokestatic freemarker.core.ArithmeticEngine$ConservativeEngine.createClassCodesMap:()Ljava/util/Map;
            putstatic freemarker.core.ArithmeticEngine$ConservativeEngine.classCodes:Ljava/util/Map;
            return
      LocalVariableTable:
        Start  End  Slot  Name  Signature

  public void <init>();
    descriptor: ()V
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=1, locals=1, args_size=1
        start local 0 // freemarker.core.ArithmeticEngine$ConservativeEngine this
         0: .line 279
            aload 0 /* this */
            invokespecial freemarker.core.ArithmeticEngine.<init>:()V
            return
        end local 0 // freemarker.core.ArithmeticEngine$ConservativeEngine this
      LocalVariableTable:
        Start  End  Slot  Name  Signature
            0    1     0  this  Lfreemarker/core/ArithmeticEngine$ConservativeEngine;

  public int compareNumbers(java.lang.Number, java.lang.Number);
    descriptor: (Ljava/lang/Number;Ljava/lang/Number;)I
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=4, locals=7, args_size=3
        start local 0 // freemarker.core.ArithmeticEngine$ConservativeEngine this
        start local 1 // java.lang.Number first
        start local 2 // java.lang.Number second
         0: .line 291
            aload 1 /* first */
            aload 2 /* second */
            invokestatic freemarker.core.ArithmeticEngine$ConservativeEngine.getCommonClassCode:(Ljava/lang/Number;Ljava/lang/Number;)I
            tableswitch { // 0 - 5
                    0: 1
                    1: 7
                    2: 13
                    3: 19
                    4: 25
                    5: 28
              default: 31
          }
         1: .line 293
      StackMap locals:
      StackMap stack:
            aload 1 /* first */
            invokevirtual java.lang.Number.intValue:()I
            istore 3 /* n1 */
        start local 3 // int n1
         2: .line 294
            aload 2 /* second */
            invokevirtual java.lang.Number.intValue:()I
            istore 4 /* n2 */
        start local 4 // int n2
         3: .line 295
            iload 3 /* n1 */
            iload 4 /* n2 */
            if_icmpge 4
            iconst_m1
            goto 6
      StackMap locals: int int
      StackMap stack:
         4: iload 3 /* n1 */
            iload 4 /* n2 */
            if_icmpne 5
            iconst_0
            goto 6
      StackMap locals:
      StackMap stack:
         5: iconst_1
      StackMap locals:
      StackMap stack: int
         6: ireturn
        end local 4 // int n2
        end local 3 // int n1
         7: .line 298
      StackMap locals:
      StackMap stack:
            aload 1 /* first */
            invokevirtual java.lang.Number.longValue:()J
            lstore 3 /* n1 */
        start local 3 // long n1
         8: .line 299
            aload 2 /* second */
            invokevirtual java.lang.Number.longValue:()J
            lstore 5 /* n2 */
        start local 5 // long n2
         9: .line 300
            lload 3 /* n1 */
            lload 5 /* n2 */
            lcmp
            ifge 10
            iconst_m1
            goto 12
      StackMap locals: long long
      StackMap stack:
        10: lload 3 /* n1 */
            lload 5 /* n2 */
            lcmp
            ifne 11
            iconst_0
            goto 12
      StackMap locals:
      StackMap stack:
        11: iconst_1
      StackMap locals:
      StackMap stack: int
        12: ireturn
        end local 5 // long n2
        end local 3 // long n1
        13: .line 303
      StackMap locals:
      StackMap stack:
            aload 1 /* first */
            invokevirtual java.lang.Number.floatValue:()F
            fstore 3 /* n1 */
        start local 3 // float n1
        14: .line 304
            aload 2 /* second */
            invokevirtual java.lang.Number.floatValue:()F
            fstore 4 /* n2 */
        start local 4 // float n2
        15: .line 305
            fload 3 /* n1 */
            fload 4 /* n2 */
            fcmpg
            ifge 16
            iconst_m1
            goto 18
      StackMap locals: float float
      StackMap stack:
        16: fload 3 /* n1 */
            fload 4 /* n2 */
            fcmpl
            ifne 17
            iconst_0
            goto 18
      StackMap locals:
      StackMap stack:
        17: iconst_1
      StackMap locals:
      StackMap stack: int
        18: ireturn
        end local 4 // float n2
        end local 3 // float n1
        19: .line 308
      StackMap locals:
      StackMap stack:
            aload 1 /* first */
            invokevirtual java.lang.Number.doubleValue:()D
            dstore 3 /* n1 */
        start local 3 // double n1
        20: .line 309
            aload 2 /* second */
            invokevirtual java.lang.Number.doubleValue:()D
            dstore 5 /* n2 */
        start local 5 // double n2
        21: .line 310
            dload 3 /* n1 */
            dload 5 /* n2 */
            dcmpg
            ifge 22
            iconst_m1
            goto 24
      StackMap locals: double double
      StackMap stack:
        22: dload 3 /* n1 */
            dload 5 /* n2 */
            dcmpl
            ifne 23
            iconst_0
            goto 24
      StackMap locals:
      StackMap stack:
        23: iconst_1
      StackMap locals:
      StackMap stack: int
        24: ireturn
        end local 5 // double n2
        end local 3 // double n1
        25: .line 313
      StackMap locals:
      StackMap stack:
            aload 1 /* first */
            invokestatic freemarker.core.ArithmeticEngine$ConservativeEngine.toBigInteger:(Ljava/lang/Number;)Ljava/math/BigInteger;
            astore 3 /* n1 */
        start local 3 // java.math.BigInteger n1
        26: .line 314
            aload 2 /* second */
            invokestatic freemarker.core.ArithmeticEngine$ConservativeEngine.toBigInteger:(Ljava/lang/Number;)Ljava/math/BigInteger;
            astore 4 /* n2 */
        start local 4 // java.math.BigInteger n2
        27: .line 315
            aload 3 /* n1 */
            aload 4 /* n2 */
            invokevirtual java.math.BigInteger.compareTo:(Ljava/math/BigInteger;)I
            ireturn
        end local 4 // java.math.BigInteger n2
        end local 3 // java.math.BigInteger n1
        28: .line 318
      StackMap locals:
      StackMap stack:
            aload 1 /* first */
            invokestatic freemarker.core.ArithmeticEngine.toBigDecimal:(Ljava/lang/Number;)Ljava/math/BigDecimal;
            astore 3 /* n1 */
        start local 3 // java.math.BigDecimal n1
        29: .line 319
            aload 2 /* second */
            invokestatic freemarker.core.ArithmeticEngine.toBigDecimal:(Ljava/lang/Number;)Ljava/math/BigDecimal;
            astore 4 /* n2 */
        start local 4 // java.math.BigDecimal n2
        30: .line 320
            aload 3 /* n1 */
            aload 4 /* n2 */
            invokevirtual java.math.BigDecimal.compareTo:(Ljava/math/BigDecimal;)I
            ireturn
        end local 4 // java.math.BigDecimal n2
        end local 3 // java.math.BigDecimal n1
        31: .line 325
      StackMap locals:
      StackMap stack:
            new java.lang.Error
            dup
            invokespecial java.lang.Error.<init>:()V
            athrow
        end local 2 // java.lang.Number second
        end local 1 // java.lang.Number first
        end local 0 // freemarker.core.ArithmeticEngine$ConservativeEngine this
      LocalVariableTable:
        Start  End  Slot    Name  Signature
            0   32     0    this  Lfreemarker/core/ArithmeticEngine$ConservativeEngine;
            0   32     1   first  Ljava/lang/Number;
            0   32     2  second  Ljava/lang/Number;
            2    7     3      n1  I
            3    7     4      n2  I
            8   13     3      n1  J
            9   13     5      n2  J
           14   19     3      n1  F
           15   19     4      n2  F
           20   25     3      n1  D
           21   25     5      n2  D
           26   28     3      n1  Ljava/math/BigInteger;
           27   28     4      n2  Ljava/math/BigInteger;
           29   31     3      n1  Ljava/math/BigDecimal;
           30   31     4      n2  Ljava/math/BigDecimal;
    Exceptions:
      throws freemarker.template.TemplateException
    MethodParameters:
        Name  Flags
      first   
      second  

  public java.lang.Number add(java.lang.Number, java.lang.Number);
    descriptor: (Ljava/lang/Number;Ljava/lang/Number;)Ljava/lang/Number;
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=4, locals=9, args_size=3
        start local 0 // freemarker.core.ArithmeticEngine$ConservativeEngine this
        start local 1 // java.lang.Number first
        start local 2 // java.lang.Number second
         0: .line 330
            aload 1 /* first */
            aload 2 /* second */
            invokestatic freemarker.core.ArithmeticEngine$ConservativeEngine.getCommonClassCode:(Ljava/lang/Number;Ljava/lang/Number;)I
            tableswitch { // 0 - 5
                    0: 1
                    1: 9
                    2: 16
                    3: 17
                    4: 18
                    5: 21
              default: 24
          }
         1: .line 332
      StackMap locals:
      StackMap stack:
            aload 1 /* first */
            invokevirtual java.lang.Number.intValue:()I
            istore 3 /* n1 */
        start local 3 // int n1
         2: .line 333
            aload 2 /* second */
            invokevirtual java.lang.Number.intValue:()I
            istore 4 /* n2 */
        start local 4 // int n2
         3: .line 334
            iload 3 /* n1 */
            iload 4 /* n2 */
            iadd
            istore 5 /* n */
        start local 5 // int n
         4: .line 336
            iload 5 /* n */
            iload 3 /* n1 */
            ixor
            ifge 6
            iload 5 /* n */
            iload 4 /* n2 */
            ixor
            ifge 6
         5: .line 337
            iload 3 /* n1 */
            i2l
            iload 4 /* n2 */
            i2l
            ladd
            invokestatic java.lang.Long.valueOf:(J)Ljava/lang/Long;
            invokevirtual java.lang.Long.longValue:()J
            goto 7
         6: .line 338
      StackMap locals: int int int
      StackMap stack:
            iload 5 /* n */
            invokestatic java.lang.Integer.valueOf:(I)Ljava/lang/Integer;
            invokevirtual java.lang.Integer.intValue:()I
            i2l
         7: .line 336
      StackMap locals:
      StackMap stack: long
            invokestatic java.lang.Long.valueOf:(J)Ljava/lang/Long;
         8: .line 335
            areturn
        end local 5 // int n
        end local 4 // int n2
        end local 3 // int n1
         9: .line 341
      StackMap locals:
      StackMap stack:
            aload 1 /* first */
            invokevirtual java.lang.Number.longValue:()J
            lstore 3 /* n1 */
        start local 3 // long n1
        10: .line 342
            aload 2 /* second */
            invokevirtual java.lang.Number.longValue:()J
            lstore 5 /* n2 */
        start local 5 // long n2
        11: .line 343
            lload 3 /* n1 */
            lload 5 /* n2 */
            ladd
            lstore 7 /* n */
        start local 7 // long n
        12: .line 345
            lload 7 /* n */
            lload 3 /* n1 */
            lxor
            lconst_0
            lcmp
            ifge 14
            lload 7 /* n */
            lload 5 /* n2 */
            lxor
            lconst_0
            lcmp
            ifge 14
        13: .line 346
            aload 1 /* first */
            invokestatic freemarker.core.ArithmeticEngine$ConservativeEngine.toBigInteger:(Ljava/lang/Number;)Ljava/math/BigInteger;
            aload 2 /* second */
            invokestatic freemarker.core.ArithmeticEngine$ConservativeEngine.toBigInteger:(Ljava/lang/Number;)Ljava/math/BigInteger;
            invokevirtual java.math.BigInteger.add:(Ljava/math/BigInteger;)Ljava/math/BigInteger;
            goto 15
        14: .line 347
      StackMap locals: long long long
      StackMap stack:
            lload 7 /* n */
            invokestatic java.lang.Long.valueOf:(J)Ljava/lang/Long;
        15: .line 344
      StackMap locals:
      StackMap stack: java.lang.Number
            areturn
        end local 7 // long n
        end local 5 // long n2
        end local 3 // long n1
        16: .line 350
      StackMap locals:
      StackMap stack:
            aload 1 /* first */
            invokevirtual java.lang.Number.floatValue:()F
            aload 2 /* second */
            invokevirtual java.lang.Number.floatValue:()F
            fadd
            invokestatic java.lang.Float.valueOf:(F)Ljava/lang/Float;
            areturn
        17: .line 353
      StackMap locals:
      StackMap stack:
            aload 1 /* first */
            invokevirtual java.lang.Number.doubleValue:()D
            aload 2 /* second */
            invokevirtual java.lang.Number.doubleValue:()D
            dadd
            invokestatic java.lang.Double.valueOf:(D)Ljava/lang/Double;
            areturn
        18: .line 356
      StackMap locals:
      StackMap stack:
            aload 1 /* first */
            invokestatic freemarker.core.ArithmeticEngine$ConservativeEngine.toBigInteger:(Ljava/lang/Number;)Ljava/math/BigInteger;
            astore 3 /* n1 */
        start local 3 // java.math.BigInteger n1
        19: .line 357
            aload 2 /* second */
            invokestatic freemarker.core.ArithmeticEngine$ConservativeEngine.toBigInteger:(Ljava/lang/Number;)Ljava/math/BigInteger;
            astore 4 /* n2 */
        start local 4 // java.math.BigInteger n2
        20: .line 358
            aload 3 /* n1 */
            aload 4 /* n2 */
            invokevirtual java.math.BigInteger.add:(Ljava/math/BigInteger;)Ljava/math/BigInteger;
            areturn
        end local 4 // java.math.BigInteger n2
        end local 3 // java.math.BigInteger n1
        21: .line 361
      StackMap locals:
      StackMap stack:
            aload 1 /* first */
            invokestatic freemarker.core.ArithmeticEngine.toBigDecimal:(Ljava/lang/Number;)Ljava/math/BigDecimal;
            astore 3 /* n1 */
        start local 3 // java.math.BigDecimal n1
        22: .line 362
            aload 2 /* second */
            invokestatic freemarker.core.ArithmeticEngine.toBigDecimal:(Ljava/lang/Number;)Ljava/math/BigDecimal;
            astore 4 /* n2 */
        start local 4 // java.math.BigDecimal n2
        23: .line 363
            aload 3 /* n1 */
            aload 4 /* n2 */
            invokevirtual java.math.BigDecimal.add:(Ljava/math/BigDecimal;)Ljava/math/BigDecimal;
            areturn
        end local 4 // java.math.BigDecimal n2
        end local 3 // java.math.BigDecimal n1
        24: .line 368
      StackMap locals:
      StackMap stack:
            new java.lang.Error
            dup
            invokespecial java.lang.Error.<init>:()V
            athrow
        end local 2 // java.lang.Number second
        end local 1 // java.lang.Number first
        end local 0 // freemarker.core.ArithmeticEngine$ConservativeEngine this
      LocalVariableTable:
        Start  End  Slot    Name  Signature
            0   25     0    this  Lfreemarker/core/ArithmeticEngine$ConservativeEngine;
            0   25     1   first  Ljava/lang/Number;
            0   25     2  second  Ljava/lang/Number;
            2    9     3      n1  I
            3    9     4      n2  I
            4    9     5       n  I
           10   16     3      n1  J
           11   16     5      n2  J
           12   16     7       n  J
           19   21     3      n1  Ljava/math/BigInteger;
           20   21     4      n2  Ljava/math/BigInteger;
           22   24     3      n1  Ljava/math/BigDecimal;
           23   24     4      n2  Ljava/math/BigDecimal;
    Exceptions:
      throws freemarker.template.TemplateException
    MethodParameters:
        Name  Flags
      first   
      second  

  public java.lang.Number subtract(java.lang.Number, java.lang.Number);
    descriptor: (Ljava/lang/Number;Ljava/lang/Number;)Ljava/lang/Number;
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=6, locals=9, args_size=3
        start local 0 // freemarker.core.ArithmeticEngine$ConservativeEngine this
        start local 1 // java.lang.Number first
        start local 2 // java.lang.Number second
         0: .line 373
            aload 1 /* first */
            aload 2 /* second */
            invokestatic freemarker.core.ArithmeticEngine$ConservativeEngine.getCommonClassCode:(Ljava/lang/Number;Ljava/lang/Number;)I
            tableswitch { // 0 - 5
                    0: 1
                    1: 8
                    2: 15
                    3: 16
                    4: 17
                    5: 20
              default: 23
          }
         1: .line 375
      StackMap locals:
      StackMap stack:
            aload 1 /* first */
            invokevirtual java.lang.Number.intValue:()I
            istore 3 /* n1 */
        start local 3 // int n1
         2: .line 376
            aload 2 /* second */
            invokevirtual java.lang.Number.intValue:()I
            istore 4 /* n2 */
        start local 4 // int n2
         3: .line 377
            iload 3 /* n1 */
            iload 4 /* n2 */
            isub
            istore 5 /* n */
        start local 5 // int n
         4: .line 379
            iload 5 /* n */
            iload 3 /* n1 */
            ixor
            ifge 6
            iload 5 /* n */
            iload 4 /* n2 */
            iconst_m1
            ixor
            ixor
            ifge 6
         5: .line 380
            iload 3 /* n1 */
            i2l
            iload 4 /* n2 */
            i2l
            lsub
            invokestatic java.lang.Long.valueOf:(J)Ljava/lang/Long;
            goto 7
         6: .line 381
      StackMap locals: int int int
      StackMap stack:
            iload 5 /* n */
            invokestatic java.lang.Integer.valueOf:(I)Ljava/lang/Integer;
         7: .line 378
      StackMap locals:
      StackMap stack: java.lang.Number
            areturn
        end local 5 // int n
        end local 4 // int n2
        end local 3 // int n1
         8: .line 384
      StackMap locals:
      StackMap stack:
            aload 1 /* first */
            invokevirtual java.lang.Number.longValue:()J
            lstore 3 /* n1 */
        start local 3 // long n1
         9: .line 385
            aload 2 /* second */
            invokevirtual java.lang.Number.longValue:()J
            lstore 5 /* n2 */
        start local 5 // long n2
        10: .line 386
            lload 3 /* n1 */
            lload 5 /* n2 */
            lsub
            lstore 7 /* n */
        start local 7 // long n
        11: .line 388
            lload 7 /* n */
            lload 3 /* n1 */
            lxor
            lconst_0
            lcmp
            ifge 13
            lload 7 /* n */
            lload 5 /* n2 */
            ldc -1
            lxor
            lxor
            lconst_0
            lcmp
            ifge 13
        12: .line 389
            aload 1 /* first */
            invokestatic freemarker.core.ArithmeticEngine$ConservativeEngine.toBigInteger:(Ljava/lang/Number;)Ljava/math/BigInteger;
            aload 2 /* second */
            invokestatic freemarker.core.ArithmeticEngine$ConservativeEngine.toBigInteger:(Ljava/lang/Number;)Ljava/math/BigInteger;
            invokevirtual java.math.BigInteger.subtract:(Ljava/math/BigInteger;)Ljava/math/BigInteger;
            goto 14
        13: .line 390
      StackMap locals: long long long
      StackMap stack:
            lload 7 /* n */
            invokestatic java.lang.Long.valueOf:(J)Ljava/lang/Long;
        14: .line 387
      StackMap locals:
      StackMap stack: java.lang.Number
            areturn
        end local 7 // long n
        end local 5 // long n2
        end local 3 // long n1
        15: .line 393
      StackMap locals:
      StackMap stack:
            aload 1 /* first */
            invokevirtual java.lang.Number.floatValue:()F
            aload 2 /* second */
            invokevirtual java.lang.Number.floatValue:()F
            fsub
            invokestatic java.lang.Float.valueOf:(F)Ljava/lang/Float;
            areturn
        16: .line 396
      StackMap locals:
      StackMap stack:
            aload 1 /* first */
            invokevirtual java.lang.Number.doubleValue:()D
            aload 2 /* second */
            invokevirtual java.lang.Number.doubleValue:()D
            dsub
            invokestatic java.lang.Double.valueOf:(D)Ljava/lang/Double;
            areturn
        17: .line 399
      StackMap locals:
      StackMap stack:
            aload 1 /* first */
            invokestatic freemarker.core.ArithmeticEngine$ConservativeEngine.toBigInteger:(Ljava/lang/Number;)Ljava/math/BigInteger;
            astore 3 /* n1 */
        start local 3 // java.math.BigInteger n1
        18: .line 400
            aload 2 /* second */
            invokestatic freemarker.core.ArithmeticEngine$ConservativeEngine.toBigInteger:(Ljava/lang/Number;)Ljava/math/BigInteger;
            astore 4 /* n2 */
        start local 4 // java.math.BigInteger n2
        19: .line 401
            aload 3 /* n1 */
            aload 4 /* n2 */
            invokevirtual java.math.BigInteger.subtract:(Ljava/math/BigInteger;)Ljava/math/BigInteger;
            areturn
        end local 4 // java.math.BigInteger n2
        end local 3 // java.math.BigInteger n1
        20: .line 404
      StackMap locals:
      StackMap stack:
            aload 1 /* first */
            invokestatic freemarker.core.ArithmeticEngine.toBigDecimal:(Ljava/lang/Number;)Ljava/math/BigDecimal;
            astore 3 /* n1 */
        start local 3 // java.math.BigDecimal n1
        21: .line 405
            aload 2 /* second */
            invokestatic freemarker.core.ArithmeticEngine.toBigDecimal:(Ljava/lang/Number;)Ljava/math/BigDecimal;
            astore 4 /* n2 */
        start local 4 // java.math.BigDecimal n2
        22: .line 406
            aload 3 /* n1 */
            aload 4 /* n2 */
            invokevirtual java.math.BigDecimal.subtract:(Ljava/math/BigDecimal;)Ljava/math/BigDecimal;
            areturn
        end local 4 // java.math.BigDecimal n2
        end local 3 // java.math.BigDecimal n1
        23: .line 411
      StackMap locals:
      StackMap stack:
            new java.lang.Error
            dup
            invokespecial java.lang.Error.<init>:()V
            athrow
        end local 2 // java.lang.Number second
        end local 1 // java.lang.Number first
        end local 0 // freemarker.core.ArithmeticEngine$ConservativeEngine this
      LocalVariableTable:
        Start  End  Slot    Name  Signature
            0   24     0    this  Lfreemarker/core/ArithmeticEngine$ConservativeEngine;
            0   24     1   first  Ljava/lang/Number;
            0   24     2  second  Ljava/lang/Number;
            2    8     3      n1  I
            3    8     4      n2  I
            4    8     5       n  I
            9   15     3      n1  J
           10   15     5      n2  J
           11   15     7       n  J
           18   20     3      n1  Ljava/math/BigInteger;
           19   20     4      n2  Ljava/math/BigInteger;
           21   23     3      n1  Ljava/math/BigDecimal;
           22   23     4      n2  Ljava/math/BigDecimal;
    Exceptions:
      throws freemarker.template.TemplateException
    MethodParameters:
        Name  Flags
      first   
      second  

  public java.lang.Number multiply(java.lang.Number, java.lang.Number);
    descriptor: (Ljava/lang/Number;Ljava/lang/Number;)Ljava/lang/Number;
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=4, locals=9, args_size=3
        start local 0 // freemarker.core.ArithmeticEngine$ConservativeEngine this
        start local 1 // java.lang.Number first
        start local 2 // java.lang.Number second
         0: .line 416
            aload 1 /* first */
            aload 2 /* second */
            invokestatic freemarker.core.ArithmeticEngine$ConservativeEngine.getCommonClassCode:(Ljava/lang/Number;Ljava/lang/Number;)I
            tableswitch { // 0 - 5
                    0: 1
                    1: 8
                    2: 15
                    3: 16
                    4: 17
                    5: 20
              default: 26
          }
         1: .line 418
      StackMap locals:
      StackMap stack:
            aload 1 /* first */
            invokevirtual java.lang.Number.intValue:()I
            istore 3 /* n1 */
        start local 3 // int n1
         2: .line 419
            aload 2 /* second */
            invokevirtual java.lang.Number.intValue:()I
            istore 4 /* n2 */
        start local 4 // int n2
         3: .line 420
            iload 3 /* n1 */
            iload 4 /* n2 */
            imul
            istore 5 /* n */
        start local 5 // int n
         4: .line 422
            iload 3 /* n1 */
            ifeq 5
            iload 5 /* n */
            iload 3 /* n1 */
            idiv
            iload 4 /* n2 */
            if_icmpne 6
         5: .line 423
      StackMap locals: int int int
      StackMap stack:
            iload 5 /* n */
            invokestatic java.lang.Integer.valueOf:(I)Ljava/lang/Integer;
            goto 7
         6: .line 424
      StackMap locals:
      StackMap stack:
            iload 3 /* n1 */
            i2l
            iload 4 /* n2 */
            i2l
            lmul
            invokestatic java.lang.Long.valueOf:(J)Ljava/lang/Long;
         7: .line 421
      StackMap locals:
      StackMap stack: java.lang.Number
            areturn
        end local 5 // int n
        end local 4 // int n2
        end local 3 // int n1
         8: .line 427
      StackMap locals:
      StackMap stack:
            aload 1 /* first */
            invokevirtual java.lang.Number.longValue:()J
            lstore 3 /* n1 */
        start local 3 // long n1
         9: .line 428
            aload 2 /* second */
            invokevirtual java.lang.Number.longValue:()J
            lstore 5 /* n2 */
        start local 5 // long n2
        10: .line 429
            lload 3 /* n1 */
            lload 5 /* n2 */
            lmul
            lstore 7 /* n */
        start local 7 // long n
        11: .line 431
            lload 3 /* n1 */
            lconst_0
            lcmp
            ifeq 12
            lload 7 /* n */
            lload 3 /* n1 */
            ldiv
            lload 5 /* n2 */
            lcmp
            ifne 13
        12: .line 432
      StackMap locals: long long long
      StackMap stack:
            lload 7 /* n */
            invokestatic java.lang.Long.valueOf:(J)Ljava/lang/Long;
            goto 14
        13: .line 433
      StackMap locals:
      StackMap stack:
            aload 1 /* first */
            invokestatic freemarker.core.ArithmeticEngine$ConservativeEngine.toBigInteger:(Ljava/lang/Number;)Ljava/math/BigInteger;
            aload 2 /* second */
            invokestatic freemarker.core.ArithmeticEngine$ConservativeEngine.toBigInteger:(Ljava/lang/Number;)Ljava/math/BigInteger;
            invokevirtual java.math.BigInteger.multiply:(Ljava/math/BigInteger;)Ljava/math/BigInteger;
        14: .line 430
      StackMap locals:
      StackMap stack: java.lang.Number
            areturn
        end local 7 // long n
        end local 5 // long n2
        end local 3 // long n1
        15: .line 436
      StackMap locals:
      StackMap stack:
            aload 1 /* first */
            invokevirtual java.lang.Number.floatValue:()F
            aload 2 /* second */
            invokevirtual java.lang.Number.floatValue:()F
            fmul
            invokestatic java.lang.Float.valueOf:(F)Ljava/lang/Float;
            areturn
        16: .line 439
      StackMap locals:
      StackMap stack:
            aload 1 /* first */
            invokevirtual java.lang.Number.doubleValue:()D
            aload 2 /* second */
            invokevirtual java.lang.Number.doubleValue:()D
            dmul
            invokestatic java.lang.Double.valueOf:(D)Ljava/lang/Double;
            areturn
        17: .line 442
      StackMap locals:
      StackMap stack:
            aload 1 /* first */
            invokestatic freemarker.core.ArithmeticEngine$ConservativeEngine.toBigInteger:(Ljava/lang/Number;)Ljava/math/BigInteger;
            astore 3 /* n1 */
        start local 3 // java.math.BigInteger n1
        18: .line 443
            aload 2 /* second */
            invokestatic freemarker.core.ArithmeticEngine$ConservativeEngine.toBigInteger:(Ljava/lang/Number;)Ljava/math/BigInteger;
            astore 4 /* n2 */
        start local 4 // java.math.BigInteger n2
        19: .line 444
            aload 3 /* n1 */
            aload 4 /* n2 */
            invokevirtual java.math.BigInteger.multiply:(Ljava/math/BigInteger;)Ljava/math/BigInteger;
            areturn
        end local 4 // java.math.BigInteger n2
        end local 3 // java.math.BigInteger n1
        20: .line 447
      StackMap locals:
      StackMap stack:
            aload 1 /* first */
            invokestatic freemarker.core.ArithmeticEngine.toBigDecimal:(Ljava/lang/Number;)Ljava/math/BigDecimal;
            astore 3 /* n1 */
        start local 3 // java.math.BigDecimal n1
        21: .line 448
            aload 2 /* second */
            invokestatic freemarker.core.ArithmeticEngine.toBigDecimal:(Ljava/lang/Number;)Ljava/math/BigDecimal;
            astore 4 /* n2 */
        start local 4 // java.math.BigDecimal n2
        22: .line 449
            aload 3 /* n1 */
            aload 4 /* n2 */
            invokevirtual java.math.BigDecimal.multiply:(Ljava/math/BigDecimal;)Ljava/math/BigDecimal;
            astore 5 /* r */
        start local 5 // java.math.BigDecimal r
        23: .line 450
            aload 5 /* r */
            invokevirtual java.math.BigDecimal.scale:()I
            aload 0 /* this */
            getfield freemarker.core.ArithmeticEngine$ConservativeEngine.maxScale:I
            if_icmple 24
            aload 5 /* r */
            aload 0 /* this */
            getfield freemarker.core.ArithmeticEngine$ConservativeEngine.maxScale:I
            aload 0 /* this */
            getfield freemarker.core.ArithmeticEngine$ConservativeEngine.roundingPolicy:I
            invokevirtual java.math.BigDecimal.setScale:(II)Ljava/math/BigDecimal;
            goto 25
      StackMap locals: java.math.BigDecimal java.math.BigDecimal java.math.BigDecimal
      StackMap stack:
        24: aload 5 /* r */
      StackMap locals:
      StackMap stack: java.math.BigDecimal
        25: areturn
        end local 5 // java.math.BigDecimal r
        end local 4 // java.math.BigDecimal n2
        end local 3 // java.math.BigDecimal n1
        26: .line 455
      StackMap locals:
      StackMap stack:
            new java.lang.Error
            dup
            invokespecial java.lang.Error.<init>:()V
            athrow
        end local 2 // java.lang.Number second
        end local 1 // java.lang.Number first
        end local 0 // freemarker.core.ArithmeticEngine$ConservativeEngine this
      LocalVariableTable:
        Start  End  Slot    Name  Signature
            0   27     0    this  Lfreemarker/core/ArithmeticEngine$ConservativeEngine;
            0   27     1   first  Ljava/lang/Number;
            0   27     2  second  Ljava/lang/Number;
            2    8     3      n1  I
            3    8     4      n2  I
            4    8     5       n  I
            9   15     3      n1  J
           10   15     5      n2  J
           11   15     7       n  J
           18   20     3      n1  Ljava/math/BigInteger;
           19   20     4      n2  Ljava/math/BigInteger;
           21   26     3      n1  Ljava/math/BigDecimal;
           22   26     4      n2  Ljava/math/BigDecimal;
           23   26     5       r  Ljava/math/BigDecimal;
    Exceptions:
      throws freemarker.template.TemplateException
    MethodParameters:
        Name  Flags
      first   
      second  

  public java.lang.Number divide(java.lang.Number, java.lang.Number);
    descriptor: (Ljava/lang/Number;Ljava/lang/Number;)Ljava/lang/Number;
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=4, locals=8, args_size=3
        start local 0 // freemarker.core.ArithmeticEngine$ConservativeEngine this
        start local 1 // java.lang.Number first
        start local 2 // java.lang.Number second
         0: .line 460
            aload 1 /* first */
            aload 2 /* second */
            invokestatic freemarker.core.ArithmeticEngine$ConservativeEngine.getCommonClassCode:(Ljava/lang/Number;Ljava/lang/Number;)I
            tableswitch { // 0 - 5
                    0: 1
                    1: 6
                    2: 11
                    3: 12
                    4: 13
                    5: 21
              default: 28
          }
         1: .line 462
      StackMap locals:
      StackMap stack:
            aload 1 /* first */
            invokevirtual java.lang.Number.intValue:()I
            istore 3 /* n1 */
        start local 3 // int n1
         2: .line 463
            aload 2 /* second */
            invokevirtual java.lang.Number.intValue:()I
            istore 4 /* n2 */
        start local 4 // int n2
         3: .line 464
            iload 3 /* n1 */
            iload 4 /* n2 */
            irem
            ifne 5
         4: .line 465
            iload 3 /* n1 */
            iload 4 /* n2 */
            idiv
            invokestatic java.lang.Integer.valueOf:(I)Ljava/lang/Integer;
            areturn
         5: .line 467
      StackMap locals: int int
      StackMap stack:
            iload 3 /* n1 */
            i2d
            iload 4 /* n2 */
            i2d
            ddiv
            invokestatic java.lang.Double.valueOf:(D)Ljava/lang/Double;
            areturn
        end local 4 // int n2
        end local 3 // int n1
         6: .line 470
      StackMap locals:
      StackMap stack:
            aload 1 /* first */
            invokevirtual java.lang.Number.longValue:()J
            lstore 3 /* n1 */
        start local 3 // long n1
         7: .line 471
            aload 2 /* second */
            invokevirtual java.lang.Number.longValue:()J
            lstore 5 /* n2 */
        start local 5 // long n2
         8: .line 472
            lload 3 /* n1 */
            lload 5 /* n2 */
            lrem
            lconst_0
            lcmp
            ifne 10
         9: .line 473
            lload 3 /* n1 */
            lload 5 /* n2 */
            ldiv
            invokestatic java.lang.Long.valueOf:(J)Ljava/lang/Long;
            areturn
        10: .line 475
      StackMap locals: long long
      StackMap stack:
            lload 3 /* n1 */
            l2d
            lload 5 /* n2 */
            l2d
            ddiv
            invokestatic java.lang.Double.valueOf:(D)Ljava/lang/Double;
            areturn
        end local 5 // long n2
        end local 3 // long n1
        11: .line 478
      StackMap locals:
      StackMap stack:
            aload 1 /* first */
            invokevirtual java.lang.Number.floatValue:()F
            aload 2 /* second */
            invokevirtual java.lang.Number.floatValue:()F
            fdiv
            invokestatic java.lang.Float.valueOf:(F)Ljava/lang/Float;
            areturn
        12: .line 481
      StackMap locals:
      StackMap stack:
            aload 1 /* first */
            invokevirtual java.lang.Number.doubleValue:()D
            aload 2 /* second */
            invokevirtual java.lang.Number.doubleValue:()D
            ddiv
            invokestatic java.lang.Double.valueOf:(D)Ljava/lang/Double;
            areturn
        13: .line 484
      StackMap locals:
      StackMap stack:
            aload 1 /* first */
            invokestatic freemarker.core.ArithmeticEngine$ConservativeEngine.toBigInteger:(Ljava/lang/Number;)Ljava/math/BigInteger;
            astore 3 /* n1 */
        start local 3 // java.math.BigInteger n1
        14: .line 485
            aload 2 /* second */
            invokestatic freemarker.core.ArithmeticEngine$ConservativeEngine.toBigInteger:(Ljava/lang/Number;)Ljava/math/BigInteger;
            astore 4 /* n2 */
        start local 4 // java.math.BigInteger n2
        15: .line 486
            aload 3 /* n1 */
            aload 4 /* n2 */
            invokevirtual java.math.BigInteger.divideAndRemainder:(Ljava/math/BigInteger;)[Ljava/math/BigInteger;
            astore 5 /* divmod */
        start local 5 // java.math.BigInteger[] divmod
        16: .line 487
            aload 5 /* divmod */
            iconst_1
            aaload
            getstatic java.math.BigInteger.ZERO:Ljava/math/BigInteger;
            invokevirtual java.math.BigInteger.equals:(Ljava/lang/Object;)Z
            ifeq 18
        17: .line 488
            aload 5 /* divmod */
            iconst_0
            aaload
            areturn
        18: .line 490
      StackMap locals: java.math.BigInteger java.math.BigInteger java.math.BigInteger[]
      StackMap stack:
            new java.math.BigDecimal
            dup
            aload 3 /* n1 */
            invokespecial java.math.BigDecimal.<init>:(Ljava/math/BigInteger;)V
            astore 6 /* bd1 */
        start local 6 // java.math.BigDecimal bd1
        19: .line 491
            new java.math.BigDecimal
            dup
            aload 4 /* n2 */
            invokespecial java.math.BigDecimal.<init>:(Ljava/math/BigInteger;)V
            astore 7 /* bd2 */
        start local 7 // java.math.BigDecimal bd2
        20: .line 492
            aload 6 /* bd1 */
            aload 7 /* bd2 */
            aload 0 /* this */
            getfield freemarker.core.ArithmeticEngine$ConservativeEngine.minScale:I
            aload 0 /* this */
            getfield freemarker.core.ArithmeticEngine$ConservativeEngine.roundingPolicy:I
            invokevirtual java.math.BigDecimal.divide:(Ljava/math/BigDecimal;II)Ljava/math/BigDecimal;
            areturn
        end local 7 // java.math.BigDecimal bd2
        end local 6 // java.math.BigDecimal bd1
        end local 5 // java.math.BigInteger[] divmod
        end local 4 // java.math.BigInteger n2
        end local 3 // java.math.BigInteger n1
        21: .line 496
      StackMap locals:
      StackMap stack:
            aload 1 /* first */
            invokestatic freemarker.core.ArithmeticEngine.toBigDecimal:(Ljava/lang/Number;)Ljava/math/BigDecimal;
            astore 3 /* n1 */
        start local 3 // java.math.BigDecimal n1
        22: .line 497
            aload 2 /* second */
            invokestatic freemarker.core.ArithmeticEngine.toBigDecimal:(Ljava/lang/Number;)Ljava/math/BigDecimal;
            astore 4 /* n2 */
        start local 4 // java.math.BigDecimal n2
        23: .line 498
            aload 3 /* n1 */
            invokevirtual java.math.BigDecimal.scale:()I
            istore 5 /* scale1 */
        start local 5 // int scale1
        24: .line 499
            aload 4 /* n2 */
            invokevirtual java.math.BigDecimal.scale:()I
            istore 6 /* scale2 */
        start local 6 // int scale2
        25: .line 500
            iload 5 /* scale1 */
            iload 6 /* scale2 */
            invokestatic java.lang.Math.max:(II)I
            istore 7 /* scale */
        start local 7 // int scale
        26: .line 501
            aload 0 /* this */
            getfield freemarker.core.ArithmeticEngine$ConservativeEngine.minScale:I
            iload 7 /* scale */
            invokestatic java.lang.Math.max:(II)I
            istore 7 /* scale */
        27: .line 502
            aload 3 /* n1 */
            aload 4 /* n2 */
            iload 7 /* scale */
            aload 0 /* this */
            getfield freemarker.core.ArithmeticEngine$ConservativeEngine.roundingPolicy:I
            invokevirtual java.math.BigDecimal.divide:(Ljava/math/BigDecimal;II)Ljava/math/BigDecimal;
            areturn
        end local 7 // int scale
        end local 6 // int scale2
        end local 5 // int scale1
        end local 4 // java.math.BigDecimal n2
        end local 3 // java.math.BigDecimal n1
        28: .line 507
      StackMap locals:
      StackMap stack:
            new java.lang.Error
            dup
            invokespecial java.lang.Error.<init>:()V
            athrow
        end local 2 // java.lang.Number second
        end local 1 // java.lang.Number first
        end local 0 // freemarker.core.ArithmeticEngine$ConservativeEngine this
      LocalVariableTable:
        Start  End  Slot    Name  Signature
            0   29     0    this  Lfreemarker/core/ArithmeticEngine$ConservativeEngine;
            0   29     1   first  Ljava/lang/Number;
            0   29     2  second  Ljava/lang/Number;
            2    6     3      n1  I
            3    6     4      n2  I
            7   11     3      n1  J
            8   11     5      n2  J
           14   21     3      n1  Ljava/math/BigInteger;
           15   21     4      n2  Ljava/math/BigInteger;
           16   21     5  divmod  [Ljava/math/BigInteger;
           19   21     6     bd1  Ljava/math/BigDecimal;
           20   21     7     bd2  Ljava/math/BigDecimal;
           22   28     3      n1  Ljava/math/BigDecimal;
           23   28     4      n2  Ljava/math/BigDecimal;
           24   28     5  scale1  I
           25   28     6  scale2  I
           26   28     7   scale  I
    Exceptions:
      throws freemarker.template.TemplateException
    MethodParameters:
        Name  Flags
      first   
      second  

  public java.lang.Number modulus(java.lang.Number, java.lang.Number);
    descriptor: (Ljava/lang/Number;Ljava/lang/Number;)Ljava/lang/Number;
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=4, locals=5, args_size=3
        start local 0 // freemarker.core.ArithmeticEngine$ConservativeEngine this
        start local 1 // java.lang.Number first
        start local 2 // java.lang.Number second
         0: .line 512
            aload 1 /* first */
            aload 2 /* second */
            invokestatic freemarker.core.ArithmeticEngine$ConservativeEngine.getCommonClassCode:(Ljava/lang/Number;Ljava/lang/Number;)I
            tableswitch { // 0 - 5
                    0: 1
                    1: 2
                    2: 3
                    3: 4
                    4: 5
                    5: 8
              default: 9
          }
         1: .line 514
      StackMap locals:
      StackMap stack:
            aload 1 /* first */
            invokevirtual java.lang.Number.intValue:()I
            aload 2 /* second */
            invokevirtual java.lang.Number.intValue:()I
            irem
            invokestatic java.lang.Integer.valueOf:(I)Ljava/lang/Integer;
            areturn
         2: .line 517
      StackMap locals:
      StackMap stack:
            aload 1 /* first */
            invokevirtual java.lang.Number.longValue:()J
            aload 2 /* second */
            invokevirtual java.lang.Number.longValue:()J
            lrem
            invokestatic java.lang.Long.valueOf:(J)Ljava/lang/Long;
            areturn
         3: .line 520
      StackMap locals:
      StackMap stack:
            aload 1 /* first */
            invokevirtual java.lang.Number.floatValue:()F
            aload 2 /* second */
            invokevirtual java.lang.Number.floatValue:()F
            frem
            invokestatic java.lang.Float.valueOf:(F)Ljava/lang/Float;
            areturn
         4: .line 523
      StackMap locals:
      StackMap stack:
            aload 1 /* first */
            invokevirtual java.lang.Number.doubleValue:()D
            aload 2 /* second */
            invokevirtual java.lang.Number.doubleValue:()D
            drem
            invokestatic java.lang.Double.valueOf:(D)Ljava/lang/Double;
            areturn
         5: .line 526
      StackMap locals:
      StackMap stack:
            aload 1 /* first */
            invokestatic freemarker.core.ArithmeticEngine$ConservativeEngine.toBigInteger:(Ljava/lang/Number;)Ljava/math/BigInteger;
            astore 3 /* n1 */
        start local 3 // java.math.BigInteger n1
         6: .line 527
            aload 2 /* second */
            invokestatic freemarker.core.ArithmeticEngine$ConservativeEngine.toBigInteger:(Ljava/lang/Number;)Ljava/math/BigInteger;
            astore 4 /* n2 */
        start local 4 // java.math.BigInteger n2
         7: .line 528
            aload 3 /* n1 */
            aload 4 /* n2 */
            invokevirtual java.math.BigInteger.mod:(Ljava/math/BigInteger;)Ljava/math/BigInteger;
            areturn
        end local 4 // java.math.BigInteger n2
        end local 3 // java.math.BigInteger n1
         8: .line 531
      StackMap locals:
      StackMap stack:
            new freemarker.core._MiscTemplateException
            dup
            ldc "Can't calculate remainder on BigDecimals"
            invokespecial freemarker.core._MiscTemplateException.<init>:(Ljava/lang/String;)V
            athrow
         9: .line 536
      StackMap locals:
      StackMap stack:
            new freemarker.core.BugException
            dup
            invokespecial freemarker.core.BugException.<init>:()V
            athrow
        end local 2 // java.lang.Number second
        end local 1 // java.lang.Number first
        end local 0 // freemarker.core.ArithmeticEngine$ConservativeEngine this
      LocalVariableTable:
        Start  End  Slot    Name  Signature
            0   10     0    this  Lfreemarker/core/ArithmeticEngine$ConservativeEngine;
            0   10     1   first  Ljava/lang/Number;
            0   10     2  second  Ljava/lang/Number;
            6    8     3      n1  Ljava/math/BigInteger;
            7    8     4      n2  Ljava/math/BigInteger;
    Exceptions:
      throws freemarker.template.TemplateException
    MethodParameters:
        Name  Flags
      first   
      second  

  public java.lang.Number toNumber(java.lang.String);
    descriptor: (Ljava/lang/String;)Ljava/lang/Number;
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=1, locals=3, args_size=2
        start local 0 // freemarker.core.ArithmeticEngine$ConservativeEngine this
        start local 1 // java.lang.String s
         0: .line 541
            aload 1 /* s */
            invokestatic freemarker.core.ArithmeticEngine.toBigDecimalOrDouble:(Ljava/lang/String;)Ljava/lang/Number;
            astore 2 /* n */
        start local 2 // java.lang.Number n
         1: .line 542
            aload 2 /* n */
            instanceof java.math.BigDecimal
            ifeq 2
            aload 2 /* n */
            invokestatic freemarker.template.utility.OptimizerUtil.optimizeNumberRepresentation:(Ljava/lang/Number;)Ljava/lang/Number;
            goto 3
      StackMap locals: java.lang.Number
      StackMap stack:
         2: aload 2 /* n */
      StackMap locals:
      StackMap stack: java.lang.Number
         3: areturn
        end local 2 // java.lang.Number n
        end local 1 // java.lang.String s
        end local 0 // freemarker.core.ArithmeticEngine$ConservativeEngine this
      LocalVariableTable:
        Start  End  Slot  Name  Signature
            0    4     0  this  Lfreemarker/core/ArithmeticEngine$ConservativeEngine;
            0    4     1     s  Ljava/lang/String;
            1    4     2     n  Ljava/lang/Number;
    MethodParameters:
      Name  Flags
      s     

  private static java.util.Map createClassCodesMap();
    descriptor: ()Ljava/util/Map;
    flags: (0x000a) ACC_PRIVATE, ACC_STATIC
    Code:
      stack=3, locals=2, args_size=0
         0: .line 546
            new java.util.HashMap
            dup
            bipush 17
            invokespecial java.util.HashMap.<init>:(I)V
            astore 0 /* map */
        start local 0 // java.util.Map map
         1: .line 547
            iconst_0
            invokestatic java.lang.Integer.valueOf:(I)Ljava/lang/Integer;
            astore 1 /* intcode */
        start local 1 // java.lang.Integer intcode
         2: .line 548
            aload 0 /* map */
            ldc Ljava/lang/Byte;
            aload 1 /* intcode */
            invokeinterface java.util.Map.put:(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
            pop
         3: .line 549
            aload 0 /* map */
            ldc Ljava/lang/Short;
            aload 1 /* intcode */
            invokeinterface java.util.Map.put:(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
            pop
         4: .line 550
            aload 0 /* map */
            ldc Ljava/lang/Integer;
            aload 1 /* intcode */
            invokeinterface java.util.Map.put:(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
            pop
         5: .line 551
            aload 0 /* map */
            ldc Ljava/lang/Long;
            iconst_1
            invokestatic java.lang.Integer.valueOf:(I)Ljava/lang/Integer;
            invokeinterface java.util.Map.put:(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
            pop
         6: .line 552
            aload 0 /* map */
            ldc Ljava/lang/Float;
            iconst_2
            invokestatic java.lang.Integer.valueOf:(I)Ljava/lang/Integer;
            invokeinterface java.util.Map.put:(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
            pop
         7: .line 553
            aload 0 /* map */
            ldc Ljava/lang/Double;
            iconst_3
            invokestatic java.lang.Integer.valueOf:(I)Ljava/lang/Integer;
            invokeinterface java.util.Map.put:(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
            pop
         8: .line 554
            aload 0 /* map */
            ldc Ljava/math/BigInteger;
            iconst_4
            invokestatic java.lang.Integer.valueOf:(I)Ljava/lang/Integer;
            invokeinterface java.util.Map.put:(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
            pop
         9: .line 555
            aload 0 /* map */
            ldc Ljava/math/BigDecimal;
            iconst_5
            invokestatic java.lang.Integer.valueOf:(I)Ljava/lang/Integer;
            invokeinterface java.util.Map.put:(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
            pop
        10: .line 556
            aload 0 /* map */
            areturn
        end local 1 // java.lang.Integer intcode
        end local 0 // java.util.Map map
      LocalVariableTable:
        Start  End  Slot     Name  Signature
            1   11     0      map  Ljava/util/Map;
            2   11     1  intcode  Ljava/lang/Integer;

  private static int getClassCode(java.lang.Number);
    descriptor: (Ljava/lang/Number;)I
    flags: (0x000a) ACC_PRIVATE, ACC_STATIC
    Code:
      stack=6, locals=1, args_size=1
        start local 0 // java.lang.Number num
         0: .line 561
            getstatic freemarker.core.ArithmeticEngine$ConservativeEngine.classCodes:Ljava/util/Map;
            aload 0 /* num */
            invokevirtual java.lang.Object.getClass:()Ljava/lang/Class;
            invokeinterface java.util.Map.get:(Ljava/lang/Object;)Ljava/lang/Object;
            checkcast java.lang.Integer
            invokevirtual java.lang.Integer.intValue:()I
         1: ireturn
         2: .line 562
      StackMap locals:
      StackMap stack: java.lang.NullPointerException
            pop
         3: .line 563
            aload 0 /* num */
            ifnonnull 5
         4: .line 564
            new freemarker.core._MiscTemplateException
            dup
            ldc "The Number object was null."
            invokespecial freemarker.core._MiscTemplateException.<init>:(Ljava/lang/String;)V
            athrow
         5: .line 566
      StackMap locals:
      StackMap stack:
            new freemarker.core._MiscTemplateException
            dup
            iconst_2
            anewarray java.lang.Object
            dup
            iconst_0
            ldc "Unknown number type "
            aastore
            dup
            iconst_1
            aload 0 /* num */
            invokevirtual java.lang.Object.getClass:()Ljava/lang/Class;
            invokevirtual java.lang.Class.getName:()Ljava/lang/String;
            aastore
            invokespecial freemarker.core._MiscTemplateException.<init>:([Ljava/lang/Object;)V
            athrow
        end local 0 // java.lang.Number num
      LocalVariableTable:
        Start  End  Slot  Name  Signature
            0    6     0   num  Ljava/lang/Number;
      Exception table:
        from    to  target  type
           0     1       2  Class java.lang.NullPointerException
    Exceptions:
      throws freemarker.template.TemplateException
    MethodParameters:
      Name  Flags
      num   

  private static int getCommonClassCode(java.lang.Number, java.lang.Number);
    descriptor: (Ljava/lang/Number;Ljava/lang/Number;)I
    flags: (0x000a) ACC_PRIVATE, ACC_STATIC
    Code:
      stack=2, locals=6, args_size=2
        start local 0 // java.lang.Number num1
        start local 1 // java.lang.Number num2
         0: .line 572
            aload 0 /* num1 */
            invokestatic freemarker.core.ArithmeticEngine$ConservativeEngine.getClassCode:(Ljava/lang/Number;)I
            istore 2 /* c1 */
        start local 2 // int c1
         1: .line 573
            aload 1 /* num2 */
            invokestatic freemarker.core.ArithmeticEngine$ConservativeEngine.getClassCode:(Ljava/lang/Number;)I
            istore 3 /* c2 */
        start local 3 // int c2
         2: .line 574
            iload 2 /* c1 */
            iload 3 /* c2 */
            if_icmple 3
            iload 2 /* c1 */
            goto 4
      StackMap locals: int int
      StackMap stack:
         3: iload 3 /* c2 */
      StackMap locals:
      StackMap stack: int
         4: istore 4 /* c */
        start local 4 // int c
         5: .line 579
            iload 4 /* c */
            tableswitch { // 2 - 4
                    2: 6
                    3: 15
                    4: 10
              default: 15
          }
         6: .line 581
      StackMap locals: int
      StackMap stack:
            iload 2 /* c1 */
            iload 3 /* c2 */
            if_icmpge 7
            iload 2 /* c1 */
            goto 8
      StackMap locals:
      StackMap stack:
         7: iload 3 /* c2 */
      StackMap locals:
      StackMap stack: int
         8: iconst_1
            if_icmpne 15
         9: .line 582
            iconst_3
            ireturn
        10: .line 587
      StackMap locals:
      StackMap stack:
            iload 2 /* c1 */
            iload 3 /* c2 */
            if_icmpge 11
            iload 2 /* c1 */
            goto 12
      StackMap locals:
      StackMap stack:
        11: iload 3 /* c2 */
      StackMap locals:
      StackMap stack: int
        12: istore 5 /* min */
        start local 5 // int min
        13: .line 588
            iload 5 /* min */
            iconst_3
            if_icmpeq 14
            iload 5 /* min */
            iconst_2
            if_icmpne 15
        14: .line 589
      StackMap locals: int
      StackMap stack:
            iconst_5
            ireturn
        end local 5 // int min
        15: .line 594
      StackMap locals:
      StackMap stack:
            iload 4 /* c */
            ireturn
        end local 4 // int c
        end local 3 // int c2
        end local 2 // int c1
        end local 1 // java.lang.Number num2
        end local 0 // java.lang.Number num1
      LocalVariableTable:
        Start  End  Slot  Name  Signature
            0   16     0  num1  Ljava/lang/Number;
            0   16     1  num2  Ljava/lang/Number;
            1   16     2    c1  I
            2   16     3    c2  I
            5   16     4     c  I
           13   15     5   min  I
    Exceptions:
      throws freemarker.template.TemplateException
    MethodParameters:
      Name  Flags
      num1  
      num2  

  private static java.math.BigInteger toBigInteger(java.lang.Number);
    descriptor: (Ljava/lang/Number;)Ljava/math/BigInteger;
    flags: (0x000a) ACC_PRIVATE, ACC_STATIC
    Code:
      stack=3, locals=1, args_size=1
        start local 0 // java.lang.Number num
         0: .line 598
            aload 0 /* num */
            instanceof java.math.BigInteger
            ifeq 1
            aload 0 /* num */
            checkcast java.math.BigInteger
            goto 2
      StackMap locals:
      StackMap stack:
         1: new java.math.BigInteger
            dup
            aload 0 /* num */
            invokevirtual java.lang.Object.toString:()Ljava/lang/String;
            invokespecial java.math.BigInteger.<init>:(Ljava/lang/String;)V
      StackMap locals:
      StackMap stack: java.math.BigInteger
         2: areturn
        end local 0 // java.lang.Number num
      LocalVariableTable:
        Start  End  Slot  Name  Signature
            0    3     0   num  Ljava/lang/Number;
    MethodParameters:
      Name  Flags
      num   
}
SourceFile: "ArithmeticEngine.java"
NestHost: freemarker.core.ArithmeticEngine
InnerClasses:
  public ConservativeEngine = freemarker.core.ArithmeticEngine$ConservativeEngine of freemarker.core.ArithmeticEngine