/*
 * Copyright 2013 The Emscripten Authors.  All rights reserved.
 * Emscripten is available under two separate licenses, the MIT license and the
 * University of Illinois/NCSA Open Source License.  Both these licenses can be
 * found in the LICENSE file.
 */

/*
 * This is a RANDOMLY GENERATED PROGRAM.
 *
 * Generator: csmith 2.2.0
 * Git version: 2751ded
 * Options:   --no-volatiles --no-math64
 * Seed:      1532285979
 */

#include "csmith.h"


static long __undefined;

/* --- Struct/Union Declarations --- */
union U0 {
   int8_t  f0;
   const uint8_t  f1;
};

union U1 {
   int8_t * f0;
};

union U2 {
   int32_t  f0;
   uint32_t  f1;
   uint8_t  f2;
   uint32_t  f3;
   int8_t * f4;
};

/* --- GLOBAL VARIABLES --- */
static uint8_t g_23 = 0x67L;
static int32_t g_25 = 1L;
static uint16_t g_34 = 0x451DL;
static union U2 g_42 = {-1L};
static int32_t g_61[8][6][4] = {{{0xE281B1D0L,8L,9L,0xC90ACEFCL},{0xC369029EL,8L,0x63978472L,0x55BBB785L},{0x23D12EF6L,(-1L),0x23D12EF6L,8L},{0x55BBB785L,0xE4FCD58FL,0L,1L},{0xDD4F9520L,0xBF567D71L,0x9117A540L,0xE4FCD58FL},{4L,0L,0x9117A540L,9L}},{{0xDD4F9520L,(-1L),0L,0L},{0x55BBB785L,(-1L),0x23D12EF6L,0xDD4F9520L},{0x23D12EF6L,0xDD4F9520L,0x63978472L,0L},{0xC369029EL,9L,9L,0xC369029EL},{0xE281B1D0L,6L,0x55BBB785L,0x70A6219FL},{0L,0x63978472L,0xE281B1D0L,8L}},{{4L,9L,(-1L),8L},{0x63978472L,1L,0xC90ACEFCL,(-1L)},{0x9117A540L,(-1L),0x63978472L,0xE281B1D0L},{0L,0x9117A540L,0xC35C241EL,0x55F5DDA3L},{0x3A29ADD9L,(-1L),0x5DD88BA5L,(-1L)},{0xE4FCD58FL,8L,9L,0xBF567D71L}},{{0x55BBB785L,0xDD4F9520L,0xBF567D71L,0x9117A540L},{0x55F5DDA3L,0x3A29ADD9L,8L,1L},{0x55F5DDA3L,4L,0xBF567D71L,0x55BBB785L},{0x55BBB785L,1L,9L,0L},{0xE4FCD58FL,0L,0x5DD88BA5L,8L},{0x3A29ADD9L,0x5DD88BA5L,0xC35C241EL,0xC35C241EL}},{{0L,0L,0x63978472L,0xDD4F9520L},{0x9117A540L,6L,0xC90ACEFCL,(-1L)},{0x63978472L,0xC369029EL,(-1L),0xC90ACEFCL},{4L,0xC369029EL,0xE281B1D0L,(-1L)},{0xC369029EL,6L,8L,0xDD4F9520L},{0L,0L,0x9117A540L,0xC35C241EL}},{{0xE281B1D0L,0x5DD88BA5L,1L,8L},{6L,0L,6L,0L},{8L,1L,0x3A29ADD9L,0x55BBB785L},{(-1L),4L,0x70A6219FL,1L},{0x23D12EF6L,0x3A29ADD9L,0x70A6219FL,0x9117A540L},{(-1L),0xBF567D71L,0x55BBB785L,(-1L)}},{{0x9117A540L,0x23D12EF6L,0xE4FCD58FL,4L},{0xE4FCD58FL,4L,0x3A29ADD9L,(-1L)},{0x63978472L,0L,0L,0x63978472L},{1L,1L,0x9117A540L,0L},{0xC35C241EL,0x3A29ADD9L,0x63978472L,0x23D12EF6L},{8L,8L,4L,0x23D12EF6L}},{{0L,0x3A29ADD9L,0xC369029EL,0L},{0L,1L,0L,0x63978472L},{0x70A6219FL,0L,0xE281B1D0L,(-1L)},{0x55BBB785L,4L,6L,4L},{(-1L),0x23D12EF6L,8L,(-1L)},{9L,0xBF567D71L,(-1L),0L}}};
static int32_t *g_60 = &g_61[3][1][1];
static int8_t g_70 = 1L;
static int8_t *g_69 = &g_70;
static int32_t g_78 = 1L;
static union U1 g_84 = {0};
static int32_t **g_95 = &g_60;
static int32_t ***g_94[1] = {&g_95};
static int8_t g_117 = 7L;
static union U0 g_163 = {0xE2L};
static uint16_t g_165[7] = {0xB953L,0xB953L,0xB953L,0xB953L,0xB953L,0xB953L,0xB953L};
static const uint8_t g_171[4][8][3] = {{{8UL,8UL,8UL},{1UL,1UL,1UL},{8UL,8UL,8UL},{1UL,1UL,1UL},{8UL,8UL,8UL},{1UL,1UL,1UL},{8UL,8UL,8UL},{1UL,1UL,1UL}},{{8UL,8UL,8UL},{1UL,1UL,1UL},{8UL,8UL,8UL},{1UL,1UL,1UL},{8UL,8UL,8UL},{1UL,1UL,1UL},{8UL,8UL,8UL},{1UL,1UL,1UL}},{{8UL,8UL,8UL},{1UL,1UL,1UL},{8UL,8UL,8UL},{1UL,1UL,1UL},{8UL,8UL,8UL},{1UL,1UL,1UL},{8UL,8UL,8UL},{1UL,1UL,1UL}},{{8UL,8UL,8UL},{1UL,1UL,1UL},{8UL,8UL,8UL},{1UL,1UL,1UL},{8UL,8UL,8UL},{1UL,1UL,1UL},{8UL,8UL,8UL},{1UL,1UL,1UL}}};
static const uint8_t *g_170 = &g_171[2][3][0];
static uint8_t g_218 = 0xB9L;
static int16_t g_234 = 1L;
static int16_t g_246 = 0x3B2BL;
static int16_t *g_248 = &g_246;
static int16_t *g_249 = &g_246;
static int32_t g_255 = (-8L);
static int16_t g_380 = 0L;
static int16_t g_387 = 1L;
static union U2 *g_397 = &g_42;
static union U2 **g_396 = &g_397;
static const int32_t *g_404 = &g_25;
static union U0 g_405[4][1] = {{{0xD5L}},{{0xD5L}},{{0xD5L}},{{0xD5L}}};
static int8_t g_471 = (-2L);
static uint16_t **g_505 = (void*)0;
static const int32_t g_555 = 0x72195204L;
static uint16_t g_556[9] = {8UL,0x32E2L,8UL,8UL,0x32E2L,8UL,8UL,0x32E2L,8UL};
static int32_t *g_588 = &g_61[3][1][2];
static uint8_t *g_616 = &g_42.f2;
static union U1 *g_644 = &g_84;
static union U1 **g_643 = &g_644;


/* --- FORWARD DECLARATIONS --- */
static int32_t  func_1(void);
static uint8_t  func_4(int8_t * p_5, uint16_t  p_6, int8_t * p_7);
static int8_t * func_8(uint8_t  p_9, const uint32_t  p_10, const int8_t * p_11, union U0  p_12);
static const int8_t  func_16(union U0  p_17, uint8_t  p_18, int8_t * p_19, int8_t * p_20);
static union U0  func_21(uint32_t  p_22);
static int8_t  func_27(uint16_t  p_28, int32_t * p_29, union U2  p_30, int32_t * const  p_31, int32_t  p_32);
static int32_t * func_37(const uint16_t  p_38, union U2  p_39, int32_t * p_40, int32_t  p_41);
static int32_t * func_43(uint8_t  p_44, int8_t  p_45, int8_t * p_46);
static uint16_t  func_50(int32_t * p_51, uint16_t  p_52, int8_t  p_53, int32_t * p_54, union U2  p_55);
static int32_t * func_56(int8_t * p_57, int32_t * p_58);


/* --- FUNCTIONS --- */
/* ------------------------------------------ */
/* 
 * reads : g_23 g_34 g_42 g_60 g_61 g_42.f3 g_69 g_70 g_42.f2 g_78 g_94 g_117 g_95 g_163 g_163.f0 g_42.f1 g_218 g_170 g_171 g_163.f1 g_84 g_248 g_246 g_234 g_249 g_405 g_255 g_387 g_25 g_396 g_397 g_380 g_471 g_165 g_404 g_505 g_588 g_643
 * writes: g_25 g_34 g_60 g_78 g_61 g_117 g_170 g_70 g_163.f0 g_218 g_165 g_234 g_42.f1 g_404 g_255 g_387 g_396 g_471 g_42.f2 g_616
 */
static int32_t  func_1(void)
{ /* block id: 0 */
    int32_t l_13[8] = {1L,1L,1L,1L,1L,1L,1L,1L};
    uint16_t *l_33 = &g_34;
    uint32_t l_47 = 0xF844BA92L;
    int8_t *l_59 = (void*)0;
    union U2 l_64 = {-8L};
    int32_t l_175[3][5] = {{0xEB591F11L,0xEB591F11L,(-9L),4L,0xE9867546L},{(-1L),1L,1L,(-1L),0xEB591F11L},{(-1L),4L,0L,0L,4L}};
    int32_t l_509[9][6] = {{0xDF92247FL,0x59DF3EF6L,0x59DF3EF6L,0xDF92247FL,0x59DF3EF6L,0x59DF3EF6L},{0xDF92247FL,0x59DF3EF6L,0x59DF3EF6L,0xDF92247FL,0x59DF3EF6L,0x59DF3EF6L},{0xDF92247FL,0x59DF3EF6L,0x59DF3EF6L,0xDF92247FL,0x59DF3EF6L,0x59DF3EF6L},{0xDF92247FL,0x59DF3EF6L,0x59DF3EF6L,0xDF92247FL,0x59DF3EF6L,0x59DF3EF6L},{0xDF92247FL,0x59DF3EF6L,0x59DF3EF6L,0xDF92247FL,0x59DF3EF6L,0x59DF3EF6L},{0xDF92247FL,0x59DF3EF6L,0x59DF3EF6L,0xDF92247FL,0x59DF3EF6L,0x59DF3EF6L},{0xDF92247FL,0x59DF3EF6L,0x59DF3EF6L,0xDF92247FL,0x59DF3EF6L,0x59DF3EF6L},{0xDF92247FL,0x59DF3EF6L,0x59DF3EF6L,0xDF92247FL,0x59DF3EF6L,0x59DF3EF6L},{0xDF92247FL,0x59DF3EF6L,0x59DF3EF6L,0xDF92247FL,0x59DF3EF6L,0x59DF3EF6L}};
    uint32_t l_528 = 6UL;
    uint8_t *l_576[8] = {&g_23,&g_23,&g_23,&g_23,&g_23,&g_23,&g_23,&g_23};
    int32_t l_635 = 0x6AE51A9FL;
    int i, j;
    if (((safe_add_func_uint16_t_u_u((l_509[1][5] ^= (func_4(func_8(l_13[7], (((safe_mul_func_uint8_t_u_u((func_16(func_21(g_23), (((*g_69) = func_27((++(*l_33)), func_37(l_13[7], g_42, func_43(l_47, (safe_div_func_uint8_t_u_u((func_50(func_56(l_59, g_60), g_61[6][5][1], l_13[2], &g_61[3][1][1], l_64) <= l_64.f1), g_42.f3)), g_69), l_47), l_64, &l_13[1], l_175[0][2])) < l_13[7]), l_59, g_69) >= g_171[1][6][2]), 0x43L)) < l_64.f2) != 5UL), g_69, g_405[3][0]), l_64.f0, l_59) >= l_64.f1)), l_64.f3)) > 0x66CCL))
    { /* block id: 365 */
        int32_t l_524 = (-9L);
        union U2 l_580 = {0xF3A458B5L};
        int8_t *l_581 = (void*)0;
        int32_t l_589 = 0x34F78B18L;
        uint32_t l_605 = 0xE76FF136L;
        for (g_234 = (-16); (g_234 >= 13); g_234 = safe_add_func_int32_t_s_s(g_234, 6))
        { /* block id: 368 */
            union U2 l_520 = {0x03E6CC5CL};
            int32_t l_529 = (-7L);
            int32_t *l_566 = &l_175[0][0];
            const uint8_t *l_577 = &g_171[2][4][1];
            uint32_t *l_584 = &l_580.f1;
            uint8_t l_587 = 0x74L;
            if (l_64.f1)
            { /* block id: 369 */
                uint32_t l_516 = 0UL;
                uint8_t *l_519 = &g_42.f2;
                union U2 *l_521 = &l_64;
                int32_t *l_525 = (void*)0;
                int32_t *l_526 = &g_61[3][1][1];
                int32_t *l_527[7][2] = {{&l_13[4],&l_13[4]},{(void*)0,&l_13[4]},{&l_13[4],(void*)0},{&l_13[4],&l_13[4]},{(void*)0,&l_13[4]},{&l_13[4],(void*)0},{&l_13[4],&l_13[4]}};
                int16_t l_554 = 0xB066L;
                uint16_t *l_571 = &g_165[6];
                int i, j;
                l_529 = (safe_div_func_int16_t_s_s((safe_rshift_func_uint16_t_u_s(l_516, (safe_rshift_func_int8_t_s_u(l_516, ((*l_519) = 0x47L))))), (((*l_521) = l_520) , ((l_528 = ((*l_526) = (safe_lshift_func_uint16_t_u_s((func_16(g_163, l_524, l_519, &g_70) && 1L), 8)))) | l_520.f0))));
                if ((*l_526))
                    break;
                for (g_34 = 0; (g_34 <= 5); g_34 = safe_add_func_int16_t_s_s(g_34, 5))
                { /* block id: 378 */
                    uint32_t l_534 = 0x9C38BE8CL;
                    int8_t **l_537 = &g_69;
                    int32_t *l_565 = &l_13[0];
                }
            }
            else
            { /* block id: 394 */
                return l_175[0][1];
            }
            l_589 = ((*g_588) = (safe_mod_func_uint16_t_u_u(((((l_576[2] = &g_218) == l_577) && (~(safe_mul_func_uint8_t_u_u((l_13[5] >= (l_580 , g_165[5])), (*l_566))))) > 0x0256L), l_47)));
            (*g_588) ^= (*l_566);
        }
        for (g_117 = (-29); (g_117 != (-7)); g_117 = safe_add_func_int8_t_s_s(g_117, 5))
        { /* block id: 407 */
            int32_t *l_592 = &l_13[7];
            int32_t *l_593 = &l_13[0];
            int32_t *l_594 = &l_175[0][2];
            int32_t *l_595 = &l_509[1][5];
            int32_t *l_596 = &l_175[0][2];
            int32_t *l_597 = &l_509[1][5];
            int32_t *l_598 = &l_175[1][2];
            int32_t *l_599 = (void*)0;
            int32_t *l_600 = &g_255;
            int32_t *l_601 = &g_25;
            int32_t *l_602 = &g_255;
            int32_t l_603 = 0x83DE74D8L;
            int32_t *l_604[5][7] = {{(void*)0,(void*)0,(void*)0,(void*)0,(void*)0,(void*)0,(void*)0},{&l_175[0][2],&g_61[3][1][0],&l_509[3][2],&g_61[3][1][0],&l_175[0][2],(void*)0,&l_175[0][2]},{(void*)0,(void*)0,(void*)0,(void*)0,(void*)0,&g_255,(void*)0},{&l_509[3][2],&g_255,&l_509[3][2],(void*)0,&l_509[8][3],(void*)0,&l_509[3][2]},{(void*)0,(void*)0,(void*)0,(void*)0,(void*)0,(void*)0,(void*)0}};
            int i, j;
            ++l_605;
        }
    }
    else
    { /* block id: 410 */
        int32_t *l_608[10] = {&l_175[0][2],&l_175[0][2],&l_175[0][2],&l_175[0][2],&l_175[0][2],&l_175[0][2],&l_175[0][2],&l_175[0][2],&l_175[0][2],&l_175[0][2]};
        uint8_t *l_612 = (void*)0;
        uint8_t **l_613 = (void*)0;
        uint8_t **l_614 = &l_612;
        uint8_t **l_615[10] = {&l_576[5],&l_576[2],&l_576[5],&l_576[2],&l_576[5],&l_576[2],&l_576[5],&l_576[2],&l_576[5],&l_576[2]};
        uint32_t l_617 = 0xA732A71CL;
        const int8_t *l_618 = &g_70;
        int32_t *l_622 = (void*)0;
        union U1 l_641 = {0};
        int i;
        if (func_50(func_56(&g_70, l_608[8]), (safe_lshift_func_uint8_t_u_s(l_13[7], 7)), (((safe_unary_minus_func_int8_t_s(((*g_69) = ((*g_248) ^ (l_175[0][3] > ((g_616 = ((*l_614) = l_612)) != (l_576[4] = &g_23))))))) | l_64.f1) && g_165[4]), &l_175[0][0], (**g_396)))
        { /* block id: 415 */
            return l_528;
        }
        else
        { /* block id: 417 */
            int8_t l_619 = 0xF5L;
            const int32_t *l_627[7][2] = {{&g_42.f0,&g_42.f0},{&g_42.f0,&g_42.f0},{&g_42.f0,&g_42.f0},{&l_64.f0,&l_64.f0},{&l_64.f0,&g_42.f0},{&g_42.f0,&g_42.f0},{&g_42.f0,&g_42.f0}};
            const int32_t **l_626 = &l_627[3][0];
            int32_t l_628[6] = {0xF3CEC250L,0xF3CEC250L,0xF3CEC250L,0xF3CEC250L,0xF3CEC250L,0xF3CEC250L};
            int16_t l_636 = 0xA7CDL;
            uint8_t l_637 = 0x6EL;
            int i, j;
            for (g_387 = 7; (g_387 >= 0); g_387 -= 1)
            { /* block id: 420 */
                int8_t *l_620[4][4][9] = {{{&g_163.f0,&l_619,(void*)0,&g_163.f0,&g_163.f0,(void*)0,&l_619,&g_163.f0,&g_405[3][0].f0},{&g_70,&g_471,(void*)0,&g_70,&l_619,&g_70,(void*)0,&g_117,&g_471},{&g_405[3][0].f0,&l_619,&g_163.f0,&g_471,(void*)0,&g_471,&g_163.f0,&l_619,&g_405[3][0].f0},{&g_163.f0,&g_471,&l_619,&g_70,&g_70,(void*)0,&g_471,(void*)0,&g_405[3][0].f0}},{{&g_163.f0,(void*)0,(void*)0,&g_163.f0,(void*)0,(void*)0,(void*)0,&g_163.f0,&g_163.f0},{&g_70,&g_405[3][0].f0,&g_70,&g_471,(void*)0,(void*)0,(void*)0,&g_471,&g_163.f0},{&l_619,(void*)0,&g_471,&g_163.f0,&g_163.f0,&g_117,&g_163.f0,&g_163.f0,&g_471},{&g_405[3][0].f0,&g_405[3][0].f0,&g_405[3][0].f0,&g_163.f0,&l_619,&g_117,&g_471,&g_70,&g_70}},{{&g_471,&g_163.f0,&l_619,&g_163.f0,(void*)0,&l_619,&l_619,(void*)0,&g_163.f0},{&g_405[3][0].f0,&g_117,&g_405[3][0].f0,(void*)0,&g_471,(void*)0,&g_70,&g_70,&l_619},{&g_117,&l_619,&g_471,&g_163.f0,(void*)0,&g_405[3][0].f0,&g_163.f0,&g_405[3][0].f0,(void*)0},{(void*)0,&g_70,&g_70,(void*)0,&g_117,(void*)0,&g_70,&l_619,&g_70}},{{&g_163.f0,&g_117,&g_163.f0,&g_163.f0,&l_619,&g_163.f0,&g_117,&g_117,&g_163.f0},{&g_117,&g_163.f0,(void*)0,&g_163.f0,&g_117,&l_619,&g_405[3][0].f0,&g_471,&g_70},{&l_619,&g_163.f0,&g_405[3][0].f0,&g_163.f0,(void*)0,&g_117,(void*)0,&g_163.f0,(void*)0},{&g_70,&l_619,&l_619,&l_619,&l_619,&g_70,(void*)0,&g_117,&g_70}}};
                int32_t l_629 = 0x94DF55BDL;
                int32_t l_630 = 0x78F2A151L;
                int32_t l_631 = 0x108DD9F6L;
                int32_t l_632 = 1L;
                int32_t l_633 = 0x9920FA05L;
                int32_t l_634 = 8L;
                int32_t *l_650 = &g_255;
                int i, j, k;
                for (g_163.f0 = 0; (g_163.f0 <= 3); g_163.f0 += 1)
                { /* block id: 423 */
                    int32_t *l_621[7][7] = {{&l_175[0][2],&g_61[3][4][2],&l_509[1][5],&l_175[0][2],&l_13[7],&l_175[0][2],&l_509[1][5]},{&g_255,&g_255,&l_13[7],&l_509[1][5],&g_61[3][4][2],(void*)0,&g_255},{&g_255,&l_509[1][5],&l_509[1][5],&g_61[3][4][2],&g_255,&g_255,&g_61[3][4][2]},{&l_175[0][2],&l_13[7],&l_175[0][2],&l_509[1][5],&g_61[3][4][2],&l_175[0][2],&l_175[0][2]},{&g_61[3][4][2],&l_13[7],&l_509[1][5],&l_509[1][5],&l_13[7],&l_13[7],&l_13[7]},{(void*)0,&l_509[1][5],&l_509[1][5],(void*)0,&l_175[0][2],&l_175[0][2],&g_61[3][4][2]},{&g_255,&g_255,&l_509[1][5],&l_509[1][5],&g_61[3][4][2],&g_255,&g_255}};
                    const int32_t *l_624 = &g_78;
                    const int32_t **l_623[5];
                    int i, j;
                    for (i = 0; i < 5; i++)
                        l_623[i] = &l_624;
                    for (g_78 = 3; (g_78 >= 0); g_78 -= 1)
                    { /* block id: 426 */
                        int i, j, k;
                        g_61[(g_78 + 1)][(g_163.f0 + 1)][g_163.f0] ^= l_619;
                        (*g_95) = func_56(l_620[0][2][7], l_621[0][2]);
                        (*g_95) = (*g_95);
                        l_622 = l_621[0][2];
                    }
                    for (l_619 = 1; (l_619 <= 7); l_619 += 1)
                    { /* block id: 434 */
                        const int32_t ***l_625[2];
                        int i;
                        for (i = 0; i < 2; i++)
                            l_625[i] = &l_623[1];
                        l_626 = l_623[4];
                    }
                }
                --l_637;
                for (l_47 = 0; (l_47 <= 3); l_47 += 1)
                { /* block id: 441 */
                    int32_t l_640 = 0xEDD92DAAL;
                    int32_t *l_642 = (void*)0;
                    int8_t *l_649 = (void*)0;
                    (*g_588) |= (((g_165[2] = l_640) >= l_640) | ((((l_641 , (*g_170)) | (l_628[0] = (l_13[2] >= (func_50(l_642, (func_50(&l_628[2], (((g_643 == ((safe_rshift_func_uint8_t_u_s(l_628[2], 6)) , &g_644)) == 0x572EL) & 0L), l_634, l_608[7], (**g_396)) ^ 9UL), (*g_69), l_608[0], (*g_397)) || 0x10DDA243L)))) < l_13[7]) > l_13[g_387]));
                    for (l_636 = 0; (l_636 <= 3); l_636 += 1)
                    { /* block id: 447 */
                        int32_t *l_651 = &l_628[2];
                        l_650 = &l_628[2];
                        (*g_95) = l_651;
                        if ((**g_95))
                            break;
                    }
                    for (g_163.f0 = 5; (g_163.f0 >= 2); g_163.f0 -= 1)
                    { /* block id: 455 */
                        int i, j, k;
                        g_61[g_387][l_47][l_47] = (safe_unary_minus_func_int16_t_s(l_509[(l_47 + 4)][l_47]));
                        l_509[3][0] ^= (*l_650);
                        return (*g_588);
                    }
                    for (l_528 = 2; (l_528 <= 7); l_528 += 1)
                    { /* block id: 462 */
                        return (*g_404);
                    }
                }
            }
            for (l_637 = 0; (l_637 == 3); l_637++)
            { /* block id: 469 */
                uint32_t l_655[6];
                int i;
                for (i = 0; i < 6; i++)
                    l_655[i] = 0x4CE808BAL;
                (*g_95) = l_622;
                if (l_655[4])
                    continue;
            }
        }
    }
    for (g_218 = 3; (g_218 == 24); g_218++)
    { /* block id: 477 */
        for (l_635 = 24; (l_635 <= 1); l_635 = safe_sub_func_int32_t_s_s(l_635, 2))
        { /* block id: 480 */
            (*g_588) = ((&g_78 == &g_78) ^ 0x108FL);
        }
    }
    return (*g_588);
}


/* ------------------------------------------ */
/* 
 * reads : g_387 g_95 g_84 g_61 g_170 g_171 g_163.f1 g_25 g_396 g_397 g_42 g_42.f3 g_117 g_248 g_246 g_255 g_380 g_471 g_249 g_165 g_163 g_69 g_70 g_42.f1 g_218 g_404 g_505
 * writes: g_387 g_60 g_404 g_218 g_25 g_117 g_396 g_255 g_61 g_471 g_170 g_34
 */
static uint8_t  func_4(int8_t * p_5, uint16_t  p_6, int8_t * p_7)
{ /* block id: 299 */
    int32_t *l_430[6][9] = {{&g_61[3][1][1],&g_61[3][1][1],(void*)0,&g_61[1][1][0],&g_25,(void*)0,&g_25,&g_61[1][1][0],(void*)0},{&g_25,&g_25,&g_61[3][5][3],(void*)0,&g_61[5][0][1],&g_61[3][5][3],&g_61[5][0][1],(void*)0,&g_61[3][5][3]},{&g_61[3][1][1],&g_61[3][1][1],(void*)0,&g_61[1][1][0],&g_25,(void*)0,&g_25,&g_61[1][1][0],(void*)0},{&g_25,&g_25,&g_61[3][5][3],(void*)0,&g_61[5][0][1],&g_61[3][5][3],&g_61[5][0][1],(void*)0,&g_61[3][5][3]},{&g_61[3][1][1],&g_61[3][1][1],(void*)0,&g_61[3][1][1],&g_61[1][1][0],(void*)0,&g_61[1][1][0],&g_61[3][1][1],(void*)0},{&g_61[5][0][1],&g_61[5][0][1],&g_25,&g_25,(void*)0,&g_25,(void*)0,&g_25,&g_25}};
    uint32_t l_437[7][6] = {{0x73C76190L,0x73C76190L,1UL,0x73C76190L,0x73C76190L,1UL},{0x73C76190L,0x73C76190L,1UL,0x73C76190L,0x73C76190L,1UL},{0x73C76190L,0x73C76190L,1UL,0x73C76190L,0x73C76190L,1UL},{0x73C76190L,0x73C76190L,1UL,0x73C76190L,0x73C76190L,1UL},{0x73C76190L,0x73C76190L,1UL,0x73C76190L,0x73C76190L,1UL},{0x73C76190L,0x73C76190L,1UL,0x73C76190L,0x73C76190L,1UL},{0x73C76190L,0x73C76190L,1UL,0x73C76190L,0x73C76190L,1UL}};
    union U0 l_439 = {0x5BL};
    union U2 l_464 = {0x013712E9L};
    int8_t *l_468 = (void*)0;
    union U2 l_470 = {0xFCE83381L};
    const union U1 l_504 = {0};
    int i, j;
    for (g_387 = 10; (g_387 > (-15)); g_387--)
    { /* block id: 302 */
        union U0 l_438[9][10] = {{{0x4FL},{0x2CL},{0x2CL},{0x4FL},{-6L},{0x4FL},{0x2CL},{0x2CL},{0x4FL},{-6L}},{{0x4FL},{0x2CL},{0x2CL},{0x4FL},{-6L},{0x4FL},{0x2CL},{0x2CL},{0x4FL},{-6L}},{{0x4FL},{0x2CL},{0x2CL},{0x4FL},{-6L},{0x4FL},{0x2CL},{0x2CL},{0x4FL},{-6L}},{{0x4FL},{0x2CL},{0x2CL},{0x4FL},{-6L},{0x4FL},{0x2CL},{0x6AL},{0x2CL},{-5L}},{{0x2CL},{0x6AL},{0x6AL},{0x2CL},{-5L},{0x2CL},{0x6AL},{0x6AL},{0x2CL},{-5L}},{{0x2CL},{0x6AL},{0x6AL},{0x2CL},{-5L},{0x2CL},{0x6AL},{0x6AL},{0x2CL},{-5L}},{{0x2CL},{0x6AL},{0x6AL},{0x2CL},{-5L},{0x2CL},{0x6AL},{0x6AL},{0x2CL},{-5L}},{{0x2CL},{0x6AL},{0x6AL},{0x2CL},{-5L},{0x2CL},{0x6AL},{0x6AL},{0x2CL},{-5L}},{{0x2CL},{0x6AL},{0x6AL},{0x2CL},{-5L},{0x2CL},{0x6AL},{0x6AL},{0x2CL},{-5L}}};
        int8_t *l_444 = &l_438[8][2].f0;
        uint8_t *l_445 = (void*)0;
        uint8_t *l_446 = (void*)0;
        uint8_t *l_447 = (void*)0;
        int32_t *l_448 = &g_25;
        int i, j;
        (*l_448) = func_50(((*g_95) = l_430[0][6]), (safe_lshift_func_uint8_t_u_u((safe_mod_func_int32_t_s_s((safe_mul_func_int16_t_s_s((l_437[5][3] , ((g_218 = func_16(l_438[8][2], func_16(l_439, (g_84 , func_16(l_439, (safe_rshift_func_uint8_t_u_s(0x01L, (safe_rshift_func_int16_t_s_s(0xFC91L, 13)))), p_7, l_444)), p_7, p_7), p_7, l_444)) ^ (*g_170))), g_387)), g_25)), 3)), l_438[8][2].f1, l_448, (**g_396));
        (*l_448) &= 9L;
        if (p_6)
            break;
    }
    for (g_117 = (-26); (g_117 < 23); g_117++)
    { /* block id: 311 */
        int16_t l_469 = (-9L);
        uint32_t *l_486 = &l_470.f1;
        uint32_t **l_485[4] = {&l_486,&l_486,&l_486,&l_486};
        int8_t l_497 = 0L;
        int32_t l_501 = 1L;
        uint16_t l_508 = 0x4BC4L;
        int i;
        if (p_6)
        { /* block id: 312 */
            int32_t *l_451[8] = {&g_255,&g_255,&g_255,&g_255,&g_255,&g_255,&g_255,&g_255};
            int32_t *l_452 = (void*)0;
            const union U1 l_472 = {0};
            union U0 l_479 = {0xB8L};
            int i;
            for (l_439.f0 = 3; (l_439.f0 >= 0); l_439.f0 -= 1)
            { /* block id: 315 */
                union U2 ***l_453 = &g_396;
                int32_t l_465 = 0xAF964579L;
                uint16_t *l_482 = &g_165[0];
                l_452 = ((*g_95) = func_56(p_5, l_451[0]));
                (*l_453) = &g_397;
                for (g_387 = 5; (g_387 >= 0); g_387 -= 1)
                { /* block id: 321 */
                    union U0 l_454 = {8L};
                    int i, j, k;
                    if (g_61[l_439.f0][g_387][l_439.f0])
                    { /* block id: 322 */
                        int32_t *l_463 = &g_255;
                        uint16_t l_466[9] = {0xBF85L,0xBF85L,0x789FL,0xBF85L,0xBF85L,0x789FL,0xBF85L,0xBF85L,0x789FL};
                        uint16_t *l_467[1];
                        int i, j, k;
                        for (i = 0; i < 1; i++)
                            l_467[i] = &g_165[4];
                        g_61[(l_439.f0 + 3)][g_387][l_439.f0] = (func_16(l_454, (safe_rshift_func_uint16_t_u_u(((*l_463) ^= ((safe_sub_func_int16_t_s_s(((safe_sub_func_uint16_t_u_u(l_437[(l_439.f0 + 3)][(l_439.f0 + 2)], (l_466[1] = (func_16(l_454, (func_16(func_21(((*p_5) != (safe_sub_func_uint8_t_u_u((func_50(l_463, g_387, (*p_5), l_463, ((255UL == 0xC5L) , l_464)) || p_6), 1L)))), l_465, p_5, &g_70) == 0xC5F1L), p_5, p_5) ^ 0x5022C929L)))) != (-9L)), (*g_248))) ^ 0x01E9L)), g_380)), l_468, l_468) >= l_469);
                    }
                    else
                    { /* block id: 326 */
                        (*l_452) ^= (-1L);
                    }
                    (*l_452) = ((g_84 , (((l_470 , (*g_170)) == g_471) ^ ((((func_50(&g_61[l_439.f0][g_387][l_439.f0], p_6, (g_61[l_439.f0][g_387][l_439.f0] = 0L), (l_472 , l_452), l_464) != 0UL) | 0x92L) | (*g_249)) > (*g_170)))) != (*g_249));
                }
                for (g_471 = 0; (g_471 <= 3); g_471 += 1)
                { /* block id: 334 */
                    uint16_t *l_480 = (void*)0;
                    int32_t l_484 = 0x0E90AE7DL;
                    for (g_387 = 0; (g_387 <= 6); g_387 += 1)
                    { /* block id: 337 */
                        uint16_t **l_481 = &l_480;
                        union U2 l_483 = {4L};
                        int i, j, k;
                        (*g_95) = func_37((safe_rshift_func_int8_t_s_u(0xCBL, g_61[(l_439.f0 + 3)][(l_439.f0 + 1)][g_471])), (***l_453), &g_61[(l_439.f0 + 3)][(l_439.f0 + 1)][g_471], ((l_439 , ((safe_mod_func_uint32_t_u_u(((((*l_481) = (((safe_sub_func_int32_t_s_s(g_165[g_471], p_6)) , l_479) , l_480)) == l_482) & (*g_170)), p_6)) , l_483)) , l_484));
                    }
                    for (l_465 = 3; (l_465 >= 0); l_465 -= 1)
                    { /* block id: 343 */
                        int i, j, k;
                        return g_61[(g_471 + 1)][(l_439.f0 + 2)][l_465];
                    }
                }
            }
            return (*g_170);
        }
        else
        { /* block id: 349 */
            uint32_t ***l_487 = (void*)0;
            uint32_t ***l_488 = &l_485[3];
            int32_t l_495[9][9][2] = {{{0L,0x40CE7CD7L},{1L,0x40CE7CD7L},{0L,0x50ED6328L},{0xADA7BC83L,0x40CE7CD7L},{0L,0x40CE7CD7L},{0xADA7BC83L,0x50ED6328L},{0L,0x40CE7CD7L},{1L,0x40CE7CD7L},{0L,0x50ED6328L}},{{0xADA7BC83L,0x40CE7CD7L},{0L,0x40CE7CD7L},{0xADA7BC83L,0x50ED6328L},{0L,0x40CE7CD7L},{1L,0x40CE7CD7L},{0L,0x50ED6328L},{0xADA7BC83L,0x40CE7CD7L},{0L,0x40CE7CD7L},{0xADA7BC83L,0x50ED6328L}},{{0L,0x40CE7CD7L},{1L,0x40CE7CD7L},{0L,0x50ED6328L},{0xADA7BC83L,0x40CE7CD7L},{0L,0x40CE7CD7L},{0xADA7BC83L,0x50ED6328L},{0L,0x40CE7CD7L},{1L,0x40CE7CD7L},{0L,0x50ED6328L}},{{0xADA7BC83L,0x40CE7CD7L},{0L,0x40CE7CD7L},{0xADA7BC83L,0x50ED6328L},{0L,0x40CE7CD7L},{1L,0x40CE7CD7L},{0L,0x50ED6328L},{0xADA7BC83L,0x40CE7CD7L},{0L,0x40CE7CD7L},{0xADA7BC83L,0x50ED6328L}},{{0L,0x40CE7CD7L},{1L,0x40CE7CD7L},{0L,0x50ED6328L},{0xADA7BC83L,0x40CE7CD7L},{0L,0x40CE7CD7L},{0xADA7BC83L,0x50ED6328L},{0L,0x40CE7CD7L},{1L,0x40CE7CD7L},{0L,0x50ED6328L}},{{0xADA7BC83L,0x40CE7CD7L},{0L,0x40CE7CD7L},{0xADA7BC83L,0x50ED6328L},{0L,0x40CE7CD7L},{1L,0x40CE7CD7L},{0L,0x50ED6328L},{0xADA7BC83L,0x40CE7CD7L},{0L,0x40CE7CD7L},{0xADA7BC83L,0x50ED6328L}},{{0L,0x40CE7CD7L},{1L,0x40CE7CD7L},{0L,0x50ED6328L},{0xADA7BC83L,0x40CE7CD7L},{0L,0x50ED6328L},{1L,0xD0A14D25L},{0L,0x50ED6328L},{(-9L),0x50ED6328L},{0L,0xD0A14D25L}},{{1L,0x50ED6328L},{0x1F85E5ACL,0x50ED6328L},{1L,0xD0A14D25L},{0L,0x50ED6328L},{(-9L),0x50ED6328L},{0L,0xD0A14D25L},{1L,0x50ED6328L},{0x1F85E5ACL,0x50ED6328L},{1L,0xD0A14D25L}},{{0L,0x50ED6328L},{(-9L),0x50ED6328L},{0L,0xD0A14D25L},{1L,0x50ED6328L},{0x1F85E5ACL,0x50ED6328L},{1L,0xD0A14D25L},{0L,0x50ED6328L},{(-9L),0x50ED6328L},{0L,0xD0A14D25L}}};
            uint16_t *l_496 = &g_34;
            int i, j, k;
            (*l_488) = l_485[1];
            (*g_95) = func_37((p_6 ^ 0xE2F4L), (**g_396), l_430[0][6], ((safe_sub_func_uint32_t_u_u((safe_lshift_func_uint16_t_u_u(((*l_496) = (safe_mul_func_uint8_t_u_u(func_16(l_439, l_495[1][7][1], p_5, &g_70), 0UL))), g_25)), g_42.f1)) <= l_469));
            for (g_218 = 0; (g_218 <= 5); g_218 += 1)
            { /* block id: 355 */
                uint32_t l_498[10][6][2] = {{{0UL,0x4710D315L},{0xC89510DFL,18446744073709551614UL},{18446744073709551615UL,0x32FB2497L},{18446744073709551615UL,0UL},{1UL,0xA19F4CA6L},{18446744073709551614UL,1UL}},{{0UL,1UL},{0x243448FFL,0x243448FFL},{18446744073709551615UL,18446744073709551614UL},{0x0D81DB8EL,0x78E1239EL},{1UL,0x4710D315L},{1UL,1UL}},{{0x32FB2497L,18446744073709551615UL},{0x32FB2497L,1UL},{1UL,0x4710D315L},{1UL,0x78E1239EL},{0x0D81DB8EL,18446744073709551614UL},{18446744073709551615UL,0x243448FFL}},{{0x243448FFL,1UL},{0UL,1UL},{18446744073709551614UL,0xA19F4CA6L},{1UL,0UL},{18446744073709551615UL,0x32FB2497L},{18446744073709551615UL,18446744073709551614UL}},{{0xC89510DFL,0x4710D315L},{0xFF073B46L,18446744073709551614UL},{0UL,1UL},{18446744073709551615UL,0UL},{0xF99EA8BEL,0xFF073B46L},{0x78E1239EL,18446744073709551615UL}},{{1UL,18446744073709551615UL},{0x78E1239EL,0xFF073B46L},{0xF99EA8BEL,0UL},{18446744073709551615UL,1UL},{0UL,18446744073709551614UL},{0xFF073B46L,0x53B970BDL}},{{0x78E1239EL,18446744073709551610UL},{0xC89510DFL,18446744073709551615UL},{0UL,0xFF073B46L},{0x76FB5125L,18446744073709551614UL},{18446744073709551610UL,1UL},{0UL,18446744073709551612UL}},{{0xF99EA8BEL,0xF99EA8BEL},{0UL,18446744073709551610UL},{0xA19F4CA6L,18446744073709551615UL},{18446744073709551612UL,0x53B970BDL},{0x76FB5125L,18446744073709551612UL},{18446744073709551615UL,0xC89510DFL}},{{18446744073709551615UL,18446744073709551612UL},{0x76FB5125L,0x53B970BDL},{18446744073709551612UL,18446744073709551615UL},{0xA19F4CA6L,18446744073709551610UL},{0UL,0xF99EA8BEL},{0xF99EA8BEL,18446744073709551612UL}},{{0UL,1UL},{18446744073709551610UL,18446744073709551614UL},{0x76FB5125L,0xFF073B46L},{0UL,18446744073709551615UL},{0xC89510DFL,18446744073709551610UL},{0x78E1239EL,0x53B970BDL}}};
                int i, j, k;
                if ((*g_404))
                    break;
                l_498[0][0][0]--;
                l_501 = l_498[0][0][0];
            }
        }
        l_501 &= (func_21((((~p_6) , (safe_div_func_int32_t_s_s(p_6, ((l_504 , 0L) | ((void*)0 == g_505))))) , (safe_rshift_func_int8_t_s_u(0x75L, l_508)))) , p_6);
    }
    return (*g_170);
}


/* ------------------------------------------ */
/* 
 * reads : g_95 g_60 g_234 g_249 g_246 g_61 g_69 g_70 g_42.f3 g_42.f1 g_218 g_170 g_171 g_163.f1 g_34 g_163.f0 g_42 g_84 g_248 g_255
 * writes: g_60 g_70 g_78 g_34 g_163.f0 g_61 g_218 g_165 g_234 g_117 g_42.f1 g_255
 */
static int8_t * func_8(uint8_t  p_9, const uint32_t  p_10, const int8_t * p_11, union U0  p_12)
{ /* block id: 293 */
    int8_t l_406[2][8] = {{0x4CL,0x4CL,(-6L),0x4CL,0x4CL,(-6L),0x4CL,0x4CL},{0x31L,0x4CL,0x31L,0x31L,0x4CL,0x31L,0x31L,0x4CL}};
    int32_t *l_407 = &g_61[1][3][0];
    int32_t *l_408 = (void*)0;
    int32_t *l_409 = &g_61[3][1][1];
    int32_t *l_410 = &g_25;
    int32_t *l_411 = (void*)0;
    int32_t *l_412 = &g_25;
    int32_t *l_413 = &g_61[3][1][1];
    int32_t *l_414 = &g_255;
    int32_t *l_415 = &g_61[3][1][1];
    int32_t *l_416 = (void*)0;
    int32_t l_417[3][4][5];
    int32_t *l_418[6][10][1] = {{{(void*)0},{(void*)0},{(void*)0},{&g_61[1][4][2]},{(void*)0},{(void*)0},{(void*)0},{(void*)0},{&g_61[1][4][2]},{(void*)0}},{{(void*)0},{(void*)0},{(void*)0},{(void*)0},{&g_25},{&g_25},{(void*)0},{(void*)0},{(void*)0},{(void*)0}},{{(void*)0},{(void*)0},{(void*)0},{&g_25},{&g_25},{(void*)0},{(void*)0},{(void*)0},{(void*)0},{(void*)0}},{{(void*)0},{(void*)0},{&g_25},{&g_25},{(void*)0},{(void*)0},{(void*)0},{(void*)0},{(void*)0},{(void*)0}},{{(void*)0},{&g_25},{&g_25},{(void*)0},{(void*)0},{(void*)0},{(void*)0},{(void*)0},{(void*)0},{(void*)0}},{{&g_25},{&g_25},{(void*)0},{(void*)0},{(void*)0},{(void*)0},{(void*)0},{(void*)0},{(void*)0},{&g_25}}};
    int16_t l_419 = 0x46F3L;
    int32_t l_420 = 0xEFAEA218L;
    int32_t l_421 = 0xF0C3CF87L;
    int32_t l_422 = 0xF5496424L;
    int8_t l_423 = (-7L);
    uint32_t l_424 = 0xBE103C84L;
    union U2 l_427 = {0x21442813L};
    int i, j, k;
    for (i = 0; i < 3; i++)
    {
        for (j = 0; j < 4; j++)
        {
            for (k = 0; k < 5; k++)
                l_417[i][j][k] = 0xF85FD576L;
        }
    }
    l_406[1][3] ^= p_9;
    (*g_95) = l_407;
    l_424--;
    (*l_414) &= func_27(p_9, (*g_95), l_427, (*g_95), ((&g_387 == (l_427 , &g_380)) != ((((p_12.f1 <= (0x201B5C96L > p_9)) >= g_234) ^ (*g_249)) , 0x9438L)));
    return &g_117;
}


/* ------------------------------------------ */
/* 
 * reads : g_61
 * writes: g_404
 */
static const int8_t  func_16(union U0  p_17, uint8_t  p_18, int8_t * p_19, int8_t * p_20)
{ /* block id: 197 */
    uint16_t l_302[6][3] = {{1UL,1UL,1UL},{0UL,0UL,0UL},{1UL,1UL,1UL},{0UL,0UL,0UL},{1UL,1UL,1UL},{0UL,0UL,0UL}};
    int32_t *l_342[5][7][4] = {{{&g_255,&g_61[3][1][1],&g_61[2][3][3],&g_25},{&g_61[3][1][1],&g_25,&g_255,&g_255},{&g_255,&g_255,&g_255,&g_255},{&g_255,&g_255,&g_255,&g_255},{&g_255,&g_25,&g_61[3][1][1],&g_25},{&g_61[2][3][3],&g_61[3][1][1],&g_255,&g_61[3][1][1]},{&g_61[2][3][3],&g_255,&g_61[3][1][1],(void*)0}},{{&g_61[5][4][3],&g_255,&g_61[4][5][1],&g_25},{&g_255,(void*)0,&g_255,&g_25},{&g_61[4][5][1],&g_255,&g_61[5][4][3],(void*)0},{&g_61[2][3][3],&g_25,&g_255,&g_255},{&g_25,(void*)0,&g_255,&g_61[3][1][1]},{&g_61[2][3][3],&g_25,&g_61[5][4][3],&g_25},{&g_61[4][5][1],&g_25,&g_255,&g_25}},{{&g_255,&g_25,&g_61[4][5][1],&g_25},{&g_61[5][4][3],&g_25,&g_61[2][3][3],&g_61[3][1][1]},{&g_255,(void*)0,&g_25,&g_255},{&g_255,&g_25,&g_61[2][3][3],(void*)0},{&g_61[5][4][3],&g_255,&g_61[4][5][1],&g_25},{&g_255,(void*)0,&g_255,&g_25},{&g_61[4][5][1],&g_255,&g_61[5][4][3],(void*)0}},{{&g_61[2][3][3],&g_25,&g_255,&g_255},{&g_25,(void*)0,&g_255,&g_61[3][1][1]},{&g_61[2][3][3],&g_25,&g_61[5][4][3],&g_25},{&g_61[4][5][1],&g_25,&g_255,&g_25},{&g_255,&g_25,&g_61[4][5][1],&g_25},{&g_61[5][4][3],&g_25,&g_61[2][3][3],&g_61[3][1][1]},{&g_255,(void*)0,&g_25,&g_255}},{{&g_255,&g_25,&g_61[2][3][3],(void*)0},{&g_61[5][4][3],&g_255,&g_61[4][5][1],&g_25},{&g_255,(void*)0,&g_61[4][5][1],&g_255},{&g_61[3][1][1],&g_61[3][1][1],&g_25,&g_25},{&g_255,&g_61[3][1][1],&g_255,&g_61[3][1][1]},{&g_61[5][1][3],&g_25,&g_255,&g_255},{&g_255,(void*)0,&g_25,&g_61[3][1][1]}}};
    const union U2 *l_352 = &g_42;
    uint16_t *l_377 = &g_165[1];
    uint16_t **l_376[4][4] = {{&l_377,(void*)0,&l_377,(void*)0},{&l_377,(void*)0,&l_377,(void*)0},{&l_377,(void*)0,&l_377,(void*)0},{&l_377,(void*)0,&l_377,(void*)0}};
    uint32_t l_393 = 4294967290UL;
    const uint8_t *l_398 = &g_42.f2;
    int8_t **l_401 = &g_69;
    int8_t ***l_402 = &l_401;
    const int32_t *l_403 = &g_61[3][1][1];
    int i, j, k;
    for (p_18 = 25; (p_18 < 17); p_18 = safe_sub_func_uint32_t_u_u(p_18, 5))
    { /* block id: 200 */
        int32_t l_308 = 0xDC603431L;
        int32_t l_309 = 0x1C33B4EEL;
        union U1 *l_336 = &g_84;
        int32_t l_388 = 4L;
        uint8_t * const l_399 = &g_42.f2;
        int8_t **l_400 = &g_69;
    }
    (*l_402) = l_401;
    g_404 = (p_17.f1 , l_403);
    return (*l_403);
}


/* ------------------------------------------ */
/* 
 * reads :
 * writes: g_25
 */
static union U0  func_21(uint32_t  p_22)
{ /* block id: 1 */
    int32_t *l_24 = &g_25;
    union U0 l_26 = {-3L};
    (*l_24) = p_22;
    return l_26;
}


/* ------------------------------------------ */
/* 
 * reads : g_61 g_69 g_70 g_42.f3 g_42.f1 g_218 g_170 g_171 g_163.f1 g_95 g_34 g_163.f0 g_42 g_84 g_248 g_246 g_234 g_249 g_78 g_117
 * writes: g_70 g_78 g_34 g_163.f0 g_61 g_60 g_218 g_165 g_234 g_117 g_42.f1
 */
static int8_t  func_27(uint16_t  p_28, int32_t * p_29, union U2  p_30, int32_t * const  p_31, int32_t  p_32)
{ /* block id: 106 */
    union U1 *l_177 = &g_84;
    union U1 **l_176 = &l_177;
    int32_t *l_178 = &g_61[3][1][1];
    int8_t *l_181[8] = {&g_163.f0,&g_163.f0,&g_163.f0,&g_163.f0,&g_163.f0,&g_163.f0,&g_163.f0,&g_163.f0};
    int32_t *l_182 = &g_61[3][1][1];
    union U2 l_252 = {8L};
    int32_t l_275 = 0x343AA78CL;
    int32_t l_277 = 0xE7E876F0L;
    int32_t l_289 = 0x3867B030L;
    int32_t l_290 = 0x04B24578L;
    int32_t l_291 = (-6L);
    int32_t l_292 = 0xE153FDD8L;
    int i;
lbl_256:
    if (((+0x7E10L) ^ ((l_176 != (((*g_69) &= (*l_182)) , &l_177)) || (*l_178))))
    { /* block id: 108 */
        uint32_t l_193 = 18446744073709551606UL;
        int32_t l_194 = 3L;
        for (g_78 = 0; (g_78 <= (-16)); g_78 = safe_sub_func_int32_t_s_s(g_78, 2))
        { /* block id: 111 */
            int8_t l_192 = 0L;
            for (g_34 = 0; (g_34 <= 7); g_34 += 1)
            { /* block id: 114 */
                return (*l_178);
            }
            for (p_32 = 25; (p_32 == (-30)); p_32 = safe_sub_func_int32_t_s_s(p_32, 2))
            { /* block id: 119 */
                for (g_163.f0 = 0; (g_163.f0 != (-23)); g_163.f0 = safe_sub_func_int16_t_s_s(g_163.f0, 4))
                { /* block id: 122 */
                    int8_t l_189 = (-3L);
                    for (g_34 = 0; (g_34 <= 3); g_34 += 1)
                    { /* block id: 125 */
                        (*l_176) = &g_84;
                    }
                    if (l_189)
                        break;
                }
                if ((*l_178))
                    break;
            }
            (*l_178) = (*p_31);
            for (g_70 = 0; (g_70 < 3); ++g_70)
            { /* block id: 135 */
                l_192 = 0x42813DB6L;
            }
        }
        for (p_32 = 7; (p_32 >= 0); p_32 -= 1)
        { /* block id: 141 */
            return p_30.f0;
        }
        l_194 = (~l_193);
        return l_194;
    }
    else
    { /* block id: 146 */
        int8_t l_197[10] = {1L,0x3CL,1L,(-1L),(-1L),1L,0x3CL,1L,(-1L),(-1L)};
        int32_t *l_198 = &g_61[3][1][1];
        union U0 l_199[1] = {{0xDFL}};
        int32_t *l_200 = (void*)0;
        union U2 l_201[10] = {{0x8373BB44L},{0x8373BB44L},{0x8373BB44L},{0x8373BB44L},{0x8373BB44L},{0x8373BB44L},{0x8373BB44L},{0x8373BB44L},{0x8373BB44L},{0x8373BB44L}};
        uint16_t *l_224 = &g_34;
        uint8_t *l_232 = (void*)0;
        uint8_t ** const l_231 = &l_232;
        union U1 l_240 = {0};
        int i;
        if (((*l_178) = (safe_mul_func_uint16_t_u_u(((l_197[9] && func_50(l_198, (*l_182), (l_199[0] , p_30.f2), l_200, l_201[2])) >= (safe_mul_func_int8_t_s_s((*l_178), 0x2EL))), (*l_198)))))
        { /* block id: 148 */
            return (*l_198);
        }
        else
        { /* block id: 150 */
            uint8_t l_204 = 0xA3L;
            uint32_t *l_217[3];
            union U2 l_223 = {0x3A80E33CL};
            uint16_t **l_225 = &l_224;
            int i;
            for (i = 0; i < 3; i++)
                l_217[i] = &l_201[2].f1;
lbl_226:
            l_204--;
            if (g_42.f3)
                goto lbl_256;
            if (((*l_178) = (safe_sub_func_uint8_t_u_u((safe_add_func_uint16_t_u_u(g_42.f1, (g_165[6] = ((*l_198) >= ((safe_add_func_int32_t_s_s(0xBBEC7243L, (safe_lshift_func_int8_t_s_u(((((safe_mul_func_uint16_t_u_u(1UL, (*l_198))) < (++g_218)) && ((*g_170) ^ ((*g_69) = (safe_add_func_uint8_t_u_u(0UL, (l_223 , (((*l_225) = l_224) == &g_34))))))) == 0UL), (*g_170))))) , 0xACD3L))))), (*l_198)))))
            { /* block id: 157 */
                return (*l_182);
            }
            else
            { /* block id: 159 */
                int16_t *l_233 = &g_234;
                int32_t l_235 = (-9L);
                if (g_218)
                    goto lbl_226;
                (*l_198) = (func_50(((*g_95) = l_217[0]), g_61[0][4][3], ((((safe_add_func_uint32_t_u_u(g_42.f3, (p_30 , (((*l_224) ^= (*l_182)) ^ g_163.f0)))) , (((*l_198) | ((((*l_233) = ((safe_add_func_uint16_t_u_u((((l_231 == &g_170) && 1L) != p_28), 0x6AFEL)) , p_30.f3)) , (*g_69)) > (*l_178))) ^ 0xE3L)) == (*g_69)) > l_235), l_178, g_42) , 0x23B8671DL);
            }
        }
        for (g_117 = (-4); (g_117 <= 25); ++g_117)
        { /* block id: 169 */
            int16_t *l_245 = &g_246;
            int16_t **l_247[2];
            int32_t *l_250 = &g_61[3][1][1];
            int32_t l_253[6] = {0x4B38AC99L,0x4B38AC99L,0x12668D6FL,0x4B38AC99L,0x4B38AC99L,0x12668D6FL};
            int32_t *l_254 = &g_255;
            int i;
            for (i = 0; i < 2; i++)
                l_247[i] = &l_245;
        }
    }
    for (p_32 = 0; (p_32 > (-13)); p_32 = safe_sub_func_int32_t_s_s(p_32, 5))
    { /* block id: 181 */
        uint8_t l_264 = 0x45L;
        int32_t l_272 = (-8L);
        int32_t l_287[1][4] = {{0L,0L,0L,0L}};
        int16_t l_288 = (-1L);
        uint32_t l_293 = 0xA6770327L;
        int i, j;
        for (p_28 = 1; (p_28 <= 7); p_28 += 1)
        { /* block id: 184 */
            const union U1 *l_263[9] = {&g_84,&g_84,&g_84,&g_84,&g_84,&g_84,&g_84,&g_84,&g_84};
            int32_t l_265 = 0x3B5E6BF7L;
            uint32_t *l_268 = &l_252.f1;
            int16_t *l_271 = &g_234;
            int32_t l_273 = 0x7167734CL;
            int32_t *l_274 = (void*)0;
            int32_t *l_276 = &g_255;
            int32_t *l_278 = &l_273;
            int32_t *l_279 = &g_255;
            int32_t *l_280 = (void*)0;
            int32_t *l_281 = &g_61[4][3][1];
            int32_t *l_282 = &l_275;
            int32_t *l_283 = &l_265;
            int32_t *l_284 = &l_275;
            int32_t *l_285 = &l_277;
            int32_t *l_286[9][2] = {{&l_275,&g_255},{&g_61[3][1][1],&g_61[3][1][1]},{&g_255,&l_275},{&g_61[4][1][1],&l_275},{&g_255,&g_61[3][1][1]},{&g_61[3][1][1],&g_255},{&l_275,&g_255},{&l_265,&l_275},{&g_255,&g_255}};
            int i, j;
            l_273 |= ((p_32 ^ (p_32 != (safe_lshift_func_uint16_t_u_u(((safe_rshift_func_uint16_t_u_s((((void*)0 != l_263[4]) != ((*l_177) , (l_264 = ((g_42.f1 = p_28) | (*p_31))))), 14)) | l_265), ((safe_add_func_uint16_t_u_u(((++(*l_268)) , (((*l_271) ^= (*g_248)) <= l_272)), (*g_249))) || l_272))))) || 0x9B2CL);
            if ((*l_182))
                continue;
            l_293++;
            (*l_182) |= l_272;
        }
    }
    return (*l_182);
}


/* ------------------------------------------ */
/* 
 * reads : g_117 g_163 g_61 g_69 g_70 g_42 g_42.f3
 * writes: g_170 g_61 g_60
 */
static int32_t * func_37(const uint16_t  p_38, union U2  p_39, int32_t * p_40, int32_t  p_41)
{ /* block id: 101 */
    int32_t ***l_159 = &g_95;
    int32_t l_160 = 0x1B0D62F1L;
    uint16_t *l_164 = &g_165[4];
    const uint8_t *l_168 = &g_163.f1;
    const uint8_t **l_169[5];
    const uint8_t l_172[4] = {0x82L,0x82L,0x82L,0x82L};
    int32_t *l_173 = &g_61[3][1][1];
    uint32_t l_174 = 18446744073709551614UL;
    int i;
    for (i = 0; i < 5; i++)
        l_169[i] = &l_168;
    (*l_173) = ((safe_div_func_uint8_t_u_u(p_39.f3, (safe_lshift_func_int16_t_s_u(g_117, ((((void*)0 != l_159) <= l_160) == (safe_lshift_func_int16_t_s_u((((g_163 , l_164) == &p_38) && (safe_lshift_func_uint16_t_u_s(((g_170 = l_168) != (void*)0), 0))), 6))))))) >= l_172[3]);
    (*l_173) = ((*l_173) & ((func_50(p_40, ((*g_69) , l_174), (*g_69), &l_160, g_42) != (g_61[7][0][3] , p_39.f2)) <= 0xEEL));
    return p_40;
}


/* ------------------------------------------ */
/* 
 * reads : g_69 g_70 g_61 g_60 g_42.f3 g_42.f2 g_78 g_94 g_23 g_117 g_95
 * writes: g_78 g_61 g_60 g_117
 */
static int32_t * func_43(uint8_t  p_44, int8_t  p_45, int8_t * p_46)
{ /* block id: 15 */
    int32_t *l_71 = &g_61[3][1][1];
    int32_t *l_72 = (void*)0;
    int32_t *l_73[9][8] = {{&g_61[3][1][1],(void*)0,(void*)0,&g_61[1][4][3],&g_61[0][3][1],&g_61[4][3][1],&g_61[6][4][2],&g_61[4][2][0]},{&g_61[2][4][2],(void*)0,(void*)0,&g_61[0][3][1],&g_61[0][3][1],(void*)0,(void*)0,&g_61[2][4][2]},{&g_61[3][1][1],&g_61[2][4][2],&g_61[3][1][2],&g_61[4][2][0],(void*)0,(void*)0,(void*)0,&g_61[1][2][0]},{(void*)0,(void*)0,(void*)0,(void*)0,&g_61[4][2][0],(void*)0,(void*)0,(void*)0},{&g_61[4][3][1],&g_61[2][4][2],&g_61[1][2][0],&g_61[3][0][0],&g_61[3][1][1],(void*)0,(void*)0,(void*)0},{(void*)0,(void*)0,&g_61[0][3][1],(void*)0,&g_61[4][3][1],&g_61[4][3][1],(void*)0,&g_61[0][3][1]},{(void*)0,(void*)0,&g_61[1][2][0],(void*)0,&g_61[1][4][3],&g_61[3][1][2],(void*)0,(void*)0},{&g_61[1][4][3],&g_61[3][1][2],(void*)0,(void*)0,(void*)0,&g_61[0][3][1],(void*)0,(void*)0},{&g_61[3][1][2],&g_61[1][2][0],&g_61[3][1][2],(void*)0,&g_61[6][4][2],(void*)0,(void*)0,&g_61[0][3][1]}};
    uint32_t l_74 = 0xFA7F9CD9L;
    int32_t *l_77 = &g_78;
    int32_t l_79 = 1L;
    union U1 *l_86[5];
    int32_t ***l_96 = &g_95;
    int8_t l_106 = 8L;
    int8_t l_119[6] = {9L,0L,9L,9L,0L,9L};
    union U2 l_120 = {-5L};
    int32_t *l_134 = &g_61[3][1][1];
    int i, j;
    for (i = 0; i < 5; i++)
        l_86[i] = &g_84;
lbl_87:
    l_74--;
    l_79 ^= (((*l_77) = ((*g_69) || ((*l_71) < 0x14A1L))) , (*g_60));
    if ((g_42.f3 <= (1UL & (0xF049L <= g_42.f2))))
    { /* block id: 19 */
        union U1 *l_83 = &g_84;
        int32_t l_90 = 0L;
        for (p_45 = 0; (p_45 < (-22)); p_45--)
        { /* block id: 22 */
            int32_t *l_88 = &g_61[3][1][1];
            for (l_79 = 6; (l_79 >= 0); l_79 -= 1)
            { /* block id: 25 */
                int i, j;
                l_73[(l_79 + 1)][l_79] = l_73[l_79][(l_79 + 1)];
                if (p_45)
                { /* block id: 27 */
                    const int16_t l_82 = (-10L);
                    for (g_78 = 7; (g_78 >= 0); g_78 -= 1)
                    { /* block id: 30 */
                        union U1 **l_85[4] = {(void*)0,(void*)0,(void*)0,(void*)0};
                        int i;
                        (*g_60) = l_82;
                        l_86[4] = ((p_45 <= g_70) , l_83);
                    }
                    if (g_42.f3)
                        goto lbl_87;
                    return l_88;
                }
                else
                { /* block id: 36 */
                    int32_t l_89 = 1L;
                    int i, j;
                    l_73[(l_79 + 1)][(l_79 + 1)] = (l_89 , l_73[l_79][(l_79 + 1)]);
                    if (p_44)
                        break;
                }
            }
            if (l_90)
                break;
            (*l_71) |= (safe_lshift_func_int8_t_s_s(l_90, 2));
        }
    }
    else
    { /* block id: 44 */
        int32_t l_93 = 0x63BE35A8L;
        int32_t l_98 = (-9L);
        int32_t l_99 = 0xE0221BC3L;
        int32_t l_100 = 0xE0F627EEL;
        int32_t l_103 = 7L;
        int32_t l_104 = 0xBAAC5CA8L;
        int32_t l_105 = 0xA126CF24L;
        union U2 l_115 = {4L};
        int32_t *l_128 = &l_93;
        int32_t *l_133 = &l_100;
        if ((((l_93 , g_94[0]) != l_96) <= 5L))
        { /* block id: 45 */
            int32_t l_97 = 0xA0849DA6L;
            int32_t l_101 = 1L;
            int32_t l_102[5] = {(-1L),(-1L),(-1L),(-1L),(-1L)};
            uint8_t l_107 = 8UL;
            int32_t *l_112 = &l_99;
            uint8_t *l_116[10][4][4] = {{{&l_107,&l_107,&g_23,&l_115.f2},{&g_42.f2,&g_23,(void*)0,&l_107},{&g_42.f2,(void*)0,&g_23,&g_42.f2},{&l_107,&l_115.f2,(void*)0,&l_115.f2}},{{(void*)0,&l_115.f2,(void*)0,&g_42.f2},{&l_107,(void*)0,(void*)0,&l_107},{&l_107,&g_23,(void*)0,&l_115.f2},{&l_107,&l_107,(void*)0,(void*)0}},{{(void*)0,(void*)0,(void*)0,(void*)0},{&l_107,&l_107,&g_23,&l_115.f2},{&g_42.f2,&g_23,(void*)0,&l_107},{&g_42.f2,(void*)0,&g_23,&g_42.f2}},{{&l_107,&l_115.f2,(void*)0,&l_115.f2},{(void*)0,&l_115.f2,(void*)0,&g_42.f2},{&l_107,(void*)0,(void*)0,&l_107},{&l_107,&g_23,(void*)0,&l_115.f2}},{{&l_107,&l_107,(void*)0,(void*)0},{(void*)0,(void*)0,(void*)0,(void*)0},{&l_107,&l_107,&g_23,&l_115.f2},{&g_42.f2,&g_23,(void*)0,&l_107}},{{&g_42.f2,(void*)0,&g_23,&g_42.f2},{&l_107,&l_115.f2,(void*)0,&l_115.f2},{(void*)0,&l_115.f2,(void*)0,&g_42.f2},{&l_107,(void*)0,(void*)0,&g_42.f2}},{{&l_115.f2,&l_107,(void*)0,&g_23},{&g_42.f2,&l_115.f2,&l_107,&l_107},{&l_107,(void*)0,&g_23,&l_107},{&l_115.f2,&l_115.f2,(void*)0,&g_23}},{{(void*)0,&l_107,&l_107,&g_42.f2},{(void*)0,(void*)0,(void*)0,(void*)0},{&l_115.f2,&g_23,&g_23,&g_23},{&l_107,&g_23,&l_107,(void*)0}},{{&g_42.f2,(void*)0,(void*)0,&g_42.f2},{&l_115.f2,&l_107,(void*)0,&g_23},{&g_42.f2,&l_115.f2,&l_107,&l_107},{&l_107,(void*)0,&g_23,&l_107}},{{&l_115.f2,&l_115.f2,(void*)0,&g_23},{(void*)0,&l_107,&l_107,&g_42.f2},{(void*)0,(void*)0,(void*)0,(void*)0},{&l_115.f2,&g_23,&g_23,&g_23}}};
            int8_t *l_118 = &l_106;
            union U2 l_121 = {0xF3683EEDL};
            uint32_t l_123 = 0x382ABCCDL;
            int32_t *l_131 = &l_104;
            int i, j, k;
            l_107--;
            l_101 &= ((safe_mod_func_int8_t_s_s((*p_46), (-1L))) == func_50(l_112, l_99, (safe_sub_func_int16_t_s_s(((0xD7L ^ (func_50(&l_99, g_42.f3, (((*l_118) = ((((g_117 |= (func_50(&l_102[2], (g_78 , g_23), (*g_69), &l_100, l_115) > g_42.f2)) , p_45) || 0x8DL) <= (-1L))) , l_119[2]), &l_101, l_120) , l_115.f2)) && 65535UL), 0x1D2AL)), &l_93, l_121));
            if (p_44)
            { /* block id: 50 */
                int8_t l_122 = 1L;
                union U2 *l_127[5] = {(void*)0,(void*)0,(void*)0,(void*)0,(void*)0};
                union U2 **l_126 = &l_127[3];
                int32_t *l_129 = &l_102[2];
                int32_t *l_130 = &l_104;
                int32_t *l_132 = &l_101;
                int i;
                l_123--;
                (*l_126) = &g_42;
                return l_134;
            }
            else
            { /* block id: 54 */
                uint16_t l_135 = 65535UL;
                int32_t l_138 = (-1L);
                if ((0L == 1L))
                { /* block id: 55 */
                    for (l_98 = 5; (l_98 >= 1); l_98 -= 1)
                    { /* block id: 58 */
                        int i;
                        if (l_119[l_98])
                            break;
                    }
                    ++l_135;
                }
                else
                { /* block id: 62 */
                    int8_t l_142[10][6][4] = {{{0x71L,(-2L),0xA5L,0x84L},{(-9L),(-2L),0x0DL,1L},{0x80L,0L,0x3EL,5L},{0x71L,1L,9L,1L},{0x97L,(-4L),0x4CL,0x5CL},{0x45L,0x38L,0x71L,0xF5L}},{{0xA5L,0xA5L,1L,1L},{0L,0L,0x97L,(-1L)},{0x85L,0xBBL,0xE4L,0x3EL},{6L,0L,1L,0xE4L},{(-8L),0L,5L,0x3EL},{0L,0xBBL,(-1L),(-1L)}},{{0x4CL,0L,(-1L),1L},{0x84L,0xA5L,(-2L),0x71L},{(-1L),0x6FL,6L,8L},{1L,0x9DL,0x83L,0xFBL},{0L,0xDAL,(-2L),0L},{0x85L,0xF9L,1L,0xDAL}},{{0x18L,7L,0x4CL,0x83L},{0x78L,0x16L,(-2L),0x3EL},{0L,0x6DL,0x72L,0L},{1L,1L,(-1L),(-1L)},{0L,0x97L,(-2L),(-8L)},{0xA4L,(-1L),0x18L,0xA4L}},{{0x4CL,0xA5L,0x25L,0x97L},{1L,0xDAL,5L,0x31L},{9L,1L,0x83L,0x38L},{6L,0x84L,0x0DL,0x97L},{0x78L,1L,0x97L,0xDAL},{7L,(-1L),0x6FL,(-1L)}},{{0x1CL,(-8L),0x34L,0xB9L},{0x3EL,0x16L,1L,0x16L},{7L,0x34L,(-1L),0x31L},{0x8BL,(-1L),0x6FL,(-1L)},{(-1L),0x9DL,(-3L),1L},{(-1L),0L,0x6FL,0x78L}},{{0x8BL,1L,(-1L),9L},{7L,0L,1L,0x71L},{0x3EL,0x0DL,0x34L,0x85L},{1L,8L,0x0DL,0x6DL},{0x3EL,1L,(-7L),7L},{0x84L,1L,0x8BL,0x31L}},{{(-1L),0x16L,(-1L),0xBBL},{0L,0x97L,0x15L,0x38L},{0x97L,1L,0x6FL,0L},{0xE4L,0x3EL,0L,0x6DL},{0L,0x38L,0x5CL,0x78L},{0L,0x0DL,0L,0x03L}},{{0L,0x39L,0x18L,9L},{0x3EL,0L,(-9L),0xF8L},{0x84L,0L,0xE4L,0L},{0L,1L,0x6DL,(-1L)},{0xA4L,(-8L),(-9L),0x38L},{0xA5L,0x34L,(-1L),0x97L}},{{0x15L,1L,(-7L),0x1CL},{0L,(-1L),9L,0L},{(-1L),0x80L,0x80L,(-1L)},{1L,0x4CL,0x0BL,(-4L)},{1L,0L,0x85L,0xE4L},{(-1L),0x4FL,0x15L,0xE4L}}};
                    int i, j, k;
                    if (((*g_60) = (**g_95)))
                    { /* block id: 64 */
                        (*l_134) = (p_44 , func_50((**l_96), (*l_133), l_135, (**l_96), l_120));
                        l_138 = ((l_133 != (void*)0) & p_45);
                    }
                    else
                    { /* block id: 67 */
                        int32_t *l_141[6] = {&l_102[1],&l_102[1],&l_102[1],&l_102[1],&l_102[1],&l_102[1]};
                        int i;
                        (*l_131) &= (*l_134);
                        (***l_96) = ((safe_rshift_func_uint8_t_u_s((p_44 = (((void*)0 == l_141[2]) , (l_142[0][3][1] = (*l_112)))), (*g_69))) || (-8L));
                        (*l_134) |= p_44;
                    }
                }
                for (l_107 = 0; (l_107 <= 37); l_107++)
                { /* block id: 77 */
                    (**g_95) = (((p_44++) , (&g_95 == (void*)0)) & (*g_69));
                    for (l_93 = 0; l_93 < 6; l_93 += 1)
                    {
                        l_119[l_93] = 0xC6L;
                    }
                }
                for (l_100 = 4; (l_100 >= 0); l_100 -= 1)
                { /* block id: 84 */
                    int32_t *l_147 = &l_104;
                    int32_t *l_148 = (void*)0;
                    return l_148;
                }
                (*g_95) = (**l_96);
            }
            for (g_117 = 0; (g_117 != (-14)); g_117--)
            { /* block id: 91 */
                uint32_t l_151 = 0x6CEBD2D5L;
                int32_t l_154 = 0x9DA40672L;
                ++l_151;
                l_154 = (p_45 >= (*l_133));
            }
        }
        else
        { /* block id: 95 */
            return (*g_95);
        }
    }
    (*l_71) |= (-1L);
    return l_73[2][6];
}


/* ------------------------------------------ */
/* 
 * reads : g_42.f3
 * writes: g_60
 */
static uint16_t  func_50(int32_t * p_51, uint16_t  p_52, int8_t  p_53, int32_t * p_54, union U2  p_55)
{ /* block id: 8 */
    for (p_53 = 0; (p_53 < (-11)); p_53 = safe_sub_func_uint8_t_u_u(p_53, 9))
    { /* block id: 11 */
        int32_t **l_67 = (void*)0;
        int32_t **l_68 = &g_60;
        (*l_68) = p_54;
    }
    return g_42.f3;
}


/* ------------------------------------------ */
/* 
 * reads :
 * writes:
 */
static int32_t * func_56(int8_t * p_57, int32_t * p_58)
{ /* block id: 5 */
    int32_t **l_62 = (void*)0;
    int32_t ***l_63 = &l_62;
    (*l_63) = l_62;
    return p_58;
}




/* ---------------------------------------- */
int main (int argc, char* argv[])
{
    int i, j, k;
    int print_hash_value = 0;
    if (argc == 2 && strcmp(argv[1], "1") == 0) print_hash_value = 1;
    platform_main_begin();
    crc32_gentab();
    func_1();
    transparent_crc(g_23, "g_23", print_hash_value);
    transparent_crc(g_25, "g_25", print_hash_value);
    transparent_crc(g_34, "g_34", print_hash_value);
    transparent_crc(g_42.f2, "g_42.f2", print_hash_value);
    for (i = 0; i < 8; i++)
    {
        for (j = 0; j < 6; j++)
        {
            for (k = 0; k < 4; k++)
            {
                transparent_crc(g_61[i][j][k], "g_61[i][j][k]", print_hash_value);
                if (print_hash_value) printf("index = [%d][%d][%d]\n", i, j, k);

            }
        }
    }
    transparent_crc(g_70, "g_70", print_hash_value);
    transparent_crc(g_78, "g_78", print_hash_value);
    transparent_crc(g_117, "g_117", print_hash_value);
    transparent_crc(g_163.f0, "g_163.f0", print_hash_value);
    transparent_crc(g_163.f1, "g_163.f1", print_hash_value);
    for (i = 0; i < 7; i++)
    {
        transparent_crc(g_165[i], "g_165[i]", print_hash_value);
        if (print_hash_value) printf("index = [%d]\n", i);

    }
    for (i = 0; i < 4; i++)
    {
        for (j = 0; j < 8; j++)
        {
            for (k = 0; k < 3; k++)
            {
                transparent_crc(g_171[i][j][k], "g_171[i][j][k]", print_hash_value);
                if (print_hash_value) printf("index = [%d][%d][%d]\n", i, j, k);

            }
        }
    }
    transparent_crc(g_218, "g_218", print_hash_value);
    transparent_crc(g_234, "g_234", print_hash_value);
    transparent_crc(g_246, "g_246", print_hash_value);
    transparent_crc(g_255, "g_255", print_hash_value);
    transparent_crc(g_380, "g_380", print_hash_value);
    transparent_crc(g_387, "g_387", print_hash_value);
    for (i = 0; i < 4; i++)
    {
        for (j = 0; j < 1; j++)
        {
            transparent_crc(g_405[i][j].f0, "g_405[i][j].f0", print_hash_value);
            transparent_crc(g_405[i][j].f1, "g_405[i][j].f1", print_hash_value);
            if (print_hash_value) printf("index = [%d][%d]\n", i, j);

        }
    }
    transparent_crc(g_471, "g_471", print_hash_value);
    transparent_crc(g_555, "g_555", print_hash_value);
    for (i = 0; i < 9; i++)
    {
        transparent_crc(g_556[i], "g_556[i]", print_hash_value);
        if (print_hash_value) printf("index = [%d]\n", i);

    }
    platform_main_end(crc32_context ^ 0xFFFFFFFFUL, print_hash_value);
    return 0;
}

/************************ statistics *************************
XXX max struct depth: 0
breakdown:
   depth: 0, occurrence: 231
XXX total union variables: 28

XXX non-zero bitfields defined in structs: 0
XXX zero bitfields defined in structs: 0
XXX const bitfields defined in structs: 0
XXX volatile bitfields defined in structs: 0
XXX structs with bitfields in the program: 0
breakdown:
XXX full-bitfields structs in the program: 0
breakdown:
XXX times a bitfields struct's address is taken: 0
XXX times a bitfields struct on LHS: 0
XXX times a bitfields struct on RHS: 0
XXX times a single bitfield on LHS: 0
XXX times a single bitfield on RHS: 0

XXX max expression depth: 45
breakdown:
   depth: 1, occurrence: 161
   depth: 2, occurrence: 47
   depth: 3, occurrence: 4
   depth: 4, occurrence: 3
   depth: 5, occurrence: 2
   depth: 6, occurrence: 1
   depth: 7, occurrence: 2
   depth: 10, occurrence: 2
   depth: 11, occurrence: 1
   depth: 12, occurrence: 1
   depth: 14, occurrence: 2
   depth: 15, occurrence: 1
   depth: 16, occurrence: 2
   depth: 17, occurrence: 1
   depth: 18, occurrence: 1
   depth: 19, occurrence: 1
   depth: 20, occurrence: 1
   depth: 25, occurrence: 1
   depth: 27, occurrence: 1
   depth: 28, occurrence: 1
   depth: 30, occurrence: 1
   depth: 34, occurrence: 1
   depth: 45, occurrence: 1

XXX total number of pointers: 222

XXX times a variable address is taken: 413
XXX times a pointer is dereferenced on RHS: 116
breakdown:
   depth: 1, occurrence: 105
   depth: 2, occurrence: 10
   depth: 3, occurrence: 1
XXX times a pointer is dereferenced on LHS: 91
breakdown:
   depth: 1, occurrence: 89
   depth: 2, occurrence: 1
   depth: 3, occurrence: 1
XXX times a pointer is compared with null: 9
XXX times a pointer is compared with address of another variable: 1
XXX times a pointer is compared with another pointer: 3
XXX times a pointer is qualified to be dereferenced: 2461

XXX max dereference level: 3
breakdown:
   level: 0, occurrence: 0
   level: 1, occurrence: 541
   level: 2, occurrence: 44
   level: 3, occurrence: 6
XXX number of pointers point to pointers: 37
XXX number of pointers point to scalars: 174
XXX number of pointers point to structs: 0
XXX percent of pointers has null in alias set: 30.2
XXX average alias set size: 1.65

XXX times a non-volatile is read: 686
XXX times a non-volatile is write: 318
XXX times a volatile is read: 0
XXX    times read thru a pointer: 0
XXX times a volatile is write: 0
XXX    times written thru a pointer: 0
XXX times a volatile is available for access: 0
XXX percentage of non-volatile access: 100

XXX forward jumps: 1
XXX backward jumps: 2

XXX stmts: 167
XXX max block depth: 5
breakdown:
   depth: 0, occurrence: 32
   depth: 1, occurrence: 19
   depth: 2, occurrence: 34
   depth: 3, occurrence: 34
   depth: 4, occurrence: 23
   depth: 5, occurrence: 25

XXX percentage a fresh-made variable is used: 17.7
XXX percentage an existing variable is used: 82.3
********************* end of statistics **********************/

