Base64.smali

.class public abstract Lcom/cmcm/support/base/Base64;
.super Ljava/lang/Object;
.source "Base64.java"


# static fields
.field public static final BASE64CODE:Ljava/lang/String; = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/"

.field private static final DECODING_TABLE:[B

.field private static final ENCODING_TABLE:[B

.field public static final SPLIT_LINES_AT:I = 0x4c


# direct methods
.method static constructor <clinit>()V
    .registers 4

    .prologue
    const/16 v3, 0x80

    .line 55
    const/16 v0, 0x40

    new-array v0, v0, [B

    fill-array-data v0, :array_60

    sput-object v0, Lcom/cmcm/support/base/Base64;->ENCODING_TABLE:[B

    .line 181
    new-array v0, v3, [B

    sput-object v0, Lcom/cmcm/support/base/Base64;->DECODING_TABLE:[B

    .line 183
    const/4 v0, 0x0

    :goto_10
    if-ge v0, v3, :cond_1a

    .line 184
    sget-object v1, Lcom/cmcm/support/base/Base64;->DECODING_TABLE:[B

    const/4 v2, -0x1

    aput-byte v2, v1, v0

    .line 183
    add-int/lit8 v0, v0, 0x1

    goto :goto_10

    .line 187
    :cond_1a
    const/16 v0, 0x41

    :goto_1c
    const/16 v1, 0x5a

    if-gt v0, v1, :cond_2a

    .line 188
    sget-object v1, Lcom/cmcm/support/base/Base64;->DECODING_TABLE:[B

    add-int/lit8 v2, v0, -0x41

    int-to-byte v2, v2

    aput-byte v2, v1, v0

    .line 187
    add-int/lit8 v0, v0, 0x1

    goto :goto_1c

    .line 191
    :cond_2a
    const/16 v0, 0x61

    :goto_2c
    const/16 v1, 0x7a

    if-gt v0, v1, :cond_3c

    .line 192
    sget-object v1, Lcom/cmcm/support/base/Base64;->DECODING_TABLE:[B

    add-int/lit8 v2, v0, -0x61

    add-int/lit8 v2, v2, 0x1a

    int-to-byte v2, v2

    aput-byte v2, v1, v0

    .line 191
    add-int/lit8 v0, v0, 0x1

    goto :goto_2c

    .line 195
    :cond_3c
    const/16 v0, 0x30

    :goto_3e
    const/16 v1, 0x39

    if-gt v0, v1, :cond_4e

    .line 196
    sget-object v1, Lcom/cmcm/support/base/Base64;->DECODING_TABLE:[B

    add-int/lit8 v2, v0, -0x30

    add-int/lit8 v2, v2, 0x34

    int-to-byte v2, v2

    aput-byte v2, v1, v0

    .line 195
    add-int/lit8 v0, v0, 0x1

    goto :goto_3e

    .line 199
    :cond_4e
    sget-object v0, Lcom/cmcm/support/base/Base64;->DECODING_TABLE:[B

    const/16 v1, 0x2b

    const/16 v2, 0x3e

    aput-byte v2, v0, v1

    .line 200
    sget-object v0, Lcom/cmcm/support/base/Base64;->DECODING_TABLE:[B

    const/16 v1, 0x2f

    const/16 v2, 0x3f

    aput-byte v2, v0, v1

    .line 201
    return-void

    .line 55
    nop

    :array_60
    .array-data 1
        0x41t
        0x42t
        0x43t
        0x44t
        0x45t
        0x46t
        0x47t
        0x48t
        0x49t
        0x4at
        0x4bt
        0x4ct
        0x4dt
        0x4et
        0x4ft
        0x50t
        0x51t
        0x52t
        0x53t
        0x54t
        0x55t
        0x56t
        0x57t
        0x58t
        0x59t
        0x5at
        0x61t
        0x62t
        0x63t
        0x64t
        0x65t
        0x66t
        0x67t
        0x68t
        0x69t
        0x6at
        0x6bt
        0x6ct
        0x6dt
        0x6et
        0x6ft
        0x70t
        0x71t
        0x72t
        0x73t
        0x74t
        0x75t
        0x76t
        0x77t
        0x78t
        0x79t
        0x7at
        0x30t
        0x31t
        0x32t
        0x33t
        0x34t
        0x35t
        0x36t
        0x37t
        0x38t
        0x39t
        0x2bt
        0x2ft
    .end array-data
.end method

.method public constructor <init>()V
    .registers 1

    .prologue
    .line 44
    invoke-direct {p0}, Ljava/lang/Object;-><init>()V

    return-void
.end method

.method public static decode(Ljava/lang/String;)[B
    .registers 11

    .prologue
    const/4 v1, 0x0

    const/16 v9, 0x3d

    .line 286
    if-nez p0, :cond_d

    .line 287
    new-instance v0, Ljava/lang/IllegalArgumentException;

    const-string v1, "Data must be not null"

    invoke-direct {v0, v1}, Ljava/lang/IllegalArgumentException;-><init>(Ljava/lang/String;)V

    throw v0

    .line 296
    :cond_d
    invoke-static {p0}, Lcom/cmcm/support/base/Base64;->discardNonBase64Chars(Ljava/lang/String;)Ljava/lang/String;

    move-result-object v3

    .line 298
    invoke-virtual {v3}, Ljava/lang/String;->length()I

    move-result v0

    const/4 v2, 0x4

    if-ge v0, v2, :cond_3b

    .line 299
    new-instance v0, Ljava/lang/IllegalArgumentException;

    new-instance v1, Ljava/lang/StringBuilder;

    invoke-direct {v1}, Ljava/lang/StringBuilder;-><init>()V

    const-string v2, "Wrong base64 (length: "

    invoke-virtual {v1, v2}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;

    move-result-object v1

    invoke-virtual {v3}, Ljava/lang/String;->length()I

    move-result v2

    invoke-virtual {v1, v2}, Ljava/lang/StringBuilder;->append(I)Ljava/lang/StringBuilder;

    move-result-object v1

    const-string v2, ")"

    invoke-virtual {v1, v2}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;

    move-result-object v1

    invoke-virtual {v1}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String;

    move-result-object v1

    invoke-direct {v0, v1}, Ljava/lang/IllegalArgumentException;-><init>(Ljava/lang/String;)V

    throw v0

    .line 302
    :cond_3b
    invoke-virtual {v3}, Ljava/lang/String;->length()I

    move-result v0

    add-int/lit8 v0, v0, -0x2

    invoke-virtual {v3, v0}, Ljava/lang/String;->charAt(I)C

    move-result v0

    if-ne v0, v9, :cond_a3

    .line 303
    invoke-virtual {v3}, Ljava/lang/String;->length()I

    move-result v0

    div-int/lit8 v0, v0, 0x4

    add-int/lit8 v0, v0, -0x1

    mul-int/lit8 v0, v0, 0x3

    add-int/lit8 v0, v0, 0x1

    new-array v0, v0, [B

    :goto_55
    move v2, v1

    .line 312
    :goto_56
    invoke-virtual {v3}, Ljava/lang/String;->length()I

    move-result v4

    add-int/lit8 v4, v4, -0x4

    if-ge v2, v4, :cond_c9

    .line 313
    sget-object v4, Lcom/cmcm/support/base/Base64;->DECODING_TABLE:[B

    invoke-virtual {v3, v2}, Ljava/lang/String;->charAt(I)C

    move-result v5

    aget-byte v4, v4, v5

    .line 314
    sget-object v5, Lcom/cmcm/support/base/Base64;->DECODING_TABLE:[B

    add-int/lit8 v6, v2, 0x1

    invoke-virtual {v3, v6}, Ljava/lang/String;->charAt(I)C

    move-result v6

    aget-byte v5, v5, v6

    .line 315
    sget-object v6, Lcom/cmcm/support/base/Base64;->DECODING_TABLE:[B

    add-int/lit8 v7, v2, 0x2

    invoke-virtual {v3, v7}, Ljava/lang/String;->charAt(I)C

    move-result v7

    aget-byte v6, v6, v7

    .line 316
    sget-object v7, Lcom/cmcm/support/base/Base64;->DECODING_TABLE:[B

    add-int/lit8 v8, v2, 0x3

    invoke-virtual {v3, v8}, Ljava/lang/String;->charAt(I)C

    move-result v8

    aget-byte v7, v7, v8

    .line 318
    shl-int/lit8 v4, v4, 0x2

    shr-int/lit8 v8, v5, 0x4

    or-int/2addr v4, v8

    int-to-byte v4, v4

    aput-byte v4, v0, v1

    .line 319
    add-int/lit8 v4, v1, 0x1

    shl-int/lit8 v5, v5, 0x4

    shr-int/lit8 v8, v6, 0x2

    or-int/2addr v5, v8

    int-to-byte v5, v5

    aput-byte v5, v0, v4

    .line 320
    add-int/lit8 v4, v1, 0x2

    shl-int/lit8 v5, v6, 0x6

    or-int/2addr v5, v7

    int-to-byte v5, v5

    aput-byte v5, v0, v4

    .line 321
    add-int/lit8 v1, v1, 0x3

    .line 312
    add-int/lit8 v2, v2, 0x4

    goto :goto_56

    .line 304
    :cond_a3
    invoke-virtual {v3}, Ljava/lang/String;->length()I

    move-result v0

    add-int/lit8 v0, v0, -0x1

    invoke-virtual {v3, v0}, Ljava/lang/String;->charAt(I)C

    move-result v0

    if-ne v0, v9, :cond_be

    .line 305
    invoke-virtual {v3}, Ljava/lang/String;->length()I

    move-result v0

    div-int/lit8 v0, v0, 0x4

    add-int/lit8 v0, v0, -0x1

    mul-int/lit8 v0, v0, 0x3

    add-int/lit8 v0, v0, 0x2

    new-array v0, v0, [B

    goto :goto_55

    .line 307
    :cond_be
    invoke-virtual {v3}, Ljava/lang/String;->length()I

    move-result v0

    div-int/lit8 v0, v0, 0x4

    mul-int/lit8 v0, v0, 0x3

    new-array v0, v0, [B

    goto :goto_55

    .line 324
    :cond_c9
    invoke-virtual {v3}, Ljava/lang/String;->length()I

    move-result v1

    add-int/lit8 v1, v1, -0x2

    invoke-virtual {v3, v1}, Ljava/lang/String;->charAt(I)C

    move-result v1

    if-ne v1, v9, :cond_fd

    .line 325
    sget-object v1, Lcom/cmcm/support/base/Base64;->DECODING_TABLE:[B

    invoke-virtual {v3}, Ljava/lang/String;->length()I

    move-result v2

    add-int/lit8 v2, v2, -0x4

    invoke-virtual {v3, v2}, Ljava/lang/String;->charAt(I)C

    move-result v2

    aget-byte v1, v1, v2

    .line 326
    sget-object v2, Lcom/cmcm/support/base/Base64;->DECODING_TABLE:[B

    invoke-virtual {v3}, Ljava/lang/String;->length()I

    move-result v4

    add-int/lit8 v4, v4, -0x3

    invoke-virtual {v3, v4}, Ljava/lang/String;->charAt(I)C

    move-result v3

    aget-byte v2, v2, v3

    .line 328
    array-length v3, v0

    add-int/lit8 v3, v3, -0x1

    shl-int/lit8 v1, v1, 0x2

    shr-int/lit8 v2, v2, 0x4

    or-int/2addr v1, v2

    int-to-byte v1, v1

    aput-byte v1, v0, v3

    .line 347
    :goto_fc
    return-object v0

    .line 329
    :cond_fd
    invoke-virtual {v3}, Ljava/lang/String;->length()I

    move-result v1

    add-int/lit8 v1, v1, -0x1

    invoke-virtual {v3, v1}, Ljava/lang/String;->charAt(I)C

    move-result v1

    if-ne v1, v9, :cond_14a

    .line 330
    sget-object v1, Lcom/cmcm/support/base/Base64;->DECODING_TABLE:[B

    invoke-virtual {v3}, Ljava/lang/String;->length()I

    move-result v2

    add-int/lit8 v2, v2, -0x4

    invoke-virtual {v3, v2}, Ljava/lang/String;->charAt(I)C

    move-result v2

    aget-byte v1, v1, v2

    .line 331
    sget-object v2, Lcom/cmcm/support/base/Base64;->DECODING_TABLE:[B

    invoke-virtual {v3}, Ljava/lang/String;->length()I

    move-result v4

    add-int/lit8 v4, v4, -0x3

    invoke-virtual {v3, v4}, Ljava/lang/String;->charAt(I)C

    move-result v4

    aget-byte v2, v2, v4

    .line 332
    sget-object v4, Lcom/cmcm/support/base/Base64;->DECODING_TABLE:[B

    invoke-virtual {v3}, Ljava/lang/String;->length()I

    move-result v5

    add-int/lit8 v5, v5, -0x2

    invoke-virtual {v3, v5}, Ljava/lang/String;->charAt(I)C

    move-result v3

    aget-byte v3, v4, v3

    .line 334
    array-length v4, v0

    add-int/lit8 v4, v4, -0x2

    shl-int/lit8 v1, v1, 0x2

    shr-int/lit8 v5, v2, 0x4

    or-int/2addr v1, v5

    int-to-byte v1, v1

    aput-byte v1, v0, v4

    .line 335
    array-length v1, v0

    add-int/lit8 v1, v1, -0x1

    shl-int/lit8 v2, v2, 0x4

    shr-int/lit8 v3, v3, 0x2

    or-int/2addr v2, v3

    int-to-byte v2, v2

    aput-byte v2, v0, v1

    goto :goto_fc

    .line 337
    :cond_14a
    sget-object v1, Lcom/cmcm/support/base/Base64;->DECODING_TABLE:[B

    invoke-virtual {v3}, Ljava/lang/String;->length()I

    move-result v2

    add-int/lit8 v2, v2, -0x4

    invoke-virtual {v3, v2}, Ljava/lang/String;->charAt(I)C

    move-result v2

    aget-byte v1, v1, v2

    .line 338
    sget-object v2, Lcom/cmcm/support/base/Base64;->DECODING_TABLE:[B

    invoke-virtual {v3}, Ljava/lang/String;->length()I

    move-result v4

    add-int/lit8 v4, v4, -0x3

    invoke-virtual {v3, v4}, Ljava/lang/String;->charAt(I)C

    move-result v4

    aget-byte v2, v2, v4

    .line 339
    sget-object v4, Lcom/cmcm/support/base/Base64;->DECODING_TABLE:[B

    invoke-virtual {v3}, Ljava/lang/String;->length()I

    move-result v5

    add-int/lit8 v5, v5, -0x2

    invoke-virtual {v3, v5}, Ljava/lang/String;->charAt(I)C

    move-result v5

    aget-byte v4, v4, v5

    .line 340
    sget-object v5, Lcom/cmcm/support/base/Base64;->DECODING_TABLE:[B

    invoke-virtual {v3}, Ljava/lang/String;->length()I

    move-result v6

    add-int/lit8 v6, v6, -0x1

    invoke-virtual {v3, v6}, Ljava/lang/String;->charAt(I)C

    move-result v3

    aget-byte v3, v5, v3

    .line 342
    array-length v5, v0

    add-int/lit8 v5, v5, -0x3

    shl-int/lit8 v1, v1, 0x2

    shr-int/lit8 v6, v2, 0x4

    or-int/2addr v1, v6

    int-to-byte v1, v1

    aput-byte v1, v0, v5

    .line 343
    array-length v1, v0

    add-int/lit8 v1, v1, -0x2

    shl-int/lit8 v2, v2, 0x4

    shr-int/lit8 v5, v4, 0x2

    or-int/2addr v2, v5

    int-to-byte v2, v2

    aput-byte v2, v0, v1

    .line 344
    array-length v1, v0

    add-int/lit8 v1, v1, -0x1

    shl-int/lit8 v2, v4, 0x6

    or-int/2addr v2, v3

    int-to-byte v2, v2

    aput-byte v2, v0, v1

    goto/16 :goto_fc
.end method

.method public static decode([B)[B
    .registers 11

    .prologue
    const/4 v1, 0x0

    const/16 v9, 0x3d

    .line 211
    if-nez p0, :cond_13

    .line 212
    :try_start_5
    new-instance v0, Ljava/lang/IllegalArgumentException;

    const-string v1, "Data must be not null"

    invoke-direct {v0, v1}, Ljava/lang/IllegalArgumentException;-><init>(Ljava/lang/String;)V

    throw v0
    :try_end_d
    .catch Ljava/lang/Exception; {:try_start_5 .. :try_end_d} :catch_d

    .line 271
    :catch_d
    move-exception v0

    .line 272
    invoke-virtual {v0}, Ljava/lang/Exception;->printStackTrace()V

    .line 273
    const/4 v0, 0x0

    :goto_12
    return-object v0

    .line 220
    :cond_13
    :try_start_13
    invoke-static {p0}, Lcom/cmcm/support/base/Base64;->discardNonBase64Bytes([B)[B

    move-result-object v3

    .line 222
    array-length v0, v3

    const/4 v2, 0x4

    if-ge v0, v2, :cond_3b

    .line 223
    new-instance v0, Ljava/lang/IllegalArgumentException;

    new-instance v1, Ljava/lang/StringBuilder;

    invoke-direct {v1}, Ljava/lang/StringBuilder;-><init>()V

    const-string v2, "Wrong base64 (length: "

    invoke-virtual {v1, v2}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;

    move-result-object v1

    array-length v2, v3

    invoke-virtual {v1, v2}, Ljava/lang/StringBuilder;->append(I)Ljava/lang/StringBuilder;

    move-result-object v1

    const-string v2, ")"

    invoke-virtual {v1, v2}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;

    move-result-object v1

    invoke-virtual {v1}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String;

    move-result-object v1

    invoke-direct {v0, v1}, Ljava/lang/IllegalArgumentException;-><init>(Ljava/lang/String;)V

    throw v0

    .line 226
    :cond_3b
    array-length v0, v3

    add-int/lit8 v0, v0, -0x2

    aget-byte v0, v3, v0

    if-ne v0, v9, :cond_90

    .line 227
    array-length v0, v3

    div-int/lit8 v0, v0, 0x4

    add-int/lit8 v0, v0, -0x1

    mul-int/lit8 v0, v0, 0x3

    add-int/lit8 v0, v0, 0x1

    new-array v0, v0, [B

    :goto_4d
    move v2, v1

    .line 236
    :goto_4e
    array-length v4, v3

    add-int/lit8 v4, v4, -0x4

    if-ge v2, v4, :cond_ab

    .line 237
    sget-object v4, Lcom/cmcm/support/base/Base64;->DECODING_TABLE:[B

    aget-byte v5, v3, v2

    aget-byte v4, v4, v5

    .line 238
    sget-object v5, Lcom/cmcm/support/base/Base64;->DECODING_TABLE:[B

    add-int/lit8 v6, v2, 0x1

    aget-byte v6, v3, v6

    aget-byte v5, v5, v6

    .line 239
    sget-object v6, Lcom/cmcm/support/base/Base64;->DECODING_TABLE:[B

    add-int/lit8 v7, v2, 0x2

    aget-byte v7, v3, v7

    aget-byte v6, v6, v7

    .line 240
    sget-object v7, Lcom/cmcm/support/base/Base64;->DECODING_TABLE:[B

    add-int/lit8 v8, v2, 0x3

    aget-byte v8, v3, v8

    aget-byte v7, v7, v8

    .line 242
    shl-int/lit8 v4, v4, 0x2

    shr-int/lit8 v8, v5, 0x4

    or-int/2addr v4, v8

    int-to-byte v4, v4

    aput-byte v4, v0, v1

    .line 243
    add-int/lit8 v4, v1, 0x1

    shl-int/lit8 v5, v5, 0x4

    shr-int/lit8 v8, v6, 0x2

    or-int/2addr v5, v8

    int-to-byte v5, v5

    aput-byte v5, v0, v4

    .line 244
    add-int/lit8 v4, v1, 0x2

    shl-int/lit8 v5, v6, 0x6

    or-int/2addr v5, v7

    int-to-byte v5, v5

    aput-byte v5, v0, v4

    .line 245
    add-int/lit8 v1, v1, 0x3

    .line 236
    add-int/lit8 v2, v2, 0x4

    goto :goto_4e

    .line 228
    :cond_90
    array-length v0, v3

    add-int/lit8 v0, v0, -0x1

    aget-byte v0, v3, v0

    if-ne v0, v9, :cond_a3

    .line 229
    array-length v0, v3

    div-int/lit8 v0, v0, 0x4

    add-int/lit8 v0, v0, -0x1

    mul-int/lit8 v0, v0, 0x3

    add-int/lit8 v0, v0, 0x2

    new-array v0, v0, [B

    goto :goto_4d

    .line 231
    :cond_a3
    array-length v0, v3

    div-int/lit8 v0, v0, 0x4

    mul-int/lit8 v0, v0, 0x3

    new-array v0, v0, [B

    goto :goto_4d

    .line 248
    :cond_ab
    array-length v1, v3

    add-int/lit8 v1, v1, -0x2

    aget-byte v1, v3, v1

    if-ne v1, v9, :cond_d1

    .line 249
    sget-object v1, Lcom/cmcm/support/base/Base64;->DECODING_TABLE:[B

    array-length v2, v3

    add-int/lit8 v2, v2, -0x4

    aget-byte v2, v3, v2

    aget-byte v1, v1, v2

    .line 250
    sget-object v2, Lcom/cmcm/support/base/Base64;->DECODING_TABLE:[B

    array-length v4, v3

    add-int/lit8 v4, v4, -0x3

    aget-byte v3, v3, v4

    aget-byte v2, v2, v3

    .line 252
    array-length v3, v0

    add-int/lit8 v3, v3, -0x1

    shl-int/lit8 v1, v1, 0x2

    shr-int/lit8 v2, v2, 0x4

    or-int/2addr v1, v2

    int-to-byte v1, v1

    aput-byte v1, v0, v3

    goto/16 :goto_12

    .line 253
    :cond_d1
    array-length v1, v3

    add-int/lit8 v1, v1, -0x1

    aget-byte v1, v3, v1

    if-ne v1, v9, :cond_10b

    .line 254
    sget-object v1, Lcom/cmcm/support/base/Base64;->DECODING_TABLE:[B

    array-length v2, v3

    add-int/lit8 v2, v2, -0x4

    aget-byte v2, v3, v2

    aget-byte v1, v1, v2

    .line 255
    sget-object v2, Lcom/cmcm/support/base/Base64;->DECODING_TABLE:[B

    array-length v4, v3

    add-int/lit8 v4, v4, -0x3

    aget-byte v4, v3, v4

    aget-byte v2, v2, v4

    .line 256
    sget-object v4, Lcom/cmcm/support/base/Base64;->DECODING_TABLE:[B

    array-length v5, v3

    add-int/lit8 v5, v5, -0x2

    aget-byte v3, v3, v5

    aget-byte v3, v4, v3

    .line 258
    array-length v4, v0

    add-int/lit8 v4, v4, -0x2

    shl-int/lit8 v1, v1, 0x2

    shr-int/lit8 v5, v2, 0x4

    or-int/2addr v1, v5

    int-to-byte v1, v1

    aput-byte v1, v0, v4

    .line 259
    array-length v1, v0

    add-int/lit8 v1, v1, -0x1

    shl-int/lit8 v2, v2, 0x4

    shr-int/lit8 v3, v3, 0x2

    or-int/2addr v2, v3

    int-to-byte v2, v2

    aput-byte v2, v0, v1

    goto/16 :goto_12

    .line 261
    :cond_10b
    sget-object v1, Lcom/cmcm/support/base/Base64;->DECODING_TABLE:[B

    array-length v2, v3

    add-int/lit8 v2, v2, -0x4

    aget-byte v2, v3, v2

    aget-byte v1, v1, v2

    .line 262
    sget-object v2, Lcom/cmcm/support/base/Base64;->DECODING_TABLE:[B

    array-length v4, v3

    add-int/lit8 v4, v4, -0x3

    aget-byte v4, v3, v4

    aget-byte v2, v2, v4

    .line 263
    sget-object v4, Lcom/cmcm/support/base/Base64;->DECODING_TABLE:[B

    array-length v5, v3

    add-int/lit8 v5, v5, -0x2

    aget-byte v5, v3, v5

    aget-byte v4, v4, v5

    .line 264
    sget-object v5, Lcom/cmcm/support/base/Base64;->DECODING_TABLE:[B

    array-length v6, v3

    add-int/lit8 v6, v6, -0x1

    aget-byte v3, v3, v6

    aget-byte v3, v5, v3

    .line 266
    array-length v5, v0

    add-int/lit8 v5, v5, -0x3

    shl-int/lit8 v1, v1, 0x2

    shr-int/lit8 v6, v2, 0x4

    or-int/2addr v1, v6

    int-to-byte v1, v1

    aput-byte v1, v0, v5

    .line 267
    array-length v1, v0

    add-int/lit8 v1, v1, -0x2

    shl-int/lit8 v2, v2, 0x4

    shr-int/lit8 v5, v4, 0x2

    or-int/2addr v2, v5

    int-to-byte v2, v2

    aput-byte v2, v0, v1

    .line 268
    array-length v1, v0

    add-int/lit8 v1, v1, -0x1

    shl-int/lit8 v2, v4, 0x6

    or-int/2addr v2, v3

    int-to-byte v2, v2

    aput-byte v2, v0, v1
    :try_end_14e
    .catch Ljava/lang/Exception; {:try_start_13 .. :try_end_14e} :catch_d

    goto/16 :goto_12
.end method

.method private static discardNonBase64Bytes([B)[B
    .registers 7

    .prologue
    const/4 v1, 0x0

    .line 365
    array-length v0, p0

    new-array v4, v0, [B

    move v0, v1

    move v2, v1

    .line 368
    :goto_6
    array-length v3, p0

    if-ge v0, v3, :cond_1b

    .line 369
    aget-byte v3, p0, v0

    invoke-static {v3}, Lcom/cmcm/support/base/Base64;->isValidBase64Byte(B)Z

    move-result v3

    if-eqz v3, :cond_18

    .line 370
    add-int/lit8 v3, v2, 0x1

    aget-byte v5, p0, v0

    aput-byte v5, v4, v2

    move v2, v3

    .line 368
    :cond_18
    add-int/lit8 v0, v0, 0x1

    goto :goto_6

    .line 374
    :cond_1b
    new-array v0, v2, [B

    .line 376
    invoke-static {v4, v1, v0, v1, v2}, Ljava/lang/System;->arraycopy(Ljava/lang/Object;ILjava/lang/Object;II)V

    .line 378
    return-object v0
.end method

.method private static discardNonBase64Chars(Ljava/lang/String;)Ljava/lang/String;
    .registers 5

    .prologue
    .line 390
    new-instance v1, Ljava/lang/StringBuffer;

    invoke-direct {v1}, Ljava/lang/StringBuffer;-><init>()V

    .line 392
    invoke-virtual {p0}, Ljava/lang/String;->length()I

    move-result v2

    .line 394
    const/4 v0, 0x0

    :goto_a
    if-ge v0, v2, :cond_21

    .line 395
    invoke-virtual {p0, v0}, Ljava/lang/String;->charAt(I)C

    move-result v3

    int-to-byte v3, v3

    invoke-static {v3}, Lcom/cmcm/support/base/Base64;->isValidBase64Byte(B)Z

    move-result v3

    if-eqz v3, :cond_1e

    .line 396
    invoke-virtual {p0, v0}, Ljava/lang/String;->charAt(I)C

    move-result v3

    invoke-virtual {v1, v3}, Ljava/lang/StringBuffer;->append(C)Ljava/lang/StringBuffer;

    .line 394
    :cond_1e
    add-int/lit8 v0, v0, 0x1

    goto :goto_a

    .line 400
    :cond_21
    invoke-virtual {v1}, Ljava/lang/StringBuffer;->toString()Ljava/lang/String;

    move-result-object v0

    return-object v0
.end method

.method public static encode(Ljava/lang/String;)Ljava/lang/String;
    .registers 9

    .prologue
    const/4 v1, 0x0

    .line 422
    const-string v2, ""

    .line 425
    :try_start_3
    const-string v0, "UTF-8"

    invoke-virtual {p0, v0}, Ljava/lang/String;->getBytes(Ljava/lang/String;)[B
    :try_end_8
    .catch Ljava/lang/Exception; {:try_start_3 .. :try_end_8} :catch_70

    move-result-object v0

    .line 430
    :goto_9
    array-length v3, v0

    rem-int/lit8 v3, v3, 0x3

    rsub-int/lit8 v3, v3, 0x3

    rem-int/lit8 v3, v3, 0x3

    .line 432
    array-length v4, v0

    add-int/2addr v4, v3

    invoke-static {v4, v0}, Lcom/cmcm/support/base/Base64;->zeroPad(I[B)[B

    move-result-object v4

    move v0, v1

    .line 435
    :goto_17
    array-length v5, v4

    if-ge v0, v5, :cond_76

    .line 436
    aget-byte v5, v4, v0

    shl-int/lit8 v5, v5, 0x10

    add-int/lit8 v6, v0, 0x1

    aget-byte v6, v4, v6

    shl-int/lit8 v6, v6, 0x8

    add-int/2addr v5, v6

    add-int/lit8 v6, v0, 0x2

    aget-byte v6, v4, v6

    add-int/2addr v5, v6

    .line 437
    new-instance v6, Ljava/lang/StringBuilder;

    invoke-direct {v6}, Ljava/lang/StringBuilder;-><init>()V

    invoke-virtual {v6, v2}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;

    move-result-object v2

    const-string v6, "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/"

    shr-int/lit8 v7, v5, 0x12

    and-int/lit8 v7, v7, 0x3f

    .line 438
    invoke-virtual {v6, v7}, Ljava/lang/String;->charAt(I)C

    move-result v6

    invoke-virtual {v2, v6}, Ljava/lang/StringBuilder;->append(C)Ljava/lang/StringBuilder;

    move-result-object v2

    const-string v6, "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/"

    shr-int/lit8 v7, v5, 0xc

    and-int/lit8 v7, v7, 0x3f

    invoke-virtual {v6, v7}, Ljava/lang/String;->charAt(I)C

    move-result v6

    invoke-virtual {v2, v6}, Ljava/lang/StringBuilder;->append(C)Ljava/lang/StringBuilder;

    move-result-object v2

    const-string v6, "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/"

    shr-int/lit8 v7, v5, 0x6

    and-int/lit8 v7, v7, 0x3f

    invoke-virtual {v6, v7}, Ljava/lang/String;->charAt(I)C

    move-result v6

    invoke-virtual {v2, v6}, Ljava/lang/StringBuilder;->append(C)Ljava/lang/StringBuilder;

    move-result-object v2

    const-string v6, "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/"

    and-int/lit8 v5, v5, 0x3f

    .line 439
    invoke-virtual {v6, v5}, Ljava/lang/String;->charAt(I)C

    move-result v5

    invoke-virtual {v2, v5}, Ljava/lang/StringBuilder;->append(C)Ljava/lang/StringBuilder;

    move-result-object v2

    invoke-virtual {v2}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String;

    move-result-object v2

    .line 435
    add-int/lit8 v0, v0, 0x3

    goto :goto_17

    .line 426
    :catch_70
    move-exception v0

    .line 427
    invoke-virtual {p0}, Ljava/lang/String;->getBytes()[B

    move-result-object v0

    goto :goto_9

    .line 442
    :cond_76
    new-instance v0, Ljava/lang/StringBuilder;

    invoke-direct {v0}, Ljava/lang/StringBuilder;-><init>()V

    invoke-virtual {v2}, Ljava/lang/String;->length()I

    move-result v4

    sub-int/2addr v4, v3

    invoke-virtual {v2, v1, v4}, Ljava/lang/String;->substring(II)Ljava/lang/String;

    move-result-object v2

    invoke-virtual {v0, v2}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;

    move-result-object v0

    const-string v2, "=="

    invoke-virtual {v2, v1, v3}, Ljava/lang/String;->substring(II)Ljava/lang/String;

    move-result-object v1

    invoke-virtual {v0, v1}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;

    move-result-object v0

    invoke-virtual {v0}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String;

    move-result-object v0

    invoke-static {v0}, Lcom/cmcm/support/base/Base64;->splitLines(Ljava/lang/String;)Ljava/lang/String;

    move-result-object v0

    .line 443
    invoke-virtual {v0}, Ljava/lang/String;->trim()Ljava/lang/String;

    move-result-object v0

    return-object v0
.end method

.method public static encode(Ljava/io/InputStream;Ljava/io/OutputStream;)V
    .registers 7
    .annotation system Ldalvik/annotation/Throws;
        value = {
            Ljava/io/IOException;
        }
    .end annotation

    .prologue
    const/4 v4, 0x3

    const/4 v3, 0x0

    .line 156
    if-nez p0, :cond_c

    .line 157
    new-instance v0, Ljava/lang/IllegalArgumentException;

    const-string v1, "InputStream must be not null"

    invoke-direct {v0, v1}, Ljava/lang/IllegalArgumentException;-><init>(Ljava/lang/String;)V

    throw v0

    .line 159
    :cond_c
    if-nez p1, :cond_16

    .line 160
    new-instance v0, Ljava/lang/IllegalArgumentException;

    const-string v1, "OutputStream must be not null"

    invoke-direct {v0, v1}, Ljava/lang/IllegalArgumentException;-><init>(Ljava/lang/String;)V

    throw v0

    .line 165
    :cond_16
    new-array v0, v4, [B

    .line 167
    :goto_18
    invoke-virtual {p0, v0}, Ljava/io/InputStream;->read([B)I

    move-result v2

    const/4 v1, -0x1

    if-eq v2, v1, :cond_32

    .line 168
    if-eq v2, v4, :cond_27

    .line 170
    new-array v1, v2, [B

    .line 171
    invoke-static {v0, v3, v1, v3, v2}, Ljava/lang/System;->arraycopy(Ljava/lang/Object;ILjava/lang/Object;II)V

    move-object v0, v1

    .line 174
    :cond_27
    invoke-static {v0}, Lcom/cmcm/support/base/Base64;->encode([B)[B

    move-result-object v1

    .line 175
    invoke-virtual {p1, v1}, Ljava/io/OutputStream;->write([B)V

    .line 176
    invoke-virtual {p1}, Ljava/io/OutputStream;->flush()V

    goto :goto_18

    .line 178
    :cond_32
    return-void
.end method

.method public static encode([B)[B
    .registers 13

    .prologue
    const/4 v1, 0x0

    const/16 v11, 0x3d

    .line 76
    if-nez p0, :cond_d

    .line 77
    new-instance v0, Ljava/lang/IllegalArgumentException;

    const-string v1, "Data must be not null"

    invoke-direct {v0, v1}, Ljava/lang/IllegalArgumentException;-><init>(Ljava/lang/String;)V

    throw v0

    .line 82
    :cond_d
    array-length v0, p0

    rem-int/lit8 v3, v0, 0x3

    .line 83
    if-nez v3, :cond_66

    .line 84
    array-length v0, p0

    mul-int/lit8 v0, v0, 0x4

    div-int/lit8 v0, v0, 0x3

    new-array v0, v0, [B

    .line 89
    :goto_19
    array-length v2, p0

    sub-int v4, v2, v3

    move v2, v1

    .line 95
    :goto_1d
    if-ge v2, v4, :cond_70

    .line 96
    aget-byte v5, p0, v2

    and-int/lit16 v5, v5, 0xff

    .line 97
    add-int/lit8 v6, v2, 0x1

    aget-byte v6, p0, v6

    and-int/lit16 v6, v6, 0xff

    .line 98
    add-int/lit8 v7, v2, 0x2

    aget-byte v7, p0, v7

    and-int/lit16 v7, v7, 0xff

    .line 100
    sget-object v8, Lcom/cmcm/support/base/Base64;->ENCODING_TABLE:[B

    ushr-int/lit8 v9, v5, 0x2

    and-int/lit8 v9, v9, 0x3f

    aget-byte v8, v8, v9

    aput-byte v8, v0, v1

    .line 101
    add-int/lit8 v8, v1, 0x1

    sget-object v9, Lcom/cmcm/support/base/Base64;->ENCODING_TABLE:[B

    shl-int/lit8 v5, v5, 0x4

    ushr-int/lit8 v10, v6, 0x4

    or-int/2addr v5, v10

    and-int/lit8 v5, v5, 0x3f

    aget-byte v5, v9, v5

    aput-byte v5, v0, v8

    .line 102
    add-int/lit8 v5, v1, 0x2

    sget-object v8, Lcom/cmcm/support/base/Base64;->ENCODING_TABLE:[B

    shl-int/lit8 v6, v6, 0x2

    ushr-int/lit8 v9, v7, 0x6

    or-int/2addr v6, v9

    and-int/lit8 v6, v6, 0x3f

    aget-byte v6, v8, v6

    aput-byte v6, v0, v5

    .line 103
    add-int/lit8 v5, v1, 0x3

    sget-object v6, Lcom/cmcm/support/base/Base64;->ENCODING_TABLE:[B

    and-int/lit8 v7, v7, 0x3f

    aget-byte v6, v6, v7

    aput-byte v6, v0, v5

    .line 104
    add-int/lit8 v1, v1, 0x4

    .line 95
    add-int/lit8 v2, v2, 0x3

    goto :goto_1d

    .line 86
    :cond_66
    array-length v0, p0

    div-int/lit8 v0, v0, 0x3

    add-int/lit8 v0, v0, 0x1

    mul-int/lit8 v0, v0, 0x4

    new-array v0, v0, [B

    goto :goto_19

    .line 116
    :cond_70
    packed-switch v3, :pswitch_data_de

    .line 144
    :goto_73
    :pswitch_73
    return-object v0

    .line 120
    :pswitch_74
    array-length v1, p0

    add-int/lit8 v1, v1, -0x1

    aget-byte v1, p0, v1

    and-int/lit16 v1, v1, 0xff

    .line 121
    ushr-int/lit8 v2, v1, 0x2

    and-int/lit8 v2, v2, 0x3f

    .line 122
    shl-int/lit8 v1, v1, 0x4

    and-int/lit8 v1, v1, 0x3f

    .line 124
    array-length v3, v0

    add-int/lit8 v3, v3, -0x4

    sget-object v4, Lcom/cmcm/support/base/Base64;->ENCODING_TABLE:[B

    aget-byte v2, v4, v2

    aput-byte v2, v0, v3

    .line 125
    array-length v2, v0

    add-int/lit8 v2, v2, -0x3

    sget-object v3, Lcom/cmcm/support/base/Base64;->ENCODING_TABLE:[B

    aget-byte v1, v3, v1

    aput-byte v1, v0, v2

    .line 126
    array-length v1, v0

    add-int/lit8 v1, v1, -0x2

    aput-byte v11, v0, v1

    .line 127
    array-length v1, v0

    add-int/lit8 v1, v1, -0x1

    aput-byte v11, v0, v1

    goto :goto_73

    .line 130
    :pswitch_a0
    array-length v1, p0

    add-int/lit8 v1, v1, -0x2

    aget-byte v1, p0, v1

    and-int/lit16 v1, v1, 0xff

    .line 131
    array-length v2, p0

    add-int/lit8 v2, v2, -0x1

    aget-byte v2, p0, v2

    and-int/lit16 v2, v2, 0xff

    .line 133
    ushr-int/lit8 v3, v1, 0x2

    and-int/lit8 v3, v3, 0x3f

    .line 134
    shl-int/lit8 v1, v1, 0x4

    ushr-int/lit8 v4, v2, 0x4

    or-int/2addr v1, v4

    and-int/lit8 v1, v1, 0x3f

    .line 135
    shl-int/lit8 v2, v2, 0x2

    and-int/lit8 v2, v2, 0x3f

    .line 137
    array-length v4, v0

    add-int/lit8 v4, v4, -0x4

    sget-object v5, Lcom/cmcm/support/base/Base64;->ENCODING_TABLE:[B

    aget-byte v3, v5, v3

    aput-byte v3, v0, v4

    .line 138
    array-length v3, v0

    add-int/lit8 v3, v3, -0x3

    sget-object v4, Lcom/cmcm/support/base/Base64;->ENCODING_TABLE:[B

    aget-byte v1, v4, v1

    aput-byte v1, v0, v3

    .line 139
    array-length v1, v0

    add-int/lit8 v1, v1, -0x2

    sget-object v3, Lcom/cmcm/support/base/Base64;->ENCODING_TABLE:[B

    aget-byte v2, v3, v2

    aput-byte v2, v0, v1

    .line 140
    array-length v1, v0

    add-int/lit8 v1, v1, -0x1

    aput-byte v11, v0, v1

    goto :goto_73

    .line 116
    :pswitch_data_de
    .packed-switch 0x0
        :pswitch_73
        :pswitch_74
        :pswitch_a0
    .end packed-switch
.end method

.method private static isValidBase64Byte(B)Z
    .registers 5

    .prologue
    const/4 v0, 0x1

    const/4 v1, 0x0

    .line 410
    const/16 v2, 0x3d

    if-ne p0, v2, :cond_7

    .line 417
    :cond_6
    :goto_6
    return v0

    .line 412
    :cond_7
    if-ltz p0, :cond_d

    const/16 v2, 0x80

    if-lt p0, v2, :cond_f

    :cond_d
    move v0, v1

    .line 413
    goto :goto_6

    .line 414
    :cond_f
    sget-object v2, Lcom/cmcm/support/base/Base64;->DECODING_TABLE:[B

    aget-byte v2, v2, p0

    const/4 v3, -0x1

    if-ne v2, v3, :cond_6

    move v0, v1

    .line 415
    goto :goto_6
.end method

.method public static splitLines(Ljava/lang/String;)Ljava/lang/String;
    .registers 5

    .prologue
    .line 449
    const-string v1, ""

    .line 450
    const/4 v0, 0x0

    :goto_3
    invoke-virtual {p0}, Ljava/lang/String;->length()I

    move-result v2

    if-ge v0, v2, :cond_3e

    .line 452
    new-instance v2, Ljava/lang/StringBuilder;

    invoke-direct {v2}, Ljava/lang/StringBuilder;-><init>()V

    invoke-virtual {v2, v1}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;

    move-result-object v1

    invoke-virtual {p0}, Ljava/lang/String;->length()I

    move-result v2

    add-int/lit8 v3, v0, 0x4c

    invoke-static {v2, v3}, Ljava/lang/Math;->min(II)I

    move-result v2

    invoke-virtual {p0, v0, v2}, Ljava/lang/String;->substring(II)Ljava/lang/String;

    move-result-object v2

    invoke-virtual {v1, v2}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;

    move-result-object v1

    invoke-virtual {v1}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String;

    move-result-object v1

    .line 453
    new-instance v2, Ljava/lang/StringBuilder;

    invoke-direct {v2}, Ljava/lang/StringBuilder;-><init>()V

    invoke-virtual {v2, v1}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;

    move-result-object v1

    const-string v2, "\r\n"

    invoke-virtual {v1, v2}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;

    move-result-object v1

    invoke-virtual {v1}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String;

    move-result-object v1

    .line 450
    add-int/lit8 v0, v0, 0x4c

    goto :goto_3

    .line 456
    :cond_3e
    return-object v1
.end method

.method public static zeroPad(I[B)[B
    .registers 5

    .prologue
    const/4 v2, 0x0

    .line 46
    new-array v0, p0, [B

    .line 47
    array-length v1, p1

    invoke-static {p1, v2, v0, v2, v1}, Ljava/lang/System;->arraycopy(Ljava/lang/Object;ILjava/lang/Object;II)V

    .line 48
    return-object v0
.end method