/*
 * Copyright 2014 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: bf42ffd
 * Options:   --no-volatiles --no-packed-struct
 * Seed:      642934944
 */

#include "csmith.h"


static long __undefined;

/* --- Struct/Union Declarations --- */
union U0 {
   int8_t  f0;
   int8_t  f1;
   int16_t  f2;
   int8_t  f3;
};

/* --- GLOBAL VARIABLES --- */
static int32_t g_4[5] = {0x21DED680L,0x21DED680L,0x21DED680L,0x21DED680L,0x21DED680L};
static int32_t g_20 = 0L;
static int32_t g_67[7] = {2L,2L,2L,2L,2L,2L,2L};
static int32_t g_75[3] = {2L,2L,2L};
static uint16_t g_78 = 0x7081L;
static int64_t g_91 = 0xAECDC9E869F92A77LL;
static int64_t g_128[2][4][3] = {{{4L,(-7L),4L},{4L,0x14A00EA68498C81BLL,(-7L)},{0x14A00EA68498C81BLL,4L,4L},{(-7L),4L,0L}},{{(-1L),0x14A00EA68498C81BLL,1L},{(-7L),(-7L),1L},{0x14A00EA68498C81BLL,(-1L),0L},{4L,(-7L),4L}}};
static int64_t *g_127 = &g_128[0][3][1];
static uint8_t g_130 = 8UL;
static uint64_t g_132 = 18446744073709551615UL;
static uint64_t g_133 = 1UL;
static int32_t g_135 = 1L;
static int32_t g_146 = 0x0234A52FL;
static uint32_t g_147 = 0x4143BCCAL;
static uint32_t g_159 = 0x38252909L;
static uint16_t g_177 = 1UL;
static uint8_t g_183 = 0xB9L;
static uint32_t g_204 = 6UL;
static uint8_t g_206 = 0UL;
static union U0 g_209 = {0xF0L};
static int64_t g_253 = 0xFB460BE9092F00DDLL;
static uint32_t g_254 = 0xA3D898C3L;
static uint32_t g_258[8] = {18446744073709551615UL,0x8629A8D4L,18446744073709551615UL,0x8629A8D4L,18446744073709551615UL,0x8629A8D4L,18446744073709551615UL,0x8629A8D4L};
static const int32_t *g_268 = &g_4[3];
static const int32_t **g_267 = &g_268;
static const uint16_t g_274 = 0xF497L;
static int64_t **g_277[1] = {&g_127};
static int64_t ***g_276 = &g_277[0];
static uint64_t *g_333[8][2] = {{&g_133,&g_132},{&g_133,&g_132},{&g_133,&g_133},{(void*)0,(void*)0},{(void*)0,&g_133},{&g_133,&g_132},{&g_133,&g_132},{&g_133,&g_133}};
static uint16_t g_380 = 0x0529L;
static int16_t g_383 = 1L;
static int16_t g_384 = 0xD1D2L;
static int16_t g_408 = 0x2866L;
static uint16_t g_409[1][4] = {{0xA1F1L,0xA1F1L,0xA1F1L,0xA1F1L}};
static uint8_t *g_442 = (void*)0;
static uint8_t **g_441 = &g_442;
static union U0 g_458 = {0x3BL};
static union U0 *g_457 = &g_458;
static int32_t g_471 = 0L;
static uint16_t g_578 = 0UL;
static uint64_t g_629 = 0UL;
static uint16_t *g_643 = &g_177;
static uint16_t **g_642 = &g_643;
static uint32_t *g_648 = &g_258[5];
static uint32_t **g_647[9][8] = {{(void*)0,(void*)0,&g_648,(void*)0,(void*)0,&g_648,&g_648,&g_648},{(void*)0,&g_648,(void*)0,&g_648,&g_648,(void*)0,&g_648,(void*)0},{&g_648,&g_648,(void*)0,&g_648,&g_648,(void*)0,&g_648,&g_648},{&g_648,&g_648,&g_648,&g_648,&g_648,(void*)0,(void*)0,(void*)0},{(void*)0,&g_648,&g_648,&g_648,&g_648,(void*)0,&g_648,&g_648},{(void*)0,&g_648,(void*)0,&g_648,&g_648,&g_648,(void*)0,&g_648},{&g_648,(void*)0,(void*)0,&g_648,&g_648,&g_648,&g_648,&g_648},{&g_648,&g_648,&g_648,&g_648,&g_648,&g_648,&g_648,(void*)0},{(void*)0,&g_648,(void*)0,&g_648,(void*)0,&g_648,(void*)0,&g_648}};
static int8_t g_708 = (-6L);
static int64_t g_746 = 0xB223B77F3AA8293ALL;
static int64_t g_778 = 0x798751D9133BB1D3LL;
static uint64_t ** const g_856 = &g_333[7][0];
static uint64_t ** const *g_855 = &g_856;
static uint16_t g_888 = 0x8340L;
static uint8_t *g_983 = &g_130;
static int32_t *g_1000 = &g_20;
static int32_t **g_999 = &g_1000;
static int64_t g_1086 = 8L;
static int32_t ***g_1175 = &g_999;
static const union U0 ***g_1185 = (void*)0;
static int8_t g_1326 = 0x8EL;
static int64_t **g_1334 = (void*)0;
static const int64_t g_1337 = 0L;
static int8_t g_1413 = (-3L);
static uint64_t **g_1569[9] = {(void*)0,(void*)0,(void*)0,(void*)0,(void*)0,(void*)0,(void*)0,(void*)0,(void*)0};
static uint64_t ***g_1568[5][3] = {{&g_1569[6],&g_1569[6],&g_1569[5]},{&g_1569[5],&g_1569[2],&g_1569[6]},{&g_1569[1],&g_1569[6],&g_1569[1]},{&g_1569[1],&g_1569[5],&g_1569[6]},{&g_1569[5],&g_1569[1],&g_1569[1]}};
static uint64_t ****g_1567 = &g_1568[4][0];
static uint16_t * const *g_1574 = &g_643;
static uint16_t * const **g_1573[3] = {&g_1574,&g_1574,&g_1574};
static uint64_t g_1585 = 0x597575CF89740C88LL;
static const int8_t g_1622 = 8L;
static int32_t g_1679 = (-2L);
static uint32_t *g_1701 = &g_254;
static uint32_t **g_1700 = &g_1701;
static int32_t *g_1707 = (void*)0;
static const int16_t *g_1739 = &g_384;
static const int16_t ** const g_1738[3][1][7] = {{{&g_1739,&g_1739,&g_1739,&g_1739,(void*)0,&g_1739,&g_1739}},{{&g_1739,&g_1739,&g_1739,&g_1739,&g_1739,&g_1739,&g_1739}},{{&g_1739,&g_1739,(void*)0,&g_1739,&g_1739,&g_1739,&g_1739}}};
static const int16_t **g_1744 = &g_1739;
static uint32_t g_1860 = 0x5534D26BL;
static uint32_t ***g_1926[3] = {(void*)0,(void*)0,(void*)0};
static int32_t g_1962 = (-2L);
static int32_t g_2033[10] = {0x3E7186E9L,0x3E7186E9L,0x3E7186E9L,0x3E7186E9L,0x3E7186E9L,0x3E7186E9L,0x3E7186E9L,0x3E7186E9L,0x3E7186E9L,0x3E7186E9L};
static uint32_t ** const ***g_2089 = (void*)0;
static union U0 g_2193 = {0xBDL};
static int16_t **g_2230 = (void*)0;
static int64_t g_2307 = 0L;
static uint32_t g_2497 = 0xD94C2BE8L;
static int32_t g_2508 = 0xB8F83451L;
static int32_t * const *g_2622 = &g_1000;
static int32_t * const **g_2621 = &g_2622;
static int32_t * const ***g_2620 = &g_2621;
static const uint16_t *g_2632 = &g_380;
static const uint16_t **g_2631 = &g_2632;
static const uint16_t ***g_2630[9] = {&g_2631,&g_2631,&g_2631,&g_2631,&g_2631,&g_2631,&g_2631,&g_2631,&g_2631};
static uint32_t g_2648 = 0x9D64EF08L;
static int32_t g_2767 = 0x9B96E27FL;
static uint64_t g_2797 = 18446744073709551615UL;
static uint64_t g_2866 = 0x116C815868EB1DEBLL;
static uint32_t g_2895 = 8UL;
static int32_t ****g_2978 = &g_1175;
static uint16_t *** const *g_2981 = (void*)0;
static uint16_t *** const ** const g_2980 = &g_2981;
static uint16_t **g_3116 = &g_643;
static uint8_t g_3176[4] = {251UL,251UL,251UL,251UL};
static int8_t g_3254 = 0xDDL;
static int64_t g_3261 = 8L;
static uint32_t ***g_3310 = &g_647[5][0];
static uint32_t ***g_3311 = &g_647[5][0];
static uint32_t g_3322[7] = {0x55EF5714L,0x55EF5714L,0x55EF5714L,0x55EF5714L,0x55EF5714L,0x55EF5714L,0x55EF5714L};
static int8_t *g_3328 = (void*)0;
static uint16_t g_3340 = 0x2720L;
static const uint16_t **** const g_3349 = &g_2630[4];
static const uint16_t **** const *g_3348 = &g_3349;
static int32_t g_3407 = 0xDAD5159FL;
static uint32_t g_3485 = 0xEE071645L;
static int32_t g_3515 = 0xC406C7B2L;
static int32_t g_3578 = 8L;
static int16_t **** const g_3593 = (void*)0;
static uint32_t ****g_3601 = &g_1926[2];
static uint32_t *****g_3600[7][3][8] = {{{&g_3601,&g_3601,(void*)0,&g_3601,&g_3601,&g_3601,&g_3601,&g_3601},{&g_3601,(void*)0,&g_3601,&g_3601,&g_3601,&g_3601,(void*)0,(void*)0},{&g_3601,(void*)0,&g_3601,(void*)0,&g_3601,(void*)0,(void*)0,&g_3601}},{{&g_3601,&g_3601,&g_3601,&g_3601,&g_3601,&g_3601,&g_3601,&g_3601},{&g_3601,&g_3601,&g_3601,(void*)0,&g_3601,&g_3601,&g_3601,(void*)0},{(void*)0,&g_3601,(void*)0,&g_3601,(void*)0,&g_3601,&g_3601,&g_3601}},{{&g_3601,&g_3601,&g_3601,&g_3601,&g_3601,(void*)0,&g_3601,&g_3601},{&g_3601,(void*)0,&g_3601,&g_3601,(void*)0,(void*)0,&g_3601,&g_3601},{(void*)0,&g_3601,(void*)0,(void*)0,&g_3601,&g_3601,&g_3601,(void*)0}},{{(void*)0,(void*)0,(void*)0,&g_3601,&g_3601,&g_3601,&g_3601,&g_3601},{&g_3601,&g_3601,&g_3601,&g_3601,&g_3601,&g_3601,&g_3601,&g_3601},{&g_3601,&g_3601,&g_3601,&g_3601,(void*)0,(void*)0,&g_3601,&g_3601}},{{&g_3601,&g_3601,(void*)0,&g_3601,(void*)0,&g_3601,(void*)0,&g_3601},{&g_3601,&g_3601,&g_3601,(void*)0,&g_3601,(void*)0,&g_3601,&g_3601},{&g_3601,&g_3601,&g_3601,(void*)0,&g_3601,&g_3601,&g_3601,&g_3601}},{{(void*)0,(void*)0,&g_3601,(void*)0,&g_3601,&g_3601,(void*)0,&g_3601},{&g_3601,&g_3601,(void*)0,&g_3601,&g_3601,(void*)0,&g_3601,&g_3601},{&g_3601,&g_3601,&g_3601,&g_3601,&g_3601,&g_3601,&g_3601,&g_3601}},{{&g_3601,&g_3601,&g_3601,&g_3601,&g_3601,(void*)0,&g_3601,&g_3601},{&g_3601,&g_3601,(void*)0,&g_3601,&g_3601,&g_3601,&g_3601,&g_3601},{&g_3601,&g_3601,(void*)0,&g_3601,&g_3601,&g_3601,&g_3601,&g_3601}}};
static int16_t *g_3706 = (void*)0;
static int16_t **g_3705 = &g_3706;
static const uint32_t *g_3714 = &g_1860;
static const uint32_t **g_3713[3] = {&g_3714,&g_3714,&g_3714};
static uint64_t *****g_3772 = &g_1567;
static uint64_t ******g_3771 = &g_3772;
static uint32_t g_3815 = 18446744073709551615UL;
static const uint32_t g_3847 = 4294967293UL;
static int16_t g_3879 = 0x5935L;
static int32_t g_3880 = 0x2FDB7342L;
static int64_t * const g_3913 = &g_253;


/* --- FORWARD DECLARATIONS --- */
static int16_t  func_1(void);
static int32_t * func_13(uint8_t  p_14);
static uint64_t  func_34(int32_t  p_35, uint64_t  p_36, int8_t  p_37, int32_t * p_38);
static union U0  func_48(int32_t * p_49, int32_t  p_50);
static int32_t * func_51(int8_t  p_52, uint16_t  p_53, uint16_t  p_54, int32_t * p_55, int32_t * p_56);
static int32_t * func_57(int32_t * p_58, const int32_t * p_59, int32_t * p_60, int32_t  p_61, int32_t * p_62);
static int32_t * func_63(uint32_t  p_64, int32_t * p_65);
static int32_t  func_68(int32_t  p_69, uint32_t  p_70, int8_t  p_71, int16_t  p_72, int64_t  p_73);
static union U0  func_97(const int32_t * p_98);
static const int32_t * func_99(uint16_t  p_100, int16_t  p_101, union U0  p_102, int64_t * const  p_103, int64_t * p_104);


/* --- FUNCTIONS --- */
/* ------------------------------------------ */
/* 
 * reads : g_4 g_999 g_1000 g_1175 g_983 g_130 g_457 g_458 g_642 g_1744 g_1739 g_384 g_578 g_2621 g_2622 g_20 g_276 g_277 g_2620 g_2797 g_1700 g_1701 g_254 g_253 g_127 g_128 g_2497 g_1574 g_643 g_177 g_146 g_2631 g_2632 g_380 g_648 g_258 g_274 g_268 g_209.f1 g_133 g_458.f1 g_3261 g_629 g_458.f3 g_2033 g_3322 g_132 g_3340 g_2895 g_3348 g_888 g_2193.f1 g_441 g_442 g_267 g_746 g_3116 g_408 g_471 g_209 g_3485 g_75 g_2978 g_2980 g_2981 g_3349 g_1738 g_147 g_78 g_458.f2 g_1679 g_91 g_159 g_135 g_67 g_183 g_206 g_204 g_209.f0 g_209.f3 g_856 g_333 g_458.f0 g_3593 g_778 g_3176 g_3578 g_1337 g_2630 g_409 g_1086 g_3713 g_3771 g_3714 g_1860 g_1567 g_1568 g_1185 g_3515 g_3815 g_3847 g_3310 g_647 g_3879 g_3772 g_3913 g_3407
 * writes: g_4 g_20 g_1000 g_643 g_277 g_2797 g_3176 g_146 g_254 g_177 g_128 g_2193.f1 g_209.f1 g_130 g_133 g_629 g_458.f3 g_441 g_3328 g_132 g_3340 g_2895 g_3348 g_888 g_268 g_457 g_75 g_408 g_3485 g_1744 g_458.f2 g_1567 g_1679 g_127 g_147 g_159 g_183 g_135 g_204 g_206 g_258 g_267 g_333 g_3515 g_3600 g_209 g_3578 g_384 g_1086 g_3705 g_3713 g_1568 g_91 g_3879 g_3407 g_3254 g_458
 */
static int16_t  func_1(void)
{ /* block id: 0 */
    uint32_t l_2 = 4294967295UL;
    int32_t l_5 = 0x8A527335L;
    int32_t l_6 = 0x11BC383CL;
    int32_t l_7 = 0x79041289L;
    uint16_t ** const *l_3150 = &g_642;
    int8_t *l_3158 = &g_2193.f1;
    union U0 *l_3298 = &g_209;
    uint32_t ***l_3308 = &g_647[7][6];
    uint32_t **l_3346[6][8] = {{&g_1701,&g_1701,&g_1701,&g_1701,&g_1701,&g_1701,&g_1701,&g_1701},{&g_1701,&g_1701,&g_1701,&g_1701,&g_1701,&g_1701,&g_1701,&g_1701},{&g_1701,&g_1701,&g_1701,&g_1701,&g_1701,&g_1701,&g_1701,&g_1701},{&g_1701,&g_1701,&g_1701,&g_1701,&g_1701,&g_1701,&g_1701,&g_1701},{&g_1701,&g_1701,&g_1701,&g_1701,&g_1701,&g_1701,&g_1701,&g_1701},{&g_1701,&g_1701,&g_1701,&g_1701,&g_1701,&g_1701,&g_1701,&g_1701}};
    int32_t l_3362 = 0x16A6D5DAL;
    int32_t l_3363 = 0L;
    int32_t l_3368 = 1L;
    int32_t l_3369 = (-1L);
    int32_t l_3370 = 0x7D45392EL;
    int32_t l_3371 = (-10L);
    int64_t l_3374 = 0L;
    uint64_t l_3375 = 0x3D38361B79A4DC58LL;
    uint64_t *****l_3385 = &g_1567;
    uint16_t l_3419[4];
    int8_t l_3446[6] = {2L,2L,2L,2L,2L,2L};
    uint32_t l_3495 = 18446744073709551615UL;
    const union U0 *l_3532 = &g_458;
    const union U0 **l_3531 = &l_3532;
    const union U0 ***l_3530 = &l_3531;
    int8_t l_3544 = 0L;
    uint8_t l_3580 = 255UL;
    int16_t * const l_3597 = &g_384;
    int16_t * const *l_3596 = &l_3597;
    int16_t * const **l_3595 = &l_3596;
    uint64_t l_3656 = 0x5FE4D132F8BD5F31LL;
    int16_t l_3664 = 0xE475L;
    int16_t *l_3704 = &g_384;
    int16_t **l_3703 = &l_3704;
    int32_t l_3735 = 0x57B5ED23L;
    int32_t l_3736 = 0xEE9E89C4L;
    const uint32_t ***l_3825[2][1];
    uint8_t l_3908 = 5UL;
    uint64_t **** const *l_3909[6];
    int32_t l_3912[4];
    int32_t l_3944 = 0x194E005FL;
    uint32_t l_3950 = 0UL;
    uint32_t ******l_3989 = &g_3600[3][1][4];
    uint16_t l_4017 = 0x3BADL;
    int i, j;
    for (i = 0; i < 4; i++)
        l_3419[i] = 0x9737L;
    for (i = 0; i < 2; i++)
    {
        for (j = 0; j < 1; j++)
            l_3825[i][j] = &g_3713[1];
    }
    for (i = 0; i < 6; i++)
        l_3909[i] = &g_1567;
    for (i = 0; i < 4; i++)
        l_3912[i] = (-2L);
    if ((l_2 & 0x3E90A624CDB8FAAALL))
    { /* block id: 1 */
        int32_t *l_3[8][10][2];
        uint16_t l_8[9] = {0x26AFL,0x26AFL,0x26AFL,0x26AFL,0x26AFL,0x26AFL,0x26AFL,0x26AFL,0x26AFL};
        uint32_t ** const *l_3144[9][2][5] = {{{&g_1700,&g_1700,&g_1700,&g_1700,&g_1700},{&g_1700,&g_1700,&g_1700,&g_1700,&g_1700}},{{&g_1700,&g_1700,&g_1700,&g_1700,&g_1700},{&g_1700,&g_1700,&g_1700,&g_1700,(void*)0}},{{&g_1700,(void*)0,&g_1700,&g_1700,&g_1700},{&g_1700,(void*)0,&g_1700,&g_1700,&g_1700}},{{&g_1700,(void*)0,&g_1700,(void*)0,(void*)0},{&g_1700,(void*)0,&g_1700,&g_1700,&g_1700}},{{&g_1700,&g_1700,&g_1700,&g_1700,(void*)0},{&g_1700,&g_1700,&g_1700,&g_1700,&g_1700}},{{&g_1700,&g_1700,&g_1700,(void*)0,&g_1700},{&g_1700,&g_1700,&g_1700,(void*)0,(void*)0}},{{&g_1700,&g_1700,&g_1700,(void*)0,&g_1700},{&g_1700,&g_1700,&g_1700,(void*)0,&g_1700}},{{&g_1700,(void*)0,&g_1700,(void*)0,&g_1700},{&g_1700,&g_1700,&g_1700,(void*)0,&g_1700}},{{&g_1700,&g_1700,&g_1700,&g_1700,&g_1700},{&g_1700,&g_1700,&g_1700,&g_1700,&g_1700}}};
        uint32_t ** const **l_3143 = &l_3144[0][0][3];
        uint32_t ** const ***l_3142 = &l_3143;
        union U0 l_3228 = {0x13L};
        uint64_t *l_3240 = &g_133;
        uint32_t * const *l_3315 = &g_648;
        uint32_t * const * const *l_3314 = &l_3315;
        int32_t l_3388 = 1L;
        uint64_t *****l_3389 = &g_1567;
        uint8_t *l_3426 = (void*)0;
        union U0 *l_3438 = &l_3228;
        uint64_t l_3523 = 0x5F8208EF81CF263DLL;
        union U0 **l_3534[7] = {&g_457,&g_457,&g_457,&g_457,&g_457,&g_457,&g_457};
        union U0 ***l_3533 = &l_3534[5];
        int16_t *l_3542[5];
        int16_t l_3554 = 3L;
        int8_t l_3590[9] = {(-8L),(-8L),(-8L),(-8L),(-8L),(-8L),(-8L),(-8L),(-8L)};
        uint32_t *****l_3598 = (void*)0;
        int64_t l_3625 = 9L;
        uint16_t l_3626 = 65535UL;
        uint32_t *l_3659 = &g_258[6];
        int32_t l_3790[2][8] = {{0xFAB70EA6L,0L,0x05281176L,0L,0xFAB70EA6L,0xFAB70EA6L,0L,0x05281176L},{0xFAB70EA6L,0xFAB70EA6L,0L,0x05281176L,0L,0xFAB70EA6L,0xFAB70EA6L,0L}};
        uint64_t l_3812 = 3UL;
        uint64_t l_3814 = 18446744073709551608UL;
        uint16_t **l_3827[3];
        uint64_t l_3829 = 18446744073709551615UL;
        uint32_t l_3846 = 1UL;
        uint16_t *****l_3857 = (void*)0;
        const uint16_t ****l_3859 = &g_2630[5];
        const uint16_t *****l_3858 = &l_3859;
        int i, j, k;
        for (i = 0; i < 8; i++)
        {
            for (j = 0; j < 10; j++)
            {
                for (k = 0; k < 2; k++)
                    l_3[i][j][k] = &g_4[3];
            }
        }
        for (i = 0; i < 5; i++)
            l_3542[i] = &g_383;
        for (i = 0; i < 3; i++)
            l_3827[i] = &g_643;
lbl_3151:
        l_8[1]++;
        for (l_6 = (-2); (l_6 > 15); l_6 = safe_add_func_uint8_t_u_u(l_6, 6))
        { /* block id: 5 */
            uint64_t l_3138 = 0x57C7955DEB977126LL;
            union U0 **l_3154 = &g_457;
            const int64_t *l_3156 = &g_128[1][0][1];
            const int64_t **l_3155[2][2][6] = {{{&l_3156,&l_3156,&l_3156,&l_3156,&l_3156,&l_3156},{&l_3156,&l_3156,&l_3156,&l_3156,&l_3156,&l_3156}},{{&l_3156,&l_3156,&l_3156,&l_3156,&l_3156,&l_3156},{&l_3156,&l_3156,&l_3156,&l_3156,&l_3156,&l_3156}}};
            const int64_t ***l_3157 = &l_3155[0][1][3];
            uint16_t l_3165[8] = {1UL,1UL,1UL,1UL,1UL,1UL,1UL,1UL};
            int i, j, k;
            for (l_7 = 8; (l_7 >= 1); l_7 -= 1)
            { /* block id: 8 */
                uint32_t l_3141 = 18446744073709551615UL;
                uint32_t * const ***l_3146 = (void*)0;
                uint32_t * const *** const *l_3145 = &l_3146;
                union U0 **l_3147 = &g_457;
                int i;
                g_4[3] |= l_8[l_7];
                (**g_1175) = func_13(g_4[2]);
                if (l_8[l_7])
                { /* block id: 1459 */
                    uint16_t *l_3133 = &l_8[8];
                    uint16_t *l_3139 = &l_8[l_7];
                    int32_t l_3140 = 0xF695A281L;
                    uint16_t ***l_3149 = &g_3116;
                    uint16_t ****l_3148 = &l_3149;
                    (***g_2621) &= (safe_mod_func_uint8_t_u_u((((*l_3148) = ((((((safe_mod_func_int16_t_s_s((((safe_rshift_func_int8_t_s_u((((((safe_lshift_func_uint8_t_u_u((*g_983), (safe_rshift_func_uint16_t_u_u(l_8[l_7], (((*g_457) , ((((safe_rshift_func_int8_t_s_u(((((*g_642) = l_3133) != (((safe_mul_func_uint8_t_u_u(0x6AL, 0xD8L)) || (safe_rshift_func_uint16_t_u_s(l_3138, (**g_1744)))) , l_3139)) < 0xC0D6B72D1B8F337DLL), 1)) , l_3140) > 0L) & g_578)) >= l_3138))))) ^ l_3141) < (*g_983)) , l_3142) != l_3145), (*g_983))) > l_6) , (**g_1744)), l_6)) ^ l_3140) , (**g_1744)) , l_3147) != (void*)0) , &g_3116)) == l_3150), 0x4FL));
                }
                else
                { /* block id: 1463 */
                    (**g_999) ^= l_7;
                    if (l_7)
                        goto lbl_3151;
                }
            }
            (****g_2620) = (safe_rshift_func_int16_t_s_s((((((void*)0 != l_3154) , ((*g_276) = (*g_276))) == ((*l_3157) = l_3155[0][1][3])) < (l_3158 == (void*)0)), 0));
            for (g_2797 = 0; (g_2797 >= 54); ++g_2797)
            { /* block id: 1473 */
                int32_t l_3166[8][8][3] = {{{0x36A42BD7L,0x08DAE5F5L,0L},{0x3FB3DE0AL,0xDD914932L,(-5L)},{7L,7L,0xD3200B0DL},{1L,(-5L),0xB59C95F6L},{9L,7L,(-5L)},{0xDD914932L,0xC624916FL,0x3FB3DE0AL},{0x36A42BD7L,9L,(-5L)},{0x97CD9E59L,0xB59C95F6L,0xB59C95F6L}},{{0L,(-1L),0x08DAE5F5L},{0L,0x08DAE5F5L,0x36A42BD7L},{0x97CD9E59L,1L,0x7D66C06FL},{0x36A42BD7L,0xDD914932L,7L},{0xDD914932L,1L,0x63FDB9F2L},{9L,0x08DAE5F5L,9L},{1L,(-1L),9L},{(-5L),0xB59C95F6L,0x63FDB9F2L}},{{0x63FDB9F2L,9L,7L},{(-1L),0xC624916FL,0x7D66C06FL},{0x63FDB9F2L,7L,0x36A42BD7L},{(-5L),(-5L),0x08DAE5F5L},{1L,(-5L),0xB59C95F6L},{9L,7L,(-5L)},{0xDD914932L,0xC624916FL,0x3FB3DE0AL},{0x36A42BD7L,9L,(-5L)}},{{0x97CD9E59L,0xB59C95F6L,0xB59C95F6L},{0L,(-1L),0x08DAE5F5L},{0L,0x08DAE5F5L,0x36A42BD7L},{0x97CD9E59L,1L,0x7D66C06FL},{0x36A42BD7L,0xDD914932L,7L},{0xDD914932L,1L,0x63FDB9F2L},{9L,0x08DAE5F5L,9L},{1L,(-1L),9L}},{{(-5L),0xB59C95F6L,0x63FDB9F2L},{0x63FDB9F2L,9L,7L},{(-1L),0xC624916FL,0x7D66C06FL},{0x63FDB9F2L,7L,0x36A42BD7L},{(-5L),(-5L),0x08DAE5F5L},{1L,(-5L),0xB59C95F6L},{9L,7L,(-5L)},{0xDD914932L,0xC624916FL,0x3FB3DE0AL}},{{0x36A42BD7L,9L,(-5L)},{0x97CD9E59L,0xB59C95F6L,0xB59C95F6L},{0L,(-1L),0x08DAE5F5L},{0L,0x08DAE5F5L,0x36A42BD7L},{0x97CD9E59L,1L,0x7D66C06FL},{0x36A42BD7L,0xDD914932L,7L},{0xDD914932L,1L,0x63FDB9F2L},{9L,0x08DAE5F5L,9L}},{{1L,(-1L),9L},{(-5L),0xB59C95F6L,0x63FDB9F2L},{0x63FDB9F2L,9L,7L},{(-1L),0xC624916FL,0x7D66C06FL},{0x63FDB9F2L,7L,0x36A42BD7L},{(-5L),(-5L),0x08DAE5F5L},{1L,(-5L),0xB59C95F6L},{9L,7L,(-5L)}},{{0xDD914932L,0xC624916FL,0x3FB3DE0AL},{0x36A42BD7L,9L,(-5L)},{0x97CD9E59L,0xB59C95F6L,0xB59C95F6L},{0L,(-1L),0x08DAE5F5L},{0L,0x08DAE5F5L,0x36A42BD7L},{0x97CD9E59L,1L,0x7D66C06FL},{0x36A42BD7L,0xDD914932L,7L},{0xDD914932L,1L,0x63FDB9F2L}}};
                union U0 *l_3167 = (void*)0;
                uint32_t l_3175[10];
                int i, j, k;
                for (i = 0; i < 10; i++)
                    l_3175[i] = 0UL;
                g_3176[0] = (((safe_div_func_int32_t_s_s(l_2, ((**g_999) , (safe_mul_func_int8_t_s_s((l_3165[1] != (l_3166[1][2][2] < (((l_3165[5] , (void*)0) != l_3167) >= ((safe_mod_func_uint16_t_u_u((safe_unary_minus_func_int32_t_s(((*g_983) , ((***g_2621) |= (safe_div_func_int32_t_s_s(((safe_add_func_uint32_t_u_u(((*g_983) > 0UL), (**g_1700))) >= 4UL), 1UL)))))), l_3165[1])) && 0x27EDL)))), g_253))))) , 0xCDD9L) && l_3175[6]);
            }
        }
        if ((***g_2621))
        { /* block id: 1478 */
            uint32_t **l_3185 = &g_1701;
            int32_t l_3186 = 0xDDB13C5AL;
            uint64_t *****l_3198 = &g_1567;
            uint64_t ******l_3197 = &l_3198;
            int32_t l_3229 = 0xCC934D37L;
            uint32_t **l_3282 = &g_648;
            uint64_t l_3352 = 18446744073709551615UL;
            int32_t l_3408 = 1L;
            int32_t l_3409 = 8L;
            uint32_t l_3410 = 0UL;
            int32_t l_3413 = 0x1B38E9A0L;
            int64_t l_3414 = 1L;
            int32_t l_3415 = 0L;
            int32_t l_3416 = (-10L);
            int32_t l_3417 = 0x826CAA3AL;
            int32_t l_3418 = (-10L);
            if (((((safe_add_func_uint8_t_u_u((safe_rshift_func_int8_t_s_s((((*g_457) , (***g_276)) ^ 0x90099C64A4CC214BLL), 4)), g_2497)) , l_3186) & 0xD30FF6655B03D0F7LL) < (**g_1574)))
            { /* block id: 1480 */
                uint32_t l_3187[3][8] = {{0x13CA3311L,5UL,0x6BA18EA5L,5UL,0x13CA3311L,0x13CA3311L,5UL,0x6BA18EA5L},{5UL,5UL,18446744073709551615UL,18446744073709551615UL,18446744073709551615UL,5UL,5UL,18446744073709551615UL},{0x6BA18EA5L,18446744073709551615UL,18446744073709551615UL,0x6BA18EA5L,0x13CA3311L,0x6BA18EA5L,18446744073709551615UL,18446744073709551615UL}};
                int8_t l_3205 = 0x03L;
                int16_t *l_3217 = &g_408;
                int16_t * const l_3219 = (void*)0;
                int32_t l_3230[4] = {(-8L),(-8L),(-8L),(-8L)};
                uint8_t l_3231 = 0x75L;
                int8_t l_3257[10][5][5] = {{{0L,0x77L,(-7L),0xFBL,0xFBL},{0L,3L,0L,(-4L),(-2L)},{0L,(-7L),1L,0x4AL,1L},{(-10L),0xB6L,(-4L),0x50L,(-1L)},{(-1L),0x33L,1L,1L,0xD2L}},{{0x0CL,0x18L,0L,(-1L),(-7L)},{(-1L),(-1L),(-7L),0x8FL,7L},{5L,0x0CL,0x2DL,5L,0x6AL},{1L,7L,0x56L,0x79L,0x1DL},{0x15L,0x9DL,(-1L),0x42L,0xE5L}},{{0xEDL,(-1L),0L,(-8L),1L},{0L,0x8CL,(-2L),(-2L),0x8CL},{0L,0L,0x05L,0x77L,0x3EL},{0L,(-1L),0L,0x2DL,(-4L)},{0xFBL,0x08L,0xE9L,6L,(-5L)}},{{0L,(-10L),0L,8L,0x81L},{0L,(-9L),0xEDL,0x3EL,(-1L)},{0L,0x93L,1L,0xB6L,5L},{0xEDL,0xEDL,0xF1L,0xD6L,(-9L)},{0x15L,(-1L),(-1L),0x8CL,3L}},{{1L,0x66L,0x24L,0x10L,0x56L},{5L,0x34L,0L,0xB1L,8L},{(-1L),(-5L),(-5L),(-1L),(-6L)},{0x0CL,0x50L,8L,0L,5L},{(-1L),6L,0x10L,1L,(-1L)}},{{(-10L),0x67L,0xE5L,0L,0x0FL},{0L,0x4AL,0xE8L,(-1L),(-1L)},{0L,(-1L),(-7L),0xB1L,0L},{0L,(-1L),1L,0x10L,0x8FL},{0xE5L,0x2DL,(-1L),0x8CL,0x67L}},{{(-8L),(-1L),0x33L,0xD6L,0L},{0x50L,0x6AL,0L,0xB6L,0x9DL},{(-1L),1L,0x66L,0x3EL,0x66L},{1L,1L,(-10L),8L,4L},{(-9L),(-7L),(-6L),(-9L),(-1L)}},{{0x93L,0x33L,0x12L,(-1L),1L},{(-1L),(-7L),0xEDL,1L,0x77L},{4L,0x0FL,0x50L,0x93L,0x0CL},{0xE9L,0x10L,0xD8L,0xF1L,0x8FL},{(-2L),(-1L),(-10L),0L,0L}},{{(-7L),1L,0x42L,7L,(-6L)},{(-10L),(-1L),0x13L,(-4L),0x67L},{0x04L,0xEDL,0x3EL,(-6L),7L},{0L,0x15L,0L,0x15L,0L},{0xD2L,(-6L),0xF1L,(-1L),0x3EL}},{{8L,0L,5L,(-7L),(-2L)},{0x77L,(-9L),(-1L),(-6L),0x3EL},{(-1L),(-7L),0L,(-1L),0L},{0x3EL,0x06L,0x77L,(-1L),7L},{(-1L),0x12L,(-1L),0x50L,0x67L}}};
                const int64_t **l_3264 = (void*)0;
                uint32_t **l_3281 = &g_648;
                int i, j, k;
                for (g_146 = 0; (g_146 <= 1); g_146 += 1)
                { /* block id: 1483 */
                    uint32_t l_3192 = 1UL;
                    union U0 *l_3214[3];
                    int32_t l_3255 = (-1L);
                    int i;
                    for (i = 0; i < 3; i++)
                        l_3214[i] = &g_458;
                    ++l_3187[2][6];
                    if ((safe_sub_func_int64_t_s_s(((*g_127) = (!(l_3192 < ((((--(**g_1700)) | ((safe_div_func_int16_t_s_s((((void*)0 != l_3197) > (l_3186 & l_3186)), ((**g_642) = (safe_mul_func_int8_t_s_s((safe_sub_func_uint16_t_u_u(((**g_2631) , l_2), ((safe_mod_func_uint16_t_u_u(((*g_648) , 4UL), (**g_2631))) >= g_274))), 1UL))))) > 0x8E3D84382D7D5000LL)) ^ 0x34L) >= 0UL)))), l_3205)))
                    { /* block id: 1488 */
                        int8_t l_3213 = 0xEEL;
                        int16_t **l_3218 = &l_3217;
                        int32_t l_3232 = (-1L);
                        int32_t l_3233 = 1L;
                        if (l_3192)
                            break;
                        l_3232 &= ((safe_add_func_uint8_t_u_u((safe_div_func_int8_t_s_s((safe_rshift_func_uint16_t_u_s(((safe_unary_minus_func_uint16_t_u(((g_254 & l_3213) > ((void*)0 == l_3214[1])))) > (safe_mul_func_int8_t_s_s((((*l_3218) = l_3217) == l_3219), (safe_rshift_func_int8_t_s_s(((*l_3158) = ((safe_div_func_uint32_t_u_u(((safe_mod_func_int16_t_s_s(((l_3230[2] = ((safe_rshift_func_uint8_t_u_u((((l_3187[2][6] & (((l_3228 , (*g_457)) , 253UL) || l_3192)) != l_3229) & l_3192), 1)) != (***g_2621))) > l_3192), (**g_1744))) == (*g_268)), 0xFC91D86FL)) != l_3231)), l_7))))), (*g_1739))), 248UL)), 250UL)) < 255UL);
                        return l_3233;
                    }
                    else
                    { /* block id: 1495 */
                        (*g_999) = (**g_1175);
                    }
                    if (l_2)
                        continue;
                    for (g_209.f1 = 0; (g_209.f1 <= 1); g_209.f1 += 1)
                    { /* block id: 1501 */
                        uint8_t *l_3241[9][8][3] = {{{&l_3231,&l_3231,&l_3231},{&g_3176[3],(void*)0,&g_183},{&l_3231,(void*)0,&l_3231},{&g_183,&g_3176[3],&g_3176[3]},{&g_206,(void*)0,(void*)0},{&g_183,&g_183,&g_206},{&l_3231,&g_3176[0],&g_206},{&g_3176[3],&g_183,&g_3176[3]}},{{&l_3231,(void*)0,&g_3176[0]},{(void*)0,&g_3176[3],&g_3176[3]},{&g_3176[0],(void*)0,&g_206},{&g_183,(void*)0,&g_206},{&g_3176[0],&l_3231,(void*)0},{(void*)0,&g_183,&g_3176[3]},{&l_3231,&l_3231,&l_3231},{&g_3176[3],(void*)0,&g_183}},{{&l_3231,(void*)0,&l_3231},{&g_183,&g_3176[3],&g_3176[3]},{&g_206,(void*)0,(void*)0},{&g_183,&g_183,&g_206},{&l_3231,&g_3176[0],&g_206},{&g_3176[3],&g_183,&g_3176[3]},{&l_3231,(void*)0,&g_3176[0]},{(void*)0,&g_3176[3],&g_3176[3]}},{{&g_3176[0],(void*)0,&g_206},{&g_183,(void*)0,&g_206},{&g_3176[0],&l_3231,(void*)0},{(void*)0,&g_183,&g_3176[3]},{&l_3231,&l_3231,&l_3231},{&g_3176[3],(void*)0,&g_183},{&l_3231,(void*)0,&l_3231},{&g_183,&g_3176[3],&g_3176[3]}},{{&g_206,(void*)0,(void*)0},{&g_183,&g_183,&g_206},{&l_3231,&g_3176[0],&g_206},{&g_3176[3],&g_183,&g_3176[3]},{&l_3231,(void*)0,&g_3176[0]},{&g_3176[3],&g_183,&g_183},{&g_183,&g_3176[0],(void*)0},{&g_3176[3],&g_3176[3],&g_183}},{{&g_183,(void*)0,&g_3176[0]},{&g_3176[3],&g_3176[3],&g_206},{&g_206,(void*)0,&g_206},{&g_183,&g_3176[3],&g_206},{&l_3231,&g_3176[0],&g_206},{&g_206,&g_183,&g_206},{&g_206,(void*)0,&g_3176[0]},{&g_206,&g_206,&g_183}},{{&l_3231,(void*)0,(void*)0},{&g_183,&g_206,&g_183},{&g_206,(void*)0,&g_183},{&g_3176[3],&g_183,&g_183},{&g_183,&g_3176[0],(void*)0},{&g_3176[3],&g_3176[3],&g_183},{&g_183,(void*)0,&g_3176[0]},{&g_3176[3],&g_3176[3],&g_206}},{{&g_206,(void*)0,&g_206},{&g_183,&g_3176[3],&g_206},{&l_3231,&g_3176[0],&g_206},{&g_206,&g_183,&g_206},{&g_206,(void*)0,&g_3176[0]},{&g_206,&g_206,&g_183},{&l_3231,(void*)0,(void*)0},{&g_183,&g_206,&g_183}},{{&g_206,(void*)0,&g_183},{&g_3176[3],&g_183,&g_183},{&g_183,&g_3176[0],(void*)0},{&g_3176[3],&g_3176[3],&g_183},{&g_183,(void*)0,&g_3176[0]},{&g_3176[3],&g_3176[3],&g_206},{&g_206,(void*)0,&g_206},{&g_183,&g_3176[3],&g_206}}};
                        uint64_t l_3242[8] = {0xB6412F7D8489259FLL,1UL,1UL,0xB6412F7D8489259FLL,1UL,1UL,0xB6412F7D8489259FLL,1UL};
                        uint64_t l_3253 = 18446744073709551606UL;
                        int32_t l_3256 = 0x6AE19F0EL;
                        uint32_t l_3258 = 4294967295UL;
                        int i, j, k;
                        l_6 = (safe_mod_func_uint16_t_u_u((l_3230[2] , (safe_mul_func_int8_t_s_s(((safe_add_func_int8_t_s_s(((((*l_3240) |= (((0x9CL ^ ((void*)0 != l_3240)) >= (l_3242[0] = ((*g_983) &= l_3187[2][6]))) <= l_6)) > (((safe_rshift_func_int8_t_s_u((safe_rshift_func_uint8_t_u_s((((*g_127) = (safe_rshift_func_uint8_t_u_s(g_177, ((1L <= ((safe_mul_func_uint16_t_u_u((safe_add_func_uint32_t_u_u((**g_1700), (**g_1700))), (-5L))) & l_3192)) != l_7)))) == 0x94128C946CC5AD13LL), g_458.f1)), l_3186)) < 0xBBL) , (-1L))) >= 250UL), l_3253)) >= 1UL), l_3187[0][2]))), 65535UL));
                        l_3258++;
                        if (g_3261)
                            continue;
                    }
                }
                l_3[7][8][1] = ((*g_999) = &l_3230[0]);
                for (g_629 = 0; (g_629 < 23); ++g_629)
                { /* block id: 1515 */
                    uint32_t l_3271 = 1UL;
                    int32_t l_3274 = (-8L);
                    uint8_t l_3294[4][3][2] = {{{0x30L,0x30L},{0xECL,253UL},{0x6AL,9UL}},{{0UL,0xECL},{255UL,0UL},{5UL,0UL}},{{5UL,0UL},{255UL,0xECL},{0UL,9UL}},{{0x6AL,253UL},{0xECL,0x30L},{0x30L,0x30L}}};
                    uint32_t ****l_3309[2][8];
                    int i, j, k;
                    for (i = 0; i < 2; i++)
                    {
                        for (j = 0; j < 8; j++)
                            l_3309[i][j] = (void*)0;
                    }
                }
            }
            else
            { /* block id: 1537 */
                uint64_t l_3321 = 0xDDE7A297B90E42B9LL;
                int32_t l_3323 = 0L;
                int8_t *l_3329 = (void*)0;
                uint32_t l_3330[6][7][6] = {{{18446744073709551615UL,1UL,0xB6573154L,18446744073709551615UL,0xAB8E7E60L,0xD5EF4BC4L},{18446744073709551615UL,0xAB8E7E60L,0xD5EF4BC4L,1UL,1UL,0xD5EF4BC4L},{18446744073709551614UL,18446744073709551614UL,0xB6573154L,1UL,1UL,0x8128DDD9L},{1UL,0xAB8E7E60L,0x812AD54AL,1UL,0xAB8E7E60L,0xB6573154L},{18446744073709551614UL,1UL,0x812AD54AL,1UL,18446744073709551614UL,0x8128DDD9L},{18446744073709551615UL,1UL,0xB6573154L,18446744073709551615UL,0xAB8E7E60L,0xD5EF4BC4L},{18446744073709551615UL,0xAB8E7E60L,0xD5EF4BC4L,1UL,1UL,0xD5EF4BC4L}},{{18446744073709551614UL,18446744073709551614UL,0xB6573154L,1UL,1UL,0x8128DDD9L},{1UL,0xAB8E7E60L,0x812AD54AL,1UL,0xAB8E7E60L,0xB6573154L},{0xCE918E94L,0x8BF1BB38L,0xAB8E7E60L,0x8BF1BB38L,0xCE918E94L,1UL},{0UL,0x8BF1BB38L,18446744073709551615UL,0UL,0x269CFCD7L,1UL},{0UL,0x269CFCD7L,1UL,0x8BF1BB38L,0x8BF1BB38L,1UL},{0xCE918E94L,0xCE918E94L,18446744073709551615UL,0x991B26EDL,0x8BF1BB38L,1UL},{0x8BF1BB38L,0x269CFCD7L,0xAB8E7E60L,0x991B26EDL,0x269CFCD7L,18446744073709551615UL}},{{0xCE918E94L,0x8BF1BB38L,0xAB8E7E60L,0x8BF1BB38L,0xCE918E94L,1UL},{0UL,0x8BF1BB38L,18446744073709551615UL,0UL,0x269CFCD7L,1UL},{0UL,0x269CFCD7L,1UL,0x8BF1BB38L,0x8BF1BB38L,1UL},{0xCE918E94L,0xCE918E94L,18446744073709551615UL,0x991B26EDL,0x8BF1BB38L,1UL},{0x8BF1BB38L,0x269CFCD7L,0xAB8E7E60L,0x991B26EDL,0x269CFCD7L,18446744073709551615UL},{0xCE918E94L,0x8BF1BB38L,0xAB8E7E60L,0x8BF1BB38L,0xCE918E94L,1UL},{0UL,0x8BF1BB38L,18446744073709551615UL,0UL,0x269CFCD7L,1UL}},{{0UL,0x269CFCD7L,1UL,0x8BF1BB38L,0x8BF1BB38L,1UL},{0xCE918E94L,0xCE918E94L,18446744073709551615UL,0x991B26EDL,0x8BF1BB38L,1UL},{0x8BF1BB38L,0x269CFCD7L,0xAB8E7E60L,0x991B26EDL,0x269CFCD7L,18446744073709551615UL},{0xCE918E94L,0x8BF1BB38L,0xAB8E7E60L,0x8BF1BB38L,0xCE918E94L,1UL},{0UL,0x8BF1BB38L,18446744073709551615UL,0UL,0x269CFCD7L,1UL},{0UL,0x269CFCD7L,1UL,0x8BF1BB38L,0x8BF1BB38L,1UL},{0xCE918E94L,0xCE918E94L,18446744073709551615UL,0x991B26EDL,0x8BF1BB38L,1UL}},{{0x8BF1BB38L,0x269CFCD7L,0xAB8E7E60L,0x991B26EDL,0x269CFCD7L,18446744073709551615UL},{0xCE918E94L,0x8BF1BB38L,0xAB8E7E60L,0x8BF1BB38L,0xCE918E94L,1UL},{0UL,0x8BF1BB38L,18446744073709551615UL,0UL,0x269CFCD7L,1UL},{0UL,0x269CFCD7L,1UL,0x8BF1BB38L,0x8BF1BB38L,1UL},{0xCE918E94L,0xCE918E94L,18446744073709551615UL,0x991B26EDL,0x8BF1BB38L,1UL},{0x8BF1BB38L,0x269CFCD7L,0xAB8E7E60L,0x991B26EDL,0x269CFCD7L,18446744073709551615UL},{0xCE918E94L,0x8BF1BB38L,0xAB8E7E60L,0x8BF1BB38L,0xCE918E94L,1UL}},{{0UL,0x8BF1BB38L,18446744073709551615UL,0UL,0x269CFCD7L,1UL},{0UL,0x269CFCD7L,1UL,0x8BF1BB38L,0x8BF1BB38L,1UL},{0xCE918E94L,0xCE918E94L,18446744073709551615UL,0x991B26EDL,0x8BF1BB38L,1UL},{0x8BF1BB38L,0x269CFCD7L,0xAB8E7E60L,0x991B26EDL,0x269CFCD7L,18446744073709551615UL},{0xCE918E94L,0x8BF1BB38L,0xAB8E7E60L,0x8BF1BB38L,0xCE918E94L,1UL},{0UL,0x8BF1BB38L,18446744073709551615UL,0UL,0x269CFCD7L,0x991B26EDL},{0xE15135D8L,0xB6573154L,0x991B26EDL,0x812AD54AL,0x812AD54AL,0x991B26EDL}}};
                int32_t l_3333[3];
                uint32_t l_3335[8][1][9] = {{{0x30091A38L,0UL,0x30B5CAEFL,0xE11A6A21L,0xE11A6A21L,0x30B5CAEFL,0UL,0x30091A38L,0x30B5CAEFL}},{{0x30091A38L,0UL,0x30B5CAEFL,0xE11A6A21L,0xE11A6A21L,0x30B5CAEFL,0UL,0x30091A38L,0x30B5CAEFL}},{{0x30091A38L,0UL,0x30B5CAEFL,0xE11A6A21L,0xE11A6A21L,0x30B5CAEFL,0UL,0x30091A38L,0x30B5CAEFL}},{{0x30091A38L,0UL,0x30B5CAEFL,0xE11A6A21L,0xE11A6A21L,0x30B5CAEFL,0UL,0x30091A38L,0x30B5CAEFL}},{{0x30091A38L,0UL,0x30B5CAEFL,0xE11A6A21L,0xE11A6A21L,0x30B5CAEFL,0UL,0x30091A38L,0x30B5CAEFL}},{{0x30091A38L,0UL,0x30B5CAEFL,0xE11A6A21L,0xE11A6A21L,0x30B5CAEFL,0UL,0x30091A38L,0x30B5CAEFL}},{{0x30091A38L,0UL,0x30B5CAEFL,0xE11A6A21L,0xE11A6A21L,0x30B5CAEFL,0UL,0x30091A38L,0x30B5CAEFL}},{{0x30091A38L,0UL,0x30B5CAEFL,0xE11A6A21L,0xE11A6A21L,0x30B5CAEFL,0UL,0x30091A38L,0x30B5CAEFL}}};
                int i, j, k;
                for (i = 0; i < 3; i++)
                    l_3333[i] = 3L;
lbl_3355:
                for (g_458.f3 = 0; (g_458.f3 <= 9); g_458.f3 += 1)
                { /* block id: 1540 */
                    uint8_t ***l_3320 = &g_441;
                    int i;
                    (*g_1000) |= (l_3323 = (safe_add_func_int8_t_s_s(g_2033[g_458.f3], ((((l_3229 ^= (safe_mod_func_int64_t_s_s((((*g_643) = ((*g_457) , (0x159FL != (((((*g_457) , (void*)0) == ((*l_3320) = &g_442)) <= (l_3321 < g_3322[2])) || g_2033[g_458.f3])))) <= l_5), l_7))) >= (-1L)) > l_3321) ^ l_2))));
                    return g_2033[g_458.f3];
                }
                if ((safe_lshift_func_uint16_t_u_s(((safe_rshift_func_uint8_t_u_u((((*g_983) = (*g_983)) < 0xDCL), g_629)) && ((g_3328 = &g_3254) == l_3329)), 4)))
                { /* block id: 1550 */
                    int8_t l_3339 = 7L;
                    for (g_132 = 0; (g_132 <= 7); g_132 += 1)
                    { /* block id: 1553 */
                        int16_t l_3334 = (-2L);
                        int32_t l_3338[7] = {(-9L),(-9L),0xA9A03672L,(-9L),(-9L),0xA9A03672L,(-9L)};
                        int i;
                        l_3330[3][1][3]++;
                        l_3335[2][0][3]--;
                        g_3340++;
                        if (g_258[g_132])
                            break;
                    }
                }
                else
                { /* block id: 1559 */
                    uint32_t **l_3345 = &g_1701;
                    for (g_2895 = 0; (g_2895 <= 9); g_2895 += 1)
                    { /* block id: 1562 */
                        uint32_t ***l_3347 = &l_3346[3][0];
                        const uint16_t **** const **l_3350 = &g_3348;
                        int32_t l_3351 = 3L;
                        int i;
                        (**g_2622) ^= (safe_mul_func_int8_t_s_s((((l_3345 == ((*l_3347) = (g_2033[g_2895] , l_3346[2][3]))) , ((*l_3350) = g_3348)) == &g_2981), g_2033[g_2895]));
                        l_3352--;
                        if (g_458.f3)
                            goto lbl_3355;
                    }
                    return l_3352;
                }
            }
            for (l_3228.f0 = 26; (l_3228.f0 > (-21)); l_3228.f0--)
            { /* block id: 1574 */
                int64_t l_3358[10] = {0L,0L,0L,0L,0L,0L,0L,0L,0L,0L};
                int32_t l_3359 = (-5L);
                int32_t l_3360 = 1L;
                int32_t l_3364 = (-1L);
                int32_t l_3367 = 0xBCDBA61AL;
                int32_t l_3372 = (-1L);
                int32_t l_3373 = 0x8C5B084EL;
                int i;
                l_3358[7] = l_6;
                for (g_146 = 2; (g_146 >= 0); g_146 -= 1)
                { /* block id: 1578 */
                    int64_t l_3361 = 0x9285272348967190LL;
                    int16_t l_3365 = 0xD941L;
                    int32_t l_3366 = 1L;
                    uint32_t l_3382[4][5][9] = {{{1UL,18446744073709551614UL,1UL,18446744073709551615UL,18446744073709551613UL,0x2E5E3E5AL,18446744073709551607UL,0x71493D5FL,4UL},{18446744073709551611UL,0xE6880DAFL,2UL,0xDDD702C7L,0xA6C66844L,0xC0E85E58L,0xA6C66844L,0xDDD702C7L,2UL},{4UL,4UL,18446744073709551614UL,18446744073709551615UL,0x204CB92DL,1UL,2UL,1UL,6UL},{1UL,1UL,0xC0E85E58L,18446744073709551615UL,18446744073709551606UL,18446744073709551606UL,18446744073709551615UL,0xC0E85E58L,1UL},{18446744073709551615UL,18446744073709551606UL,18446744073709551614UL,0x57A19FA0L,0UL,18446744073709551615UL,4UL,2UL,18446744073709551613UL}},{{0xDDD702C7L,1UL,2UL,1UL,18446744073709551615UL,1UL,2UL,1UL,0xDDD702C7L},{0UL,18446744073709551606UL,1UL,0xD37B812EL,4UL,18446744073709551607UL,6UL,18446744073709551614UL,0x2E5E3E5AL},{0x17F27A6EL,1UL,0x5030D5BFL,0xC0E85E58L,0xC0E85E58L,0x5030D5BFL,1UL,0x17F27A6EL,0xC51F3F36L},{0UL,4UL,6UL,0x204CB92DL,0x71493D5FL,18446744073709551615UL,18446744073709551613UL,0xD37B812EL,0xD37B812EL},{0xDDD702C7L,0xE6880DAFL,18446744073709551615UL,0x17F27A6EL,18446744073709551615UL,0xE6880DAFL,0xDDD702C7L,18446744073709551606UL,0xC51F3F36L}},{{18446744073709551615UL,18446744073709551614UL,1UL,18446744073709551606UL,4UL,0x204CB92DL,0xD37B812EL,1UL,0xD37B812EL},{18446744073709551615UL,0xA6C66844L,0xE6880DAFL,0xE6880DAFL,0xA6C66844L,18446744073709551615UL,18446744073709551606UL,0x5030D5BFL,0x17F27A6EL},{1UL,2UL,1UL,0x204CB92DL,18446744073709551615UL,18446744073709551614UL,4UL,4UL,18446744073709551614UL},{0xE6880DAFL,18446744073709551615UL,0x17F27A6EL,18446744073709551615UL,0xE6880DAFL,0xDDD702C7L,18446744073709551606UL,0xC51F3F36L,1UL},{18446744073709551613UL,4UL,1UL,0x2E5E3E5AL,2UL,18446744073709551607UL,0xD37B812EL,18446744073709551607UL,2UL}},{{18446744073709551606UL,2UL,2UL,18446744073709551606UL,0x4809426DL,0xDDD702C7L,0x17F27A6EL,18446744073709551615UL,0xC0E85E58L},{18446744073709551615UL,6UL,0UL,1UL,0x71493D5FL,18446744073709551614UL,18446744073709551614UL,0x71493D5FL,1UL},{0x616EDC88L,1UL,0x616EDC88L,0x3258CFFDL,0x4809426DL,18446744073709551615UL,1UL,18446744073709551611UL,0xDDD702C7L},{1UL,18446744073709551613UL,0x71493D5FL,18446744073709551606UL,2UL,0x204CB92DL,2UL,18446744073709551606UL,0x71493D5FL},{0xDDD702C7L,0xDDD702C7L,1UL,0x3258CFFDL,0xE6880DAFL,0x616EDC88L,0xC0E85E58L,0x17F27A6EL,2UL}}};
                    int i, j, k;
                    l_3375++;
                    if ((*g_268))
                        continue;
                    l_3229 = (l_3361 != (~((safe_rshift_func_int16_t_s_s(((safe_mod_func_uint32_t_u_u(((l_6 , &g_3348) != &g_2980), (~(!l_3382[3][3][1])))) , (safe_sub_func_int64_t_s_s((((*l_3197) = l_3385) == (l_3370 , (((((safe_lshift_func_uint8_t_u_u(l_3374, (l_3360 != l_3382[2][2][5]))) , 1L) , l_3388) != l_3365) , l_3389))), l_2))), 2)) || l_3352)));
                    for (g_888 = 0; (g_888 <= 2); g_888 += 1)
                    { /* block id: 1585 */
                        uint64_t *l_3398 = &g_629;
                        uint32_t l_3405 = 0x14A9940BL;
                        int32_t l_3406[9] = {1L,1L,1L,1L,1L,1L,1L,1L,1L};
                        int i, j;
                        l_3406[8] ^= ((((safe_add_func_uint64_t_u_u(((*l_3240)--), ((((safe_add_func_int16_t_s_s((((safe_lshift_func_uint16_t_u_u((((((*l_3398) = 0x4D91C8663151B76CLL) != 0x073A0058EBEA58B1LL) | l_3374) >= (safe_mul_func_int8_t_s_s((safe_sub_func_uint32_t_u_u(((*l_3185) == (void*)0), (safe_div_func_uint8_t_u_u((((*l_3158) |= l_3369) < 6UL), (l_3366 | (l_5 > 9UL)))))), l_3358[5]))), 9)) , &g_1567) == &g_1567), 0x1CACL)) == (*g_268)) < 0x93C5L) , l_3405))) >= l_3367) == (**g_1700)) ^ (*g_127));
                        if (l_3382[0][0][4])
                            continue;
                    }
                }
                if (l_3373)
                    continue;
                l_3410--;
            }
            l_3419[2]--;
        }
        else
        { /* block id: 1597 */
            int32_t *l_3429 = &g_75[0];
            uint16_t ***l_3481 = &g_642;
            uint16_t ****l_3480[8] = {(void*)0,(void*)0,(void*)0,(void*)0,(void*)0,(void*)0,(void*)0,(void*)0};
            int64_t l_3488[4][1][5] = {{{7L,6L,7L,6L,7L}},{{0L,0L,1L,1L,0L}},{{(-1L),6L,(-1L),6L,(-1L)}},{{0L,1L,1L,0L,0L}}};
            union U0 l_3502 = {0x32L};
            int16_t *l_3543 = &g_408;
            int64_t l_3545 = 0xCC9D81739EE3B76CLL;
            int32_t l_3548 = 0xFEF003C0L;
            int32_t l_3551 = 2L;
            int32_t l_3553[10] = {(-7L),(-7L),(-7L),(-7L),(-7L),(-7L),(-7L),(-7L),(-7L),(-7L)};
            uint8_t l_3555 = 1UL;
            int8_t l_3624 = (-4L);
            int16_t l_3665 = 0L;
            int32_t l_3689 = 0x13D17FE3L;
            uint64_t l_3693 = 1UL;
            uint32_t **l_3716 = (void*)0;
            uint32_t l_3753 = 0xBFB92AF7L;
            uint8_t l_3758 = 0xDAL;
            int64_t l_3759[1];
            int8_t l_3828 = 0xBFL;
            int32_t ** const ****l_3840 = (void*)0;
            int32_t l_3856 = (-8L);
            const uint32_t l_3872 = 3UL;
            uint32_t *****l_3934 = &g_3601;
            int i, j, k;
            for (i = 0; i < 1; i++)
                l_3759[i] = 0x4C49DDF402E1B26ALL;
            if (((-4L) > (((l_3368 = 0L) > (safe_sub_func_uint16_t_u_u(((*g_441) != l_3426), (safe_lshift_func_uint8_t_u_u(1UL, 3))))) > ((**g_1175) == l_3429))))
            { /* block id: 1599 */
                (*g_267) = &l_3388;
                return l_3369;
            }
            else
            { /* block id: 1602 */
                int16_t l_3436[5] = {0x12A2L,0x12A2L,0x12A2L,0x12A2L,0x12A2L};
                uint32_t ****l_3437 = &l_3308;
                int32_t l_3482 = 1L;
                int32_t l_3483 = 0xF7B6D19CL;
                int32_t l_3489 = 0x50343D68L;
                int32_t l_3494[2][7] = {{0xB2700B47L,(-2L),0x382AAF93L,0x34F800FAL,0x34F800FAL,0x382AAF93L,(-2L)},{0xB2700B47L,(-2L),0x382AAF93L,0x34F800FAL,0x34F800FAL,0x382AAF93L,(-2L)}};
                const uint64_t *l_3516[4][3] = {{&g_132,&l_3375,&g_132},{&g_132,&l_3375,&g_132},{&g_132,&l_3375,&g_132},{&g_132,&l_3375,&g_132}};
                uint64_t ***** const *l_3537 = &l_3385;
                int64_t l_3538 = 0xB72394C9ED776906LL;
                int8_t l_3552 = 0xE5L;
                uint16_t *****l_3635[9] = {&l_3480[2],&l_3480[2],&l_3480[2],&l_3480[2],&l_3480[2],&l_3480[2],&l_3480[2],&l_3480[2],&l_3480[2]};
                uint16_t ******l_3634 = &l_3635[2];
                int8_t *l_3654 = &l_3590[8];
                int8_t *l_3655 = &l_3544;
                int i, j;
lbl_3541:
                if ((0xC5581AAEL > (((&g_647[5][0] == ((*l_3437) = (((safe_sub_func_int64_t_s_s(((***g_276) = ((((safe_rshift_func_int16_t_s_s((((safe_mul_func_int8_t_s_s(((****g_2620) == ((((void*)0 != &l_3298) || 6L) ^ ((*g_1701) , 0x42C35DDFL))), 0x63L)) >= 0x1412F895L) < 0x6480L), 3)) , l_3436[4]) <= 0x67879153L) || 0x1F4B0C28L)), 18446744073709551615UL)) == 1UL) , l_3308))) != l_3436[4]) || g_746)))
                { /* block id: 1605 */
                    union U0 **l_3439 = (void*)0;
                    int32_t l_3453[4][8][4] = {{{0xA9A0789AL,0x9149705AL,0x36D971D7L,0xD6172A53L},{0x36D971D7L,0xD6172A53L,0x252D9B84L,0xD6172A53L},{1L,0x9149705AL,1L,0x36D971D7L},{0x90B9288CL,0x2C266790L,0xD6172A53L,(-1L)},{1L,1L,1L,1L},{0xD6172A53L,0xD6172A53L,0xA9A0789AL,0x2C266790L},{0x36D971D7L,1L,0xD6172A53L,0x9149705AL},{(-1L),(-4L),0x90B9288CL,0xD6172A53L}},{{0x5A1350BCL,(-4L),0x5A1350BCL,0x9149705AL},{(-4L),1L,0x252D9B84L,0x2C266790L},{0x2C266790L,0xD6172A53L,(-1L),1L},{1L,(-1L),(-1L),1L},{0x2C266790L,0x9149705AL,0x252D9B84L,0x5A1350BCL},{(-4L),(-4L),0x5A1350BCL,0xA9A0789AL},{0x5A1350BCL,0xA9A0789AL,0x90B9288CL,0xA9A0789AL},{(-1L),(-4L),0xD6172A53L,0x5A1350BCL}},{{0x36D971D7L,0x9149705AL,0xA9A0789AL,1L},{0xD6172A53L,(-1L),1L,1L},{0xD6172A53L,0xD6172A53L,0xA9A0789AL,0x2C266790L},{0x36D971D7L,1L,0xD6172A53L,0x9149705AL},{(-1L),(-4L),0x90B9288CL,0xD6172A53L},{0x5A1350BCL,(-4L),0x5A1350BCL,0x9149705AL},{(-4L),1L,0x252D9B84L,0x2C266790L},{0x2C266790L,0xD6172A53L,(-1L),1L}},{{1L,(-1L),(-1L),1L},{0x2C266790L,0x9149705AL,0x252D9B84L,0x5A1350BCL},{(-4L),(-4L),0x5A1350BCL,0xA9A0789AL},{0x5A1350BCL,0xA9A0789AL,0x90B9288CL,0xA9A0789AL},{(-1L),(-4L),0xD6172A53L,0x5A1350BCL},{0x36D971D7L,0x9149705AL,0xA9A0789AL,1L},{0xD6172A53L,(-1L),1L,1L},{0xD6172A53L,0xD6172A53L,0xA9A0789AL,0x2C266790L}}};
                    uint16_t ***l_3479 = &g_3116;
                    uint16_t ****l_3478 = &l_3479;
                    int i, j, k;
                    g_457 = l_3438;
                    (***g_2621) |= (((*l_3429) = (l_3453[2][7][1] = ((*g_983) == (safe_div_func_int16_t_s_s((safe_mul_func_int8_t_s_s((((void*)0 == &g_3349) != (safe_add_func_uint8_t_u_u(l_3446[0], ((((*g_457) = (*g_457)) , ((safe_rshift_func_uint8_t_u_u(0x6FL, 0)) && (**g_642))) ^ ((safe_mod_func_int64_t_s_s((safe_sub_func_uint64_t_u_u(18446744073709551607UL, l_3453[2][7][1])), (***g_276))) <= l_3436[0]))))), l_3419[2])), l_3436[4]))))) < l_3436[4]);
                    if (l_3446[2])
                    { /* block id: 1611 */
                        int16_t *l_3472 = &g_408;
                        int32_t l_3474 = 0L;
                        int32_t l_3477 = (-1L);
                        int64_t l_3484 = (-1L);
                        int16_t l_3490 = 8L;
                        uint32_t l_3491 = 0UL;
                        (***g_2621) = (l_3436[4] ^ ((((((safe_div_func_uint32_t_u_u((0L | (safe_div_func_int32_t_s_s(((l_3453[2][7][1] ^ ((++(**g_3116)) , (safe_add_func_int64_t_s_s((+((((safe_lshift_func_uint8_t_u_s(((+(safe_add_func_uint32_t_u_u((safe_lshift_func_int16_t_s_s(((((*l_3438) , (safe_add_func_uint64_t_u_u((safe_div_func_int64_t_s_s(((((*l_3472) &= 0x0CC3L) > (*g_1739)) || (safe_unary_minus_func_uint32_t_u((l_3474 = (*g_1701))))), (safe_rshift_func_int8_t_s_s(((0x2FF5L | ((**g_1574) ^= ((*g_127) | 18446744073709551615UL))) | 0x1D00L), l_3477)))), (-6L)))) | g_471) , l_3436[4]), l_3477)), l_3477))) < 0L), l_3375)) >= l_3375) , l_3478) == l_3480[2])), 18446744073709551615UL)))) & l_5), (**g_1700)))), (*g_1701))) , (*l_3298)) , l_3436[4]) || l_3477) && l_3477) ^ l_3453[2][7][1]));
                        g_3485--;
                        --l_3491;
                    }
                    else
                    { /* block id: 1619 */
                        uint32_t *l_3498 = &g_3322[2];
                        l_3495--;
                        (***g_1175) = (func_97((((*l_3429) && (l_3498 != (void*)0)) , func_57(func_57((***g_2978), func_13((safe_add_func_uint64_t_u_u((*l_3429), ((*g_2980) == (*g_3348))))), (***g_2978), l_3453[2][7][1], (*g_999)), (***g_2978), l_3429, (*g_268), &l_3453[1][3][0]))) , l_3489);
                        (****g_2620) = 7L;
                        return (*g_1739);
                    }
                }
                else
                { /* block id: 1625 */
                    const int32_t *l_3501 = &g_75[0];
                    int64_t *l_3514[1];
                    int i;
                    for (i = 0; i < 1; i++)
                        l_3514[i] = &l_3374;
                    (****g_2620) = ((((((l_3502 , (-1L)) == 0x94D1ECE486E951AELL) , (*l_3501)) , (**g_267)) < l_3494[1][1]) & (**g_267));
                    l_3370 &= ((safe_rshift_func_uint8_t_u_s(((((safe_mod_func_uint32_t_u_u(((safe_sub_func_uint8_t_u_u((l_3483 ^= (l_6 , ((safe_rshift_func_int16_t_s_u((safe_unary_minus_func_int16_t_s((((*g_127) == ((*l_3429) > (*l_3429))) & (((*g_856) = (*g_856)) == ((l_3363 &= (g_3515 = l_5)) , l_3516[0][0]))))), (((safe_add_func_uint32_t_u_u(((safe_div_func_int8_t_s_s((safe_lshift_func_uint8_t_u_s((*g_983), (((*g_1000) = ((*l_3429) || l_3523)) < (*g_1701)))), g_458.f0)) > (*g_268)), 0xE7B98EBDL)) ^ l_3446[0]) <= (*g_127)))) | l_3482))), (*l_3501))) ^ 1L), l_3489)) ^ (***g_276)) ^ 0x6712AC90L) & (*l_3429)), 4)) ^ (*g_127));
                }
                if (((safe_rshift_func_int8_t_s_u((*l_3429), 4)) & (((l_3369 &= l_3375) | (((**g_1700) = (((l_3419[2] , (safe_rshift_func_uint8_t_u_s((+(safe_lshift_func_uint16_t_u_s(((g_458.f1 , l_3530) != l_3533), 3))), 5))) && (l_3502 , l_3538)) >= 5L)) && 0x5B78E17CL)) || (*g_127))))
                { /* block id: 1636 */
                    int32_t l_3546 = (-2L);
                    int32_t l_3547 = 0x4E086909L;
                    int64_t l_3549 = (-3L);
                    int32_t l_3550 = 0L;
                    int8_t l_3574 = 0x5FL;
                    uint32_t *l_3575[4][4][2] = {{{&g_1860,&g_204},{&g_1860,&g_3322[2]},{&g_204,&g_3322[2]},{&g_1860,&g_204}},{{&g_1860,&g_3322[2]},{&g_204,&g_3322[2]},{&g_1860,&g_204},{&g_1860,&g_3322[2]}},{{&g_204,&g_3322[2]},{&g_1860,&g_204},{&g_1860,&g_3322[2]},{&g_204,&g_3322[2]}},{{&g_1860,&g_204},{&g_1860,&g_3322[2]},{&g_204,&g_3322[2]},{&g_1860,&g_204}}};
                    int8_t l_3579 = 0L;
                    int16_t ***l_3594[6][5][1];
                    int i, j, k;
                    for (i = 0; i < 6; i++)
                    {
                        for (j = 0; j < 5; j++)
                        {
                            for (k = 0; k < 1; k++)
                                l_3594[i][j][k] = &g_2230;
                        }
                    }
                    for (l_3495 = 13; (l_3495 > 19); ++l_3495)
                    { /* block id: 1639 */
                        if (l_3228.f0)
                            goto lbl_3541;
                        (***g_2621) = (l_3542[2] != l_3543);
                        (****g_2620) = 0xA5091839L;
                    }
                    --l_3555;
                    l_3547 ^= ((((***g_1175) | (safe_mod_func_int8_t_s_s((safe_rshift_func_int16_t_s_s((safe_add_func_uint64_t_u_u((safe_sub_func_int64_t_s_s((l_3426 != (void*)0), l_3482)), (***g_276))), 5)), (safe_add_func_int32_t_s_s((safe_lshift_func_int16_t_s_s(((((*l_3429) = (*g_1000)) >= l_3550) || (safe_add_func_uint32_t_u_u((safe_sub_func_uint64_t_u_u(((*g_1700) != ((l_3574 = (l_3436[4] || l_3544)) , l_3575[0][2][0])), (*l_3429))), l_3436[2]))), (**g_1744))), l_3549))))) >= 6L) <= 0xC7L);
                    (**g_2622) = ((safe_mul_func_uint16_t_u_u((*g_643), (l_3580++))) == (safe_add_func_int64_t_s_s(((l_3590[3] = (((--(*l_3240)) <= ((***g_276) = l_3574)) == (safe_mul_func_int16_t_s_s(0xD1B3L, (safe_unary_minus_func_uint32_t_u((**g_1700))))))) | (safe_lshift_func_int16_t_s_u(0L, 13))), ((((((*l_3543) ^= ((void*)0 == g_3593)) < (*g_1739)) == ((l_3594[4][4][0] != l_3595) < 0x384FL)) , g_746) , 0L))));
                }
                else
                { /* block id: 1654 */
                    uint32_t ******l_3599[8];
                    int32_t l_3609 = (-2L);
                    int32_t *l_3610 = &l_3551;
                    int8_t l_3622 = 3L;
                    int i;
                    for (i = 0; i < 8; i++)
                        l_3599[i] = &l_3598;
                    (***g_2978) = func_51(((*l_3158) ^= (!((g_3600[3][1][4] = (g_778 , l_3598)) == (((*l_3298) = (*g_457)) , (void*)0)))), ((((safe_add_func_uint16_t_u_u(((safe_mul_func_int8_t_s_s((((safe_lshift_func_uint8_t_u_s(((*g_983) = (((***g_1175) == (!((safe_unary_minus_func_int32_t_s(0x9CE8AE23L)) < 0xF4L))) || ((*g_983) , (l_3609 | g_135)))), l_3538)) > 3UL) & 0xE0A3L), l_3370)) , 65534UL), l_3363)) < l_3609) & (**g_2631)) ^ g_3176[0]), l_3489, &l_3388, l_3610);
                    (****g_2620) = l_3436[4];
                    for (g_3578 = 28; (g_3578 <= (-29)); --g_3578)
                    { /* block id: 1663 */
                        const uint32_t l_3615 = 0x1A635137L;
                        int32_t l_3623 = 0xFC5CCCB4L;
                        (****g_2978) ^= (**g_267);
                        (*g_267) = func_99(l_3482, (((**g_3116) = (!(((l_3494[0][2] <= (***g_1175)) && 0xCCDC2293L) , 1UL))) >= (l_3623 |= (safe_add_func_int64_t_s_s((*l_3610), ((l_3615 && (safe_mul_func_int16_t_s_s(l_3494[0][2], (safe_lshift_func_int8_t_s_u((((*l_3158) = (!(safe_mod_func_uint64_t_u_u((((*l_3429) | l_3622) , (*l_3610)), 2UL)))) > g_1337), (*l_3610)))))) , l_3489))))), (*g_457), (**g_276), (**g_276));
                        ++l_3626;
                    }
                }
                (**g_999) = (safe_rshift_func_uint16_t_u_u((((*l_3429) = l_3489) >= ((safe_mul_func_int8_t_s_s(((safe_unary_minus_func_uint64_t_u(((void*)0 != l_3634))) > ((safe_add_func_uint32_t_u_u((1UL > (safe_lshift_func_int8_t_s_s((safe_lshift_func_int8_t_s_s((safe_mul_func_uint16_t_u_u((((safe_sub_func_uint32_t_u_u((((***l_3595) = ((((*l_3437) = &g_647[5][0]) != (void*)0) > (((((l_3362 , ((safe_lshift_func_int8_t_s_s(((*l_3655) = (((-5L) == ((safe_div_func_uint16_t_u_u(((**g_1574)++), (safe_lshift_func_uint16_t_u_u((((((*l_3654) = ((*l_3158) = 0xE9L)) >= g_2033[0]) , l_3483) && 18446744073709551614UL), (*****g_3348))))) | 65528UL)) , l_3489)), g_133)) | 0xE2CB313EB04FFBB3LL)) && (**g_1700)) || 254UL) > 0xAC2D93AAL) <= l_3538))) , 0UL), l_3656)) < l_3375) , l_3580), l_3369)), g_409[0][0])), l_3436[4]))), (****g_2620))) , l_3489)), (*g_983))) < l_3371)), 9));
                (*g_999) = &l_3553[5];
            }
            if ((safe_sub_func_int32_t_s_s(0x09312BA0L, ((l_3659 == (void*)0) <= (safe_sub_func_int64_t_s_s((((*g_983) = (+((l_5 ^ ((*l_3429) |= ((*g_1000) = ((safe_mod_func_int16_t_s_s(((*g_457) , ((func_97(&l_3551) , (**g_1574)) , (l_3446[4] != l_3664))), l_3665)) && 0L)))) && (-1L)))) || (*g_983)), l_3363))))))
            { /* block id: 1685 */
                for (l_3228.f1 = 0; (l_3228.f1 <= 19); l_3228.f1++)
                { /* block id: 1688 */
                    for (g_1086 = 29; (g_1086 > (-2)); g_1086--)
                    { /* block id: 1691 */
                        if ((****g_2978))
                            break;
                    }
                }
                for (l_3624 = 0; (l_3624 < (-21)); --l_3624)
                { /* block id: 1697 */
                    if ((*l_3429))
                        break;
                }
            }
            else
            { /* block id: 1700 */
                int64_t ** const l_3680 = &g_127;
                int32_t l_3690 = (-9L);
                int32_t l_3691 = (-9L);
                uint32_t l_3692 = 0x6CBB8C67L;
                int16_t *l_3700[6];
                int16_t l_3748 = 0xD93AL;
                int16_t l_3792 = (-6L);
                uint64_t * const * const ***l_3794 = (void*)0;
                uint64_t * const * const **** const l_3793 = &l_3794;
                int64_t l_3795 = 0x2DEEDFD4EC26300BLL;
                int16_t l_3813 = 0x5ABEL;
                uint32_t ***l_3824 = &g_1700;
                int32_t *****l_3839 = &g_2978;
                int32_t ******l_3838 = &l_3839;
                int i;
                for (i = 0; i < 6; i++)
                    l_3700[i] = &g_408;
                (**g_999) = (g_78 != (*l_3429));
                if (l_3523)
                    goto lbl_3862;
                if (((*l_3429) = (safe_mul_func_int8_t_s_s(g_146, ((*g_983) = ((safe_rshift_func_int16_t_s_u((l_3693 &= (((*g_1701) , (0xE5L <= ((safe_mod_func_uint16_t_u_u((((*g_1739) > l_3371) || ((safe_sub_func_int8_t_s_s(((l_3680 != ((((safe_mul_func_uint16_t_u_u((****g_3349), (safe_sub_func_int32_t_s_s((l_3690 = ((**g_2622) = (l_5 ^ (safe_sub_func_uint64_t_u_u(((~(safe_lshift_func_int8_t_s_s((-1L), l_3371))) != 0x1357C7A0L), l_3689))))), l_3419[2])))) != (**g_3116)) , 1L) , (void*)0)) , (*l_3429)), l_3691)) > l_3446[1])), (*g_1739))) >= l_3692))) || (*l_3429))), 6)) | 0x8AD29F6C6A38AA53LL))))))
                { /* block id: 1707 */
                    int64_t l_3694 = 1L;
                    int32_t l_3695 = 3L;
                    uint8_t *l_3699 = &l_3555;
                    union U0 ***l_3711 = &l_3534[0];
                    if ((((((((*l_3298) , 1L) <= ((*l_3699) = ((0L ^ (l_3695 = l_3694)) && (safe_unary_minus_func_uint8_t_u((--(*g_983))))))) <= ((l_3694 <= (((((l_3700[3] != (void*)0) < ((**g_3116) = (**g_1574))) , (**g_267)) || 4294967287UL) ^ 0x0D56CD8E1D75A02ELL)) | 0xF31DCA78L)) <= l_3690) , (**g_3348)) != (void*)0))
                    { /* block id: 1712 */
                        (****g_2620) &= (safe_rshift_func_uint16_t_u_s(((g_3705 = l_3703) == &l_3543), l_3695));
                        return (*g_1739);
                    }
                    else
                    { /* block id: 1716 */
                        int16_t l_3712[8][6][5] = {{{(-1L),0x482FL,0x4D1EL,0xA893L,0x63D4L},{(-1L),0x00CCL,0x00CCL,(-1L),(-9L)},{1L,0xA893L,(-6L),(-1L),0x4207L},{(-9L),0x00CCL,0x189DL,(-9L),(-9L)},{0xA2F2L,0x482FL,0xA2F2L,(-1L),0x4D1EL},{0xD746L,(-1L),(-9L),(-1L),0xD746L}},{{0xA2F2L,(-1L),(-1L),0xA893L,(-1L)},{(-9L),(-9L),(-9L),0xD746L,0xB2A8L},{1L,(-1L),0xA2F2L,(-1L),(-1L)},{(-1L),0xD746L,0x189DL,0x189DL,0x189DL},{0x63D4L,0xA893L,0x4D1EL,0x482FL,(-1L)},{0xD746L,0xB2A8L,0xD746L,(-9L),(-9L)}},{{(-6L),(-1L),(-1L),(-1L),(-6L)},{0xD746L,0x00CCL,0xB2A8L,0x189DL,0xB2A8L},{0x63D4L,(-1L),(-1L),(-1L),1L},{0x00CCL,0xD746L,0xD746L,0x00CCL,0xB2A8L},{0xA2F2L,(-1L),0x4D1EL,0x4A24L,(-6L)},{0xB2A8L,0xD746L,(-9L),(-9L),(-9L)}},{{0x4207L,(-1L),0x4207L,0x4A24L,(-1L)},{0x189DL,0x00CCL,(-9L),0x00CCL,0x189DL},{0x4207L,(-1L),0x63D4L,(-1L),0x63D4L},{0xB2A8L,0xB2A8L,(-9L),0x189DL,(-1L)},{0xA2F2L,0xA893L,0x4207L,(-1L),0x63D4L},{0x00CCL,0x189DL,(-9L),(-9L),0x189DL}},{{0x63D4L,0xA893L,0x4D1EL,0x482FL,(-1L)},{0xD746L,0xB2A8L,0xD746L,(-9L),(-9L)},{(-6L),(-1L),(-1L),(-1L),(-6L)},{0xD746L,0x00CCL,0xB2A8L,0x189DL,0xB2A8L},{0x63D4L,(-1L),(-1L),(-1L),1L},{0x00CCL,0xD746L,0xD746L,0x00CCL,0xB2A8L}},{{0xA2F2L,(-1L),0x4D1EL,0x4A24L,(-6L)},{0xB2A8L,0xD746L,(-9L),(-9L),(-9L)},{0x4207L,(-1L),0x4207L,0x4A24L,(-1L)},{0x189DL,0x00CCL,(-9L),0x00CCL,0x189DL},{0x4207L,(-1L),0x63D4L,(-1L),0x63D4L},{0xB2A8L,0xB2A8L,(-9L),0x189DL,(-1L)}},{{0xA2F2L,0xA893L,0x4207L,(-1L),0x63D4L},{0x00CCL,0x189DL,(-9L),(-9L),0x189DL},{0x63D4L,0xA893L,0x4D1EL,0x482FL,(-1L)},{0xD746L,0xB2A8L,0xD746L,(-9L),(-9L)},{(-6L),(-1L),(-1L),(-1L),(-6L)},{0xD746L,0x00CCL,0xB2A8L,0x189DL,0xB2A8L}},{{0x63D4L,(-1L),(-1L),(-1L),1L},{0x00CCL,0xD746L,0xD746L,0x00CCL,0xB2A8L},{0xA2F2L,(-1L),0x4D1EL,0x4A24L,(-6L)},{0xB2A8L,0xD746L,(-9L),(-9L),(-9L)},{0x4207L,(-1L),0x4207L,0x4A24L,(-1L)},{0x189DL,0x00CCL,(-9L),0x00CCL,(-9L)}}};
                        const uint32_t ***l_3715 = &g_3713[0];
                        int i, j, k;
                        (*l_3429) &= (**g_2622);
                        (**g_2622) = ((((((void*)0 == (*l_3314)) , &g_3349) == &g_2981) > ((safe_mod_func_int64_t_s_s((((((((((void*)0 == l_3711) == ((l_3712[7][5][4] | (((*l_3715) = (((-4L) <= (0x4E8EA59DL != l_3690)) , g_3713[1])) != l_3716)) <= (*g_983))) , l_3690) || 1UL) || 0x80L) ^ l_6) & l_3712[7][5][4]) && (*l_3429)), 2UL)) > 0xD7L)) ^ (*l_3429));
                        (***g_1175) = ((safe_mod_func_uint8_t_u_u((safe_mul_func_int16_t_s_s(l_3690, ((*l_3543) = (((0x7EL ^ (*l_3429)) , ((l_3736 = (((**g_1700) = (safe_mul_func_int16_t_s_s((((l_3363 & 0x91F6L) | (*l_3429)) && (safe_lshift_func_uint16_t_u_s(((safe_rshift_func_int16_t_s_s(((*l_3429) = 7L), (((*g_457) , (((~(safe_sub_func_int8_t_s_s((safe_lshift_func_int8_t_s_s((safe_add_func_int32_t_s_s(((safe_mul_func_int16_t_s_s(l_3694, 1L)) >= l_3580), l_3735)), 0)), 0UL))) , l_3690) & 0x6822B2381C627CA9LL)) != l_3695))) && 18446744073709551606UL), 12))), (*g_1739)))) <= l_3664)) & l_3690)) == l_3691)))), (*g_983))) , 1L);
                    }
                    if ((safe_unary_minus_func_uint32_t_u((safe_unary_minus_func_int32_t_s((!((g_133 , ((safe_mul_func_int8_t_s_s((safe_mul_func_int16_t_s_s(((safe_sub_func_int64_t_s_s(0x26C8E728EBABCF00LL, (safe_sub_func_uint16_t_u_u(1UL, l_3736)))) <= l_3695), (safe_unary_minus_func_int32_t_s((l_3748 ^ (++(**g_1700))))))), (safe_sub_func_uint64_t_u_u(l_3753, (*l_3429))))) || ((safe_lshift_func_uint8_t_u_s((safe_lshift_func_int16_t_s_s(l_3758, l_3695)), l_3495)) , l_3759[0]))) >= l_3695)))))))
                    { /* block id: 1727 */
                        int32_t **l_3760 = &l_3[7][8][1];
                        (*l_3760) = (**g_2621);
                    }
                    else
                    { /* block id: 1729 */
                        int64_t l_3791 = (-7L);
                        (**g_2622) = ((((safe_lshift_func_int16_t_s_s((safe_mod_func_int64_t_s_s((((-9L) == (((*l_3543) = (safe_sub_func_uint32_t_u_u(((**g_1700) ^= l_3748), (((((safe_mul_func_int8_t_s_s((((safe_mul_func_uint16_t_u_u((g_3771 != (((safe_lshift_func_int16_t_s_s((((((safe_mul_func_uint8_t_u_u(l_3694, (8L && (4294967293UL & (*g_3714))))) & ((safe_mul_func_uint8_t_u_u((safe_unary_minus_func_uint8_t_u((!(safe_add_func_int32_t_s_s((4L ^ ((safe_mod_func_int8_t_s_s(((safe_div_func_uint32_t_u_u((safe_add_func_int16_t_s_s(((safe_mod_func_int8_t_s_s(((((((**l_3385) = (**l_3389)) != (void*)0) & 0x33A3L) && l_3790[0][4]) || 0x233F04E3L), 0x28L)) || (**g_999)), l_3694)), l_3791)) >= 0xB1L), l_3691)) ^ 0x3CBEL)), l_3792))))), l_3791)) <= 0x7B71L)) < (*g_1000)) != 1L) > (*g_127)), 6)) , l_3748) , l_3793)), (*l_3429))) & l_3368) || 0x36914F2FD50638ECLL), 0xD0L)) > 0L) , (void*)0) == g_1185) , (*l_3429))))) >= (-5L))) > l_3419[2]), l_3695)), 4)) | (*l_3429)) | l_3495) ^ l_3795);
                        return l_3791;
                    }
                }
                else
                { /* block id: 1736 */
                    uint64_t * const l_3798 = &l_3656;
                    int32_t l_3803[8][4][1] = {{{(-1L)},{1L},{(-1L)},{1L}},{{(-1L)},{1L},{(-1L)},{1L}},{{(-1L)},{1L},{(-1L)},{1L}},{{(-1L)},{1L},{(-1L)},{1L}},{{(-1L)},{1L},{(-1L)},{1L}},{{(-1L)},{1L},{(-1L)},{1L}},{{(-1L)},{1L},{(-1L)},{1L}},{{(-1L)},{1L},{(-1L)},{1L}}};
                    const uint32_t ****l_3826 = &l_3825[0][0];
                    union U0 ***l_3837 = &l_3534[4];
                    int32_t l_3853[9][7][4] = {{{0xB571F11DL,9L,(-1L),1L},{0xD0FA9223L,4L,(-2L),8L},{8L,1L,2L,1L},{0x489591CBL,(-5L),0x84DAE1CFL,0x1225A671L},{9L,1L,0xC3ACAE87L,0xF1EB5902L},{1L,(-1L),0x91EB2A23L,7L},{(-1L),0L,0L,(-1L)}},{{(-1L),0xE828EEB4L,3L,1L},{4L,0xBB7E3BACL,0xE28983ADL,0x10FCC4E9L},{0xBB7E3BACL,0L,0x1225A671L,0x053AB736L},{(-1L),1L,0xE8131784L,0xF1EB5902L},{0x7A8086E9L,0x84DAE1CFL,0xC416942FL,9L},{7L,(-5L),7L,(-1L)},{9L,(-10L),(-10L),8L}},{{0x0C547A2AL,1L,0x7D2C2085L,(-10L)},{0x1AB709E8L,9L,0x7D2C2085L,(-1L)},{0x0C547A2AL,7L,(-10L),(-1L)},{9L,(-1L),7L,0x0C547A2AL},{7L,0x0C547A2AL,0xC416942FL,0xB571F11DL},{0x7A8086E9L,0x1FB3E971L,0xE8131784L,0x7A8086E9L},{(-1L),(-1L),0x1225A671L,0x662EFE13L}},{{0xBB7E3BACL,1L,0xE28983ADL,(-1L)},{4L,(-3L),3L,1L},{(-1L),0xC416942FL,0L,0x662EFE13L},{(-1L),0x10FCC4E9L,0x91EB2A23L,0xE28983ADL},{1L,0x1FB3E971L,0xC3ACAE87L,0xD0FA9223L},{9L,1L,0x84DAE1CFL,0x0C547A2AL},{0x489591CBL,1L,2L,0x21B8CC8CL}},{{8L,7L,(-2L),0x1FB3E971L},{0xD0FA9223L,0L,(-1L),(-10L)},{0xB571F11DL,4L,0x21B8CC8CL,0L},{8L,(-10L),0L,1L},{0x2502D502L,0x73A90A79L,0x84DAE1CFL,9L},{0L,1L,1L,1L},{1L,1L,(-7L),7L}},{{0x1FB3E971L,7L,0L,0x10FCC4E9L},{0x91EB2A23L,0xE828EEB4L,1L,0L},{4L,0xE828EEB4L,8L,0x10FCC4E9L},{0xE828EEB4L,7L,0x1225A671L,7L},{(-1L),1L,1L,0x003CE246L},{0xC416942FL,(-1L),(-3L),0x7D2C2085L},{1L,0xC3ACAE87L,0x6D7917C2L,0x68B24717L}},{{0x57110039L,0xBB7E3BACL,6L,0xE8131784L},{0x1AB709E8L,0x84DAE1CFL,0xA66F9617L,0xBB7E3BACL},{0x489591CBL,6L,0x13596ED7L,0xB571F11DL},{0L,1L,6L,1L},{0x7D2C2085L,7L,(-10L),0x1AB709E8L},{1L,0L,0L,0x053AB736L},{(-1L),0xB571F11DL,1L,(-1L)}},{{0L,0L,1L,0x21B8CC8CL},{0x91EB2A23L,0L,(-1L),7L},{0xE49BE893L,(-1L),0L,0xCA2FA527L},{0L,2L,0x7A8086E9L,0x21B8CC8CL},{0xB571F11DL,1L,(-10L),0xC416942FL},{(-1L),0xB571F11DL,0x003CE246L,0x71246B4AL},{0x1225A671L,0x1AB709E8L,0x10FCC4E9L,0x1AB709E8L}},{{0x73A90A79L,0xCA2FA527L,(-1L),(-1L)},{0xE8131784L,1L,1L,1L},{0x053AB736L,0x1225A671L,0L,0xBB7E3BACL},{0x053AB736L,0xE49BE893L,1L,(-1L)},{0xE8131784L,0xBB7E3BACL,(-1L),(-1L)},{0x73A90A79L,1L,0x10FCC4E9L,0x7D2C2085L},{0x1225A671L,0x807C8DCEL,0x003CE246L,(-1L)}}};
                    int i, j, k;
                    (*g_999) = func_13((*g_983));
                    (***g_1175) = (((((safe_sub_func_int64_t_s_s((&l_3693 == l_3798), (*l_3429))) != ((((((safe_mul_func_uint8_t_u_u((((((safe_add_func_uint8_t_u_u(0UL, 0L)) < (((l_3690 < l_3803[5][2][0]) , ((safe_mod_func_uint32_t_u_u((safe_add_func_uint64_t_u_u((safe_div_func_int16_t_s_s(((&g_3600[3][1][4] != (func_97(func_13(((*g_983)--))) , (void*)0)) >= l_3812), l_3419[2])), l_3795)), (*l_3429))) == 1L)) ^ l_3813)) , (**g_642)) <= 0x2027L) <= (*l_3429)), g_3515)) && 0xCFL) ^ l_7) & l_3814) & 0x0B8C30BBDC12EE56LL) , l_3691)) || g_3815) <= (-1L)) && l_3690);
                    if ((l_3803[5][2][0] | (((0x85L || l_3691) < ((((**l_3680) = (~((safe_sub_func_int32_t_s_s(0x8D33576CL, (safe_rshift_func_uint8_t_u_u((safe_add_func_int8_t_s_s((((safe_lshift_func_uint16_t_u_s(((*g_127) != ((l_3824 == ((*l_3826) = (l_3748 , l_3825[0][0]))) || ((((l_3827[0] != (**g_3349)) || 0x1CL) == 0xE8B82DC7BBA9FDFCLL) && l_3828))), 2)) , 0xDDL) <= 1UL), l_3803[4][2][0])), l_3748)))) && (*l_3429)))) || 0L) , l_3664)) >= l_3829)))
                    { /* block id: 1742 */
                        int32_t *l_3836 = &g_75[2];
                        (***g_2621) |= (0x3F81L <= (safe_mul_func_int16_t_s_s((safe_lshift_func_uint16_t_u_u(((**g_642)--), 9)), 0xF858L)));
                        (**g_1175) = l_3836;
                    }
                    else
                    { /* block id: 1746 */
                        int16_t l_3841 = 0x5F4CL;
                        int32_t l_3852 = 0L;
                        uint64_t *****l_3854 = &g_1567;
                        int32_t l_3855[6][6] = {{3L,1L,3L,3L,1L,3L},{3L,1L,3L,3L,1L,3L},{3L,1L,3L,3L,1L,3L},{3L,1L,3L,3L,1L,3L},{3L,1L,3L,3L,1L,3L},{3L,1L,3L,3L,1L,3L}};
                        int i, j;
                        (**g_2622) = (((g_1185 == l_3837) && (l_3838 == l_3840)) < l_3803[5][1][0]);
                        l_3855[1][2] |= ((l_3841 != ((safe_add_func_uint64_t_u_u((((l_3853[3][3][2] ^= (safe_sub_func_uint64_t_u_u(((((*g_127) &= (l_3852 ^= (l_3846 && ((((((**l_3703) = ((******l_3838) <= ((**g_2620) == (void*)0))) , (g_3847 , (safe_rshift_func_int8_t_s_u(l_3803[5][1][0], (safe_mul_func_uint8_t_u_u((*g_983), 255UL)))))) , (***g_2621)) <= (*g_3714)) < 0xFB0546D3BB5BDDC7LL)))) , (*g_3310)) == (*g_3310)), 5L))) , l_3389) != l_3854), l_3841)) == l_3664)) || 1L);
                    }
                }
lbl_3862:
                l_3369 = ((l_3856 >= (*g_643)) & (((l_3857 = l_3857) == (((*****l_3839) = l_3580) , l_3858)) ^ (l_5 &= (safe_rshift_func_int16_t_s_u(0L, 14)))));
                for (l_6 = 0; (l_6 < 6); l_6++)
                { /* block id: 1762 */
                    int8_t l_3869 = 0x66L;
                    int32_t l_3881 = 9L;
                    int16_t *l_3885 = (void*)0;
                    if ((*****l_3839))
                    { /* block id: 1763 */
                        int8_t **l_3870 = (void*)0;
                        int8_t **l_3871 = &g_3328;
                        uint8_t l_3882 = 1UL;
                        uint64_t **** const **l_3910 = &l_3909[2];
                        uint8_t l_3911[4] = {0x92L,0x92L,0x92L,0x92L};
                        const int32_t *l_3914 = &l_3881;
                        int i;
                        g_3879 |= (((safe_add_func_uint64_t_u_u((safe_mul_func_int16_t_s_s(l_3869, (*g_1739))), (&g_708 == ((*l_3871) = (void*)0)))) , (((((*****l_3839) == ((0x80L && ((*g_983) = (*g_983))) , l_3872)) && (safe_add_func_int64_t_s_s((((safe_div_func_int8_t_s_s((safe_mul_func_int16_t_s_s(0x5326L, (*l_3429))), (*g_983))) & 0L) ^ (*l_3429)), 1L))) > (*****l_3839)) , 0x75F6BE4B492A4C37LL)) , (**g_267));
                        l_3882++;
                        (******l_3838) = (**g_2622);
                        l_3914 = func_99((*****l_3839), ((((void*)0 != l_3885) == ((safe_mod_func_uint32_t_u_u(((safe_sub_func_uint64_t_u_u((safe_add_func_int64_t_s_s(((((((safe_sub_func_int64_t_s_s(((((safe_lshift_func_uint16_t_u_s((safe_sub_func_uint16_t_u_u((safe_rshift_func_int16_t_s_s((l_3881 , (safe_mod_func_uint64_t_u_u(((safe_lshift_func_uint8_t_u_s((safe_sub_func_uint8_t_u_u((*****l_3839), (*g_983))), 4)) , ((0x433AL || ((*l_3543) = (+((l_3908 < ((((*l_3910) = l_3909[4]) != (*g_3771)) || l_3911[1])) >= 0x39BC5FC44F688776LL)))) != (*g_643))), (*g_127)))), l_3912[0])), (*g_643))), 13)) ^ l_3869) == 0x0D9A3BF5L) , l_3911[0]), (*****l_3839))) && l_3869) , (void*)0) != &g_277[0]) > (*g_2632)) & (**g_642)), (******l_3838))), 0xA445774BC6D1CC7ALL)) < 0UL), 0x210284B3L)) , l_3882)) , 0x7739L), (*l_3438), g_3913, &l_3625);
                    }
                    else
                    { /* block id: 1772 */
                        int32_t **l_3915 = &l_3[7][8][1];
                        (*l_3915) = (***g_2620);
                        if ((*g_268))
                            break;
                    }
                    return (*l_3429);
                }
            }
            l_3362 &= (safe_sub_func_uint64_t_u_u(((*l_3240) ^= (safe_sub_func_uint16_t_u_u((safe_rshift_func_int16_t_s_u(0L, (--(**g_1574)))), (((safe_add_func_int8_t_s_s((safe_mod_func_int64_t_s_s((((*g_1701) = (safe_rshift_func_int8_t_s_s((safe_rshift_func_int8_t_s_s((((*g_983) > ((safe_div_func_uint8_t_u_u(((&g_3601 != l_3934) & (safe_mul_func_uint8_t_u_u((safe_sub_func_int64_t_s_s((***g_276), (*g_127))), ((*****g_3348) <= (l_3419[2] > ((safe_add_func_uint8_t_u_u((l_7 != l_3912[3]), 0x03L)) == l_3912[2])))))), 3UL)) > 0x47L)) | (*l_3429)), g_2797)), 4))) != (-6L)), 2L)), l_3363)) , (*l_3429)) , 0x86BCL)))), l_3664));
        }
    }
    else
    { /* block id: 1784 */
        int32_t l_3943[3];
        int32_t l_3954 = (-1L);
        uint16_t ****l_3978 = (void*)0;
        uint16_t *****l_3977[1];
        const uint32_t *l_3980 = &l_2;
        uint32_t **l_3986 = &g_1701;
        uint32_t *******l_3990 = &l_3989;
        uint32_t *******l_3991 = (void*)0;
        uint32_t ******l_3993[10] = {&g_3600[4][2][3],&g_3600[4][2][3],&g_3600[4][2][3],&g_3600[4][2][3],&g_3600[4][2][3],&g_3600[4][2][3],&g_3600[4][2][3],&g_3600[4][2][3],&g_3600[4][2][3],&g_3600[4][2][3]};
        uint32_t *******l_3992 = &l_3993[3];
        uint64_t *****l_3998[3];
        int32_t l_4006 = 0x80D0535EL;
        int i;
        for (i = 0; i < 3; i++)
            l_3943[i] = 0x14357B69L;
        for (i = 0; i < 1; i++)
            l_3977[i] = &l_3978;
        for (i = 0; i < 3; i++)
            l_3998[i] = &g_1567;
        (**g_999) &= (-1L);
        for (g_3407 = 26; (g_3407 >= (-14)); g_3407--)
        { /* block id: 1788 */
            uint32_t l_3947 = 1UL;
            uint32_t **l_3979[8][9] = {{(void*)0,(void*)0,(void*)0,&g_1701,&g_1701,&g_1701,&g_1701,&g_1701,&g_1701},{&g_1701,(void*)0,&g_1701,&g_1701,&g_1701,(void*)0,&g_1701,&g_1701,&g_1701},{&g_1701,&g_1701,&g_1701,&g_1701,(void*)0,(void*)0,(void*)0,&g_1701,&g_1701},{&g_1701,&g_1701,&g_1701,&g_1701,&g_1701,&g_1701,(void*)0,&g_1701,(void*)0},{&g_1701,&g_1701,&g_1701,&g_1701,&g_1701,&g_1701,&g_1701,&g_1701,&g_1701},{&g_1701,&g_1701,(void*)0,&g_1701,&g_1701,&g_1701,&g_1701,(void*)0,&g_1701},{&g_1701,&g_1701,&g_1701,&g_1701,&g_1701,&g_1701,&g_1701,&g_1701,&g_1701},{&g_1701,(void*)0,&g_1701,(void*)0,&g_1701,&g_1701,&g_1701,&g_1701,&g_1701}};
            int32_t l_3985 = (-6L);
            int i, j;
            for (l_2 = 0; (l_2 <= 5); l_2 += 1)
            { /* block id: 1791 */
                int32_t l_3953 = 0x2CBB6FB6L;
                int8_t *l_3968 = (void*)0;
                int8_t *l_3969 = (void*)0;
                int8_t *l_3970 = (void*)0;
                int8_t *l_3971 = &g_458.f3;
                int32_t l_3972 = 0x21880BDEL;
                int i, j;
                (**g_2622) = (l_3943[0] , (*g_268));
                (***g_1175) |= (l_3944 <= (safe_lshift_func_uint8_t_u_s(((l_3947 && (l_3943[0] == ((((*l_3158) |= (safe_rshift_func_uint16_t_u_u(l_3950, 13))) | (g_3254 = (safe_rshift_func_uint8_t_u_u(l_3953, 5)))) != ((*g_983)++)))) <= (safe_mod_func_uint64_t_u_u((l_3495 && (safe_lshift_func_uint8_t_u_u((safe_lshift_func_int8_t_s_s((safe_unary_minus_func_int64_t_s((safe_sub_func_uint32_t_u_u((safe_mul_func_int8_t_s_s(((*l_3971) = l_3954), (l_3943[1] | (*****g_3348)))), l_3664)))), l_3972)), l_3947))), l_3972))), 6)));
            }
            (**g_999) = ((((((**l_3596) = (safe_mod_func_uint8_t_u_u(((safe_lshift_func_uint16_t_u_u(((void*)0 != l_3977[0]), 7)) & (l_3979[4][5] != (((*g_457) = ((l_3947 && (l_3954 ^= ((l_3943[0] || (l_3980 != (((safe_rshift_func_int16_t_s_s(((****g_2978) | ((safe_mod_func_uint8_t_u_u(l_3947, l_3985)) != l_3943[1])), 7)) | l_3943[2]) , l_3980))) ^ 0xF710904B1728434FLL))) , (*g_457))) , l_3986))), l_3943[2]))) & (*g_2632)) < 0UL) >= 0x51L) ^ l_3944);
            if (g_3515)
                goto lbl_4001;
        }
lbl_4001:
        (***g_1175) = (safe_div_func_uint16_t_u_u(0x3752L, ((((*l_3990) = l_3989) == ((*l_3992) = &g_3600[3][1][4])) , ((((safe_add_func_uint16_t_u_u((safe_mul_func_uint16_t_u_u(l_3371, ((((l_3998[0] != (void*)0) & ((((l_3954 , (safe_mul_func_uint16_t_u_u((*g_2632), ((l_3943[0] , 0xF4L) >= 1UL)))) <= 0L) | 0xF16E067CL) < (-2L))) != 9UL) > l_3362))), (*g_643))) , (void*)0) == (void*)0) , 0x3FC4L))));
        for (g_458.f2 = 12; (g_458.f2 < 6); g_458.f2--)
        { /* block id: 1810 */
            uint16_t l_4014 = 0UL;
            for (g_3879 = 0; (g_3879 >= 0); g_3879++)
            { /* block id: 1813 */
                int32_t *l_4007 = &l_7;
                int32_t *l_4008 = &g_75[0];
                int32_t *l_4009 = &l_3362;
                int32_t *l_4010 = (void*)0;
                int32_t *l_4011 = (void*)0;
                int32_t *l_4012[6] = {&l_3943[0],&l_3943[0],&l_3943[0],&l_3943[0],&l_3943[0],&l_3943[0]};
                int64_t l_4013 = 0x2BE90AF3ABBB321ALL;
                int i;
                ++l_4014;
                return l_4006;
            }
            return l_4014;
        }
    }
    return l_4017;
}


/* ------------------------------------------ */
/* 
 * reads : g_20 g_999 g_1000
 * writes: g_20
 */
static int32_t * func_13(uint8_t  p_14)
{ /* block id: 10 */
    int32_t *l_15 = (void*)0;
    int32_t *l_16 = (void*)0;
    int32_t l_17[7][6] = {{2L,1L,0xDDB2097EL,1L,1L,0xDDB2097EL},{2L,(-1L),1L,(-3L),0xF8DE905FL,(-9L)},{0L,(-1L),1L,(-1L),1L,1L},{0x1450187EL,1L,1L,0x1450187EL,(-1L),(-9L)},{(-3L),3L,1L,0x1450187EL,(-9L),0xDDB2097EL},{0x1450187EL,(-9L),0xDDB2097EL,(-1L),(-9L),3L},{0L,3L,(-1L),(-3L),(-1L),3L}};
    int32_t *l_18[7] = {&g_4[0],&g_4[0],&g_4[0],&g_4[0],&g_4[0],&g_4[0],&g_4[0]};
    int8_t l_19 = 0xA6L;
    int16_t l_21[7][4][1] = {{{0x8108L},{0x030DL},{1L},{1L}},{{1L},{0x030DL},{0x8108L},{0x030DL}},{{1L},{1L},{1L},{0x030DL}},{{0x8108L},{0x030DL},{1L},{1L}},{{1L},{0x030DL},{0x8108L},{0x030DL}},{{1L},{1L},{1L},{0x030DL}},{{0x8108L},{0x030DL},{1L},{1L}}};
    uint64_t l_22 = 18446744073709551615UL;
    uint16_t l_2653 = 65530UL;
    uint32_t l_3086 = 4294967289UL;
    int32_t ***l_3091 = &g_999;
    int i, j, k;
    l_22++;
    for (l_19 = 0; (l_19 <= (-1)); l_19 = safe_sub_func_uint32_t_u_u(l_19, 9))
    { /* block id: 14 */
        int32_t *l_27[5];
        int i;
        for (i = 0; i < 5; i++)
            l_27[i] = &l_17[3][1];
        g_20 = 0x22E85F59L;
        return &g_20;
    }
    for (g_20 = 0; (g_20 <= 15); g_20 = safe_add_func_int64_t_s_s(g_20, 7))
    { /* block id: 20 */
        union U0 l_43[1][9][2] = {{{{-6L},{0xEAL}},{{0x1EL},{-2L}},{{0x1EL},{0xEAL}},{{-6L},{-6L}},{{0xEAL},{0x1EL}},{{-2L},{0x1EL}},{{0xEAL},{-6L}},{{-6L},{0xEAL}},{{0x1EL},{-2L}}}};
        int32_t *l_2652 = &g_4[4];
        uint64_t *l_2654 = &g_132;
        const uint32_t *l_3095 = &g_254;
        const uint32_t **l_3094[8][7] = {{&l_3095,&l_3095,&l_3095,&l_3095,&l_3095,&l_3095,&l_3095},{&l_3095,&l_3095,&l_3095,&l_3095,&l_3095,&l_3095,&l_3095},{&l_3095,&l_3095,&l_3095,&l_3095,&l_3095,&l_3095,&l_3095},{&l_3095,&l_3095,&l_3095,&l_3095,&l_3095,&l_3095,&l_3095},{&l_3095,&l_3095,&l_3095,&l_3095,&l_3095,&l_3095,&l_3095},{&l_3095,&l_3095,&l_3095,&l_3095,&l_3095,&l_3095,&l_3095},{&l_3095,&l_3095,&l_3095,&l_3095,&l_3095,&l_3095,&l_3095},{&l_3095,&l_3095,&l_3095,&l_3095,&l_3095,&l_3095,&l_3095}};
        uint16_t **l_3114 = &g_643;
        uint16_t ***l_3115 = &g_642;
        uint16_t ***l_3117 = (void*)0;
        uint16_t ***l_3118 = &l_3114;
        int i, j, k;
    }
    return (**l_3091);
}


/* ------------------------------------------ */
/* 
 * reads : g_642 g_643 g_177 g_209.f2 g_2193.f0 g_1739 g_384 g_1585 g_127 g_128 g_409 g_983 g_130 g_1175 g_999 g_1000 g_20 g_2620 g_2621 g_2622 g_267 g_268 g_4 g_135 g_2193.f1 g_1738 g_147 g_78 g_458.f2 g_1679 g_2866 g_159 g_888 g_276 g_277 g_2033 g_67 g_2895 g_2797 g_2632 g_380 g_1701 g_132 g_2307 g_1574 g_254 g_209.f3 g_2980 g_458.f3 g_2193.f3 g_458.f0 g_2978 g_206 g_1567 g_1568 g_1569 g_708
 * writes: g_647 g_209.f2 g_384 g_2193.f0 g_2193.f2 g_177 g_1000 g_268 g_383 g_78 g_1744 g_458.f2 g_130 g_1567 g_1679 g_1585 g_128 g_253 g_2895 g_254 g_132 g_209.f3 g_2978 g_2797 g_4 g_458.f3 g_2193.f3 g_67 g_206 g_1569 g_2033 g_708 g_457
 */
static uint64_t  func_34(int32_t  p_35, uint64_t  p_36, int8_t  p_37, int32_t * p_38)
{ /* block id: 1210 */
    uint32_t l_2659 = 0xE6BBA822L;
    const uint32_t *l_2661 = &l_2659;
    const uint32_t **l_2660 = &l_2661;
    uint32_t ***l_2662 = &g_647[5][0];
    union U0 l_2663[9][8][3] = {{{{0L},{0L},{0x70L}},{{1L},{-1L},{-4L}},{{-1L},{1L},{0x3EL}},{{1L},{0xBEL},{5L}},{{-1L},{0L},{0L}},{{0x45L},{-5L},{0x45L}},{{-1L},{0x70L},{0x62L}},{{7L},{0x50L},{0x60L}}},{{{1L},{7L},{0x69L}},{{0x43L},{8L},{-6L}},{{1L},{-5L},{-2L}},{{7L},{0x19L},{0L}},{{-1L},{0L},{0x60L}},{{0x45L},{0x70L},{0x37L}},{{-1L},{-1L},{-1L}},{{1L},{-1L},{0x0BL}}},{{{8L},{0x70L},{-6L}},{{-1L},{0L},{5L}},{{-9L},{0x19L},{0x69L}},{{0x60L},{-5L},{-1L}},{{0x45L},{8L},{1L}},{{7L},{7L},{-1L}},{{-1L},{0x50L},{0x69L}},{{0L},{0x70L},{5L}}},{{{0x37L},{-5L},{-6L}},{{-9L},{0L},{0x0BL}},{{-1L},{0xBEL},{-1L}},{{-1L},{-1L},{0x37L}},{{-9L},{7L},{0x60L}},{{0x37L},{-1L},{0L}},{{0L},{8L},{-2L}},{{-1L},{0xBEL},{-6L}}},{{{7L},{-1L},{0x69L}},{{0x45L},{0xBEL},{0x60L}},{{0x60L},{8L},{0x62L}},{{-9L},{-1L},{0x45L}},{{-1L},{7L},{0L}},{{8L},{-1L},{5L}},{{1L},{0xBEL},{5L}},{{-1L},{0L},{0L}}},{{{0x45L},{-5L},{0x45L}},{{-1L},{0x70L},{0x62L}},{{7L},{0x50L},{0x60L}},{{1L},{7L},{0x69L}},{{0x43L},{8L},{-6L}},{{1L},{-5L},{-2L}},{{7L},{0x19L},{0L}},{{-1L},{0L},{0x60L}}},{{{0x45L},{0x70L},{0x37L}},{{-1L},{-1L},{-1L}},{{1L},{-1L},{0x0BL}},{{8L},{0x70L},{-6L}},{{-1L},{0L},{5L}},{{-9L},{0x19L},{0x69L}},{{0x60L},{-5L},{-1L}},{{0x45L},{8L},{1L}}},{{{7L},{7L},{-1L}},{{-1L},{0x50L},{0x69L}},{{0L},{0x70L},{5L}},{{0x37L},{-5L},{-6L}},{{-9L},{0L},{0x0BL}},{{-1L},{0xBEL},{-1L}},{{-1L},{-1L},{0x37L}},{{-9L},{7L},{0x60L}}},{{{0x37L},{-1L},{0L}},{{0L},{8L},{-2L}},{{-1L},{-1L},{0xD9L}},{{-1L},{0x69L},{7L}},{{-1L},{-1L},{8L}},{{8L},{-1L},{1L}},{{0x42L},{8L},{-1L}},{{0x73L},{0L},{-1L}}}};
    int32_t ****l_2677[8];
    int32_t *****l_2676[1][1];
    uint64_t ****l_2686 = &g_1568[4][1];
    uint16_t ***l_2785 = &g_642;
    uint16_t *** const *l_2784 = &l_2785;
    uint32_t ****l_2874 = &g_1926[0];
    uint32_t *****l_2873[9][1] = {{(void*)0},{&l_2874},{(void*)0},{&l_2874},{(void*)0},{&l_2874},{(void*)0},{&l_2874},{(void*)0}};
    int8_t *l_2888[5][6] = {{(void*)0,(void*)0,(void*)0,(void*)0,(void*)0,(void*)0},{(void*)0,(void*)0,(void*)0,(void*)0,(void*)0,(void*)0},{(void*)0,(void*)0,(void*)0,(void*)0,(void*)0,(void*)0},{(void*)0,(void*)0,(void*)0,(void*)0,(void*)0,(void*)0},{(void*)0,(void*)0,(void*)0,(void*)0,(void*)0,(void*)0}};
    union U0 **l_2893[8] = {&g_457,&g_457,&g_457,&g_457,&g_457,&g_457,&g_457,&g_457};
    int64_t l_3030 = 6L;
    uint32_t l_3043 = 1UL;
    uint64_t l_3070[3];
    int8_t l_3080 = 0x9DL;
    int i, j, k;
    for (i = 0; i < 8; i++)
        l_2677[i] = &g_1175;
    for (i = 0; i < 1; i++)
    {
        for (j = 0; j < 1; j++)
            l_2676[i][j] = &l_2677[1];
    }
    for (i = 0; i < 3; i++)
        l_3070[i] = 0xA9198D57D8E9CE12LL;
    if ((safe_sub_func_int32_t_s_s(((p_37 <= (l_2659 >= (l_2659 , (l_2660 != ((*l_2662) = &g_648))))) == (p_37 | ((((l_2663[5][6][0] , (0UL ^ (safe_add_func_uint16_t_u_u(65527UL, l_2659)))) || 255UL) > 0xD69664490FDEA123LL) , (**g_642)))), p_36)))
    { /* block id: 1212 */
        uint32_t l_2678 = 0xD9A0AAF9L;
        int32_t l_2679 = 0xD6B89FB5L;
        int32_t l_2729 = 0xEED0CCDFL;
        int32_t l_2765 = (-4L);
        int32_t l_2768[6][4][2] = {{{0L,0x5E79F3B8L},{0x77FE2768L,8L},{0x78A14A41L,8L},{0x77FE2768L,0x5E79F3B8L}},{{0L,0x35D21069L},{0L,0x5E79F3B8L},{0x77FE2768L,8L},{0x78A14A41L,8L}},{{0x77FE2768L,0x5E79F3B8L},{0L,0x35D21069L},{0L,0x5E79F3B8L},{0x77FE2768L,8L}},{{0x78A14A41L,8L},{0x77FE2768L,0x5E79F3B8L},{0L,0x35D21069L},{0L,0x5E79F3B8L}},{{0x77FE2768L,8L},{0x78A14A41L,8L},{0x77FE2768L,0x5E79F3B8L},{0L,0x35D21069L}},{{0L,0x5E79F3B8L},{0x77FE2768L,8L},{0x78A14A41L,8L},{0x77FE2768L,0x5E79F3B8L}}};
        uint64_t ****l_2800 = &g_1568[4][0];
        int64_t *l_2804 = &g_253;
        uint16_t l_2820[8] = {0x422DL,65530UL,65530UL,0x422DL,65530UL,65530UL,0x422DL,65530UL};
        uint32_t l_2877 = 0x2C8835BCL;
        int16_t l_2914 = 0x56BAL;
        uint16_t *** const **l_2979 = &l_2784;
        int64_t l_3041[4];
        int16_t *l_3062 = &g_384;
        int32_t *l_3075 = &g_2033[0];
        int i, j, k;
        for (i = 0; i < 4; i++)
            l_3041[i] = 0xDC70C96AD5BD10D0LL;
        for (g_209.f2 = 0; (g_209.f2 > 21); g_209.f2 = safe_add_func_int64_t_s_s(g_209.f2, 4))
        { /* block id: 1215 */
            const int32_t *l_2672 = (void*)0;
            union U0 l_2673 = {4L};
            int32_t l_2736 = 0L;
            union U0 ** const l_2753[9][8][3] = {{{(void*)0,&g_457,&g_457},{&g_457,(void*)0,&g_457},{&g_457,&g_457,(void*)0},{&g_457,&g_457,&g_457},{(void*)0,(void*)0,&g_457},{&g_457,(void*)0,&g_457},{&g_457,(void*)0,(void*)0},{&g_457,&g_457,&g_457}},{{(void*)0,&g_457,&g_457},{&g_457,(void*)0,&g_457},{&g_457,&g_457,(void*)0},{&g_457,&g_457,&g_457},{(void*)0,(void*)0,&g_457},{&g_457,(void*)0,&g_457},{&g_457,(void*)0,(void*)0},{&g_457,&g_457,&g_457}},{{(void*)0,&g_457,&g_457},{&g_457,(void*)0,&g_457},{&g_457,&g_457,(void*)0},{&g_457,&g_457,&g_457},{(void*)0,(void*)0,&g_457},{&g_457,(void*)0,&g_457},{&g_457,(void*)0,(void*)0},{&g_457,&g_457,&g_457}},{{&g_457,&g_457,(void*)0},{&g_457,(void*)0,(void*)0},{&g_457,&g_457,&g_457},{&g_457,&g_457,(void*)0},{&g_457,&g_457,(void*)0},{&g_457,(void*)0,&g_457},{&g_457,&g_457,&g_457},{&g_457,&g_457,&g_457}},{{&g_457,&g_457,(void*)0},{&g_457,(void*)0,(void*)0},{&g_457,&g_457,&g_457},{&g_457,&g_457,(void*)0},{&g_457,&g_457,(void*)0},{&g_457,(void*)0,&g_457},{&g_457,&g_457,&g_457},{&g_457,&g_457,&g_457}},{{&g_457,&g_457,(void*)0},{&g_457,(void*)0,(void*)0},{&g_457,&g_457,&g_457},{&g_457,&g_457,(void*)0},{&g_457,&g_457,(void*)0},{&g_457,(void*)0,&g_457},{&g_457,&g_457,&g_457},{&g_457,&g_457,&g_457}},{{&g_457,&g_457,(void*)0},{&g_457,(void*)0,(void*)0},{&g_457,&g_457,&g_457},{&g_457,&g_457,(void*)0},{&g_457,&g_457,(void*)0},{&g_457,(void*)0,&g_457},{&g_457,&g_457,&g_457},{&g_457,&g_457,&g_457}},{{&g_457,&g_457,(void*)0},{&g_457,(void*)0,(void*)0},{&g_457,&g_457,&g_457},{&g_457,&g_457,(void*)0},{&g_457,&g_457,(void*)0},{&g_457,(void*)0,&g_457},{&g_457,&g_457,&g_457},{&g_457,&g_457,&g_457}},{{&g_457,&g_457,(void*)0},{&g_457,(void*)0,(void*)0},{&g_457,&g_457,&g_457},{&g_457,&g_457,(void*)0},{&g_457,&g_457,(void*)0},{&g_457,(void*)0,&g_457},{&g_457,&g_457,&g_457},{&g_457,&g_457,&g_457}}};
            int16_t l_2816 = 9L;
            int32_t ****l_2824[10][1] = {{&g_1175},{&g_1175},{&g_1175},{&g_1175},{&g_1175},{&g_1175},{&g_1175},{&g_1175},{&g_1175},{&g_1175}};
            int i, j, k;
            if ((safe_mul_func_uint8_t_u_u(0xE0L, l_2659)))
            { /* block id: 1216 */
                int32_t *****l_2674 = (void*)0;
                int32_t l_2735 = 1L;
                union U0 *l_2739[5][7] = {{&l_2673,&g_458,&l_2673,&g_458,&l_2673,&g_458,&l_2673},{&g_458,&g_458,&g_458,&g_458,&g_458,&g_458,&g_458},{(void*)0,&g_458,(void*)0,&g_458,(void*)0,&g_458,(void*)0},{&g_458,&g_458,&g_458,&g_458,&g_458,&g_458,&g_458},{&l_2673,&g_458,&l_2673,&g_458,&l_2673,&g_458,&l_2673}};
                int32_t l_2763[5][10] = {{6L,0x397EDD9EL,0x5DA38F3AL,0x1FBBC128L,(-8L),1L,1L,0x4CB10F04L,1L,1L},{0x38C35325L,8L,0xA33152A2L,8L,0x38C35325L,0x1FBBC128L,1L,0xB1074C35L,0x02D6F10EL,0x264D6A40L},{0x1FBBC128L,1L,0xB1074C35L,0x02D6F10EL,0x264D6A40L,6L,0L,0L,6L,0x264D6A40L},{0xA33152A2L,0x02D6F10EL,0x02D6F10EL,0xA33152A2L,0x38C35325L,0x397EDD9EL,0x5DA38F3AL,0x1FBBC128L,(-8L),1L},{0x99EB6806L,0x38C35325L,0x4472C795L,6L,(-8L),0x5DA38F3AL,0x02D6F10EL,0x5DA38F3AL,(-8L),6L}};
                int32_t *l_2773 = &l_2735;
                union U0 l_2802[3] = {{0x44L},{0x44L},{0x44L}};
                int64_t * const l_2803 = &g_128[0][3][1];
                int i, j;
                for (g_384 = 0; (g_384 >= (-27)); g_384 = safe_sub_func_int8_t_s_s(g_384, 9))
                { /* block id: 1219 */
                    int32_t ******l_2675[7];
                    int16_t *l_2702 = &g_2193.f2;
                    int16_t ***l_2705 = (void*)0;
                    union U0 l_2712[6] = {{-1L},{-1L},{-1L},{-1L},{-1L},{-1L}};
                    int32_t *l_2727[10] = {&g_67[1],&g_67[1],&g_67[1],&g_67[1],&g_67[1],&g_67[1],&g_67[1],&g_67[1],&g_67[1],&g_67[1]};
                    int64_t ***l_2734 = (void*)0;
                    int i;
                    for (i = 0; i < 7; i++)
                        l_2675[i] = &l_2674;
                    l_2679 |= (l_2673 , (p_35 = ((&g_2620 != (l_2676[0][0] = l_2674)) , l_2678)));
                    for (g_2193.f0 = (-14); (g_2193.f0 > (-17)); g_2193.f0 = safe_sub_func_uint32_t_u_u(g_2193.f0, 3))
                    { /* block id: 1225 */
                        uint16_t l_2695 = 65529UL;
                        p_35 = (safe_mul_func_int8_t_s_s(p_36, ((p_36 && ((safe_lshift_func_int16_t_s_u((*g_1739), 11)) <= (!g_1585))) || (l_2686 == ((safe_rshift_func_int16_t_s_u(((1L & (0x875FC4C2A9E98904LL >= (*g_127))) && (safe_mul_func_int16_t_s_s((safe_rshift_func_uint8_t_u_s((((1L ^ 0x59L) != g_409[0][0]) & l_2679), 5)), p_35))), 10)) , &g_1568[4][1])))));
                        return l_2695;
                    }
                    if ((safe_rshift_func_int16_t_s_u(((*l_2702) = (safe_rshift_func_int8_t_s_s(p_35, (safe_sub_func_int64_t_s_s(p_35, 0xD0504981CA921F75LL))))), 8)))
                    { /* block id: 1230 */
                        uint64_t *****l_2723 = &l_2686;
                        uint64_t *****l_2725 = &l_2686;
                        uint64_t ******l_2724 = &l_2725;
                        const int32_t l_2726 = 0x5342A3C5L;
                        int32_t l_2728 = (-1L);
                        int8_t l_2730[2][2] = {{0xAAL,0xAAL},{0xAAL,0xAAL}};
                        int i, j;
                        l_2728 ^= (((safe_lshift_func_int8_t_s_s(1L, 2)) ^ ((l_2705 == (((((safe_div_func_int64_t_s_s((safe_add_func_uint16_t_u_u((~((**g_642) = 5UL)), ((-1L) | (p_37 && (255UL ^ (safe_div_func_uint16_t_u_u((l_2712[4] , (safe_rshift_func_int8_t_s_u((safe_lshift_func_int16_t_s_s((safe_lshift_func_int16_t_s_s((((safe_mod_func_uint32_t_u_u((safe_mul_func_uint16_t_u_u((l_2723 != ((*l_2724) = (void*)0)), (*g_1739))), p_37)) | p_35) == p_35), 7)), l_2726)), (*g_983)))), 0xB71CL))))))), (*g_127))) , (void*)0) != l_2727[5]) || 0x8EL) , (void*)0)) >= (*g_1739))) , (***g_1175));
                        if ((****g_2620))
                            break;
                        l_2730[1][1] = l_2729;
                    }
                    else
                    { /* block id: 1236 */
                        return p_37;
                    }
                    if ((safe_lshift_func_uint16_t_u_u(((((*l_2702) = 0L) != p_36) | p_37), 7)))
                    { /* block id: 1240 */
                        uint32_t l_2733 = 0x82ED76E6L;
                        l_2733 = (-1L);
                    }
                    else
                    { /* block id: 1242 */
                        l_2735 &= (l_2734 == l_2734);
                    }
                }
                l_2736 |= (**g_267);
                if ((safe_add_func_uint8_t_u_u((l_2736 = ((void*)0 == l_2739[3][2])), p_35)))
                { /* block id: 1248 */
                    uint16_t l_2740 = 1UL;
                    int32_t l_2761 = (-6L);
                    int32_t l_2762 = 0x8DFA1675L;
                    int32_t l_2766 = (-5L);
                    uint32_t l_2770[4] = {0UL,0UL,0UL,0UL};
                    int i;
                    ++l_2740;
                    for (l_2740 = 27; (l_2740 != 5); l_2740 = safe_sub_func_uint16_t_u_u(l_2740, 2))
                    { /* block id: 1252 */
                        int16_t l_2760[10];
                        int32_t l_2764 = 6L;
                        int32_t l_2769[3];
                        int i;
                        for (i = 0; i < 10; i++)
                            l_2760[i] = (-8L);
                        for (i = 0; i < 3; i++)
                            l_2769[i] = (-6L);
                        (**g_1175) = &l_2736;
                        --l_2770[2];
                        (*g_999) = (void*)0;
                        return l_2760[2];
                    }
                }
                else
                { /* block id: 1261 */
                    uint32_t l_2796 = 9UL;
                    int32_t *l_2798[5] = {(void*)0,(void*)0,(void*)0,(void*)0,(void*)0};
                    int i;
                    if ((*g_268))
                    { /* block id: 1262 */
                        uint16_t *** const **l_2786 = &l_2784;
                        int32_t l_2795 = 0x7599A3ABL;
                        uint64_t ****l_2799 = &g_1568[4][0];
                        int16_t *l_2801 = &l_2673.f2;
                        if (p_37)
                            break;
                        l_2773 = ((*g_999) = (*g_999));
                        (*g_267) = func_99(p_36, ((*l_2801) = (p_37 > (safe_mul_func_uint16_t_u_u(((((safe_rshift_func_uint16_t_u_s((0xA7D8L | 0x13AAL), (((safe_sub_func_uint16_t_u_u((((p_36 < (((p_35 , (***g_2620)) != (void*)0) & p_37)) | p_35) > p_35), p_36)) , l_2799) != l_2800))) || p_35) < (**g_999)) , 0x0759L), p_37)))), l_2802[1], l_2803, l_2804);
                        (*g_999) = (*g_999);
                    }
                    else
                    { /* block id: 1271 */
                        int32_t *l_2805 = &g_4[3];
                        int32_t l_2819 = 0x77B6F82EL;
                        uint8_t *l_2821 = &g_183;
                        int16_t *l_2822 = &g_383;
                        int32_t ****l_2823 = &g_1175;
                        (*g_999) = &p_35;
                        (**g_999) |= (p_37 , 0xFCBABA69L);
                        (***g_1175) = (((*g_1739) >= ((&g_2630[1] == (void*)0) ^ (l_2820[0] & ((((p_37 && ((((*l_2822) = ((void*)0 == l_2821)) , ((l_2823 = &g_1175) == l_2824[5][0])) || (****l_2823))) >= (*g_1739)) ^ 1UL) == l_2678)))) >= 0xCDL);
                        return p_35;
                    }
                    for (g_2193.f0 = 4; (g_2193.f0 == (-22)); g_2193.f0 = safe_sub_func_int16_t_s_s(g_2193.f0, 1))
                    { /* block id: 1283 */
                        return p_37;
                    }
                    return p_37;
                }
            }
            else
            { /* block id: 1288 */
                uint8_t l_2841 = 255UL;
                int32_t l_2855 = 0x59A23047L;
                for (g_2193.f0 = 0; (g_2193.f0 <= 2); g_2193.f0 += 1)
                { /* block id: 1291 */
                    const int32_t *l_2842 = &g_135;
                    const uint64_t *l_2844 = (void*)0;
                    const uint64_t **l_2843 = &l_2844;
                    int32_t *l_2857 = &l_2736;
                    int i;
                    for (g_78 = 0; (g_78 <= 8); g_78 += 1)
                    { /* block id: 1294 */
                        uint16_t l_2827 = 7UL;
                        int32_t l_2830 = 0xE016D88CL;
                        l_2827++;
                        l_2830 &= (-1L);
                    }
                    if (((safe_rshift_func_uint16_t_u_s(l_2820[(g_2193.f0 + 1)], (safe_add_func_uint16_t_u_u((l_2663[7][2][0] , (*l_2842)), p_36)))) | 0xBE527B2BDF448059LL))
                    { /* block id: 1299 */
                        int8_t l_2856 = 0x29L;
                        (*g_999) = func_57((*g_999), ((l_2843 == (void*)0) , ((safe_mod_func_uint8_t_u_u((safe_add_func_int8_t_s_s(((((safe_div_func_uint8_t_u_u((safe_mod_func_uint32_t_u_u((l_2768[3][3][1] = ((safe_add_func_uint8_t_u_u(((void*)0 != &l_2800), (p_36 , (p_37 > ((((p_35 ^ 0xB492343EL) > l_2855) || p_36) | l_2856))))) == (****g_2620))), p_36)), g_2193.f1)) && 0xE3L) && (*l_2842)) < 0xE6DA936EL), (*g_983))), 0x29L)) , (void*)0)), (*g_999), (*l_2842), l_2857);
                    }
                    else
                    { /* block id: 1302 */
                        return l_2855;
                    }
                }
                p_35 = (**g_999);
            }
            for (g_1585 = 26; (g_1585 > 26); g_1585++)
            { /* block id: 1310 */
                l_2768[5][3][0] ^= 0x7E03A76CL;
            }
        }
        if ((safe_sub_func_uint8_t_u_u((*g_983), (((safe_sub_func_uint16_t_u_u((safe_mod_func_int16_t_s_s(g_2866, ((((safe_rshift_func_uint8_t_u_u(0x04L, 0)) , (((safe_mul_func_int8_t_s_s((!(((safe_rshift_func_uint8_t_u_u(p_37, p_35)) || ((((l_2873[7][0] == &l_2874) , (p_36 > (p_35 > g_159))) || (****g_2620)) != p_36)) , 0x8FL)), p_37)) , 0xC51F7467L) <= p_35)) , p_36) & p_37))), (*g_643))) && p_36) == g_888))))
        { /* block id: 1314 */
            int32_t l_2875 = 0x072117A4L;
            int16_t *l_2876 = &l_2663[5][6][0].f2;
            int32_t l_2896 = 0x3B26EDE4L;
            uint8_t l_2905 = 0xBBL;
            int32_t l_2925 = 0xF4C5A4F9L;
            uint64_t *l_2935 = &g_132;
            uint64_t ****l_3012[7];
            int32_t l_3036 = 0x9F84FF97L;
            int32_t l_3037[3];
            int i;
            for (i = 0; i < 7; i++)
                l_3012[i] = (void*)0;
            for (i = 0; i < 3; i++)
                l_3037[i] = 0x4970F08FL;
            if ((((l_2877 = ((((*l_2876) = l_2875) & (((***g_276) = p_35) > 0x1D03E76480D707F5LL)) && (-7L))) | ((((safe_mul_func_uint8_t_u_u((safe_lshift_func_uint16_t_u_u(((((*l_2804) = (0x9B49AC22L < l_2820[0])) != 18446744073709551615UL) > ((((*g_983) = (safe_mul_func_uint16_t_u_u(65535UL, l_2875))) , 0x307F9F6FL) == 0x9122E523L)), 2)), 247UL)) > 0L) <= 0xD0L) ^ (-6L))) > p_36))
            { /* block id: 1320 */
                int8_t *l_2889 = &g_458.f1;
                int32_t l_2892 = 8L;
                int64_t *l_2899 = &g_91;
                int16_t ***l_2923 = &g_2230;
                int32_t l_2924 = 4L;
                int32_t l_2936 = 1L;
                int32_t l_2940 = 1L;
                for (g_458.f2 = 0; (g_458.f2 <= 1); g_458.f2 += 1)
                { /* block id: 1323 */
                    union U0 l_2897 = {0x8FL};
                    int64_t * const l_2898 = (void*)0;
                    int16_t l_2926 = 0xAAA4L;
                    int16_t *l_2937 = &g_2193.f2;
                    int16_t *l_2938[10][6] = {{(void*)0,(void*)0,(void*)0,(void*)0,(void*)0,(void*)0},{(void*)0,(void*)0,(void*)0,(void*)0,(void*)0,(void*)0},{(void*)0,(void*)0,(void*)0,(void*)0,(void*)0,(void*)0},{(void*)0,(void*)0,(void*)0,(void*)0,(void*)0,(void*)0},{(void*)0,(void*)0,(void*)0,(void*)0,(void*)0,(void*)0},{(void*)0,(void*)0,(void*)0,(void*)0,(void*)0,(void*)0},{(void*)0,(void*)0,(void*)0,(void*)0,(void*)0,(void*)0},{(void*)0,(void*)0,(void*)0,(void*)0,(void*)0,(void*)0},{(void*)0,(void*)0,(void*)0,(void*)0,(void*)0,(void*)0},{(void*)0,(void*)0,(void*)0,(void*)0,(void*)0,(void*)0}};
                    int32_t l_2939 = 0x635F255EL;
                    const int16_t ** const *l_2964[8][6][5] = {{{&g_1738[0][0][1],&g_1738[0][0][1],&g_1738[2][0][6],(void*)0,&g_1738[0][0][1]},{&g_1738[0][0][1],&g_1738[2][0][0],&g_1738[2][0][5],&g_1738[0][0][0],&g_1738[0][0][1]},{&g_1738[0][0][1],&g_1738[0][0][2],(void*)0,&g_1738[2][0][6],&g_1738[0][0][1]},{&g_1738[1][0][2],&g_1738[0][0][1],&g_1738[0][0][1],&g_1738[0][0][0],&g_1738[0][0][1]},{&g_1738[0][0][1],&g_1738[0][0][1],(void*)0,(void*)0,&g_1738[0][0][2]},{&g_1738[0][0][1],&g_1738[0][0][1],&g_1738[2][0][5],&g_1738[0][0][0],&g_1738[0][0][1]}},{{&g_1738[0][0][1],&g_1738[0][0][2],&g_1738[2][0][6],&g_1738[2][0][6],&g_1738[0][0][2]},{&g_1738[1][0][2],&g_1738[2][0][0],&g_1738[0][0][1],&g_1738[0][0][0],&g_1738[0][0][1]},{&g_1738[0][0][1],&g_1738[0][0][1],&g_1738[2][0][6],(void*)0,&g_1738[0][0][1]},{&g_1738[0][0][1],&g_1738[2][0][0],&g_1738[2][0][5],&g_1738[0][0][0],&g_1738[0][0][1]},{&g_1738[0][0][1],&g_1738[0][0][1],&g_1738[2][0][2],&g_1738[0][0][1],&g_1738[0][0][1]},{(void*)0,&g_1738[0][0][1],&g_1738[0][0][1],&g_1738[0][0][1],&g_1738[0][0][3]}},{{&g_1738[1][0][4],&g_1738[1][0][2],&g_1738[2][0][2],&g_1738[0][0][2],&g_1738[0][0][1]},{&g_1738[0][0][5],&g_1738[0][0][1],&g_1738[0][0][1],&g_1738[2][0][0],&g_1738[0][0][1]},{&g_1738[1][0][4],&g_1738[0][0][1],&g_1738[0][0][1],&g_1738[0][0][1],&g_1738[0][0][1]},{(void*)0,&g_1738[0][0][1],&g_1738[0][0][1],&g_1738[2][0][0],&g_1738[0][0][3]},{&g_1738[0][0][1],&g_1738[1][0][2],&g_1738[0][0][1],&g_1738[0][0][2],&g_1738[0][0][1]},{&g_1738[0][0][5],&g_1738[0][0][1],&g_1738[0][0][1],&g_1738[0][0][1],&g_1738[0][0][1]}},{{&g_1738[0][0][1],&g_1738[0][0][1],&g_1738[2][0][2],&g_1738[0][0][1],&g_1738[0][0][1]},{(void*)0,&g_1738[0][0][1],&g_1738[0][0][1],&g_1738[0][0][1],&g_1738[0][0][3]},{&g_1738[1][0][4],&g_1738[1][0][2],&g_1738[2][0][2],&g_1738[0][0][2],&g_1738[0][0][1]},{&g_1738[0][0][5],&g_1738[0][0][1],&g_1738[0][0][1],&g_1738[2][0][0],&g_1738[0][0][1]},{&g_1738[1][0][4],&g_1738[0][0][1],&g_1738[0][0][1],&g_1738[0][0][1],&g_1738[0][0][1]},{(void*)0,&g_1738[0][0][1],&g_1738[0][0][1],&g_1738[2][0][0],&g_1738[0][0][3]}},{{&g_1738[0][0][1],&g_1738[1][0][2],&g_1738[0][0][1],&g_1738[0][0][2],&g_1738[0][0][1]},{&g_1738[0][0][5],&g_1738[0][0][1],&g_1738[0][0][1],&g_1738[0][0][1],&g_1738[0][0][1]},{&g_1738[0][0][1],&g_1738[0][0][1],&g_1738[2][0][2],&g_1738[0][0][1],&g_1738[0][0][1]},{(void*)0,&g_1738[0][0][1],&g_1738[0][0][1],&g_1738[0][0][1],&g_1738[0][0][3]},{&g_1738[1][0][4],&g_1738[1][0][2],&g_1738[2][0][2],&g_1738[0][0][2],&g_1738[0][0][1]},{&g_1738[0][0][5],&g_1738[0][0][1],&g_1738[0][0][1],&g_1738[2][0][0],&g_1738[0][0][1]}},{{&g_1738[1][0][4],&g_1738[0][0][1],&g_1738[0][0][1],&g_1738[0][0][1],&g_1738[0][0][1]},{(void*)0,&g_1738[0][0][1],&g_1738[0][0][1],&g_1738[2][0][0],&g_1738[0][0][3]},{&g_1738[0][0][1],&g_1738[1][0][2],&g_1738[0][0][1],&g_1738[0][0][2],&g_1738[0][0][1]},{&g_1738[0][0][5],&g_1738[0][0][1],&g_1738[0][0][1],&g_1738[0][0][1],&g_1738[0][0][1]},{&g_1738[0][0][1],&g_1738[0][0][1],&g_1738[2][0][2],&g_1738[0][0][1],&g_1738[0][0][1]},{(void*)0,&g_1738[0][0][1],&g_1738[0][0][1],&g_1738[0][0][1],&g_1738[0][0][3]}},{{&g_1738[1][0][4],&g_1738[1][0][2],&g_1738[2][0][2],&g_1738[0][0][2],&g_1738[0][0][1]},{&g_1738[0][0][5],&g_1738[0][0][1],&g_1738[0][0][1],&g_1738[2][0][0],&g_1738[0][0][1]},{&g_1738[1][0][4],&g_1738[0][0][1],&g_1738[0][0][1],&g_1738[0][0][1],&g_1738[0][0][1]},{(void*)0,&g_1738[0][0][1],&g_1738[0][0][1],&g_1738[2][0][0],&g_1738[0][0][3]},{&g_1738[0][0][1],&g_1738[1][0][2],&g_1738[0][0][1],&g_1738[0][0][2],&g_1738[0][0][1]},{&g_1738[0][0][5],&g_1738[0][0][1],&g_1738[0][0][1],&g_1738[0][0][1],&g_1738[0][0][1]}},{{&g_1738[0][0][1],&g_1738[0][0][1],&g_1738[2][0][2],&g_1738[0][0][1],&g_1738[0][0][1]},{(void*)0,&g_1738[0][0][1],&g_1738[0][0][1],&g_1738[0][0][1],&g_1738[0][0][3]},{&g_1738[1][0][4],&g_1738[1][0][2],&g_1738[2][0][2],&g_1738[0][0][2],&g_1738[0][0][1]},{&g_1738[0][0][5],&g_1738[0][0][1],&g_1738[0][0][1],&g_1738[2][0][0],&g_1738[0][0][1]},{&g_1738[1][0][4],&g_1738[0][0][1],&g_1738[0][0][1],&g_1738[0][0][1],&g_1738[0][0][1]},{(void*)0,&g_1738[0][0][1],&g_1738[0][0][1],&g_1738[2][0][0],&g_1738[0][0][3]}}};
                    int32_t ****l_2977 = (void*)0;
                    int i, j, k;
                    if ((safe_add_func_uint64_t_u_u(g_2033[(g_458.f2 + 2)], (g_67[g_458.f2] | g_2033[(g_458.f2 + 2)]))))
                    { /* block id: 1324 */
                        int16_t *l_2894[5][3];
                        int i, j;
                        for (i = 0; i < 5; i++)
                        {
                            for (j = 0; j < 3; j++)
                                l_2894[i][j] = (void*)0;
                        }
                        (*g_267) = func_99((l_2888[4][1] == l_2889), (l_2896 |= (p_36 ^ (((void*)0 == (*g_2621)) <= (g_2895 |= (((((l_2765 <= l_2892) , (void*)0) == l_2893[1]) <= l_2875) , p_36))))), l_2897, l_2898, l_2899);
                        l_2924 ^= (safe_sub_func_uint16_t_u_u((safe_add_func_int64_t_s_s((safe_unary_minus_func_uint32_t_u(p_35)), (((((l_2905 , (p_37 > (l_2892 , p_37))) , (safe_lshift_func_int8_t_s_u((p_37 = ((safe_div_func_uint32_t_u_u((safe_mul_func_int16_t_s_s((safe_sub_func_int16_t_s_s(((l_2765 ^= l_2914) | ((g_2797 > ((((safe_mod_func_uint64_t_u_u(l_2679, (safe_lshift_func_uint8_t_u_s((safe_div_func_int8_t_s_s((l_2923 != (void*)0), l_2892)), p_35)))) <= 0L) != (-6L)) != 18446744073709551615UL)) && p_37)), l_2897.f1)), 0UL)), p_37)) < p_37)), 2))) ^ (*g_2632)) ^ (**g_2622)) , p_36))), 0L));
                        l_2925 |= l_2896;
                    }
                    else
                    { /* block id: 1332 */
                        return p_35;
                    }
                    if ((l_2940 = ((l_2892 = (l_2926 = ((*g_1701) = p_36))) != (safe_mul_func_int16_t_s_s(((safe_rshift_func_int16_t_s_s(((g_384 ^= (safe_lshift_func_uint8_t_u_u((safe_add_func_int8_t_s_s(((p_37 , l_2935) == (void*)0), (l_2936 = (l_2924 = g_128[0][2][0])))), 7))) || (0x8B05L < (l_2939 &= p_35))), l_2940)) , (((++(*l_2935)) > p_37) , l_2877)), l_2925)))))
                    { /* block id: 1344 */
                        const int16_t l_2973 = (-1L);
                        l_2939 = (***g_1175);
                        l_2940 = l_2940;
                        l_2679 &= (safe_mul_func_int8_t_s_s((g_209.f3 &= ((safe_lshift_func_int8_t_s_s((!((safe_add_func_uint64_t_u_u(l_2936, ((*l_2935) = (((safe_mul_func_int16_t_s_s((((safe_lshift_func_int16_t_s_s((safe_add_func_int32_t_s_s((l_2875 , (safe_sub_func_int8_t_s_s(p_37, (safe_mod_func_uint8_t_u_u((l_2896 |= (!((safe_unary_minus_func_uint32_t_u((((safe_sub_func_int8_t_s_s((safe_sub_func_uint16_t_u_u((0UL && ((p_35 <= ((l_2964[2][0][4] = &g_1744) == &g_2230)) && ((safe_div_func_uint64_t_u_u(((safe_div_func_uint8_t_u_u(((((safe_div_func_int16_t_s_s((safe_mul_func_uint16_t_u_u(0xA02BL, (((((***g_276) = ((&l_2804 == (*g_276)) >= p_36)) >= 18446744073709551613UL) , p_37) >= l_2925))), p_35)) == p_36) | g_2307) > (**g_2622)), l_2905)) & 248UL), p_36)) || 0xE419L))), (**g_1574))), p_36)) <= (-6L)) > l_2973))) ^ 0xA2D2L))), p_35))))), (*g_1701))), p_36)) <= 0x9B4DL) , p_37), 0x744CL)) >= (-1L)) ^ (*g_1000))))) && 0x21C8L)), 2)) > 0xFECFL)), g_4[3]));
                        if (l_2729)
                            break;
                    }
                    else
                    { /* block id: 1354 */
                        int16_t l_2974 = 0xDE74L;
                        if (l_2974)
                            break;
                        (*g_267) = &p_35;
                        g_1679 |= 0xE00E2B68L;
                        l_2925 ^= (safe_mul_func_int8_t_s_s(1L, (((l_2977 == (g_2978 = (void*)0)) , l_2979) != g_2980)));
                    }
                    for (g_2797 = 0; (g_2797 <= 9); g_2797 += 1)
                    { /* block id: 1363 */
                        int32_t l_2982 = 0L;
                        return l_2982;
                    }
                }
                l_2924 ^= (g_4[3] = p_36);
            }
            else
            { /* block id: 1369 */
                uint32_t l_2989[2];
                uint32_t **l_2997 = &g_1701;
                uint16_t l_3029 = 0x6DA0L;
                int32_t *l_3032[6] = {&g_4[3],&g_4[3],&g_4[3],&g_4[3],&g_4[3],&g_4[3]};
                int i;
                for (i = 0; i < 2; i++)
                    l_2989[i] = 7UL;
                for (g_458.f3 = 0; (g_458.f3 == 7); g_458.f3 = safe_add_func_int8_t_s_s(g_458.f3, 1))
                { /* block id: 1372 */
                    uint8_t *l_2994 = &l_2905;
                    const int32_t l_2998[9] = {0xD7B4CD8BL,0xD7B4CD8BL,0xD7B4CD8BL,0xD7B4CD8BL,0xD7B4CD8BL,0xD7B4CD8BL,0xD7B4CD8BL,0xD7B4CD8BL,0xD7B4CD8BL};
                    int32_t l_3005 = 0xAAEA9947L;
                    int i;
                    p_35 = 0x8484AAF9L;
                    p_35 = (safe_rshift_func_int8_t_s_s((p_35 , ((-3L) & (safe_lshift_func_uint16_t_u_u((((!(0xD881L != l_2875)) ^ (l_2925 = (((*g_983) = (l_2989[1] | ((*g_983) == 0x98L))) != (safe_mul_func_int8_t_s_s((((*l_2994) = (0x948A6B78L < ((safe_mod_func_uint8_t_u_u(((***g_276) && 1L), l_2989[1])) >= 0L))) , 0x51L), l_2989[1]))))) & 0x515EFCB8L), 15)))), g_135));
                    l_3005 |= (p_35 = (((safe_lshift_func_uint16_t_u_u(((void*)0 == l_2997), l_2998[6])) & ((&g_277[0] == (void*)0) , (safe_rshift_func_uint16_t_u_s((l_2820[0] == ((**l_2997) = (safe_mul_func_int16_t_s_s((safe_add_func_int16_t_s_s(p_36, (l_2875 , (((void*)0 == &g_1744) | l_2989[1])))), p_36)))), 14)))) != l_2729));
                    for (l_2765 = 0; (l_2765 != 28); l_2765 = safe_add_func_uint32_t_u_u(l_2765, 1))
                    { /* block id: 1383 */
                        return p_35;
                    }
                }
                l_2679 = (safe_mul_func_uint8_t_u_u(0x51L, (p_37 &= (l_2925 = 0L))));
                if ((safe_rshift_func_int8_t_s_s((&g_1568[0][2] != l_3012[4]), 6)))
                { /* block id: 1390 */
                    int32_t l_3034 = (-1L);
                    int32_t l_3038[6] = {(-3L),(-3L),(-3L),(-3L),(-3L),(-3L)};
                    int32_t l_3039[2];
                    int32_t l_3040 = 1L;
                    int32_t l_3042 = 0x14408B26L;
                    int i;
                    for (i = 0; i < 2; i++)
                        l_3039[i] = (-1L);
                    for (g_2193.f3 = 0; (g_2193.f3 >= (-11)); --g_2193.f3)
                    { /* block id: 1393 */
                        const uint8_t l_3028 = 0UL;
                        int32_t *l_3031 = &g_67[3];
                        int32_t l_3033 = 0xC6523790L;
                        int32_t l_3035[1][8][9];
                        int i, j, k;
                        for (i = 0; i < 1; i++)
                        {
                            for (j = 0; j < 8; j++)
                            {
                                for (k = 0; k < 9; k++)
                                    l_3035[i][j][k] = 1L;
                            }
                        }
                        (*g_267) = ((safe_add_func_uint16_t_u_u(((safe_unary_minus_func_uint16_t_u((p_37 , (l_2925 != (((*l_3031) = (safe_sub_func_uint8_t_u_u(((safe_mod_func_int64_t_s_s(((*g_127) = (p_35 > ((((p_35 & (safe_mod_func_uint8_t_u_u(((l_2905 ^ ((((safe_mul_func_uint16_t_u_u(0x8184L, ((*l_2876) = (*g_1739)))) && 2L) && ((((safe_mod_func_int64_t_s_s((l_3028 < 0xC09FFC866F9194E5LL), 1UL)) , l_3029) != p_36) ^ p_37)) != p_37)) == g_458.f0), l_2875))) >= (-10L)) < l_3029) & l_3030))), p_36)) == p_36), p_36))) , (*g_1739)))))) < p_35), 0x0B16L)) , (void*)0);
                        (*g_267) = (l_3032[3] = ((***g_2978) = (void*)0));
                        l_2896 |= (l_3033 = (7L && p_37));
                        ++l_3043;
                    }
                    for (g_206 = 0; (g_206 <= 45); g_206 = safe_add_func_uint64_t_u_u(g_206, 6))
                    { /* block id: 1407 */
                        return p_35;
                    }
                }
                else
                { /* block id: 1410 */
                    (*g_267) = &l_2679;
                }
            }
            for (g_458.f3 = 0; (g_458.f3 != 1); g_458.f3 = safe_add_func_int64_t_s_s(g_458.f3, 2))
            { /* block id: 1416 */
                return p_36;
            }
        }
        else
        { /* block id: 1419 */
            (**l_2800) = (**g_1567);
            return p_36;
        }
        l_2765 = ((0x31F40544L >= (p_35 = ((safe_add_func_int16_t_s_s(((*l_3062) &= p_36), ((g_708 ^= ((((*l_3075) = (0x9F19L | ((l_2679 = ((safe_unary_minus_func_uint16_t_u(p_35)) , (safe_add_func_int64_t_s_s(((safe_mod_func_int32_t_s_s(l_2820[3], ((safe_div_func_uint32_t_u_u(p_35, p_35)) , (~(l_3070[1] & ((safe_rshift_func_int8_t_s_s(((safe_lshift_func_int8_t_s_u((-10L), p_37)) , (-1L)), p_35)) >= 65526UL)))))) == l_2765), p_35)))) | 0xCFL))) , l_2765) | p_37)) | 0UL))) , p_37))) , 1L);
    }
    else
    { /* block id: 1429 */
        int32_t l_3076 = 5L;
        int32_t l_3077 = 0x01390D7CL;
        int32_t l_3078 = 1L;
        int32_t l_3079[10][1][4];
        uint16_t l_3081 = 0xC356L;
        uint32_t **l_3084[2];
        union U0 *l_3085 = (void*)0;
        int i, j, k;
        for (i = 0; i < 10; i++)
        {
            for (j = 0; j < 1; j++)
            {
                for (k = 0; k < 4; k++)
                    l_3079[i][j][k] = 0x2CFC8E74L;
            }
        }
        for (i = 0; i < 2; i++)
            l_3084[i] = &g_1701;
        l_3081--;
        g_457 = (((void*)0 == l_3084[0]) , l_3085);
    }
    return p_36;
}


/* ------------------------------------------ */
/* 
 * reads : g_983 g_130 g_384 g_999 g_1000 g_2497 g_1700 g_1701 g_209.f0 g_648 g_258 g_1175 g_20 g_276 g_277 g_127 g_2620 g_2621 g_2622 g_2630 g_1739 g_458.f2 g_206 g_128 g_2648
 * writes: g_384 g_130 g_1000 g_2497 g_254 g_209.f0 g_128 g_408 g_2630 g_2648
 */
static union U0  func_48(int32_t * p_49, int32_t  p_50)
{ /* block id: 1167 */
    int32_t l_2545 = (-1L);
    int32_t l_2546 = 0x87F12CDAL;
    const int16_t **l_2547[4];
    int16_t *l_2558[1];
    int16_t **l_2559 = &l_2558[0];
    const int16_t *l_2560 = &g_383;
    int16_t *l_2561 = &g_384;
    int32_t l_2571 = 9L;
    uint32_t l_2588 = 18446744073709551615UL;
    int32_t l_2634 = 0x6D47EBBBL;
    int32_t l_2639 = 0xC7967847L;
    int32_t l_2640 = 0L;
    int32_t l_2641[7][10] = {{(-5L),(-1L),0xF1BE8DC3L,0x401C4A67L,0x401C4A67L,0xF1BE8DC3L,(-1L),(-5L),(-1L),0xF1BE8DC3L},{0xE0B57CFEL,(-10L),0x401C4A67L,(-10L),0xE0B57CFEL,0xF1BE8DC3L,0xF1BE8DC3L,0xE0B57CFEL,(-10L),0x401C4A67L},{(-5L),(-5L),0x401C4A67L,0xE0B57CFEL,0x010A09B7L,0xE0B57CFEL,0x401C4A67L,(-5L),(-5L),0x401C4A67L},{(-10L),0xE0B57CFEL,0xF1BE8DC3L,0xF1BE8DC3L,0xE0B57CFEL,(-10L),0x401C4A67L,(-10L),0xE0B57CFEL,0xF1BE8DC3L},{(-1L),(-5L),(-1L),0xF1BE8DC3L,0x401C4A67L,0x401C4A67L,0xF1BE8DC3L,(-1L),(-5L),(-1L)},{(-1L),(-10L),(-5L),0xE0B57CFEL,(-5L),(-10L),(-1L),(-1L),(-10L),(-5L)},{(-10L),(-1L),(-1L),(-10L),(-5L),0xE0B57CFEL,(-5L),(-10L),(-1L),(-1L)}};
    int32_t l_2646 = 0xAB5CC4D6L;
    union U0 l_2651[8] = {{0L},{0L},{0L},{0L},{0L},{0L},{0L},{0L}};
    int i, j;
    for (i = 0; i < 4; i++)
        l_2547[i] = &g_1739;
    for (i = 0; i < 1; i++)
        l_2558[i] = &g_408;
    if ((safe_div_func_int16_t_s_s((l_2545 != l_2545), (6L && (((p_50 | l_2546) > (((l_2547[1] == (void*)0) >= ((safe_lshift_func_uint8_t_u_u(p_50, 0)) ^ ((*l_2561) ^= (safe_add_func_uint16_t_u_u((safe_div_func_int8_t_s_s((safe_lshift_func_uint16_t_u_s((safe_add_func_int16_t_s_s((((*l_2559) = l_2558[0]) == l_2560), 0xD0D4L)), l_2545)), (*g_983))), l_2545))))) , l_2546)) , p_50)))))
    { /* block id: 1170 */
        const int32_t l_2566 = 0x8C4F6DEDL;
        int8_t *l_2569 = &g_458.f3;
        int64_t ***l_2570 = &g_277[0];
        union U0 l_2574 = {0x6BL};
        (*p_49) |= 8L;
        (*p_49) &= (safe_mod_func_uint16_t_u_u(0x825FL, ((((safe_div_func_uint64_t_u_u(p_50, l_2566)) != ((*g_983)++)) <= (((1L ^ l_2546) ^ ((((l_2571 |= (((((((void*)0 != l_2569) , l_2570) != l_2570) & 0x08L) ^ p_50) | 1UL)) && l_2566) < 0UL) , p_50)) , l_2566)) & p_50)));
        (*g_999) = (*g_999);
        for (g_2497 = (-22); (g_2497 <= 51); g_2497 = safe_add_func_uint16_t_u_u(g_2497, 6))
        { /* block id: 1178 */
            return l_2574;
        }
    }
    else
    { /* block id: 1181 */
        const int16_t *l_2579 = &g_383;
        int16_t ****l_2580 = (void*)0;
        int16_t ***l_2582[8] = {&l_2559,&g_2230,&g_2230,&l_2559,&g_2230,&g_2230,&l_2559,&g_2230};
        int16_t ****l_2581 = &l_2582[4];
        int32_t l_2587 = 0x3DDB5117L;
        int32_t l_2589 = 0x0C8D3A4BL;
        union U0 * const l_2613 = &g_2193;
        int32_t * const ***l_2623 = &g_2621;
        int32_t l_2637 = 0x562CC356L;
        int32_t l_2638 = (-2L);
        int32_t l_2642 = 0xE1F5DA34L;
        int8_t l_2643 = 1L;
        int32_t l_2644 = 0x6E195AD1L;
        int32_t l_2645 = 0x43E382B8L;
        int32_t l_2647[6][7] = {{(-10L),(-10L),0x9007E50DL,(-10L),0x21CE23DEL,0xE2A2E5C5L,(-10L)},{0x4CDA0905L,(-1L),0xAA8B12F5L,(-4L),0xAA8B12F5L,(-1L),0x4CDA0905L},{(-1L),(-10L),0x0750F30FL,0xAA8B12F5L,0x4CDA0905L,(-1L),0xAA8B12F5L},{(-10L),0x21CE23DEL,0xE2A2E5C5L,(-10L),(-10L),0xE2A2E5C5L,0x21CE23DEL},{(-10L),0x8742E80AL,0x0750F30FL,(-4L),0x8742E80AL,0xAA8B12F5L,0x21CE23DEL},{0L,(-10L),0xAA8B12F5L,0L,0x21CE23DEL,0L,0xAA8B12F5L}};
        int i, j;
        l_2589 &= (safe_add_func_int32_t_s_s((safe_add_func_int16_t_s_s((((~((**g_1700) = (((*l_2559) = (*l_2559)) == l_2579))) , (void*)0) == ((*l_2581) = (void*)0)), ((safe_mod_func_uint8_t_u_u((((((*l_2561) &= (safe_add_func_uint8_t_u_u(3UL, 250UL))) , ((void*)0 != &g_1744)) | (((p_50 && l_2571) < 5UL) , l_2587)) != l_2588), p_50)) && p_50))), l_2587));
        for (g_384 = 0; (g_384 >= (-3)); g_384 = safe_sub_func_uint64_t_u_u(g_384, 6))
        { /* block id: 1189 */
            uint16_t l_2599[6];
            int32_t * const *l_2605 = (void*)0;
            int32_t * const **l_2604 = &l_2605;
            union U0 *l_2612 = &g_209;
            int32_t ****l_2625 = &g_1175;
            int32_t *****l_2624 = &l_2625;
            const uint16_t ****l_2633 = &g_2630[4];
            int32_t *l_2635 = &l_2587;
            int32_t *l_2636[2][1][9] = {{{&g_75[0],&g_75[0],(void*)0,&g_75[0],&g_75[0],(void*)0,&g_75[0],&g_75[0],(void*)0}},{{(void*)0,(void*)0,(void*)0,(void*)0,(void*)0,(void*)0,(void*)0,(void*)0,(void*)0}}};
            int i, j, k;
            for (i = 0; i < 6; i++)
                l_2599[i] = 0x61ADL;
            for (g_209.f0 = 0; (g_209.f0 == (-9)); g_209.f0--)
            { /* block id: 1192 */
                int32_t l_2594 = 6L;
                int32_t *l_2595 = &g_75[0];
                int32_t *l_2596 = &l_2587;
                int32_t *l_2597 = &l_2587;
                int32_t *l_2598[6] = {(void*)0,(void*)0,(void*)0,(void*)0,(void*)0,(void*)0};
                int i;
                l_2599[3]--;
            }
            (*p_49) |= (((***g_276) = ((p_50 , ((*g_648) , (safe_rshift_func_uint16_t_u_s((0xE4L && (((*l_2604) = (*g_1175)) != (*g_1175))), (safe_mod_func_int64_t_s_s((safe_sub_func_int32_t_s_s((safe_mod_func_uint16_t_u_u((l_2612 == (l_2588 , l_2613)), p_50)), l_2545)), 0xBC30D72CE9D82791LL)))))) | (*g_1000))) == p_50);
            (*p_49) = ((safe_add_func_int64_t_s_s((safe_div_func_uint16_t_u_u((((1UL <= (safe_sub_func_int32_t_s_s(((l_2623 = ((p_50 , 0UL) , g_2620)) != ((*l_2624) = (void*)0)), (*p_49)))) && (((**g_1700) = (l_2571 <= ((l_2634 = (safe_mod_func_int8_t_s_s(((((**l_2559) = (****l_2623)) <= (safe_lshift_func_uint8_t_u_s((((((*l_2633) = g_2630[0]) != &g_642) || (*g_1739)) == 0xE3F1882A87241F9BLL), g_458.f2))) || g_206), (****l_2623)))) == (*g_127)))) , p_50)) , p_50), l_2589)), 0L)) , 0x44DFB60CL);
            ++g_2648;
        }
    }
    return l_2651[4];
}


/* ------------------------------------------ */
/* 
 * reads : g_67 g_268 g_4 g_999 g_1000 g_133 g_159 g_1175 g_983 g_1701 g_147 g_1574 g_643 g_177 g_1738 g_1739 g_384 g_20 g_78 g_642 g_458.f2 g_1679
 * writes: g_183 g_130 g_254 g_1744 g_458.f2 g_1567 g_177 g_1679 g_1000
 */
static int32_t * func_51(int8_t  p_52, uint16_t  p_53, uint16_t  p_54, int32_t * p_55, int32_t * p_56)
{ /* block id: 22 */
    uint32_t l_66 = 0UL;
    const uint32_t l_1737 = 0x5BD5EC1CL;
    int16_t *l_1823 = &g_383;
    int8_t l_1838 = 0L;
    int32_t **** const l_1867 = &g_1175;
    uint32_t ***l_1888 = (void*)0;
    int64_t *l_1900[2][9] = {{&g_91,&g_91,(void*)0,&g_91,&g_91,(void*)0,&g_91,&g_91,(void*)0},{&g_91,&g_91,(void*)0,&g_91,&g_91,(void*)0,&g_91,&g_91,(void*)0}};
    union U0 *l_1912 = &g_458;
    int32_t l_1970 = 0L;
    uint64_t l_2017 = 0x186654FB36088AB8LL;
    const int64_t l_2109 = 1L;
    uint64_t *** const *l_2119 = &g_1568[4][0];
    int32_t l_2147 = 0xAFE66B6AL;
    int32_t l_2148 = 0xB7803ABDL;
    int32_t l_2149 = 0xD2562CEEL;
    int16_t l_2150 = 0L;
    int32_t l_2151[7] = {0x25F1C8C3L,0x25F1C8C3L,(-8L),0x25F1C8C3L,0x25F1C8C3L,(-8L),0x25F1C8C3L};
    uint64_t l_2152 = 0x5E2B98CD90F720CALL;
    uint32_t l_2172 = 0x68E686C5L;
    union U0 l_2192 = {6L};
    uint16_t ***l_2272 = &g_642;
    int64_t l_2294 = 0xE3EA39F0464915B4LL;
    int32_t l_2357 = 0x6F9A5C36L;
    uint32_t l_2449[10] = {18446744073709551615UL,0xEC1892ABL,0xEC1892ABL,18446744073709551615UL,0xEC1892ABL,0xEC1892ABL,18446744073709551615UL,0xEC1892ABL,0xEC1892ABL,18446744073709551615UL};
    const int64_t l_2470[5] = {0L,0L,0L,0L,0L};
    int16_t l_2485 = 4L;
    int i, j;
    (**g_1175) = func_57(func_63(l_66, p_55), p_56, p_56, (safe_mod_func_int16_t_s_s((p_53 || (safe_mod_func_int64_t_s_s(((safe_rshift_func_uint8_t_u_s((safe_mod_func_uint16_t_u_u((l_66 , p_54), (l_1737 || 0xECL))), l_66)) | g_147), 0xEDC64461E26EA04ALL))), (**g_1574))), (*g_999));
    return p_55;
}


/* ------------------------------------------ */
/* 
 * reads : g_1738 g_458.f2 g_1739 g_384 g_999 g_1000 g_20 g_147 g_78 g_983 g_642 g_643 g_1679 g_177 g_135 l_3230 l_8
 * writes: g_1744 g_458.f2 g_130 g_1567 g_177 g_1679 l_8
 */
static int32_t * func_57(int32_t * p_58, const int32_t * p_59, int32_t * p_60, int32_t  p_61, int32_t * p_62)
{ /* block id: 777 */
    const int16_t ***l_1740[6];
    const int16_t **l_1742 = &g_1739;
    const int16_t ***l_1741[8] = {&l_1742,&l_1742,&l_1742,&l_1742,&l_1742,&l_1742,&l_1742,&l_1742};
    const int16_t ***l_1743[6][4][7] = {{{&l_1742,&l_1742,&l_1742,&l_1742,&l_1742,&l_1742,&l_1742},{&l_1742,&l_1742,&l_1742,&l_1742,&l_1742,&l_1742,(void*)0},{&l_1742,&l_1742,&l_1742,&l_1742,&l_1742,&l_1742,&l_1742},{&l_1742,&l_1742,&l_1742,&l_1742,&l_1742,&l_1742,&l_1742}},{{&l_1742,&l_1742,&l_1742,&l_1742,&l_1742,&l_1742,(void*)0},{&l_1742,&l_1742,&l_1742,&l_1742,&l_1742,&l_1742,&l_1742},{&l_1742,&l_1742,&l_1742,&l_1742,&l_1742,&l_1742,&l_1742},{&l_1742,&l_1742,&l_1742,&l_1742,&l_1742,&l_1742,&l_1742}},{{&l_1742,&l_1742,&l_1742,&l_1742,&l_1742,(void*)0,&l_1742},{&l_1742,&l_1742,&l_1742,&l_1742,&l_1742,&l_1742,&l_1742},{&l_1742,&l_1742,&l_1742,&l_1742,&l_1742,&l_1742,&l_1742},{&l_1742,&l_1742,&l_1742,&l_1742,&l_1742,&l_1742,&l_1742}},{{&l_1742,&l_1742,&l_1742,&l_1742,&l_1742,&l_1742,&l_1742},{&l_1742,&l_1742,&l_1742,&l_1742,&l_1742,&l_1742,&l_1742},{&l_1742,&l_1742,&l_1742,&l_1742,&l_1742,&l_1742,&l_1742},{&l_1742,&l_1742,&l_1742,&l_1742,&l_1742,&l_1742,&l_1742}},{{&l_1742,&l_1742,&l_1742,&l_1742,&l_1742,&l_1742,&l_1742},{&l_1742,&l_1742,&l_1742,&l_1742,&l_1742,(void*)0,&l_1742},{&l_1742,&l_1742,&l_1742,&l_1742,&l_1742,&l_1742,&l_1742},{&l_1742,&l_1742,&l_1742,&l_1742,&l_1742,&l_1742,&l_1742}},{{&l_1742,&l_1742,&l_1742,&l_1742,&l_1742,&l_1742,&l_1742},{&l_1742,&l_1742,&l_1742,&l_1742,&l_1742,&l_1742,&l_1742},{&l_1742,&l_1742,&l_1742,&l_1742,&l_1742,&l_1742,&l_1742},{&l_1742,&l_1742,&l_1742,&l_1742,&l_1742,&l_1742,(void*)0}}};
    union U0 *l_1746 = &g_209;
    int32_t l_1754 = 1L;
    int32_t l_1768 = 0x095CDAFAL;
    int32_t l_1769 = 0xDB75B53DL;
    int32_t l_1770 = 4L;
    int32_t l_1771 = 0x9C09D373L;
    int32_t l_1772 = 0x10206477L;
    int32_t l_1773[7] = {(-1L),(-1L),(-1L),(-1L),(-1L),(-1L),(-1L)};
    uint8_t l_1774 = 0x9DL;
    int16_t *l_1792[4] = {&g_408,&g_408,&g_408,&g_408};
    const uint32_t **l_1798 = (void*)0;
    const uint32_t ***l_1797 = &l_1798;
    int32_t ***l_1799 = &g_999;
    int i, j, k;
    for (i = 0; i < 6; i++)
        l_1740[i] = (void*)0;
    g_1744 = g_1738[0][0][1];
    for (g_458.f2 = 1; (g_458.f2 >= 0); g_458.f2 -= 1)
    { /* block id: 781 */
        int32_t ***l_1745 = &g_999;
        union U0 *l_1747 = (void*)0;
        int32_t l_1762 = 1L;
        int32_t *l_1763 = &l_1754;
        int32_t *l_1764 = (void*)0;
        int32_t *l_1765 = &g_135;
        int32_t *l_1766 = &l_1762;
        int32_t *l_1767[2][8];
        int i, j;
        for (i = 0; i < 2; i++)
        {
            for (j = 0; j < 8; j++)
                l_1767[i][j] = &g_135;
        }
    }
    if (((((safe_mod_func_uint16_t_u_u((safe_mod_func_int64_t_s_s((safe_add_func_uint64_t_u_u(l_1769, (((l_1774 & (safe_sub_func_uint16_t_u_u(((((safe_mul_func_uint16_t_u_u((safe_div_func_uint32_t_u_u((((*g_1739) || (l_1772 |= l_1774)) < ((void*)0 != p_62)), p_61)), (safe_add_func_uint16_t_u_u(p_61, ((((safe_add_func_uint16_t_u_u(((p_61 , l_1797) == &l_1798), p_61)) , (void*)0) != l_1799) >= p_61))))) | p_61) , 0xEAL) || 0x64L), p_61))) , (***l_1799)) && (***l_1799)))), (***l_1799))), 0x29C2L)) >= 252UL) , (***l_1799)) || (***l_1799)))
    { /* block id: 801 */
        uint64_t ****l_1808 = &g_1568[1][0];
        uint64_t *****l_1809 = &g_1567;
        int32_t l_1810 = 0xF7553BC3L;
        int32_t *l_1815 = &l_1754;
        g_1679 ^= ((*l_1815) = (safe_lshift_func_uint16_t_u_u((((((safe_mod_func_int8_t_s_s(g_147, g_78)) == ((safe_div_func_int8_t_s_s((-1L), (safe_mul_func_int8_t_s_s(((((*g_983) = p_61) , l_1808) != ((*l_1809) = l_1808)), p_61)))) || l_1810)) , ((safe_rshift_func_int8_t_s_s((safe_add_func_uint16_t_u_u(((**g_642) = p_61), l_1810)), p_61)) | 1L)) != g_458.f2) , p_61), (***l_1799))));
    }
    else
    { /* block id: 807 */
        int64_t l_1816 = 5L;
        l_1816 &= ((((***l_1799) <= ((*g_643) < (((-1L) != ((void*)0 == l_1792[2])) & p_61))) >= (p_61 > (***l_1799))) | p_61);
    }
    return (**l_1799);
}


/* ------------------------------------------ */
/* 
 * reads : g_67 g_183 g_268 g_4 g_999 g_1000 g_133 g_159 g_1175 g_983 g_1701 l_17 g_20 g_135 g_75 l_6 l_3388
 * writes: g_183 g_130 g_254 l_17 g_135 g_75 l_6 l_3388
 */
static int32_t * func_63(uint32_t  p_64, int32_t * p_65)
{ /* block id: 23 */
    int8_t l_92 = (-1L);
    union U0 l_107 = {0xFCL};
    int64_t *l_108 = &g_91;
    int32_t l_1362 = (-2L);
    int32_t l_1363 = 0x44B08332L;
    int32_t l_1364 = 0xC342F325L;
    int32_t l_1365 = 5L;
    int32_t l_1366 = 1L;
    int32_t l_1367 = 0L;
    int32_t l_1368 = (-6L);
    int32_t l_1369 = 0x025C5BA3L;
    int32_t l_1370 = 0xD02642ECL;
    int32_t l_1372 = 0L;
    int32_t l_1373 = (-4L);
    int32_t l_1374 = (-8L);
    int32_t l_1375[9];
    int8_t l_1376 = (-5L);
    const int32_t *l_1416 = &l_1369;
    uint64_t ****l_1428 = (void*)0;
    const int32_t ***l_1507 = (void*)0;
    uint8_t *l_1555[8] = {&g_206,&g_206,&g_206,&g_206,&g_206,&g_206,&g_206,&g_206};
    uint64_t * const l_1584 = &g_1585;
    uint64_t * const *l_1583 = &l_1584;
    uint64_t * const **l_1582 = &l_1583;
    uint64_t * const ***l_1581[1];
    uint32_t l_1590 = 0xF2612A68L;
    uint16_t l_1636 = 0x963DL;
    union U0 **l_1671[3][5] = {{&g_457,&g_457,&g_457,&g_457,&g_457},{&g_457,&g_457,&g_457,&g_457,&g_457},{&g_457,&g_457,&g_457,&g_457,&g_457}};
    union U0 ***l_1718 = &l_1671[2][3];
    int32_t l_1721[9][10][2] = {{{1L,0xAE07A814L},{0L,(-5L)},{4L,0L},{0x8B11D955L,1L},{0x8B11D955L,0L},{4L,(-5L)},{0L,0xAE07A814L},{1L,(-2L)},{1L,(-5L)},{0xCA567AF2L,1L}},{{0x8B11D955L,0x74157914L},{0x2A0A03D6L,0L},{0xCA567AF2L,0x83600AB0L},{0L,(-2L)},{1L,(-2L)},{0L,0x83600AB0L},{0xCA567AF2L,0L},{0x2A0A03D6L,0x74157914L},{0x8B11D955L,1L},{0xCA567AF2L,(-5L)}},{{1L,(-2L)},{1L,0xAE07A814L},{0L,(-5L)},{4L,0L},{0x8B11D955L,1L},{0x8B11D955L,0L},{4L,(-5L)},{0L,0xAE07A814L},{1L,(-2L)},{1L,(-5L)}},{{0xCA567AF2L,1L},{0x8B11D955L,0x74157914L},{0x2A0A03D6L,0L},{0xCA567AF2L,0x83600AB0L},{0L,(-2L)},{1L,(-2L)},{0L,0x83600AB0L},{0xCA567AF2L,0L},{0x2A0A03D6L,0x74157914L},{0x8B11D955L,1L}},{{0xCA567AF2L,(-5L)},{1L,(-2L)},{1L,0xAE07A814L},{0L,(-5L)},{4L,0L},{0x8B11D955L,1L},{0x8B11D955L,0L},{4L,(-5L)},{0L,0xAE07A814L},{1L,(-2L)}},{{1L,(-5L)},{0xCA567AF2L,1L},{0x8B11D955L,0x74157914L},{0x2A0A03D6L,0L},{0xCA567AF2L,0x83600AB0L},{0L,(-2L)},{1L,(-2L)},{0L,0x83600AB0L},{0xCA567AF2L,0L},{0x2A0A03D6L,0x74157914L}},{{0x8B11D955L,1L},{0xCA567AF2L,(-5L)},{1L,(-2L)},{1L,0xAE07A814L},{0L,(-5L)},{4L,0L},{0x8B11D955L,1L},{0x8B11D955L,0L},{4L,(-5L)},{0L,0xAE07A814L}},{{1L,(-2L)},{1L,(-5L)},{0xCA567AF2L,1L},{0x8B11D955L,0x74157914L},{0x2A0A03D6L,1L},{0xD30CC12AL,0xEF7C4AB6L},{1L,1L},{(-8L),1L},{1L,0xEF7C4AB6L},{0xD30CC12AL,1L}},{{0x1648D157L,0L},{1L,0x45440744L},{0xD30CC12AL,0L},{0L,1L},{(-9L),0x4EBF4A0AL},{1L,0L},{(-3L),1L},{1L,1L},{1L,1L},{(-3L),0L}}};
    union U0 **l_1728 = &g_457;
    int i, j, k;
    for (i = 0; i < 9; i++)
        l_1375[i] = 0L;
    for (i = 0; i < 1; i++)
        l_1581[i] = &l_1582;
    for (p_64 = 0; (p_64 <= 6); p_64 += 1)
    { /* block id: 26 */
        int32_t *l_74 = &g_75[2];
        uint16_t *l_76 = (void*)0;
        uint16_t *l_77[9][7] = {{(void*)0,&g_78,(void*)0,(void*)0,(void*)0,(void*)0,&g_78},{&g_78,&g_78,&g_78,&g_78,&g_78,&g_78,&g_78},{(void*)0,(void*)0,(void*)0,(void*)0,&g_78,(void*)0,(void*)0},{(void*)0,(void*)0,&g_78,&g_78,&g_78,(void*)0,(void*)0},{(void*)0,(void*)0,&g_78,(void*)0,(void*)0,(void*)0,(void*)0},{(void*)0,&g_78,(void*)0,&g_78,&g_78,(void*)0,&g_78},{(void*)0,&g_78,&g_78,&g_78,&g_78,(void*)0,&g_78},{(void*)0,&g_78,&g_78,(void*)0,&g_78,(void*)0,&g_78},{(void*)0,(void*)0,(void*)0,&g_78,(void*)0,(void*)0,(void*)0}};
        int8_t l_79 = 6L;
        int32_t l_80 = (-1L);
        int32_t l_81 = (-7L);
        int32_t l_82 = 0x52CE760CL;
        int32_t l_83 = 0L;
        int32_t l_84 = (-1L);
        int32_t l_85[9];
        int64_t *l_90[2];
        uint32_t l_446 = 4294967293UL;
        int32_t l_1371 = 7L;
        uint32_t l_1380 = 4294967295UL;
        const uint32_t l_1397[10][9][2] = {{{0x24B8C904L,0x1B2BEC57L},{0UL,4294967295UL},{0x485AA879L,0x47938DEEL},{4294967292UL,0x6EBB7F7CL},{3UL,0xF30D44D8L},{4294967295UL,0UL},{1UL,1UL},{0x6E6627B8L,0UL},{4294967286UL,4294967288UL}},{{0xF30D44D8L,0xCF5DB912L},{0x486E3104L,0x9792D2F9L},{0UL,0xD58A0B2DL},{0xCF5DB912L,4294967292UL},{4294967294UL,0x58CE859BL},{4294967295UL,0xA874F9BCL},{1UL,0xA874F9BCL},{4294967295UL,0x58CE859BL},{4294967294UL,4294967292UL}},{{0xCF5DB912L,0xD58A0B2DL},{0UL,0x9792D2F9L},{0x486E3104L,0xCF5DB912L},{0xF30D44D8L,4294967288UL},{4294967286UL,0UL},{0x6E6627B8L,1UL},{1UL,0UL},{4294967295UL,0xF30D44D8L},{3UL,0x6EBB7F7CL}},{{4294967292UL,0x47938DEEL},{0x485AA879L,4294967295UL},{0UL,0x1B2BEC57L},{0x24B8C904L,4294967286UL},{0xD58A0B2DL,4294967292UL},{0x01BACA47L,0x0EB5F177L},{0x02BDCA84L,0x73AB4C3EL},{0UL,0UL},{0x47938DEEL,1UL}},{{4294967295UL,4294967295UL},{4294967286UL,4294967293UL},{0x9792D2F9L,4294967295UL},{4294967290UL,4294967286UL},{0x99258856L,4294967290UL},{4294967295UL,4294967288UL},{4294967295UL,4294967290UL},{0x99258856L,4294967286UL},{4294967290UL,4294967295UL}},{{0x9792D2F9L,4294967293UL},{4294967286UL,4294967295UL},{4294967295UL,1UL},{0x47938DEEL,4294967294UL},{0x02BDCA84L,0xFE00AE09L},{0xED55B852L,0xF30D44D8L},{4294967295UL,4294967295UL},{4294967286UL,4294967286UL},{0x47938DEEL,4294967290UL}},{{1UL,1UL},{4294967286UL,4294967288UL},{4294967295UL,4294967288UL},{0xF1A18079L,0x9792D2F9L},{0x485AA879L,0xA874F9BCL},{0xD58A0B2DL,0UL},{1UL,1UL},{4294967295UL,0UL},{0x9792D2F9L,0x486E3104L}},{{0UL,3UL},{0xA874F9BCL,4294967286UL},{0x486E3104L,4294967295UL},{0x0EB5F177L,0x0E6844C1L},{4294967295UL,4294967295UL},{0UL,4294967295UL},{4294967295UL,0x0E6844C1L},{0x0EB5F177L,4294967295UL},{0x486E3104L,4294967286UL}},{{0xA874F9BCL,3UL},{0UL,0x486E3104L},{0x9792D2F9L,0UL},{4294967295UL,1UL},{1UL,0UL},{0xD58A0B2DL,0xA874F9BCL},{0x485AA879L,0x9792D2F9L},{0xF1A18079L,4294967288UL},{4294967295UL,4294967288UL}},{{4294967286UL,1UL},{1UL,4294967290UL},{0x47938DEEL,4294967286UL},{4294967286UL,4294967295UL},{4294967295UL,0xF30D44D8L},{0xED55B852L,0xFE00AE09L},{0x02BDCA84L,4294967294UL},{4294967288UL,0xD58A0B2DL},{0x35C33860L,0x35C33860L}}};
        union U0 l_1457 = {-5L};
        union U0 *l_1469 = &g_458;
        uint16_t ***l_1483 = &g_642;
        int32_t l_1484 = 0x6F092448L;
        int32_t l_1485 = 0xA2A7E2F9L;
        int16_t l_1614 = 0L;
        int8_t l_1680[8] = {0L,0L,0L,0L,0L,0L,0L,0L};
        uint32_t l_1699 = 4294967295UL;
        int64_t l_1706[2];
        int i, j, k;
        for (i = 0; i < 9; i++)
            l_85[i] = 7L;
        for (i = 0; i < 2; i++)
            l_90[i] = &g_91;
        for (i = 0; i < 2; i++)
            l_1706[i] = 0xC7929D515FFB46B7LL;
        if (g_67[p_64])
            break;
    }
    for (g_183 = 0; (g_183 >= 2); ++g_183)
    { /* block id: 767 */
        if ((*l_1416))
            break;
        if ((*g_268))
            continue;
        return (*g_999);
    }
    (*p_65) = ((safe_lshift_func_int8_t_s_u(g_133, 7)) && ((*g_1701) = (safe_rshift_func_uint8_t_u_s(((*g_983) = (safe_rshift_func_uint8_t_u_u(((+(((((safe_lshift_func_uint8_t_u_u((((*l_1718) = &g_457) == ((!(safe_mul_func_uint8_t_u_u(((l_1721[7][2][1] & (safe_mod_func_uint8_t_u_u(((*l_1416) > (safe_sub_func_int32_t_s_s((*p_65), (((&g_1700 != ((+(safe_mul_func_int16_t_s_s(g_159, (p_64 == (&p_65 == (*g_1175)))))) , &g_1700)) == (-1L)) > p_64)))), 0x79L))) && 5L), p_64))) , l_1728)), 5)) > p_64) | (-10L)) & (*l_1416)) <= (*l_1416))) , (*l_1416)), 3))), p_64))));
    return (*g_999);
}


/* ------------------------------------------ */
/* 
 * reads : g_209.f0 g_128 g_258 g_159 g_457 g_458 g_4 g_253 g_267 g_458.f1 g_458.f3 g_643 g_177 g_78 g_642 g_91 g_268 g_67 g_383 g_127 g_983 g_130 g_1175 g_999 g_1000 g_146 g_135 g_75 g_274 g_20 g_409 g_183 g_277 g_629 g_578 g_204 g_133 g_1326 g_276 g_206 g_1086
 * writes: g_209.f0 g_206 g_253 g_209.f2 g_268 g_458.f1 g_458.f3 g_75 g_708 g_146 g_91 g_578 g_130 g_135 g_1000 g_159 g_204 g_1326 g_1334 g_127 g_177
 */
static int32_t  func_68(int32_t  p_69, uint32_t  p_70, int8_t  p_71, int16_t  p_72, int64_t  p_73)
{ /* block id: 208 */
    int8_t *l_447 = (void*)0;
    int8_t *l_448 = &g_209.f0;
    union U0 l_449 = {0xE9L};
    uint8_t *l_454 = &g_206;
    int16_t *l_461 = &l_449.f2;
    int32_t l_462[8][2] = {{9L,9L},{9L,9L},{9L,9L},{9L,9L},{9L,9L},{9L,9L},{9L,9L},{9L,9L}};
    uint16_t l_472[9][9][3] = {{{0xC221L,0xC874L,65535UL},{65535UL,1UL,0xBF13L},{0x3BF1L,3UL,0xBD1BL},{0xDEE1L,65529UL,0xBD1BL},{7UL,0xBF03L,0xBF13L},{65535UL,0xE8C6L,65535UL},{1UL,65535UL,1UL},{65535UL,0x7567L,65529UL},{0xBD1BL,0x53ECL,65535UL}},{{0x8B2AL,65535UL,0xADA0L},{1UL,65535UL,0x75E0L},{0x8B2AL,7UL,65535UL},{0xBD1BL,0x5DA5L,0x9346L},{65535UL,0xC221L,0xC874L},{1UL,0x9346L,65527UL},{65535UL,0xDEE1L,0x53ECL},{7UL,0xBF13L,5UL},{0xDEE1L,0xBF13L,65535UL}},{{0x3BF1L,0xDEE1L,0xBF03L},{65535UL,0x9346L,0xFD83L},{0xC221L,0xC221L,0x3BF1L},{0xBF03L,0x5DA5L,0xC221L},{65535UL,7UL,0xE8C6L},{0xADA0L,65535UL,0x7567L},{0xC874L,65535UL,0xE8C6L},{65535UL,0x53ECL,0xC221L},{65535UL,0x7567L,0x3BF1L}},{{65527UL,65535UL,65535UL},{0x8B2AL,65535UL,0x505FL},{6UL,0x505FL,0x7567L},{7UL,0x7C61L,0x046CL},{7UL,1UL,0x8B2AL},{6UL,0xADA0L,0xC221L},{0x8B2AL,0x53ECL,0x53ECL},{65535UL,0xFD83L,8UL},{0xE8C6L,65535UL,65535UL}},{{65535UL,5UL,65529UL},{0x53ECL,65535UL,65535UL},{65535UL,5UL,0xBF03L},{0x5DA5L,65535UL,0x7C61L},{0x505FL,0xFD83L,65535UL},{0x3BF1L,0x53ECL,0xE8C6L},{0xBD1BL,0xADA0L,3UL},{65531UL,1UL,65535UL},{65527UL,0x7C61L,65535UL}},{{1UL,0x505FL,3UL},{0xFD83L,65535UL,0xE8C6L},{65535UL,0xBF03L,65535UL},{0x7567L,0x75E0L,0x7C61L},{65535UL,0x8B2AL,0xBF03L},{0xBF13L,0x5DA5L,65535UL},{0xADA0L,0x9346L,65529UL},{0xBF13L,1UL,65535UL},{65535UL,0x1FBEL,8UL}},{{0x7567L,0x3BF1L,0x53ECL},{65535UL,8UL,0xC221L},{0xFD83L,65527UL,0x8B2AL},{1UL,3UL,0x046CL},{65527UL,3UL,0x7567L},{65531UL,65527UL,0x505FL},{0xBD1BL,8UL,65535UL},{0x3BF1L,0x3BF1L,65531UL},{0x505FL,0x1FBEL,0x3BF1L}},{{0x5DA5L,1UL,65535UL},{65535UL,0x9346L,0x75E0L},{0x53ECL,0x5DA5L,65535UL},{65535UL,0x8B2AL,0x3BF1L},{0xE8C6L,0x75E0L,65531UL},{65535UL,0xBF03L,65535UL},{0x8B2AL,65535UL,0x505FL},{6UL,0x505FL,0x7567L},{7UL,0x7C61L,0x046CL}},{{7UL,1UL,0x8B2AL},{6UL,0xADA0L,0xC221L},{0x8B2AL,0x53ECL,0x53ECL},{65535UL,0xFD83L,8UL},{0xE8C6L,65535UL,65535UL},{65535UL,5UL,65529UL},{0x53ECL,65535UL,65535UL},{65535UL,5UL,0xBF03L},{0x5DA5L,65535UL,0x7C61L}}};
    uint32_t *l_557 = &g_258[3];
    const uint32_t *l_559[5][9] = {{&g_258[3],&g_258[3],&g_258[3],(void*)0,&g_147,&g_258[3],(void*)0,&g_258[6],&g_258[3]},{&g_258[3],&g_258[0],&g_258[3],&g_258[5],&g_258[0],&g_258[3],(void*)0,&g_258[3],&g_258[0]},{&g_258[3],&g_258[3],&g_258[3],&g_258[3],&g_258[6],&g_258[0],&g_258[3],&g_258[3],&g_258[3]},{&g_258[3],&g_258[6],&g_147,&g_147,&g_258[3],&g_258[3],&g_258[6],(void*)0,(void*)0},{&g_258[0],&g_258[3],(void*)0,&g_258[3],(void*)0,&g_258[3],&g_258[0],&g_258[0],&g_258[3]}};
    uint64_t * const l_607 = &g_133;
    uint8_t l_714 = 0x10L;
    int16_t l_733 = 1L;
    int32_t l_911[4];
    int8_t l_947 = 8L;
    int32_t l_1001 = 0x805C6618L;
    uint64_t l_1046[1];
    int16_t l_1059 = 7L;
    int64_t * const *l_1083 = &g_127;
    int64_t * const **l_1082 = &l_1083;
    int64_t *l_1150 = &g_746;
    union U0 **l_1163[2][6] = {{&g_457,&g_457,&g_457,&g_457,&g_457,&g_457},{&g_457,&g_457,&g_457,&g_457,&g_457,&g_457}};
    union U0 l_1198 = {-2L};
    int32_t ** const l_1203 = &g_1000;
    uint32_t l_1235[9][5] = {{2UL,4294967290UL,0x2053E66BL,0xCE24B125L,0x2053E66BL},{0x466813F7L,0x466813F7L,1UL,0xCE24B125L,0x51EA397BL},{4294967290UL,2UL,0x96D42934L,4294967290UL,0x466813F7L},{4294967294UL,7UL,4294967289UL,0xFC0413B2L,7UL},{0x466813F7L,2UL,0xE2CADD70L,1UL,1UL},{0x96D42934L,0x466813F7L,0x96D42934L,4294967289UL,1UL},{0xCE24B125L,4294967290UL,7UL,4294967294UL,7UL},{2UL,4294967294UL,4294967295UL,0xCE24B125L,0x466813F7L},{0x2053E66BL,0x466813F7L,7UL,7UL,0x51EA397BL}};
    int8_t l_1237 = 0xB2L;
    uint32_t *l_1292 = (void*)0;
    uint32_t * const *l_1291 = &l_1292;
    uint32_t l_1324[6][2] = {{18446744073709551611UL,18446744073709551611UL},{18446744073709551611UL,18446744073709551611UL},{18446744073709551611UL,18446744073709551611UL},{18446744073709551611UL,18446744073709551611UL},{18446744073709551611UL,18446744073709551611UL},{18446744073709551611UL,18446744073709551611UL}};
    int i, j, k;
    for (i = 0; i < 4; i++)
        l_911[i] = 1L;
    for (i = 0; i < 1; i++)
        l_1046[i] = 0x02E0C98E42D89AB0LL;
    if (((((*l_448) ^= (-6L)) < ((!(((l_449 , ((((p_71 = (safe_rshift_func_uint8_t_u_s(((*l_454) = (safe_add_func_uint16_t_u_u(g_128[0][3][2], g_258[4]))), (((g_159 , l_449) , (safe_mod_func_uint16_t_u_u((g_457 == &g_458), ((*l_461) = (safe_lshift_func_int16_t_s_u((!(((l_449.f3 <= 0x2FL) , (*g_457)) , 1L)), 1)))))) && (-1L))))) || l_449.f3) < 6UL) > 1L)) & g_4[3]) | l_462[0][0])) != l_462[0][0])) <= (-8L)))
    { /* block id: 213 */
        uint16_t l_486 = 7UL;
        uint64_t l_503 = 0xC3FC38227B8D68D9LL;
        int32_t l_526[9] = {1L,0x3C3F3ACAL,0x3C3F3ACAL,1L,0x3C3F3ACAL,0x3C3F3ACAL,1L,0x3C3F3ACAL,0x3C3F3ACAL};
        int i;
        for (g_253 = 1; (g_253 >= 0); g_253 -= 1)
        { /* block id: 216 */
            int32_t *l_463 = (void*)0;
            int32_t *l_464 = (void*)0;
            int32_t *l_465 = &g_75[0];
            int32_t *l_466 = &l_462[0][0];
            int32_t *l_467 = &g_75[2];
            int32_t *l_468 = &g_135;
            int32_t *l_469 = (void*)0;
            int32_t *l_470[10][3] = {{&l_462[0][0],&l_462[0][0],&l_462[0][0]},{&g_75[0],&l_462[2][0],(void*)0},{(void*)0,&g_75[2],&l_462[2][0]},{(void*)0,&g_4[3],&l_462[0][0]},{&g_75[0],&g_20,&g_75[0]},{&l_462[0][0],&g_4[3],(void*)0},{&l_462[2][0],&g_75[2],(void*)0},{(void*)0,&l_462[2][0],&g_75[0]},{&l_462[0][0],&l_462[0][0],&l_462[0][0]},{(void*)0,&l_462[0][0],&l_462[2][0]}};
            int16_t l_530 = (-7L);
            int32_t l_535 = (-5L);
            int i, j;
            l_472[4][3][2]--;
            for (g_209.f2 = 0; (g_209.f2 <= 1); g_209.f2 += 1)
            { /* block id: 220 */
                uint32_t *l_477 = &g_258[3];
                int64_t l_480[1][10][6] = {{{(-6L),(-2L),(-6L),0x3F7C68C20FEF92FCLL,(-6L),(-2L)},{(-1L),(-6L),(-6L),(-4L),0x539AEC78E0FAAD68LL,0x3F7C68C20FEF92FCLL},{0x61375C96C76C8D7DLL,(-4L),(-2L),(-2L),(-4L),0x61375C96C76C8D7DLL},{(-2L),(-4L),0x61375C96C76C8D7DLL,0x0DB3BFBB48C1FAC4LL,0x539AEC78E0FAAD68LL,(-6L)},{(-6L),(-6L),(-1L),(-6L),(-6L),(-4L)},{(-6L),(-2L),(-6L),0x0DB3BFBB48C1FAC4LL,1L,1L},{(-2L),0x539AEC78E0FAAD68LL,0x539AEC78E0FAAD68LL,(-2L),(-1L),1L},{0x61375C96C76C8D7DLL,1L,(-6L),(-4L),0x0DB3BFBB48C1FAC4LL,(-4L)},{(-1L),(-4L),(-1L),0x3F7C68C20FEF92FCLL,0x0DB3BFBB48C1FAC4LL,(-6L)},{(-6L),1L,0x61375C96C76C8D7DLL,(-1L),(-1L),0x61375C96C76C8D7DLL}}};
                int32_t l_484 = 0x84166A81L;
                int32_t *l_504[7] = {&g_75[2],&g_20,&g_20,&g_75[2],&g_20,&g_20,&g_75[2]};
                uint8_t *l_511 = (void*)0;
                int32_t l_519 = 0x56952E57L;
                int8_t l_524 = 0x02L;
                int i, j, k;
                (*g_267) = (void*)0;
            }
        }
    }
    else
    { /* block id: 252 */
        int32_t l_545[4] = {0xA15CE5BAL,0xA15CE5BAL,0xA15CE5BAL,0xA15CE5BAL};
        union U0 l_606 = {0xEDL};
        int32_t *l_653 = &g_146;
        int64_t l_713 = 8L;
        int32_t **l_722 = &l_653;
        int32_t ***l_721 = &l_722;
        int i;
        for (g_458.f1 = 20; (g_458.f1 == (-7)); g_458.f1 = safe_sub_func_int16_t_s_s(g_458.f1, 2))
        { /* block id: 255 */
            int32_t l_615[1];
            uint8_t l_620 = 0UL;
            uint32_t **l_649 = &l_557;
            int32_t *l_707 = &g_75[2];
            int32_t *l_709 = &g_146;
            int32_t *l_710 = &l_545[0];
            int32_t *l_711 = &l_545[1];
            int32_t *l_712[6][1][3] = {{{&l_615[0],&g_135,&g_135}},{{&g_135,&l_462[0][0],(void*)0}},{{&l_615[0],&l_462[0][0],&l_615[0]}},{{&l_615[0],&g_135,(void*)0}},{{&l_615[0],&l_615[0],&g_135}},{{&l_615[0],&g_135,&g_135}}};
            int64_t l_726 = (-4L);
            int64_t l_789 = 0xDB7474E2223FA5BCLL;
            int i, j, k;
            for (i = 0; i < 1; i++)
                l_615[i] = (-4L);
        }
    }
    for (g_458.f3 = 0; (g_458.f3 != 12); g_458.f3 = safe_add_func_int64_t_s_s(g_458.f3, 1))
    { /* block id: 371 */
        int32_t *l_827 = &g_75[2];
        union U0 l_834 = {0x56L};
        int8_t *l_839 = &g_708;
        uint32_t l_840 = 9UL;
        uint16_t **l_892[9] = {&g_643,&g_643,&g_643,&g_643,&g_643,&g_643,&g_643,&g_643,&g_643};
        int64_t **l_902 = &g_127;
        int16_t l_903 = 0x0ED8L;
        uint16_t l_904 = 0x826EL;
        int32_t l_906 = 0L;
        int32_t l_907 = (-2L);
        uint32_t l_912 = 3UL;
        int32_t l_917 = (-5L);
        int32_t l_925 = 0xC1557A2EL;
        int32_t l_926[1][4][9] = {{{0xD18E9BE1L,0xD18E9BE1L,0x900B22F3L,0x7F48F33DL,0x693ED394L,(-2L),0xD18E9BE1L,0x693ED394L,0x8757C95BL},{0xF7B5BB4CL,1L,2L,0x693ED394L,0x693ED394L,2L,1L,0xF7B5BB4CL,0x900B22F3L},{0xF7B5BB4CL,0x693ED394L,0x900B22F3L,0xF7B5BB4CL,1L,2L,0x693ED394L,0x693ED394L,2L},{0xD18E9BE1L,0x693ED394L,0x8757C95BL,0x693ED394L,0xD18E9BE1L,(-2L),0x693ED394L,0x7F48F33DL,0x900B22F3L}}};
        int64_t l_930 = 9L;
        uint32_t l_935 = 1UL;
        union U0 **l_971 = &g_457;
        int i, j, k;
        g_146 = (p_73 , (((safe_add_func_int64_t_s_s((safe_rshift_func_uint8_t_u_s(((safe_rshift_func_uint16_t_u_u(((safe_mod_func_uint32_t_u_u(1UL, ((*l_827) = l_449.f2))) || ((((*l_839) = ((safe_rshift_func_int8_t_s_u((!((*l_448) = ((((safe_mul_func_uint8_t_u_u(((safe_div_func_int8_t_s_s((l_834 , (safe_add_func_uint32_t_u_u((safe_sub_func_uint16_t_u_u((l_462[1][0] | l_462[4][1]), 0xE028L)), (-1L)))), (p_73 && p_71))) <= (*g_643)), g_78)) != p_72) && (**g_642)) && 255UL))), l_714)) >= 0xCFL)) || g_128[0][3][1]) != p_69)), 12)) >= p_71), 2)), p_73)) < l_840) , p_69));
        for (g_91 = 0; (g_91 <= (-13)); g_91 = safe_sub_func_uint32_t_u_u(g_91, 8))
        { /* block id: 378 */
            uint64_t **l_859 = &g_333[6][0];
            uint64_t ***l_858[5] = {&l_859,&l_859,&l_859,&l_859,&l_859};
            int32_t l_875 = 2L;
            int32_t l_886 = (-1L);
            int32_t l_908 = 1L;
            int32_t l_909 = 0xA85A818CL;
            int32_t l_910 = 0x9B9DDF32L;
            int32_t *l_923 = &l_909;
            int8_t l_927 = (-1L);
            int32_t l_929[5] = {0x2105F6E1L,0x2105F6E1L,0x2105F6E1L,0x2105F6E1L,0x2105F6E1L};
            int64_t *l_948 = &g_128[0][3][1];
            union U0 **l_974 = &g_457;
            uint32_t l_1073 = 8UL;
            uint32_t l_1095 = 8UL;
            uint64_t l_1103 = 18446744073709551615UL;
            int i;
        }
    }
    for (g_91 = 0; (g_91 <= 2); g_91 += 1)
    { /* block id: 489 */
        union U0 l_1106[2][1] = {{{0xE5L}},{{0xE5L}}};
        int64_t * const l_1107[1] = {(void*)0};
        int32_t *l_1110[4][9][2] = {{{&g_135,&g_4[3]},{&g_135,&g_135},{&g_4[3],&g_135},{&g_135,&g_4[3]},{&g_135,&g_135},{&g_4[3],&g_135},{&g_135,&g_4[3]},{&g_135,&g_135},{&g_4[3],&g_135}},{{&g_135,&g_4[3]},{&g_135,&g_135},{&g_4[3],&g_135},{&g_135,&g_4[3]},{&g_135,&g_135},{&g_4[3],&g_135},{&g_135,&g_4[3]},{&g_135,&g_135},{&g_4[3],&g_135}},{{&g_135,&g_4[3]},{&g_135,&g_135},{&g_4[3],&g_135},{&g_135,&g_4[3]},{&g_135,&g_135},{&g_4[3],&g_135},{&g_135,&g_4[3]},{&g_135,&g_135},{&g_4[3],&g_135}},{{&g_135,&g_4[3]},{&g_135,&g_135},{&g_4[3],&g_135},{&g_135,&g_4[3]},{&g_135,&g_135},{&g_4[3],&g_135},{&g_135,&g_4[3]},{&g_135,&g_135},{&g_4[3],&g_135}}};
        uint64_t **l_1119[6][3][8] = {{{&g_333[0][0],(void*)0,&g_333[1][1],&g_333[2][0],(void*)0,&g_333[5][0],&g_333[3][1],&g_333[2][1]},{&g_333[1][1],&g_333[3][0],&g_333[1][1],&g_333[7][1],&g_333[7][1],&g_333[7][1],&g_333[7][1],&g_333[7][1]},{(void*)0,&g_333[0][0],&g_333[7][1],&g_333[7][1],&g_333[4][0],(void*)0,&g_333[7][1],&g_333[4][0]}},{{&g_333[7][1],&g_333[7][1],&g_333[5][0],(void*)0,&g_333[3][1],(void*)0,&g_333[3][0],&g_333[3][1]},{(void*)0,&g_333[7][1],(void*)0,(void*)0,&g_333[7][1],&g_333[7][1],(void*)0,&g_333[7][1]},{&g_333[4][0],&g_333[5][0],&g_333[7][1],(void*)0,(void*)0,(void*)0,(void*)0,&g_333[7][1]}},{{&g_333[7][1],&g_333[7][1],&g_333[3][0],&g_333[5][0],&g_333[3][1],&g_333[7][1],(void*)0,&g_333[1][1]},{&g_333[5][0],&g_333[0][0],&g_333[7][1],&g_333[4][0],&g_333[7][1],&g_333[7][1],(void*)0,&g_333[1][1]},{&g_333[0][0],&g_333[7][1],&g_333[3][0],&g_333[5][0],&g_333[7][1],&g_333[7][1],&g_333[7][1],&g_333[7][1]}},{{&g_333[7][1],&g_333[7][1],&g_333[7][1],(void*)0,&g_333[2][0],&g_333[0][0],&g_333[3][0],(void*)0},{&g_333[7][1],&g_333[7][1],&g_333[4][0],&g_333[5][0],&g_333[3][0],(void*)0,&g_333[7][1],&g_333[3][0]},{&g_333[1][1],&g_333[2][1],(void*)0,(void*)0,&g_333[3][0],&g_333[5][0],(void*)0,&g_333[4][1]}},{{&g_333[7][1],&g_333[7][1],&g_333[7][1],(void*)0,&g_333[7][1],&g_333[7][1],&g_333[7][1],&g_333[7][1]},{&g_333[7][1],&g_333[7][1],&g_333[5][0],&g_333[1][0],(void*)0,&g_333[7][1],&g_333[4][1],&g_333[7][1]},{&g_333[7][1],(void*)0,&g_333[7][1],&g_333[0][0],(void*)0,&g_333[7][1],(void*)0,(void*)0}},{{&g_333[7][1],&g_333[1][1],&g_333[5][1],&g_333[7][1],&g_333[7][1],(void*)0,&g_333[7][1],&g_333[4][0]},{&g_333[7][1],&g_333[7][1],&g_333[7][1],(void*)0,&g_333[3][0],(void*)0,&g_333[7][1],(void*)0},{&g_333[1][1],&g_333[7][1],&g_333[7][1],(void*)0,&g_333[3][0],&g_333[7][1],&g_333[1][1],&g_333[7][1]}}};
        uint64_t ***l_1118 = &l_1119[1][0][4];
        int32_t l_1125 = (-7L);
        uint16_t ***l_1129 = &g_642;
        int16_t l_1159 = 0x354CL;
        int64_t l_1215 = 6L;
        uint64_t l_1239[5];
        const uint16_t l_1271 = 65533UL;
        int16_t l_1272 = 0x065AL;
        int64_t *l_1331 = &g_778;
        int i, j, k;
        for (i = 0; i < 5; i++)
            l_1239[i] = 0xE1DC6819E6A1D5B8LL;
        for (g_578 = 0; (g_578 <= 0); g_578 += 1)
        { /* block id: 492 */
            int i;
            for (l_449.f3 = 0; (l_449.f3 <= 0); l_449.f3 += 1)
            { /* block id: 495 */
                (*g_267) = (*g_267);
            }
            return g_67[(g_91 + 3)];
        }
        (*g_267) = func_99((0xD0B072D2L || l_1046[0]), g_383, l_1106[1][0], l_1107[0], &p_73);
        p_69 = (safe_rshift_func_int8_t_s_u(l_1106[1][0].f3, 2));
        for (g_130 = 0; (g_130 <= 0); g_130 += 1)
        { /* block id: 504 */
            uint64_t l_1111[6][3] = {{0xB02A9711D519CD71LL,0UL,0UL},{0xB02A9711D519CD71LL,0UL,0UL},{0xB02A9711D519CD71LL,0UL,0UL},{0xB02A9711D519CD71LL,0UL,0UL},{0xB02A9711D519CD71LL,0UL,0UL},{0xB02A9711D519CD71LL,0UL,0UL}};
            int32_t l_1124 = 0x5544602EL;
            int32_t l_1126 = 0x0C53A3EEL;
            const union U0 l_1137 = {1L};
            int64_t ***l_1226 = &g_277[0];
            uint32_t l_1325 = 0xB38004C2L;
            int i, j;
            ++l_1111[1][0];
            for (g_135 = 0; (g_135 <= 1); g_135 += 1)
            { /* block id: 508 */
                uint32_t l_1122 = 18446744073709551615UL;
                int32_t l_1123 = 1L;
                uint16_t ***l_1131[10] = {&g_642,&g_642,&g_642,&g_642,&g_642,&g_642,&g_642,&g_642,&g_642,&g_642};
                uint16_t ** const *l_1132[2][3] = {{(void*)0,(void*)0,(void*)0},{&g_642,&g_642,&g_642}};
                uint32_t l_1154 = 0x0F03542AL;
                int32_t l_1158 = 0x24F7942FL;
                int64_t ***l_1170[1][1][7];
                union U0 l_1204 = {0x3DL};
                const uint16_t l_1227 = 65535UL;
                int i, j, k;
                for (i = 0; i < 1; i++)
                {
                    for (j = 0; j < 1; j++)
                    {
                        for (k = 0; k < 7; k++)
                            l_1170[i][j][k] = (void*)0;
                    }
                }
                l_1126 ^= (p_70 == ((l_1125 ^= (((safe_mul_func_int8_t_s_s(((p_69 , 6L) & (l_1124 = ((safe_sub_func_int8_t_s_s((l_1118 != (void*)0), ((safe_add_func_uint8_t_u_u((6L != (((l_1122 &= (p_73 &= (*g_127))) | 18446744073709551615UL) ^ g_209.f0)), 9UL)) == l_1123))) | 1UL))), (*g_983))) , l_1124) | p_70)) < (*g_268)));
            }
            if (p_73)
            { /* block id: 588 */
                int32_t * const l_1274 = &g_75[2];
                int32_t **l_1275 = &g_1000;
                (*l_1275) = l_1274;
                (**g_1175) = l_1110[0][1][1];
                for (g_159 = 0; (g_159 <= 0); g_159 += 1)
                { /* block id: 593 */
                    uint8_t l_1276[6][9] = {{0xECL,5UL,0xECL,5UL,0xECL,5UL,0xECL,5UL,0xECL},{250UL,0xC6L,0xC6L,250UL,250UL,0xC6L,0xC6L,250UL,250UL},{0UL,5UL,0UL,5UL,0UL,5UL,0UL,5UL,0UL},{250UL,250UL,0xC6L,0xC6L,250UL,250UL,0xC6L,0xC6L,250UL},{0xECL,5UL,0xECL,5UL,0xECL,5UL,0xECL,5UL,0xECL},{250UL,0xC6L,0xC6L,250UL,250UL,0xC6L,0xC6L,250UL,250UL}};
                    int i, j;
                    if ((*g_1000))
                        break;
                    (*l_1274) ^= (p_69 = ((**l_1275) && p_72));
                    (*g_267) = func_99(((1UL > 65535UL) , l_1276[5][6]), g_274, l_1137, (*l_1083), (p_69 , &p_73));
                }
            }
            else
            { /* block id: 599 */
                uint32_t *l_1283 = &g_204;
                int32_t l_1284 = 9L;
                (*g_267) = func_99(((safe_lshift_func_int8_t_s_s((g_458.f1 = (**l_1203)), 1)) || g_159), (((safe_sub_func_int64_t_s_s((safe_div_func_uint32_t_u_u(((*l_1283) = l_1137.f1), g_177)), (((((*l_448) = l_1284) , ((((safe_div_func_uint32_t_u_u((p_71 && 0xB48FL), (safe_lshift_func_int16_t_s_u(((*l_461) = (((((+((safe_div_func_uint16_t_u_u((((g_409[0][1] , l_1126) < 1UL) , 0x1B93L), p_72)) , (-1L))) ^ l_1126) , (void*)0) != (void*)0) == 0x15F9L)), 13)))) && l_1137.f0) != p_71) != l_1111[1][0])) , p_69) == g_183))) || (**g_642)) & p_72), l_1137, &l_1215, (**l_1226));
            }
            for (g_159 = 0; (g_159 <= 2); g_159 += 1)
            { /* block id: 608 */
                int32_t l_1322 = 1L;
                int32_t l_1327 = (-7L);
                if (((*g_457) , p_73))
                { /* block id: 609 */
                    uint32_t * const **l_1293 = &l_1291;
                    int32_t l_1318 = 0x0E5EFF82L;
                    uint16_t l_1328 = 0xE7BCL;
                    (*l_1293) = l_1291;
                    for (l_1198.f3 = 0; (l_1198.f3 <= 0); l_1198.f3 += 1)
                    { /* block id: 613 */
                        uint32_t **l_1321 = &l_557;
                        int32_t l_1323 = 9L;
                        int i;
                        g_1326 &= (safe_mod_func_uint32_t_u_u((safe_lshift_func_uint8_t_u_s(((safe_mul_func_uint8_t_u_u((safe_mul_func_int16_t_s_s(((*l_461) = (((safe_mod_func_int64_t_s_s((safe_add_func_int16_t_s_s(0x728EL, (((**l_1203) >= ((safe_lshift_func_int16_t_s_s(g_629, 12)) , (safe_mod_func_int16_t_s_s((p_72 <= (safe_sub_func_int8_t_s_s((safe_lshift_func_int8_t_s_s((safe_mul_func_int8_t_s_s(g_75[2], (g_578 | (3UL ^ (safe_mod_func_uint32_t_u_u((+((l_1318 < (l_1126 = ((safe_sub_func_int8_t_s_s((((*l_1321) = l_557) != (void*)0), p_71)) | g_128[0][3][1]))) & p_73)), g_146)))))), p_69)), l_1322))), 0x0C7AL)))) || p_69))), l_1322)) && 1L) , g_204)), g_133)), l_1323)) , l_1324[0][1]), 2)), l_1325));
                    }
                    ++l_1328;
                }
                else
                { /* block id: 620 */
                    int64_t **l_1333 = &l_1150;
                    int64_t ***l_1332[7][3];
                    const int64_t *l_1336 = &g_1337;
                    const int64_t **l_1335 = &l_1336;
                    int i, j;
                    for (i = 0; i < 7; i++)
                    {
                        for (j = 0; j < 3; j++)
                            l_1332[i][j] = &l_1333;
                    }
                    g_146 &= ((l_1331 = &l_1215) != ((*l_1335) = (((*g_276) == (g_1334 = &l_1150)) , (void*)0)));
                }
            }
        }
    }
    p_69 = ((safe_mul_func_int8_t_s_s(((!p_70) , (p_71 = (safe_sub_func_uint16_t_u_u((safe_add_func_int32_t_s_s(((((**g_276) = (void*)0) != (((safe_lshift_func_int16_t_s_u(((*l_461) = (safe_add_func_uint8_t_u_u(((*g_983)--), (safe_sub_func_uint8_t_u_u(((*g_457) , (g_458.f1 & ((*l_454)--))), (0xE33CL & (**l_1203))))))), 1)) && ((*g_643) = 0xE1FCL)) , (void*)0)) ^ ((safe_rshift_func_uint8_t_u_u(((**l_1203) , 0xAAL), p_73)) && 9UL)), 0x35057CD6L)), (**l_1203))))), g_1086)) , p_73);
    return p_71;
}


/* ------------------------------------------ */
/* 
 * reads : g_20 g_91 g_4 g_128 g_130 g_132 g_147 g_159 g_133 g_135 g_177 g_67 g_183 g_146 g_206 g_209 g_127 g_204 g_209.f1 g_209.f0 g_209.f3 g_254 g_258 g_267 g_276 g_268 g_274 l_17
 * writes: g_127 g_130 g_132 g_133 g_147 g_159 g_177 g_183 g_135 g_146 g_204 g_206 g_254 g_258 g_267 g_268
 */
static union U0  func_97(const int32_t * p_98)
{ /* block id: 35 */
    union U0 l_118[10][7][1] = {{{{0xC9L}},{{0L}},{{0xFDL}},{{-10L}},{{-1L}},{{-1L}},{{-10L}}},{{{0xFDL}},{{0L}},{{0xC9L}},{{0L}},{{0L}},{{0xEEL}},{{-1L}}},{{{0xEEL}},{{0L}},{{0L}},{{0xC9L}},{{0L}},{{0xFDL}},{{-10L}}},{{{-1L}},{{-1L}},{{-10L}},{{0xFDL}},{{0L}},{{0xC9L}},{{0L}}},{{{0L}},{{0xEEL}},{{-1L}},{{0xEEL}},{{0L}},{{0L}},{{0xC9L}}},{{{0L}},{{0xFDL}},{{-10L}},{{-1L}},{{-1L}},{{-10L}},{{0xFDL}}},{{{0L}},{{0xC9L}},{{0L}},{{0L}},{{0xEEL}},{{-1L}},{{0xEEL}}},{{{0L}},{{0L}},{{0xC9L}},{{0L}},{{0xFDL}},{{-10L}},{{-1L}}},{{{-1L}},{{-10L}},{{0xFDL}},{{0L}},{{0xC9L}},{{0L}},{{0L}}},{{{0xEEL}},{{-1L}},{{0xEEL}},{{0L}},{{0L}},{{0xC9L}},{{0L}}}};
    int32_t *l_121 = &g_20;
    int32_t *l_123 = (void*)0;
    int32_t **l_122 = &l_123;
    int64_t *l_124 = (void*)0;
    int64_t *l_126 = &g_91;
    int64_t **l_125[2];
    uint8_t *l_129 = &g_130;
    uint64_t *l_131 = &g_132;
    int32_t l_142 = 0x28050347L;
    int32_t l_158[8][5] = {{0x58A6C8DEL,0xA13AD1F1L,(-1L),0xA13AD1F1L,0x58A6C8DEL},{0L,0xBB4E128BL,0xBB4E128BL,0L,0x815FF81FL},{(-2L),0xA13AD1F1L,(-2L),(-1L),(-2L)},{0L,0L,0x7C678778L,0xBB4E128BL,0x815FF81FL},{0x58A6C8DEL,(-1L),(-1L),(-1L),0x58A6C8DEL},{0x815FF81FL,0xBB4E128BL,0x7C678778L,0L,0L},{(-2L),(-1L),(-2L),0xA13AD1F1L,(-2L)},{0x815FF81FL,0L,0xBB4E128BL,0xBB4E128BL,0L}};
    int64_t l_162 = (-1L);
    uint32_t *l_230 = (void*)0;
    int64_t l_330[6][10] = {{3L,0x18470653C73B861FLL,0xCCF0B8B5409C4288LL,0L,0L,0xCCF0B8B5409C4288LL,0x18470653C73B861FLL,3L,0x18470653C73B861FLL,0xCCF0B8B5409C4288LL},{0xA5B1CB5A17DCD406LL,0x7E45F49753809639LL,0L,0x7E45F49753809639LL,0xA5B1CB5A17DCD406LL,0xCCF0B8B5409C4288LL,0xCCF0B8B5409C4288LL,0xA5B1CB5A17DCD406LL,0x7E45F49753809639LL,0L},{3L,3L,0L,0xA5B1CB5A17DCD406LL,0xE47515C299F0A386LL,0xA5B1CB5A17DCD406LL,0L,3L,3L,0L},{0x7E45F49753809639LL,0xA5B1CB5A17DCD406LL,0xCCF0B8B5409C4288LL,0xCCF0B8B5409C4288LL,0xA5B1CB5A17DCD406LL,0x7E45F49753809639LL,0L,0x7E45F49753809639LL,0xA5B1CB5A17DCD406LL,0xCCF0B8B5409C4288LL},{0x18470653C73B861FLL,3L,0x18470653C73B861FLL,0xCCF0B8B5409C4288LL,0L,0L,0xCCF0B8B5409C4288LL,0x18470653C73B861FLL,3L,0x18470653C73B861FLL},{0x18470653C73B861FLL,0x7E45F49753809639LL,3L,0xA5B1CB5A17DCD406LL,3L,0x7E45F49753809639LL,0x18470653C73B861FLL,0x18470653C73B861FLL,0x7E45F49753809639LL,3L}};
    int32_t l_338 = 4L;
    uint64_t l_353 = 1UL;
    const uint64_t l_440 = 0x55F846FE51E95657LL;
    uint16_t *l_444[2];
    uint16_t **l_443 = &l_444[0];
    int i, j, k;
    for (i = 0; i < 2; i++)
        l_125[i] = &l_126;
    for (i = 0; i < 2; i++)
        l_444[i] = (void*)0;
    if ((safe_div_func_int32_t_s_s(g_20, (safe_lshift_func_int8_t_s_s((safe_unary_minus_func_uint64_t_u((g_91 < (g_133 = (g_91 != ((*l_131) &= (((*l_129) |= (l_118[4][5][0] , (g_4[3] == ((((safe_rshift_func_uint8_t_u_u((((!(l_121 != ((*l_122) = (void*)0))) , l_124) == (g_127 = &g_91)), 0)) , (*l_121)) & g_128[1][2][0]) <= 0x94F4A132L)))) , (*l_121)))))))), 7)))))
    { /* block id: 41 */
        int32_t *l_134 = &g_135;
        int32_t *l_136 = (void*)0;
        int32_t l_137 = 0x8EC8C7DFL;
        int32_t *l_138 = &g_135;
        int32_t *l_139 = (void*)0;
        int32_t *l_140 = &g_135;
        int32_t *l_141[2][10][5] = {{{&g_135,(void*)0,&g_135,&g_135,(void*)0},{(void*)0,&g_4[4],&g_4[0],(void*)0,&g_20},{(void*)0,&g_4[3],&g_4[1],&g_4[0],(void*)0},{(void*)0,(void*)0,(void*)0,(void*)0,&g_135},{&l_137,(void*)0,(void*)0,&g_20,(void*)0},{(void*)0,&g_20,&g_135,(void*)0,&g_135},{&g_4[0],&g_4[0],(void*)0,&g_20,(void*)0},{(void*)0,&g_4[4],&g_135,&g_4[0],(void*)0},{&g_135,(void*)0,&g_20,(void*)0,&g_135},{&l_137,&g_4[4],&g_20,&g_4[3],(void*)0}},{{&g_20,&g_4[0],(void*)0,(void*)0,(void*)0},{&g_4[3],&g_20,&g_4[3],&g_4[4],(void*)0},{&g_4[1],(void*)0,&g_4[0],&g_4[3],&g_135},{(void*)0,(void*)0,(void*)0,(void*)0,(void*)0},{(void*)0,(void*)0,&g_4[0],&g_135,(void*)0},{&g_20,&g_20,&g_4[3],&g_135,&g_135},{&g_135,(void*)0,(void*)0,&g_135,(void*)0},{&g_20,(void*)0,&g_20,&l_137,&g_135},{(void*)0,&l_137,&g_20,&g_4[0],&g_20},{(void*)0,(void*)0,&g_135,&l_137,&g_20}}};
        uint8_t l_143 = 0UL;
        int i, j, k;
        ++l_143;
        g_147--;
    }
    else
    { /* block id: 44 */
        int32_t *l_150 = &l_142;
        int32_t *l_151 = &l_142;
        int32_t *l_152 = (void*)0;
        int32_t *l_153 = &l_142;
        int32_t *l_154 = &l_142;
        int32_t *l_155 = &g_146;
        int32_t *l_156 = &g_146;
        int32_t *l_157[2];
        int16_t l_222[5] = {(-1L),(-1L),(-1L),(-1L),(-1L)};
        uint16_t *l_275 = &g_177;
        int64_t *l_282 = &l_162;
        int32_t **l_287 = &l_154;
        union U0 l_299[3] = {{0L},{0L},{0L}};
        int32_t l_306 = 0xE7992D64L;
        uint8_t l_346 = 0x8BL;
        uint8_t l_378 = 0UL;
        uint16_t ***l_445 = &l_443;
        int i;
        for (i = 0; i < 2; i++)
            l_157[i] = &g_135;
        (*l_150) = 0xCCA6638CL;
        g_159--;
        for (g_133 = 0; (g_133 <= 0); g_133 += 1)
        { /* block id: 49 */
            uint16_t *l_176 = &g_177;
            uint8_t *l_182 = &g_183;
            int32_t l_202 = 0xFD7715F6L;
            int32_t l_225 = 0xCDD8E95DL;
            int32_t **l_265 = (void*)0;
            uint64_t *l_278[2];
            uint32_t *l_319 = &g_159;
            union U0 l_352 = {0xE1L};
            int64_t ***l_406 = &g_277[0];
            int i;
            for (i = 0; i < 2; i++)
                l_278[i] = &g_132;
            if (l_162)
                break;
            if ((safe_mul_func_uint16_t_u_u(g_132, (safe_lshift_func_int8_t_s_u(((!(safe_lshift_func_uint16_t_u_u((safe_mod_func_uint32_t_u_u(g_91, ((*l_153) = (safe_lshift_func_int8_t_s_u((safe_div_func_int16_t_s_s((g_135 != (((((safe_unary_minus_func_int64_t_s(0L)) <= g_4[3]) | ((*l_176)--)) , &g_132) != (void*)0)), ((((*l_182) = (g_130++)) || g_128[0][0][1]) ^ 0UL))), 1))))), 9))) == g_67[5]), g_159)))))
            { /* block id: 55 */
                int32_t *l_184[2][4][9] = {{{(void*)0,&g_135,&g_146,&g_146,&g_135,(void*)0,&g_135,&g_146,&g_146},{&g_135,&g_135,(void*)0,(void*)0,(void*)0,&g_135,&g_135,(void*)0,(void*)0},{(void*)0,&g_135,(void*)0,(void*)0,(void*)0,(void*)0,&g_135,(void*)0,(void*)0},{&g_4[3],(void*)0,(void*)0,&g_4[3],&l_142,&g_4[3],(void*)0,(void*)0,&g_4[3]}},{{&g_4[2],(void*)0,&g_146,(void*)0,&g_4[2],&g_4[2],(void*)0,&g_146,(void*)0},{(void*)0,&l_142,(void*)0,(void*)0,&l_142,(void*)0,&l_142,(void*)0,(void*)0},{&g_4[2],&g_4[2],(void*)0,&g_146,(void*)0,&g_4[2],&g_4[2],(void*)0,&g_146},{&g_4[3],&l_142,&g_4[3],(void*)0,(void*)0,&g_4[3],&l_142,&g_4[3],(void*)0}}};
                int32_t *l_185 = &l_158[5][4];
                int32_t l_226 = 0x35E0E7B4L;
                int8_t l_227 = (-7L);
                int8_t l_229 = 0x9BL;
                int i, j, k;
                l_185 = (l_184[1][2][2] = ((*l_122) = (void*)0));
                for (g_135 = 0; (g_135 >= 0); g_135 -= 1)
                { /* block id: 61 */
                    int16_t l_205 = 0x495EL;
                    for (l_142 = 0; (l_142 <= 0); l_142 += 1)
                    { /* block id: 64 */
                        uint32_t *l_199 = &g_159;
                        int32_t l_203 = 1L;
                        g_204 = (safe_sub_func_uint8_t_u_u((safe_sub_func_uint16_t_u_u((safe_lshift_func_uint8_t_u_s((!0xEBL), ((safe_mod_func_int32_t_s_s((*p_98), ((*l_121) & (safe_rshift_func_uint16_t_u_u((safe_unary_minus_func_int64_t_s((0x15133C6BL <= g_183))), ((safe_add_func_uint64_t_u_u(9UL, 0xE941047791FE6ADBLL)) | ((--(*l_199)) & ((*l_156) |= ((~l_202) || (((*l_131) = (g_130 , l_203)) | 0x206A442AE9B445DALL)))))))))) < g_67[3]))), g_128[0][0][0])), 0x5CL));
                        if (l_205)
                            break;
                        g_206--;
                    }
                    return g_209;
                }
                if (g_67[1])
                { /* block id: 74 */
                    uint32_t *l_228 = &g_159;
                    int32_t l_238 = 0x66868886L;
                    int32_t l_257[8] = {(-6L),(-6L),(-6L),(-6L),(-6L),(-6L),(-6L),(-6L)};
                    const uint16_t *l_273 = &g_274;
                    int i;
                    if ((((((safe_add_func_uint32_t_u_u(((void*)0 != p_98), ((((safe_mul_func_uint16_t_u_u((((((safe_lshift_func_int8_t_s_s((safe_lshift_func_uint8_t_u_u((*l_121), 4)), (0UL & (g_4[0] , (((((*l_129) = (safe_mod_func_int64_t_s_s((l_222[3] = (*g_127)), g_204))) ^ l_202) <= ((((*l_228) = ((((safe_rshift_func_uint8_t_u_s((l_225 = ((-10L) || 4L)), 1)) & l_226) == l_227) | 1L)) && 0x4375D102L) | (*g_127))) <= g_209.f1))))) ^ g_209.f0) == 0x0DDE07FD64A67530LL) && 0L) , l_229), 0xA2EDL)) | (*g_127)) != 18446744073709551615UL) >= g_133))) || g_146) , g_209.f3) >= l_202) ^ g_91))
                    { /* block id: 79 */
                        int32_t **l_231 = (void*)0;
                        int32_t **l_232 = (void*)0;
                        int32_t **l_233 = (void*)0;
                        int32_t **l_234 = &l_152;
                        (*l_154) = (0x1EL >= 0L);
                        l_202 |= (((l_230 = l_155) != l_121) <= 0x0F1CL);
                        (*l_234) = ((*l_122) = (void*)0);
                    }
                    else
                    { /* block id: 85 */
                        uint32_t l_235 = 4294967295UL;
                        l_235--;
                    }
                    if (((*l_155) = (l_202 < g_4[3])))
                    { /* block id: 89 */
                        const int16_t l_245 = 0x1D43L;
                        uint64_t *l_248 = (void*)0;
                        int32_t l_249 = 0x4F5E980EL;
                        int32_t l_250 = (-1L);
                        int32_t l_251 = 0x2859D2BFL;
                        int32_t l_252 = 1L;
                        (*l_150) &= ((((*l_176) = 0xA8DEL) | l_238) >= ((*l_182) |= (safe_lshift_func_uint8_t_u_u((g_4[3] != g_146), 6))));
                        (*l_155) = (safe_lshift_func_int8_t_s_s(((safe_mod_func_int8_t_s_s(((l_245 ^ ((-1L) < (1UL <= ((((safe_div_func_uint32_t_u_u((((!((void*)0 != &g_132)) > ((&g_133 == (g_209.f1 , l_248)) >= (0x9357L || l_245))) <= (-3L)), 1L)) && g_209.f1) <= g_209.f0) <= 0xACL)))) <= (*g_127)), (-3L))) != 0UL), 3));
                        ++g_254;
                    }
                    else
                    { /* block id: 95 */
                        int32_t ***l_266 = &l_265;
                        const int32_t ***l_269 = &g_267;
                        const uint16_t *l_270 = &g_177;
                        const uint16_t **l_271 = (void*)0;
                        const uint16_t **l_272 = &l_270;
                        union U0 l_279[6][7] = {{{-7L},{1L},{1L},{1L},{1L},{-7L},{1L}},{{-3L},{-7L},{-7L},{-3L},{1L},{-3L},{-7L}},{{-10L},{-10L},{-7L},{1L},{-7L},{-10L},{-10L}},{{-10L},{-3L},{1L},{-3L},{-7L},{-7L},{-3L}},{{1L},{-10L},{1L},{-3L},{-3L},{1L},{-10L}},{{-3L},{-10L},{1L},{1L},{-10L},{-3L},{-10L}}};
                        union U0 *l_280[2];
                        int64_t * const l_281 = (void*)0;
                        int i, j;
                        for (i = 0; i < 2; i++)
                            l_280[i] = (void*)0;
                        --g_258[3];
                        (*l_156) = ((p_98 == p_98) != ((safe_mod_func_uint8_t_u_u((((l_238 ^ (safe_lshift_func_int16_t_s_u(((((*l_266) = l_265) != ((*l_269) = g_267)) , (l_257[5] > ((l_273 = ((*l_272) = l_270)) == l_275))), ((((!(g_209.f1 && 4294967295UL)) , 18446744073709551615UL) , 0xDDL) <= l_257[5])))) , &l_125[1]) != g_276), l_257[5])) >= l_238));
                        (**l_269) = func_99(((*l_176) = 0xD72BL), (~(&g_132 != ((+(***l_269)) , l_278[0]))), (l_118[1][1][0] = l_279[4][4]), l_281, l_282);
                    }
                    if ((*g_268))
                        break;
                    return g_209;
                }
                else
                { /* block id: 108 */
                    uint32_t l_283 = 0x9C6F2927L;
                    uint32_t *l_286 = &l_283;
                    l_283 = 0L;
                    (*l_156) |= (safe_sub_func_uint32_t_u_u((g_147 || ((((*l_286) = g_91) , (65526UL <= (((l_287 != ((+l_225) , &l_151)) || (safe_lshift_func_uint16_t_u_s(0x0559L, 15))) >= (((1L == ((((*l_129) = ((-2L) > g_4[3])) > g_177) , g_20)) , g_147) == l_283)))) <= 8L)), g_20));
                }
            }
            else
            { /* block id: 114 */
                uint32_t *l_292 = &g_254;
                int8_t *l_297 = &g_209.f3;
                int8_t *l_298[3];
                int i;
                for (i = 0; i < 3; i++)
                    l_298[i] = (void*)0;
                (*l_153) = (**l_287);
                g_135 ^= (safe_div_func_int16_t_s_s((((((((**g_267) >= ((*l_292) = ((void*)0 != (*g_267)))) > ((*l_282) = (safe_mod_func_uint32_t_u_u(0xB1D3D90BL, (safe_mul_func_int8_t_s_s(((+(g_130 , (*l_150))) <= ((*l_156) = g_209.f1)), (*l_121))))))) >= (((((~((g_183 || (-1L)) || g_274)) & 0x12DC9772L) ^ g_67[0]) == 3L) , (*l_121))) != 0xEB08L) == (*l_121)) , (*l_121)), (*l_121)));
                (*l_122) = ((*l_287) = (*l_287));
                for (g_132 = 0; (g_132 <= 1); g_132 += 1)
                { /* block id: 124 */
                    return l_299[2];
                }
            }
            (*g_267) = p_98;
            for (g_132 = 0; (g_132 <= 0); g_132 += 1)
            { /* block id: 131 */
                const uint8_t l_328 = 253UL;
                int8_t *l_329 = &g_209.f1;
                int32_t l_345 = 0x37E602FBL;
                int8_t l_379 = 0x45L;
                int32_t l_381 = (-1L);
                int64_t *** const l_405 = (void*)0;
            }
        }
        (*l_445) = l_443;
    }
    return l_118[6][0][0];
}


/* ------------------------------------------ */
/* 
 * reads :
 * writes:
 */
static const int32_t * func_99(uint16_t  p_100, int16_t  p_101, union U0  p_102, int64_t * const  p_103, int64_t * p_104)
{ /* block id: 32 */
    int64_t * const l_111 = &g_91;
    int64_t * const *l_110 = &l_111;
    int64_t * const **l_109 = &l_110;
    const int32_t *l_112[3][1][6];
    int i, j, k;
    for (i = 0; i < 3; i++)
    {
        for (j = 0; j < 1; j++)
        {
            for (k = 0; k < 6; k++)
                l_112[i][j][k] = &g_4[3];
        }
    }
    (*l_109) = &p_103;
    return l_112[2][0][0];
}




/* ---------------------------------------- */
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();
    for (i = 0; i < 5; i++)
    {
        transparent_crc(g_4[i], "g_4[i]", print_hash_value);
        if (print_hash_value) printf("index = [%d]\n", i);

    }
    transparent_crc(g_20, "g_20", print_hash_value);
    for (i = 0; i < 7; i++)
    {
        transparent_crc(g_67[i], "g_67[i]", print_hash_value);
        if (print_hash_value) printf("index = [%d]\n", i);

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

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

            }
        }
    }
    transparent_crc(g_130, "g_130", print_hash_value);
    transparent_crc(g_132, "g_132", print_hash_value);
    transparent_crc(g_133, "g_133", print_hash_value);
    transparent_crc(g_135, "g_135", print_hash_value);
    transparent_crc(g_146, "g_146", print_hash_value);
    transparent_crc(g_147, "g_147", print_hash_value);
    transparent_crc(g_159, "g_159", print_hash_value);
    transparent_crc(g_177, "g_177", print_hash_value);
    transparent_crc(g_183, "g_183", print_hash_value);
    transparent_crc(g_204, "g_204", print_hash_value);
    transparent_crc(g_206, "g_206", print_hash_value);
    transparent_crc(g_209.f0, "g_209.f0", print_hash_value);
    transparent_crc(g_209.f1, "g_209.f1", print_hash_value);
    transparent_crc(g_209.f3, "g_209.f3", print_hash_value);
    transparent_crc(g_253, "g_253", print_hash_value);
    transparent_crc(g_254, "g_254", print_hash_value);
    for (i = 0; i < 8; i++)
    {
        transparent_crc(g_258[i], "g_258[i]", print_hash_value);
        if (print_hash_value) printf("index = [%d]\n", i);

    }
    transparent_crc(g_274, "g_274", print_hash_value);
    transparent_crc(g_380, "g_380", print_hash_value);
    transparent_crc(g_383, "g_383", print_hash_value);
    transparent_crc(g_384, "g_384", print_hash_value);
    transparent_crc(g_408, "g_408", print_hash_value);
    for (i = 0; i < 1; i++)
    {
        for (j = 0; j < 4; j++)
        {
            transparent_crc(g_409[i][j], "g_409[i][j]", print_hash_value);
            if (print_hash_value) printf("index = [%d][%d]\n", i, j);

        }
    }
    transparent_crc(g_458.f0, "g_458.f0", print_hash_value);
    transparent_crc(g_458.f1, "g_458.f1", print_hash_value);
    transparent_crc(g_458.f3, "g_458.f3", print_hash_value);
    transparent_crc(g_471, "g_471", print_hash_value);
    transparent_crc(g_578, "g_578", print_hash_value);
    transparent_crc(g_629, "g_629", print_hash_value);
    transparent_crc(g_708, "g_708", print_hash_value);
    transparent_crc(g_746, "g_746", print_hash_value);
    transparent_crc(g_778, "g_778", print_hash_value);
    transparent_crc(g_888, "g_888", print_hash_value);
    transparent_crc(g_1086, "g_1086", print_hash_value);
    transparent_crc(g_1326, "g_1326", print_hash_value);
    transparent_crc(g_1337, "g_1337", print_hash_value);
    transparent_crc(g_1413, "g_1413", print_hash_value);
    transparent_crc(g_1585, "g_1585", print_hash_value);
    transparent_crc(g_1622, "g_1622", print_hash_value);
    transparent_crc(g_1679, "g_1679", print_hash_value);
    transparent_crc(g_1860, "g_1860", print_hash_value);
    transparent_crc(g_1962, "g_1962", print_hash_value);
    for (i = 0; i < 10; i++)
    {
        transparent_crc(g_2033[i], "g_2033[i]", print_hash_value);
        if (print_hash_value) printf("index = [%d]\n", i);

    }
    transparent_crc(g_2193.f0, "g_2193.f0", print_hash_value);
    transparent_crc(g_2193.f1, "g_2193.f1", print_hash_value);
    transparent_crc(g_2193.f3, "g_2193.f3", print_hash_value);
    transparent_crc(g_2307, "g_2307", print_hash_value);
    transparent_crc(g_2497, "g_2497", print_hash_value);
    transparent_crc(g_2508, "g_2508", print_hash_value);
    transparent_crc(g_2648, "g_2648", print_hash_value);
    transparent_crc(g_2767, "g_2767", print_hash_value);
    transparent_crc(g_2797, "g_2797", print_hash_value);
    transparent_crc(g_2866, "g_2866", print_hash_value);
    transparent_crc(g_2895, "g_2895", print_hash_value);
    for (i = 0; i < 4; i++)
    {
        transparent_crc(g_3176[i], "g_3176[i]", print_hash_value);
        if (print_hash_value) printf("index = [%d]\n", i);

    }
    transparent_crc(g_3254, "g_3254", print_hash_value);
    transparent_crc(g_3261, "g_3261", print_hash_value);
    for (i = 0; i < 7; i++)
    {
        transparent_crc(g_3322[i], "g_3322[i]", print_hash_value);
        if (print_hash_value) printf("index = [%d]\n", i);

    }
    transparent_crc(g_3340, "g_3340", print_hash_value);
    transparent_crc(g_3407, "g_3407", print_hash_value);
    transparent_crc(g_3485, "g_3485", print_hash_value);
    transparent_crc(g_3515, "g_3515", print_hash_value);
    transparent_crc(g_3578, "g_3578", print_hash_value);
    transparent_crc(g_3815, "g_3815", print_hash_value);
    transparent_crc(g_3847, "g_3847", print_hash_value);
    transparent_crc(g_3879, "g_3879", print_hash_value);
    transparent_crc(g_3880, "g_3880", print_hash_value);
    platform_main_end(crc32_context ^ 0xFFFFFFFFUL, print_hash_value);
    return 0;
}

/************************ statistics *************************
XXX max struct depth: 0
breakdown:
   depth: 0, occurrence: 1041
XXX total union variables: 31

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: 47
breakdown:
   depth: 1, occurrence: 335
   depth: 2, occurrence: 80
   depth: 3, occurrence: 8
   depth: 4, occurrence: 4
   depth: 5, occurrence: 5
   depth: 6, occurrence: 2
   depth: 7, occurrence: 4
   depth: 8, occurrence: 3
   depth: 9, occurrence: 4
   depth: 10, occurrence: 2
   depth: 15, occurrence: 3
   depth: 16, occurrence: 4
   depth: 17, occurrence: 2
   depth: 18, occurrence: 5
   depth: 19, occurrence: 8
   depth: 20, occurrence: 8
   depth: 21, occurrence: 3
   depth: 22, occurrence: 7
   depth: 23, occurrence: 2
   depth: 24, occurrence: 2
   depth: 25, occurrence: 4
   depth: 26, occurrence: 2
   depth: 27, occurrence: 7
   depth: 28, occurrence: 2
   depth: 29, occurrence: 3
   depth: 30, occurrence: 3
   depth: 31, occurrence: 1
   depth: 32, occurrence: 1
   depth: 34, occurrence: 2
   depth: 36, occurrence: 1
   depth: 39, occurrence: 1
   depth: 41, occurrence: 1
   depth: 44, occurrence: 1
   depth: 47, occurrence: 1

XXX total number of pointers: 777

XXX times a variable address is taken: 1700
XXX times a pointer is dereferenced on RHS: 704
breakdown:
   depth: 1, occurrence: 460
   depth: 2, occurrence: 141
   depth: 3, occurrence: 54
   depth: 4, occurrence: 38
   depth: 5, occurrence: 9
   depth: 6, occurrence: 2
XXX times a pointer is dereferenced on LHS: 578
breakdown:
   depth: 1, occurrence: 460
   depth: 2, occurrence: 71
   depth: 3, occurrence: 35
   depth: 4, occurrence: 10
   depth: 5, occurrence: 1
   depth: 6, occurrence: 1
XXX times a pointer is compared with null: 83
XXX times a pointer is compared with address of another variable: 24
XXX times a pointer is compared with another pointer: 23
XXX times a pointer is qualified to be dereferenced: 13137

XXX max dereference level: 6
breakdown:
   level: 0, occurrence: 0
   level: 1, occurrence: 3348
   level: 2, occurrence: 779
   level: 3, occurrence: 469
   level: 4, occurrence: 276
   level: 5, occurrence: 33
   level: 6, occurrence: 10
XXX number of pointers point to pointers: 359
XXX number of pointers point to scalars: 399
XXX number of pointers point to structs: 0
XXX percent of pointers has null in alias set: 28.4
XXX average alias set size: 1.47

XXX times a non-volatile is read: 4088
XXX times a non-volatile is write: 1844
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: 2
XXX backward jumps: 8

XXX stmts: 344
XXX max block depth: 5
breakdown:
   depth: 0, occurrence: 29
   depth: 1, occurrence: 40
   depth: 2, occurrence: 37
   depth: 3, occurrence: 58
   depth: 4, occurrence: 74
   depth: 5, occurrence: 106

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

