// 
// Decompiled by Procyon v0.6.0
// 

package org.bouncycastle.math.ec.rfc8032;

import org.bouncycastle.util.Integers;

abstract class ScalarUtil
{
    private static final long M = 4294967295L;
    
    static void addShifted_NP(final int n, final int n2, final int[] array, final int[] array2, final int[] array3, final int[] array4) {
        long n3 = 0L;
        long n4 = 0L;
        if (n2 == 0) {
            for (int i = 0; i <= n; ++i) {
                final int n5 = array3[i];
                final long n6 = n4 + ((long)array[i] & 0xFFFFFFFFL) + ((long)n5 & 0xFFFFFFFFL);
                final long n7 = n3 + ((long)n5 & 0xFFFFFFFFL) + ((long)array2[i] & 0xFFFFFFFFL);
                final int n8 = (int)n7;
                n3 = n7 >>> 32;
                array3[i] = n8;
                final long n9 = n6 + ((long)n8 & 0xFFFFFFFFL);
                array[i] = (int)n9;
                n4 = n9 >>> 32;
            }
        }
        else if (n2 < 32) {
            int n10 = 0;
            int n11 = 0;
            int n12 = 0;
            for (int j = 0; j <= n; ++j) {
                final int n13 = array3[j];
                final int n14 = n13 << n2 | n10 >>> -n2;
                n10 = n13;
                final long n15 = n4 + ((long)array[j] & 0xFFFFFFFFL) + ((long)n14 & 0xFFFFFFFFL);
                final int n16 = array2[j];
                final int n17 = n16 << n2 | n12 >>> -n2;
                n12 = n16;
                final long n18 = n3 + ((long)n13 & 0xFFFFFFFFL) + ((long)n17 & 0xFFFFFFFFL);
                final int n19 = (int)n18;
                n3 = n18 >>> 32;
                array3[j] = n19;
                final int n20 = n19 << n2 | n11 >>> -n2;
                n11 = n19;
                final long n21 = n15 + ((long)n20 & 0xFFFFFFFFL);
                array[j] = (int)n21;
                n4 = n21 >>> 32;
            }
        }
        else {
            System.arraycopy(array3, 0, array4, 0, n);
            final int n22 = n2 >>> 5;
            final int n23 = n2 & 0x1F;
            if (n23 == 0) {
                for (int k = n22; k <= n; ++k) {
                    final long n24 = n4 + ((long)array[k] & 0xFFFFFFFFL) + ((long)array4[k - n22] & 0xFFFFFFFFL);
                    final long n25 = n3 + ((long)array3[k] & 0xFFFFFFFFL) + ((long)array2[k - n22] & 0xFFFFFFFFL);
                    array3[k] = (int)n25;
                    n3 = n25 >>> 32;
                    final long n26 = n24 + ((long)array3[k - n22] & 0xFFFFFFFFL);
                    array[k] = (int)n26;
                    n4 = n26 >>> 32;
                }
            }
            else {
                int n27 = 0;
                int n28 = 0;
                int n29 = 0;
                for (int l = n22; l <= n; ++l) {
                    final int n30 = array4[l - n22];
                    final int n31 = n30 << n23 | n27 >>> -n23;
                    n27 = n30;
                    final long n32 = n4 + ((long)array[l] & 0xFFFFFFFFL) + ((long)n31 & 0xFFFFFFFFL);
                    final int n33 = array2[l - n22];
                    final int n34 = n33 << n23 | n29 >>> -n23;
                    n29 = n33;
                    final long n35 = n3 + ((long)array3[l] & 0xFFFFFFFFL) + ((long)n34 & 0xFFFFFFFFL);
                    array3[l] = (int)n35;
                    n3 = n35 >>> 32;
                    final int n36 = array3[l - n22];
                    final int n37 = n36 << n23 | n28 >>> -n23;
                    n28 = n36;
                    final long n38 = n32 + ((long)n37 & 0xFFFFFFFFL);
                    array[l] = (int)n38;
                    n4 = n38 >>> 32;
                }
            }
        }
    }
    
    static void addShifted_UV(final int n, final int n2, final int[] array, final int[] array2, final int[] array3, final int[] array4) {
        final int n3 = n2 >>> 5;
        final int n4 = n2 & 0x1F;
        long n5 = 0L;
        long n6 = 0L;
        if (n4 == 0) {
            for (int i = n3; i <= n; ++i) {
                final long n7 = n5 + ((long)array[i] & 0xFFFFFFFFL);
                final long n8 = n6 + ((long)array2[i] & 0xFFFFFFFFL);
                final long n9 = n7 + ((long)array3[i - n3] & 0xFFFFFFFFL);
                final long n10 = n8 + ((long)array4[i - n3] & 0xFFFFFFFFL);
                array[i] = (int)n9;
                n5 = n9 >>> 32;
                array2[i] = (int)n10;
                n6 = n10 >>> 32;
            }
        }
        else {
            int n11 = 0;
            int n12 = 0;
            for (int j = n3; j <= n; ++j) {
                final int n13 = array3[j - n3];
                final int n14 = array4[j - n3];
                final int n15 = n13 << n4 | n11 >>> -n4;
                final int n16 = n14 << n4 | n12 >>> -n4;
                n11 = n13;
                n12 = n14;
                final long n17 = n5 + ((long)array[j] & 0xFFFFFFFFL);
                final long n18 = n6 + ((long)array2[j] & 0xFFFFFFFFL);
                final long n19 = n17 + ((long)n15 & 0xFFFFFFFFL);
                final long n20 = n18 + ((long)n16 & 0xFFFFFFFFL);
                array[j] = (int)n19;
                n5 = n19 >>> 32;
                array2[j] = (int)n20;
                n6 = n20 >>> 32;
            }
        }
    }
    
    static int getBitLength(final int n, final int[] array) {
        int n2;
        int n3;
        for (n2 = n, n3 = array[n2] >> 31; n2 > 0 && array[n2] == n3; --n2) {}
        return n2 * 32 + 32 - Integers.numberOfLeadingZeros(array[n2] ^ n3);
    }
    
    static int getBitLengthPositive(final int n, final int[] array) {
        int n2;
        for (n2 = n; n2 > 0 && array[n2] == 0; --n2) {}
        return n2 * 32 + 32 - Integers.numberOfLeadingZeros(array[n2]);
    }
    
    static boolean lessThan(final int n, final int[] array, final int[] array2) {
        int n2 = n;
        do {
            final int n3 = array[n2] + Integer.MIN_VALUE;
            final int n4 = array2[n2] + Integer.MIN_VALUE;
            if (n3 < n4) {
                return true;
            }
            if (n3 > n4) {
                return false;
            }
        } while (--n2 >= 0);
        return false;
    }
    
    static void subShifted_NP(final int n, final int n2, final int[] array, final int[] array2, final int[] array3, final int[] array4) {
        long n3 = 0L;
        long n4 = 0L;
        if (n2 == 0) {
            for (int i = 0; i <= n; ++i) {
                final int n5 = array3[i];
                final long n6 = n4 + ((long)array[i] & 0xFFFFFFFFL) - ((long)n5 & 0xFFFFFFFFL);
                final long n7 = n3 + ((long)n5 & 0xFFFFFFFFL) - ((long)array2[i] & 0xFFFFFFFFL);
                final int n8 = (int)n7;
                n3 = n7 >> 32;
                array3[i] = n8;
                final long n9 = n6 - ((long)n8 & 0xFFFFFFFFL);
                array[i] = (int)n9;
                n4 = n9 >> 32;
            }
        }
        else if (n2 < 32) {
            int n10 = 0;
            int n11 = 0;
            int n12 = 0;
            for (int j = 0; j <= n; ++j) {
                final int n13 = array3[j];
                final int n14 = n13 << n2 | n10 >>> -n2;
                n10 = n13;
                final long n15 = n4 + ((long)array[j] & 0xFFFFFFFFL) - ((long)n14 & 0xFFFFFFFFL);
                final int n16 = array2[j];
                final int n17 = n16 << n2 | n12 >>> -n2;
                n12 = n16;
                final long n18 = n3 + ((long)n13 & 0xFFFFFFFFL) - ((long)n17 & 0xFFFFFFFFL);
                final int n19 = (int)n18;
                n3 = n18 >> 32;
                array3[j] = n19;
                final int n20 = n19 << n2 | n11 >>> -n2;
                n11 = n19;
                final long n21 = n15 - ((long)n20 & 0xFFFFFFFFL);
                array[j] = (int)n21;
                n4 = n21 >> 32;
            }
        }
        else {
            System.arraycopy(array3, 0, array4, 0, n);
            final int n22 = n2 >>> 5;
            final int n23 = n2 & 0x1F;
            if (n23 == 0) {
                for (int k = n22; k <= n; ++k) {
                    final long n24 = n4 + ((long)array[k] & 0xFFFFFFFFL) - ((long)array4[k - n22] & 0xFFFFFFFFL);
                    final long n25 = n3 + ((long)array3[k] & 0xFFFFFFFFL) - ((long)array2[k - n22] & 0xFFFFFFFFL);
                    array3[k] = (int)n25;
                    n3 = n25 >> 32;
                    final long n26 = n24 - ((long)array3[k - n22] & 0xFFFFFFFFL);
                    array[k] = (int)n26;
                    n4 = n26 >> 32;
                }
            }
            else {
                int n27 = 0;
                int n28 = 0;
                int n29 = 0;
                for (int l = n22; l <= n; ++l) {
                    final int n30 = array4[l - n22];
                    final int n31 = n30 << n23 | n27 >>> -n23;
                    n27 = n30;
                    final long n32 = n4 + ((long)array[l] & 0xFFFFFFFFL) - ((long)n31 & 0xFFFFFFFFL);
                    final int n33 = array2[l - n22];
                    final int n34 = n33 << n23 | n29 >>> -n23;
                    n29 = n33;
                    final long n35 = n3 + ((long)array3[l] & 0xFFFFFFFFL) - ((long)n34 & 0xFFFFFFFFL);
                    array3[l] = (int)n35;
                    n3 = n35 >> 32;
                    final int n36 = array3[l - n22];
                    final int n37 = n36 << n23 | n28 >>> -n23;
                    n28 = n36;
                    final long n38 = n32 - ((long)n37 & 0xFFFFFFFFL);
                    array[l] = (int)n38;
                    n4 = n38 >> 32;
                }
            }
        }
    }
    
    static void subShifted_UV(final int n, final int n2, final int[] array, final int[] array2, final int[] array3, final int[] array4) {
        final int n3 = n2 >>> 5;
        final int n4 = n2 & 0x1F;
        long n5 = 0L;
        long n6 = 0L;
        if (n4 == 0) {
            for (int i = n3; i <= n; ++i) {
                final long n7 = n5 + ((long)array[i] & 0xFFFFFFFFL);
                final long n8 = n6 + ((long)array2[i] & 0xFFFFFFFFL);
                final long n9 = n7 - ((long)array3[i - n3] & 0xFFFFFFFFL);
                final long n10 = n8 - ((long)array4[i - n3] & 0xFFFFFFFFL);
                array[i] = (int)n9;
                n5 = n9 >> 32;
                array2[i] = (int)n10;
                n6 = n10 >> 32;
            }
        }
        else {
            int n11 = 0;
            int n12 = 0;
            for (int j = n3; j <= n; ++j) {
                final int n13 = array3[j - n3];
                final int n14 = array4[j - n3];
                final int n15 = n13 << n4 | n11 >>> -n4;
                final int n16 = n14 << n4 | n12 >>> -n4;
                n11 = n13;
                n12 = n14;
                final long n17 = n5 + ((long)array[j] & 0xFFFFFFFFL);
                final long n18 = n6 + ((long)array2[j] & 0xFFFFFFFFL);
                final long n19 = n17 - ((long)n15 & 0xFFFFFFFFL);
                final long n20 = n18 - ((long)n16 & 0xFFFFFFFFL);
                array[j] = (int)n19;
                n5 = n19 >> 32;
                array2[j] = (int)n20;
                n6 = n20 >> 32;
            }
        }
    }
}
