home *** CD-ROM | disk | FTP | other *** search
/ S283 Planetary Science &… the Search for Life CD 3 / 0_CD-ROM.iso / install / jre1_3 / lib / ext / vecmath.jar / javax / vecmath / Matrix4f.class (.txt) < prev    next >
Encoding:
Java Class File  |  2002-06-19  |  36.5 KB  |  2,180 lines

  1. package javax.vecmath;
  2.  
  3. import java.io.Serializable;
  4.  
  5. public class Matrix4f implements Serializable, Cloneable {
  6.    static final long serialVersionUID = -8405036035410109353L;
  7.    public float m00;
  8.    public float m01;
  9.    public float m02;
  10.    public float m03;
  11.    public float m10;
  12.    public float m11;
  13.    public float m12;
  14.    public float m13;
  15.    public float m20;
  16.    public float m21;
  17.    public float m22;
  18.    public float m23;
  19.    public float m30;
  20.    public float m31;
  21.    public float m32;
  22.    public float m33;
  23.    private static final double EPS = 1.0E-8;
  24.  
  25.    public Matrix4f(float var1, float var2, float var3, float var4, float var5, float var6, float var7, float var8, float var9, float var10, float var11, float var12, float var13, float var14, float var15, float var16) {
  26.       this.m00 = var1;
  27.       this.m01 = var2;
  28.       this.m02 = var3;
  29.       this.m03 = var4;
  30.       this.m10 = var5;
  31.       this.m11 = var6;
  32.       this.m12 = var7;
  33.       this.m13 = var8;
  34.       this.m20 = var9;
  35.       this.m21 = var10;
  36.       this.m22 = var11;
  37.       this.m23 = var12;
  38.       this.m30 = var13;
  39.       this.m31 = var14;
  40.       this.m32 = var15;
  41.       this.m33 = var16;
  42.    }
  43.  
  44.    public Matrix4f(float[] var1) {
  45.       this.m00 = var1[0];
  46.       this.m01 = var1[1];
  47.       this.m02 = var1[2];
  48.       this.m03 = var1[3];
  49.       this.m10 = var1[4];
  50.       this.m11 = var1[5];
  51.       this.m12 = var1[6];
  52.       this.m13 = var1[7];
  53.       this.m20 = var1[8];
  54.       this.m21 = var1[9];
  55.       this.m22 = var1[10];
  56.       this.m23 = var1[11];
  57.       this.m30 = var1[12];
  58.       this.m31 = var1[13];
  59.       this.m32 = var1[14];
  60.       this.m33 = var1[15];
  61.    }
  62.  
  63.    public Matrix4f(Quat4f var1, Vector3f var2, float var3) {
  64.       this.m00 = (float)((double)var3 * ((double)1.0F - (double)2.0F * (double)var1.y * (double)var1.y - (double)2.0F * (double)var1.z * (double)var1.z));
  65.       this.m10 = (float)((double)var3 * (double)2.0F * (double)(var1.x * var1.y + var1.w * var1.z));
  66.       this.m20 = (float)((double)var3 * (double)2.0F * (double)(var1.x * var1.z - var1.w * var1.y));
  67.       this.m01 = (float)((double)var3 * (double)2.0F * (double)(var1.x * var1.y - var1.w * var1.z));
  68.       this.m11 = (float)((double)var3 * ((double)1.0F - (double)2.0F * (double)var1.x * (double)var1.x - (double)2.0F * (double)var1.z * (double)var1.z));
  69.       this.m21 = (float)((double)var3 * (double)2.0F * (double)(var1.y * var1.z + var1.w * var1.x));
  70.       this.m02 = (float)((double)var3 * (double)2.0F * (double)(var1.x * var1.z + var1.w * var1.y));
  71.       this.m12 = (float)((double)var3 * (double)2.0F * (double)(var1.y * var1.z - var1.w * var1.x));
  72.       this.m22 = (float)((double)var3 * ((double)1.0F - (double)2.0F * (double)var1.x * (double)var1.x - (double)2.0F * (double)var1.y * (double)var1.y));
  73.       this.m03 = var2.x;
  74.       this.m13 = var2.y;
  75.       this.m23 = var2.z;
  76.       this.m30 = 0.0F;
  77.       this.m31 = 0.0F;
  78.       this.m32 = 0.0F;
  79.       this.m33 = 1.0F;
  80.    }
  81.  
  82.    public Matrix4f(Matrix4d var1) {
  83.       this.m00 = (float)var1.m00;
  84.       this.m01 = (float)var1.m01;
  85.       this.m02 = (float)var1.m02;
  86.       this.m03 = (float)var1.m03;
  87.       this.m10 = (float)var1.m10;
  88.       this.m11 = (float)var1.m11;
  89.       this.m12 = (float)var1.m12;
  90.       this.m13 = (float)var1.m13;
  91.       this.m20 = (float)var1.m20;
  92.       this.m21 = (float)var1.m21;
  93.       this.m22 = (float)var1.m22;
  94.       this.m23 = (float)var1.m23;
  95.       this.m30 = (float)var1.m30;
  96.       this.m31 = (float)var1.m31;
  97.       this.m32 = (float)var1.m32;
  98.       this.m33 = (float)var1.m33;
  99.    }
  100.  
  101.    public Matrix4f(Matrix4f var1) {
  102.       this.m00 = var1.m00;
  103.       this.m01 = var1.m01;
  104.       this.m02 = var1.m02;
  105.       this.m03 = var1.m03;
  106.       this.m10 = var1.m10;
  107.       this.m11 = var1.m11;
  108.       this.m12 = var1.m12;
  109.       this.m13 = var1.m13;
  110.       this.m20 = var1.m20;
  111.       this.m21 = var1.m21;
  112.       this.m22 = var1.m22;
  113.       this.m23 = var1.m23;
  114.       this.m30 = var1.m30;
  115.       this.m31 = var1.m31;
  116.       this.m32 = var1.m32;
  117.       this.m33 = var1.m33;
  118.    }
  119.  
  120.    public Matrix4f(Matrix3f var1, Vector3f var2, float var3) {
  121.       this.m00 = var1.m00 * var3;
  122.       this.m01 = var1.m01 * var3;
  123.       this.m02 = var1.m02 * var3;
  124.       this.m03 = var2.x;
  125.       this.m10 = var1.m10 * var3;
  126.       this.m11 = var1.m11 * var3;
  127.       this.m12 = var1.m12 * var3;
  128.       this.m13 = var2.y;
  129.       this.m20 = var1.m20 * var3;
  130.       this.m21 = var1.m21 * var3;
  131.       this.m22 = var1.m22 * var3;
  132.       this.m23 = var2.z;
  133.       this.m30 = 0.0F;
  134.       this.m31 = 0.0F;
  135.       this.m32 = 0.0F;
  136.       this.m33 = 1.0F;
  137.    }
  138.  
  139.    public Matrix4f() {
  140.       this.m00 = 0.0F;
  141.       this.m01 = 0.0F;
  142.       this.m02 = 0.0F;
  143.       this.m03 = 0.0F;
  144.       this.m10 = 0.0F;
  145.       this.m11 = 0.0F;
  146.       this.m12 = 0.0F;
  147.       this.m13 = 0.0F;
  148.       this.m20 = 0.0F;
  149.       this.m21 = 0.0F;
  150.       this.m22 = 0.0F;
  151.       this.m23 = 0.0F;
  152.       this.m30 = 0.0F;
  153.       this.m31 = 0.0F;
  154.       this.m32 = 0.0F;
  155.       this.m33 = 0.0F;
  156.    }
  157.  
  158.    public String toString() {
  159.       return this.m00 + ", " + this.m01 + ", " + this.m02 + ", " + this.m03 + "\n" + this.m10 + ", " + this.m11 + ", " + this.m12 + ", " + this.m13 + "\n" + this.m20 + ", " + this.m21 + ", " + this.m22 + ", " + this.m23 + "\n" + this.m30 + ", " + this.m31 + ", " + this.m32 + ", " + this.m33 + "\n";
  160.    }
  161.  
  162.    public final void setIdentity() {
  163.       this.m00 = 1.0F;
  164.       this.m01 = 0.0F;
  165.       this.m02 = 0.0F;
  166.       this.m03 = 0.0F;
  167.       this.m10 = 0.0F;
  168.       this.m11 = 1.0F;
  169.       this.m12 = 0.0F;
  170.       this.m13 = 0.0F;
  171.       this.m20 = 0.0F;
  172.       this.m21 = 0.0F;
  173.       this.m22 = 1.0F;
  174.       this.m23 = 0.0F;
  175.       this.m30 = 0.0F;
  176.       this.m31 = 0.0F;
  177.       this.m32 = 0.0F;
  178.       this.m33 = 1.0F;
  179.    }
  180.  
  181.    public final void setElement(int var1, int var2, float var3) {
  182.       switch (var1) {
  183.          case 0:
  184.             switch (var2) {
  185.                case 0:
  186.                   this.m00 = var3;
  187.                   return;
  188.                case 1:
  189.                   this.m01 = var3;
  190.                   return;
  191.                case 2:
  192.                   this.m02 = var3;
  193.                   return;
  194.                case 3:
  195.                   this.m03 = var3;
  196.                   return;
  197.                default:
  198.                   throw new ArrayIndexOutOfBoundsException(VecMathI18N.getString("Matrix4f0"));
  199.             }
  200.          case 1:
  201.             switch (var2) {
  202.                case 0:
  203.                   this.m10 = var3;
  204.                   return;
  205.                case 1:
  206.                   this.m11 = var3;
  207.                   return;
  208.                case 2:
  209.                   this.m12 = var3;
  210.                   return;
  211.                case 3:
  212.                   this.m13 = var3;
  213.                   return;
  214.                default:
  215.                   throw new ArrayIndexOutOfBoundsException(VecMathI18N.getString("Matrix4f0"));
  216.             }
  217.          case 2:
  218.             switch (var2) {
  219.                case 0:
  220.                   this.m20 = var3;
  221.                   return;
  222.                case 1:
  223.                   this.m21 = var3;
  224.                   return;
  225.                case 2:
  226.                   this.m22 = var3;
  227.                   return;
  228.                case 3:
  229.                   this.m23 = var3;
  230.                   return;
  231.                default:
  232.                   throw new ArrayIndexOutOfBoundsException(VecMathI18N.getString("Matrix4f0"));
  233.             }
  234.          case 3:
  235.             switch (var2) {
  236.                case 0:
  237.                   this.m30 = var3;
  238.                   return;
  239.                case 1:
  240.                   this.m31 = var3;
  241.                   return;
  242.                case 2:
  243.                   this.m32 = var3;
  244.                   return;
  245.                case 3:
  246.                   this.m33 = var3;
  247.                   return;
  248.                default:
  249.                   throw new ArrayIndexOutOfBoundsException(VecMathI18N.getString("Matrix4f0"));
  250.             }
  251.          default:
  252.             throw new ArrayIndexOutOfBoundsException(VecMathI18N.getString("Matrix4f0"));
  253.       }
  254.    }
  255.  
  256.    public final float getElement(int var1, int var2) {
  257.       switch (var1) {
  258.          case 0:
  259.             switch (var2) {
  260.                case 0:
  261.                   return this.m00;
  262.                case 1:
  263.                   return this.m01;
  264.                case 2:
  265.                   return this.m02;
  266.                case 3:
  267.                   return this.m03;
  268.                default:
  269.                   throw new ArrayIndexOutOfBoundsException(VecMathI18N.getString("Matrix4f1"));
  270.             }
  271.          case 1:
  272.             switch (var2) {
  273.                case 0:
  274.                   return this.m10;
  275.                case 1:
  276.                   return this.m11;
  277.                case 2:
  278.                   return this.m12;
  279.                case 3:
  280.                   return this.m13;
  281.                default:
  282.                   throw new ArrayIndexOutOfBoundsException(VecMathI18N.getString("Matrix4f1"));
  283.             }
  284.          case 2:
  285.             switch (var2) {
  286.                case 0:
  287.                   return this.m20;
  288.                case 1:
  289.                   return this.m21;
  290.                case 2:
  291.                   return this.m22;
  292.                case 3:
  293.                   return this.m23;
  294.                default:
  295.                   throw new ArrayIndexOutOfBoundsException(VecMathI18N.getString("Matrix4f1"));
  296.             }
  297.          case 3:
  298.             switch (var2) {
  299.                case 0:
  300.                   return this.m30;
  301.                case 1:
  302.                   return this.m31;
  303.                case 2:
  304.                   return this.m32;
  305.                case 3:
  306.                   return this.m33;
  307.             }
  308.       }
  309.  
  310.       throw new ArrayIndexOutOfBoundsException(VecMathI18N.getString("Matrix4f1"));
  311.    }
  312.  
  313.    public final void getRow(int var1, Vector4f var2) {
  314.       if (var1 == 0) {
  315.          var2.x = this.m00;
  316.          var2.y = this.m01;
  317.          var2.z = this.m02;
  318.          var2.w = this.m03;
  319.       } else if (var1 == 1) {
  320.          var2.x = this.m10;
  321.          var2.y = this.m11;
  322.          var2.z = this.m12;
  323.          var2.w = this.m13;
  324.       } else if (var1 == 2) {
  325.          var2.x = this.m20;
  326.          var2.y = this.m21;
  327.          var2.z = this.m22;
  328.          var2.w = this.m23;
  329.       } else {
  330.          if (var1 != 3) {
  331.             throw new ArrayIndexOutOfBoundsException(VecMathI18N.getString("Matrix4f2"));
  332.          }
  333.  
  334.          var2.x = this.m30;
  335.          var2.y = this.m31;
  336.          var2.z = this.m32;
  337.          var2.w = this.m33;
  338.       }
  339.  
  340.    }
  341.  
  342.    public final void getRow(int var1, float[] var2) {
  343.       if (var1 == 0) {
  344.          var2[0] = this.m00;
  345.          var2[1] = this.m01;
  346.          var2[2] = this.m02;
  347.          var2[3] = this.m03;
  348.       } else if (var1 == 1) {
  349.          var2[0] = this.m10;
  350.          var2[1] = this.m11;
  351.          var2[2] = this.m12;
  352.          var2[3] = this.m13;
  353.       } else if (var1 == 2) {
  354.          var2[0] = this.m20;
  355.          var2[1] = this.m21;
  356.          var2[2] = this.m22;
  357.          var2[3] = this.m23;
  358.       } else {
  359.          if (var1 != 3) {
  360.             throw new ArrayIndexOutOfBoundsException(VecMathI18N.getString("Matrix4f2"));
  361.          }
  362.  
  363.          var2[0] = this.m30;
  364.          var2[1] = this.m31;
  365.          var2[2] = this.m32;
  366.          var2[3] = this.m33;
  367.       }
  368.  
  369.    }
  370.  
  371.    public final void getColumn(int var1, Vector4f var2) {
  372.       if (var1 == 0) {
  373.          var2.x = this.m00;
  374.          var2.y = this.m10;
  375.          var2.z = this.m20;
  376.          var2.w = this.m30;
  377.       } else if (var1 == 1) {
  378.          var2.x = this.m01;
  379.          var2.y = this.m11;
  380.          var2.z = this.m21;
  381.          var2.w = this.m31;
  382.       } else if (var1 == 2) {
  383.          var2.x = this.m02;
  384.          var2.y = this.m12;
  385.          var2.z = this.m22;
  386.          var2.w = this.m32;
  387.       } else {
  388.          if (var1 != 3) {
  389.             throw new ArrayIndexOutOfBoundsException(VecMathI18N.getString("Matrix4f4"));
  390.          }
  391.  
  392.          var2.x = this.m03;
  393.          var2.y = this.m13;
  394.          var2.z = this.m23;
  395.          var2.w = this.m33;
  396.       }
  397.  
  398.    }
  399.  
  400.    public final void getColumn(int var1, float[] var2) {
  401.       if (var1 == 0) {
  402.          var2[0] = this.m00;
  403.          var2[1] = this.m10;
  404.          var2[2] = this.m20;
  405.          var2[3] = this.m30;
  406.       } else if (var1 == 1) {
  407.          var2[0] = this.m01;
  408.          var2[1] = this.m11;
  409.          var2[2] = this.m21;
  410.          var2[3] = this.m31;
  411.       } else if (var1 == 2) {
  412.          var2[0] = this.m02;
  413.          var2[1] = this.m12;
  414.          var2[2] = this.m22;
  415.          var2[3] = this.m32;
  416.       } else {
  417.          if (var1 != 3) {
  418.             throw new ArrayIndexOutOfBoundsException(VecMathI18N.getString("Matrix4f4"));
  419.          }
  420.  
  421.          var2[0] = this.m03;
  422.          var2[1] = this.m13;
  423.          var2[2] = this.m23;
  424.          var2[3] = this.m33;
  425.       }
  426.  
  427.    }
  428.  
  429.    public final void setScale(float var1) {
  430.       double[] var2 = new double[9];
  431.       double[] var3 = new double[3];
  432.       this.getScaleRotate(var3, var2);
  433.       this.m00 = (float)(var2[0] * (double)var1);
  434.       this.m01 = (float)(var2[1] * (double)var1);
  435.       this.m02 = (float)(var2[2] * (double)var1);
  436.       this.m10 = (float)(var2[3] * (double)var1);
  437.       this.m11 = (float)(var2[4] * (double)var1);
  438.       this.m12 = (float)(var2[5] * (double)var1);
  439.       this.m20 = (float)(var2[6] * (double)var1);
  440.       this.m21 = (float)(var2[7] * (double)var1);
  441.       this.m22 = (float)(var2[8] * (double)var1);
  442.    }
  443.  
  444.    public final void get(Matrix3d var1) {
  445.       double[] var2 = new double[9];
  446.       double[] var3 = new double[3];
  447.       this.getScaleRotate(var3, var2);
  448.       var1.m00 = var2[0];
  449.       var1.m01 = var2[1];
  450.       var1.m02 = var2[2];
  451.       var1.m10 = var2[3];
  452.       var1.m11 = var2[4];
  453.       var1.m12 = var2[5];
  454.       var1.m20 = var2[6];
  455.       var1.m21 = var2[7];
  456.       var1.m22 = var2[8];
  457.    }
  458.  
  459.    public final void get(Matrix3f var1) {
  460.       double[] var2 = new double[9];
  461.       double[] var3 = new double[3];
  462.       this.getScaleRotate(var3, var2);
  463.       var1.m00 = (float)var2[0];
  464.       var1.m01 = (float)var2[1];
  465.       var1.m02 = (float)var2[2];
  466.       var1.m10 = (float)var2[3];
  467.       var1.m11 = (float)var2[4];
  468.       var1.m12 = (float)var2[5];
  469.       var1.m20 = (float)var2[6];
  470.       var1.m21 = (float)var2[7];
  471.       var1.m22 = (float)var2[8];
  472.    }
  473.  
  474.    public final float get(Matrix3f var1, Vector3f var2) {
  475.       double[] var3 = new double[9];
  476.       double[] var4 = new double[3];
  477.       this.getScaleRotate(var4, var3);
  478.       var1.m00 = (float)var3[0];
  479.       var1.m01 = (float)var3[1];
  480.       var1.m02 = (float)var3[2];
  481.       var1.m10 = (float)var3[3];
  482.       var1.m11 = (float)var3[4];
  483.       var1.m12 = (float)var3[5];
  484.       var1.m20 = (float)var3[6];
  485.       var1.m21 = (float)var3[7];
  486.       var1.m22 = (float)var3[8];
  487.       var2.x = this.m03;
  488.       var2.y = this.m13;
  489.       var2.z = this.m23;
  490.       return (float)Matrix3d.max3(var4);
  491.    }
  492.  
  493.    public final void get(Quat4f var1) {
  494.       double[] var2 = new double[9];
  495.       double[] var3 = new double[3];
  496.       this.getScaleRotate(var3, var2);
  497.       double var4 = (double)0.25F * ((double)1.0F + var2[0] + var2[4] + var2[8]);
  498.       if (!((var4 < (double)0.0F ? -var4 : var4) < 1.0E-30)) {
  499.          var1.w = (float)Math.sqrt(var4);
  500.          var4 = (double)0.25F / (double)var1.w;
  501.          var1.x = (float)((var2[7] - var2[5]) * var4);
  502.          var1.y = (float)((var2[2] - var2[6]) * var4);
  503.          var1.z = (float)((var2[3] - var2[1]) * var4);
  504.       } else {
  505.          var1.w = 0.0F;
  506.          var4 = (double)-0.5F * (var2[4] + var2[8]);
  507.          if (!((var4 < (double)0.0F ? -var4 : var4) < 1.0E-30)) {
  508.             var1.x = (float)Math.sqrt(var4);
  509.             var4 = (double)0.5F / (double)var1.x;
  510.             var1.y = (float)(var2[3] * var4);
  511.             var1.z = (float)(var2[6] * var4);
  512.          } else {
  513.             var1.x = 0.0F;
  514.             var4 = (double)0.5F * ((double)1.0F - var2[8]);
  515.             if (!((var4 < (double)0.0F ? -var4 : var4) < 1.0E-30)) {
  516.                var1.y = (float)Math.sqrt(var4);
  517.                var1.z = (float)(var2[7] / ((double)2.0F * (double)var1.y));
  518.             } else {
  519.                var1.y = 0.0F;
  520.                var1.z = 1.0F;
  521.             }
  522.          }
  523.       }
  524.    }
  525.  
  526.    public final void get(Vector3f var1) {
  527.       var1.x = this.m03;
  528.       var1.y = this.m13;
  529.       var1.z = this.m23;
  530.    }
  531.  
  532.    public final void getRotationScale(Matrix3f var1) {
  533.       var1.m00 = this.m00;
  534.       var1.m01 = this.m01;
  535.       var1.m02 = this.m02;
  536.       var1.m10 = this.m10;
  537.       var1.m11 = this.m11;
  538.       var1.m12 = this.m12;
  539.       var1.m20 = this.m20;
  540.       var1.m21 = this.m21;
  541.       var1.m22 = this.m22;
  542.    }
  543.  
  544.    public final float getScale() {
  545.       double[] var1 = new double[9];
  546.       double[] var2 = new double[3];
  547.       this.getScaleRotate(var2, var1);
  548.       return (float)Matrix3d.max3(var2);
  549.    }
  550.  
  551.    public final void setRotationScale(Matrix3f var1) {
  552.       this.m00 = var1.m00;
  553.       this.m01 = var1.m01;
  554.       this.m02 = var1.m02;
  555.       this.m10 = var1.m10;
  556.       this.m11 = var1.m11;
  557.       this.m12 = var1.m12;
  558.       this.m20 = var1.m20;
  559.       this.m21 = var1.m21;
  560.       this.m22 = var1.m22;
  561.    }
  562.  
  563.    public final void setRow(int var1, float var2, float var3, float var4, float var5) {
  564.       switch (var1) {
  565.          case 0:
  566.             this.m00 = var2;
  567.             this.m01 = var3;
  568.             this.m02 = var4;
  569.             this.m03 = var5;
  570.             break;
  571.          case 1:
  572.             this.m10 = var2;
  573.             this.m11 = var3;
  574.             this.m12 = var4;
  575.             this.m13 = var5;
  576.             break;
  577.          case 2:
  578.             this.m20 = var2;
  579.             this.m21 = var3;
  580.             this.m22 = var4;
  581.             this.m23 = var5;
  582.             break;
  583.          case 3:
  584.             this.m30 = var2;
  585.             this.m31 = var3;
  586.             this.m32 = var4;
  587.             this.m33 = var5;
  588.             break;
  589.          default:
  590.             throw new ArrayIndexOutOfBoundsException(VecMathI18N.getString("Matrix4f6"));
  591.       }
  592.  
  593.    }
  594.  
  595.    public final void setRow(int var1, Vector4f var2) {
  596.       switch (var1) {
  597.          case 0:
  598.             this.m00 = var2.x;
  599.             this.m01 = var2.y;
  600.             this.m02 = var2.z;
  601.             this.m03 = var2.w;
  602.             break;
  603.          case 1:
  604.             this.m10 = var2.x;
  605.             this.m11 = var2.y;
  606.             this.m12 = var2.z;
  607.             this.m13 = var2.w;
  608.             break;
  609.          case 2:
  610.             this.m20 = var2.x;
  611.             this.m21 = var2.y;
  612.             this.m22 = var2.z;
  613.             this.m23 = var2.w;
  614.             break;
  615.          case 3:
  616.             this.m30 = var2.x;
  617.             this.m31 = var2.y;
  618.             this.m32 = var2.z;
  619.             this.m33 = var2.w;
  620.             break;
  621.          default:
  622.             throw new ArrayIndexOutOfBoundsException(VecMathI18N.getString("Matrix4f6"));
  623.       }
  624.  
  625.    }
  626.  
  627.    public final void setRow(int var1, float[] var2) {
  628.       switch (var1) {
  629.          case 0:
  630.             this.m00 = var2[0];
  631.             this.m01 = var2[1];
  632.             this.m02 = var2[2];
  633.             this.m03 = var2[3];
  634.             break;
  635.          case 1:
  636.             this.m10 = var2[0];
  637.             this.m11 = var2[1];
  638.             this.m12 = var2[2];
  639.             this.m13 = var2[3];
  640.             break;
  641.          case 2:
  642.             this.m20 = var2[0];
  643.             this.m21 = var2[1];
  644.             this.m22 = var2[2];
  645.             this.m23 = var2[3];
  646.             break;
  647.          case 3:
  648.             this.m30 = var2[0];
  649.             this.m31 = var2[1];
  650.             this.m32 = var2[2];
  651.             this.m33 = var2[3];
  652.             break;
  653.          default:
  654.             throw new ArrayIndexOutOfBoundsException(VecMathI18N.getString("Matrix4f6"));
  655.       }
  656.  
  657.    }
  658.  
  659.    public final void setColumn(int var1, float var2, float var3, float var4, float var5) {
  660.       switch (var1) {
  661.          case 0:
  662.             this.m00 = var2;
  663.             this.m10 = var3;
  664.             this.m20 = var4;
  665.             this.m30 = var5;
  666.             break;
  667.          case 1:
  668.             this.m01 = var2;
  669.             this.m11 = var3;
  670.             this.m21 = var4;
  671.             this.m31 = var5;
  672.             break;
  673.          case 2:
  674.             this.m02 = var2;
  675.             this.m12 = var3;
  676.             this.m22 = var4;
  677.             this.m32 = var5;
  678.             break;
  679.          case 3:
  680.             this.m03 = var2;
  681.             this.m13 = var3;
  682.             this.m23 = var4;
  683.             this.m33 = var5;
  684.             break;
  685.          default:
  686.             throw new ArrayIndexOutOfBoundsException(VecMathI18N.getString("Matrix4f9"));
  687.       }
  688.  
  689.    }
  690.  
  691.    public final void setColumn(int var1, Vector4f var2) {
  692.       switch (var1) {
  693.          case 0:
  694.             this.m00 = var2.x;
  695.             this.m10 = var2.y;
  696.             this.m20 = var2.z;
  697.             this.m30 = var2.w;
  698.             break;
  699.          case 1:
  700.             this.m01 = var2.x;
  701.             this.m11 = var2.y;
  702.             this.m21 = var2.z;
  703.             this.m31 = var2.w;
  704.             break;
  705.          case 2:
  706.             this.m02 = var2.x;
  707.             this.m12 = var2.y;
  708.             this.m22 = var2.z;
  709.             this.m32 = var2.w;
  710.             break;
  711.          case 3:
  712.             this.m03 = var2.x;
  713.             this.m13 = var2.y;
  714.             this.m23 = var2.z;
  715.             this.m33 = var2.w;
  716.             break;
  717.          default:
  718.             throw new ArrayIndexOutOfBoundsException(VecMathI18N.getString("Matrix4f9"));
  719.       }
  720.  
  721.    }
  722.  
  723.    public final void setColumn(int var1, float[] var2) {
  724.       switch (var1) {
  725.          case 0:
  726.             this.m00 = var2[0];
  727.             this.m10 = var2[1];
  728.             this.m20 = var2[2];
  729.             this.m30 = var2[3];
  730.             break;
  731.          case 1:
  732.             this.m01 = var2[0];
  733.             this.m11 = var2[1];
  734.             this.m21 = var2[2];
  735.             this.m31 = var2[3];
  736.             break;
  737.          case 2:
  738.             this.m02 = var2[0];
  739.             this.m12 = var2[1];
  740.             this.m22 = var2[2];
  741.             this.m32 = var2[3];
  742.             break;
  743.          case 3:
  744.             this.m03 = var2[0];
  745.             this.m13 = var2[1];
  746.             this.m23 = var2[2];
  747.             this.m33 = var2[3];
  748.             break;
  749.          default:
  750.             throw new ArrayIndexOutOfBoundsException(VecMathI18N.getString("Matrix4f9"));
  751.       }
  752.  
  753.    }
  754.  
  755.    public final void add(float var1) {
  756.       this.m00 += var1;
  757.       this.m01 += var1;
  758.       this.m02 += var1;
  759.       this.m03 += var1;
  760.       this.m10 += var1;
  761.       this.m11 += var1;
  762.       this.m12 += var1;
  763.       this.m13 += var1;
  764.       this.m20 += var1;
  765.       this.m21 += var1;
  766.       this.m22 += var1;
  767.       this.m23 += var1;
  768.       this.m30 += var1;
  769.       this.m31 += var1;
  770.       this.m32 += var1;
  771.       this.m33 += var1;
  772.    }
  773.  
  774.    public final void add(float var1, Matrix4f var2) {
  775.       this.m00 = var2.m00 + var1;
  776.       this.m01 = var2.m01 + var1;
  777.       this.m02 = var2.m02 + var1;
  778.       this.m03 = var2.m03 + var1;
  779.       this.m10 = var2.m10 + var1;
  780.       this.m11 = var2.m11 + var1;
  781.       this.m12 = var2.m12 + var1;
  782.       this.m13 = var2.m13 + var1;
  783.       this.m20 = var2.m20 + var1;
  784.       this.m21 = var2.m21 + var1;
  785.       this.m22 = var2.m22 + var1;
  786.       this.m23 = var2.m23 + var1;
  787.       this.m30 = var2.m30 + var1;
  788.       this.m31 = var2.m31 + var1;
  789.       this.m32 = var2.m32 + var1;
  790.       this.m33 = var2.m33 + var1;
  791.    }
  792.  
  793.    public final void add(Matrix4f var1, Matrix4f var2) {
  794.       this.m00 = var1.m00 + var2.m00;
  795.       this.m01 = var1.m01 + var2.m01;
  796.       this.m02 = var1.m02 + var2.m02;
  797.       this.m03 = var1.m03 + var2.m03;
  798.       this.m10 = var1.m10 + var2.m10;
  799.       this.m11 = var1.m11 + var2.m11;
  800.       this.m12 = var1.m12 + var2.m12;
  801.       this.m13 = var1.m13 + var2.m13;
  802.       this.m20 = var1.m20 + var2.m20;
  803.       this.m21 = var1.m21 + var2.m21;
  804.       this.m22 = var1.m22 + var2.m22;
  805.       this.m23 = var1.m23 + var2.m23;
  806.       this.m30 = var1.m30 + var2.m30;
  807.       this.m31 = var1.m31 + var2.m31;
  808.       this.m32 = var1.m32 + var2.m32;
  809.       this.m33 = var1.m33 + var2.m33;
  810.    }
  811.  
  812.    public final void add(Matrix4f var1) {
  813.       this.m00 += var1.m00;
  814.       this.m01 += var1.m01;
  815.       this.m02 += var1.m02;
  816.       this.m03 += var1.m03;
  817.       this.m10 += var1.m10;
  818.       this.m11 += var1.m11;
  819.       this.m12 += var1.m12;
  820.       this.m13 += var1.m13;
  821.       this.m20 += var1.m20;
  822.       this.m21 += var1.m21;
  823.       this.m22 += var1.m22;
  824.       this.m23 += var1.m23;
  825.       this.m30 += var1.m30;
  826.       this.m31 += var1.m31;
  827.       this.m32 += var1.m32;
  828.       this.m33 += var1.m33;
  829.    }
  830.  
  831.    public final void sub(Matrix4f var1, Matrix4f var2) {
  832.       this.m00 = var1.m00 - var2.m00;
  833.       this.m01 = var1.m01 - var2.m01;
  834.       this.m02 = var1.m02 - var2.m02;
  835.       this.m03 = var1.m03 - var2.m03;
  836.       this.m10 = var1.m10 - var2.m10;
  837.       this.m11 = var1.m11 - var2.m11;
  838.       this.m12 = var1.m12 - var2.m12;
  839.       this.m13 = var1.m13 - var2.m13;
  840.       this.m20 = var1.m20 - var2.m20;
  841.       this.m21 = var1.m21 - var2.m21;
  842.       this.m22 = var1.m22 - var2.m22;
  843.       this.m23 = var1.m23 - var2.m23;
  844.       this.m30 = var1.m30 - var2.m30;
  845.       this.m31 = var1.m31 - var2.m31;
  846.       this.m32 = var1.m32 - var2.m32;
  847.       this.m33 = var1.m33 - var2.m33;
  848.    }
  849.  
  850.    public final void sub(Matrix4f var1) {
  851.       this.m00 -= var1.m00;
  852.       this.m01 -= var1.m01;
  853.       this.m02 -= var1.m02;
  854.       this.m03 -= var1.m03;
  855.       this.m10 -= var1.m10;
  856.       this.m11 -= var1.m11;
  857.       this.m12 -= var1.m12;
  858.       this.m13 -= var1.m13;
  859.       this.m20 -= var1.m20;
  860.       this.m21 -= var1.m21;
  861.       this.m22 -= var1.m22;
  862.       this.m23 -= var1.m23;
  863.       this.m30 -= var1.m30;
  864.       this.m31 -= var1.m31;
  865.       this.m32 -= var1.m32;
  866.       this.m33 -= var1.m33;
  867.    }
  868.  
  869.    public final void transpose() {
  870.       float var1 = this.m10;
  871.       this.m10 = this.m01;
  872.       this.m01 = var1;
  873.       var1 = this.m20;
  874.       this.m20 = this.m02;
  875.       this.m02 = var1;
  876.       var1 = this.m30;
  877.       this.m30 = this.m03;
  878.       this.m03 = var1;
  879.       var1 = this.m21;
  880.       this.m21 = this.m12;
  881.       this.m12 = var1;
  882.       var1 = this.m31;
  883.       this.m31 = this.m13;
  884.       this.m13 = var1;
  885.       var1 = this.m32;
  886.       this.m32 = this.m23;
  887.       this.m23 = var1;
  888.    }
  889.  
  890.    public final void transpose(Matrix4f var1) {
  891.       if (this != var1) {
  892.          this.m00 = var1.m00;
  893.          this.m01 = var1.m10;
  894.          this.m02 = var1.m20;
  895.          this.m03 = var1.m30;
  896.          this.m10 = var1.m01;
  897.          this.m11 = var1.m11;
  898.          this.m12 = var1.m21;
  899.          this.m13 = var1.m31;
  900.          this.m20 = var1.m02;
  901.          this.m21 = var1.m12;
  902.          this.m22 = var1.m22;
  903.          this.m23 = var1.m32;
  904.          this.m30 = var1.m03;
  905.          this.m31 = var1.m13;
  906.          this.m32 = var1.m23;
  907.          this.m33 = var1.m33;
  908.       } else {
  909.          this.transpose();
  910.       }
  911.  
  912.    }
  913.  
  914.    public final void set(Quat4f var1) {
  915.       this.m00 = 1.0F - 2.0F * var1.y * var1.y - 2.0F * var1.z * var1.z;
  916.       this.m10 = 2.0F * (var1.x * var1.y + var1.w * var1.z);
  917.       this.m20 = 2.0F * (var1.x * var1.z - var1.w * var1.y);
  918.       this.m01 = 2.0F * (var1.x * var1.y - var1.w * var1.z);
  919.       this.m11 = 1.0F - 2.0F * var1.x * var1.x - 2.0F * var1.z * var1.z;
  920.       this.m21 = 2.0F * (var1.y * var1.z + var1.w * var1.x);
  921.       this.m02 = 2.0F * (var1.x * var1.z + var1.w * var1.y);
  922.       this.m12 = 2.0F * (var1.y * var1.z - var1.w * var1.x);
  923.       this.m22 = 1.0F - 2.0F * var1.x * var1.x - 2.0F * var1.y * var1.y;
  924.       this.m03 = 0.0F;
  925.       this.m13 = 0.0F;
  926.       this.m23 = 0.0F;
  927.       this.m30 = 0.0F;
  928.       this.m31 = 0.0F;
  929.       this.m32 = 0.0F;
  930.       this.m33 = 1.0F;
  931.    }
  932.  
  933.    public final void set(AxisAngle4f var1) {
  934.       float var2 = (float)Math.sqrt((double)(var1.x * var1.x + var1.y * var1.y + var1.z * var1.z));
  935.       if ((double)var2 < 1.0E-8) {
  936.          this.m00 = 1.0F;
  937.          this.m01 = 0.0F;
  938.          this.m02 = 0.0F;
  939.          this.m10 = 0.0F;
  940.          this.m11 = 1.0F;
  941.          this.m12 = 0.0F;
  942.          this.m20 = 0.0F;
  943.          this.m21 = 0.0F;
  944.          this.m22 = 1.0F;
  945.       } else {
  946.          var2 = 1.0F / var2;
  947.          float var3 = var1.x * var2;
  948.          float var4 = var1.y * var2;
  949.          float var5 = var1.z * var2;
  950.          float var6 = (float)Math.sin((double)var1.angle);
  951.          float var7 = (float)Math.cos((double)var1.angle);
  952.          float var8 = 1.0F - var7;
  953.          float var9 = var3 * var5;
  954.          float var10 = var3 * var4;
  955.          float var11 = var4 * var5;
  956.          this.m00 = var8 * var3 * var3 + var7;
  957.          this.m01 = var8 * var10 - var6 * var5;
  958.          this.m02 = var8 * var9 + var6 * var4;
  959.          this.m10 = var8 * var10 + var6 * var5;
  960.          this.m11 = var8 * var4 * var4 + var7;
  961.          this.m12 = var8 * var11 - var6 * var3;
  962.          this.m20 = var8 * var9 - var6 * var4;
  963.          this.m21 = var8 * var11 + var6 * var3;
  964.          this.m22 = var8 * var5 * var5 + var7;
  965.       }
  966.  
  967.       this.m03 = 0.0F;
  968.       this.m13 = 0.0F;
  969.       this.m23 = 0.0F;
  970.       this.m30 = 0.0F;
  971.       this.m31 = 0.0F;
  972.       this.m32 = 0.0F;
  973.       this.m33 = 1.0F;
  974.    }
  975.  
  976.    public final void set(Quat4d var1) {
  977.       this.m00 = (float)((double)1.0F - (double)2.0F * var1.y * var1.y - (double)2.0F * var1.z * var1.z);
  978.       this.m10 = (float)((double)2.0F * (var1.x * var1.y + var1.w * var1.z));
  979.       this.m20 = (float)((double)2.0F * (var1.x * var1.z - var1.w * var1.y));
  980.       this.m01 = (float)((double)2.0F * (var1.x * var1.y - var1.w * var1.z));
  981.       this.m11 = (float)((double)1.0F - (double)2.0F * var1.x * var1.x - (double)2.0F * var1.z * var1.z);
  982.       this.m21 = (float)((double)2.0F * (var1.y * var1.z + var1.w * var1.x));
  983.       this.m02 = (float)((double)2.0F * (var1.x * var1.z + var1.w * var1.y));
  984.       this.m12 = (float)((double)2.0F * (var1.y * var1.z - var1.w * var1.x));
  985.       this.m22 = (float)((double)1.0F - (double)2.0F * var1.x * var1.x - (double)2.0F * var1.y * var1.y);
  986.       this.m03 = 0.0F;
  987.       this.m13 = 0.0F;
  988.       this.m23 = 0.0F;
  989.       this.m30 = 0.0F;
  990.       this.m31 = 0.0F;
  991.       this.m32 = 0.0F;
  992.       this.m33 = 1.0F;
  993.    }
  994.  
  995.    public final void set(AxisAngle4d var1) {
  996.       double var2 = Math.sqrt(var1.x * var1.x + var1.y * var1.y + var1.z * var1.z);
  997.       if (var2 < 1.0E-8) {
  998.          this.m00 = 1.0F;
  999.          this.m01 = 0.0F;
  1000.          this.m02 = 0.0F;
  1001.          this.m10 = 0.0F;
  1002.          this.m11 = 1.0F;
  1003.          this.m12 = 0.0F;
  1004.          this.m20 = 0.0F;
  1005.          this.m21 = 0.0F;
  1006.          this.m22 = 1.0F;
  1007.       } else {
  1008.          var2 = (double)1.0F / var2;
  1009.          double var4 = var1.x * var2;
  1010.          double var6 = var1.y * var2;
  1011.          double var8 = var1.z * var2;
  1012.          float var10 = (float)Math.sin(var1.angle);
  1013.          float var11 = (float)Math.cos(var1.angle);
  1014.          float var12 = 1.0F - var11;
  1015.          float var13 = (float)(var4 * var8);
  1016.          float var14 = (float)(var4 * var6);
  1017.          float var15 = (float)(var6 * var8);
  1018.          this.m00 = var12 * (float)(var4 * var4) + var11;
  1019.          this.m01 = var12 * var14 - var10 * (float)var8;
  1020.          this.m02 = var12 * var13 + var10 * (float)var6;
  1021.          this.m10 = var12 * var14 + var10 * (float)var8;
  1022.          this.m11 = var12 * (float)(var6 * var6) + var11;
  1023.          this.m12 = var12 * var15 - var10 * (float)var4;
  1024.          this.m20 = var12 * var13 - var10 * (float)var6;
  1025.          this.m21 = var12 * var15 + var10 * (float)var4;
  1026.          this.m22 = var12 * (float)(var8 * var8) + var11;
  1027.       }
  1028.  
  1029.       this.m03 = 0.0F;
  1030.       this.m13 = 0.0F;
  1031.       this.m23 = 0.0F;
  1032.       this.m30 = 0.0F;
  1033.       this.m31 = 0.0F;
  1034.       this.m32 = 0.0F;
  1035.       this.m33 = 1.0F;
  1036.    }
  1037.  
  1038.    public final void set(Quat4d var1, Vector3d var2, double var3) {
  1039.       this.m00 = (float)(var3 * ((double)1.0F - (double)2.0F * var1.y * var1.y - (double)2.0F * var1.z * var1.z));
  1040.       this.m10 = (float)(var3 * (double)2.0F * (var1.x * var1.y + var1.w * var1.z));
  1041.       this.m20 = (float)(var3 * (double)2.0F * (var1.x * var1.z - var1.w * var1.y));
  1042.       this.m01 = (float)(var3 * (double)2.0F * (var1.x * var1.y - var1.w * var1.z));
  1043.       this.m11 = (float)(var3 * ((double)1.0F - (double)2.0F * var1.x * var1.x - (double)2.0F * var1.z * var1.z));
  1044.       this.m21 = (float)(var3 * (double)2.0F * (var1.y * var1.z + var1.w * var1.x));
  1045.       this.m02 = (float)(var3 * (double)2.0F * (var1.x * var1.z + var1.w * var1.y));
  1046.       this.m12 = (float)(var3 * (double)2.0F * (var1.y * var1.z - var1.w * var1.x));
  1047.       this.m22 = (float)(var3 * ((double)1.0F - (double)2.0F * var1.x * var1.x - (double)2.0F * var1.y * var1.y));
  1048.       this.m03 = (float)var2.x;
  1049.       this.m13 = (float)var2.y;
  1050.       this.m23 = (float)var2.z;
  1051.       this.m30 = 0.0F;
  1052.       this.m31 = 0.0F;
  1053.       this.m32 = 0.0F;
  1054.       this.m33 = 1.0F;
  1055.    }
  1056.  
  1057.    public final void set(Quat4f var1, Vector3f var2, float var3) {
  1058.       this.m00 = var3 * (1.0F - 2.0F * var1.y * var1.y - 2.0F * var1.z * var1.z);
  1059.       this.m10 = var3 * 2.0F * (var1.x * var1.y + var1.w * var1.z);
  1060.       this.m20 = var3 * 2.0F * (var1.x * var1.z - var1.w * var1.y);
  1061.       this.m01 = var3 * 2.0F * (var1.x * var1.y - var1.w * var1.z);
  1062.       this.m11 = var3 * (1.0F - 2.0F * var1.x * var1.x - 2.0F * var1.z * var1.z);
  1063.       this.m21 = var3 * 2.0F * (var1.y * var1.z + var1.w * var1.x);
  1064.       this.m02 = var3 * 2.0F * (var1.x * var1.z + var1.w * var1.y);
  1065.       this.m12 = var3 * 2.0F * (var1.y * var1.z - var1.w * var1.x);
  1066.       this.m22 = var3 * (1.0F - 2.0F * var1.x * var1.x - 2.0F * var1.y * var1.y);
  1067.       this.m03 = var2.x;
  1068.       this.m13 = var2.y;
  1069.       this.m23 = var2.z;
  1070.       this.m30 = 0.0F;
  1071.       this.m31 = 0.0F;
  1072.       this.m32 = 0.0F;
  1073.       this.m33 = 1.0F;
  1074.    }
  1075.  
  1076.    public final void set(Matrix4d var1) {
  1077.       this.m00 = (float)var1.m00;
  1078.       this.m01 = (float)var1.m01;
  1079.       this.m02 = (float)var1.m02;
  1080.       this.m03 = (float)var1.m03;
  1081.       this.m10 = (float)var1.m10;
  1082.       this.m11 = (float)var1.m11;
  1083.       this.m12 = (float)var1.m12;
  1084.       this.m13 = (float)var1.m13;
  1085.       this.m20 = (float)var1.m20;
  1086.       this.m21 = (float)var1.m21;
  1087.       this.m22 = (float)var1.m22;
  1088.       this.m23 = (float)var1.m23;
  1089.       this.m30 = (float)var1.m30;
  1090.       this.m31 = (float)var1.m31;
  1091.       this.m32 = (float)var1.m32;
  1092.       this.m33 = (float)var1.m33;
  1093.    }
  1094.  
  1095.    public final void set(Matrix4f var1) {
  1096.       this.m00 = var1.m00;
  1097.       this.m01 = var1.m01;
  1098.       this.m02 = var1.m02;
  1099.       this.m03 = var1.m03;
  1100.       this.m10 = var1.m10;
  1101.       this.m11 = var1.m11;
  1102.       this.m12 = var1.m12;
  1103.       this.m13 = var1.m13;
  1104.       this.m20 = var1.m20;
  1105.       this.m21 = var1.m21;
  1106.       this.m22 = var1.m22;
  1107.       this.m23 = var1.m23;
  1108.       this.m30 = var1.m30;
  1109.       this.m31 = var1.m31;
  1110.       this.m32 = var1.m32;
  1111.       this.m33 = var1.m33;
  1112.    }
  1113.  
  1114.    public final void invert(Matrix4f var1) {
  1115.       this.invertGeneral(var1);
  1116.    }
  1117.  
  1118.    public final void invert() {
  1119.       this.invertGeneral(this);
  1120.    }
  1121.  
  1122.    final void invertGeneral(Matrix4f var1) {
  1123.       double[] var2 = new double[16];
  1124.       double[] var3 = new double[16];
  1125.       int[] var4 = new int[4];
  1126.       var2[0] = (double)var1.m00;
  1127.       var2[1] = (double)var1.m01;
  1128.       var2[2] = (double)var1.m02;
  1129.       var2[3] = (double)var1.m03;
  1130.       var2[4] = (double)var1.m10;
  1131.       var2[5] = (double)var1.m11;
  1132.       var2[6] = (double)var1.m12;
  1133.       var2[7] = (double)var1.m13;
  1134.       var2[8] = (double)var1.m20;
  1135.       var2[9] = (double)var1.m21;
  1136.       var2[10] = (double)var1.m22;
  1137.       var2[11] = (double)var1.m23;
  1138.       var2[12] = (double)var1.m30;
  1139.       var2[13] = (double)var1.m31;
  1140.       var2[14] = (double)var1.m32;
  1141.       var2[15] = (double)var1.m33;
  1142.       if (!luDecomposition(var2, var4)) {
  1143.          throw new SingularMatrixException(VecMathI18N.getString("Matrix4f12"));
  1144.       } else {
  1145.          for(int var5 = 0; var5 < 16; ++var5) {
  1146.             var3[var5] = (double)0.0F;
  1147.          }
  1148.  
  1149.          var3[0] = (double)1.0F;
  1150.          var3[5] = (double)1.0F;
  1151.          var3[10] = (double)1.0F;
  1152.          var3[15] = (double)1.0F;
  1153.          luBacksubstitution(var2, var4, var3);
  1154.          this.m00 = (float)var3[0];
  1155.          this.m01 = (float)var3[1];
  1156.          this.m02 = (float)var3[2];
  1157.          this.m03 = (float)var3[3];
  1158.          this.m10 = (float)var3[4];
  1159.          this.m11 = (float)var3[5];
  1160.          this.m12 = (float)var3[6];
  1161.          this.m13 = (float)var3[7];
  1162.          this.m20 = (float)var3[8];
  1163.          this.m21 = (float)var3[9];
  1164.          this.m22 = (float)var3[10];
  1165.          this.m23 = (float)var3[11];
  1166.          this.m30 = (float)var3[12];
  1167.          this.m31 = (float)var3[13];
  1168.          this.m32 = (float)var3[14];
  1169.          this.m33 = (float)var3[15];
  1170.       }
  1171.    }
  1172.  
  1173.    static boolean luDecomposition(double[] var0, int[] var1) {
  1174.       double[] var2 = new double[4];
  1175.       int var5 = 0;
  1176.       int var6 = 0;
  1177.  
  1178.       double var7;
  1179.       for(int var3 = 4; var3-- != 0; var2[var6++] = (double)1.0F / var7) {
  1180.          var7 = (double)0.0F;
  1181.          int var4 = 4;
  1182.  
  1183.          while(var4-- != 0) {
  1184.             double var9 = var0[var5++];
  1185.             var9 = Math.abs(var9);
  1186.             if (var9 > var7) {
  1187.                var7 = var9;
  1188.             }
  1189.          }
  1190.  
  1191.          if (var7 == (double)0.0F) {
  1192.             return false;
  1193.          }
  1194.       }
  1195.  
  1196.       byte var18 = 0;
  1197.  
  1198.       for(int var17 = 0; var17 < 4; ++var17) {
  1199.          for(int var19 = 0; var19 < var17; ++var19) {
  1200.             int var8 = var18 + 4 * var19 + var17;
  1201.             double var11 = var0[var8];
  1202.             int var23 = var19;
  1203.             int var29 = var18 + 4 * var19;
  1204.  
  1205.             for(int var10 = var18 + var17; var23-- != 0; var10 += 4) {
  1206.                var11 -= var0[var29] * var0[var10];
  1207.                ++var29;
  1208.             }
  1209.  
  1210.             var0[var8] = var11;
  1211.          }
  1212.  
  1213.          double var13 = (double)0.0F;
  1214.          var6 = -1;
  1215.  
  1216.          for(int var20 = var17; var20 < 4; ++var20) {
  1217.             int var26 = var18 + 4 * var20 + var17;
  1218.             double var34 = var0[var26];
  1219.             int var24 = var17;
  1220.             int var30 = var18 + 4 * var20;
  1221.  
  1222.             for(int var32 = var18 + var17; var24-- != 0; var32 += 4) {
  1223.                var34 -= var0[var30] * var0[var32];
  1224.                ++var30;
  1225.             }
  1226.  
  1227.             var0[var26] = var34;
  1228.             double var15;
  1229.             if ((var15 = var2[var20] * Math.abs(var34)) >= var13) {
  1230.                var13 = var15;
  1231.                var6 = var20;
  1232.             }
  1233.          }
  1234.  
  1235.          if (var6 < 0) {
  1236.             throw new RuntimeException(VecMathI18N.getString("Matrix4f13"));
  1237.          }
  1238.  
  1239.          if (var17 != var6) {
  1240.             int var25 = 4;
  1241.             int var31 = var18 + 4 * var6;
  1242.  
  1243.             double var35;
  1244.             for(int var33 = var18 + 4 * var17; var25-- != 0; var0[var33++] = var35) {
  1245.                var35 = var0[var31];
  1246.                var0[var31++] = var0[var33];
  1247.             }
  1248.  
  1249.             var2[var6] = var2[var17];
  1250.          }
  1251.  
  1252.          var1[var17] = var6;
  1253.          if (var0[var18 + 4 * var17 + var17] == (double)0.0F) {
  1254.             return false;
  1255.          }
  1256.  
  1257.          if (var17 != 3) {
  1258.             double var36 = (double)1.0F / var0[var18 + 4 * var17 + var17];
  1259.             int var27 = var18 + 4 * (var17 + 1) + var17;
  1260.  
  1261.             for(int var21 = 3 - var17; var21-- != 0; var27 += 4) {
  1262.                var0[var27] *= var36;
  1263.             }
  1264.          }
  1265.       }
  1266.  
  1267.       return true;
  1268.    }
  1269.  
  1270.    static void luBacksubstitution(double[] var0, int[] var1, double[] var2) {
  1271.       byte var8 = 0;
  1272.  
  1273.       for(int var7 = 0; var7 < 4; ++var7) {
  1274.          int var9 = var7;
  1275.          int var4 = -1;
  1276.  
  1277.          for(int var3 = 0; var3 < 4; ++var3) {
  1278.             int var5 = var1[var8 + var3];
  1279.             double var11 = var2[var9 + 4 * var5];
  1280.             var2[var9 + 4 * var5] = var2[var9 + 4 * var3];
  1281.             if (var4 >= 0) {
  1282.                int var10 = var3 * 4;
  1283.  
  1284.                for(int var6 = var4; var6 <= var3 - 1; ++var6) {
  1285.                   var11 -= var0[var10 + var6] * var2[var9 + 4 * var6];
  1286.                }
  1287.             } else if (var11 != (double)0.0F) {
  1288.                var4 = var3;
  1289.             }
  1290.  
  1291.             var2[var9 + 4 * var3] = var11;
  1292.          }
  1293.  
  1294.          int var13 = 12;
  1295.          var2[var9 + 12] /= var0[var13 + 3];
  1296.          var13 -= 4;
  1297.          var2[var9 + 8] = (var2[var9 + 8] - var0[var13 + 3] * var2[var9 + 12]) / var0[var13 + 2];
  1298.          var13 -= 4;
  1299.          var2[var9 + 4] = (var2[var9 + 4] - var0[var13 + 2] * var2[var9 + 8] - var0[var13 + 3] * var2[var9 + 12]) / var0[var13 + 1];
  1300.          var13 -= 4;
  1301.          var2[var9 + 0] = (var2[var9 + 0] - var0[var13 + 1] * var2[var9 + 4] - var0[var13 + 2] * var2[var9 + 8] - var0[var13 + 3] * var2[var9 + 12]) / var0[var13 + 0];
  1302.       }
  1303.  
  1304.    }
  1305.  
  1306.    public final float determinant() {
  1307.       float var1 = this.m00 * (this.m11 * this.m22 * this.m33 + this.m12 * this.m23 * this.m31 + this.m13 * this.m21 * this.m32 - this.m13 * this.m22 * this.m31 - this.m11 * this.m23 * this.m32 - this.m12 * this.m21 * this.m33);
  1308.       var1 -= this.m01 * (this.m10 * this.m22 * this.m33 + this.m12 * this.m23 * this.m30 + this.m13 * this.m20 * this.m32 - this.m13 * this.m22 * this.m30 - this.m10 * this.m23 * this.m32 - this.m12 * this.m20 * this.m33);
  1309.       var1 += this.m02 * (this.m10 * this.m21 * this.m33 + this.m11 * this.m23 * this.m30 + this.m13 * this.m20 * this.m31 - this.m13 * this.m21 * this.m30 - this.m10 * this.m23 * this.m31 - this.m11 * this.m20 * this.m33);
  1310.       var1 -= this.m03 * (this.m10 * this.m21 * this.m32 + this.m11 * this.m22 * this.m30 + this.m12 * this.m20 * this.m31 - this.m12 * this.m21 * this.m30 - this.m10 * this.m22 * this.m31 - this.m11 * this.m20 * this.m32);
  1311.       return var1;
  1312.    }
  1313.  
  1314.    public final void set(Matrix3f var1) {
  1315.       this.m00 = var1.m00;
  1316.       this.m01 = var1.m01;
  1317.       this.m02 = var1.m02;
  1318.       this.m03 = 0.0F;
  1319.       this.m10 = var1.m10;
  1320.       this.m11 = var1.m11;
  1321.       this.m12 = var1.m12;
  1322.       this.m13 = 0.0F;
  1323.       this.m20 = var1.m20;
  1324.       this.m21 = var1.m21;
  1325.       this.m22 = var1.m22;
  1326.       this.m23 = 0.0F;
  1327.       this.m30 = 0.0F;
  1328.       this.m31 = 0.0F;
  1329.       this.m32 = 0.0F;
  1330.       this.m33 = 1.0F;
  1331.    }
  1332.  
  1333.    public final void set(Matrix3d var1) {
  1334.       this.m00 = (float)var1.m00;
  1335.       this.m01 = (float)var1.m01;
  1336.       this.m02 = (float)var1.m02;
  1337.       this.m03 = 0.0F;
  1338.       this.m10 = (float)var1.m10;
  1339.       this.m11 = (float)var1.m11;
  1340.       this.m12 = (float)var1.m12;
  1341.       this.m13 = 0.0F;
  1342.       this.m20 = (float)var1.m20;
  1343.       this.m21 = (float)var1.m21;
  1344.       this.m22 = (float)var1.m22;
  1345.       this.m23 = 0.0F;
  1346.       this.m30 = 0.0F;
  1347.       this.m31 = 0.0F;
  1348.       this.m32 = 0.0F;
  1349.       this.m33 = 1.0F;
  1350.    }
  1351.  
  1352.    public final void set(float var1) {
  1353.       this.m00 = var1;
  1354.       this.m01 = 0.0F;
  1355.       this.m02 = 0.0F;
  1356.       this.m03 = 0.0F;
  1357.       this.m10 = 0.0F;
  1358.       this.m11 = var1;
  1359.       this.m12 = 0.0F;
  1360.       this.m13 = 0.0F;
  1361.       this.m20 = 0.0F;
  1362.       this.m21 = 0.0F;
  1363.       this.m22 = var1;
  1364.       this.m23 = 0.0F;
  1365.       this.m30 = 0.0F;
  1366.       this.m31 = 0.0F;
  1367.       this.m32 = 0.0F;
  1368.       this.m33 = 1.0F;
  1369.    }
  1370.  
  1371.    public final void set(float[] var1) {
  1372.       this.m00 = var1[0];
  1373.       this.m01 = var1[1];
  1374.       this.m02 = var1[2];
  1375.       this.m03 = var1[3];
  1376.       this.m10 = var1[4];
  1377.       this.m11 = var1[5];
  1378.       this.m12 = var1[6];
  1379.       this.m13 = var1[7];
  1380.       this.m20 = var1[8];
  1381.       this.m21 = var1[9];
  1382.       this.m22 = var1[10];
  1383.       this.m23 = var1[11];
  1384.       this.m30 = var1[12];
  1385.       this.m31 = var1[13];
  1386.       this.m32 = var1[14];
  1387.       this.m33 = var1[15];
  1388.    }
  1389.  
  1390.    public final void set(Vector3f var1) {
  1391.       this.m00 = 1.0F;
  1392.       this.m01 = 0.0F;
  1393.       this.m02 = 0.0F;
  1394.       this.m03 = var1.x;
  1395.       this.m10 = 0.0F;
  1396.       this.m11 = 1.0F;
  1397.       this.m12 = 0.0F;
  1398.       this.m13 = var1.y;
  1399.       this.m20 = 0.0F;
  1400.       this.m21 = 0.0F;
  1401.       this.m22 = 1.0F;
  1402.       this.m23 = var1.z;
  1403.       this.m30 = 0.0F;
  1404.       this.m31 = 0.0F;
  1405.       this.m32 = 0.0F;
  1406.       this.m33 = 1.0F;
  1407.    }
  1408.  
  1409.    public final void set(float var1, Vector3f var2) {
  1410.       this.m00 = var1;
  1411.       this.m01 = 0.0F;
  1412.       this.m02 = 0.0F;
  1413.       this.m03 = var2.x;
  1414.       this.m10 = 0.0F;
  1415.       this.m11 = var1;
  1416.       this.m12 = 0.0F;
  1417.       this.m13 = var2.y;
  1418.       this.m20 = 0.0F;
  1419.       this.m21 = 0.0F;
  1420.       this.m22 = var1;
  1421.       this.m23 = var2.z;
  1422.       this.m30 = 0.0F;
  1423.       this.m31 = 0.0F;
  1424.       this.m32 = 0.0F;
  1425.       this.m33 = 1.0F;
  1426.    }
  1427.  
  1428.    public final void set(Vector3f var1, float var2) {
  1429.       this.m00 = var2;
  1430.       this.m01 = 0.0F;
  1431.       this.m02 = 0.0F;
  1432.       this.m03 = var2 * var1.x;
  1433.       this.m10 = 0.0F;
  1434.       this.m11 = var2;
  1435.       this.m12 = 0.0F;
  1436.       this.m13 = var2 * var1.y;
  1437.       this.m20 = 0.0F;
  1438.       this.m21 = 0.0F;
  1439.       this.m22 = var2;
  1440.       this.m23 = var2 * var1.z;
  1441.       this.m30 = 0.0F;
  1442.       this.m31 = 0.0F;
  1443.       this.m32 = 0.0F;
  1444.       this.m33 = 1.0F;
  1445.    }
  1446.  
  1447.    public final void set(Matrix3f var1, Vector3f var2, float var3) {
  1448.       this.m00 = var1.m00 * var3;
  1449.       this.m01 = var1.m01 * var3;
  1450.       this.m02 = var1.m02 * var3;
  1451.       this.m03 = var2.x;
  1452.       this.m10 = var1.m10 * var3;
  1453.       this.m11 = var1.m11 * var3;
  1454.       this.m12 = var1.m12 * var3;
  1455.       this.m13 = var2.y;
  1456.       this.m20 = var1.m20 * var3;
  1457.       this.m21 = var1.m21 * var3;
  1458.       this.m22 = var1.m22 * var3;
  1459.       this.m23 = var2.z;
  1460.       this.m30 = 0.0F;
  1461.       this.m31 = 0.0F;
  1462.       this.m32 = 0.0F;
  1463.       this.m33 = 1.0F;
  1464.    }
  1465.  
  1466.    public final void set(Matrix3d var1, Vector3d var2, double var3) {
  1467.       this.m00 = (float)(var1.m00 * var3);
  1468.       this.m01 = (float)(var1.m01 * var3);
  1469.       this.m02 = (float)(var1.m02 * var3);
  1470.       this.m03 = (float)var2.x;
  1471.       this.m10 = (float)(var1.m10 * var3);
  1472.       this.m11 = (float)(var1.m11 * var3);
  1473.       this.m12 = (float)(var1.m12 * var3);
  1474.       this.m13 = (float)var2.y;
  1475.       this.m20 = (float)(var1.m20 * var3);
  1476.       this.m21 = (float)(var1.m21 * var3);
  1477.       this.m22 = (float)(var1.m22 * var3);
  1478.       this.m23 = (float)var2.z;
  1479.       this.m30 = 0.0F;
  1480.       this.m31 = 0.0F;
  1481.       this.m32 = 0.0F;
  1482.       this.m33 = 1.0F;
  1483.    }
  1484.  
  1485.    public final void setTranslation(Vector3f var1) {
  1486.       this.m03 = var1.x;
  1487.       this.m13 = var1.y;
  1488.       this.m23 = var1.z;
  1489.    }
  1490.  
  1491.    public final void rotX(float var1) {
  1492.       float var2 = (float)Math.sin((double)var1);
  1493.       float var3 = (float)Math.cos((double)var1);
  1494.       this.m00 = 1.0F;
  1495.       this.m01 = 0.0F;
  1496.       this.m02 = 0.0F;
  1497.       this.m03 = 0.0F;
  1498.       this.m10 = 0.0F;
  1499.       this.m11 = var3;
  1500.       this.m12 = -var2;
  1501.       this.m13 = 0.0F;
  1502.       this.m20 = 0.0F;
  1503.       this.m21 = var2;
  1504.       this.m22 = var3;
  1505.       this.m23 = 0.0F;
  1506.       this.m30 = 0.0F;
  1507.       this.m31 = 0.0F;
  1508.       this.m32 = 0.0F;
  1509.       this.m33 = 1.0F;
  1510.    }
  1511.  
  1512.    public final void rotY(float var1) {
  1513.       float var2 = (float)Math.sin((double)var1);
  1514.       float var3 = (float)Math.cos((double)var1);
  1515.       this.m00 = var3;
  1516.       this.m01 = 0.0F;
  1517.       this.m02 = var2;
  1518.       this.m03 = 0.0F;
  1519.       this.m10 = 0.0F;
  1520.       this.m11 = 1.0F;
  1521.       this.m12 = 0.0F;
  1522.       this.m13 = 0.0F;
  1523.       this.m20 = -var2;
  1524.       this.m21 = 0.0F;
  1525.       this.m22 = var3;
  1526.       this.m23 = 0.0F;
  1527.       this.m30 = 0.0F;
  1528.       this.m31 = 0.0F;
  1529.       this.m32 = 0.0F;
  1530.       this.m33 = 1.0F;
  1531.    }
  1532.  
  1533.    public final void rotZ(float var1) {
  1534.       float var2 = (float)Math.sin((double)var1);
  1535.       float var3 = (float)Math.cos((double)var1);
  1536.       this.m00 = var3;
  1537.       this.m01 = -var2;
  1538.       this.m02 = 0.0F;
  1539.       this.m03 = 0.0F;
  1540.       this.m10 = var2;
  1541.       this.m11 = var3;
  1542.       this.m12 = 0.0F;
  1543.       this.m13 = 0.0F;
  1544.       this.m20 = 0.0F;
  1545.       this.m21 = 0.0F;
  1546.       this.m22 = 1.0F;
  1547.       this.m23 = 0.0F;
  1548.       this.m30 = 0.0F;
  1549.       this.m31 = 0.0F;
  1550.       this.m32 = 0.0F;
  1551.       this.m33 = 1.0F;
  1552.    }
  1553.  
  1554.    public final void mul(float var1) {
  1555.       this.m00 *= var1;
  1556.       this.m01 *= var1;
  1557.       this.m02 *= var1;
  1558.       this.m03 *= var1;
  1559.       this.m10 *= var1;
  1560.       this.m11 *= var1;
  1561.       this.m12 *= var1;
  1562.       this.m13 *= var1;
  1563.       this.m20 *= var1;
  1564.       this.m21 *= var1;
  1565.       this.m22 *= var1;
  1566.       this.m23 *= var1;
  1567.       this.m30 *= var1;
  1568.       this.m31 *= var1;
  1569.       this.m32 *= var1;
  1570.       this.m33 *= var1;
  1571.    }
  1572.  
  1573.    public final void mul(float var1, Matrix4f var2) {
  1574.       this.m00 = var2.m00 * var1;
  1575.       this.m01 = var2.m01 * var1;
  1576.       this.m02 = var2.m02 * var1;
  1577.       this.m03 = var2.m03 * var1;
  1578.       this.m10 = var2.m10 * var1;
  1579.       this.m11 = var2.m11 * var1;
  1580.       this.m12 = var2.m12 * var1;
  1581.       this.m13 = var2.m13 * var1;
  1582.       this.m20 = var2.m20 * var1;
  1583.       this.m21 = var2.m21 * var1;
  1584.       this.m22 = var2.m22 * var1;
  1585.       this.m23 = var2.m23 * var1;
  1586.       this.m30 = var2.m30 * var1;
  1587.       this.m31 = var2.m31 * var1;
  1588.       this.m32 = var2.m32 * var1;
  1589.       this.m33 = var2.m33 * var1;
  1590.    }
  1591.  
  1592.    public final void mul(Matrix4f var1) {
  1593.       float var2 = this.m00 * var1.m00 + this.m01 * var1.m10 + this.m02 * var1.m20 + this.m03 * var1.m30;
  1594.       float var3 = this.m00 * var1.m01 + this.m01 * var1.m11 + this.m02 * var1.m21 + this.m03 * var1.m31;
  1595.       float var4 = this.m00 * var1.m02 + this.m01 * var1.m12 + this.m02 * var1.m22 + this.m03 * var1.m32;
  1596.       float var5 = this.m00 * var1.m03 + this.m01 * var1.m13 + this.m02 * var1.m23 + this.m03 * var1.m33;
  1597.       float var6 = this.m10 * var1.m00 + this.m11 * var1.m10 + this.m12 * var1.m20 + this.m13 * var1.m30;
  1598.       float var7 = this.m10 * var1.m01 + this.m11 * var1.m11 + this.m12 * var1.m21 + this.m13 * var1.m31;
  1599.       float var8 = this.m10 * var1.m02 + this.m11 * var1.m12 + this.m12 * var1.m22 + this.m13 * var1.m32;
  1600.       float var9 = this.m10 * var1.m03 + this.m11 * var1.m13 + this.m12 * var1.m23 + this.m13 * var1.m33;
  1601.       float var10 = this.m20 * var1.m00 + this.m21 * var1.m10 + this.m22 * var1.m20 + this.m23 * var1.m30;
  1602.       float var11 = this.m20 * var1.m01 + this.m21 * var1.m11 + this.m22 * var1.m21 + this.m23 * var1.m31;
  1603.       float var12 = this.m20 * var1.m02 + this.m21 * var1.m12 + this.m22 * var1.m22 + this.m23 * var1.m32;
  1604.       float var13 = this.m20 * var1.m03 + this.m21 * var1.m13 + this.m22 * var1.m23 + this.m23 * var1.m33;
  1605.       float var14 = this.m30 * var1.m00 + this.m31 * var1.m10 + this.m32 * var1.m20 + this.m33 * var1.m30;
  1606.       float var15 = this.m30 * var1.m01 + this.m31 * var1.m11 + this.m32 * var1.m21 + this.m33 * var1.m31;
  1607.       float var16 = this.m30 * var1.m02 + this.m31 * var1.m12 + this.m32 * var1.m22 + this.m33 * var1.m32;
  1608.       float var17 = this.m30 * var1.m03 + this.m31 * var1.m13 + this.m32 * var1.m23 + this.m33 * var1.m33;
  1609.       this.m00 = var2;
  1610.       this.m01 = var3;
  1611.       this.m02 = var4;
  1612.       this.m03 = var5;
  1613.       this.m10 = var6;
  1614.       this.m11 = var7;
  1615.       this.m12 = var8;
  1616.       this.m13 = var9;
  1617.       this.m20 = var10;
  1618.       this.m21 = var11;
  1619.       this.m22 = var12;
  1620.       this.m23 = var13;
  1621.       this.m30 = var14;
  1622.       this.m31 = var15;
  1623.       this.m32 = var16;
  1624.       this.m33 = var17;
  1625.    }
  1626.  
  1627.    public final void mul(Matrix4f var1, Matrix4f var2) {
  1628.       if (this != var1 && this != var2) {
  1629.          this.m00 = var1.m00 * var2.m00 + var1.m01 * var2.m10 + var1.m02 * var2.m20 + var1.m03 * var2.m30;
  1630.          this.m01 = var1.m00 * var2.m01 + var1.m01 * var2.m11 + var1.m02 * var2.m21 + var1.m03 * var2.m31;
  1631.          this.m02 = var1.m00 * var2.m02 + var1.m01 * var2.m12 + var1.m02 * var2.m22 + var1.m03 * var2.m32;
  1632.          this.m03 = var1.m00 * var2.m03 + var1.m01 * var2.m13 + var1.m02 * var2.m23 + var1.m03 * var2.m33;
  1633.          this.m10 = var1.m10 * var2.m00 + var1.m11 * var2.m10 + var1.m12 * var2.m20 + var1.m13 * var2.m30;
  1634.          this.m11 = var1.m10 * var2.m01 + var1.m11 * var2.m11 + var1.m12 * var2.m21 + var1.m13 * var2.m31;
  1635.          this.m12 = var1.m10 * var2.m02 + var1.m11 * var2.m12 + var1.m12 * var2.m22 + var1.m13 * var2.m32;
  1636.          this.m13 = var1.m10 * var2.m03 + var1.m11 * var2.m13 + var1.m12 * var2.m23 + var1.m13 * var2.m33;
  1637.          this.m20 = var1.m20 * var2.m00 + var1.m21 * var2.m10 + var1.m22 * var2.m20 + var1.m23 * var2.m30;
  1638.          this.m21 = var1.m20 * var2.m01 + var1.m21 * var2.m11 + var1.m22 * var2.m21 + var1.m23 * var2.m31;
  1639.          this.m22 = var1.m20 * var2.m02 + var1.m21 * var2.m12 + var1.m22 * var2.m22 + var1.m23 * var2.m32;
  1640.          this.m23 = var1.m20 * var2.m03 + var1.m21 * var2.m13 + var1.m22 * var2.m23 + var1.m23 * var2.m33;
  1641.          this.m30 = var1.m30 * var2.m00 + var1.m31 * var2.m10 + var1.m32 * var2.m20 + var1.m33 * var2.m30;
  1642.          this.m31 = var1.m30 * var2.m01 + var1.m31 * var2.m11 + var1.m32 * var2.m21 + var1.m33 * var2.m31;
  1643.          this.m32 = var1.m30 * var2.m02 + var1.m31 * var2.m12 + var1.m32 * var2.m22 + var1.m33 * var2.m32;
  1644.          this.m33 = var1.m30 * var2.m03 + var1.m31 * var2.m13 + var1.m32 * var2.m23 + var1.m33 * var2.m33;
  1645.       } else {
  1646.          float var3 = var1.m00 * var2.m00 + var1.m01 * var2.m10 + var1.m02 * var2.m20 + var1.m03 * var2.m30;
  1647.          float var4 = var1.m00 * var2.m01 + var1.m01 * var2.m11 + var1.m02 * var2.m21 + var1.m03 * var2.m31;
  1648.          float var5 = var1.m00 * var2.m02 + var1.m01 * var2.m12 + var1.m02 * var2.m22 + var1.m03 * var2.m32;
  1649.          float var6 = var1.m00 * var2.m03 + var1.m01 * var2.m13 + var1.m02 * var2.m23 + var1.m03 * var2.m33;
  1650.          float var7 = var1.m10 * var2.m00 + var1.m11 * var2.m10 + var1.m12 * var2.m20 + var1.m13 * var2.m30;
  1651.          float var8 = var1.m10 * var2.m01 + var1.m11 * var2.m11 + var1.m12 * var2.m21 + var1.m13 * var2.m31;
  1652.          float var9 = var1.m10 * var2.m02 + var1.m11 * var2.m12 + var1.m12 * var2.m22 + var1.m13 * var2.m32;
  1653.          float var10 = var1.m10 * var2.m03 + var1.m11 * var2.m13 + var1.m12 * var2.m23 + var1.m13 * var2.m33;
  1654.          float var11 = var1.m20 * var2.m00 + var1.m21 * var2.m10 + var1.m22 * var2.m20 + var1.m23 * var2.m30;
  1655.          float var12 = var1.m20 * var2.m01 + var1.m21 * var2.m11 + var1.m22 * var2.m21 + var1.m23 * var2.m31;
  1656.          float var13 = var1.m20 * var2.m02 + var1.m21 * var2.m12 + var1.m22 * var2.m22 + var1.m23 * var2.m32;
  1657.          float var14 = var1.m20 * var2.m03 + var1.m21 * var2.m13 + var1.m22 * var2.m23 + var1.m23 * var2.m33;
  1658.          float var15 = var1.m30 * var2.m00 + var1.m31 * var2.m10 + var1.m32 * var2.m20 + var1.m33 * var2.m30;
  1659.          float var16 = var1.m30 * var2.m01 + var1.m31 * var2.m11 + var1.m32 * var2.m21 + var1.m33 * var2.m31;
  1660.          float var17 = var1.m30 * var2.m02 + var1.m31 * var2.m12 + var1.m32 * var2.m22 + var1.m33 * var2.m32;
  1661.          float var18 = var1.m30 * var2.m03 + var1.m31 * var2.m13 + var1.m32 * var2.m23 + var1.m33 * var2.m33;
  1662.          this.m00 = var3;
  1663.          this.m01 = var4;
  1664.          this.m02 = var5;
  1665.          this.m03 = var6;
  1666.          this.m10 = var7;
  1667.          this.m11 = var8;
  1668.          this.m12 = var9;
  1669.          this.m13 = var10;
  1670.          this.m20 = var11;
  1671.          this.m21 = var12;
  1672.          this.m22 = var13;
  1673.          this.m23 = var14;
  1674.          this.m30 = var15;
  1675.          this.m31 = var16;
  1676.          this.m32 = var17;
  1677.          this.m33 = var18;
  1678.       }
  1679.  
  1680.    }
  1681.  
  1682.    public final void mulTransposeBoth(Matrix4f var1, Matrix4f var2) {
  1683.       if (this != var1 && this != var2) {
  1684.          this.m00 = var1.m00 * var2.m00 + var1.m10 * var2.m01 + var1.m20 * var2.m02 + var1.m30 * var2.m03;
  1685.          this.m01 = var1.m00 * var2.m10 + var1.m10 * var2.m11 + var1.m20 * var2.m12 + var1.m30 * var2.m13;
  1686.          this.m02 = var1.m00 * var2.m20 + var1.m10 * var2.m21 + var1.m20 * var2.m22 + var1.m30 * var2.m23;
  1687.          this.m03 = var1.m00 * var2.m30 + var1.m10 * var2.m31 + var1.m20 * var2.m32 + var1.m30 * var2.m33;
  1688.          this.m10 = var1.m01 * var2.m00 + var1.m11 * var2.m01 + var1.m21 * var2.m02 + var1.m31 * var2.m03;
  1689.          this.m11 = var1.m01 * var2.m10 + var1.m11 * var2.m11 + var1.m21 * var2.m12 + var1.m31 * var2.m13;
  1690.          this.m12 = var1.m01 * var2.m20 + var1.m11 * var2.m21 + var1.m21 * var2.m22 + var1.m31 * var2.m23;
  1691.          this.m13 = var1.m01 * var2.m30 + var1.m11 * var2.m31 + var1.m21 * var2.m32 + var1.m31 * var2.m33;
  1692.          this.m20 = var1.m02 * var2.m00 + var1.m12 * var2.m01 + var1.m22 * var2.m02 + var1.m32 * var2.m03;
  1693.          this.m21 = var1.m02 * var2.m10 + var1.m12 * var2.m11 + var1.m22 * var2.m12 + var1.m32 * var2.m13;
  1694.          this.m22 = var1.m02 * var2.m20 + var1.m12 * var2.m21 + var1.m22 * var2.m22 + var1.m32 * var2.m23;
  1695.          this.m23 = var1.m02 * var2.m30 + var1.m12 * var2.m31 + var1.m22 * var2.m32 + var1.m32 * var2.m33;
  1696.          this.m30 = var1.m03 * var2.m00 + var1.m13 * var2.m01 + var1.m23 * var2.m02 + var1.m33 * var2.m03;
  1697.          this.m31 = var1.m03 * var2.m10 + var1.m13 * var2.m11 + var1.m23 * var2.m12 + var1.m33 * var2.m13;
  1698.          this.m32 = var1.m03 * var2.m20 + var1.m13 * var2.m21 + var1.m23 * var2.m22 + var1.m33 * var2.m23;
  1699.          this.m33 = var1.m03 * var2.m30 + var1.m13 * var2.m31 + var1.m23 * var2.m32 + var1.m33 * var2.m33;
  1700.       } else {
  1701.          float var3 = var1.m00 * var2.m00 + var1.m10 * var2.m01 + var1.m20 * var2.m02 + var1.m30 * var2.m03;
  1702.          float var4 = var1.m00 * var2.m10 + var1.m10 * var2.m11 + var1.m20 * var2.m12 + var1.m30 * var2.m13;
  1703.          float var5 = var1.m00 * var2.m20 + var1.m10 * var2.m21 + var1.m20 * var2.m22 + var1.m30 * var2.m23;
  1704.          float var6 = var1.m00 * var2.m30 + var1.m10 * var2.m31 + var1.m20 * var2.m32 + var1.m30 * var2.m33;
  1705.          float var7 = var1.m01 * var2.m00 + var1.m11 * var2.m01 + var1.m21 * var2.m02 + var1.m31 * var2.m03;
  1706.          float var8 = var1.m01 * var2.m10 + var1.m11 * var2.m11 + var1.m21 * var2.m12 + var1.m31 * var2.m13;
  1707.          float var9 = var1.m01 * var2.m20 + var1.m11 * var2.m21 + var1.m21 * var2.m22 + var1.m31 * var2.m23;
  1708.          float var10 = var1.m01 * var2.m30 + var1.m11 * var2.m31 + var1.m21 * var2.m32 + var1.m31 * var2.m33;
  1709.          float var11 = var1.m02 * var2.m00 + var1.m12 * var2.m01 + var1.m22 * var2.m02 + var1.m32 * var2.m03;
  1710.          float var12 = var1.m02 * var2.m10 + var1.m12 * var2.m11 + var1.m22 * var2.m12 + var1.m32 * var2.m13;
  1711.          float var13 = var1.m02 * var2.m20 + var1.m12 * var2.m21 + var1.m22 * var2.m22 + var1.m32 * var2.m23;
  1712.          float var14 = var1.m02 * var2.m30 + var1.m12 * var2.m31 + var1.m22 * var2.m32 + var1.m32 * var2.m33;
  1713.          float var15 = var1.m03 * var2.m00 + var1.m13 * var2.m01 + var1.m23 * var2.m02 + var1.m33 * var2.m03;
  1714.          float var16 = var1.m03 * var2.m10 + var1.m13 * var2.m11 + var1.m23 * var2.m12 + var1.m33 * var2.m13;
  1715.          float var17 = var1.m03 * var2.m20 + var1.m13 * var2.m21 + var1.m23 * var2.m22 + var1.m33 * var2.m23;
  1716.          float var18 = var1.m03 * var2.m30 + var1.m13 * var2.m31 + var1.m23 * var2.m32 + var1.m33 * var2.m33;
  1717.          this.m00 = var3;
  1718.          this.m01 = var4;
  1719.          this.m02 = var5;
  1720.          this.m03 = var6;
  1721.          this.m10 = var7;
  1722.          this.m11 = var8;
  1723.          this.m12 = var9;
  1724.          this.m13 = var10;
  1725.          this.m20 = var11;
  1726.          this.m21 = var12;
  1727.          this.m22 = var13;
  1728.          this.m23 = var14;
  1729.          this.m30 = var15;
  1730.          this.m31 = var16;
  1731.          this.m32 = var17;
  1732.          this.m33 = var18;
  1733.       }
  1734.  
  1735.    }
  1736.  
  1737.    public final void mulTransposeRight(Matrix4f var1, Matrix4f var2) {
  1738.       if (this != var1 && this != var2) {
  1739.          this.m00 = var1.m00 * var2.m00 + var1.m01 * var2.m01 + var1.m02 * var2.m02 + var1.m03 * var2.m03;
  1740.          this.m01 = var1.m00 * var2.m10 + var1.m01 * var2.m11 + var1.m02 * var2.m12 + var1.m03 * var2.m13;
  1741.          this.m02 = var1.m00 * var2.m20 + var1.m01 * var2.m21 + var1.m02 * var2.m22 + var1.m03 * var2.m23;
  1742.          this.m03 = var1.m00 * var2.m30 + var1.m01 * var2.m31 + var1.m02 * var2.m32 + var1.m03 * var2.m33;
  1743.          this.m10 = var1.m10 * var2.m00 + var1.m11 * var2.m01 + var1.m12 * var2.m02 + var1.m13 * var2.m03;
  1744.          this.m11 = var1.m10 * var2.m10 + var1.m11 * var2.m11 + var1.m12 * var2.m12 + var1.m13 * var2.m13;
  1745.          this.m12 = var1.m10 * var2.m20 + var1.m11 * var2.m21 + var1.m12 * var2.m22 + var1.m13 * var2.m23;
  1746.          this.m13 = var1.m10 * var2.m30 + var1.m11 * var2.m31 + var1.m12 * var2.m32 + var1.m13 * var2.m33;
  1747.          this.m20 = var1.m20 * var2.m00 + var1.m21 * var2.m01 + var1.m22 * var2.m02 + var1.m23 * var2.m03;
  1748.          this.m21 = var1.m20 * var2.m10 + var1.m21 * var2.m11 + var1.m22 * var2.m12 + var1.m23 * var2.m13;
  1749.          this.m22 = var1.m20 * var2.m20 + var1.m21 * var2.m21 + var1.m22 * var2.m22 + var1.m23 * var2.m23;
  1750.          this.m23 = var1.m20 * var2.m30 + var1.m21 * var2.m31 + var1.m22 * var2.m32 + var1.m23 * var2.m33;
  1751.          this.m30 = var1.m30 * var2.m00 + var1.m31 * var2.m01 + var1.m32 * var2.m02 + var1.m33 * var2.m03;
  1752.          this.m31 = var1.m30 * var2.m10 + var1.m31 * var2.m11 + var1.m32 * var2.m12 + var1.m33 * var2.m13;
  1753.          this.m32 = var1.m30 * var2.m20 + var1.m31 * var2.m21 + var1.m32 * var2.m22 + var1.m33 * var2.m23;
  1754.          this.m33 = var1.m30 * var2.m30 + var1.m31 * var2.m31 + var1.m32 * var2.m32 + var1.m33 * var2.m33;
  1755.       } else {
  1756.          float var3 = var1.m00 * var2.m00 + var1.m01 * var2.m01 + var1.m02 * var2.m02 + var1.m03 * var2.m03;
  1757.          float var4 = var1.m00 * var2.m10 + var1.m01 * var2.m11 + var1.m02 * var2.m12 + var1.m03 * var2.m13;
  1758.          float var5 = var1.m00 * var2.m20 + var1.m01 * var2.m21 + var1.m02 * var2.m22 + var1.m03 * var2.m23;
  1759.          float var6 = var1.m00 * var2.m30 + var1.m01 * var2.m31 + var1.m02 * var2.m32 + var1.m03 * var2.m33;
  1760.          float var7 = var1.m10 * var2.m00 + var1.m11 * var2.m01 + var1.m12 * var2.m02 + var1.m13 * var2.m03;
  1761.          float var8 = var1.m10 * var2.m10 + var1.m11 * var2.m11 + var1.m12 * var2.m12 + var1.m13 * var2.m13;
  1762.          float var9 = var1.m10 * var2.m20 + var1.m11 * var2.m21 + var1.m12 * var2.m22 + var1.m13 * var2.m23;
  1763.          float var10 = var1.m10 * var2.m30 + var1.m11 * var2.m31 + var1.m12 * var2.m32 + var1.m13 * var2.m33;
  1764.          float var11 = var1.m20 * var2.m00 + var1.m21 * var2.m01 + var1.m22 * var2.m02 + var1.m23 * var2.m03;
  1765.          float var12 = var1.m20 * var2.m10 + var1.m21 * var2.m11 + var1.m22 * var2.m12 + var1.m23 * var2.m13;
  1766.          float var13 = var1.m20 * var2.m20 + var1.m21 * var2.m21 + var1.m22 * var2.m22 + var1.m23 * var2.m23;
  1767.          float var14 = var1.m20 * var2.m30 + var1.m21 * var2.m31 + var1.m22 * var2.m32 + var1.m23 * var2.m33;
  1768.          float var15 = var1.m30 * var2.m00 + var1.m31 * var2.m01 + var1.m32 * var2.m02 + var1.m33 * var2.m03;
  1769.          float var16 = var1.m30 * var2.m10 + var1.m31 * var2.m11 + var1.m32 * var2.m12 + var1.m33 * var2.m13;
  1770.          float var17 = var1.m30 * var2.m20 + var1.m31 * var2.m21 + var1.m32 * var2.m22 + var1.m33 * var2.m23;
  1771.          float var18 = var1.m30 * var2.m30 + var1.m31 * var2.m31 + var1.m32 * var2.m32 + var1.m33 * var2.m33;
  1772.          this.m00 = var3;
  1773.          this.m01 = var4;
  1774.          this.m02 = var5;
  1775.          this.m03 = var6;
  1776.          this.m10 = var7;
  1777.          this.m11 = var8;
  1778.          this.m12 = var9;
  1779.          this.m13 = var10;
  1780.          this.m20 = var11;
  1781.          this.m21 = var12;
  1782.          this.m22 = var13;
  1783.          this.m23 = var14;
  1784.          this.m30 = var15;
  1785.          this.m31 = var16;
  1786.          this.m32 = var17;
  1787.          this.m33 = var18;
  1788.       }
  1789.  
  1790.    }
  1791.  
  1792.    public final void mulTransposeLeft(Matrix4f var1, Matrix4f var2) {
  1793.       if (this != var1 && this != var2) {
  1794.          this.m00 = var1.m00 * var2.m00 + var1.m10 * var2.m10 + var1.m20 * var2.m20 + var1.m30 * var2.m30;
  1795.          this.m01 = var1.m00 * var2.m01 + var1.m10 * var2.m11 + var1.m20 * var2.m21 + var1.m30 * var2.m31;
  1796.          this.m02 = var1.m00 * var2.m02 + var1.m10 * var2.m12 + var1.m20 * var2.m22 + var1.m30 * var2.m32;
  1797.          this.m03 = var1.m00 * var2.m03 + var1.m10 * var2.m13 + var1.m20 * var2.m23 + var1.m30 * var2.m33;
  1798.          this.m10 = var1.m01 * var2.m00 + var1.m11 * var2.m10 + var1.m21 * var2.m20 + var1.m31 * var2.m30;
  1799.          this.m11 = var1.m01 * var2.m01 + var1.m11 * var2.m11 + var1.m21 * var2.m21 + var1.m31 * var2.m31;
  1800.          this.m12 = var1.m01 * var2.m02 + var1.m11 * var2.m12 + var1.m21 * var2.m22 + var1.m31 * var2.m32;
  1801.          this.m13 = var1.m01 * var2.m03 + var1.m11 * var2.m13 + var1.m21 * var2.m23 + var1.m31 * var2.m33;
  1802.          this.m20 = var1.m02 * var2.m00 + var1.m12 * var2.m10 + var1.m22 * var2.m20 + var1.m32 * var2.m30;
  1803.          this.m21 = var1.m02 * var2.m01 + var1.m12 * var2.m11 + var1.m22 * var2.m21 + var1.m32 * var2.m31;
  1804.          this.m22 = var1.m02 * var2.m02 + var1.m12 * var2.m12 + var1.m22 * var2.m22 + var1.m32 * var2.m32;
  1805.          this.m23 = var1.m02 * var2.m03 + var1.m12 * var2.m13 + var1.m22 * var2.m23 + var1.m32 * var2.m33;
  1806.          this.m30 = var1.m03 * var2.m00 + var1.m13 * var2.m10 + var1.m23 * var2.m20 + var1.m33 * var2.m30;
  1807.          this.m31 = var1.m03 * var2.m01 + var1.m13 * var2.m11 + var1.m23 * var2.m21 + var1.m33 * var2.m31;
  1808.          this.m32 = var1.m03 * var2.m02 + var1.m13 * var2.m12 + var1.m23 * var2.m22 + var1.m33 * var2.m32;
  1809.          this.m33 = var1.m03 * var2.m03 + var1.m13 * var2.m13 + var1.m23 * var2.m23 + var1.m33 * var2.m33;
  1810.       } else {
  1811.          float var3 = var1.m00 * var2.m00 + var1.m10 * var2.m10 + var1.m20 * var2.m20 + var1.m30 * var2.m30;
  1812.          float var4 = var1.m00 * var2.m01 + var1.m10 * var2.m11 + var1.m20 * var2.m21 + var1.m30 * var2.m31;
  1813.          float var5 = var1.m00 * var2.m02 + var1.m10 * var2.m12 + var1.m20 * var2.m22 + var1.m30 * var2.m32;
  1814.          float var6 = var1.m00 * var2.m03 + var1.m10 * var2.m13 + var1.m20 * var2.m23 + var1.m30 * var2.m33;
  1815.          float var7 = var1.m01 * var2.m00 + var1.m11 * var2.m10 + var1.m21 * var2.m20 + var1.m31 * var2.m30;
  1816.          float var8 = var1.m01 * var2.m01 + var1.m11 * var2.m11 + var1.m21 * var2.m21 + var1.m31 * var2.m31;
  1817.          float var9 = var1.m01 * var2.m02 + var1.m11 * var2.m12 + var1.m21 * var2.m22 + var1.m31 * var2.m32;
  1818.          float var10 = var1.m01 * var2.m03 + var1.m11 * var2.m13 + var1.m21 * var2.m23 + var1.m31 * var2.m33;
  1819.          float var11 = var1.m02 * var2.m00 + var1.m12 * var2.m10 + var1.m22 * var2.m20 + var1.m32 * var2.m30;
  1820.          float var12 = var1.m02 * var2.m01 + var1.m12 * var2.m11 + var1.m22 * var2.m21 + var1.m32 * var2.m31;
  1821.          float var13 = var1.m02 * var2.m02 + var1.m12 * var2.m12 + var1.m22 * var2.m22 + var1.m32 * var2.m32;
  1822.          float var14 = var1.m02 * var2.m03 + var1.m12 * var2.m13 + var1.m22 * var2.m23 + var1.m32 * var2.m33;
  1823.          float var15 = var1.m03 * var2.m00 + var1.m13 * var2.m10 + var1.m23 * var2.m20 + var1.m33 * var2.m30;
  1824.          float var16 = var1.m03 * var2.m01 + var1.m13 * var2.m11 + var1.m23 * var2.m21 + var1.m33 * var2.m31;
  1825.          float var17 = var1.m03 * var2.m02 + var1.m13 * var2.m12 + var1.m23 * var2.m22 + var1.m33 * var2.m32;
  1826.          float var18 = var1.m03 * var2.m03 + var1.m13 * var2.m13 + var1.m23 * var2.m23 + var1.m33 * var2.m33;
  1827.          this.m00 = var3;
  1828.          this.m01 = var4;
  1829.          this.m02 = var5;
  1830.          this.m03 = var6;
  1831.          this.m10 = var7;
  1832.          this.m11 = var8;
  1833.          this.m12 = var9;
  1834.          this.m13 = var10;
  1835.          this.m20 = var11;
  1836.          this.m21 = var12;
  1837.          this.m22 = var13;
  1838.          this.m23 = var14;
  1839.          this.m30 = var15;
  1840.          this.m31 = var16;
  1841.          this.m32 = var17;
  1842.          this.m33 = var18;
  1843.       }
  1844.  
  1845.    }
  1846.  
  1847.    public boolean equals(Matrix4f var1) {
  1848.       try {
  1849.          return this.m00 == var1.m00 && this.m01 == var1.m01 && this.m02 == var1.m02 && this.m03 == var1.m03 && this.m10 == var1.m10 && this.m11 == var1.m11 && this.m12 == var1.m12 && this.m13 == var1.m13 && this.m20 == var1.m20 && this.m21 == var1.m21 && this.m22 == var1.m22 && this.m23 == var1.m23 && this.m30 == var1.m30 && this.m31 == var1.m31 && this.m32 == var1.m32 && this.m33 == var1.m33;
  1850.       } catch (NullPointerException var3) {
  1851.          return false;
  1852.       }
  1853.    }
  1854.  
  1855.    public boolean equals(Object var1) {
  1856.       try {
  1857.          Matrix4f var2 = (Matrix4f)var1;
  1858.          return this.m00 == var2.m00 && this.m01 == var2.m01 && this.m02 == var2.m02 && this.m03 == var2.m03 && this.m10 == var2.m10 && this.m11 == var2.m11 && this.m12 == var2.m12 && this.m13 == var2.m13 && this.m20 == var2.m20 && this.m21 == var2.m21 && this.m22 == var2.m22 && this.m23 == var2.m23 && this.m30 == var2.m30 && this.m31 == var2.m31 && this.m32 == var2.m32 && this.m33 == var2.m33;
  1859.       } catch (ClassCastException var4) {
  1860.          return false;
  1861.       } catch (NullPointerException var5) {
  1862.          return false;
  1863.       }
  1864.    }
  1865.  
  1866.    public boolean epsilonEquals(Matrix4f var1, float var2) {
  1867.       boolean var3 = true;
  1868.       if (Math.abs(this.m00 - var1.m00) > var2) {
  1869.          var3 = false;
  1870.       }
  1871.  
  1872.       if (Math.abs(this.m01 - var1.m01) > var2) {
  1873.          var3 = false;
  1874.       }
  1875.  
  1876.       if (Math.abs(this.m02 - var1.m02) > var2) {
  1877.          var3 = false;
  1878.       }
  1879.  
  1880.       if (Math.abs(this.m03 - var1.m03) > var2) {
  1881.          var3 = false;
  1882.       }
  1883.  
  1884.       if (Math.abs(this.m10 - var1.m10) > var2) {
  1885.          var3 = false;
  1886.       }
  1887.  
  1888.       if (Math.abs(this.m11 - var1.m11) > var2) {
  1889.          var3 = false;
  1890.       }
  1891.  
  1892.       if (Math.abs(this.m12 - var1.m12) > var2) {
  1893.          var3 = false;
  1894.       }
  1895.  
  1896.       if (Math.abs(this.m13 - var1.m13) > var2) {
  1897.          var3 = false;
  1898.       }
  1899.  
  1900.       if (Math.abs(this.m20 - var1.m20) > var2) {
  1901.          var3 = false;
  1902.       }
  1903.  
  1904.       if (Math.abs(this.m21 - var1.m21) > var2) {
  1905.          var3 = false;
  1906.       }
  1907.  
  1908.       if (Math.abs(this.m22 - var1.m22) > var2) {
  1909.          var3 = false;
  1910.       }
  1911.  
  1912.       if (Math.abs(this.m23 - var1.m23) > var2) {
  1913.          var3 = false;
  1914.       }
  1915.  
  1916.       if (Math.abs(this.m30 - var1.m30) > var2) {
  1917.          var3 = false;
  1918.       }
  1919.  
  1920.       if (Math.abs(this.m31 - var1.m31) > var2) {
  1921.          var3 = false;
  1922.       }
  1923.  
  1924.       if (Math.abs(this.m32 - var1.m32) > var2) {
  1925.          var3 = false;
  1926.       }
  1927.  
  1928.       if (Math.abs(this.m33 - var1.m33) > var2) {
  1929.          var3 = false;
  1930.       }
  1931.  
  1932.       return var3;
  1933.    }
  1934.  
  1935.    public int hashCode() {
  1936.       long var1 = 1L;
  1937.       var1 = 31L * var1 + (long)Float.floatToIntBits(this.m00);
  1938.       var1 = 31L * var1 + (long)Float.floatToIntBits(this.m01);
  1939.       var1 = 31L * var1 + (long)Float.floatToIntBits(this.m02);
  1940.       var1 = 31L * var1 + (long)Float.floatToIntBits(this.m03);
  1941.       var1 = 31L * var1 + (long)Float.floatToIntBits(this.m10);
  1942.       var1 = 31L * var1 + (long)Float.floatToIntBits(this.m11);
  1943.       var1 = 31L * var1 + (long)Float.floatToIntBits(this.m12);
  1944.       var1 = 31L * var1 + (long)Float.floatToIntBits(this.m13);
  1945.       var1 = 31L * var1 + (long)Float.floatToIntBits(this.m20);
  1946.       var1 = 31L * var1 + (long)Float.floatToIntBits(this.m21);
  1947.       var1 = 31L * var1 + (long)Float.floatToIntBits(this.m22);
  1948.       var1 = 31L * var1 + (long)Float.floatToIntBits(this.m23);
  1949.       var1 = 31L * var1 + (long)Float.floatToIntBits(this.m30);
  1950.       var1 = 31L * var1 + (long)Float.floatToIntBits(this.m31);
  1951.       var1 = 31L * var1 + (long)Float.floatToIntBits(this.m32);
  1952.       var1 = 31L * var1 + (long)Float.floatToIntBits(this.m33);
  1953.       return (int)(var1 ^ var1 >> 32);
  1954.    }
  1955.  
  1956.    public final void transform(Tuple4f var1, Tuple4f var2) {
  1957.       float var3 = this.m00 * var1.x + this.m01 * var1.y + this.m02 * var1.z + this.m03 * var1.w;
  1958.       float var4 = this.m10 * var1.x + this.m11 * var1.y + this.m12 * var1.z + this.m13 * var1.w;
  1959.       float var5 = this.m20 * var1.x + this.m21 * var1.y + this.m22 * var1.z + this.m23 * var1.w;
  1960.       var2.w = this.m30 * var1.x + this.m31 * var1.y + this.m32 * var1.z + this.m33 * var1.w;
  1961.       var2.x = var3;
  1962.       var2.y = var4;
  1963.       var2.z = var5;
  1964.    }
  1965.  
  1966.    public final void transform(Tuple4f var1) {
  1967.       float var2 = this.m00 * var1.x + this.m01 * var1.y + this.m02 * var1.z + this.m03 * var1.w;
  1968.       float var3 = this.m10 * var1.x + this.m11 * var1.y + this.m12 * var1.z + this.m13 * var1.w;
  1969.       float var4 = this.m20 * var1.x + this.m21 * var1.y + this.m22 * var1.z + this.m23 * var1.w;
  1970.       var1.w = this.m30 * var1.x + this.m31 * var1.y + this.m32 * var1.z + this.m33 * var1.w;
  1971.       var1.x = var2;
  1972.       var1.y = var3;
  1973.       var1.z = var4;
  1974.    }
  1975.  
  1976.    public final void transform(Point3f var1, Point3f var2) {
  1977.       float var3 = this.m00 * var1.x + this.m01 * var1.y + this.m02 * var1.z + this.m03;
  1978.       float var4 = this.m10 * var1.x + this.m11 * var1.y + this.m12 * var1.z + this.m13;
  1979.       var2.z = this.m20 * var1.x + this.m21 * var1.y + this.m22 * var1.z + this.m23;
  1980.       var2.x = var3;
  1981.       var2.y = var4;
  1982.    }
  1983.  
  1984.    public final void transform(Point3f var1) {
  1985.       float var2 = this.m00 * var1.x + this.m01 * var1.y + this.m02 * var1.z + this.m03;
  1986.       float var3 = this.m10 * var1.x + this.m11 * var1.y + this.m12 * var1.z + this.m13;
  1987.       var1.z = this.m20 * var1.x + this.m21 * var1.y + this.m22 * var1.z + this.m23;
  1988.       var1.x = var2;
  1989.       var1.y = var3;
  1990.    }
  1991.  
  1992.    public final void transform(Vector3f var1, Vector3f var2) {
  1993.       float var3 = this.m00 * var1.x + this.m01 * var1.y + this.m02 * var1.z;
  1994.       float var4 = this.m10 * var1.x + this.m11 * var1.y + this.m12 * var1.z;
  1995.       var2.z = this.m20 * var1.x + this.m21 * var1.y + this.m22 * var1.z;
  1996.       var2.x = var3;
  1997.       var2.y = var4;
  1998.    }
  1999.  
  2000.    public final void transform(Vector3f var1) {
  2001.       float var2 = this.m00 * var1.x + this.m01 * var1.y + this.m02 * var1.z;
  2002.       float var3 = this.m10 * var1.x + this.m11 * var1.y + this.m12 * var1.z;
  2003.       var1.z = this.m20 * var1.x + this.m21 * var1.y + this.m22 * var1.z;
  2004.       var1.x = var2;
  2005.       var1.y = var3;
  2006.    }
  2007.  
  2008.    public final void setRotation(Matrix3d var1) {
  2009.       double[] var2 = new double[9];
  2010.       double[] var3 = new double[3];
  2011.       this.getScaleRotate(var3, var2);
  2012.       this.m00 = (float)(var1.m00 * var3[0]);
  2013.       this.m01 = (float)(var1.m01 * var3[1]);
  2014.       this.m02 = (float)(var1.m02 * var3[2]);
  2015.       this.m10 = (float)(var1.m10 * var3[0]);
  2016.       this.m11 = (float)(var1.m11 * var3[1]);
  2017.       this.m12 = (float)(var1.m12 * var3[2]);
  2018.       this.m20 = (float)(var1.m20 * var3[0]);
  2019.       this.m21 = (float)(var1.m21 * var3[1]);
  2020.       this.m22 = (float)(var1.m22 * var3[2]);
  2021.    }
  2022.  
  2023.    public final void setRotation(Matrix3f var1) {
  2024.       double[] var2 = new double[9];
  2025.       double[] var3 = new double[3];
  2026.       this.getScaleRotate(var3, var2);
  2027.       this.m00 = (float)((double)var1.m00 * var3[0]);
  2028.       this.m01 = (float)((double)var1.m01 * var3[1]);
  2029.       this.m02 = (float)((double)var1.m02 * var3[2]);
  2030.       this.m10 = (float)((double)var1.m10 * var3[0]);
  2031.       this.m11 = (float)((double)var1.m11 * var3[1]);
  2032.       this.m12 = (float)((double)var1.m12 * var3[2]);
  2033.       this.m20 = (float)((double)var1.m20 * var3[0]);
  2034.       this.m21 = (float)((double)var1.m21 * var3[1]);
  2035.       this.m22 = (float)((double)var1.m22 * var3[2]);
  2036.    }
  2037.  
  2038.    public final void setRotation(Quat4f var1) {
  2039.       double[] var2 = new double[9];
  2040.       double[] var3 = new double[3];
  2041.       this.getScaleRotate(var3, var2);
  2042.       this.m00 = (float)((double)(1.0F - 2.0F * var1.y * var1.y - 2.0F * var1.z * var1.z) * var3[0]);
  2043.       this.m10 = (float)((double)(2.0F * (var1.x * var1.y + var1.w * var1.z)) * var3[0]);
  2044.       this.m20 = (float)((double)(2.0F * (var1.x * var1.z - var1.w * var1.y)) * var3[0]);
  2045.       this.m01 = (float)((double)(2.0F * (var1.x * var1.y - var1.w * var1.z)) * var3[1]);
  2046.       this.m11 = (float)((double)(1.0F - 2.0F * var1.x * var1.x - 2.0F * var1.z * var1.z) * var3[1]);
  2047.       this.m21 = (float)((double)(2.0F * (var1.y * var1.z + var1.w * var1.x)) * var3[1]);
  2048.       this.m02 = (float)((double)(2.0F * (var1.x * var1.z + var1.w * var1.y)) * var3[2]);
  2049.       this.m12 = (float)((double)(2.0F * (var1.y * var1.z - var1.w * var1.x)) * var3[2]);
  2050.       this.m22 = (float)((double)(1.0F - 2.0F * var1.x * var1.x - 2.0F * var1.y * var1.y) * var3[2]);
  2051.    }
  2052.  
  2053.    public final void setRotation(Quat4d var1) {
  2054.       double[] var2 = new double[9];
  2055.       double[] var3 = new double[3];
  2056.       this.getScaleRotate(var3, var2);
  2057.       this.m00 = (float)(((double)1.0F - (double)2.0F * var1.y * var1.y - (double)2.0F * var1.z * var1.z) * var3[0]);
  2058.       this.m10 = (float)((double)2.0F * (var1.x * var1.y + var1.w * var1.z) * var3[0]);
  2059.       this.m20 = (float)((double)2.0F * (var1.x * var1.z - var1.w * var1.y) * var3[0]);
  2060.       this.m01 = (float)((double)2.0F * (var1.x * var1.y - var1.w * var1.z) * var3[1]);
  2061.       this.m11 = (float)(((double)1.0F - (double)2.0F * var1.x * var1.x - (double)2.0F * var1.z * var1.z) * var3[1]);
  2062.       this.m21 = (float)((double)2.0F * (var1.y * var1.z + var1.w * var1.x) * var3[1]);
  2063.       this.m02 = (float)((double)2.0F * (var1.x * var1.z + var1.w * var1.y) * var3[2]);
  2064.       this.m12 = (float)((double)2.0F * (var1.y * var1.z - var1.w * var1.x) * var3[2]);
  2065.       this.m22 = (float)(((double)1.0F - (double)2.0F * var1.x * var1.x - (double)2.0F * var1.y * var1.y) * var3[2]);
  2066.    }
  2067.  
  2068.    public final void setRotation(AxisAngle4f var1) {
  2069.       double[] var2 = new double[9];
  2070.       double[] var3 = new double[3];
  2071.       this.getScaleRotate(var3, var2);
  2072.       double var4 = Math.sqrt((double)(var1.x * var1.x + var1.y * var1.y + var1.z * var1.z));
  2073.       if (var4 < 1.0E-8) {
  2074.          this.m00 = 1.0F;
  2075.          this.m01 = 0.0F;
  2076.          this.m02 = 0.0F;
  2077.          this.m10 = 0.0F;
  2078.          this.m11 = 1.0F;
  2079.          this.m12 = 0.0F;
  2080.          this.m20 = 0.0F;
  2081.          this.m21 = 0.0F;
  2082.          this.m22 = 1.0F;
  2083.       } else {
  2084.          var4 = (double)1.0F / var4;
  2085.          double var6 = (double)var1.x * var4;
  2086.          double var8 = (double)var1.y * var4;
  2087.          double var10 = (double)var1.z * var4;
  2088.          double var12 = Math.sin((double)var1.angle);
  2089.          double var14 = Math.cos((double)var1.angle);
  2090.          double var16 = (double)1.0F - var14;
  2091.          double var18 = (double)(var1.x * var1.z);
  2092.          double var20 = (double)(var1.x * var1.y);
  2093.          double var22 = (double)(var1.y * var1.z);
  2094.          this.m00 = (float)((var16 * var6 * var6 + var14) * var3[0]);
  2095.          this.m01 = (float)((var16 * var20 - var12 * var10) * var3[1]);
  2096.          this.m02 = (float)((var16 * var18 + var12 * var8) * var3[2]);
  2097.          this.m10 = (float)((var16 * var20 + var12 * var10) * var3[0]);
  2098.          this.m11 = (float)((var16 * var8 * var8 + var14) * var3[1]);
  2099.          this.m12 = (float)((var16 * var22 - var12 * var6) * var3[2]);
  2100.          this.m20 = (float)((var16 * var18 - var12 * var8) * var3[0]);
  2101.          this.m21 = (float)((var16 * var22 + var12 * var6) * var3[1]);
  2102.          this.m22 = (float)((var16 * var10 * var10 + var14) * var3[2]);
  2103.       }
  2104.  
  2105.    }
  2106.  
  2107.    public final void setZero() {
  2108.       this.m00 = 0.0F;
  2109.       this.m01 = 0.0F;
  2110.       this.m02 = 0.0F;
  2111.       this.m03 = 0.0F;
  2112.       this.m10 = 0.0F;
  2113.       this.m11 = 0.0F;
  2114.       this.m12 = 0.0F;
  2115.       this.m13 = 0.0F;
  2116.       this.m20 = 0.0F;
  2117.       this.m21 = 0.0F;
  2118.       this.m22 = 0.0F;
  2119.       this.m23 = 0.0F;
  2120.       this.m30 = 0.0F;
  2121.       this.m31 = 0.0F;
  2122.       this.m32 = 0.0F;
  2123.       this.m33 = 0.0F;
  2124.    }
  2125.  
  2126.    public final void negate() {
  2127.       this.m00 = -this.m00;
  2128.       this.m01 = -this.m01;
  2129.       this.m02 = -this.m02;
  2130.       this.m03 = -this.m03;
  2131.       this.m10 = -this.m10;
  2132.       this.m11 = -this.m11;
  2133.       this.m12 = -this.m12;
  2134.       this.m13 = -this.m13;
  2135.       this.m20 = -this.m20;
  2136.       this.m21 = -this.m21;
  2137.       this.m22 = -this.m22;
  2138.       this.m23 = -this.m23;
  2139.       this.m30 = -this.m30;
  2140.       this.m31 = -this.m31;
  2141.       this.m32 = -this.m32;
  2142.       this.m33 = -this.m33;
  2143.    }
  2144.  
  2145.    public final void negate(Matrix4f var1) {
  2146.       this.m00 = -var1.m00;
  2147.       this.m01 = -var1.m01;
  2148.       this.m02 = -var1.m02;
  2149.       this.m03 = -var1.m03;
  2150.       this.m10 = -var1.m10;
  2151.       this.m11 = -var1.m11;
  2152.       this.m12 = -var1.m12;
  2153.       this.m13 = -var1.m13;
  2154.       this.m20 = -var1.m20;
  2155.       this.m21 = -var1.m21;
  2156.       this.m22 = -var1.m22;
  2157.       this.m23 = -var1.m23;
  2158.       this.m30 = -var1.m30;
  2159.       this.m31 = -var1.m31;
  2160.       this.m32 = -var1.m32;
  2161.       this.m33 = -var1.m33;
  2162.    }
  2163.  
  2164.    private final void getScaleRotate(double[] var1, double[] var2) {
  2165.       double[] var3 = new double[]{(double)this.m00, (double)this.m01, (double)this.m02, (double)this.m10, (double)this.m11, (double)this.m12, (double)this.m20, (double)this.m21, (double)this.m22};
  2166.       Matrix3d.compute_svd(var3, var1, var2);
  2167.    }
  2168.  
  2169.    public Object clone() {
  2170.       Object var1 = null;
  2171.  
  2172.       try {
  2173.          Matrix4f var4 = (Matrix4f)super.clone();
  2174.          return var4;
  2175.       } catch (CloneNotSupportedException var3) {
  2176.          throw new InternalError();
  2177.       }
  2178.    }
  2179. }
  2180.