sub_1403DCCA0

__int64 __fastcall sub_1403DCCA0(__int64 a1, __int64 a2){
  __int64 v2; 
  _DWORD *v4; 
  int v6; 
  int v7; 
  int v8; 
  int v9; 
  UINT8 v10; 
  UINT64 v11; 
  PSLIST_ENTRY PoolWithTag; 
  __int64 v13; 
  __int64 v14; 
  __int64 v15; 
  unsigned int v16; 
  __int64 v17; 
  __int64 v18; 
  __int64 v19; 
  int v20; 
  __int64 v21; 
  __int64 v22; 
  int v23; 
  __int64 v24; 
  int v25; 
  unsigned __int64 v26; 
  unsigned __int128 v27; 
  unsigned __int64 v28; 
  unsigned __int128 v29; 
  unsigned __int64 v30; 
  int v31; 
  int v32; 
  unsigned int v33; 
  int v34; 
  int v35; 
  int v36; 
  unsigned __int64 v37; 
  __int64 v38; 
  unsigned int v39; 
  __int64 v40; 
  unsigned __int64 v41; 
  unsigned __int64 v42; 
  unsigned __int128 v43; 
  __int64 v44; 
  unsigned int *v45; 
  int v46; 
  unsigned __int64 v47; 
  unsigned int v48; 
  unsigned __int64 v49; 
  unsigned int v50; 
  unsigned __int64 v51; 
  unsigned int v52; 
  int v53; 
  __int64 v54; 
  __int64 v55; 
  char *v56; 
  unsigned int v57; 
  __int64 v58; 
  int v59; 
  int v60; 
  int v61; 
  int v62; 
  __int64 v63; 
  unsigned __int64 v64; 
  unsigned __int128 v65; 
  unsigned __int64 v66; 
  __int64 v67; 
  int v68; 
  unsigned __int64 v69; 
  int v70; 
  __int64 v71; 
  bool v72; 
  __int64 v73; 
  __int64 v74; 
  int *v75; 
  unsigned __int64 v76; 
  int v77; 
  int v78; 
  int v79; 
  unsigned int v80; 
  unsigned __int64 v81; 
  unsigned __int64 v82; 
  _QWORD *v83; 
  __int64 v84; 
  _QWORD *v85; 
  char *v86; 
  int v87; 
  unsigned __int64 v88; 
  unsigned int v89; 
  __int64 v90; 
  __int64 v91; 
  __int64 v92; 
  unsigned __int128 v93; 
  unsigned int v94; 
  unsigned __int64 v95; 
  __int64 v96; 
  unsigned __int64 i28; 
  unsigned __int64 v98; 
  unsigned int v99; 
  __int64 v100; 
  __int64 v101; 
  unsigned __int8 v102; 
  unsigned __int64 v103; 
  __int64 v104; 
  unsigned __int64 v105; 
  int v106; 
  int v107; 
  int v108; 
  unsigned __int64 v109; 
  int v110; 
  unsigned __int64 v111; 
  unsigned __int64 v112; 
  __int64 v113; 
  __int64 v114; 
  _QWORD *v115; 
  char *v116; 
  int v117; 
  __int64 v118; 
  unsigned __int64 v119; 
  unsigned int v120; 
  __int64 v121; 
  unsigned __int64 v122; 
  __int64 v123; 
  unsigned __int64 v124; 
  __int64 v125; 
  unsigned __int64 v126; 
  __int64 v127; 
  unsigned __int64 i27; 
  __int64 v129; 
  unsigned int v130; 
  unsigned int v131; 
  unsigned __int8 v132; 
  unsigned __int64 v133; 
  unsigned __int64 v134; 
  int v135; 
  int *v136; 
  bool v137; 
  __int64 v138; 
  __int64 v139; 
  unsigned __int16 v140; 
  _QWORD *v141; 
  __int64 v142; 
  _QWORD *v143; 
  char *v144; 
  int v145; 
  __int64 v146; 
  unsigned __int64 v147; 
  unsigned int v148; 
  __int64 v149; 
  __int64 v150; 
  unsigned __int128 v151; 
  unsigned int v152; 
  unsigned __int64 v153; 
  __int64 v154; 
  unsigned __int64 i26; 
  unsigned int v156; 
  __int64 v157; 
  __int64 v158; 
  __int64 v159; 
  unsigned __int8 v160; 
  unsigned __int64 v161; 
  unsigned __int64 v162; 
  unsigned __int64 v163; 
  int v164; 
  __int16 v165; 
  __int64 v166; 
  int(__fastcall *v167)(__int16 *, _QWORD, _QWORD, _QWORD, __int64, _DWORD, _QWORD, __int64 *); 
  __int64 v168; 
  void(*v169)(void); 
  int v170; 
  __int64 v171; 
  unsigned int i25; 
  __int64 v173; 
  unsigned __int64 v174; 
  __int64 v175; 
  __int64 v176; 
  unsigned __int64 v177; 
  unsigned __int64 v178; 
  int v179; 
  int v180; 
  unsigned __int64 v181; 
  unsigned __int128 v182; 
  void(*v183)(void); 
  int v184; 
  __int64 v185; 
  unsigned int v186; 
  unsigned __int8 v187; 
  volatile signed __int8 **v188; 
  volatile signed __int8 *v189; 
  __int64 v190; 
  unsigned __int64 v191; 
  __int64 *v192; 
  __int64 v193; 
  __int64 v194; 
  __int64 *v195; 
  _BYTE *v196; 
  char v197; 
  __int64 v198; 
  int *v199; 
  __int64 v200; 
  __int64 v201; 
  bool v202; 
  int *v203; 
  void(*v204)(void); 
  int v205; 
  __int64 v206; 
  unsigned int v207; 
  unsigned __int8 v208; 
  _QWORD **v209; 
  _QWORD *v210; 
  unsigned __int64 v211; 
  int *v212; 
  __int64 v213; 
  unsigned __int64 *v214; 
  unsigned __int8 v215; 
  int v216; 
  int *v217; 
  unsigned __int8 v218; 
  __int64 v219; 
  unsigned __int64 v220; 
  _QWORD *v221; 
  __int64 v222; 
  _QWORD *v223; 
  char *v224; 
  int v225; 
  unsigned __int64 v226; 
  unsigned int v227; 
  __int64 v228; 
  __int64 v229; 
  unsigned __int128 v230; 
  unsigned int v231; 
  unsigned __int64 v232; 
  __int64 v233; 
  unsigned __int64 i24; 
  unsigned int v235; 
  __int64 v236; 
  __int64 v237; 
  __int64 v238; 
  unsigned __int8 v239; 
  unsigned __int64 v240; 
  unsigned __int64 v241; 
  int v242; 
  __int64 v243; 
  unsigned __int64 v244; 
  __int64 v245; 
  void(*v246)(void); 
  __int64 v247; 
  unsigned int v248; 
  void(__fastcall *v249)(__int64, _QWORD); 
  unsigned __int64 *v250; 
  __int64 v251; 
  unsigned __int64 v252; 
  __int64 v253; 
  __int64 v254; 
  _QWORD **v255; 
  _QWORD *v256; 
  unsigned int v257; 
  unsigned __int8 v258; 
  __int64 v259; 
  char *v260; 
  __int64 v261; 
  __int64 v262; 
  int *v263; 
  _QWORD **v264; 
  _QWORD *i7; 
  int v266; 
  __int64 v267; 
  __int64 v268; 
  void(*v269)(void); 
  unsigned int v270; 
  volatile signed __int8 **v271; 
  volatile signed __int8 *v272; 
  _QWORD **v273; 
  _QWORD *v274; 
  __int64 v275; 
  int *v276; 
  char *v277; 
  __int64 v278; 
  __int64 v279; 
  _QWORD **v280; 
  __int64(*v281)(void); 
  __int64 v282; 
  __int64 v283; 
  unsigned int v284; 
  unsigned int *v285; 
  __int64 v286; 
  _QWORD *v287; 
  unsigned __int64 v288; 
  __int64 v289; 
  int v290; 
  unsigned __int64 v291; 
  unsigned __int128 v292; 
  __int64 v293; 
  unsigned __int64 v294; 
  __int64 v295; 
  __int64 v296; 
  int v297; 
  _QWORD *v298; 
  unsigned __int64 v299; 
  unsigned __int64 v300; 
  unsigned __int128 v301; 
  unsigned __int64 v302; 
  unsigned __int128 v303; 
  unsigned __int64 v304; 
  unsigned int v305; 
  _QWORD *v306; 
  unsigned __int64 v307; 
  unsigned __int128 v308; 
  unsigned __int64 v309; 
  unsigned __int128 v310; 
  unsigned __int64 v311; 
  _QWORD *v312; 
  __int64 v313; 
  __int64 v314; 
  unsigned __int64 v315; 
  unsigned __int64 v316; 
  unsigned __int64 v317; 
  int v318; 
  int v319; 
  int v320; 
  int *v321; 
  unsigned __int64 v322; 
  unsigned __int128 v323; 
  int v324; 
  int v325; 
  int v326; 
  int v327; 
  int v328; 
  char *v329; 
  int i11; 
  unsigned int v331; 
  _QWORD *v332; 
  int v333; 
  __int64 v334; 
  char v335; 
  __int64 v336; 
  __int64 v337; 
  __int64(__fastcall *v338)(_QWORD); 
  __int64 v339; 
  char *v340; 
  int v341; 
  __int64 v342; 
  _QWORD *v343; 
  int v344; 
  __int64 v345; 
  char v346; 
  __int64 v347; 
  __int64 v348; 
  __int64(__fastcall *v349)(unsigned __int64); 
  _BYTE *v350; 
  __int64 *v351; 
  __int64 v352; 
  int *v353; 
  __int64 v354; 
  __int64 v355; 
  __int64 v356; 
  __int64(__fastcall *v357)(__int64, char *); 
  unsigned int *v358; 
  char *v359; 
  int v360; 
  signed __int64 v361; 
  int v362; 
  int v363; 
  int *v364; 
  __int64 v365; 
  __int64 v366; 
  int v367; 
  unsigned int v368; 
  __int64 v369; 
  int *v370; 
  __int64 v371; 
  int v372; 
  int v373; 
  int v374; 
  int v375; 
  __int64 v376; 
  int v377; 
  unsigned __int64 v378; 
  __int64 v379; 
  unsigned int v380; 
  __int64 v381; 
  int v382; 
  __int64(__fastcall *v383)(char *, __int64, _QWORD, unsigned int *); 
  __int64 v384; 
  __int64(__fastcall *v385)(char *, __int64, __int64, unsigned int *); 
  __int64 v386; 
  __int64 v387; 
  __int64(__fastcall *v388)(char *, __int64, __int64, unsigned int *); 
  __int64(__fastcall *v389)(char *); 
  __int64 v390; 
  __int64 v391; 
  int v392; 
  int v393; 
  unsigned int v394; 
  __int64 v395; 
  int v396; 
  unsigned int v397; 
  __int64 v398; 
  _QWORD *v399; 
  int v400; 
  unsigned __int64 v401; 
  int v402; 
  int v403; 
  unsigned __int64 v404; 
  __int64 *v405; 
  unsigned int *v406; 
  __int64 v407; 
  int v408; 
  _QWORD *v409; 
  __int64 v410; 
  _QWORD *v411; 
  _QWORD *v412; 
  char *v413; 
  int v414; 
  __int64 v415; 
  unsigned __int64 v416; 
  unsigned int v417; 
  __int64 v418; 
  __int64 v419; 
  __int64 v420; 
  __int64 v421; 
  unsigned int v422; 
  unsigned __int64 v423; 
  unsigned __int64 i13; 
  _DWORD *v425; 
  int v426; 
  unsigned int v427; 
  _QWORD *v428; 
  int *v429; 
  int v430; 
  _QWORD *v431; 
  __int64 v432; 
  _QWORD *v433; 
  char *v434; 
  int v435; 
  __int64 v436; 
  unsigned __int64 v437; 
  __int64 v438; 
  unsigned int v439; 
  __int64 v440; 
  __int64 v441; 
  unsigned __int128 v442; 
  unsigned __int64 v443; 
  unsigned __int64 v444; 
  __int64 v445; 
  unsigned __int64 i14; 
  _DWORD *v447; 
  __int64 v448; 
  unsigned int v449; 
  __int64 v450; 
  int v451; 
  unsigned int v452; 
  __int64 v453; 
  int v454; 
  unsigned __int64 v455; 
  int v456; 
  int v457; 
  __int64 v458; 
  _QWORD *v459; 
  int v460; 
  __int64 v461; 
  unsigned __int64 v462; 
  int v463; 
  __int64 v464; 
  char *v465; 
  unsigned int v466; 
  __int64 v467; 
  __int64 v468; 
  __int64 v469; 
  unsigned __int64 v470; 
  unsigned int v471; 
  unsigned __int64 v472; 
  __int64 v473; 
  unsigned __int64 i15; 
  __int64 v475; 
  _DWORD *v476; 
  char *v477; 
  __int64 v478; 
  __int64 v479; 
  char *v480; 
  char *v481; 
  char *v482; 
  PVOID v483; 
  char *v484; 
  unsigned __int16 v485; 
  unsigned int v486; 
  unsigned int v487; 
  unsigned int *v488; 
  __int64 v489; 
  _DWORD *v490; 
  __int64 v491; 
  unsigned int v492; 
  __int64 v493; 
  unsigned int v494; 
  unsigned int v495; 
  __int64 v496; 
  unsigned int v497; 
  unsigned int v498; 
  unsigned int *v499; 
  unsigned int *v500; 
  PVOID v501; 
  unsigned int *v502; 
  unsigned int v503; 
  int v504; 
  __int64 v505; 
  int v506; 
  __int64 v507; 
  unsigned int v508; 
  __int64 v509; 
  int v510; 
  unsigned int v511; 
  __int64 v512; 
  int v513; 
  unsigned __int64 v514; 
  int v515; 
  int v516; 
  __int64 v517; 
  int v518; 
  _QWORD *v519; 
  __int64 v520; 
  signed __int64 v521; 
  unsigned __int64 v522; 
  unsigned __int64 i16; 
  unsigned int v524; 
  __int64 v525; 
  unsigned int *v526; 
  unsigned __int64 v527; 
  __int64 v528; 
  __int64 v529; 
  _DWORD *v530; 
  __int64 v531; 
  unsigned __int8 *v532; 
  int v533; 
  int v534; 
  __int16 v535; 
  int v536; 
  unsigned __int8 *v537; 
  unsigned __int8 *v538; 
  __int64 v539; 
  __int64 v540; 
  __int64 *v541; 
  unsigned int v542; 
  __int64 *v543; 
  __int64 v544; 
  __int64 v545; 
  __int64 v546; 
  __int64 v547; 
  unsigned __int8 *v548; 
  int v549; 
  unsigned __int8 *v550; 
  __int64 v551; 
  __int64 v552; 
  unsigned __int8 *v553; 
  int v554; 
  unsigned __int8 *v555; 
  __int64 v556; 
  __int64 v557; 
  int v558; 
  char *v559; 
  unsigned int v560; 
  unsigned int v561; 
  unsigned __int64 v562; 
  unsigned int v563; 
  unsigned int v564; 
  unsigned int v565; 
  unsigned int v566; 
  __int64 *v567; 
  __int64 v568; 
  unsigned int v569; 
  unsigned __int64 v570; 
  char *v571; 
  int *v572; 
  __int64 v573; 
  _QWORD *v574; 
  int v575; 
  unsigned __int64 v576; 
  char *v577; 
  unsigned int v578; 
  unsigned __int64 v579; 
  __int64 v580; 
  __int64 v581; 
  unsigned __int128 v582; 
  unsigned int v583; 
  unsigned __int64 v584; 
  __int64 v585; 
  unsigned __int64 i17; 
  bool v587; 
  int v588; 
  unsigned int *v589; 
  char v590; 
  __int64 v591; 
  __int64 v592; 
  __int64 v593; 
  PVOID v594; 
  __int64 *v595; 
  unsigned int v596; 
  char *v597; 
  unsigned int v598; 
  int *v599; 
  char *v600; 
  _QWORD *v601; 
  int v602; 
  __int64 v603; 
  char *i18; 
  unsigned __int64 v605; 
  unsigned int v606; 
  __int64 v607; 
  __int64 v608; 
  __int64 v609; 
  signed __int64 v610; 
  unsigned int v611; 
  unsigned __int64 v612; 
  __int64 v613; 
  unsigned __int64 i19; 
  char *v615; 
  unsigned int v616; 
  unsigned __int64 v617; 
  PVOID v618; 
  int *v619; 
  __int64 *v620; 
  __int64 v621; 
  unsigned int v622; 
  unsigned __int64 v623; 
  unsigned int v624; 
  unsigned __int64 v625; 
  _QWORD *v626; 
  char *v627; 
  int v628; 
  __int64 v629; 
  unsigned __int64 v630; 
  unsigned int v631; 
  __int64 v632; 
  __int64 v633; 
  __int64 v634; 
  unsigned __int64 v635; 
  unsigned int v636; 
  unsigned __int64 v637; 
  __int64 v638; 
  unsigned __int64 i20; 
  __int64 v640; 
  char *v641; 
  _BYTE *v642; 
  char *v643; 
  char *v644; 
  __int64 v645; 
  __int64 v646; 
  __int64 v647; 
  __int64 v648; 
  __int64 v649; 
  _QWORD *v650; 
  int v651; 
  __int64 v652; 
  char v653; 
  __int64 v654; 
  __int64 v655; 
  char *v656; 
  __int64 i12; 
  _QWORD *v658; 
  int v659; 
  __int64 v660; 
  char v661; 
  __int64 v662; 
  __int64 v663; 
  char *v664; 
  _QWORD *v665; 
  int v666; 
  __int64 v667; 
  char v668; 
  __int64 v669; 
  __int64 v670; 
  __int64 v671; 
  int v672; 
  __int64 v673; 
  __int64 v674; 
  unsigned __int64 v675; 
  __int64 v676; 
  unsigned __int64 v677; 
  __int64 v678; 
  __int64 v679; 
  unsigned __int64 v680; 
  __int64 v681; 
  unsigned __int64 v682; 
  unsigned __int64 v683; 
  unsigned int v684; 
  _QWORD *v685; 
  __int64 v686; 
  _QWORD *v687; 
  char *v688; 
  int v689; 
  unsigned __int64 v690; 
  unsigned int v691; 
  __int64 v692; 
  __int64 v693; 
  __int64 v694; 
  unsigned __int128 v695; 
  unsigned int v696; 
  unsigned __int64 v697; 
  __int64 v698; 
  unsigned __int64 i6; 
  unsigned int v700; 
  __int64 v701; 
  __int64 v702; 
  __int64 v703; 
  unsigned __int8 v704; 
  unsigned __int64 v705; 
  __int64 v706; 
  unsigned __int64 v707; 
  int v708; 
  unsigned int v709; 
  unsigned int v710; 
  __int64 *v711; 
  char *v712; 
  __int64 v713; 
  __int64 v714; 
  __int64 v715; 
  __int64 v716; 
  int v717; 
  __int64 v718; 
  __int64 v719; 
  __int64 v720; 
  __int64 v721; 
  unsigned __int64 v722; 
  __int64 v723; 
  unsigned __int64 v724; 
  unsigned __int64 v725; 
  int v726; 
  __int64 v727; 
  __int16 v728; 
  __int64 v729; 
  int(__fastcall *v730)(__int16 *, _QWORD, _QWORD, _QWORD, __int64, _DWORD, _QWORD, __int64 *); 
  __int64(*v731)(void); 
  __int64 v732; 
  __int64(*v733)(void); 
  __int64 v734; 
  unsigned int v735; 
  unsigned __int8 v736; 
  __int64 v737; 
  unsigned __int64 v738; 
  _QWORD *v739; 
  __int64 v740; 
  _QWORD *v741; 
  char *v742; 
  int v743; 
  __int64 v744; 
  unsigned __int64 v745; 
  unsigned int v746; 
  __int64 v747; 
  __int64 v748; 
  unsigned __int128 v749; 
  unsigned int v750; 
  unsigned __int64 v751; 
  __int64 v752; 
  unsigned __int64 i2; 
  unsigned int v754; 
  char *v755; 
  unsigned __int8 v756; 
  unsigned int v757; 
  unsigned __int64 v758; 
  _QWORD *v759; 
  int v760; 
  char *v761; 
  char *v762; 
  unsigned int v763; 
  unsigned __int64 v764; 
  __int64 v765; 
  __int64 v766; 
  __int64 v767; 
  unsigned __int64 v768; 
  unsigned int v769; 
  unsigned __int64 v770; 
  __int64 v771; 
  unsigned __int64 i3; 
  __int64 v773; 
  _QWORD *v774; 
  int v775; 
  __int64 v776; 
  char v777; 
  __int64 v778; 
  __int64 v779; 
  _QWORD *v780; 
  _QWORD *v781; 
  int v782; 
  char *v783; 
  __int64 v784; 
  unsigned __int64 v785; 
  unsigned int v786; 
  __int64 v787; 
  __int64 v788; 
  unsigned __int64 v789; 
  unsigned int v790; 
  unsigned __int64 v791; 
  __int64 v792; 
  unsigned __int64 i4; 
  unsigned int v794; 
  __int64 v795; 
  __int64 v796; 
  __int64 v797; 
  unsigned __int8 v798; 
  unsigned __int64 v799; 
  unsigned __int64 v800; 
  unsigned __int64 v801; 
  int v802; 
  unsigned int v803; 
  _QWORD *v804; 
  int v805; 
  char *v806; 
  __int64 v807; 
  unsigned __int64 v808; 
  unsigned __int64 v809; 
  unsigned int v810; 
  __int64 v811; 
  __int64 v812; 
  __int64 v813; 
  unsigned __int64 v814; 
  unsigned int v815; 
  unsigned __int64 v816; 
  __int64 v817; 
  unsigned __int64 i5; 
  int v819; 
  __int64 v820; 
  unsigned __int64 v821; 
  unsigned int v822; 
  char *v823; 
  __int64 v824; 
  __int64 v825; 
  char *v826; 
  int v827; 
  __int64 j; 
  unsigned __int64 v829; 
  unsigned int v830; 
  __int64 v831; 
  __int64 v832; 
  unsigned __int128 v833; 
  char v834; 
  __int64 v835; 
  unsigned __int64 v836; 
  __int64 v837; 
  unsigned __int64 k; 
  unsigned int v839; 
  __int64 v840; 
  __int64 v841; 
  unsigned __int8 v842; 
  unsigned __int64 v843; 
  unsigned __int64 v844; 
  unsigned __int64 v845; 
  int v846; 
  int v847; 
  __int64 v848; 
  __int64 v849; 
  unsigned __int8 v850; 
  __int64 v851; 
  unsigned int *v852; 
  unsigned int *v853; 
  char v854; 
  unsigned __int64 v855; 
  __int64 v856; 
  __int64 *v857; 
  unsigned int *v858; 
  __int64 v859; 
  __int64 v860; 
  __int64 v861; 
  __int64 v862; 
  unsigned __int64 v863; 
  unsigned int *v864; 
  unsigned int *v865; 
  unsigned __int64 v866; 
  unsigned __int64 v867; 
  unsigned __int64 v868; 
  unsigned int v869; 
  unsigned int v870; 
  int v871; 
  unsigned __int64 v872; 
  unsigned __int64 v873; 
  _QWORD *v874; 
  __int64 v875; 
  _QWORD *v876; 
  char *v877; 
  int v878; 
  __int64 v879; 
  unsigned __int64 v880; 
  unsigned int v881; 
  __int64 v882; 
  __int64 v883; 
  __int64 v884; 
  unsigned __int64 v885; 
  unsigned int v886; 
  unsigned __int64 v887; 
  __int64 v888; 
  unsigned __int64 m; 
  unsigned int v890; 
  unsigned int v891; 
  __int64 v892; 
  __int64 v893; 
  unsigned __int8 v894; 
  unsigned __int64 v895; 
  __int64 v896; 
  unsigned __int64 v897; 
  unsigned __int64 v898; 
  int v899; 
  int v900; 
  __int64 v901; 
  __int64 v902; 
  __int64 v903; 
  __int64 v904; 
  int v905; 
  __int64 v906; 
  __int64 v907; 
  __int64 v908; 
  __int64 v909; 
  int v910; 
  __int64 v911; 
  int v912; 
  __int64 v913; 
  __int64 v914; 
  __int64 v915; 
  _QWORD *v916; 
  __int64 v917; 
  _QWORD *v918; 
  char *v919; 
  int v920; 
  __int64 v921; 
  unsigned __int64 v922; 
  unsigned int v923; 
  __int64 v924; 
  __int64 v925; 
  unsigned __int64 v926; 
  unsigned int v927; 
  unsigned __int64 v928; 
  __int64 v929; 
  unsigned __int64 n; 
  unsigned int v931; 
  __int64 v932; 
  __int64 v933; 
  __int64 v934; 
  unsigned __int8 v935; 
  unsigned __int64 v936; 
  unsigned __int64 v937; 
  int v938; 
  int v939; 
  __int64 v940; 
  __int64(__fastcall *v941)(_QWORD); 
  unsigned int v942; 
  __int64 v943; 
  unsigned __int8 v944; 
  char v945; 
  char v946; 
  char *v947; 
  __int64 v948; 
  unsigned __int64 v949; 
  char *v950; 
  unsigned __int64 *v951; 
  unsigned __int64 v952; 
  unsigned __int64 *v953; 
  unsigned __int8 v954; 
  __int64 v955; 
  __int64 v956; 
  unsigned __int64 v957; 
  unsigned __int64 v958; 
  _QWORD *v959; 
  int v960; 
  __int64 v961; 
  char v962; 
  unsigned __int8 v963; 
  char v964; 
  char v965; 
  char *v966; 
  __int64 v967; 
  unsigned __int64 v968; 
  char *v969; 
  unsigned __int64 v970; 
  unsigned __int64 *v971; 
  unsigned __int8 v972; 
  __int64 v973; 
  __int64 v974; 
  unsigned __int64 v975; 
  unsigned __int64 v976; 
  _QWORD *v977; 
  int v978; 
  __int64 v979; 
  char v980; 
  __int64(__fastcall *v981)(__int64); 
  __int64 v982; 
  __int64 v983; 
  unsigned __int8 v984; 
  unsigned __int8 v985; 
  int *v986; 
  char v987; 
  unsigned __int64 v988; 
  char v989; 
  int *v990; 
  char v991; 
  unsigned __int64 *v992; 
  unsigned __int64 v993; 
  unsigned __int64 *v994; 
  __int64 v995; 
  char *v996; 
  __int64 v997; 
  unsigned __int64 v998; 
  _QWORD *v999; 
  int v1000; 
  __int64 v1001; 
  char v1002; 
  unsigned int v1003; 
  int v1004; 
  __int64 v1005; 
  unsigned __int64 v1006; 
  __int64 v1007; 
  _DWORD *v1008; 
  unsigned __int64 v1009; 
  unsigned int v1010; 
  char *v1011; 
  unsigned int v1012; 
  __int64 v1013; 
  __int64 v1014; 
  _QWORD *v1015; 
  int v1016; 
  char *v1017; 
  unsigned __int64 v1018; 
  __int64 v1019; 
  unsigned __int64 v1020; 
  unsigned int v1021; 
  __int64 v1022; 
  __int64 v1023; 
  __int64 v1024; 
  unsigned __int64 v1025; 
  unsigned int v1026; 
  unsigned __int64 v1027; 
  __int64 v1028; 
  unsigned __int64 ii; 
  char v1030; 
  unsigned int v1031; 
  unsigned __int8 v1032; 
  unsigned __int64 v1033; 
  __int64 v1034; 
  unsigned __int64 v1035; 
  unsigned __int64 v1036; 
  int v1037; 
  char *v1038; 
  int *v1039; 
  __int64 v1040; 
  __int64 v1041; 
  _QWORD *v1042; 
  int v1043; 
  char *v1044; 
  unsigned __int64 v1045; 
  __int64 v1046; 
  unsigned __int64 v1047; 
  unsigned int v1048; 
  __int64 v1049; 
  __int64 v1050; 
  unsigned __int128 v1051; 
  unsigned int v1052; 
  unsigned __int64 v1053; 
  __int64 v1054; 
  unsigned __int64 jj; 
  unsigned int v1056; 
  unsigned int v1057; 
  __int64 v1058; 
  unsigned __int8 v1059; 
  unsigned __int64 v1060; 
  __int64 v1061; 
  unsigned __int64 v1062; 
  int v1063; 
  __int64 v1064; 
  __int64 v1065; 
  _QWORD *v1066; 
  __int64 v1067; 
  _QWORD *v1068; 
  char *v1069; 
  int v1070; 
  unsigned __int64 v1071; 
  unsigned int v1072; 
  __int64 v1073; 
  __int64 v1074; 
  __int64 v1075; 
  unsigned __int64 v1076; 
  __int64 v1077; 
  unsigned __int64 v1078; 
  __int64 v1079; 
  unsigned __int64 i; 
  unsigned int v1081; 
  __int64 v1082; 
  __int64 v1083; 
  unsigned __int8 v1084; 
  unsigned __int64 v1085; 
  unsigned __int64 v1086; 
  int v1087; 
  int v1088; 
  unsigned __int64 **v1089; 
  unsigned int v1090; 
  __int64 v1091; 
  char *v1092; 
  __int64 v1093; 
  _QWORD *v1094; 
  int v1095; 
  __int64 v1096; 
  char v1097; 
  __int64 v1098; 
  __int64 v1099; 
  int v1100; 
  __int64 v1101; 
  volatile signed __int32 *v1102; 
  _QWORD *v1103; 
  __int64 v1104; 
  _QWORD *v1105; 
  char *v1106; 
  int v1107; 
  __int64 v1108; 
  unsigned __int64 v1109; 
  unsigned int v1110; 
  __int64 v1111; 
  __int64 v1112; 
  unsigned __int128 v1113; 
  unsigned int v1114; 
  unsigned __int64 v1115; 
  __int64 v1116; 
  unsigned __int64 kk; 
  unsigned int v1118; 
  __int64 v1119; 
  __int64 v1120; 
  __int64 v1121; 
  unsigned __int8 v1122; 
  unsigned __int64 v1123; 
  unsigned __int64 v1124; 
  unsigned __int64 v1125; 
  int v1126; 
  unsigned __int64 v1127; 
  int v1128; 
  __int64 v1129; 
  unsigned int v1130; 
  int v1131; 
  unsigned __int64 v1132; 
  unsigned __int64 v1133; 
  _QWORD *v1134; 
  __int64 v1135; 
  _QWORD *v1136; 
  char *v1137; 
  int v1138; 
  __int64 v1139; 
  unsigned __int64 v1140; 
  unsigned int v1141; 
  __int64 v1142; 
  __int64 v1143; 
  unsigned __int128 v1144; 
  unsigned int v1145; 
  unsigned __int64 v1146; 
  __int64 v1147; 
  unsigned __int64 mm; 
  __int64 v1149; 
  __int64 v1150; 
  unsigned __int8 v1151; 
  unsigned __int64 v1152; 
  __int64 v1153; 
  unsigned __int64 v1154; 
  int v1155; 
  __int64 v1156; 
  __int64 v1157; 
  int v1158; 
  __int64 v1159; 
  unsigned int v1160; 
  _QWORD *v1161; 
  int v1162; 
  __int64 v1163; 
  char v1164; 
  __int64 v1165; 
  int v1166; 
  unsigned int v1167; 
  char v1168; 
  volatile signed __int8 **v1169; 
  volatile signed __int8 *v1170; 
  unsigned __int8 v1171; 
  int v1172; 
  unsigned int v1173; 
  unsigned int v1174; 
  int v1175; 
  unsigned __int64 v1176; 
  unsigned __int64 v1177; 
  _QWORD *v1178; 
  __int64 v1179; 
  _QWORD *v1180; 
  char *v1181; 
  int v1182; 
  unsigned __int64 v1183; 
  unsigned int v1184; 
  __int64 v1185; 
  __int64 v1186; 
  __int64 v1187; 
  unsigned __int64 v1188; 
  unsigned int v1189; 
  unsigned __int64 v1190; 
  __int64 v1191; 
  unsigned __int64 nn; 
  unsigned int v1193; 
  unsigned int v1194; 
  __int64 v1195; 
  __int64 v1196; 
  unsigned __int8 v1197; 
  unsigned __int64 v1198; 
  __int64 v1199; 
  unsigned __int64 v1200; 
  int v1201; 
  __int64 v1202; 
  __int64 v1203; 
  unsigned int v1204; 
  int v1205; 
  unsigned __int64 v1206; 
  __int64 v1207; 
  _QWORD *v1208; 
  __int64 v1209; 
  _QWORD *v1210; 
  char *v1211; 
  int v1212; 
  unsigned __int64 v1213; 
  unsigned int v1214; 
  __int64 v1215; 
  __int64 v1216; 
  unsigned __int64 v1217; 
  unsigned int v1218; 
  unsigned __int64 v1219; 
  __int64 v1220; 
  unsigned __int64 i1; 
  unsigned int v1222; 
  __int64 v1223; 
  __int64 v1224; 
  __int64 v1225; 
  unsigned __int8 v1226; 
  unsigned __int64 v1227; 
  unsigned __int64 v1228; 
  int v1229; 
  unsigned int v1230; 
  unsigned int v1231; 
  unsigned int v1232; 
  int v1233; 
  __int16 v1234; 
  char *v1235; 
  int v1236; 
  unsigned __int8 *v1237; 
  __int64 v1238; 
  __int64 v1239; 
  unsigned int *v1240; 
  __int64 v1241; 
  __int64 *v1242; 
  unsigned int v1243; 
  __int64 *v1244; 
  __int64 v1245; 
  __int64 v1246; 
  __int64 v1247; 
  __int64 v1248; 
  unsigned __int8 *v1249; 
  int v1250; 
  unsigned __int8 *v1251; 
  __int64 v1252; 
  __int64 v1253; 
  unsigned __int8 *v1254; 
  int v1255; 
  unsigned __int8 *v1256; 
  __int64 v1257; 
  __int64 v1258; 
  int v1259; 
  int v1260; 
  __int64 v1261; 
  int v1262; 
  int *v1263; 
  signed int v1264; 
  signed __int64 v1265; 
  unsigned __int8 v1266; 
  unsigned int v1267; 
  int v1268; 
  __int64 v1269; 
  unsigned __int64 v1270; 
  __int64 v1271; 
  unsigned __int64 v1272; 
  __int64 v1273; 
  __int64 v1274; 
  unsigned int *v1275; 
  unsigned int *v1276; 
  char v1277; 
  unsigned __int64 v1278; 
  __int64 v1279; 
  __int64 *v1280; 
  unsigned int *v1281; 
  __int64 v1282; 
  __int64 v1283; 
  __int64 v1284; 
  int v1285; 
  unsigned __int64 v1286; 
  unsigned __int64 v1287; 
  _QWORD *v1288; 
  __int64 v1289; 
  _QWORD *v1290; 
  char *v1291; 
  int v1292; 
  __int64 v1293; 
  unsigned __int64 v1294; 
  unsigned int v1295; 
  __int64 v1296; 
  __int64 v1297; 
  __int64 v1298; 
  unsigned __int64 v1299; 
  unsigned int v1300; 
  unsigned __int64 v1301; 
  __int64 v1302; 
  unsigned __int64 i21; 
  unsigned int v1304; 
  unsigned int v1305; 
  __int64 v1306; 
  __int64 v1307; 
  unsigned __int8 v1308; 
  unsigned __int64 v1309; 
  __int64 v1310; 
  unsigned __int64 v1311; 
  int v1312; 
  __int64 v1313; 
  unsigned __int64 v1314; 
  unsigned int *v1315; 
  int *v1316; 
  unsigned __int64 v1317; 
  unsigned __int64 v1318; 
  _QWORD *v1319; 
  int v1320; 
  char *v1321; 
  __int64 v1322; 
  unsigned __int64 v1323; 
  unsigned __int64 v1324; 
  unsigned int v1325; 
  __int64 v1326; 
  __int64 v1327; 
  __int64 v1328; 
  unsigned __int64 v1329; 
  unsigned int v1330; 
  unsigned __int64 v1331; 
  __int64 v1332; 
  unsigned __int64 i23; 
  int v1334; 
  __int64 v1335; 
  __int64 v1336; 
  __int64 v1337; 
  _QWORD *v1338; 
  __int64 v1339; 
  _QWORD *v1340; 
  char *v1341; 
  int v1342; 
  __int64 v1343; 
  unsigned __int64 v1344; 
  unsigned int v1345; 
  __int64 v1346; 
  __int64 v1347; 
  __int64 v1348; 
  unsigned __int64 v1349; 
  unsigned int v1350; 
  unsigned __int64 v1351; 
  __int64 v1352; 
  unsigned __int64 i22; 
  unsigned int v1354; 
  __int64 v1355; 
  __int64 v1356; 
  __int64 v1357; 
  unsigned __int8 v1358; 
  unsigned __int64 v1359; 
  unsigned __int64 v1360; 
  int v1361; 
  unsigned int v1362; 
  _BYTE *v1363; 
  char *v1364; 
  char v1365; 
  volatile signed __int32 *v1366; 
  struct _KPRCB *v1367; 
  __int64 v1368; 
  int v1369; 
  struct _KPRCB *v1370; 
  unsigned __int64 v1371; 
  _BOOL4 v1372; 
  int *v1373; 
  unsigned int v1374; 
  __int64 v1375; 
  unsigned __int64 v1376; 
  __int64 v1377; 
  unsigned __int64 v1378; 
  unsigned __int64 v1379; 
  int v1380; 
  bool v1381; 
  __int64 v1382; 
  __int64 v1383; 
  __int64 v1384; 
  unsigned int *v1385; 
  unsigned int *v1386; 
  char v1387; 
  unsigned __int64 v1388; 
  __int64 v1389; 
  __int64 *v1390; 
  unsigned int *v1391; 
  __int64 v1392; 
  __int64 v1393; 
  __int64 v1394; 
  __int64 v1395; 
  _QWORD *v1396; 
  int v1397; 
  _QWORD *v1398; 
  char *v1399; 
  __int64 v1400; 
  unsigned int v1401; 
  __int64 v1402; 
  __int64 v1403; 
  unsigned __int128 v1404; 
  unsigned int v1405; 
  unsigned __int64 v1406; 
  __int64 v1407; 
  __int64 v1408; 
  int v1409; 
  __int64 v1410; 
  int v1411; 
  int v1412; 
  __int64 v1413; 
  unsigned int v1414; 
  unsigned __int64 v1415; 
  unsigned int v1416; 
  unsigned __int64 v1417; 
  __int64 v1418; 
  __int64 v1419; 
  int v1420; 
  _QWORD *v1421; 
  struct _KPRCB *CurrentPrcb; 
  __int64 v1423; 
  unsigned __int64 v1424; 
  __int64 v1425; 
  unsigned __int64 v1426; 
  __int64 v1427; 
  __int64 v1428; 
  __int64 v1429; 
  __int64 v1430; 
  int v1431; 
  _QWORD *v1432; 
  __int64 v1433; 
  __int64 v1434; 
  unsigned __int16 Ldtr; 
  INT16 Tr; 
  unsigned __int64 v1437; 
  __int64 v1438; 
  unsigned __int16 v1439; 
  __int64 v1440; 
  _QWORD *v1441; 
  char *v1442; 
  unsigned __int64 v1443; 
  unsigned int v1444; 
  __int64 v1445; 
  __int64 v1446; 
  __int64 v1447; 
  unsigned __int64 v1448; 
  unsigned int v1449; 
  __int64 v1450; 
  unsigned __int64 i8; 
  unsigned int v1452; 
  _QWORD *v1453; 
  int v1454; 
  __int64 v1455; 
  char v1456; 
  __int64 v1457; 
  int v1458; 
  __int64 v1459; 
  __int64 v1460; 
  void(__fastcall *v1461)(char *, __int64); 
  unsigned int v1462; 
  unsigned __int64 v1463; 
  __int64 v1464; 
  __int64 v1465; 
  unsigned __int64 v1466; 
  __int64 v1467; 
  __int64 v1468; 
  unsigned __int8 v1469; 
  __int16 v1470; 
  int v1471; 
  __int64 v1472; 
  unsigned __int64 v1473; 
  __int64 v1474; 
  __int64 v1475; 
  __int64 v1476; 
  __int64 v1477; 
  __int64 v1478; 
  __int64 v1479; 
  unsigned int *v1480; 
  __int64 v1481; 
  unsigned __int64 v1482; 
  unsigned __int64 v1483; 
  struct _KPRCB *v1484; 
  _QWORD *v1485; 
  int v1486; 
  char *v1487; 
  int v1488; 
  __int64 v1489; 
  unsigned __int64 v1490; 
  int v1491; 
  __int64 v1492; 
  __int64 v1493; 
  unsigned __int128 v1494; 
  int v1495; 
  int v1496; 
  __int64 v1497; 
  __int64 v1498; 
  unsigned __int64 i9; 
  unsigned int *v1500; 
  __int64 v1501; 
  unsigned int v1502; 
  _QWORD *v1503; 
  int v1504; 
  unsigned __int64 v1505; 
  char *v1506; 
  int v1507; 
  __int64 v1508; 
  __int64 v1509; 
  unsigned __int64 i10; 
  unsigned int v1511; 
  int *v1512; 
  __int64 v1513; 
  unsigned __int64 v1514; 
  __int64 v1515; 
  __int64 v1516; 
  __int64 v1517; 
  __int64 v1518; 
  __int64 v1519; 
  __int64 v1520; 
  int v1521; 
  __int64 v1522; 
  __int64 v1523; 
  int v1524; 
  __int64 v1525; 
  __int64 v1526; 
  __int64 v1527; 
  __int64 v1528; 
  struct _KPRCB *v1529; 
  void **v1530; 
  __int64 v1531; 
  __int64 v1532; 
  __int64 v1533; 
  unsigned __int64 v1534; 
  unsigned __int64 v1535; 
  unsigned __int64 v1536; 
  unsigned int v1537; 
  _QWORD *v1538; 
  unsigned __int64 v1539; 
  unsigned __int64 v1540; 
  __int64 v1541; 
  _QWORD *v1542; 
  char *v1543; 
  int v1544; 
  unsigned __int64 v1545; 
  signed __int64 v1546; 
  unsigned int v1547; 
  unsigned int v1548; 
  UINT8 CurrentIrql; 
  unsigned int v1550; 
  UINT8 v1551; 
  unsigned int v1552; 
  UINT8 v1553; 
  int v1554; 
  int v1555; 
  int v1556; 
  int v1557; 
  int v1558; 
  volatile signed __int32 *v1559; 
  unsigned int v1560; 
  UINT8 v1561; 
  signed __int32 v1562[8]; 
  __int64 v1563; 
  __int64 *v1564; 
  char *v1565; 
  _BYTE *v1566; 
  __int64 v1567; 
  unsigned int v1568; 
  __int64 v1569; 
  __int64 v1570; 
  signed __int64 v1571; 
  unsigned __int64 v1572; 
  unsigned __int8 v1573; 
  unsigned __int8 v1574; 
  char v1575[2]; 
  unsigned int v1576; 
  _BYTE *v1577; 
  char *v1578; 
  unsigned int v1579; 
  unsigned int v1580; 
  unsigned __int64 v1581; 
  PVOID BugCheckParameter2; 
  __int64 v1583; 
  int v1584; 
  int v1585; 
  __int64 v1586; 
  __int64 v1587; 
  unsigned __int64 v1588; 
  _BYTE *v1589; 
  unsigned int v1590; 
  PSLIST_ENTRY v1591; 
  unsigned __int8 v1592; 
  unsigned __int8 v1593; 
  unsigned __int64 v1594; 
  _BYTE *v1595; 
  unsigned int v1596; 
  unsigned __int8 v1597; 
  _DWORD *v1598; 
  unsigned __int64 v1599; 
  __int64 v1600; 
  __int64 v1601; 
  __int64 v1602; 
  __int64 v1603; 
  unsigned int v1604; 
  int v1605; 
  unsigned __int64 v1606; 
  int v1607; 
  __int64 v1608; 
  unsigned int v1609; 
  unsigned int v1610; 
  __int64 v1611; 
  int v1612; 
  __int64 v1613; 
  unsigned __int64 v1614; 
  _DWORD *v1615; 
  int v1616; 
  int v1617; 
  int v1618; 
  int v1619; 
  int v1620; 
  int v1621; 
  int v1622; 
  int v1623; 
  int v1624; 
  int v1625; 
  int v1626; 
  int v1627; 
  int v1628; 
  int v1629; 
  int v1630; 
  unsigned int v1631; 
  int v1632[2]; 
  __int64 v1633; 
  __int64 v1634; 
  int v1635; 
  int v1636; 
  int v1637[6]; 
  __int16 v1638; 
  __int64 v1639; 
  __int64 v1640; 
  __int64 v1641; 
  __int64 v1642; 
  __int64 v1643; 
  __int64 v1644; 
  __int64 v1645; 
  __int64 v1646; 
  __int64 v1647; 
  unsigned __int64 v1648; 
  __int128 v1649; 
  __int128 v1650; 
  __int16 v1651[8]; 
  __int16 v1652[8]; 
  __int16 v1653[8]; 
  __int16 v1654; 
  unsigned __int64 v1655; 
  __int64 v1656; 
  __int64 v1657; 
  unsigned int v1658; 
  __int16 v1659[4]; 
  _BYTE *v1660; 
  __int64 v1661; 
  int v1662; 
  _DWORD *v1663; 
  __int16 v1664[4]; 
  _BYTE *v1665; 
  unsigned int v1666; 
  unsigned __int8 *v1667; 
  __int64 *v1668; 
  unsigned __int8 *v1669; 
  unsigned __int8 *v1670; 
  char *v1671; 
  __int64 v1672; 
  __int64 v1673; 
  __int64 v1674; 
  __int64 v1675; 
  __int64 v1676; 
  char v1677[16]; 
  char v1678[16]; 
  char v1679[16]; 
  __int64 v1680; 
  __int16 v1681; 
  __int16 v1682; 
  unsigned __int64 v1683; 
  int v1684; 
  unsigned int v1685; 
  unsigned __int64 v1686; 
  char v1687[16]; 
  char v1688[8]; 
  char v1689[8]; 
  __int64 v1690; 
  __int64 v1691; 
  __int64 v1692; 
  unsigned int *v1693; 
  __int64 v1694; 
  __int64 v1695; 
  __int64 v1696; 
  char v1697[8]; 
  char v1698[8]; 
  char v1699[8]; 
  __int64 v1700; 
  __int64 v1701; 
  __int64 v1702; 
  __int64 v1703; 
  __int64 v1704; 
  __int64 v1705; 
  __int64 v1706; 
  __int64 v1707; 
  __int64 v1708; 
  __int64 v1709; 
  __int64 v1710; 
  char v1711[8]; 
  __int64 v1712; 
  __int64 v1713; 
  __int64 v1714; 
  __int64 v1715; 
  unsigned __int64 v1716; 
  __int64 v1717; 
  __int64 v1718; 
  __int64 v1719; 
  __int64 v1720; 
  __int64 v1721; 
  __int64 v1722; 
  __int64 v1723; 
  unsigned __int64 v1724; 
  __int64 v1725; 
  __int64 v1726; 
  __int64 v1727; 
  __int64 v1728; 
  __int64 v1729; 
  unsigned __int64 v1730; 
  unsigned __int64 v1731; 
  __int64 v1732; 
  __int64 v1733; 
  __int64 v1734; 
  __int64 v1735; 
  __int64 v1736; 
  __int64 v1737; 
  __int64 v1738; 
  __int64 v1739; 
  char v1740[16]; 
  char v1741[16]; 
  char v1742[16]; 
  __int64 v1743; 
  char v1744[16]; 
  char v1745[16]; 
  char v1746[16]; 
  char v1747[16]; 
  char v1748[16]; 
  char v1749[16]; 
  char v1750[16]; 
  char v1751[16]; 
  char v1752[16]; 
  char v1753[16]; 
  __int64 v1754; 
  char v1755[24]; 
  char v1756[8]; 
  char *v1757; 
  unsigned int v1758; 
  __int64 v1759; 
  __int64 v1760; 
  __int64 v1761; 
  char v1762[16]; 
  char v1763[16]; 
  char v1764[16]; 
  char v1765[8]; 
  unsigned __int64 v1766; 
  char v1767[24]; 
  char v1768[48]; 
  char v1769[8]; 
  unsigned __int64 v1770; 
  char v1771[96]; 
  int v1773; 
  unsigned __int64 v1774; 
  __int64 v1775; 
  _BOOL4 v1776; 
  unsigned __int8 v1777; 
  __int64 v1778; 
  unsigned int v1779; 
  int v1780; 
  int v1781; 
  int v1782; 
  int v1783; 
  unsigned __int16 v1784; 
  int v1785; 
  __int64 v1786; 
  __int64 v1787; 
  __int64 v1788; 
  unsigned __int8 v1789; 
  unsigned __int8 v1790; 
  __int64 v1791; 
  unsigned int v1792; 
  int *v1793; 
  __int64 v1794; 
  unsigned __int64 **v1795; 
  __int64 v1796; 
  _BOOL4 v1797; 
  __int64 v1798; 
  INT16 v1799; 
  __int16 v1800; 
  char v1801; 

  v2 = a2;
  if( !__32 )
    KeBugCheck(0x33u);
  v4 = Src;
  _InterlockedOr(v1562, 0);
  if( !v4 )
    return 3221225635i64;
  if( *(_QWORD *)a1 < 0x40ui64
    || *(_DWORD *)(a1 + 8) != KiGetNtDdiVersion()
    || *(_DWORD *)(a1 + 12)
    || (*(_DWORD *)(a1 + 20) & 0x7FFFFFFE) != 0
    || *(_QWORD *)(a1 + 24)
    || *(_QWORD *)(a1 + 32)
    || *(_QWORD *)(a1 + 40)
    || *(_QWORD *)(v2 + 16)
    || *(_QWORD *)(v2 + 24)
    || *(_QWORD *)(v2 + 32)
    || *(_DWORD *)(v2 + 4) >= v4[515] )
  {
    return 3221225485i64;
  }
  v6 = *(_DWORD *)(a1 + 48);
  v7 = *(_DWORD *)(a1 + 20) & 1;
  v8 = *(_DWORD *)(a1 + 52);
  if( v6 )
  {
    if( v6 <= 0 )
      return 3221225485i64;
    if( v6 > 4 )
    {
      if( v6 == 5 && !v8 )
      {
        if( ObGetCurrentIrql() || KeAreApcsDisabled() )
        {
          v1548 = KeAreAllApcsDisabled();
          CurrentIrql = ObGetCurrentIrql();
          KeBugCheckEx(0xC8u, (PVOID)(((unsigned __int64)CurrentIrql << 16) | 0xFF), (PVOID)v1548, 0i64, 0i64);
        }
        goto LABEL_35;
      }
      return 3221225485i64;
    }
    if( v8 != 16 || !KeVerifyGroupAffinity(*(_GROUP_AFFINITY **)(a1 + 56), 0) )
      return 3221225485i64;
    v9 = *(_DWORD *)(a1 + 20);
    v10 = ObGetCurrentIrql();
    if( v9 >= 0 )
    {
      if( v10 || KeAreApcsDisabled() )
      {
        v1552 = KeAreAllApcsDisabled();
        v1553 = ObGetCurrentIrql();
        KeBugCheckEx(0xC8u, (PVOID)(((unsigned __int64)v1553 << 16) | 0xFF), (PVOID)v1552, 0i64, 0i64);
      }
    }
    else if( v10 > 1u )
    {
      v1550 = KeAreAllApcsDisabled();
      v1551 = ObGetCurrentIrql();
      KeBugCheckEx(0xC8u, (PVOID)(((unsigned __int64)v1551 << 16) | 0xFF), (PVOID)v1550, 0i64, 0i64);
    }
  }
  else
  {
    if( v8 != 16 || (unsigned __int64)(*(_QWORD *)(*(_QWORD *)(a1 + 56) + 8i64) - 1i64) > 0xFFFFFFFE )
      return 3221225485i64;
    if( ObGetCurrentIrql() || KeAreApcsDisabled() )
    {
      v1560 = KeAreAllApcsDisabled();
      v1561 = ObGetCurrentIrql();
      KeBugCheckEx(0xC8u, (PVOID)(((unsigned __int64)v1561 << 16) | 0xFF), (PVOID)v1560, 0i64, 0i64);
    }
  }
LABEL_35:
  v1614 = 2800i64;
  if( !v7 || (v11 = *((_QWORD *)v4 + 338) + 2807i64, v1614 = v11, v11 == 2800) )
  {
    ++dword_140C12F54;
    v1591 = RtlpInterlockedPopEntrySList(&Lookaside);
    v13 = (__int64)v1591;
    if( v1591 )
      goto LABEL_41;
    ++dword_140C12F58;
    PoolWithTag = (PSLIST_ENTRY)((__int64(__fastcall *)(_QWORD, _QWORD, _QWORD))qword_140C12F70)(
                                  (unsigned int)dword_140C12F64,
                                  (unsigned int)dword_140C12F6C,
                                  (unsigned int)dword_140C12F68);
  }
  else
  {
    PoolWithTag = (PSLIST_ENTRY)ExAllocatePoolWithTag(0x200ui64, v11, 1953384779i64);
  }
  v1591 = PoolWithTag;
  v13 = (__int64)PoolWithTag;
LABEL_41:
  if( !v13 )
    return 3221225626i64;
  v14 = v13 + 32;
  v1602 = v13 + 32;
  memmove((VOID *)(v13 + 32), v4, 0xAA0u);
  *(_QWORD *)(v13 + 2712) = v4;
  *(_QWORD *)(v13 + 2720) = v13 + 2752;
  *(_DWORD *)(v13 + 2112) = *(_DWORD *)v2;
  *(_DWORD *)(v13 + 2116) = *(_DWORD *)(v2 + 4);
  *(_DWORD *)(v13 + 2120) = 0;
  *(_DWORD *)(v13 + 2128) = 0;
  *(_DWORD *)(v13 + 2484) |= 0x1000u;
  if( v7 )
    *(_QWORD *)(v13 + 2728) = (v13 + 2807) & 0xFFFFFFFFFFFFFFF8ui64;
  v16 = *(_DWORD *)(a1 + 16);
  v1566 = (_BYTE *)(v13 + 32);
  if( v16 > 0x80000 )
    v16 = 0x80000;
  *(_DWORD *)(v13 + 2124) = v16;
  v1584 = 0;
  v1607 = 0;
  if( !v16 )
    v16 = 1;
  *(_DWORD *)(v13 + 2124) = v16;
  v1646 = a1;
  v17 = v13 + 32;
  v1647 = v2;
  v18 = *(unsigned int *)(v13 + 2448);
  if( (_DWORD)v18 != -1 )
  {
    v19 = (*(__int64(__fastcall **)(__int64, __int64, __int64))(v13 + 664))(v18, v15, 6i64);
    if( v19 || (v19 = (*(__int64(__fastcall **)(_QWORD))(v13 + 672))(0i64)) != 0 )
    {
      v20 = (*(__int64(__fastcall **)(__int64, char *))(v13 + 688))(v19, v1768);
      if( v20 >= 0 )
      {
        *(_QWORD *)(v13 + 2464) = v19;
        v21 = (*(__int64(**)(void))(v13 + 728))();
        v22 = (*(__int64(__fastcall **)(__int64))(v13 + 760))(v21);
        if( v22 )
        {
          (*(void(__fastcall **)(__int64, __int64))(v13 + 776))(v21, v22);
          v23 = 0;
        }
        else
        {
          v23 = 4;
        }
        v20 = 0;
        *(_DWORD *)(v13 + 2484) = v23 | *(_DWORD *)(v13 + 2484) & 0xFFFFFFFB;
        *(_DWORD *)(v13 + 2120) += 0x10000;
      }
      else
      {
        (*(void(__fastcall **)(__int64))(v13 + 680))(v19);
      }
      if( v20 >= 0 )
      {
        v24 = 1i64;
        v1607 = 1;
        goto LABEL_96;
      }
    }
  }
  v25 = *(_DWORD *)(v13 + 2484);
  if( (v25 & 8) != 0 && (v25 & 0x1000) == 0 )
  {
    v26 = __rdtsc();
    v27 = (__ROR8__(v26, 3) ^ v26) * (unsigned __int128)0x7010008004002001ui64;
    v1723 = *((_QWORD *)&v27 + 1);
    if( (((unsigned __int8)v27 ^ BYTE8(v27)) & 3) == 0 )
    {
      v28 = __rdtsc();
      v29 = (__ROR8__(v28, 3) ^ v28) * (unsigned __int128)0x7010008004002001ui64;
      v1726 = *((_QWORD *)&v29 + 1);
      v30 = ((unsigned __int64)v29 ^ *((_QWORD *)&v29 + 1)) % 0xB;
      if( (unsigned int)v30 > 5 )
      {
        v34 = v30 - 6;
        if( v34 )
        {
          v35 = v34 - 1;
          if( v35 )
          {
            v36 = v35 - 1;
            if( v36 )
            {
              if( v36 == 1 )
              {
                v1636 = -1333354875;
                v33 = __ROR4__(-1333354868, 33);
              }
              else
              {
                v37 = __rdtsc();
                v38 = __ROR8__(v37, 3);
                v1727 = ((v38 ^ v37) * (unsigned __int128)0x7010008004002001ui64) >> 64;
                v39 = (67117057 * (v38 ^ v37)) ^ v1727;
                v33 = ((((((v39 % 0x1A + 97) << 8) | ((v39 >> 5)
                                                    - 26
                                                    * ((unsigned int)((1321528399 * (unsigned __int64)(v39 >> 5)) >> 32) >> 3)
                                                    + 65)) << 8) | ((v39 >> 10)
                                                                  - 26
                                                                  * ((unsigned int)((1321528399
                                                                                   * (unsigned __int64)(v39 >> 10)) >> 32) >> 3)
                                                                  + 97)) << 8) | ((v39 >> 15) % 0x1A + 65);
              }
            }
            else
            {
              v1635 = 1684422978;
              v33 = __ROR4__(1684422978, 8);
            }
          }
          else
          {
            v1621 = -2100910376;
            v33 = __ROL4__(-2100910376, 7);
          }
        }
        else
        {
          v1632[1] = 1314342514;
          v33 = __ROR4__(1314342516, 24);
        }
      }
      else if( (_DWORD)v30 == 5 )
      {
        v1620 = 680282605;
        v33 = __ROR4__(680282605, 5);
      }
      else if( (_DWORD)v30 )
      {
        v31 = v30 - 1;
        if( v31 )
        {
          v32 = v31 - 1;
          if( v32 )
          {
            if( v32 == 1 )
            {
              v1617 = -1474152136;
              v33 = __ROR4__(-1474152133, 15);
            }
            else
            {
              v1616 = 1728537748;
              v33 = __ROL4__(1728537748, 4);
            }
          }
          else
          {
            v1629 = -2051698419;
            v33 = __ROR4__(-2051698419, 2);
          }
        }
        else
        {
          v1618 = -1297272415;
          v33 = __ROL4__(-1297272415, 1);
        }
      }
      else
      {
        v1619 = -795291432;
        v33 = __ROR4__(-795291432, 6);
      }
      v40 = (*(__int64(__fastcall **)(__int64, _QWORD, _QWORD))(v13 + 280))(512i64, *(_QWORD *)(v13 + 1928), v33);
      if( v40 )
      {
        v41 = *(unsigned int *)(*(_QWORD *)(v13 + 1800) + *(_QWORD *)(v13 + 1336));
        if( (_DWORD)v41 )
        {
          v42 = __rdtsc();
          v43 = (__ROR8__(v42, 3) ^ v42) * (unsigned __int128)0x7010008004002001ui64;
          v1728 = *((_QWORD *)&v43 + 1);
          v41 = (*((_QWORD *)&v43 + 1) ^ (unsigned __int64)v43) % v41;
        }
        v44 = (*(__int64(__fastcall **)(_QWORD))(v13 + 976))(0i64);
        if( v44 )
        {
          do
          {
            if( !(_DWORD)v41 )
              break;
            LODWORD(v41) = v41 - 1;
            v44 = (*(__int64(__fastcall **)(__int64))(v13 + 976))(v44);
          }
          while( v44 );
          v17 = v13 + 32;
          if( !v44 )
          {
LABEL_94:
            (*(void(__fastcall **)(__int64))(v13 + 288))(v40);
            goto LABEL_95;
          }
          if( (*(int(__fastcall **)(__int64))(v13 + 960))(v44) < 0 )
          {
            (*(void(__fastcall **)(__int64))(v13 + 984))(v44);
            v44 = 0i64;
          }
        }
        if( v44 )
        {
          (*(void(__fastcall **)(__int64, char *))(v13 + 1112))(v44, v1768);
          (*(void(__fastcall **)(__int64, __int64, _QWORD, _QWORD))(v13 + 480))(v44, v40, 0i64, 0i64);
          v64 = __rdtsc();
          v65 = (__ROR8__(v64, 3) ^ v64) * (unsigned __int128)0x7010008004002001ui64;
          v1729 = *((_QWORD *)&v65 + 1);
          v66 = ((unsigned __int64)v65 ^ *((_QWORD *)&v65 + 1))
              % (*(unsigned int(__fastcall **)(__int64))(v13 + 472))(v40);
          _disable();
          v67 = *(_QWORD *)((char *)&KeGetCurrentPrcb()->_MxCsr + *(_QWORD *)(v13 + 1640));
          _enable();
          (*(void(__fastcall **)(__int64, char *))(v13 + 488))(v67, v1687);
          (*(void(__fastcall **)(char *, __int64))(v13 + 456))(v1755, v40);
          while( (*(int(__fastcall **)(unsigned int *, char *))(v13 + 464))(&v1610, v1755) >= 0 )
          {
            if( !(_DWORD)v66 )
            {
              (*(void(__fastcall **)(char *, _QWORD))(v13 + 448))(v1687, v1610);
              break;
            }
            LODWORD(v66) = v66 - 1;
          }
          (*(void(__fastcall **)(char *, char *))(v13 + 496))(v1687, v1753);
          (*(void(__fastcall **)(__int64))(v13 + 288))(v40);
          v24 = 1i64;
          v1584 = 1;
          goto LABEL_96;
        }
        goto LABEL_94;
      }
    }
  }
LABEL_95:
  v24 = 1i64;
  v1584 = 0;
LABEL_96:
  v1603 = 0i64;
  v45 = &v1604;
  v46 = 4;
  LODWORD(v47) = -1;
  do
  {
    *(_BYTE *)v45 = 0;
    v45 = (unsigned int *)((char *)v45 + 1);
    --v46;
  }
  while( v46 );
  v48 = *(_DWORD *)(v13 + 2112);
  if( *(_DWORD *)(v13 + 2120) >= *(_DWORD *)(v13 + 2124) )
    goto LABEL_2510;
  v49 = v1730;
  v50 = 0;
  v51 = v1731;
  v52 = v1666;
  v1599 = v1730;
  v1594 = v1731;
  v1596 = v1666;
  v1590 = v1658;
  while( 1 )
  {
    v53 = *(_DWORD *)(v17 + 2448) & 0x110000;
    v1628 = v48;
    if( v53 != 1114112 )
      __writedr(7u, 0i64);
    if( v48 == *(_DWORD *)(v17 + 2060) )
      break;
    v54 = v17;
    v55 = 0i64;
    if( *(_QWORD *)(v17 + 2680) )
      v54 = *(_QWORD *)(v17 + 2680);
    v56 = (char *)(v54 + *(unsigned int *)(v54 + 2056));
    v1565 = v56;
    if( (_DWORD)v1603 && HIDWORD(v1603) <= v48 )
    {
      v55 = HIDWORD(v1603);
      v56 = (char *)(v54 + v1604);
      v1565 = v56;
    }
    if( (_DWORD)v55 != v48 )
    {
      v57 = v48 - v55;
      v58 = v57;
      v55 = v57 + (unsigned int)v55;
      while( 1 )
      {
        v59 = *(_DWORD *)v56;
        if( *(int *)v56 > 12 )
          break;
        if( v59 == 12 )
          goto LABEL_131;
        v60 = v59 - 1;
        if( !v60 )
          goto LABEL_131;
        v61 = v60 - 6;
        if( v61 )
        {
          v62 = v61 - 1;
          if( !v62 )
          {
            v68 = *((unsigned __int16 *)v56 + 16);
LABEL_137:
            v63 = (v68 + 55) & 0xFFFFFFF8;
            goto LABEL_138;
          }
          if( v62 != 2 )
          {
LABEL_134:
            v63 = 48i64;
            goto LABEL_138;
          }
          v63 = (unsigned int)(16 * (*((_DWORD *)v56 + 7) + 3));
        }
        else
        {
          v63 = (unsigned int)(24 * (*((_DWORD *)v56 + 6) + 2));
        }
LABEL_138:
        v56 += v63;
        if( !--v58 )
        {
          v49 = v1599;
          v51 = v1594;
          v52 = v1596;
          v1565 = v56;
          goto LABEL_140;
        }
      }
      if( v59 == 28 )
      {
        v68 = *((unsigned __int16 *)v56 + 20);
        goto LABEL_137;
      }
      if( v59 == 30 )
      {
        v63 = (((*((_DWORD *)v56 + 9) != 0 ? *((_DWORD *)v56 + 9) - 1 : 0) / 0xCu + 7) & 0xFFFFFFF8)
            + 24 * (*((unsigned __int16 *)v56 + 20) + 2);
      }
      else
      {
        if( v59 <= 32 )
          goto LABEL_134;
        if( v59 <= 34 )
        {
          v63 = 20
              * (unsigned int)(((*((_DWORD *)v56 + 8) & 0xFFF) + (unsigned __int64)*((unsigned int *)v56 + 10) + 4095) >> 12)
              + 48;
        }
        else
        {
          if( v59 != 43 )
            goto LABEL_134;
LABEL_131:
          v63 = 4 * (*((_DWORD *)v56 + 4) / 0xCu) + 48;
        }
      }
      v24 = 1i64;
      goto LABEL_138;
    }
LABEL_140:
    LODWORD(v1603) = 1;
    HIDWORD(v1603) = v55;
    v1604 = (_DWORD)v56 - v54;
    if( !*(_DWORD *)(v17 + 2084) )
    {
      v55 = 0i64;
      v69 = *(int *)v56;
      v70 = *(_DWORD *)(v1646 + 48);
      v71 = *(_QWORD *)(v1646 + 56);
      if( (int)v69 > 21 )
      {
        if( (_DWORD)v69 != 24 )
        {
          if( (int)v69 <= 27 )
            goto LABEL_238;
          if( (int)v69 > 29 )
          {
            if( (unsigned int)v69 <= 0x23 && (v73 = 0x940000000i64, _bittest64(&v73, v69)) )
            {
              LODWORD(v47) = 1;
            }
            else
            {
              LODWORD(v47) = 1;
              if( (unsigned int)(v69 - 43) > 1 )
                goto LABEL_238;
            }
            goto LABEL_175;
          }
        }
        goto LABEL_182;
      }
      if( (_DWORD)v69 == 21 )
      {
        LODWORD(v47) = 1;
      }
      else
      {
        if( (v69 & 0x80000000) != 0i64 )
          goto LABEL_238;
        LODWORD(v47) = 1;
        if( (int)v69 <= 1 )
          goto LABEL_175;
        if( (int)v69 > 3 )
        {
          if( (_DWORD)v69 != 7 )
          {
            if( (_DWORD)v69 != 8 )
            {
              if( (_DWORD)v69 != 9 && (unsigned int)(v69 - 11) > 3 )
                goto LABEL_238;
LABEL_175:
              if( v70 )
                goto LABEL_238;
LABEL_176:
              v74 = *((unsigned int *)v56 + 4);
              if( !(_DWORD)v74 )
                goto LABEL_238;
              v75 = v1632;
              v76 = *((_QWORD *)v56 + 1);
              v55 = (__int64)&v1661;
              v1661 = *(_QWORD *)v71;
              v77 = *(_DWORD *)(v71 + 8);
              v78 = 0;
              v1632[0] = v77;
              while( v76 >= *(_QWORD *)v55 + (unsigned __int64)(unsigned int)*v75 || v76 + v74 <= *(_QWORD *)v55 )
              {
                ++v78;
                v55 += 8i64;
                ++v75;
                if( v78 )
                  goto LABEL_238;
              }
LABEL_183:
              v24 = 1i64;
              ++*(_QWORD *)(v1647 + 8);
              goto LABEL_184;
            }
LABEL_182:
            if( v70 != 5 )
              goto LABEL_238;
            goto LABEL_183;
          }
LABEL_155:
          LODWORD(v55) = *((_DWORD *)v56 + 7);
          v72 = v70 == 1;
LABEL_156:
          if( !v72 )
            goto LABEL_238;
          goto LABEL_165;
        }
        if( !v70 )
          goto LABEL_176;
      }
      if( (_DWORD)v69 == 7 )
        goto LABEL_155;
      if( (_DWORD)v69 == 21 )
      {
        LODWORD(v55) = *((_DWORD *)v56 + 11);
        v72 = v70 == 4;
        goto LABEL_156;
      }
      if( (unsigned int)(v69 - 2) <= 1 )
      {
        LODWORD(v55) = *((_DWORD *)v56 + 10);
        if( (_DWORD)v69 == 3 && v70 != 2 )
          goto LABEL_238;
        if( (_DWORD)v69 == 2 && v70 != 3 )
          goto LABEL_238;
      }
LABEL_165:
      if( !KeCheckProcessorGroupAffinity(*(_QWORD *)(v1646 + 56), (unsigned int)v55) )
        goto LABEL_238;
      goto LABEL_183;
    }
LABEL_184:
    v79 = *(_DWORD *)v56;
    v1773 = *(_DWORD *)v56;
    if( *(int *)v56 > 28 )
    {
      if( v79 <= 37 )
      {
        if( v79 == 37 )
        {
          if( (*(_DWORD *)(v17 + 2452) & 2) != 0
            || !(*(unsigned __int8(**)(void))(v17 + 1064))()
            || *(_DWORD *)(v17 + 2296) )
          {
            goto LABEL_238;
          }
          *(_QWORD *)(v17 + 2304) = v17 - 0x5C5FC0A76E374B18i64;
          *(_QWORD *)(v17 + 2312) = v56 - 0x4C48B4211BBACBEBi64;
          *(_QWORD *)(v17 + 2320) = *(int *)v56;
          *(_QWORD *)(v17 + 2328) = 0i64;
          goto LABEL_459;
        }
        if( v79 == 29 )
        {
          v1066 = (_QWORD *)*((_QWORD *)v56 + 1);
          v1067 = *((unsigned int *)v56 + 4);
          v1068 = v1066;
          *(_DWORD *)(v17 + 2088) += v1067;
          v1069 = (char *)v1066;
          v1070 = *(_DWORD *)(v17 + 2068);
          v47 = *(_QWORD *)(v17 + 2072);
          if( v1066 < (_QWORD *)((char *)v1066 + v1067) )
          {
            do
            {
              _mm_prefetchnta(v1069);
              v1069 += 64;
            }
            while( v1069 < (char *)v1066 + v1067 );
          }
          v1071 = *(_QWORD *)(v17 + 2072);
          v1072 = (unsigned int)v1067 >> 7;
          if( (unsigned int)v1067 >> 7 )
          {
            do
            {
              v1073 = 8i64;
              do
              {
                v1074 = v1071 ^ *v1068;
                v1075 = v1068[1];
                v1068 += 2;
                v1071 = __ROL8__(__ROL8__(v1074, v1070) ^ v1075, v1070);
                --v1073;
              }
              while( v1073 );
              v1076 = __ROL8__(v47 ^ ((char *)v1068 - (char *)v1066), 17) ^ v47 ^ ((char *)v1068 - (char *)v1066);
              v1710 = (v1076 * (unsigned __int128)0x7010008004002001ui64) >> 64;
              v1070 = ((unsigned __int8)(v1710 ^ v1076) ^ (unsigned __int8)v1070) & 0x3F;
              if( !v1070 )
                LOBYTE(v1070) = 1;
              --v1072;
            }
            while( v1072 );
            v17 = (__int64)v1566;
          }
          v1077 = v1067 & 0x7F;
          if( (unsigned int)v1077 >= 8 )
          {
            v1078 = (unsigned __int64)(unsigned int)v1077 >> 3;
            do
            {
              v1071 = __ROL8__(*v1068++ ^ v1071, v1070);
              v1077 = (unsigned int)(v1077 - 8);
              --v1078;
            }
            while( v1078 );
            v17 = (__int64)v1566;
          }
          for( ; (_DWORD)v1077; v1077 = (unsigned int)(v1077 - 1) )
          {
            v1079 = *(unsigned __int8 *)v1068;
            v1068 = (_QWORD *)((char *)v1068 + 1);
            v1071 = __ROL8__(v1079 ^ v1071, v1070);
          }
          for( i = v1071; ; LODWORD(v1071) = i ^ v1071 )
          {
            i >>= 31;
            if( !i )
              break;
          }
          v1081 = v1071 & 0x7FFFFFFF;
          if( v1081 == *((_DWORD *)v56 + 5) )
            goto LABEL_1770;
          if( !*(_DWORD *)v56 && *((_DWORD *)v56 + 6) )
            v50 = 1;
          v1082 = *((unsigned int *)v56 + 4);
          v1083 = *((_QWORD *)v56 + 1);
          if( *((_DWORD *)v56 + 4) )
          {
            v1077 = 64i64;
            if( (*(_DWORD *)(v17 + 2452) & 0x40) != 0 )
            {
              v1084 = KeGetCurrentIrql();
              __writecr8(2ui64);
              v1085 = v1083 & 0xFFFFFFFFFFFFF000ui64;
              v1794 = (v1083 + v1082 - 1) | 0xFFF;
              v1086 = (v1083 & 0xFFFFFFFFFFFFF000ui64) - 1;
              while( 1 )
              {
                v47 = v1084;
                while( 1 )
                {
                  v1087 = (*(__int64(__fastcall **)(unsigned __int64, _QWORD, __int64, _QWORD *))(v17 + 1128))(
                            v1085,
                            0i64,
                            v1077,
                            v1068);
                  if( v1087 != -1073741267 )
                    break;
                  if( v50 )
                    goto LABEL_1788;
                  if( v1084 > 1u )
                    goto LABEL_1768;
                  v47 = v1084;
                  __writecr8(v1084);
                  KeGetCurrentIrql();
                  __writecr8(2ui64);
                }
                if( v1087 < 0 )
                  break;
LABEL_1768:
                v1085 += 4096i64;
                v1086 += 4096i64;
                if( v1086 == v1794 )
                {
                  __writecr8(v47);
                  v56 = v1565;
                  goto LABEL_1770;
                }
              }
LABEL_1788:
              __writecr8(v47);
              v56 = v1565;
            }
          }
          v1100 = *(_DWORD *)(v17 + 2296);
          if( !v1100 )
          {
            *(_QWORD *)(*(_QWORD *)(v17 + 1424) + 24i64) = v1081 ^ (unsigned __int64)*((unsigned int *)v56 + 5);
            v1100 = *(_DWORD *)(v17 + 2296);
          }
          v1101 = *((_QWORD *)v56 + 1);
          if( v1100 )
          {
LABEL_1770:
            v1088 = 1;
          }
          else
          {
            v1088 = 1;
            *(_QWORD *)(v17 + 2304) = v17 - 0x5C5FC0A76E374B18i64;
            *(_QWORD *)(v17 + 2312) = v56 - 0x4C48B4211BBACBEBi64;
            *(_QWORD *)(v17 + 2320) = *(int *)v56;
            *(_QWORD *)(v17 + 2328) = v1101;
            *(_DWORD *)(v17 + 2296) = 1;
            __b8(v17, 0i64);
          }
          v1089 = (unsigned __int64 **)*((_QWORD *)v56 + 1);
          v1090 = *((_DWORD *)v56 + 4) >> 4;
          v1795 = v1089;
          if( v1090 )
          {
            v1091 = v1090;
            v1567 = v1090;
            do
            {
              v1092 = v1565;
              v47 = **v1089;
              v1642 = 0i64;
              v1093 = (*(__int64(__fastcall **)(unsigned __int64, __int64 *, __int64, _QWORD *))(v17 + 784))(
                        v47,
                        &v1642,
                        v1077,
                        v1068);
              if( v1093 )
              {
                do
                {
                  ++v1088;
                  if( !(*(__int64(__fastcall **)(__int64, char *))(v17 + 520))(v1093, v1711) )
                  {
                    if( (*(_DWORD *)(v17 + 2448) & 0x40000000) != 0 )
                    {
                      v1094 = *(_QWORD **)(v17 + 2688);
                      v1095 = 48;
                      v1096 = 6i64;
                      do
                      {
                        v1095 -= 8;
                        *v1094 = *(_QWORD *)v1092;
                        v1092 += 8;
                        ++v1094;
                        --v1096;
                      }
                      while( v1096 );
                      if( v1095 )
                      {
                        do
                        {
                          v1097 = *v1092++;
                          *(_BYTE *)v1094 = v1097;
                          v1094 = (_QWORD *)((char *)v1094 + 1);
                          --v1095;
                        }
                        while( v1095 );
                        v17 = (__int64)v1566;
                      }
                      v1092 = *(char **)(v17 + 2688);
                    }
                    *((_QWORD *)v1092 + 3) = v1093;
                    *((_QWORD *)v1092 + 4) = v47;
                    v1098 = *(_QWORD *)(v17 + 1424);
                    *(_QWORD *)v1098 = v1092;
                    *(_DWORD *)(v1098 + 16) = 48;
                    v1099 = *(_QWORD *)(v17 + 1424);
                    *(_QWORD *)(v1099 + 8) = v1093;
                    *(_DWORD *)(v1099 + 20) = 4096;
                    if( !*(_DWORD *)(v17 + 2296) )
                    {
                      *(_QWORD *)(v17 + 2304) = v17 - 0x5C5FC0A76E374B18i64;
                      *(_QWORD *)(v17 + 2312) = v1092 - 0x4C48B4211BBACBEBi64;
                      *(_QWORD *)(v17 + 2320) = *(int *)v1092;
                      *(_QWORD *)(v17 + 2328) = 6i64;
                      *(_DWORD *)(v17 + 2296) = 1;
                      __b8(v17, 0i64);
                    }
                  }
                  v1093 = (*(__int64(__fastcall **)(unsigned __int64, __int64 *))(v17 + 784))(v47, &v1642);
                }
                while( v1093 );
                v1089 = v1795;
                v1091 = v1567;
              }
              v1088 = 1;
              v1089 += 2;
              --v1091;
              v1795 = v1089;
              v1567 = v1091;
            }
            while( v1091 );
          }
          goto LABEL_237;
        }
        if( v79 != 30 )
        {
          if( v79 != 31 )
          {
            if( v79 == 32 )
            {
              sub_1403EA328(v17, (int *)v56, v55);
              goto LABEL_238;
            }
            if( v79 == 33 )
            {
              sub_1403E93BC(v17, (int *)v56);
              goto LABEL_238;
            }
            if( v79 != 35 )
            {
              if( v79 == 36 )
              {
                v823 = (char *)*((_QWORD *)v56 + 1);
                v824 = *((unsigned int *)v56 + 4);
                v825 = (__int64)v823;
                *(_DWORD *)(v17 + 2088) += v824;
                v826 = v823;
                v827 = *(_DWORD *)(v17 + 2068);
                for( j = *(_QWORD *)(v17 + 2072); v826 < &v823[v824]; v826 += 64 )
                  _mm_prefetchnta(v826);
                v829 = *(_QWORD *)(v17 + 2072);
                v830 = (unsigned int)v824 >> 7;
                if( (unsigned int)v824 >> 7 )
                {
                  do
                  {
                    v831 = 8i64;
                    do
                    {
                      v832 = *(_QWORD *)(v825 + 8) ^ __ROL8__(*(_QWORD *)v825 ^ v829, v827);
                      v825 += 16i64;
                      v829 = __ROL8__(v832, v827);
                      --v831;
                    }
                    while( v831 );
                    v833 = (__ROL8__(j ^ (v825 - (_QWORD)v823), 17) ^ j ^ (unsigned __int64)(v825 - (_QWORD)v823))
                         * (unsigned __int128)0x7010008004002001ui64;
                    v1705 = *((_QWORD *)&v833 + 1);
                    v834 = BYTE8(v833) ^ v833 ^ v827;
                    v24 = 1i64;
                    v827 = v834 & 0x3F;
                    if( !v827 )
                      LOBYTE(v827) = 1;
                    --v830;
                  }
                  while( v830 );
                  v17 = (__int64)v1566;
                }
                v835 = v824 & 0x7F;
                if( (unsigned int)v835 >= 8 )
                {
                  v836 = (unsigned __int64)(unsigned int)v835 >> 3;
                  do
                  {
                    v829 = __ROL8__(*(_QWORD *)v825 ^ v829, v827);
                    v825 += 8i64;
                    v835 = (unsigned int)(v835 - 8);
                    --v836;
                  }
                  while( v836 );
                }
                for( ; (_DWORD)v835; v835 = (unsigned int)(v835 - 1) )
                {
                  v837 = *(unsigned __int8 *)v825++;
                  v829 = __ROL8__(v837 ^ v829, v827);
                }
                for( k = v829; ; LODWORD(v829) = k ^ v829 )
                {
                  k >>= 31;
                  if( !k )
                    break;
                }
                v839 = v829 & 0x7FFFFFFF;
                if( v839 == *((_DWORD *)v56 + 5) )
                  goto LABEL_1370;
                v835 = 0i64;
                if( !*(_DWORD *)v56 && *((_DWORD *)v56 + 6) )
                  v50 = 1;
                v840 = *((unsigned int *)v56 + 4);
                v841 = *((_QWORD *)v56 + 1);
                if( *((_DWORD *)v56 + 4) )
                {
                  v825 = 64i64;
                  if( (*(_DWORD *)(v17 + 2452) & 0x40) != 0 )
                  {
                    v842 = KeGetCurrentIrql();
                    __writecr8(2ui64);
                    v843 = v841 & 0xFFFFFFFFFFFFF000ui64;
                    v1787 = (v841 + v840 - 1) | 0xFFF;
                    v844 = (v841 & 0xFFFFFFFFFFFFF000ui64) - 1;
                    while( 1 )
                    {
                      v845 = v842;
                      while( 1 )
                      {
                        v846 = (*(__int64(__fastcall **)(unsigned __int64, _QWORD))(v17 + 1128))(v843, 0i64);
                        if( v846 != -1073741267 )
                          break;
                        if( v50 )
                          goto LABEL_1365;
                        if( v842 > 1u )
                          goto LABEL_1363;
                        v845 = v842;
                        __writecr8(v842);
                        KeGetCurrentIrql();
                        __writecr8(2ui64);
                      }
                      if( v846 < 0 )
                        break;
LABEL_1363:
                      v843 += 4096i64;
                      v844 += 4096i64;
                      if( v844 == v1787 )
                      {
                        __writecr8(v845);
                        v56 = v1565;
LABEL_1370:
                        v849 = *(_QWORD *)(v17 + 1344);
                        v850 = KeGetCurrentIrql();
                        __writecr8(0xFui64);
                        (*(void(__fastcall **)(__int64, __int64, __int64, __int64))(v17 + 336))(v849, v24, v835, v825);
                        v852 = **(unsigned int ***)(v17 + 1552);
                        v853 = v852 + 4;
                        v854 = *((_BYTE *)v852 + 12);
                        v855 = (unsigned __int64)&v852[6 * *v852 + 4];
                        while( 1 )
                        {
                          v856 = 24i64;
                          v857 = (__int64 *)(v56 + 24);
                          v858 = v853;
                          do
                          {
                            v859 = *(_QWORD *)v858;
                            v858 += 2;
                            v860 = *v857++;
                            if( v859 != v860 )
                              goto LABEL_1378;
                            v856 = (unsigned int)(v856 - 8);
                          }
                          while( (unsigned int)v856 >= 8 );
                          if( (_DWORD)v856 )
                          {
                            while( 1 )
                            {
                              v851 = *(unsigned __int8 *)v858;
                              v858 = (unsigned int *)((char *)v858 + 1);
                              v861 = *(unsigned __int8 *)v857;
                              v857 = (__int64 *)((char *)v857 + 1);
                              if( v851 != v861 )
                                break;
                              v72 = (_DWORD)v856 == 1;
                              v856 = (unsigned int)(v856 - 1);
                              if( v72 )
                                goto LABEL_1379;
                            }
LABEL_1378:
                            v853 += 6;
                            if( (unsigned __int64)v853 < v855 )
                              continue;
                          }
LABEL_1379:
                          v17 = (__int64)v1566;
                          (*((void(__fastcall **)(_QWORD, __int64, __int64, __int64 *))v1566 + 50))(
                            *((_QWORD *)v1566 + 168),
                            v851,
                            v856,
                            v857);
                          __writecr8(v850);
                          if( !v854 )
                            goto LABEL_1386;
                          if( (*(_DWORD *)(v17 + 2452) & 0x10) != 0 && !*(_DWORD *)(v17 + 2296) )
                          {
                            *(_QWORD *)(v17 + 2304) = v17 - 0x5C5FC0A76E374B18i64;
                            *(_QWORD *)(v17 + 2312) = v56 - 0x4C48B4211BBACBEBi64;
                            *(_QWORD *)(v17 + 2320) = *(int *)v56;
                            *(_QWORD *)(v17 + 2328) = 1i64;
                            *(_DWORD *)(v17 + 2296) = 1;
                            __b8(v17, 0i64);
                          }
                          if( *((_QWORD *)v56 + 3) == 1i64 )
                          {
                            v50 = 0;
                          }
                          else
                          {
LABEL_1386:
                            v50 = 0;
                            if( v853 == (unsigned int *)v855 && !*(_DWORD *)(v17 + 2296) )
                            {
                              *(_QWORD *)(v17 + 2304) = v17 - 0x5C5FC0A76E374B18i64;
                              *(_QWORD *)(v17 + 2312) = v56 - 0x4C48B4211BBACBEBi64;
                              *(_QWORD *)(v17 + 2320) = *(int *)v56;
                              *(_QWORD *)(v17 + 2328) = v853;
                              *(_DWORD *)(v17 + 2296) = 1;
                              __b8(v17, 0i64);
                            }
                          }
                          v862 = *(_QWORD *)(v17 + 1344);
                          LODWORD(v47) = KeGetCurrentIrql();
                          __writecr8(0xFui64);
                          (*(void(__fastcall **)(__int64))(v17 + 336))(v862);
                          v863 = 0i64;
                          v864 = **(unsigned int ***)(v17 + 1552);
                          v865 = v864 + 4;
                          v866 = (unsigned __int64)&v864[6 * *v864 + 4];
                          while( 1 )
                          {
                            v865 += 6;
                            if( (unsigned __int64)v865 >= v866 )
                              break;
                            v867 = *((_QWORD *)v865 + 1);
                            if( v867 < v863 )
                              break;
                            if( (v867 & 0xFFFFFFFFFFFFF000ui64) != v867 )
                              break;
                            v868 = v867 + v865[4];
                            if( v868 <= v867 || v868 == v863 )
                              break;
                            v863 = v867 + v865[4];
                          }
                          (*(void(__fastcall **)(_QWORD))(v17 + 400))(*(_QWORD *)(v17 + 1344));
                          __writecr8((unsigned __int8)v47);
                          if( v865 == (unsigned int *)v866 || *(_DWORD *)(v17 + 2296) )
                            goto LABEL_238;
                          *(_QWORD *)(v17 + 2304) = v17 - 0x5C5FC0A76E374B18i64;
                          *(_QWORD *)(v17 + 2312) = v56 - 0x4C48B4211BBACBEBi64;
                          *(_QWORD *)(v17 + 2320) = *(int *)v56;
                          *(_QWORD *)(v17 + 2328) = v865;
                          goto LABEL_459;
                        }
                      }
                    }
LABEL_1365:
                    __writecr8(v845);
                    v56 = v1565;
                  }
                }
                v847 = *(_DWORD *)(v17 + 2296);
                v24 = *((unsigned int *)v56 + 5);
                if( !v847 )
                {
                  *(_QWORD *)(*(_QWORD *)(v17 + 1424) + 24i64) = v24 ^ v839;
                  v847 = *(_DWORD *)(v17 + 2296);
                }
                v848 = *((_QWORD *)v56 + 1);
                if( !v847 )
                {
                  *(_QWORD *)(v17 + 2304) = v17 - 0x5C5FC0A76E374B18i64;
                  *(_QWORD *)(v17 + 2312) = v56 - 0x4C48B4211BBACBEBi64;
                  *(_QWORD *)(v17 + 2320) = *(int *)v56;
                  *(_QWORD *)(v17 + 2328) = v848;
                  *(_DWORD *)(v17 + 2296) = 1;
                  __b8(v17, 0i64);
                }
                goto LABEL_1370;
              }
              goto LABEL_2328;
            }
            if( (*((_DWORD *)v56 + 10) & 1) != 0 && (!*(_QWORD *)(v17 + 2432) || (*(_DWORD *)(v17 + 2452) & 4) != 0) )
              goto LABEL_1736;
            if( (*((_DWORD *)v56 + 10) & 1) != 0 )
            {
              v869 = *(_DWORD *)(v17 + 2452);
              v870 = v869;
              if( *(_DWORD *)(v17 + 2084) )
              {
                if( (((unsigned __int8)v869 ^ (unsigned __int8)(v869 >> 3)) & 4) != 0 )
                  goto LABEL_1736;
              }
              else
              {
                v870 = v869 ^ ((unsigned __int8)v869 ^ (unsigned __int8)(8 * v869)) & 0x20;
                *(_DWORD *)(v17 + 2452) = v870;
              }
              if( !*(_QWORD *)(v17 + 2432) )
                goto LABEL_1467;
              LOBYTE(v871) = v870;
              if( !*(_DWORD *)(v17 + 2084) )
              {
                v871 = v870 ^ ((unsigned __int8)v870 ^ (unsigned __int8)(8 * v870)) & 0x20;
                *(_DWORD *)(v17 + 2452) = v871;
                goto LABEL_1409;
              }
              if( (((unsigned __int8)v870 ^ (unsigned __int8)(v870 >> 3)) & 4) != 0 )
              {
LABEL_1467:
                *(_DWORD *)(v17 + 2084) = 0;
                goto LABEL_1447;
              }
LABEL_1409:
              if( (v871 & 4) != 0 )
              {
                v872 = *((_QWORD *)v56 + 1) & 0xFFFFFFFFFFFFF000ui64;
                v873 = (*((unsigned int *)v56 + 4) + (unsigned __int64)(*((_DWORD *)v56 + 2) & 0xFFF) + 4095) >> 12;
                while( v873 )
                {
                  --v873;
                  if( (*(unsigned __int8(__fastcall **)(unsigned __int64))(v17 + 688))(v872)
                    && !*(_DWORD *)(v17 + 2296) )
                  {
                    *(_QWORD *)(v17 + 2304) = v17 - 0x5C5FC0A76E374B18i64;
                    *(_QWORD *)(v17 + 2312) = v56 - 0x4C48B4211BBACBEBi64;
                    *(_QWORD *)(v17 + 2320) = *(int *)v56;
                    *(_QWORD *)(v17 + 2328) = v872;
                    *(_DWORD *)(v17 + 2296) = 1;
                    __b8(v17, 0i64);
                  }
                  v872 += 4096i64;
                  *(_DWORD *)(v17 + 2088) += 256;
                }
                goto LABEL_1447;
              }
              v874 = (_QWORD *)*((_QWORD *)v56 + 1);
              v875 = *((unsigned int *)v56 + 4);
              v876 = v874;
              *(_DWORD *)(v17 + 2088) += v875;
              v877 = (char *)v874;
              v878 = *(_DWORD *)(v17 + 2068);
              v879 = *(_QWORD *)(v17 + 2072);
              if( v874 < (_QWORD *)((char *)v874 + v875) )
              {
                do
                {
                  _mm_prefetchnta(v877);
                  v877 += 64;
                }
                while( v877 < (char *)v874 + v875 );
              }
              v880 = *(_QWORD *)(v17 + 2072);
              v881 = (unsigned int)v875 >> 7;
              if( (unsigned int)v875 >> 7 )
              {
                do
                {
                  v882 = 8i64;
                  do
                  {
                    v883 = v880 ^ *v876;
                    v884 = v876[1];
                    v876 += 2;
                    v880 = __ROL8__(__ROL8__(v883, v878) ^ v884, v878);
                    --v882;
                  }
                  while( v882 );
                  v885 = __ROL8__(v879 ^ ((char *)v876 - (char *)v874), 17) ^ v879 ^ ((char *)v876 - (char *)v874);
                  v1706 = (v885 * (unsigned __int128)0x7010008004002001ui64) >> 64;
                  v878 = ((unsigned __int8)(v1706 ^ v885) ^ (unsigned __int8)v878) & 0x3F;
                  if( !v878 )
                    LOBYTE(v878) = 1;
                  --v881;
                }
                while( v881 );
                v17 = (__int64)v1566;
              }
              v886 = v875 & 0x7F;
              if( v886 >= 8 )
              {
                v887 = (unsigned __int64)v886 >> 3;
                do
                {
                  v880 = __ROL8__(*v876++ ^ v880, v878);
                  v886 -= 8;
                  --v887;
                }
                while( v887 );
              }
              if( v886 )
              {
                do
                {
                  v888 = *(unsigned __int8 *)v876;
                  v876 = (_QWORD *)((char *)v876 + 1);
                  v880 = __ROL8__(v888 ^ v880, v878);
                  --v886;
                }
                while( v886 );
                v17 = (__int64)v1566;
              }
              for( m = v880; ; LODWORD(v880) = m ^ v880 )
              {
                m >>= 31;
                if( !m )
                  break;
              }
              v890 = *((_DWORD *)v56 + 5);
              v891 = v880 & 0x7FFFFFFF;
              if( v891 != v890 )
              {
                v892 = *((unsigned int *)v56 + 4);
                v893 = *((_QWORD *)v56 + 1);
                if( *((_DWORD *)v56 + 4) && (*(_DWORD *)(v17 + 2452) & 0x40) != 0 )
                {
                  v894 = KeGetCurrentIrql();
                  __writecr8(2ui64);
                  v895 = v893 & 0xFFFFFFFFFFFFF000ui64;
                  v896 = (v893 + v892 - 1) | 0xFFF;
                  v897 = (v893 & 0xFFFFFFFFFFFFF000ui64) - 1;
                  while( 1 )
                  {
                    v898 = v894;
                    while( 1 )
                    {
                      v899 = (*(__int64(__fastcall **)(unsigned __int64, _QWORD))(v17 + 1128))(v895, 0i64);
                      if( v899 != -1073741267 )
                        break;
                      if( v894 > 1u )
                        goto LABEL_1444;
                      v898 = v894;
                      __writecr8(v894);
                      KeGetCurrentIrql();
                      __writecr8(2ui64);
                    }
                    if( v899 < 0 )
                      break;
LABEL_1444:
                    v895 += 4096i64;
                    v897 += 4096i64;
                    if( v897 == v896 )
                      goto LABEL_1445;
                  }
                  __writecr8(v898);
                  v56 = v1565;
                  v50 = 0;
                  v890 = *((_DWORD *)v1565 + 5);
                }
                v912 = *(_DWORD *)(v17 + 2296);
                if( !v912 )
                {
                  v913 = v891;
                  v914 = v890;
                  goto LABEL_1464;
                }
                goto LABEL_1465;
              }
LABEL_1447:
              LODWORD(v47) = -465226731;
            }
            else
            {
              v916 = (_QWORD *)*((_QWORD *)v56 + 1);
              v917 = *((unsigned int *)v56 + 4);
              v918 = v916;
              *(_DWORD *)(v17 + 2088) += v917;
              v919 = (char *)v916;
              v920 = *(_DWORD *)(v17 + 2068);
              v921 = *(_QWORD *)(v17 + 2072);
              if( v916 < (_QWORD *)((char *)v916 + v917) )
              {
                do
                {
                  _mm_prefetchnta(v919);
                  v919 += 64;
                }
                while( v919 < (char *)v916 + v917 );
              }
              v922 = *(_QWORD *)(v17 + 2072);
              v923 = (unsigned int)v917 >> 7;
              if( (unsigned int)v917 >> 7 )
              {
                do
                {
                  v924 = 8i64;
                  do
                  {
                    v925 = v918[1] ^ __ROL8__(*v918 ^ v922, v920);
                    v918 += 2;
                    v922 = __ROL8__(v925, v920);
                    --v924;
                  }
                  while( v924 );
                  v926 = __ROL8__(v921 ^ ((char *)v918 - (char *)v916), 17) ^ v921 ^ ((char *)v918 - (char *)v916);
                  v1707 = (v926 * (unsigned __int128)0x7010008004002001ui64) >> 64;
                  v920 = ((unsigned __int8)(v1707 ^ v926) ^ (unsigned __int8)v920) & 0x3F;
                  if( !v920 )
                    LOBYTE(v920) = 1;
                  --v923;
                }
                while( v923 );
                v17 = (__int64)v1566;
              }
              v927 = v917 & 0x7F;
              if( v927 >= 8 )
              {
                v928 = (unsigned __int64)v927 >> 3;
                do
                {
                  v922 = __ROL8__(*v918++ ^ v922, v920);
                  v927 -= 8;
                  --v928;
                }
                while( v928 );
              }
              for( ; v927; --v927 )
              {
                v929 = *(unsigned __int8 *)v918;
                v918 = (_QWORD *)((char *)v918 + 1);
                v922 = __ROL8__(v929 ^ v922, v920);
              }
              for( n = v922; ; LODWORD(v922) = n ^ v922 )
              {
                n >>= 31;
                if( !n )
                  break;
              }
              v931 = v922 & 0x7FFFFFFF;
              if( v931 == *((_DWORD *)v56 + 5) )
              {
LABEL_1446:
                v50 = 0;
                goto LABEL_1447;
              }
              if( !*(_DWORD *)v56 && *((_DWORD *)v56 + 6) )
                v50 = 1;
              v932 = *((unsigned int *)v56 + 4);
              v933 = *((_QWORD *)v56 + 1);
              if( *((_DWORD *)v56 + 4) )
              {
                v934 = 64i64;
                if( (*(_DWORD *)(v17 + 2452) & 0x40) != 0 )
                {
                  v935 = KeGetCurrentIrql();
                  __writecr8(2ui64);
                  v936 = v933 & 0xFFFFFFFFFFFFF000ui64;
                  v1788 = (v933 + v932 - 1) | 0xFFF;
                  v937 = (v933 & 0xFFFFFFFFFFFFF000ui64) - 1;
                  while( 1 )
                  {
                    v898 = v935;
                    while( 1 )
                    {
                      v938 = (*(__int64(__fastcall **)(unsigned __int64, _QWORD, __int64, _QWORD *))(v17 + 1128))(
                               v936,
                               0i64,
                               v934,
                               v918);
                      if( v938 != -1073741267 )
                        break;
                      if( v50 )
                        goto LABEL_1500;
                      if( v935 > 1u )
                        goto LABEL_1498;
                      v898 = v935;
                      __writecr8(v935);
                      KeGetCurrentIrql();
                      __writecr8(2ui64);
                    }
                    if( v938 < 0 )
                      break;
LABEL_1498:
                    v936 += 4096i64;
                    v937 += 4096i64;
                    if( v937 == v1788 )
                    {
LABEL_1445:
                      __writecr8(v898);
                      v56 = v1565;
                      goto LABEL_1446;
                    }
                  }
LABEL_1500:
                  __writecr8(v898);
                  v56 = v1565;
                }
              }
              v912 = *(_DWORD *)(v17 + 2296);
              v50 = 0;
              v913 = *((unsigned int *)v56 + 5);
              if( !v912 )
              {
                v914 = v931;
LABEL_1464:
                *(_QWORD *)(*(_QWORD *)(v17 + 1424) + 24i64) = v914 ^ v913;
                v912 = *(_DWORD *)(v17 + 2296);
              }
LABEL_1465:
              v915 = *((_QWORD *)v56 + 1);
              LODWORD(v47) = -465226731;
              if( !v912 )
              {
                *(_QWORD *)(v17 + 2304) = v17 - 0x5C5FC0A76E374B18i64;
                *(_QWORD *)(v17 + 2312) = v56 - 0x4C48B4211BBACBEBi64;
                *(_QWORD *)(v17 + 2320) = *(int *)v56;
                *(_QWORD *)(v17 + 2328) = v915;
                *(_DWORD *)(v17 + 2296) = 1;
                __b8(v17, 0i64);
              }
            }
            v900 = *((_DWORD *)v56 + 10);
            if( (v900 & 2) == 0 )
              goto LABEL_238;
            v901 = *((_QWORD *)v56 + 1);
            if( (v900 & 4) != 0 )
            {
              v902 = *((_QWORD *)v56 + 3);
              v903 = **(_QWORD **)(v901 + 112);
              if( v903 != v902 )
              {
                v904 = *(_QWORD *)(v17 + 1424);
                *(_QWORD *)v904 = v903;
                *(_DWORD *)(v904 + 16) = 256;
                v905 = *(_DWORD *)(v17 + 2296);
                if( !v905 )
                {
                  *(_QWORD *)(*(_QWORD *)(v17 + 1424) + 24i64) = v903 ^ v902;
                  v905 = *(_DWORD *)(v17 + 2296);
                }
                v906 = *(_QWORD *)(v901 + 112);
                if( !v905 )
                {
                  *(_QWORD *)(v17 + 2304) = v17 - 0x5C5FC0A76E374B18i64;
                  *(_QWORD *)(v17 + 2312) = v56 - 0x4C48B4211BBACBEBi64;
                  *(_QWORD *)(v17 + 2320) = *(int *)v56;
                  *(_QWORD *)(v17 + 2328) = v906;
                  *(_DWORD *)(v17 + 2296) = 1;
                  __b8(v17, 0i64);
                }
              }
            }
            if( (*((_DWORD *)v56 + 10) & 8) == 0 )
              goto LABEL_238;
            v907 = *((_QWORD *)v56 + 4);
            v908 = **(_QWORD **)(v901 + 120);
            if( v908 == v907 )
              goto LABEL_238;
            v909 = *(_QWORD *)(v17 + 1424);
            *(_QWORD *)v909 = v908;
            *(_DWORD *)(v909 + 16) = 256;
            v910 = *(_DWORD *)(v17 + 2296);
            if( !v910 )
            {
              *(_QWORD *)(*(_QWORD *)(v17 + 1424) + 24i64) = v908 ^ v907;
              v910 = *(_DWORD *)(v17 + 2296);
            }
            v911 = *(_QWORD *)(v901 + 120);
            if( v910 )
              goto LABEL_238;
            *(_QWORD *)(v17 + 2304) = v17 - 0x5C5FC0A76E374B18i64;
            *(_QWORD *)(v17 + 2312) = v56 - 0x4C48B4211BBACBEBi64;
            *(_QWORD *)(v17 + 2320) = *(int *)v56;
            *(_QWORD *)(v17 + 2328) = v911;
            goto LABEL_1323;
          }
          if( (*(_DWORD *)(v17 + 2096) & 1) == 0 )
            goto LABEL_238;
          if( !*(_QWORD *)(v17 + 2432) || (*(_DWORD *)(v17 + 2452) & 4) != 0 )
          {
            v940 = 0i64;
          }
          else
          {
            v939 = (*(__int64(__fastcall **)(__int64, __int64 *, _QWORD))(v17 + 976))(26i64, &v1657, 0i64);
            v940 = v1657;
            if( v939 < 0 )
              v940 = 0i64;
          }
          v941 = *(__int64(__fastcall **)(_QWORD))(v17 + 944);
          v1567 = v940;
          v942 = 0;
          v1568 = 0;
          v943 = v941(0i64);
          while( 2 )
          {
            v982 = v943;
            if( !v943 )
            {
              v983 = *(_QWORD *)(v17 + 1248);
              v50 = 0;
              if( (*(int(__fastcall **)(__int64))(v17 + 928))(v983) >= 0 )
              {
                v984 = (*(__int64(__fastcall **)(__int64))(v17 + 992))(v983);
                v1597 = v984;
                v985 = (*(__int64(__fastcall **)(__int64, char *))(v17 + 1000))(v983, v1575);
                v1791 = (*(__int64(__fastcall **)(__int64))(v17 + 1008))(v983);
                if( v984 == 114
                  || *(_DWORD *)(v17 + 2296)
                  || (*(_QWORD *)(*(_QWORD *)(v17 + 1424) + 24i64) = v984 ^ 0x72i64, *(_DWORD *)(v17 + 2296)) )
                {
                  v986 = (int *)v1565;
                }
                else
                {
                  v986 = (int *)v1565;
                  *(_QWORD *)(v17 + 2304) = v17 - 0x5C5FC0A76E374B18i64;
                  *(_QWORD *)(v17 + 2312) = (char *)v986 - 0x4C48B4211BBACBEBi64;
                  *(_QWORD *)(v17 + 2320) = *v986;
                  *(_QWORD *)(v17 + 2328) = v983;
                  *(_DWORD *)(v17 + 2296) = 1;
                  __b8(v17, 0i64);
                }
                v987 = 0;
                if( (v984 & 7) == 1 )
                {
                  v987 = 48;
                }
                else if( (v984 & 7) == 2 )
                {
                  v987 = 16;
                  LOBYTE(v50) = 16;
                }
                else if( (v984 & 7) != 0 && !*(_DWORD *)(v17 + 2296) )
                {
                  *(_QWORD *)(v17 + 2304) = v17 - 0x5C5FC0A76E374B18i64;
                  *(_QWORD *)(v17 + 2312) = (char *)v986 - 0x4C48B4211BBACBEBi64;
                  *(_QWORD *)(v17 + 2320) = *v986;
                  *(_QWORD *)(v17 + 2328) = v983;
                  *(_DWORD *)(v17 + 2296) = 1;
                  __b8(v17, 0i64);
                }
                v47 = *(_QWORD *)(v17 + 1480);
                v988 = (unsigned __int64)v984 >> 4;
                v989 = v987 | *(_BYTE *)(v47 + 2 * v988);
                v990 = (int *)v1565;
                if( v989 != v985 && !*(_DWORD *)(v17 + 2296) )
                {
                  *(_QWORD *)(v17 + 2304) = v17 - 0x5C5FC0A76E374B18i64;
                  *(_QWORD *)(v17 + 2312) = (char *)v990 - 0x4C48B4211BBACBEBi64;
                  *(_QWORD *)(v17 + 2320) = *v990;
                  *(_QWORD *)(v17 + 2328) = v983;
                  *(_DWORD *)(v17 + 2296) = 1;
                  __b8(v17, 0i64);
                }
                v991 = v50 | *(_BYTE *)(v47 + 2 * v988 + 1);
                v50 = 0;
                if( v991 != v1575[0] && !*(_DWORD *)(v17 + 2296) )
                {
                  *(_QWORD *)(v17 + 2304) = v17 - 0x5C5FC0A76E374B18i64;
                  *(_QWORD *)(v17 + 2312) = (char *)v990 - 0x4C48B4211BBACBEBi64;
                  *(_QWORD *)(v17 + 2320) = *v990;
                  *(_QWORD *)(v17 + 2328) = v983;
                  *(_DWORD *)(v17 + 2296) = 1;
                  __b8(v17, 0i64);
                }
                if( v983 == *(_QWORD *)(v17 + 1248) )
                  v992 = 0i64;
                else
                  v992 = (unsigned __int64 *)(*(__int64(__fastcall **)(__int64, __int64))(v17 + 984))(v983, 1i64);
                v1569 = (__int64)v992;
                if( v992 )
                {
                  v993 = *v992;
                  v994 = v992;
                  if( *v992 )
                  {
                    v995 = v1791;
                    v996 = v1565;
                    do
                    {
                      *v994 = v993 & 0xFFFFFFFFFFFFFFFCui64;
                      (*(void(**)(void))(v17 + 480))();
                      v997 = (unsigned __int8)v1575[0];
                      v47 = v994[1] & 0xFFFFFFFFFFFF0000ui64;
                      if( v47 == v995 )
                        v997 = v985;
                      v998 = v994[1] >> 6;
                      LOBYTE(v998) = v998 & 0xF;
                      if( !(*(unsigned int(__fastcall **)(unsigned __int64, __int64))(v17 + 1016))(v998, v997) )
                      {
                        if( (*(_DWORD *)(v17 + 2448) & 0x40000000) != 0 )
                        {
                          v999 = *(_QWORD **)(v17 + 2688);
                          v1000 = 48;
                          v1001 = 6i64;
                          do
                          {
                            v1000 -= 8;
                            *v999 = *(_QWORD *)v996;
                            v996 += 8;
                            ++v999;
                            --v1001;
                          }
                          while( v1001 );
                          if( v1000 )
                          {
                            do
                            {
                              v1002 = *v996++;
                              *(_BYTE *)v999 = v1002;
                              v999 = (_QWORD *)((char *)v999 + 1);
                              --v1000;
                            }
                            while( v1000 );
                            v995 = v1791;
                          }
                          v996 = *(char **)(v17 + 2688);
                        }
                        *((_QWORD *)v996 + 3) = v47;
                        *((_QWORD *)v996 + 4) = *v994;
                        v996[40] = ((unsigned __int64)*((unsigned int *)v994 + 2) >> 6) & 0xF;
                        if( !*(_DWORD *)(v17 + 2296) )
                        {
                          *(_QWORD *)(v17 + 2304) = v17 - 0x5C5FC0A76E374B18i64;
                          *(_QWORD *)(v17 + 2312) = v996 - 0x4C48B4211BBACBEBi64;
                          *(_QWORD *)(v17 + 2320) = *(int *)v996;
                          *(_QWORD *)(v17 + 2328) = v983;
                          *(_DWORD *)(v17 + 2296) = 1;
                          __b8(v17, 0i64);
                        }
                      }
                      v994 += 6;
                      v993 = *v994;
                    }
                    while( *v994 );
                    v992 = (unsigned __int64 *)v1569;
                    v50 = 0;
                  }
                  (*(void(__fastcall **)(unsigned __int64 *))(v17 + 256))(v992);
                }
                (*(void(__fastcall **)(__int64))(v17 + 936))(v983);
                v942 = v1568;
                *(_DWORD *)(v17 + 2088) += 0x8000;
              }
              if( v1567 )
                (*(void(**)(void))(v17 + 480))();
              v1003 = v942 << 8;
              goto LABEL_1639;
            }
            if( v940 == v943 )
            {
              v47 = (unsigned __int64)v56;
              if( (*(int(__fastcall **)(__int64))(v17 + 928))(v943) >= 0 )
              {
                v944 = (*(__int64(__fastcall **)(__int64))(v17 + 992))(v982);
                v1592 = v944;
                v1789 = (*(__int64(__fastcall **)(__int64, unsigned __int8 *))(v17 + 1000))(v982, &v1573);
                v1581 = (*(__int64(__fastcall **)(__int64))(v17 + 1008))(v982);
                if( v944 != 97 && !*(_DWORD *)(v17 + 2296) )
                {
                  *(_QWORD *)(*(_QWORD *)(v17 + 1424) + 24i64) = v944 ^ 0x61i64;
                  if( !*(_DWORD *)(v17 + 2296) )
                  {
                    *(_QWORD *)(v17 + 2304) = v17 - 0x5C5FC0A76E374B18i64;
                    *(_QWORD *)(v17 + 2312) = v56 - 0x4C48B4211BBACBEBi64;
                    *(_QWORD *)(v17 + 2320) = *(int *)v56;
                    *(_QWORD *)(v17 + 2328) = v982;
                    *(_DWORD *)(v17 + 2296) = 1;
                    __b8(v17, 0i64);
                  }
                }
                v945 = 0;
                v946 = 0;
                if( (v944 & 7) == 1 )
                {
                  v945 = 48;
                }
                else if( (v944 & 7) == 2 )
                {
                  v945 = 16;
                  v946 = 16;
                }
                else if( (v944 & 7) != 0 && !*(_DWORD *)(v17 + 2296) )
                {
                  v947 = v1565;
                  *(_QWORD *)(v17 + 2304) = v17 - 0x5C5FC0A76E374B18i64;
                  *(_QWORD *)(v17 + 2312) = v47 - 0x4C48B4211BBACBEBi64;
                  *(_QWORD *)(v17 + 2320) = *(int *)v947;
                  *(_QWORD *)(v17 + 2328) = v982;
                  *(_DWORD *)(v17 + 2296) = 1;
                  __b8(v17, 0i64);
                }
                v948 = *(_QWORD *)(v17 + 1480);
                v949 = (unsigned __int64)v944 >> 4;
                v72 = (*(_BYTE *)(v948 + 2 * v949) | (unsigned __int8)v945) == v1789;
                v950 = v1565;
                if( !v72 && !*(_DWORD *)(v17 + 2296) )
                {
                  *(_QWORD *)(v17 + 2304) = v17 - 0x5C5FC0A76E374B18i64;
                  *(_QWORD *)(v17 + 2312) = v47 - 0x4C48B4211BBACBEBi64;
                  *(_QWORD *)(v17 + 2320) = *(int *)v950;
                  *(_QWORD *)(v17 + 2328) = v982;
                  *(_DWORD *)(v17 + 2296) = 1;
                  __b8(v17, 0i64);
                }
                if( ((unsigned __int8)v946 | *(_BYTE *)(v948 + 2 * v949 + 1)) != v1573 && !*(_DWORD *)(v17 + 2296) )
                {
                  *(_QWORD *)(v17 + 2304) = v17 - 0x5C5FC0A76E374B18i64;
                  *(_QWORD *)(v17 + 2312) = v47 - 0x4C48B4211BBACBEBi64;
                  *(_QWORD *)(v17 + 2320) = *(int *)v950;
                  *(_QWORD *)(v17 + 2328) = v982;
                  *(_DWORD *)(v17 + 2296) = 1;
                  __b8(v17, 0i64);
                }
                if( v982 == *(_QWORD *)(v17 + 1248) )
                  v951 = 0i64;
                else
                  v951 = (unsigned __int64 *)(*(__int64(__fastcall **)(__int64, __int64))(v17 + 984))(v982, 1i64);
                v1569 = (__int64)v951;
                if( v951 )
                {
                  v952 = *v951;
                  v953 = v951;
                  if( *v951 )
                  {
                    v954 = v1789;
                    v955 = v1581;
                    do
                    {
                      *v953 = v952 & 0xFFFFFFFFFFFFFFFCui64;
                      (*(void(**)(void))(v17 + 480))();
                      v956 = v1573;
                      v957 = v953[1] & 0xFFFFFFFFFFFF0000ui64;
                      if( v957 == v955 )
                        v956 = v954;
                      v958 = v953[1] >> 6;
                      LOBYTE(v958) = v958 & 0xF;
                      if( !(*(unsigned int(__fastcall **)(unsigned __int64, __int64))(v17 + 1016))(v958, v956) )
                      {
                        if( (*(_DWORD *)(v17 + 2448) & 0x40000000) != 0 )
                        {
                          v959 = *(_QWORD **)(v17 + 2688);
                          v960 = 48;
                          v961 = 6i64;
                          do
                          {
                            v960 -= 8;
                            *v959 = *(_QWORD *)v47;
                            v47 += 8i64;
                            ++v959;
                            --v961;
                          }
                          while( v961 );
                          if( v960 )
                          {
                            do
                            {
                              v962 = *(_BYTE *)v47++;
                              *(_BYTE *)v959 = v962;
                              v959 = (_QWORD *)((char *)v959 + 1);
                              --v960;
                            }
                            while( v960 );
                            v954 = v1789;
                          }
                          v47 = *(_QWORD *)(v17 + 2688);
                        }
                        *(_QWORD *)(v47 + 24) = v957;
                        *(_QWORD *)(v47 + 32) = *v953;
                        *(_BYTE *)(v47 + 40) = ((unsigned __int64)*((unsigned int *)v953 + 2) >> 6) & 0xF;
                        if( !*(_DWORD *)(v17 + 2296) )
                        {
                          *(_QWORD *)(v17 + 2304) = v17 - 0x5C5FC0A76E374B18i64;
                          *(_QWORD *)(v17 + 2312) = v47 - 0x4C48B4211BBACBEBi64;
                          *(_QWORD *)(v17 + 2320) = *(int *)v47;
                          *(_QWORD *)(v17 + 2328) = v982;
                          *(_DWORD *)(v17 + 2296) = 1;
                          __b8(v17, 0i64);
                        }
                      }
                      v953 += 6;
                      v952 = *v953;
                    }
                    while( *v953 );
                    goto LABEL_1590;
                  }
                  goto LABEL_1591;
                }
                goto LABEL_1592;
              }
            }
            else if( (*(unsigned int(__fastcall **)(__int64))(v17 + 968))(v943) )
            {
              v47 = (unsigned __int64)v56;
              if( (*(int(__fastcall **)(__int64))(v17 + 928))(v982) >= 0 )
              {
                v963 = (*(__int64(__fastcall **)(__int64))(v17 + 992))(v982);
                v1593 = v963;
                v1790 = (*(__int64(__fastcall **)(__int64, unsigned __int8 *))(v17 + 1000))(v982, &v1574);
                v1581 = (*(__int64(__fastcall **)(__int64))(v17 + 1008))(v982);
                if( v963 != 97 && !*(_DWORD *)(v17 + 2296) )
                {
                  *(_QWORD *)(*(_QWORD *)(v17 + 1424) + 24i64) = v963 ^ 0x61i64;
                  if( !*(_DWORD *)(v17 + 2296) )
                  {
                    *(_QWORD *)(v17 + 2304) = v17 - 0x5C5FC0A76E374B18i64;
                    *(_QWORD *)(v17 + 2312) = v56 - 0x4C48B4211BBACBEBi64;
                    *(_QWORD *)(v17 + 2320) = *(int *)v56;
                    *(_QWORD *)(v17 + 2328) = v982;
                    *(_DWORD *)(v17 + 2296) = 1;
                    __b8(v17, 0i64);
                  }
                }
                v964 = 0;
                v965 = 0;
                if( (v963 & 7) == 1 )
                {
                  v964 = 48;
                }
                else if( (v963 & 7) == 2 )
                {
                  v964 = 16;
                  v965 = 16;
                }
                else if( (v963 & 7) != 0 && !*(_DWORD *)(v17 + 2296) )
                {
                  v966 = v1565;
                  *(_QWORD *)(v17 + 2304) = v17 - 0x5C5FC0A76E374B18i64;
                  *(_QWORD *)(v17 + 2312) = v47 - 0x4C48B4211BBACBEBi64;
                  *(_QWORD *)(v17 + 2320) = *(int *)v966;
                  *(_QWORD *)(v17 + 2328) = v982;
                  *(_DWORD *)(v17 + 2296) = 1;
                  __b8(v17, 0i64);
                }
                v967 = *(_QWORD *)(v17 + 1480);
                v968 = (unsigned __int64)v963 >> 4;
                v72 = (*(_BYTE *)(v967 + 2 * v968) | (unsigned __int8)v964) == v1790;
                v969 = v1565;
                if( !v72 && !*(_DWORD *)(v17 + 2296) )
                {
                  *(_QWORD *)(v17 + 2304) = v17 - 0x5C5FC0A76E374B18i64;
                  *(_QWORD *)(v17 + 2312) = v47 - 0x4C48B4211BBACBEBi64;
                  *(_QWORD *)(v17 + 2320) = *(int *)v969;
                  *(_QWORD *)(v17 + 2328) = v982;
                  *(_DWORD *)(v17 + 2296) = 1;
                  __b8(v17, 0i64);
                }
                if( ((unsigned __int8)v965 | *(_BYTE *)(v967 + 2 * v968 + 1)) != v1574 && !*(_DWORD *)(v17 + 2296) )
                {
                  *(_QWORD *)(v17 + 2304) = v17 - 0x5C5FC0A76E374B18i64;
                  *(_QWORD *)(v17 + 2312) = v47 - 0x4C48B4211BBACBEBi64;
                  *(_QWORD *)(v17 + 2320) = *(int *)v969;
                  *(_QWORD *)(v17 + 2328) = v982;
                  *(_DWORD *)(v17 + 2296) = 1;
                  __b8(v17, 0i64);
                }
                if( v982 == *(_QWORD *)(v17 + 1248) )
                  v951 = 0i64;
                else
                  v951 = (unsigned __int64 *)(*(__int64(__fastcall **)(__int64, __int64))(v17 + 984))(v982, 1i64);
                v1569 = (__int64)v951;
                if( v951 )
                {
                  v970 = *v951;
                  v971 = v951;
                  if( *v951 )
                  {
                    v972 = v1790;
                    v973 = v1581;
                    do
                    {
                      *v971 = v970 & 0xFFFFFFFFFFFFFFFCui64;
                      (*(void(**)(void))(v17 + 480))();
                      v974 = v1574;
                      v975 = v971[1] & 0xFFFFFFFFFFFF0000ui64;
                      if( v975 == v973 )
                        v974 = v972;
                      v976 = v971[1] >> 6;
                      LOBYTE(v976) = v976 & 0xF;
                      if( !(*(unsigned int(__fastcall **)(unsigned __int64, __int64))(v17 + 1016))(v976, v974) )
                      {
                        if( (*(_DWORD *)(v17 + 2448) & 0x40000000) != 0 )
                        {
                          v977 = *(_QWORD **)(v17 + 2688);
                          v978 = 48;
                          v979 = 6i64;
                          do
                          {
                            v978 -= 8;
                            *v977 = *(_QWORD *)v47;
                            v47 += 8i64;
                            ++v977;
                            --v979;
                          }
                          while( v979 );
                          if( v978 )
                          {
                            do
                            {
                              v980 = *(_BYTE *)v47++;
                              *(_BYTE *)v977 = v980;
                              v977 = (_QWORD *)((char *)v977 + 1);
                              --v978;
                            }
                            while( v978 );
                            v972 = v1790;
                          }
                          v47 = *(_QWORD *)(v17 + 2688);
                        }
                        *(_QWORD *)(v47 + 24) = v975;
                        *(_QWORD *)(v47 + 32) = *v971;
                        *(_BYTE *)(v47 + 40) = ((unsigned __int64)*((unsigned int *)v971 + 2) >> 6) & 0xF;
                        if( !*(_DWORD *)(v17 + 2296) )
                        {
                          *(_QWORD *)(v17 + 2304) = v17 - 0x5C5FC0A76E374B18i64;
                          *(_QWORD *)(v17 + 2312) = v47 - 0x4C48B4211BBACBEBi64;
                          *(_QWORD *)(v17 + 2320) = *(int *)v47;
                          *(_QWORD *)(v17 + 2328) = v982;
                          *(_DWORD *)(v17 + 2296) = 1;
                          __b8(v17, 0i64);
                        }
                      }
                      v971 += 6;
                      v970 = *v971;
                    }
                    while( *v971 );
LABEL_1590:
                    v951 = (unsigned __int64 *)v1569;
                  }
LABEL_1591:
                  (*(void(__fastcall **)(unsigned __int64 *))(v17 + 256))(v951);
                }
LABEL_1592:
                (*(void(__fastcall **)(__int64))(v17 + 936))(v982);
                v56 = v1565;
                *(_DWORD *)(v17 + 2088) += 0x8000;
                v942 = v1568;
                v940 = v1567;
              }
            }
            v981 = *(__int64(__fastcall **)(__int64))(v17 + 944);
            v1568 = ++v942;
            v943 = v981(v982);
            continue;
          }
        }
        if( (v56[42] & 1) != 0 )
        {
          if( !*(_QWORD *)(v17 + 2432) )
            goto LABEL_1736;
          v1004 = *(_DWORD *)(v17 + 2452);
          if( (v1004 & 4) != 0 )
            goto LABEL_1736;
          if( *(_DWORD *)(v17 + 2084) )
          {
            if( (v1004 & 0x20) != 0 )
              goto LABEL_1736;
          }
          else
          {
            *(_DWORD *)(v17 + 2452) = v1004 ^ ((unsigned __int8)v1004 ^ (unsigned __int8)(8 * v1004)) & 0x20;
          }
        }
        v1005 = *(unsigned int *)(v17 + 2084);
        v1006 = *((unsigned int *)v56 + 9);
        v1586 = *((_QWORD *)v56 + 1);
        v1007 = v1586 + 12 * v1005;
        v1008 = (_DWORD *)(v1007 + 12);
        v1569 = v1007;
        v1572 = v1007 + 12;
        v1009 = v1006 / 0xC;
        v1571 = v1006 / 0xC;
        v1588 = v1586 + 12i64 * (unsigned int)(v1006 / 0xC);
        v47 = (unsigned __int64)&v56[v1005 + 48];
        v1567 = v47;
        v1010 = v1006 / 0xC - 1;
        v1792 = v1010;
        if( (unsigned int)(v1006 / 0xC) )
        {
          v1011 = &v56[((v1010 + 7i64) & 0xFFFFFFFFFFFFFFF8ui64) + 48];
          v1578 = v1011;
        }
        else
        {
          v1011 = v56 + 48;
          v1578 = v56 + 48;
          v1792 = v1006 / 0xC - 1;
        }
        BugCheckParameter2 = &v1011[24 * *((unsigned __int16 *)v56 + 20)];
        if( !(_DWORD)v1009 || (unsigned int)v1005 >= v1010 )
          goto LABEL_1687;
        while( 2 )
        {
          if( *(char *)v47 < 0 )
            goto LABEL_1684;
          v1012 = *(_DWORD *)(v1007 + 4);
          v1013 = *((_QWORD *)v56 + 3) + v1012;
          v1014 = *v1008 - v1012;
          *(_DWORD *)(v17 + 2088) += v1014;
          v1015 = (_QWORD *)v1013;
          v1016 = *(_DWORD *)(v17 + 2068);
          v1017 = (char *)v1013;
          v1018 = *(_QWORD *)(v17 + 2072);
          v1581 = v1013;
          v1019 = (unsigned int)v1014;
          if( v1013 < (unsigned __int64)(v1014 + v1013) )
          {
            do
            {
              _mm_prefetchnta(v1017);
              v1017 += 64;
            }
            while( (unsigned __int64)v1017 < v1014 + v1013 );
          }
          v1020 = v1018;
          v1021 = (unsigned int)v1014 >> 7;
          if( (unsigned int)v1014 >> 7 )
          {
            do
            {
              v1022 = 8i64;
              do
              {
                v1023 = v1020 ^ *v1015;
                v1024 = v1015[1];
                v1015 += 2;
                v1020 = __ROL8__(__ROL8__(v1023, v1016) ^ v1024, v1016);
                --v1022;
              }
              while( v1022 );
              v1025 = __ROL8__(v1018 ^ ((unsigned __int64)v1015 - v1013), 17) ^ v1018 ^ ((unsigned __int64)v1015 - v1013);
              v1708 = (v1025 * (unsigned __int128)0x7010008004002001ui64) >> 64;
              v1016 = ((unsigned __int8)v1708 ^ (unsigned __int8)(v1025 ^ v1016)) & 0x3F;
              if( !v1016 )
                LOBYTE(v1016) = 1;
              --v1021;
            }
            while( v1021 );
            v17 = (__int64)v1566;
          }
          v1026 = v1014 & 0x7F;
          if( v1026 >= 8 )
          {
            v1027 = (unsigned __int64)v1026 >> 3;
            do
            {
              v1020 = __ROL8__(*v1015++ ^ v1020, v1016);
              v1026 -= 8;
              --v1027;
            }
            while( v1027 );
          }
          if( v1026 )
          {
            do
            {
              v1028 = *(unsigned __int8 *)v1015;
              v1015 = (_QWORD *)((char *)v1015 + 1);
              v1020 = __ROL8__(v1028 ^ v1020, v1016);
              --v1026;
            }
            while( v1026 );
            v47 = v1567;
          }
          for( ii = v1020; ; LOBYTE(v1020) = ii ^ v1020 )
          {
            ii >>= 7;
            if( !ii )
              break;
          }
          v1030 = *(_BYTE *)v47;
          v1031 = v1020 & 0x7F;
          if( v1031 == (*(_BYTE *)v47 & 0x7F) )
          {
LABEL_1681:
            v50 = 0;
          }
          else
          {
            if( v1019 && (*(_DWORD *)(v17 + 2452) & 0x40) != 0 )
            {
              v1032 = KeGetCurrentIrql();
              __writecr8(2ui64);
              v1033 = v1013 & 0xFFFFFFFFFFFFF000ui64;
              v1034 = (v1019 - 1 + v1013) | 0xFFF;
              v1035 = v1033 - 1;
              while( 1 )
              {
                v1036 = v1032;
                while( 1 )
                {
                  v1037 = (*(__int64(__fastcall **)(unsigned __int64, _QWORD))(v17 + 1128))(v1033, 0i64);
                  if( v1037 != -1073741267 )
                    break;
                  if( v1032 > 1u )
                    goto LABEL_1679;
                  v1036 = v1032;
                  __writecr8(v1032);
                  KeGetCurrentIrql();
                  __writecr8(2ui64);
                }
                if( v1037 < 0 )
                  break;
LABEL_1679:
                v1033 += 4096i64;
                v1035 += 4096i64;
                if( v1035 == v1034 )
                {
                  __writecr8(v1036);
                  goto LABEL_1681;
                }
              }
              __writecr8(v1036);
              v1013 = v1581;
              v1030 = *(_BYTE *)v1567;
            }
            v50 = 0;
            if( !*(_DWORD *)(v17 + 2296) )
            {
              *(_QWORD *)(*(_QWORD *)(v17 + 1424) + 24i64) = v1030 & 0x7F ^ (unsigned __int64)v1031;
              if( !*(_DWORD *)(v17 + 2296) )
              {
                v56 = v1565;
                *(_QWORD *)(v17 + 2304) = v17 - 0x5C5FC0A76E374B18i64;
                *(_QWORD *)(v17 + 2312) = v56 - 0x4C48B4211BBACBEBi64;
                *(_QWORD *)(v17 + 2320) = *(int *)v56;
                *(_QWORD *)(v17 + 2328) = v1013;
                *(_DWORD *)(v17 + 2296) = 1;
                __b8(v17, 0i64);
LABEL_1683:
                v1007 = v1569;
                *(_DWORD *)(v17 + 2088) += 64;
                v47 = v1567;
                v1008 = (_DWORD *)v1572;
LABEL_1684:
                ++v47;
                v1007 += 12i64;
                v1567 = v47;
                v1008 += 3;
                v1569 = v1007;
                v1572 = (unsigned __int64)v1008;
                if( (unsigned __int64)v1008 >= v1588 || *(_DWORD *)(v17 + 2088) >= *(_DWORD *)(v17 + 2092) )
                {
                  LODWORD(v1009) = v1571;
                  LODWORD(v1005) = ((int)v1007 - (int)v1586) / 12;
                  *(_DWORD *)(v17 + 2084) = v1005;
                  v1011 = v1578;
                  if( (unsigned int)v1005 < v1792 )
                    goto LABEL_238;
LABEL_1687:
                  if( *(_DWORD *)(v17 + 2088) >= *(_DWORD *)(v17 + 2092) )
                    goto LABEL_238;
                  if( (_DWORD)v1009 )
                    LODWORD(v1005) = v1005 - v1009 + 1;
                  v1038 = &v1011[24 * (unsigned int)v1005];
                  v1569 = (__int64)v1038;
                  while( 1 )
                  {
                    v1039 = (int *)(v1038 + 8);
                    v1040 = 2i64;
                    v1567 = 2i64;
                    v1793 = (int *)(v1038 + 8);
                    do
                    {
                      if( *v1039 < 0 )
                        goto LABEL_1729;
                      v47 = *((_QWORD *)v56 + 3) + (unsigned int)*(v1039 - 2);
                      v1041 = (unsigned int)(*(v1039 - 1) - *(v1039 - 2));
                      *(_DWORD *)(v17 + 2088) += v1041;
                      v1042 = (_QWORD *)v47;
                      v1043 = *(_DWORD *)(v17 + 2068);
                      v1044 = (char *)v47;
                      v1045 = *(_QWORD *)(v17 + 2072);
                      v1046 = (unsigned int)v1041;
                      v1572 = v47;
                      v1581 = (unsigned int)v1041;
                      if( v47 < v1041 + v47 )
                      {
                        do
                        {
                          _mm_prefetchnta(v1044);
                          v1044 += 64;
                        }
                        while( (unsigned __int64)v1044 < v1041 + v47 );
                      }
                      v1047 = v1045;
                      v1048 = (unsigned int)v1041 >> 7;
                      if( (unsigned int)v1041 >> 7 )
                      {
                        do
                        {
                          v1049 = 8i64;
                          do
                          {
                            v1050 = v1042[1] ^ __ROL8__(*v1042 ^ v1047, v1043);
                            v1042 += 2;
                            v1047 = __ROL8__(v1050, v1043);
                            --v1049;
                          }
                          while( v1049 );
                          v1051 = (__ROL8__(v1045 ^ ((unsigned __int64)v1042 - v47), 17) ^ v1045 ^ ((unsigned __int64)v1042
                                                                                                  - v47))
                                * (unsigned __int128)0x7010008004002001ui64;
                          v1709 = *((_QWORD *)&v1051 + 1);
                          v1043 = (BYTE8(v1051) ^ (unsigned __int8)(v1051 ^ v1043)) & 0x3F;
                          if( !v1043 )
                            LOBYTE(v1043) = 1;
                          --v1048;
                        }
                        while( v1048 );
                        v17 = (__int64)v1566;
                        v1046 = v1581;
                        v1039 = v1793;
                        v1040 = v1567;
                      }
                      v1052 = v1041 & 0x7F;
                      if( v1052 >= 8 )
                      {
                        v1053 = (unsigned __int64)v1052 >> 3;
                        do
                        {
                          v1047 = __ROL8__(*v1042++ ^ v1047, v1043);
                          v1052 -= 8;
                          --v1053;
                        }
                        while( v1053 );
                      }
                      if( v1052 )
                      {
                        do
                        {
                          v1054 = *(unsigned __int8 *)v1042;
                          v1042 = (_QWORD *)((char *)v1042 + 1);
                          v1047 = __ROL8__(v1054 ^ v1047, v1043);
                          --v1052;
                        }
                        while( v1052 );
                        v17 = (__int64)v1566;
                      }
                      for( jj = v1047; ; LODWORD(v1047) = jj ^ v1047 )
                      {
                        jj >>= 31;
                        if( !jj )
                          break;
                      }
                      v1056 = *v1039;
                      v1057 = v1047 & 0x7FFFFFFF;
                      if( v1057 == (*v1039 & 0x7FFFFFFF) )
                        goto LABEL_1729;
                      if( !v1046 )
                        goto LABEL_1725;
                      v1058 = 64i64;
                      if( (*(_DWORD *)(v17 + 2452) & 0x40) == 0 )
                        goto LABEL_1725;
                      v1059 = KeGetCurrentIrql();
                      __writecr8(2ui64);
                      v1060 = v47 & 0xFFFFFFFFFFFFF000ui64;
                      v1061 = (v47 + v1046 - 1) | 0xFFF;
                      v1062 = (v47 & 0xFFFFFFFFFFFFF000ui64) - 1;
                      do
                      {
                        v47 = v1059;
                        while( 1 )
                        {
                          v1063 = (*(__int64(__fastcall **)(unsigned __int64, _QWORD, __int64, _QWORD *))(v17 + 1128))(
                                    v1060,
                                    0i64,
                                    v1058,
                                    v1042);
                          if( v1063 != -1073741267 )
                            break;
                          if( v1059 > 1u )
                            goto LABEL_1733;
                          v47 = v1059;
                          __writecr8(v1059);
                          KeGetCurrentIrql();
                          __writecr8(2ui64);
                        }
                        if( v1063 < 0 )
                        {
                          __writecr8(v47);
                          v1039 = v1793;
                          v47 = v1572;
                          v1040 = v1567;
                          v56 = v1565;
                          v1056 = *v1793;
LABEL_1725:
                          v1064 = v1056;
                          if( !*(_DWORD *)(v17 + 2296) )
                          {
                            LODWORD(v1064) = v1056 & 0x7FFFFFFF;
                            *(_QWORD *)(*(_QWORD *)(v17 + 1424) + 24i64) = v1064 ^ v1057;
                            if( !*(_DWORD *)(v17 + 2296) )
                            {
                              *(_QWORD *)(v17 + 2304) = v17 - 0x5C5FC0A76E374B18i64;
                              *(_QWORD *)(v17 + 2312) = v56 - 0x4C48B4211BBACBEBi64;
                              *(_QWORD *)(v17 + 2320) = *(int *)v56;
                              *(_QWORD *)(v17 + 2328) = v47;
                              *(_DWORD *)(v17 + 2296) = 1;
                              __b8(v17, 0i64);
                              goto LABEL_1728;
                            }
                          }
                          goto LABEL_1729;
                        }
LABEL_1733:
                        v1060 += 4096i64;
                        v1062 += 4096i64;
                      }
                      while( v1062 != v1061 );
                      __writecr8(v47);
                      v1040 = v1567;
LABEL_1728:
                      v1039 = v1793;
LABEL_1729:
                      v56 = v1565;
                      v1039 += 3;
                      --v1040;
                      v1793 = v1039;
                      v1567 = v1040;
                    }
                    while( v1040 );
                    v1065 = v1569;
                    ++*(_DWORD *)(v17 + 2084);
                    v1038 = (char *)(v1065 + 24);
                    v1569 = (__int64)v1038;
                    if( v1038 == BugCheckParameter2 )
                    {
                      v50 = 0;
                      goto LABEL_1736;
                    }
                    if( *(_DWORD *)(v17 + 2088) >= *(_DWORD *)(v17 + 2092) )
                      goto LABEL_237;
                  }
                }
                continue;
              }
            }
          }
          break;
        }
        v56 = v1565;
        goto LABEL_1683;
      }
      if( v79 == 38 )
      {
        (*(void(__fastcall **)(char *, _QWORD))(v17 + 416))(v1751, *((unsigned int *)v56 + 11));
        v1516 = (*(__int64(__fastcall **)(char *, char *))(v17 + 464))(v1751, v1752);
        LODWORD(v1516) = _xgetbv(0);
        v1518 = v1516 | (v1517 << 32);
        (*(void(__fastcall **)(char *))(v17 + 408))(v1752);
        v1519 = *((_QWORD *)v56 + 4);
        v1520 = v1518 & *((_QWORD *)v56 + 3);
        if( v1520 == v1519 )
          goto LABEL_238;
        v243 = *((_QWORD *)v56 + 5);
        if( *(_DWORD *)(v17 + 2296) )
          goto LABEL_238;
        *(_QWORD *)(*(_QWORD *)(v17 + 1424) + 24i64) = v1520 ^ v1519;
        v108 = *(_DWORD *)(v17 + 2296);
        goto LABEL_457;
      }
      if( v79 <= 42 )
      {
        *(_DWORD *)(v17 + 2088) += *((_DWORD *)v56 + 9);
        v1395 = *((unsigned int *)v56 + 9);
        v1396 = (_QWORD *)(v17 + *((unsigned int *)v56 + 8));
        v1397 = *(_DWORD *)(v17 + 2068);
        v1398 = v1396;
        v47 = *(_QWORD *)(v17 + 2072);
        v1399 = (char *)v1396;
        if( v1396 < (_QWORD *)((char *)v1396 + v1395) )
        {
          do
          {
            _mm_prefetchnta(v1399);
            v1399 += 64;
          }
          while( v1399 < (char *)v1396 + v1395 );
        }
        v1400 = *(_QWORD *)(v17 + 2072);
        v1401 = (unsigned int)v1395 >> 7;
        if( (unsigned int)v1395 >> 7 )
        {
          do
          {
            v1402 = 8i64;
            do
            {
              v1403 = v1398[1] ^ __ROL8__(*v1398 ^ v1400, v1397);
              v1398 += 2;
              v1400 = __ROL8__(v1403, v1397);
              --v1402;
            }
            while( v1402 );
            v1404 = (__ROL8__(v47 ^ ((char *)v1398 - (char *)v1396), 17) ^ v47 ^ ((char *)v1398 - (char *)v1396))
                  * (unsigned __int128)0x7010008004002001ui64;
            v1721 = *((_QWORD *)&v1404 + 1);
            v1397 = (BYTE8(v1404) ^ (unsigned __int8)(v1404 ^ v1397)) & 0x3F;
            if( !v1397 )
              LOBYTE(v1397) = 1;
            --v1401;
          }
          while( v1401 );
          v17 = (__int64)v1566;
        }
        v1405 = v1395 & 0x7F;
        if( v1405 >= 8 )
        {
          v1406 = (unsigned __int64)v1405 >> 3;
          do
          {
            v1400 = __ROL8__(*v1398++ ^ v1400, v1397);
            v1405 -= 8;
            --v1406;
          }
          while( v1406 );
        }
        for( ; v1405; --v1405 )
        {
          v1407 = *(unsigned __int8 *)v1398;
          v1398 = (_QWORD *)((char *)v1398 + 1);
          v1400 = __ROL8__(v1407 ^ v1400, v1397);
        }
        v1408 = *((_QWORD *)v56 + 3);
        if( v1400 == v1408 )
          goto LABEL_238;
        v1409 = *(_DWORD *)(v17 + 2296);
        if( !v1409 )
        {
          *(_QWORD *)(*(_QWORD *)(v17 + 1424) + 24i64) = v1400 ^ v1408;
          v1409 = *(_DWORD *)(v17 + 2296);
        }
        v1410 = v17 + *((unsigned int *)v56 + 8);
        if( v1409 )
          goto LABEL_238;
        *(_QWORD *)(v17 + 2304) = v17 - 0x5C5FC0A76E374B18i64;
        *(_QWORD *)(v17 + 2312) = v56 - 0x4C48B4211BBACBEBi64;
        *(_QWORD *)(v17 + 2320) = *(int *)v56;
        *(_QWORD *)(v17 + 2328) = v1410;
        goto LABEL_2327;
      }
      if( v79 == 43 )
        goto LABEL_2132;
      if( v79 != 44 )
      {
        if( v79 == 46 )
        {
          if( (*(_DWORD *)(v17 + 2096) & 1) != 0 )
            goto LABEL_238;
          v1166 = 0;
          v47 = *(_QWORD *)(v17 + 1352);
          (*(void(**)(void))(v17 + 376))();
          if( (*(_DWORD *)(v17 + 2448) & 0x40000000) != 0 || (v1167 = *(_DWORD *)(v17 + 2384), v1167 >= 7) )
          {
            (*(void(__fastcall **)(_QWORD, _QWORD))(v17 + 296))(*(_QWORD *)(v17 + 2560), 0i64);
            v1168 = 0x80;
          }
          else
          {
            v1168 = 1 << v1167;
          }
          (*(void(__fastcall **)(unsigned __int64, _QWORD))(v17 + 312))(v47, 0i64);
          if( v1168 == (char)0x80 )
          {
            (*(void(__fastcall **)(_QWORD, _QWORD))(v17 + 304))(*(_QWORD *)(v17 + 2560), 0i64);
          }
          else
          {
            v1169 = *(volatile signed __int8 ***)(v17 + 1312);
            v1170 = *v1169;
            if( *v1169 != (volatile signed __int8 *)v1169 )
            {
              v1171 = ~v1168;
              do
              {
                _InterlockedAnd8(&v1170[*(_QWORD *)(v17 + 1720) - *(_QWORD *)(v17 + 1744)], v1171);
                v1170 = *(volatile signed __int8 **)v1170;
                ++v1166;
              }
              while( v1170 != (volatile signed __int8 *)v1169 );
            }
          }
          (*(void(__fastcall **)(_QWORD, _QWORD))(v17 + 320))(*(_QWORD *)(v17 + 1352), 0i64);
          (*(void(**)(void))(v17 + 384))();
          v1003 = v1166 << 7;
LABEL_1639:
          *(_DWORD *)(v17 + 2088) += v1003;
          goto LABEL_238;
        }
        if( v79 == 47 )
        {
          v1583 = *(_QWORD *)(*(_QWORD *)(v17 + 1704)
                            + *(_QWORD *)((char *)&KeGetCurrentPrcb()->_MxCsr + *(_QWORD *)(v17 + 1608))
                            + *(_QWORD *)(v17 + 1672));
          v1156 = (*(__int64(**)(void))(v17 + 1168))();
          if( v1156 == 0xFFFFFFFFi64 )
          {
            v1583 = 0i64;
            v1157 = *(_QWORD *)(v17 + 2440);
            if( !v1157 )
              goto LABEL_1897;
            v1158 = (*(__int64(__fastcall **)(__int64, __int64 *))(v17 + 1152))(v1157, &v1583);
            v1159 = v1583;
            if( v1158 < 0 )
              v1159 = 0i64;
            v1583 = v1159;
            if( !v1159 )
LABEL_1897:
              v1583 = (*(__int64(__fastcall **)(_QWORD))(v17 + 960))(0i64);
            *(_QWORD *)(v17 + 2440) = 0i64;
            v1160 = 0;
            if( !v1583 )
              goto LABEL_1906;
            LODWORD(v47) = 1;
            while( 1 )
            {
              ++v1160;
              if( (*(int(**)(void))(v17 + 928))() >= 0 )
              {
                (*(void(__fastcall **)(__int64, char *))(v17 + 1080))(v1583, v1771);
                v1156 = (*(__int64(**)(void))(v17 + 1168))();
                (*(void(__fastcall **)(char *))(v17 + 1088))(v1771);
                (*(void(__fastcall **)(__int64))(v17 + 936))(v1583);
                if( v1156 != 0xFFFFFFFFi64 || v1160 > 0x100 )
                  break;
              }
              v1583 = (*(__int64(__fastcall **)(__int64))(v17 + 960))(v1583);
              if( !v1583 )
                goto LABEL_1906;
            }
            *(_QWORD *)(v17 + 2440) = (*(__int64(__fastcall **)(__int64))(v17 + 1160))(v1583);
            (*(void(__fastcall **)(__int64))(v17 + 480))(v1583);
            if( v1156 == 0xFFFFFFFFi64 )
            {
LABEL_1906:
              *(_DWORD *)(v17 + 2088) += v1160 << 12;
              goto LABEL_238;
            }
          }
          else
          {
            LODWORD(v47) = 1;
          }
          if( (*(_DWORD *)(v17 + 2448) & 0x40000000) != 0 )
          {
            v1161 = *(_QWORD **)(v17 + 2688);
            v1162 = 48;
            v1163 = 6i64;
            do
            {
              v1162 -= 8;
              *v1161 = *(_QWORD *)v56;
              v56 += 8;
              ++v1161;
              --v1163;
            }
            while( v1163 );
            for( ; v1162; --v1162 )
            {
              v1164 = *v56++;
              *(_BYTE *)v1161 = v1164;
              v1161 = (_QWORD *)((char *)v1161 + 1);
            }
            v56 = *(char **)(v17 + 2688);
          }
          *((_QWORD *)v56 + 3) = v1156;
          v1165 = v1583;
          if( *(_DWORD *)(v17 + 2296) )
            goto LABEL_238;
          *(_QWORD *)(v17 + 2304) = v17 - 0x5C5FC0A76E374B18i64;
          *(_QWORD *)(v17 + 2312) = v56 - 0x4C48B4211BBACBEBi64;
          *(_QWORD *)(v17 + 2320) = *(int *)v56;
          *(_QWORD *)(v17 + 2328) = v1165;
          *(_DWORD *)(v17 + 2296) = 1;
          goto LABEL_460;
        }
        if( v79 != 48 )
          goto LABEL_2328;
        if( !*((_DWORD *)v56 + 4) )
          goto LABEL_238;
        if( (*(_DWORD *)(v17 + 2452) & 0x4000) != 0 )
        {
          v1102 = *(volatile signed __int32 **)(v17 + 1248);
          while( 1 )
          {
            _disable();
            if( !_interlockedbittestandset(v1102, (*(_DWORD *)(v17 + 2448) >> 10) & 0x1F) )
              break;
            _enable();
            _mm_pause();
          }
        }
        if( (*((_DWORD *)v56 + 6) & 1) == 0 )
        {
          v1103 = (_QWORD *)*((_QWORD *)v56 + 1);
          v1104 = *((unsigned int *)v56 + 4);
          v1105 = v1103;
          *(_DWORD *)(v17 + 2088) += v1104;
          v1106 = (char *)v1103;
          v1107 = *(_DWORD *)(v17 + 2068);
          v1108 = *(_QWORD *)(v17 + 2072);
          if( v1103 < (_QWORD *)((char *)v1103 + v1104) )
          {
            do
            {
              _mm_prefetchnta(v1106);
              v1106 += 64;
            }
            while( v1106 < (char *)v1103 + v1104 );
          }
          v1109 = *(_QWORD *)(v17 + 2072);
          v1110 = (unsigned int)v1104 >> 7;
          if( (unsigned int)v1104 >> 7 )
          {
            do
            {
              v1111 = 8i64;
              do
              {
                v1112 = v1105[1] ^ __ROL8__(*v1105 ^ v1109, v1107);
                v1105 += 2;
                v1109 = __ROL8__(v1112, v1107);
                --v1111;
              }
              while( v1111 );
              v1113 = (__ROL8__(v1108 ^ ((char *)v1105 - (char *)v1103), 17) ^ v1108 ^ (unsigned __int64)((char *)v1105 - (char *)v1103))
                    * (unsigned __int128)0x7010008004002001ui64;
              v1712 = *((_QWORD *)&v1113 + 1);
              v1107 = (BYTE8(v1113) ^ (unsigned __int8)(v1113 ^ v1107)) & 0x3F;
              if( !v1107 )
                LOBYTE(v1107) = 1;
              --v1110;
            }
            while( v1110 );
            v17 = (__int64)v1566;
          }
          v1114 = v1104 & 0x7F;
          if( v1114 >= 8 )
          {
            v1115 = (unsigned __int64)v1114 >> 3;
            do
            {
              v1109 = __ROL8__(*v1105++ ^ v1109, v1107);
              v1114 -= 8;
              --v1115;
            }
            while( v1115 );
          }
          for( ; v1114; --v1114 )
          {
            v1116 = *(unsigned __int8 *)v1105;
            v1105 = (_QWORD *)((char *)v1105 + 1);
            v1109 = __ROL8__(v1116 ^ v1109, v1107);
          }
          for( kk = v1109; ; LODWORD(v1109) = kk ^ v1109 )
          {
            kk >>= 31;
            if( !kk )
              break;
          }
          v1118 = v1109 & 0x7FFFFFFF;
          if( v1118 != *((_DWORD *)v56 + 5) )
          {
            if( !*(_DWORD *)v56 && *((_DWORD *)v56 + 6) )
              v50 = 1;
            v1119 = *((unsigned int *)v56 + 4);
            v1120 = *((_QWORD *)v56 + 1);
            if( *((_DWORD *)v56 + 4) )
            {
              v1121 = 64i64;
              if( (*(_DWORD *)(v17 + 2452) & 0x40) != 0 )
              {
                v1122 = KeGetCurrentIrql();
                __writecr8(2ui64);
                v1123 = v1120 & 0xFFFFFFFFFFFFF000ui64;
                v1796 = (v1120 + v1119 - 1) | 0xFFF;
                v1124 = (v1120 & 0xFFFFFFFFFFFFF000ui64) - 1;
                while( 1 )
                {
                  v1125 = v1122;
                  while( 1 )
                  {
                    v1126 = (*(__int64(__fastcall **)(unsigned __int64, _QWORD, __int64, _QWORD *))(v17 + 1128))(
                              v1123,
                              0i64,
                              v1121,
                              v1105);
                    if( v1126 != -1073741267 )
                      break;
                    if( v50 )
                      goto LABEL_1842;
                    if( v1122 > 1u )
                      goto LABEL_1840;
                    v1125 = v1122;
                    __writecr8(v1122);
                    KeGetCurrentIrql();
                    __writecr8(2ui64);
                  }
                  if( v1126 < 0 )
                    break;
LABEL_1840:
                  v1123 += 4096i64;
                  v1124 += 4096i64;
                  if( v1124 == v1796 )
                    goto LABEL_1841;
                }
LABEL_1842:
                v56 = v1565;
                __writecr8(v1125);
              }
            }
            v1127 = *((unsigned int *)v56 + 5);
LABEL_1844:
            v1128 = *(_DWORD *)(v17 + 2296);
            if( !v1128 )
            {
              *(_QWORD *)(*(_QWORD *)(v17 + 1424) + 24i64) = v1118 ^ v1127;
              v1128 = *(_DWORD *)(v17 + 2296);
            }
            v1129 = *((_QWORD *)v56 + 1);
            if( !v1128 )
            {
              LODWORD(v47) = 1;
              *(_QWORD *)(v17 + 2304) = v17 - 0x5C5FC0A76E374B18i64;
              *(_QWORD *)(v17 + 2312) = v56 - 0x4C48B4211BBACBEBi64;
              *(_QWORD *)(v17 + 2320) = *(int *)v56;
              *(_QWORD *)(v17 + 2328) = v1129;
              *(_DWORD *)(v17 + 2296) = 1;
              __b8(v17, 0i64);
              goto LABEL_1890;
            }
          }
LABEL_1889:
          LODWORD(v47) = 1;
LABEL_1890:
          if( (*(_DWORD *)(v17 + 2452) & 0x4000) != 0 )
          {
            _InterlockedAnd(*(volatile signed __int32 **)(v17 + 1248), ~(1 << ((*(_DWORD *)(v17 + 2448) >> 10) & 0x1F)));
            _enable();
          }
          goto LABEL_237;
        }
        if( *(_QWORD *)(v17 + 2432) )
        {
          v1130 = *(_DWORD *)(v17 + 2452);
          LOBYTE(v1131) = v1130;
          if( !*(_DWORD *)(v17 + 2084) )
          {
            v1131 = v1130 ^ ((unsigned __int8)v1130 ^ (unsigned __int8)(8 * v1130)) & 0x20;
            *(_DWORD *)(v17 + 2452) = v1131;
            goto LABEL_1852;
          }
          if( (((unsigned __int8)v1130 ^ (unsigned __int8)(v1130 >> 3)) & 4) == 0 )
          {
LABEL_1852:
            if( (v1131 & 4) != 0 )
            {
              v1132 = *((_QWORD *)v56 + 1) & 0xFFFFFFFFFFFFF000ui64;
              v1133 = ((*((_DWORD *)v56 + 2) & 0xFFF) + (unsigned __int64)*((unsigned int *)v56 + 4) + 4095) >> 12;
              if( v1133 )
              {
                LODWORD(v47) = 1;
                do
                {
                  --v1133;
                  if( (*(unsigned __int8(__fastcall **)(unsigned __int64))(v17 + 688))(v1132)
                    && !*(_DWORD *)(v17 + 2296) )
                  {
                    *(_QWORD *)(v17 + 2304) = v17 - 0x5C5FC0A76E374B18i64;
                    *(_QWORD *)(v17 + 2312) = v56 - 0x4C48B4211BBACBEBi64;
                    *(_QWORD *)(v17 + 2320) = *(int *)v56;
                    *(_QWORD *)(v17 + 2328) = v1132;
                    *(_DWORD *)(v17 + 2296) = 1;
                    __b8(v17, 0i64);
                  }
                  *(_DWORD *)(v17 + 2088) += 256;
                  v1132 += 4096i64;
                }
                while( v1133 );
                goto LABEL_1890;
              }
            }
            else
            {
              v1134 = (_QWORD *)*((_QWORD *)v56 + 1);
              v1135 = *((unsigned int *)v56 + 4);
              v1136 = v1134;
              *(_DWORD *)(v17 + 2088) += v1135;
              v1137 = (char *)v1134;
              v1138 = *(_DWORD *)(v17 + 2068);
              v1139 = *(_QWORD *)(v17 + 2072);
              if( v1134 < (_QWORD *)((char *)v1134 + v1135) )
              {
                do
                {
                  _mm_prefetchnta(v1137);
                  v1137 += 64;
                }
                while( v1137 < (char *)v1134 + v1135 );
              }
              v1140 = *(_QWORD *)(v17 + 2072);
              v1141 = (unsigned int)v1135 >> 7;
              if( (unsigned int)v1135 >> 7 )
              {
                do
                {
                  v1142 = 8i64;
                  do
                  {
                    v1143 = v1136[1] ^ __ROL8__(*v1136 ^ v1140, v1138);
                    v1136 += 2;
                    v1140 = __ROL8__(v1143, v1138);
                    --v1142;
                  }
                  while( v1142 );
                  v1144 = (__ROL8__(v1139 ^ ((char *)v1136 - (char *)v1134), 17) ^ v1139 ^ (unsigned __int64)((char *)v1136 - (char *)v1134))
                        * (unsigned __int128)0x7010008004002001ui64;
                  v1713 = *((_QWORD *)&v1144 + 1);
                  v1138 = (BYTE8(v1144) ^ (unsigned __int8)(v1144 ^ v1138)) & 0x3F;
                  if( !v1138 )
                    LOBYTE(v1138) = 1;
                  --v1141;
                }
                while( v1141 );
                v17 = (__int64)v1566;
              }
              v1145 = v1135 & 0x7F;
              if( v1145 >= 8 )
              {
                v1146 = (unsigned __int64)v1145 >> 3;
                do
                {
                  v1140 = __ROL8__(*v1136++ ^ v1140, v1138);
                  v1145 -= 8;
                  --v1146;
                }
                while( v1146 );
              }
              for( ; v1145; --v1145 )
              {
                v1147 = *(unsigned __int8 *)v1136;
                v1136 = (_QWORD *)((char *)v1136 + 1);
                v1140 = __ROL8__(v1147 ^ v1140, v1138);
              }
              for( mm = v1140; ; LODWORD(v1140) = mm ^ v1140 )
              {
                mm >>= 31;
                if( !mm )
                  break;
              }
              v1127 = *((unsigned int *)v56 + 5);
              v1118 = v1140 & 0x7FFFFFFF;
              if( v1118 != (_DWORD)v1127 )
              {
                v1149 = *((unsigned int *)v56 + 4);
                v1150 = *((_QWORD *)v56 + 1);
                if( !*((_DWORD *)v56 + 4) || (*(_DWORD *)(v17 + 2452) & 0x40) == 0 )
                  goto LABEL_1844;
                v1151 = KeGetCurrentIrql();
                __writecr8(2ui64);
                v1152 = v1150 & 0xFFFFFFFFFFFFF000ui64;
                v1153 = (v1150 + v1149 - 1) | 0xFFF;
                v1154 = (v1150 & 0xFFFFFFFFFFFFF000ui64) - 1;
                do
                {
                  v1125 = v1151;
                  while( 1 )
                  {
                    v1155 = (*(__int64(__fastcall **)(unsigned __int64, _QWORD))(v17 + 1128))(v1152, 0i64);
                    if( v1155 != -1073741267 )
                      break;
                    if( v1151 > 1u )
                      goto LABEL_1886;
                    v1125 = v1151;
                    __writecr8(v1151);
                    KeGetCurrentIrql();
                    __writecr8(2ui64);
                  }
                  if( v1155 < 0 )
                    goto LABEL_1842;
LABEL_1886:
                  v1152 += 4096i64;
                  v1154 += 4096i64;
                }
                while( v1154 != v1153 );
LABEL_1841:
                __writecr8(v1125);
              }
            }
            goto LABEL_1889;
          }
        }
        *(_DWORD *)(v17 + 2084) = 0;
        goto LABEL_1889;
      }
      v1172 = *((_DWORD *)v56 + 8);
      v1571 = v17;
      if( (v1172 & 2) == 0 )
        goto LABEL_1991;
      if( !*(_QWORD *)(v17 + 2432) )
        goto LABEL_1736;
      v1173 = *(_DWORD *)(v17 + 2452);
      if( (v1173 & 4) != 0 )
        goto LABEL_1736;
      if( (v1172 & 2) != 0 )
      {
        v1174 = *(_DWORD *)(v17 + 2452);
        if( *(_DWORD *)(v17 + 2084) )
        {
          if( (((unsigned __int8)v1173 ^ (unsigned __int8)(v1173 >> 3)) & 4) != 0 )
            goto LABEL_1736;
        }
        else
        {
          v1174 = v1173 ^ ((unsigned __int8)v1173 ^ (unsigned __int8)(8 * v1173)) & 0x20;
          *(_DWORD *)(v17 + 2452) = v1174;
        }
        if( !*(_QWORD *)(v17 + 2432) )
          goto LABEL_1990;
        LOBYTE(v1175) = v1174;
        if( !*(_DWORD *)(v17 + 2084) )
        {
          v1175 = v1174 ^ ((unsigned __int8)v1174 ^ (unsigned __int8)(8 * v1174)) & 0x20;
          *(_DWORD *)(v17 + 2452) = v1175;
          goto LABEL_1939;
        }
        if( (((unsigned __int8)v1174 ^ (unsigned __int8)(v1174 >> 3)) & 4) != 0 )
        {
LABEL_1990:
          *(_DWORD *)(v17 + 2084) = 0;
          goto LABEL_1977;
        }
LABEL_1939:
        if( (v1175 & 4) != 0 )
        {
          v1176 = *((_QWORD *)v56 + 1) & 0xFFFFFFFFFFFFF000ui64;
          v1177 = (*((unsigned int *)v56 + 4) + (unsigned __int64)(*((_DWORD *)v56 + 2) & 0xFFF) + 4095) >> 12;
          if( v1177 )
          {
            LODWORD(v47) = 1;
            do
            {
              --v1177;
              if( (*(unsigned __int8(__fastcall **)(unsigned __int64))(v17 + 688))(v1176) && !*(_DWORD *)(v17 + 2296) )
              {
                *(_QWORD *)(v17 + 2304) = v17 - 0x5C5FC0A76E374B18i64;
                *(_QWORD *)(v17 + 2312) = v56 - 0x4C48B4211BBACBEBi64;
                *(_QWORD *)(v17 + 2320) = *(int *)v56;
                *(_QWORD *)(v17 + 2328) = v1176;
                *(_DWORD *)(v17 + 2296) = 1;
                __b8(v17, 0i64);
              }
              *(_DWORD *)(v17 + 2088) += 256;
              v1176 += 4096i64;
            }
            while( v1177 );
          }
          goto LABEL_1977;
        }
        v1178 = (_QWORD *)*((_QWORD *)v56 + 1);
        v1179 = *((unsigned int *)v56 + 4);
        v1180 = v1178;
        *(_DWORD *)(v17 + 2088) += v1179;
        v1181 = (char *)v1178;
        v1182 = *(_DWORD *)(v17 + 2068);
        v47 = *(_QWORD *)(v17 + 2072);
        if( v1178 < (_QWORD *)((char *)v1178 + v1179) )
        {
          do
          {
            _mm_prefetchnta(v1181);
            v1181 += 64;
          }
          while( v1181 < (char *)v1178 + v1179 );
        }
        v1183 = *(_QWORD *)(v17 + 2072);
        v1184 = (unsigned int)v1179 >> 7;
        if( (unsigned int)v1179 >> 7 )
        {
          do
          {
            v1185 = 8i64;
            do
            {
              v1186 = v1183 ^ *v1180;
              v1187 = v1180[1];
              v1180 += 2;
              v1183 = __ROL8__(__ROL8__(v1186, v1182) ^ v1187, v1182);
              --v1185;
            }
            while( v1185 );
            v1188 = __ROL8__(v47 ^ ((char *)v1180 - (char *)v1178), 17) ^ v47 ^ ((char *)v1180 - (char *)v1178);
            v1714 = (v1188 * (unsigned __int128)0x7010008004002001ui64) >> 64;
            v1182 = ((unsigned __int8)(v1714 ^ v1188) ^ (unsigned __int8)v1182) & 0x3F;
            if( !v1182 )
              LOBYTE(v1182) = 1;
            --v1184;
          }
          while( v1184 );
          v17 = (__int64)v1566;
        }
        v1189 = v1179 & 0x7F;
        if( v1189 >= 8 )
        {
          v1190 = (unsigned __int64)v1189 >> 3;
          do
          {
            v1183 = __ROL8__(*v1180++ ^ v1183, v1182);
            v1189 -= 8;
            --v1190;
          }
          while( v1190 );
        }
        if( v1189 )
        {
          do
          {
            v1191 = *(unsigned __int8 *)v1180;
            v1180 = (_QWORD *)((char *)v1180 + 1);
            v1183 = __ROL8__(v1191 ^ v1183, v1182);
            --v1189;
          }
          while( v1189 );
          v17 = (__int64)v1566;
        }
        for( nn = v1183; ; LODWORD(v1183) = nn ^ v1183 )
        {
          nn >>= 31;
          if( !nn )
            break;
        }
        v1193 = *((_DWORD *)v56 + 5);
        v1194 = v1183 & 0x7FFFFFFF;
        if( v1194 != v1193 )
        {
          v1195 = *((unsigned int *)v56 + 4);
          v1196 = *((_QWORD *)v56 + 1);
          if( *((_DWORD *)v56 + 4) && (*(_DWORD *)(v17 + 2452) & 0x40) != 0 )
          {
            v1197 = KeGetCurrentIrql();
            __writecr8(2ui64);
            v1198 = v1196 & 0xFFFFFFFFFFFFF000ui64;
            v1199 = (v1196 + v1195 - 1) | 0xFFF;
            v1200 = (v1196 & 0xFFFFFFFFFFFFF000ui64) - 1;
            while( 1 )
            {
              v47 = v1197;
              while( 1 )
              {
                v1201 = (*(__int64(__fastcall **)(unsigned __int64, _QWORD))(v17 + 1128))(v1198, 0i64);
                if( v1201 != -1073741267 )
                  break;
                if( v1197 > 1u )
                  goto LABEL_1974;
                v47 = v1197;
                __writecr8(v1197);
                KeGetCurrentIrql();
                __writecr8(2ui64);
              }
              if( v1201 < 0 )
                break;
LABEL_1974:
              v1198 += 4096i64;
              v1200 += 4096i64;
              if( v1200 == v1199 )
                goto LABEL_1975;
            }
            __writecr8(v47);
            v56 = v1565;
            v50 = 0;
            v1193 = *((_DWORD *)v1565 + 5);
          }
          v1205 = *(_DWORD *)(v17 + 2296);
          if( !v1205 )
          {
            v1206 = v1193 ^ (unsigned __int64)v1194;
            goto LABEL_1987;
          }
          goto LABEL_1988;
        }
      }
      else
      {
LABEL_1991:
        v1208 = (_QWORD *)*((_QWORD *)v56 + 1);
        v1209 = *((unsigned int *)v56 + 4);
        v1210 = v1208;
        *(_DWORD *)(v17 + 2088) += v1209;
        v1211 = (char *)v1208;
        v1212 = *(_DWORD *)(v17 + 2068);
        v47 = *(_QWORD *)(v17 + 2072);
        if( v1208 < (_QWORD *)((char *)v1208 + v1209) )
        {
          do
          {
            _mm_prefetchnta(v1211);
            v1211 += 64;
          }
          while( v1211 < (char *)v1208 + v1209 );
        }
        v1213 = *(_QWORD *)(v17 + 2072);
        v1214 = (unsigned int)v1209 >> 7;
        if( (unsigned int)v1209 >> 7 )
        {
          do
          {
            v1215 = 8i64;
            do
            {
              v1216 = v1210[1] ^ __ROL8__(*v1210 ^ v1213, v1212);
              v1210 += 2;
              v1213 = __ROL8__(v1216, v1212);
              --v1215;
            }
            while( v1215 );
            v1217 = __ROL8__(v47 ^ ((char *)v1210 - (char *)v1208), 17) ^ v47 ^ ((char *)v1210 - (char *)v1208);
            v1715 = (v1217 * (unsigned __int128)0x7010008004002001ui64) >> 64;
            v1212 = ((unsigned __int8)(v1715 ^ v1217) ^ (unsigned __int8)v1212) & 0x3F;
            if( !v1212 )
              LOBYTE(v1212) = 1;
            --v1214;
          }
          while( v1214 );
          v17 = (__int64)v1566;
        }
        v1218 = v1209 & 0x7F;
        if( v1218 >= 8 )
        {
          v1219 = (unsigned __int64)v1218 >> 3;
          do
          {
            v1213 = __ROL8__(*v1210++ ^ v1213, v1212);
            v1218 -= 8;
            --v1219;
          }
          while( v1219 );
        }
        for( ; v1218; --v1218 )
        {
          v1220 = *(unsigned __int8 *)v1210;
          v1210 = (_QWORD *)((char *)v1210 + 1);
          v1213 = __ROL8__(v1220 ^ v1213, v1212);
        }
        for( i1 = v1213; ; LODWORD(v1213) = i1 ^ v1213 )
        {
          i1 >>= 31;
          if( !i1 )
            break;
        }
        v1222 = v1213 & 0x7FFFFFFF;
        if( v1222 == *((_DWORD *)v56 + 5) )
        {
LABEL_1976:
          v50 = 0;
          goto LABEL_1977;
        }
        if( !*(_DWORD *)v56 && *((_DWORD *)v56 + 6) )
          v50 = 1;
        v1223 = *((unsigned int *)v56 + 4);
        v1224 = *((_QWORD *)v56 + 1);
        if( *((_DWORD *)v56 + 4) )
        {
          v1225 = 64i64;
          if( (*(_DWORD *)(v17 + 2452) & 0x40) != 0 )
          {
            v1226 = KeGetCurrentIrql();
            __writecr8(2ui64);
            v1227 = v1224 & 0xFFFFFFFFFFFFF000ui64;
            v1798 = (v1224 + v1223 - 1) | 0xFFF;
            v1228 = (v1224 & 0xFFFFFFFFFFFFF000ui64) - 1;
            while( 1 )
            {
              v47 = v1226;
              while( 1 )
              {
                v1229 = (*(__int64(__fastcall **)(unsigned __int64, _QWORD, __int64, _QWORD *))(v17 + 1128))(
                          v1227,
                          0i64,
                          v1225,
                          v1210);
                if( v1229 != -1073741267 )
                  break;
                if( v50 )
                  goto LABEL_2023;
                if( v1226 > 1u )
                  goto LABEL_2021;
                v47 = v1226;
                __writecr8(v1226);
                KeGetCurrentIrql();
                __writecr8(2ui64);
              }
              if( v1229 < 0 )
                break;
LABEL_2021:
              v1227 += 4096i64;
              v1228 += 4096i64;
              if( v1228 == v1798 )
              {
LABEL_1975:
                __writecr8(v47);
                v56 = v1565;
                goto LABEL_1976;
              }
            }
LABEL_2023:
            __writecr8(v47);
            v56 = v1565;
          }
        }
        v1205 = *(_DWORD *)(v17 + 2296);
        v50 = 0;
        if( !v1205 )
        {
          v1206 = *((unsigned int *)v56 + 5) ^ (unsigned __int64)v1222;
LABEL_1987:
          *(_QWORD *)(*(_QWORD *)(v17 + 1424) + 24i64) = v1206;
          v1205 = *(_DWORD *)(v17 + 2296);
        }
LABEL_1988:
        v1207 = *((_QWORD *)v56 + 1);
        if( !v1205 )
        {
          *(_QWORD *)(v17 + 2304) = v17 - 0x5C5FC0A76E374B18i64;
          *(_QWORD *)(v17 + 2312) = v56 - 0x4C48B4211BBACBEBi64;
          *(_QWORD *)(v17 + 2320) = *(int *)v56;
          *(_QWORD *)(v17 + 2328) = v1207;
          *(_DWORD *)(v17 + 2296) = 1;
          __b8(v17, 0i64);
        }
      }
LABEL_1977:
      if( (*((_DWORD *)v56 + 8) & 1) == 0 )
        goto LABEL_238;
      v1202 = *((_QWORD *)v56 + 3);
      v1203 = (*(__int64(__fastcall **)(__int64))(v17 + 504))(v1202);
      v47 = v1203 + *(unsigned __int16 *)(v1203 + 20) + 24i64;
      v1567 = v47 + 40i64 * *(unsigned __int16 *)(v1203 + 6);
      if( v47 == v1567 )
        goto LABEL_238;
      v1204 = *(_DWORD *)(v17 + 2084);
      if( !v1204 )
      {
        *(_DWORD *)(v17 + 2084) = 4096;
        v1204 = 4096;
      }
      v1797 = v1202 == *(_QWORD *)(v17 + 1512) || v1202 == *(_QWORD *)(v17 + 1520);
      while( 2 )
      {
        v1230 = *(_DWORD *)(v47 + 16);
        v1231 = *(_DWORD *)(v47 + 12);
        if( v1230 <= *(_DWORD *)(v47 + 8) )
          v1230 = *(_DWORD *)(v47 + 8);
        v1232 = (v1230 + v1231 + 4095) & 0xFFFFF000;
        if( v1204 >= v1232 )
          goto LABEL_2046;
        if( (*(_DWORD *)(v47 + 36) & 0x2000000) != 0 )
          goto LABEL_2045;
        v1233 = *(_DWORD *)v47;
        if( *(_DWORD *)v47 == 1414090313 && *(_DWORD *)(v47 + 4) == 1195525195 )
          goto LABEL_2045;
        if( v1233 == 1162297680 )
        {
          v1234 = *(_WORD *)(v47 + 4);
          if( v1234 == 30839 || v1234 == 29303 || v1234 == 30583 )
            goto LABEL_2045;
        }
        if( v1233 == 1095914053 && *(_WORD *)(v47 + 4) == 16724 )
          goto LABEL_2045;
        if( v1571 )
        {
          v1235 = *(char **)(v1571 + 2352);
          *((_QWORD *)&v1649 + 1) = *(_QWORD *)(v1571 + 2360);
          v1650 = *(_OWORD *)(v1571 + 2368);
          *(_QWORD *)&v1649 = v1235;
        }
        else
        {
          v1649 = *(_OWORD *)VfExcludeSections;
          v1235 = VfExcludeSections[0];
          v1650 = *(_OWORD *)off_140C0EFE0;
        }
        v1236 = 7;
        v1237 = (unsigned __int8 *)v47;
        while( 1 )
        {
          v1238 = *v1237++;
          v1239 = (unsigned __int8)*v1235++;
          if( v1238 != v1239 )
            break;
          if( !--v1236 )
            goto LABEL_2045;
        }
        v1242 = (__int64 *)*((_QWORD *)&v1649 + 1);
        v1243 = 8;
        v1244 = (__int64 *)v47;
        do
        {
          v1245 = *v1244++;
          v1246 = *v1242++;
          if( v1245 != v1246 )
            goto LABEL_2056;
          v1243 -= 8;
        }
        while( v1243 >= 8 );
        if( !v1243 )
          goto LABEL_2045;
        while( 1 )
        {
          v1247 = *(unsigned __int8 *)v1244;
          v1244 = (__int64 *)((char *)v1244 + 1);
          v1248 = *(unsigned __int8 *)v1242;
          v1242 = (__int64 *)((char *)v1242 + 1);
          if( v1247 != v1248 )
            break;
          if( !--v1243 )
            goto LABEL_2045;
        }
LABEL_2056:
        v1249 = (unsigned __int8 *)v1650;
        v1250 = 4;
        v1251 = (unsigned __int8 *)v47;
        while( 1 )
        {
          v1252 = *v1251++;
          v1253 = *v1249++;
          if( v1252 != v1253 )
            break;
          if( !--v1250 )
            goto LABEL_2045;
        }
        v1254 = (unsigned __int8 *)*((_QWORD *)&v1650 + 1);
        v1255 = 6;
        v1256 = (unsigned __int8 *)v47;
        while( 1 )
        {
          v1257 = *v1256++;
          v1258 = *v1254++;
          if( v1257 != v1258 )
            break;
          if( !--v1255 )
            goto LABEL_2045;
        }
        v1259 = *(_DWORD *)(v47 + 36);
        if( v1259 < 0 || (v1259 & 0x20000000) == 0 )
        {
LABEL_2045:
          v1204 = v1232;
LABEL_2046:
          v1240 = (unsigned int *)v1571;
          goto LABEL_2047;
        }
        v1260 = 1;
        if( v1797 && *(_DWORD *)v47 != 778396769 && *(_DWORD *)v47 != 1162297680 )
          v1260 = 0;
        v1240 = (unsigned int *)v1571;
        if( v1204 >= v1231 )
          v1231 = v1204;
        v1204 = v1231;
LABEL_2073:
        v1261 = v1202 + v1204;
        if( (*((_BYTE *)v1240 + 2171) & 4) != 0 )
        {
          __asm
          {
            xbegin  $+6
            xend
          }
          ++v1240[527];
          v1240[522] += 256;
        }
        else
        {
          if( v1260 )
          {
            v1262 = (*((__int64(__fastcall **)(__int64 *, __int64))v1240 + 138))(&v1680, v1202 + v1204);
            if( v1262 < 0 )
            {
              if( v1262 == -1073741819 )
              {
                v1263 = (int *)v1565;
                if( (*((_DWORD *)v1565 + 8) & 4) == 0 || *(int *)(v47 + 36) < 0 )
                {
                  v1240 = (unsigned int *)v1571;
                  if( *(_DWORD *)(v1571 + 2296) )
                    goto LABEL_2083;
                  *(_QWORD *)(v1571 + 2304) = v1571 - 0x5C5FC0A76E374B18i64;
                  *((_QWORD *)v1240 + 289) = (char *)v1263 - 0x4C48B4211BBACBEBi64;
                  *((_QWORD *)v1240 + 290) = *v1263;
                  *((_QWORD *)v1240 + 291) = v1261;
                  v1240[574] = 1;
                  __b8((__int64)v1240, 0i64);
                }
              }
              v1240 = (unsigned int *)v1571;
              goto LABEL_2083;
            }
          }
          else
          {
            v1680 = 0i64;
            v1682 = 0;
            v1684 = 4096;
            v1681 = 8 * ((((unsigned __int64)(v1261 & 0xFFF) + 0x1FFF) >> 12) + 6);
            v1683 = v1261 & 0xFFFFFFFFFFFFF000ui64;
            v1685 = v1261 & 0xFFF;
            v1716 = (*((__int64(__fastcall **)(__int64))v1240 + 139))(v1202 + v1204);
            v1686 = v1716 >> 12;
          }
          v1265 = v1571;
          ++*(_DWORD *)(v1571 + 2112);
          *(_QWORD *)(v1265 + 2664) = v1683 + v1685;
          *(_QWORD *)(v1265 + 2656) = v1565;
          v1266 = KeGetCurrentIrql();
          __writecr8(2ui64);
          RtlInitMinimalBarrier((_DWORD *)(v1265 + 2624), **(_DWORD **)(v1265 + 1528));
          v1240 = (unsigned int *)(*(__int64(__fastcall **)(signed __int64))(v1571 + 1096))(v1571 + *(unsigned int *)(v1571 + 2036));
          v1571 = (signed __int64)v1240;
          __writecr8(v1266);
          if( v1260 )
          {
            (*((void(__fastcall **)(__int64 *, _QWORD))v1240 + 140))(&v1680, 0i64);
            v1240 = (unsigned int *)v1571;
          }
          v1240[522] += 81920;
        }
LABEL_2083:
        v1264 = v1240[522];
        v1204 += 4096;
        if( v1204 >= v1232 || v1264 >= (int)v1240[523] )
        {
          if( v1264 >= (int)v1240[523] )
          {
            v1241 = v1567;
            goto LABEL_2087;
          }
LABEL_2047:
          v1241 = v1567;
          v47 += 40i64;
          if( v47 == v1567 )
          {
LABEL_2087:
            v17 = (__int64)v1566;
            if( v47 == v1241 && v1204 >= v1232 )
            {
              v50 = 0;
              v1240[521] = 0;
              goto LABEL_238;
            }
            v1240[521] = v1204;
            goto LABEL_237;
          }
          continue;
        }
        goto LABEL_2073;
      }
    }
    if( v79 == 28 )
    {
      v727 = *((unsigned int *)v56 + 4);
      if( !(_DWORD)v727 )
      {
        v1665 = v56 + 48;
        v728 = *((_WORD *)v56 + 20);
        v1564 = &v1601;
        v1664[0] = v728;
        v1664[1] = v728;
        v729 = *(_QWORD *)(v17 + 1296);
        v730 = *(int(__fastcall **)(__int16 *, _QWORD, _QWORD, _QWORD, __int64, _DWORD, _QWORD, __int64 *))(v17 + 488);
        LOBYTE(v1563) = 0;
        if( v730(v1664, 0i64, 0i64, 0i64, v729, v1563, 0i64, &v1601) < 0 )
          goto LABEL_238;
        if( (*(_DWORD *)(v1601 + 16) & 0x10) == 0 )
          goto LABEL_341;
        (*(void(__fastcall **)(_QWORD, char *))(v17 + 512))(*(_QWORD *)(v17 + 488), v1769);
        if( v1770 )
        {
          v731 = *(__int64(**)(void))(v17 + 504);
          v49 = v1770;
          v1599 = v1770;
          v732 = v731();
          if( v732 )
          {
            v52 = *(_DWORD *)(v732 + 80);
            v1596 = v52;
          }
        }
        (*(void(__fastcall **)(_QWORD, char *))(v17 + 512))(*((_QWORD *)v56 + 3), v1765);
        if( v1766 && (v733 = *(__int64(**)(void))(v17 + 504), v51 = v1766, v1594 = v1766, (v734 = v733()) != 0) )
        {
          v735 = *(_DWORD *)(v734 + 80);
          v1590 = v735;
        }
        else
        {
          v735 = v1590;
        }
        LODWORD(v47) = 0x40000000;
        if( (*(_DWORD *)(v17 + 2448) & 0x40000000) == 0 )
        {
          *((_QWORD *)v56 + 1) = v1601 + 112;
          *((_DWORD *)v56 + 4) = 224;
        }
        v736 = 0;
        v737 = v52;
        do
        {
          v738 = *(_QWORD *)(v1601 + 8i64 * v736 + 112);
          if( (!v52 || v738 < v49 || v738 > v52 + v49 - 1) && (!v735 || v738 < v51 || v738 > v51 + v735 - 1i64) )
          {
            if( (*(_DWORD *)(v17 + 2448) & 0x40000000) != 0 )
            {
              v774 = *(_QWORD **)(v17 + 2688);
              v775 = 48;
              v776 = 6i64;
              do
              {
                v775 -= 8;
                *v774 = *(_QWORD *)v56;
                v56 += 8;
                ++v774;
                --v776;
              }
              while( v776 );
              v50 = 0;
              if( v775 )
              {
                do
                {
                  v777 = *v56++;
                  *(_BYTE *)v774 = v777;
                  v774 = (_QWORD *)((char *)v774 + 1);
                  --v775;
                }
                while( v775 );
                v17 = (__int64)v1566;
              }
              v56 = *(char **)(v17 + 2688);
            }
            else
            {
              v50 = 0;
            }
            *((_QWORD *)v56 + 4) = v738;
            v778 = *(_QWORD *)(v17 + 1424);
            *(_QWORD *)v778 = v56;
            *(_DWORD *)(v778 + 16) = 48;
            v779 = *((_QWORD *)v56 + 1);
            if( *(_DWORD *)(v17 + 2296) )
              goto LABEL_238;
            *(_QWORD *)(v17 + 2304) = v17 - 0x5C5FC0A76E374B18i64;
            *(_QWORD *)(v17 + 2312) = v56 - 0x4C48B4211BBACBEBi64;
            *(_QWORD *)(v17 + 2320) = *(int *)v56;
            *(_QWORD *)(v17 + 2328) = v779;
            *(_DWORD *)(v17 + 2296) = 1;
            goto LABEL_460;
          }
          ++v736;
        }
        while( v736 < 0x1Cu );
        if( (*(_DWORD *)(v17 + 2448) & 0x40000000) != 0 )
        {
          (*(void(__fastcall **)(__int64))(v17 + 480))(v1601);
          goto LABEL_237;
        }
        v739 = (_QWORD *)*((_QWORD *)v56 + 1);
        v740 = *((unsigned int *)v56 + 4);
        v741 = v739;
        *(_DWORD *)(v17 + 2088) += v740;
        v742 = (char *)v739;
        v743 = *(_DWORD *)(v17 + 2068);
        v744 = *(_QWORD *)(v17 + 2072);
        if( v739 < (_QWORD *)((char *)v739 + v740) )
        {
          do
          {
            _mm_prefetchnta(v742);
            v742 += 64;
          }
          while( v742 < (char *)v739 + v740 );
        }
        v745 = *(_QWORD *)(v17 + 2072);
        v746 = (unsigned int)v740 >> 7;
        if( (unsigned int)v740 >> 7 )
        {
          do
          {
            v747 = 8i64;
            do
            {
              v748 = v741[1] ^ __ROL8__(*v741 ^ v745, v743);
              v741 += 2;
              v745 = __ROL8__(v748, v743);
              --v747;
            }
            while( v747 );
            v749 = (__ROL8__(v744 ^ ((char *)v741 - (char *)v739), 17) ^ v744 ^ (unsigned __int64)((char *)v741
                                                                                                 - (char *)v739))
                 * (unsigned __int128)0x7010008004002001ui64;
            v1701 = *((_QWORD *)&v749 + 1);
            v743 = ((unsigned __int8)(v749 ^ BYTE8(v749)) ^ (unsigned __int8)v743) & 0x3F;
            if( !v743 )
              LOBYTE(v743) = 1;
            --v746;
          }
          while( v746 );
          v17 = (__int64)v1566;
          v49 = v1599;
        }
        v750 = v740 & 0x7F;
        if( v750 >= 8 )
        {
          v751 = (unsigned __int64)v750 >> 3;
          do
          {
            v745 = __ROL8__(*v741++ ^ v745, v743);
            v750 -= 8;
            --v751;
          }
          while( v751 );
        }
        LODWORD(v47) = 0;
        if( v750 )
        {
          do
          {
            v752 = *(unsigned __int8 *)v741;
            v741 = (_QWORD *)((char *)v741 + 1);
            v745 = __ROL8__(v752 ^ v745, v743);
            --v750;
          }
          while( v750 );
          v17 = (__int64)v1566;
        }
        for( i2 = v745; ; LODWORD(v745) = i2 ^ v745 )
        {
          i2 >>= 31;
          if( !i2 )
            break;
        }
        v754 = 0;
        *((_DWORD *)v56 + 5) = v745 & 0x7FFFFFFF;
        v755 = *(char **)(v1601 + 80);
        if( !v755 || (v754 = *(_DWORD *)v755, v756 = 0, (v757 = (unsigned int)(*(_DWORD *)v755 - 8) >> 3) == 0) )
        {
LABEL_1230:
          *(_DWORD *)(v17 + 2088) += v754;
          v759 = v755;
          v760 = *(_DWORD *)(v17 + 2068);
          v761 = v755;
          v47 = *(_QWORD *)(v17 + 2072);
          v762 = &v755[v754];
          if( v755 < v762 )
          {
            do
            {
              _mm_prefetchnta(v761);
              v761 += 64;
            }
            while( v761 < v762 );
          }
          v50 = 0;
          v763 = v754 >> 7;
          v764 = *(_QWORD *)(v17 + 2072);
          if( v754 >> 7 )
          {
            do
            {
              v765 = 8i64;
              do
              {
                v766 = v764 ^ *v759;
                v767 = v759[1];
                v759 += 2;
                v764 = __ROL8__(__ROL8__(v766, v760) ^ v767, v760);
                --v765;
              }
              while( v765 );
              v768 = __ROL8__(v47 ^ ((char *)v759 - v755), 17) ^ v47 ^ ((char *)v759 - v755);
              v1702 = (v768 * (unsigned __int128)0x7010008004002001ui64) >> 64;
              v760 = ((unsigned __int8)(v768 ^ v1702) ^ (unsigned __int8)v760) & 0x3F;
              if( !v760 )
                LOBYTE(v760) = 1;
              --v763;
            }
            while( v763 );
            v17 = (__int64)v1566;
          }
          v769 = v754 & 0x7F;
          if( v769 >= 8 )
          {
            v770 = (unsigned __int64)v769 >> 3;
            do
            {
              v764 = __ROL8__(*v759++ ^ v764, v760);
              v769 -= 8;
              --v770;
            }
            while( v770 );
          }
          if( v769 )
          {
            do
            {
              v771 = *(unsigned __int8 *)v759;
              v759 = (_QWORD *)((char *)v759 + 1);
              v764 = __ROL8__(v771 ^ v764, v760);
              --v769;
            }
            while( v769 );
            v17 = (__int64)v1566;
          }
          for( i3 = v764; ; LODWORD(v764) = i3 ^ v764 )
          {
            i3 >>= 31;
            if( !i3 )
              break;
          }
          *((_DWORD *)v56 + 11) = v764 & 0x7FFFFFFF;
          goto LABEL_238;
        }
        while( 1 )
        {
          v758 = *(_QWORD *)&v755[8 * v756 + 8];
          if( v758
            && (!v737 || v758 < v49 || v758 > v49 + v737 - 1)
            && (!v1590 || v758 < v1594 || v758 > v1590 + v1594 - 1) )
          {
            break;
          }
          if( ++v756 >= v757 )
            goto LABEL_1230;
        }
        *((_QWORD *)v56 + 4) = v758;
        v50 = 0;
        v773 = *(_QWORD *)(v17 + 1424);
        *(_QWORD *)v773 = v56;
        *(_DWORD *)(v773 + 16) = 48;
        if( *(_DWORD *)(v17 + 2296) )
          goto LABEL_238;
        *(_QWORD *)(v17 + 2304) = v17 - 0x5C5FC0A76E374B18i64;
        *(_QWORD *)(v17 + 2312) = v56 - 0x4C48B4211BBACBEBi64;
        *(_QWORD *)(v17 + 2320) = *(int *)v56;
        *(_QWORD *)(v17 + 2328) = v755;
LABEL_459:
        *(_DWORD *)(v17 + 2296) = 1;
LABEL_460:
        __b8(v17, 0i64);
        goto LABEL_238;
      }
      v780 = (_QWORD *)*((_QWORD *)v56 + 1);
      *(_DWORD *)(v17 + 2088) += v727;
      v781 = v780;
      v782 = *(_DWORD *)(v17 + 2068);
      v783 = (char *)v780;
      v784 = *(_QWORD *)(v17 + 2072);
      if( v780 < (_QWORD *)((char *)v780 + v727) )
      {
        do
        {
          _mm_prefetchnta(v783);
          v783 += 64;
        }
        while( v783 < (char *)v780 + v727 );
      }
      v785 = *(_QWORD *)(v17 + 2072);
      v786 = (unsigned int)v727 >> 7;
      if( (unsigned int)v727 >> 7 )
      {
        do
        {
          v787 = 8i64;
          do
          {
            v788 = v781[1] ^ __ROL8__(*v781 ^ v785, v782);
            v781 += 2;
            v785 = __ROL8__(v788, v782);
            --v787;
          }
          while( v787 );
          v789 = __ROL8__(v784 ^ ((char *)v781 - (char *)v780), 17) ^ v784 ^ ((char *)v781 - (char *)v780);
          v1703 = (v789 * (unsigned __int128)0x7010008004002001ui64) >> 64;
          v782 = ((unsigned __int8)(v1703 ^ v789) ^ (unsigned __int8)v782) & 0x3F;
          if( !v782 )
            LOBYTE(v782) = 1;
          --v786;
        }
        while( v786 );
        v17 = (__int64)v1566;
      }
      v790 = v727 & 0x7F;
      if( v790 >= 8 )
      {
        v791 = (unsigned __int64)v790 >> 3;
        do
        {
          v785 = __ROL8__(*v781++ ^ v785, v782);
          v790 -= 8;
          --v791;
        }
        while( v791 );
      }
      for( ; v790; --v790 )
      {
        v792 = *(unsigned __int8 *)v781;
        v781 = (_QWORD *)((char *)v781 + 1);
        v785 = __ROL8__(v792 ^ v785, v782);
      }
      for( i4 = v785; ; LODWORD(v785) = i4 ^ v785 )
      {
        i4 >>= 31;
        if( !i4 )
          break;
      }
      v794 = v785 & 0x7FFFFFFF;
      if( v794 == *((_DWORD *)v56 + 5) )
      {
LABEL_1293:
        v50 = 0;
      }
      else
      {
        if( !*(_DWORD *)v56 && *((_DWORD *)v56 + 6) )
          v50 = 1;
        v795 = *((unsigned int *)v56 + 4);
        v796 = *((_QWORD *)v56 + 1);
        if( *((_DWORD *)v56 + 4) )
        {
          v797 = 64i64;
          if( (*(_DWORD *)(v17 + 2452) & 0x40) != 0 )
          {
            v798 = KeGetCurrentIrql();
            __writecr8(2ui64);
            v799 = v796 & 0xFFFFFFFFFFFFF000ui64;
            v1786 = (v796 + v795 - 1) | 0xFFF;
            v800 = (v796 & 0xFFFFFFFFFFFFF000ui64) - 1;
            while( 1 )
            {
              v801 = v798;
              while( 1 )
              {
                v802 = (*(__int64(__fastcall **)(unsigned __int64, _QWORD, __int64, _QWORD *))(v17 + 1128))(
                         v799,
                         0i64,
                         v797,
                         v781);
                if( v802 != -1073741267 )
                  break;
                if( v50 )
                  goto LABEL_1312;
                if( v798 > 1u )
                  goto LABEL_1291;
                v801 = v798;
                __writecr8(v798);
                KeGetCurrentIrql();
                __writecr8(2ui64);
              }
              if( v802 < 0 )
                break;
LABEL_1291:
              v799 += 4096i64;
              v800 += 4096i64;
              if( v800 == v1786 )
              {
                __writecr8(v801);
                v56 = v1565;
                goto LABEL_1293;
              }
            }
LABEL_1312:
            __writecr8(v801);
            v56 = v1565;
          }
        }
        v819 = *(_DWORD *)(v17 + 2296);
        v50 = 0;
        if( !v819 )
        {
          *(_QWORD *)(*(_QWORD *)(v17 + 1424) + 24i64) = v794 ^ (unsigned __int64)*((unsigned int *)v56 + 5);
          v819 = *(_DWORD *)(v17 + 2296);
        }
        v820 = *((_QWORD *)v56 + 1);
        if( !v819 )
        {
          *(_QWORD *)(v17 + 2304) = v17 - 0x5C5FC0A76E374B18i64;
          *(_QWORD *)(v17 + 2312) = v56 - 0x4C48B4211BBACBEBi64;
          *(_QWORD *)(v17 + 2320) = *(int *)v56;
          *(_QWORD *)(v17 + 2328) = v820;
          *(_DWORD *)(v17 + 2296) = 1;
          __b8(v17, 0i64);
        }
      }
      v803 = 0;
      v1601 = *((_QWORD *)v56 + 1) - 112i64;
      v47 = *(_QWORD *)(v1601 + 80);
      if( v47 )
        v803 = *(_DWORD *)v47;
      *(_DWORD *)(v17 + 2088) += v803;
      v804 = (_QWORD *)v47;
      v805 = *(_DWORD *)(v17 + 2068);
      v806 = (char *)v47;
      v807 = *(_QWORD *)(v17 + 2072);
      v808 = v47 + v803;
      if( v47 < v808 )
      {
        do
        {
          _mm_prefetchnta(v806);
          v806 += 64;
        }
        while( (unsigned __int64)v806 < v808 );
      }
      v809 = *(_QWORD *)(v17 + 2072);
      v810 = v803 >> 7;
      if( v803 >> 7 )
      {
        do
        {
          v811 = 8i64;
          do
          {
            v812 = v809 ^ *v804;
            v813 = v804[1];
            v804 += 2;
            v809 = __ROL8__(__ROL8__(v812, v805) ^ v813, v805);
            --v811;
          }
          while( v811 );
          v814 = __ROL8__(v807 ^ ((unsigned __int64)v804 - v47), 17) ^ v807 ^ ((unsigned __int64)v804 - v47);
          v1704 = (v814 * (unsigned __int128)0x7010008004002001ui64) >> 64;
          v805 = ((unsigned __int8)(v1704 ^ v814) ^ (unsigned __int8)v805) & 0x3F;
          if( !v805 )
            LOBYTE(v805) = 1;
          --v810;
        }
        while( v810 );
        v17 = (__int64)v1566;
      }
      v815 = v803 & 0x7F;
      if( v815 >= 8 )
      {
        v816 = (unsigned __int64)v815 >> 3;
        do
        {
          v809 = __ROL8__(*v804++ ^ v809, v805);
          v815 -= 8;
          --v816;
        }
        while( v816 );
      }
      if( v815 )
      {
        do
        {
          v817 = *(unsigned __int8 *)v804;
          v804 = (_QWORD *)((char *)v804 + 1);
          v809 = __ROL8__(v817 ^ v809, v805);
          --v815;
        }
        while( v815 );
        v17 = (__int64)v1566;
      }
      for( i5 = v809; ; LODWORD(v809) = i5 ^ v809 )
      {
        i5 >>= 31;
        if( !i5 )
          break;
      }
      v821 = *((unsigned int *)v56 + 11);
      v822 = v809 & 0x7FFFFFFF;
      if( v822 == (_DWORD)v821 )
        goto LABEL_238;
      if( *(_DWORD *)(v17 + 2296) )
        goto LABEL_238;
      *(_QWORD *)(*(_QWORD *)(v17 + 1424) + 24i64) = v822 ^ v821;
      if( *(_DWORD *)(v17 + 2296) )
        goto LABEL_238;
      *(_QWORD *)(v17 + 2304) = v17 - 0x5C5FC0A76E374B18i64;
      *(_QWORD *)(v17 + 2312) = v56 - 0x4C48B4211BBACBEBi64;
      *(_QWORD *)(v17 + 2320) = *(int *)v56;
      *(_QWORD *)(v17 + 2328) = v47;
LABEL_1323:
      *(_DWORD *)(v17 + 2296) = 1;
      goto LABEL_460;
    }
    if( v79 > 12 )
    {
      if( v79 <= 14 )
      {
        if( v79 == 14 )
        {
          if( !*(_QWORD *)(v17 + 2432) )
            goto LABEL_1736;
          v684 = *(_DWORD *)(v17 + 2452);
          if( ((v684 >> 2) & 1) != 0 )
            goto LABEL_1736;
          if( *(_DWORD *)(v17 + 2084) )
          {
            if( ((v684 >> 5) & 1) != 0 )
              goto LABEL_1736;
          }
          else
          {
            *(_DWORD *)(v17 + 2452) = v684 ^ ((unsigned __int8)v684 ^ (unsigned __int8)(8 * v684)) & 0x20;
          }
        }
        v685 = (_QWORD *)*((_QWORD *)v56 + 1);
        v686 = *((unsigned int *)v56 + 4);
        v687 = v685;
        *(_DWORD *)(v17 + 2088) += v686;
        v688 = (char *)v685;
        v689 = *(_DWORD *)(v17 + 2068);
        v47 = *(_QWORD *)(v17 + 2072);
        if( v685 < (_QWORD *)((char *)v685 + v686) )
        {
          do
          {
            _mm_prefetchnta(v688);
            v688 += 64;
          }
          while( v688 < (char *)v685 + v686 );
        }
        v690 = *(_QWORD *)(v17 + 2072);
        v691 = (unsigned int)v686 >> 7;
        if( (unsigned int)v686 >> 7 )
        {
          do
          {
            v692 = 8i64;
            do
            {
              v693 = v690 ^ *v687;
              v694 = v687[1];
              v687 += 2;
              v690 = __ROL8__(__ROL8__(v693, v689) ^ v694, v689);
              --v692;
            }
            while( v692 );
            v695 = (__ROL8__(v47 ^ ((char *)v687 - (char *)v685), 17) ^ v47 ^ ((char *)v687 - (char *)v685))
                 * (unsigned __int128)0x7010008004002001ui64;
            v1700 = *((_QWORD *)&v695 + 1);
            v689 = ((unsigned __int8)(v695 ^ BYTE8(v695)) ^ (unsigned __int8)v689) & 0x3F;
            if( !v689 )
              LOBYTE(v689) = 1;
            --v691;
          }
          while( v691 );
          v17 = (__int64)v1566;
        }
        v696 = v686 & 0x7F;
        if( v696 >= 8 )
        {
          v697 = (unsigned __int64)v696 >> 3;
          do
          {
            v690 = __ROL8__(*v687++ ^ v690, v689);
            v696 -= 8;
            --v697;
          }
          while( v697 );
          v17 = (__int64)v1566;
        }
        for( ; v696; --v696 )
        {
          v698 = *(unsigned __int8 *)v687;
          v687 = (_QWORD *)((char *)v687 + 1);
          v690 = __ROL8__(v698 ^ v690, v689);
        }
        for( i6 = v690; ; LODWORD(v690) = i6 ^ v690 )
        {
          i6 >>= 31;
          if( !i6 )
            break;
        }
        v700 = v690 & 0x7FFFFFFF;
        if( v700 == *((_DWORD *)v56 + 5) )
          goto LABEL_1150;
        _InterlockedOr(v1562, 0);
        if( (*((_DWORD *)v56 + 6) & 1) != 0 )
        {
          if( **(_BYTE **)(v17 + 1408) )
            goto LABEL_1150;
        }
        v701 = *((unsigned int *)v56 + 4);
        v702 = *((_QWORD *)v56 + 1);
        if( *((_DWORD *)v56 + 4) )
        {
          v703 = 64i64;
          if( (*(_DWORD *)(v17 + 2452) & 0x40) != 0 )
          {
            v704 = KeGetCurrentIrql();
            __writecr8(2ui64);
            v705 = v702 & 0xFFFFFFFFFFFFF000ui64;
            v706 = (v702 + v701 - 1) | 0xFFF;
            v707 = (v702 & 0xFFFFFFFFFFFFF000ui64) - 1;
            while( 1 )
            {
              v47 = v704;
              while( 1 )
              {
                v708 = (*(__int64(__fastcall **)(unsigned __int64, _QWORD, __int64, _QWORD *))(v17 + 1128))(
                         v705,
                         0i64,
                         v703,
                         v687);
                if( v708 != -1073741267 )
                  break;
                if( v704 > 1u )
                  goto LABEL_1148;
                v47 = v704;
                __writecr8(v704);
                KeGetCurrentIrql();
                __writecr8(2ui64);
              }
              if( v708 < 0 )
                break;
LABEL_1148:
              v705 += 4096i64;
              v707 += 4096i64;
              if( v707 == v706 )
              {
                __writecr8(v47);
                v56 = v1565;
                v50 = 0;
LABEL_1150:
                if( (*(_DWORD *)(v17 + 2448) & 0x40000000) == 0 )
                  goto LABEL_238;
                v709 = *((_DWORD *)v56 + 4);
                if( !v709 )
                  goto LABEL_238;
                sub_1403E92DC(v17, *((_QWORD *)v56 + 1), v709, (__int64)v1744);
                v710 = 16;
                v711 = (__int64 *)(v56 + 28);
                v712 = v1744;
                do
                {
                  v713 = *(_QWORD *)v712;
                  v712 += 8;
                  v714 = *v711++;
                  if( v713 != v714 )
                    goto LABEL_1164;
                  v710 -= 8;
                }
                while( v710 >= 8 );
                if( !v710 )
                  goto LABEL_1179;
                while( 1 )
                {
                  v715 = (unsigned __int8)*v712++;
                  v716 = *(unsigned __int8 *)v711;
                  v711 = (__int64 *)((char *)v711 + 1);
                  if( v715 != v716 )
                    break;
                  if( !--v710 )
                    goto LABEL_1179;
                }
LABEL_1164:
                _InterlockedOr(v1562, 0);
                if( (*((_DWORD *)v56 + 6) & 1) == 0 || !**(_BYTE **)(v17 + 1408) )
                {
                  v719 = *((unsigned int *)v56 + 4);
                  v720 = *((_QWORD *)v56 + 1);
                  if( *((_DWORD *)v56 + 4) )
                  {
                    v721 = 64i64;
                    if( (*(_DWORD *)(v17 + 2452) & 0x40) != 0 )
                    {
                      LODWORD(v47) = KeGetCurrentIrql();
                      __writecr8(2ui64);
                      v722 = v720 & 0xFFFFFFFFFFFFF000ui64;
                      v723 = (v720 + v719 - 1) | 0xFFF;
                      v724 = (v720 & 0xFFFFFFFFFFFFF000ui64) - 1;
                      while( 1 )
                      {
                        v725 = (unsigned __int8)v47;
                        while( 1 )
                        {
                          v726 = (*(__int64(__fastcall **)(unsigned __int64, _QWORD, __int64, __int64 *))(v17 + 1128))(
                                   v722,
                                   0i64,
                                   v721,
                                   v711);
                          if( v726 != -1073741267 )
                            break;
                          if( (unsigned __int8)v47 > 1u )
                            goto LABEL_1174;
                          v725 = (unsigned __int8)v47;
                          __writecr8((unsigned __int8)v47);
                          KeGetCurrentIrql();
                          __writecr8(2ui64);
                        }
                        if( v726 < 0 )
                          break;
LABEL_1174:
                        v722 += 4096i64;
                        v724 += 4096i64;
                        if( v724 == v723 )
                        {
                          __writecr8(v725);
                          v50 = 0;
                          goto LABEL_1179;
                        }
                      }
                      __writecr8(v725);
                      v720 = *((_QWORD *)v56 + 1);
                      v50 = 0;
                    }
                  }
                  if( !*(_DWORD *)(v17 + 2296) )
                  {
                    *(_QWORD *)(v17 + 2304) = v17 - 0x5C5FC0A76E374B18i64;
                    *(_QWORD *)(v17 + 2312) = v56 - 0x4C48B4211BBACBEBi64;
                    *(_QWORD *)(v17 + 2320) = *(int *)v56;
                    *(_QWORD *)(v17 + 2328) = v720;
                    *(_DWORD *)(v17 + 2296) = 1;
                    __b8(v17, 0i64);
                  }
                }
LABEL_1179:
                v179 = 16 * *((_DWORD *)v56 + 4);
LABEL_2414:
                *(_DWORD *)(v17 + 2088) += v179;
                goto LABEL_238;
              }
            }
            __writecr8(v47);
            v56 = v1565;
            v50 = 0;
          }
        }
        v717 = *(_DWORD *)(v17 + 2296);
        if( !v717 )
        {
          *(_QWORD *)(*(_QWORD *)(v17 + 1424) + 24i64) = v700 ^ (unsigned __int64)*((unsigned int *)v56 + 5);
          v717 = *(_DWORD *)(v17 + 2296);
        }
        v718 = *((_QWORD *)v56 + 1);
        if( !v717 )
        {
          *(_QWORD *)(v17 + 2304) = v17 - 0x5C5FC0A76E374B18i64;
          *(_QWORD *)(v17 + 2312) = v56 - 0x4C48B4211BBACBEBi64;
          *(_QWORD *)(v17 + 2320) = *(int *)v56;
          *(_QWORD *)(v17 + 2328) = v718;
          *(_DWORD *)(v17 + 2296) = 1;
          __b8(v17, 0i64);
        }
        goto LABEL_1150;
      }
      if( v79 == 15 )
      {
        if( *(_DWORD *)(v17 + 2392) == 11 )
        {
          *(_DWORD *)(v17 + 2088) += 256;
          v47 = *(_QWORD *)(v17 + 1416);
          v679 = (*(__int64(__fastcall **)(unsigned __int64))(v17 + 728))(v47);
          if( v679 )
          {
            v680 = (*(__int64(__fastcall **)(__int64))(v17 + 736))(v679);
            v681 = *((_QWORD *)v56 + 3);
            v682 = v680;
            if( v681 )
            {
              if( v681 != v680 && !*(_DWORD *)(v17 + 2296) )
              {
                *(_QWORD *)(v17 + 2304) = v17 - 0x5C5FC0A76E374B18i64;
                *(_QWORD *)(v17 + 2312) = v56 - 0x4C48B4211BBACBEBi64;
                *(_QWORD *)(v17 + 2320) = *(int *)v56;
                *(_QWORD *)(v17 + 2328) = v680;
                *(_DWORD *)(v17 + 2296) = 1;
                __b8(v17, 0i64);
              }
            }
            else
            {
              v683 = *(_QWORD *)(v17 + 2424);
              if( (!*(_DWORD *)(v17 + 2420) || v680 < v683 || v680 > v683 + *(unsigned int *)(v17 + 2420) - 1i64)
                && !*(_DWORD *)(v17 + 2296) )
              {
                *(_QWORD *)(v17 + 2304) = v17 - 0x5C5FC0A76E374B18i64;
                *(_QWORD *)(v17 + 2312) = v56 - 0x4C48B4211BBACBEBi64;
                *(_QWORD *)(v17 + 2320) = *(int *)v56;
                *(_QWORD *)(v17 + 2328) = v680;
                *(_DWORD *)(v17 + 2296) = 1;
                __b8(v17, 0i64);
              }
              *((_QWORD *)v56 + 3) = v682;
            }
            (*(void(__fastcall **)(unsigned __int64, __int64))(v17 + 744))(v47, v679);
          }
        }
        goto LABEL_238;
      }
      if( v79 == 21 )
      {
        v672 = *((_DWORD *)v56 + 10);
        (*(void(__fastcall **)(char *, _QWORD))(v17 + 416))(v1742, *((unsigned int *)v56 + 11));
        v673 = (*(__int64(__fastcall **)(char *, char *))(v17 + 464))(v1742, v1762);
        if( v1773 == 38 )
        {
          LODWORD(v673) = _xgetbv(0);
          v675 = v673 | (v674 << 32);
        }
        else if( v672 )
        {
          v675 = __readcr4();
        }
        else
        {
          v675 = __readcr0();
        }
        (*(void(__fastcall **)(char *))(v17 + 408))(v1762);
        v676 = *((_QWORD *)v56 + 4);
        v677 = v675 & *((_QWORD *)v56 + 3);
        if( v677 == v676 )
          goto LABEL_238;
        v678 = *((_QWORD *)v56 + 5);
        if( *(_DWORD *)(v17 + 2296) )
          goto LABEL_238;
        *(_QWORD *)(*(_QWORD *)(v17 + 1424) + 24i64) = v677 ^ v676;
        if( *(_DWORD *)(v17 + 2296) )
          goto LABEL_238;
        *(_QWORD *)(v17 + 2304) = v17 - 0x5C5FC0A76E374B18i64;
        *(_QWORD *)(v17 + 2312) = v56 - 0x4C48B4211BBACBEBi64;
        *(_QWORD *)(v17 + 2320) = *(int *)v56;
        *(_QWORD *)(v17 + 2328) = v678;
        goto LABEL_459;
      }
      if( v79 != 24 )
      {
        if( v79 != 25 )
        {
          if( v79 == 26 )
          {
            if( (*(_DWORD *)(v17 + 2096) & 1) != 0 )
              goto LABEL_238;
            v266 = 0;
            v267 = *(_QWORD *)(v17 + 1448);
            v268 = *(_QWORD *)(v17 + 1352);
            v1567 = *(_QWORD *)(v17 + 1456);
            v269 = *(void(**)(void))(v17 + 376);
            v1780 = 0;
            v1569 = v267;
            v269();
            if( (*(_DWORD *)(v17 + 2448) & 0x40000000) != 0 || (v270 = *(_DWORD *)(v17 + 2384), v270 >= 7) )
            {
              (*(void(__fastcall **)(_QWORD, _QWORD))(v17 + 296))(*(_QWORD *)(v17 + 2560), 0i64);
              LOBYTE(v47) = 0x80;
            }
            else
            {
              LODWORD(v47) = 1;
              LOBYTE(v47) = 1 << v270;
            }
            (*(void(__fastcall **)(__int64, _QWORD))(v17 + 312))(v268, 0i64);
            v271 = *(volatile signed __int8 ***)(v17 + 1312);
            v272 = *v271;
            if( *v271 != (volatile signed __int8 *)v271 )
            {
              do
              {
                _InterlockedOr8(&v272[*(_QWORD *)(v17 + 1720) - *(_QWORD *)(v17 + 1744)], v47);
                v272 = *(volatile signed __int8 **)v272;
                ++v266;
              }
              while( v272 != (volatile signed __int8 *)v271 );
              v1780 = v266;
            }
            (*(void(__fastcall **)(__int64, _QWORD))(v17 + 312))(v267, 0i64);
            v273 = *(_QWORD ***)(v17 + 1440);
            v274 = *v273;
            if( *v273 != v273 )
            {
              v275 = v1567;
              v276 = (int *)v1565;
              do
              {
                v277 = (char *)v274 - *(_QWORD *)(v17 + 1856);
                if( v277 != (char *)v275 )
                {
                  v278 = *(_QWORD *)(v17 + 1720);
                  v279 = *(_QWORD *)&v277[*(_QWORD *)(v17 + 1848)];
                  if( ((unsigned __int8)v47 & *(_BYTE *)(v279 + v278)) == 0
                    && (*(_DWORD *)(v279 + *(_QWORD *)(v17 + 1728)) & *(_DWORD *)(v17 + 1752)) != 0
                    && !*(_DWORD *)(v17 + 2296) )
                  {
                    *(_QWORD *)(v17 + 2304) = v17 - 0x5C5FC0A76E374B18i64;
                    *(_QWORD *)(v17 + 2312) = (char *)v276 - 0x4C48B4211BBACBEBi64;
                    *(_QWORD *)(v17 + 2320) = *v276;
                    *(_QWORD *)(v17 + 2328) = v279;
                    *(_DWORD *)(v17 + 2296) = 1;
                    __b8(v17, 0i64);
                    v278 = *(_QWORD *)(v17 + 1720);
                  }
                  _InterlockedAnd8((volatile signed __int8 *)(v279 + v278), ~(_BYTE)v47);
                  v275 = v1567;
                }
                v274 = (_QWORD *)*v274;
              }
              while( v274 != v273 );
              v266 = v1780;
              v267 = v1569;
            }
            (*(void(__fastcall **)(__int64, _QWORD))(v17 + 320))(v267, 0i64);
            if( (_BYTE)v47 == 0x80 )
              (*(void(__fastcall **)(_QWORD, _QWORD))(v17 + 304))(*(_QWORD *)(v17 + 2560), 0i64);
            (*(void(__fastcall **)(_QWORD, _QWORD))(v17 + 320))(*(_QWORD *)(v17 + 1352), 0i64);
            (*(void(**)(void))(v17 + 384))();
            *(_DWORD *)(v17 + 2088) += v266 << 8;
            goto LABEL_237;
          }
          if( v79 == 27 )
          {
            if( (*(_DWORD *)(v17 + 2096) & 1) == 0 )
              goto LABEL_238;
            v244 = *(_QWORD *)(v17 + 1448);
            v245 = *(_QWORD *)(v17 + 1456);
            v246 = *(void(**)(void))(v17 + 376);
            v247 = *(_QWORD *)(v17 + 1352);
            v1572 = v244;
            v1569 = v245;
            v1568 = 0;
            v246();
            if( (*(_DWORD *)(v17 + 2448) & 0x40000000) != 0 || (v248 = *(_DWORD *)(v17 + 2384), v248 >= 7) )
            {
              (*(void(__fastcall **)(_QWORD, _QWORD))(v17 + 296))(*(_QWORD *)(v17 + 2560), 0i64);
              LOBYTE(v47) = 0x80;
            }
            else
            {
              LODWORD(v47) = 1;
              LOBYTE(v47) = 1 << v248;
            }
            v249 = *(void(__fastcall **)(__int64, _QWORD))(v17 + 312);
            LODWORD(v1570) = v47;
            v249(v247, 0i64);
            (*(void(__fastcall **)(unsigned __int64, _QWORD))(v17 + 312))(v244, 0i64);
            v250 = *(unsigned __int64 **)(v17 + 1440);
            v251 = 0i64;
            v1567 = 0i64;
            v252 = *v250;
            if( (unsigned __int64 *)*v250 != v250 )
            {
              do
              {
                if( v252 - 24 != v245 )
                {
                  v253 = *(_QWORD *)(v252 - 24 + *(_QWORD *)(v17 + 1848));
                  if( (*(_DWORD *)(v253 + *(_QWORD *)(v17 + 1728)) & *(_DWORD *)(v17 + 1752)) == 0 )
                  {
                    v254 = *(_QWORD *)(v252 - 24 + *(_QWORD *)(v17 + 1848));
                    if( v251 )
                      v254 = 1i64;
                    v251 = v254;
                  }
                  _InterlockedOr8((volatile signed __int8 *)(v253 + *(_QWORD *)(v17 + 1720)), v47);
                }
                v252 = *(_QWORD *)v252;
              }
              while( (unsigned __int64 *)v252 != v250 );
              v1567 = v251;
            }
            v255 = *(_QWORD ***)(v17 + 1312);
            v256 = *v255;
            if( *v255 != v255 )
            {
              v257 = v1568;
              v252 = (unsigned __int8)v47;
              v258 = ~(_BYTE)v47;
              v259 = v1569;
              v1779 = v252;
              do
              {
                v260 = (char *)v256 - *(_QWORD *)(v17 + 1744);
                v261 = *(_QWORD *)(v17 + 1720);
                if( (v260[v261] & (unsigned int)v252) == 0 )
                {
                  v262 = *(_QWORD *)&v260[*(_QWORD *)(v17 + 1736)];
                  if( v262 && v262 != v259 && !*(_DWORD *)(v17 + 2296) )
                  {
                    v263 = (int *)v1565;
                    *(_QWORD *)(v17 + 2304) = v17 - 0x5C5FC0A76E374B18i64;
                    *(_QWORD *)(v17 + 2312) = (char *)v263 - 0x4C48B4211BBACBEBi64;
                    *(_QWORD *)(v17 + 2320) = *v263;
                    *(_QWORD *)(v17 + 2328) = v260;
                    *(_DWORD *)(v17 + 2296) = 1;
                    __b8(v17, 0i64);
                    v261 = *(_QWORD *)(v17 + 1720);
                  }
                  v252 = v1779;
                }
                _InterlockedAnd8(&v260[v261], v258);
                v256 = (_QWORD *)*v256;
                ++v257;
              }
              while( v256 != v255 );
              LODWORD(v47) = v1570;
              v245 = v1569;
              v1568 = v257;
              v251 = v1567;
            }
            v50 = 0;
            if( v251 )
            {
              if( v251 == 1 )
              {
                v264 = *(_QWORD ***)(v17 + 1440);
                for( i7 = *v264; i7 != v264; i7 = (_QWORD *)*i7 )
                {
                  v252 = (unsigned __int64)(i7 - 3);
                  if( i7 - 3 != (_QWORD *)v245 )
                  {
                    v252 = *(_QWORD *)(v252 + *(_QWORD *)(v17 + 1848));
                    _InterlockedAnd8((volatile signed __int8 *)(v252 + *(_QWORD *)(v17 + 1720)), ~(_BYTE)v47);
                  }
                }
              }
              else
              {
                _InterlockedAnd8((volatile signed __int8 *)(*(_QWORD *)(v17 + 1720) + v251), ~(_BYTE)v47);
              }
            }
            (*(void(__fastcall **)(unsigned __int64, _QWORD, unsigned __int64))(v17 + 320))(v1572, 0i64, v252);
            if( (_BYTE)v47 == 0x80 )
              (*(void(__fastcall **)(_QWORD, _QWORD))(v17 + 304))(*(_QWORD *)(v17 + 2560), 0i64);
            (*(void(__fastcall **)(_QWORD, _QWORD))(v17 + 320))(*(_QWORD *)(v17 + 1352), 0i64);
            (*(void(**)(void))(v17 + 384))();
            v179 = v1568 << 8;
            goto LABEL_2414;
          }
LABEL_2328:
          v1411 = v79 - 2;
          if( v1411 )
          {
            v1412 = v1411 - 1;
            if( v1412 )
            {
              if( v1412 != 20 )
              {
                if( *(_DWORD *)(v17 + 2296) )
                  goto LABEL_238;
                *(_QWORD *)(v17 + 2304) = v17 - 0x5C5FC0A76E374B18i64;
                *(_QWORD *)(v17 + 2312) = v56 - 0x4C48B4211BBACBEBi64;
                *(_QWORD *)(v17 + 2320) = 257i64;
                *(_QWORD *)(v17 + 2328) = 0i64;
LABEL_2327:
                *(_DWORD *)(v17 + 2296) = 1;
                goto LABEL_460;
              }
              (*(void(__fastcall **)(char *, _QWORD))(v17 + 416))(v1745, *((unsigned int *)v56 + 10));
              (*(void(__fastcall **)(char *, char *))(v17 + 464))(v1745, v1746);
              v1413 = *(_QWORD *)(v17 + 2576);
              if( v1413 )
              {
                v1414 = *(_DWORD *)(v1413 + 800);
                v1413 = *(_QWORD *)(v17 + 2576);
              }
              else
              {
                v1415 = __readmsr(0x832u);
                v1414 = v1415;
              }
              if( v1413 )
              {
                v1416 = *(_DWORD *)(v1413 + 832);
              }
              else
              {
                v1417 = __readmsr(0x834u);
                v1416 = v1417;
              }
              (*(void(__fastcall **)(char *))(v17 + 408))(v1746);
              if( (*(_BYTE *)(v17 + 2171) & 0x10) != 0 )
              {
                _disable();
                v1418 = *(_QWORD *)(v17 + 2272);
                v1419 = 38i64;
                v1420 = 304;
                v1421 = (_QWORD *)v1418;
                LODWORD(v47) = 1;
                do
                {
                  *v1421 = 0i64;
                  v1420 -= 8;
                  ++v1421;
                  --v1419;
                }
                while( v1419 );
                for( ; v1420; --v1420 )
                {
                  *(_BYTE *)v1421 = 0;
                  v1421 = (_QWORD *)((char *)v1421 + 1);
                }
                *(_OWORD *)(v1418 + 16) = *(_OWORD *)(v17 + 2120);
                *(_OWORD *)(v1418 + 32) = *(_OWORD *)(v17 + 2136);
                *(_OWORD *)(v1418 + 288) = *(_OWORD *)(v17 + 2152);
                v1652[0] = 303;
                *(_QWORD *)&v1652[1] = v1418;
                *(_WORD *)(v1418 + 16) = v17 + 2168;
                v1722 = v17 + 2168;
                *(_WORD *)(v1418 + 22) = (unsigned int)(v17 + 2168) >> 16;
                *(_DWORD *)(v1418 + 24) = (unsigned __int64)(v17 + 2168) >> 32;
                __sidt(v1677);
                __lidt(v1652);
                if( (*(_DWORD *)(v17 + 2452) & 0x20000) == 0 )
                {
                  CurrentPrcb = KeGetCurrentPrcb();
                  **(_QWORD **)(v17 + 1216) = v17 - 0x5C5FC0A76E374B18i64;
                  **(_QWORD **)(v17 + 1224) = CurrentPrcb;
                  **(_QWORD **)(v17 + 1232) = 0i64;
                  **(_QWORD **)(v17 + 1240) = 277i64;
                }
                KiErrata361Present();
                if( (*(_DWORD *)(v17 + 2452) & 0x20000) == 0 )
                {
                  **(_QWORD **)(v17 + 1216) = 0xA3A03F5891C8B4E8ui64;
                  **(_QWORD **)(v17 + 1224) = 0i64;
                  **(_QWORD **)(v17 + 1232) = 0i64;
                  **(_QWORD **)(v17 + 1240) = 0i64;
                }
                __lidt(v1677);
                _enable();
              }
              else
              {
                LODWORD(v47) = 1;
              }
              v1423 = *((unsigned int *)v56 + 6);
              if( (v1414 & *((_DWORD *)v56 + 7)) != (_DWORD)v1423
                || (v1414 & 0x10000) == 0 && (_BYTE)v1414 != 0xD1 && (unsigned __int8)(v1414 + 3) > 1u )
              {
                v1424 = v1423 | ((unsigned __int64)*((unsigned int *)v56 + 10) << 48) | 0x32000000000i64;
                if( !*(_DWORD *)(v17 + 2296) )
                {
                  *(_QWORD *)(*(_QWORD *)(v17 + 1424) + 24i64) = v1423 ^ v1414;
                  if( !*(_DWORD *)(v17 + 2296) )
                  {
                    *(_QWORD *)(v17 + 2304) = v17 - 0x5C5FC0A76E374B18i64;
                    *(_QWORD *)(v17 + 2312) = v56 - 0x4C48B4211BBACBEBi64;
                    *(_QWORD *)(v17 + 2320) = *(int *)v56;
                    *(_QWORD *)(v17 + 2328) = v1424;
                    *(_DWORD *)(v17 + 2296) = 1;
                    __b8(v17, 0i64);
                  }
                }
              }
              v1425 = *((unsigned int *)v56 + 8);
              if( (v1416 & *((_DWORD *)v56 + 9)) != (_DWORD)v1425
                || (v1416 & 0x10000) == 0 && (_BYTE)v1416 != 0xD1 && (unsigned __int8)(v1416 + 3) > 1u )
              {
                v1426 = v1425 | ((unsigned __int64)*((unsigned int *)v56 + 10) << 48) | 0x34000000000i64;
                if( !*(_DWORD *)(v17 + 2296) )
                {
                  *(_QWORD *)(*(_QWORD *)(v17 + 1424) + 24i64) = v1425 ^ v1416;
                  if( !*(_DWORD *)(v17 + 2296) )
                  {
                    *(_QWORD *)(v17 + 2304) = v17 - 0x5C5FC0A76E374B18i64;
                    *(_QWORD *)(v17 + 2312) = v56 - 0x4C48B4211BBACBEBi64;
                    *(_QWORD *)(v17 + 2320) = *(int *)v56;
                    *(_QWORD *)(v17 + 2328) = v1426;
                    *(_DWORD *)(v17 + 2296) = 1;
                    goto LABEL_2411;
                  }
                }
              }
              goto LABEL_2413;
            }
            (*(void(__fastcall **)(char *, _QWORD))(v17 + 416))(v1747, *((unsigned int *)v56 + 10));
            (*(void(__fastcall **)(char *, char *))(v17 + 464))(v1747, v1748);
            KiGetGdtIdt(&v1638, v1764);
            v1427 = v1639;
            v1428 = *((unsigned int *)v56 + 4);
            if( (*(_BYTE *)(v17 + 2171) & 2) != 0 )
            {
              v1429 = *(_QWORD *)(v17 + 2272);
              v1430 = 38i64;
              v1431 = 304;
              v1432 = (_QWORD *)v1429;
              do
              {
                *v1432 = 0i64;
                v1431 -= 8;
                ++v1432;
                --v1430;
              }
              while( v1430 );
              for( ; v1431; --v1431 )
              {
                *(_BYTE *)v1432 = 0;
                v1432 = (_QWORD *)((char *)v1432 + 1);
              }
              *(_OWORD *)(v1429 + 16) = *(_OWORD *)(v17 + 2120);
              *(_OWORD *)(v1429 + 32) = *(_OWORD *)(v17 + 2136);
              *(_OWORD *)(v1429 + 288) = *(_OWORD *)(v17 + 2152);
              v1653[0] = 303;
              *(_QWORD *)&v1653[1] = v1429;
              *(_WORD *)(v1429 + 16) = v17 + 2168;
              v1743 = v17 + 2168;
              *(_WORD *)(v1429 + 22) = (unsigned int)(v17 + 2168) >> 16;
              *(_DWORD *)(v1429 + 24) = (unsigned __int64)(v17 + 2168) >> 32;
              _disable();
              __sidt(v1678);
              __lidt(v1653);
              __writedr(7u, 0i64);
              *(_WORD *)(v1429 + 16) = v17 + 2174;
              *(_WORD *)(v1429 + 22) = (unsigned int)(v17 + 2174) >> 16;
              *(_DWORD *)(v1429 + 24) = (unsigned __int64)(v17 + 2174) >> 32;
              if( (*(_BYTE *)(v17 + 2171) & 0x20) != 0 )
              {
                *(_WORD *)(v17 + 2218) = KiGetSs();
                __writedr(0, v17 + 2218);
                __writedr(7u, 0x70001ui64);
                LODWORD(v1434) = KiErrataSkx55Present(v17 + 2218);
                *(_QWORD *)(v17 + 2280) = v1434;
                __writedr(7u, 0i64);
                __writedr(0, 0i64);
              }
              else
              {
                LODWORD(v1433) = KiErrata704Present();
                *(_QWORD *)(v17 + 2280) = v1433;
              }
              *(_DWORD *)(v17 + 2288) = KeGetPcr()->Prcb.Number;
              __lidt(v1678);
              _enable();
            }
            Ldtr = KiGetLdtr();
            Tr = KiGetTr();
            *(_DWORD *)(v17 + 2088) += v1428;
            v1437 = v1427 + v1428;
            v1438 = *(unsigned int *)(v17 + 2068);
            v1439 = Tr;
            v1440 = *(_QWORD *)(v17 + 2072);
            v1441 = (_QWORD *)v1427;
            v1799 = Tr;
            v1442 = (char *)v1427;
            if( v1427 < (unsigned __int64)(v1427 + v1428) )
            {
              do
              {
                _mm_prefetchnta(v1442);
                v1442 += 64;
              }
              while( (unsigned __int64)v1442 < v1437 );
            }
            v1443 = *(_QWORD *)(v17 + 2072);
            v1444 = (unsigned int)v1428 >> 7;
            if( (unsigned int)v1428 >> 7 )
            {
              do
              {
                v1445 = 8i64;
                do
                {
                  v1446 = v1443 ^ *v1441;
                  v1447 = v1441[1];
                  v1441 += 2;
                  v1443 = __ROL8__(__ROL8__(v1446, v1438) ^ v1447, v1438);
                  --v1445;
                }
                while( v1445 );
                v1448 = __ROL8__(v1440 ^ ((unsigned __int64)v1441 - v1427), 17) ^ v1440 ^ ((unsigned __int64)v1441
                                                                                         - v1427);
                v1437 = (v1448 * (unsigned __int128)0x7010008004002001ui64) >> 64;
                v1724 = v1437;
                v1438 = ((unsigned __int8)v1437 ^ (unsigned __int8)(v1448 ^ v1438)) & 0x3F;
                if( !(_DWORD)v1438 )
                  v1438 = 1i64;
                --v1444;
              }
              while( v1444 );
              v17 = (__int64)v1566;
              v1439 = v1799;
            }
            v1449 = v1428 & 0x7F;
            if( v1449 >= 8 )
            {
              v1437 = (unsigned __int64)v1449 >> 3;
              do
              {
                v1443 = __ROL8__(*v1441++ ^ v1443, v1438);
                v1449 -= 8;
                --v1437;
              }
              while( v1437 );
            }
            LODWORD(v47) = 0;
            if( v1449 )
            {
              do
              {
                v1450 = *(unsigned __int8 *)v1441;
                v1441 = (_QWORD *)((char *)v1441 + 1);
                v1443 = __ROL8__(v1450 ^ v1443, v1438);
                --v1449;
              }
              while( v1449 );
              v17 = (__int64)v1566;
            }
            for( i8 = v1443; ; LODWORD(v1443) = i8 ^ v1443 )
            {
              i8 >>= 31;
              if( !i8 )
                break;
            }
            v1452 = v1443 & 0x7FFFFFFF;
            (*(void(__fastcall **)(char *, unsigned __int64, _QWORD *, __int64))(v17 + 408))(
              v1748,
              v1437,
              v1441,
              v1438);
            if( v1452 == *((_DWORD *)v56 + 5) && v1638 == *((_WORD *)v56 + 22) && !Ldtr && v1439 == 64 )
            {
              v50 = 0;
              goto LABEL_2413;
            }
            if( (*(_DWORD *)(v17 + 2448) & 0x40000000) != 0 )
            {
              v1453 = *(_QWORD **)(v17 + 2688);
              v1454 = 48;
              v1455 = 6i64;
              do
              {
                v1454 -= 8;
                *v1453 = *(_QWORD *)v56;
                v56 += 8;
                ++v1453;
                --v1455;
              }
              while( v1455 );
              if( v1454 )
              {
                do
                {
                  v1456 = *v56++;
                  *(_BYTE *)v1453 = v1456;
                  v1453 = (_QWORD *)((char *)v1453 + 1);
                  --v1454;
                }
                while( v1454 );
                v17 = (__int64)v1566;
              }
              v56 = *(char **)(v17 + 2688);
            }
            *((_QWORD *)v56 + 3) = v1639;
            *((_QWORD *)v56 + 4) = v1452;
            if( Ldtr )
            {
              v1457 = Ldtr;
              goto LABEL_2406;
            }
            if( v1439 != 64 )
            {
              v1457 = v1439;
LABEL_2406:
              *((_QWORD *)v56 + 3) = v1457;
            }
            v1458 = *(_DWORD *)(v17 + 2296);
            v50 = 0;
            if( !v1458 )
            {
              *(_QWORD *)(*(_QWORD *)(v17 + 1424) + 24i64) = v1452 ^ (unsigned __int64)*((unsigned int *)v56 + 5);
              v1458 = *(_DWORD *)(v17 + 2296);
            }
            v1459 = *((_QWORD *)v56 + 1);
            if( !v1458 )
            {
              *(_QWORD *)(v17 + 2304) = v17 - 0x5C5FC0A76E374B18i64;
              *(_QWORD *)(v17 + 2312) = v56 - 0x4C48B4211BBACBEBi64;
              *(_QWORD *)(v17 + 2320) = *(int *)v56;
              *(_QWORD *)(v17 + 2328) = v1459;
              *(_DWORD *)(v17 + 2296) = 1;
LABEL_2411:
              __b8(v17, 0i64);
            }
LABEL_2413:
            v179 = 0x8000;
            goto LABEL_2414;
          }
          v1460 = *((unsigned int *)v56 + 10);
          v1461 = *(void(__fastcall **)(char *, __int64))(v17 + 416);
          LODWORD(v1577) = 0;
          v1461(v1749, v1460);
          (*(void(__fastcall **)(char *, char *))(v17 + 464))(v1749, v1750);
          KiGetGdtIdt(v1763, &v1654);
          v1462 = 0;
          v1581 = v1655;
          v1463 = v1655 + 4;
          v1567 = v1655 + 4;
          v1568 = 0;
          while( 2 )
          {
            v1464 = 0i64;
            v1606 = *(_QWORD *)(v17 + 2248);
            v1465 = 0i64;
            v1466 = *(_QWORD *)(v17 + 2256);
            v1467 = *(unsigned int *)(v17 + 2224);
            v1570 = 0i64;
            v1468 = *(unsigned int *)(v17 + 2220);
            v1569 = 0i64;
            v1469 = KeGetCurrentIrql();
            __writecr8(0xFui64);
            v1470 = *(_WORD *)v1463;
            LOWORD(v1600) = *(_WORD *)(v1463 - 4);
            WORD1(v1600) = *(_WORD *)(v1463 + 2);
            v1471 = *(_DWORD *)(v1463 + 4);
            v1472 = *(_QWORD *)(v17 + 1560);
            HIDWORD(v1600) = v1471;
            v1473 = v1600;
            v1800 = v1470;
            v1474 = v1472 + 8i64 * v1462;
            if( v1600 == v1474 )
            {
              if( (v1470 & 0x6000) != 0 )
              {
                __writecr8(v1469);
                goto LABEL_2423;
              }
              v1465 = *(_QWORD *)(*(__int64(__fastcall **)(_QWORD, __int64, _QWORD))(v17 + 1136))(v1462, v1474, 0i64);
              if( v1465 )
              {
                v1475 = *(_QWORD *)(v1468 + v1465);
                v1570 = v1475;
                if( v1568 < 0x30 )
                {
                  __writecr8(v1469);
LABEL_2422:
                  v1464 = v1570;
LABEL_2423:
                  v1476 = *(_QWORD *)(v17 + 1424);
                  *(_QWORD *)v1476 = v1473;
                  *(_DWORD *)(v1476 + 16) = 128;
                  if( v1464 )
                  {
                    v1477 = *(_QWORD *)(v17 + 1424);
                    *(_QWORD *)(v1477 + 8) = v1464;
                    *(_DWORD *)(v1477 + 20) = 128;
                  }
                  LODWORD(v1577) = 1;
                  goto LABEL_2442;
                }
                v1478 = *(_QWORD *)(v1467 + v1465);
LABEL_2430:
                __writecr8(v1469);
                if( !v1465 )
                {
                  if( v1473 < v1606 )
                    goto LABEL_2422;
                  if( v1473 > v1466 )
                    goto LABEL_2422;
                  v1479 = (*(__int64(__fastcall **)(_QWORD, unsigned __int64, _QWORD))(v17 + 528))(
                            *(_QWORD *)(v17 + 2264),
                            v1606,
                            (unsigned int)(v1600 - v1606));
                  if( !v1479 || (*(_DWORD *)(v1479 + 36) & 0x2000000) != 0 )
                    goto LABEL_2422;
                }
                if( *(_WORD *)(v1567 - 2) != 16 || (*(_WORD *)v1567 & 0x1F00) != 3584 || *(__int16 *)v1567 >= 0 )
                  goto LABEL_2422;
                v1480 = (unsigned int *)(*(__int64(__fastcall **)(unsigned __int64, unsigned __int64 *, _QWORD))(v17 + 608))(
                                          v1473,
                                          &v1606,
                                          0i64);
                if( v1480 && v1606 + *v1480 == v1473 && v1606 == *(_QWORD *)(v17 + 2248) )
                {
                  if( !v1465 )
                    goto LABEL_2442;
                }
                else if( !v1465 )
                {
                  goto LABEL_2422;
                }
                if( (v1800 & 0x6000) != 0 )
                  goto LABEL_2422;
                if( v1465 != -1 )
                {
                  v1500 = (unsigned int *)(*(__int64(__fastcall **)(__int64, unsigned __int64 *, _QWORD))(v17 + 608))(
                                            v1475,
                                            &v1606,
                                            0i64);
                  if( !v1500 )
                    goto LABEL_2422;
                  if( v1606 + *v1500 != v1475 )
                    goto LABEL_2422;
                  if( v1606 != *(_QWORD *)(v17 + 2248) )
                    goto LABEL_2422;
                  v1501 = (*(__int64(__fastcall **)(_QWORD, unsigned __int64, _QWORD))(v17 + 528))(
                            *(_QWORD *)(v17 + 2264),
                            v1606,
                            (unsigned int)(v1475 - v1606));
                  if( !v1501
                    || (*(_DWORD *)(v1501 + 36) & 0x2000000) != 0
                    || v1568 == 254 && v1478 != *(_QWORD *)(v17 + 2232) )
                  {
                    goto LABEL_2422;
                  }
                }
LABEL_2442:
                v1462 = v1568 + 1;
                v1463 = v1567 + 16;
                v1568 = v1462;
                v1567 += 16i64;
                if( v1462 > 0xFF )
                {
                  if( (*(_BYTE *)(v17 + 2171) & 1) != 0 )
                  {
                    _disable();
                    v1481 = 3221225602i64;
                    v1482 = __readmsr(0xC0000082);
                    v1483 = (unsigned __int64)(v17 + 2170) >> 32;
                    __writemsr(0xC0000082, v17 + 2170);
                    if( (*(_DWORD *)(v17 + 2452) & 0x20000) == 0 )
                    {
                      v1484 = KeGetCurrentPrcb();
                      v1483 = v17 - 0x5C5FC0A76E374B18i64;
                      **(_QWORD **)(v17 + 1216) = v17 - 0x5C5FC0A76E374B18i64;
                      **(_QWORD **)(v17 + 1224) = v1484;
                      **(_QWORD **)(v17 + 1232) = 3221225602i64;
                      v1481 = *(_QWORD *)(v17 + 1240);
                      *(_QWORD *)v1481 = 274i64;
                    }
                    ((void(__fastcall *)(__int64, unsigned __int64))(v17 + 2172))(v1481, v1483);
                    if( (*(_DWORD *)(v17 + 2452) & 0x20000) == 0 )
                    {
                      **(_QWORD **)(v17 + 1216) = 0xA3A03F5891C8B4E8ui64;
                      **(_QWORD **)(v17 + 1224) = 0i64;
                      **(_QWORD **)(v17 + 1232) = 0i64;
                      **(_QWORD **)(v17 + 1240) = 0i64;
                    }
                    __writemsr(0xC0000082, v1482);
                    _enable();
                  }
                  v47 = v1581;
                  *(_DWORD *)(v17 + 2088) += 848;
                  v1485 = (_QWORD *)v47;
                  v1486 = *(_DWORD *)(v17 + 2088);
                  v1487 = (char *)v47;
                  v1488 = *(_DWORD *)(v17 + 2068);
                  v1489 = *(_QWORD *)(v17 + 2072);
                  if( v47 < v47 + 848 )
                  {
                    do
                    {
                      _mm_prefetchnta(v1487);
                      v1487 += 64;
                    }
                    while( (unsigned __int64)v1487 < v47 + 848 );
                  }
                  v1490 = *(_QWORD *)(v17 + 2072);
                  v1491 = 6;
                  do
                  {
                    v1492 = 8i64;
                    do
                    {
                      v1493 = v1485[1] ^ __ROL8__(*v1485 ^ v1490, v1488);
                      v1485 += 2;
                      v1490 = __ROL8__(v1493, v1488);
                      --v1492;
                    }
                    while( v1492 );
                    v1494 = (__ROL8__(v1489 ^ ((unsigned __int64)v1485 - v47), 17) ^ v1489 ^ ((unsigned __int64)v1485
                                                                                            - v47))
                          * (unsigned __int128)0x7010008004002001ui64;
                    v1725 = *((_QWORD *)&v1494 + 1);
                    v1488 = (BYTE8(v1494) ^ (unsigned __int8)(v1494 ^ v1488)) & 0x3F;
                    if( !v1488 )
                      LOBYTE(v1488) = 1;
                    --v1491;
                  }
                  while( v1491 );
                  v17 = (__int64)v1566;
                  v1495 = 80;
                  v1496 = (int)v1577;
                  v1497 = 10i64;
                  do
                  {
                    v1490 = __ROL8__(*v1485++ ^ v1490, v1488);
                    v1495 -= 8;
                    --v1497;
                  }
                  while( v1497 );
                  for( ; v1495; --v1495 )
                  {
                    v1498 = *(unsigned __int8 *)v1485;
                    v1485 = (_QWORD *)((char *)v1485 + 1);
                    v1490 = __ROL8__(v1498 ^ v1490, v1488);
                  }
                  for( i9 = v1490; ; LODWORD(v1490) = i9 ^ v1490 )
                  {
                    i9 >>= 31;
                    if( !i9 )
                      break;
                  }
                  v1502 = v1490 & 0x7FFFFFFF;
                  *((_DWORD *)v1566 + 522) = v1486 + 16;
                  v1503 = (_QWORD *)(v47 + 3600);
                  v1504 = *(_DWORD *)(v17 + 2068);
                  v1505 = *(_QWORD *)(v17 + 2072);
                  v1506 = (char *)(v47 + 3600);
                  if( v47 + 3600 < v47 + 3616 )
                  {
                    do
                    {
                      _mm_prefetchnta(v1506);
                      v1506 += 64;
                    }
                    while( (unsigned __int64)v1506 < v47 + 3616 );
                  }
                  v1507 = 16;
                  v1508 = 2i64;
                  do
                  {
                    v1505 = __ROL8__(*v1503++ ^ v1505, v1504);
                    v1507 -= 8;
                    --v1508;
                  }
                  while( v1508 );
                  for( ; v1507; --v1507 )
                  {
                    v1509 = *(unsigned __int8 *)v1503;
                    v1503 = (_QWORD *)((char *)v1503 + 1);
                    v1505 = __ROL8__(v1509 ^ v1505, v1504);
                  }
                  for( i10 = v1505; ; LODWORD(v1505) = i10 ^ v1505 )
                  {
                    i10 >>= 31;
                    if( !i10 )
                      break;
                  }
                  v1511 = v1505 & 0x7FFFFFFF;
                  (*(void(__fastcall **)(char *, _QWORD *))(v17 + 408))(v1750, v1503);
                  v1512 = (int *)v1565;
                  v1513 = *((unsigned int *)v1565 + 5);
                  if( v1502 == (_DWORD)v1513
                    && v1511 == *((_QWORD *)v1565 + 3)
                    && v1654 == *((_WORD *)v1565 + 22)
                    && !v1496 )
                  {
                    v50 = 0;
                  }
                  else
                  {
                    if( v1496 )
                    {
                      v50 = 0;
                    }
                    else
                    {
                      v50 = 0;
                      if( v1511 == *((_QWORD *)v1565 + 3) )
                      {
                        if( !*(_DWORD *)(v17 + 2296) )
                        {
                          v1514 = v1513 ^ v1502;
                          goto LABEL_2492;
                        }
                      }
                      else if( !*(_DWORD *)(v17 + 2296) )
                      {
                        v1514 = v1511 ^ (unsigned __int64)*((unsigned int *)v1565 + 6);
LABEL_2492:
                        *(_QWORD *)(*(_QWORD *)(v17 + 1424) + 24i64) = v1514;
                      }
                    }
                    v1515 = *((_QWORD *)v1512 + 1);
                    if( !*(_DWORD *)(v17 + 2296) )
                    {
                      *(_QWORD *)(v17 + 2304) = v17 - 0x5C5FC0A76E374B18i64;
                      *(_QWORD *)(v17 + 2312) = (char *)v1512 - 0x4C48B4211BBACBEBi64;
                      *(_QWORD *)(v17 + 2320) = *v1512;
                      *(_QWORD *)(v17 + 2328) = v1515;
                      *(_DWORD *)(v17 + 2296) = 1;
                      __b8(v17, 0i64);
                    }
                  }
                  *(_DWORD *)(v17 + 2088) += 0x10000;
                  goto LABEL_238;
                }
                continue;
              }
              v1465 = -1i64;
              v1478 = 0i64;
            }
            else
            {
              v1478 = v1569;
            }
            break;
          }
          v1475 = v1570;
          goto LABEL_2430;
        }
        v280 = *(_QWORD ***)(v17 + 1328);
        v281 = *(__int64(**)(void))(v17 + 888);
        v1567 = (__int64)v280;
        v1781 = 0;
        v1578 = (char *)v281();
        _disable();
        v282 = *(_QWORD *)((char *)&KeGetCurrentPrcb()->_MxCsr + *(_QWORD *)(v17 + 1608));
        _enable();
        (*(void(__fastcall **)(__int64))(v17 + 360))(v282);
        LOBYTE(v283) = 1;
        (*(void(__fastcall **)(_QWORD, __int64))(v17 + 240))(*(_QWORD *)(v17 + 1336), v283);
        v284 = 0;
        v285 = **(unsigned int ***)(v17 + 1552);
        v286 = *v285;
        v1569 = (__int64)(v285 + 4);
        v1572 = (unsigned __int64)&v285[6 * v286 + 4];
        if( *((_BYTE *)v285 + 12) )
        {
          v287 = *v280;
          LODWORD(v286) = 0;
          while( v287 != v280 )
          {
            v287 = (_QWORD *)*v287;
            LODWORD(v286) = v286 + 1;
          }
        }
        LODWORD(v47) = 8 * v286;
        v288 = __rdtsc();
        v289 = __ROR8__(v288, 3);
        v1737 = ((v289 ^ v288) * (unsigned __int128)0x7010008004002001ui64) >> 64;
        v290 = ((unsigned __int16)(8193 * (v289 ^ v288)) ^ (unsigned __int16)v1737) & 0x7FF;
        v291 = __rdtsc();
        v292 = (__ROR8__(v291, 3) ^ v291) * (unsigned __int128)0x7010008004002001ui64;
        v293 = *(unsigned int *)(v17 + 2064);
        v1738 = *((_QWORD *)&v292 + 1);
        v294 = (*((_QWORD *)&v292 + 1) ^ (unsigned __int64)v292) % (unsigned int)(v290 + 1);
        v295 = (*(__int64(__fastcall **)(__int64, _QWORD, __int64))(v17 + 248))(
                 512i64,
                 (unsigned int)(v290 + 8 * v286),
                 v293);
        v296 = v295;
        if( !v295 )
        {
          ++*(_DWORD *)(v17 + 2584);
          goto LABEL_544;
        }
        v297 = v294;
        v298 = (_QWORD *)v295;
        if( (unsigned int)v294 >= 8 )
        {
          v299 = (unsigned __int64)(unsigned int)v294 >> 3;
          do
          {
            v300 = __rdtsc();
            v297 -= 8;
            v301 = (__ROR8__(v300, 3) ^ v300) * (unsigned __int128)0x7010008004002001ui64;
            v1739 = *((_QWORD *)&v301 + 1);
            *v298++ = v301 ^ *((_QWORD *)&v301 + 1);
            --v299;
          }
          while( v299 );
          v17 = (__int64)v1566;
          v280 = (_QWORD **)v1567;
        }
        if( v297 )
        {
          v302 = __rdtsc();
          v303 = (__ROR8__(v302, 3) ^ v302) * (unsigned __int128)0x7010008004002001ui64;
          v1754 = *((_QWORD *)&v303 + 1);
          v304 = v303 ^ *((_QWORD *)&v303 + 1);
          do
          {
            *(_BYTE *)v298 = v304;
            v298 = (_QWORD *)((char *)v298 + 1);
            v304 >>= 8;
            --v297;
          }
          while( v297 );
        }
        v305 = v290 - v294;
        v306 = (_QWORD *)(v296 + (unsigned int)v294 + (unsigned __int64)(unsigned int)v47);
        if( v305 >= 8 )
        {
          v298 = (_QWORD *)((unsigned __int64)v305 >> 3);
          do
          {
            v307 = __rdtsc();
            v305 -= 8;
            v308 = (__ROR8__(v307, 3) ^ v307) * (unsigned __int128)0x7010008004002001ui64;
            v1759 = *((_QWORD *)&v308 + 1);
            *v306++ = v308 ^ *((_QWORD *)&v308 + 1);
            v298 = (_QWORD *)((char *)v298 - 1);
          }
          while( v298 );
        }
        if( v305 )
        {
          v309 = __rdtsc();
          v310 = (__ROR8__(v309, 3) ^ v309) * (unsigned __int128)0x7010008004002001ui64;
          v1760 = *((_QWORD *)&v310 + 1);
          v311 = v310 ^ *((_QWORD *)&v310 + 1);
          do
          {
            *(_BYTE *)v306 = v311;
            v306 = (_QWORD *)((char *)v306 + 1);
            v311 >>= 8;
            --v305;
          }
          while( v305 );
        }
        v47 = (unsigned int)v294 + v296;
        v1633 = v296;
        if( v47 )
        {
          v312 = *v280;
          while( v312 != v280 )
          {
            v313 = *(_QWORD *)((char *)v312 + *(_QWORD *)(v17 + 1872) - *(_QWORD *)(v17 + 1864));
            if( !(*(unsigned int(__fastcall **)(__int64))(v17 + 680))(v313) && v284 < (unsigned int)v286 )
            {
              v314 = v284++;
              *(_QWORD *)(v47 + 8 * v314) = v313;
            }
            v312 = (_QWORD *)*v312;
            ++v1781;
          }
          (*(void(__fastcall **)(unsigned __int64, _QWORD, _QWORD *, _QWORD *))(v17 + 920))(v47, v284, v306, v298);
          v315 = v1569;
          v316 = v1572;
          do
          {
            v317 = *(_QWORD *)(v315 + 8);
            if( !(*(unsigned int(__fastcall **)(unsigned __int64))(v17 + 680))(v317) )
            {
              v318 = v284 - 1;
              v319 = 0;
              if( (int)(v284 - 1) < 0 )
                goto LABEL_561;
              do
              {
                v320 = (v318 + v319) >> 1;
                if( v317 >= *(_QWORD *)(v47 + 8i64 * v320) )
                {
                  if( v317 <= *(_QWORD *)(v47 + 8i64 * v320) )
                    break;
                  v319 = v320 + 1;
                }
                else
                {
                  if( !v320 )
                    goto LABEL_561;
                  v318 = v320 - 1;
                }
              }
              while( v318 >= v319 );
              if( v318 < v319 )
              {
LABEL_561:
                if( !*(_DWORD *)(v17 + 2296) )
                {
                  v321 = (int *)v1565;
                  *(_QWORD *)(v17 + 2304) = v17 - 0x5C5FC0A76E374B18i64;
                  *(_QWORD *)(v17 + 2312) = (char *)v321 - 0x4C48B4211BBACBEBi64;
                  *(_QWORD *)(v17 + 2320) = *v321;
                  *(_QWORD *)(v17 + 2328) = v317;
                  *(_DWORD *)(v17 + 2296) = 1;
                  __b8(v17, 0i64);
                }
              }
            }
            v315 += 24i64;
          }
          while( v315 < v316 );
          v50 = 0;
        }
        else
        {
LABEL_544:
          v50 = 0;
          v1633 = 0i64;
        }
        (*(void(__fastcall **)(_QWORD))(v17 + 280))(*(_QWORD *)(v17 + 1336));
        (*(void(**)(void))(v17 + 368))();
        (*(void(__fastcall **)(char *))(v17 + 896))(v1578);
        if( !v1633 )
          goto LABEL_238;
        *(_DWORD *)(v17 + 2088) += v1781 << 9;
        v169 = *(void(**)(void))(v17 + 256);
LABEL_342:
        v169();
        goto LABEL_238;
      }
      LODWORD(v47) = 0x40000000;
      if( (*(_DWORD *)(v17 + 2448) & 0x40000000) != 0 && (*(_DWORD *)(v17 + 2452) & 0x1000) == 0 )
      {
        v322 = __rdtsc();
        v323 = (__ROR8__(v322, 3) ^ v322) * (unsigned __int128)0x7010008004002001ui64;
        v1761 = *((_QWORD *)&v323 + 1);
        *(_DWORD *)(v17 + 2084) = ((unsigned __int64)v323 ^ *((_QWORD *)&v323 + 1)) % 5;
      }
      while( 2 )
      {
        v324 = *(_DWORD *)(v17 + 2084);
        if( !v324 )
        {
          v664 = v56;
          v1641 = 0i64;
          for( i11 = 0; ; ++i11 )
          {
            v671 = (*(__int64(__fastcall **)(__int64 *))(v17 + 768))(&v1641);
            if( !v671 )
              break;
            if( !(*(__int64(__fastcall **)(__int64, char *))(v17 + 520))(v671, v1699) )
            {
              if( (*(_DWORD *)(v17 + 2448) & 0x40000000) != 0 )
              {
                v665 = *(_QWORD **)(v17 + 2688);
                v666 = 48;
                v667 = 6i64;
                do
                {
                  v666 -= 8;
                  *v665 = *(_QWORD *)v664;
                  v664 += 8;
                  ++v665;
                  --v667;
                }
                while( v667 );
                if( v666 )
                {
                  do
                  {
                    v668 = *v664++;
                    *(_BYTE *)v665 = v668;
                    v665 = (_QWORD *)((char *)v665 + 1);
                    --v666;
                  }
                  while( v666 );
                  v17 = (__int64)v1566;
                }
                v664 = *(char **)(v17 + 2688);
              }
              *((_QWORD *)v664 + 3) = v671;
              v669 = *(_QWORD *)(v17 + 1424);
              *(_QWORD *)v669 = v664;
              *(_DWORD *)(v669 + 16) = 48;
              v670 = *(_QWORD *)(v17 + 1424);
              *(_QWORD *)(v670 + 8) = v671;
              *(_DWORD *)(v670 + 20) = 4096;
              if( !*(_DWORD *)(v17 + 2296) )
              {
                *(_QWORD *)(v17 + 2304) = v17 - 0x5C5FC0A76E374B18i64;
                *(_QWORD *)(v17 + 2312) = v664 - 0x4C48B4211BBACBEBi64;
                *(_QWORD *)(v17 + 2320) = *(int *)v664;
                *(_QWORD *)(v17 + 2328) = 3i64;
                *(_DWORD *)(v17 + 2296) = 1;
                __b8(v17, 0i64);
              }
            }
          }
          goto LABEL_1087;
        }
        v325 = v324 - 1;
        if( !v325 )
        {
          v656 = v56;
          v1640 = 0i64;
          i11 = 0;
          LODWORD(v47) = KeGetCurrentIrql();
          __writecr8(0xCui64);
          for( i12 = (*(__int64(__fastcall **)(__int64 *))(v17 + 776))(&v1640);
                i12;
                i12 = (*(__int64(__fastcall **)(__int64 *))(v17 + 776))(&v1640) )
          {
            ++i11;
            if( !(*(__int64(__fastcall **)(__int64, char *))(v17 + 520))(i12, v1698) )
            {
              if( (*(_DWORD *)(v17 + 2448) & 0x40000000) != 0 )
              {
                v658 = *(_QWORD **)(v17 + 2688);
                v659 = 48;
                v660 = 6i64;
                do
                {
                  v659 -= 8;
                  *v658 = *(_QWORD *)v656;
                  v656 += 8;
                  ++v658;
                  --v660;
                }
                while( v660 );
                if( v659 )
                {
                  do
                  {
                    v661 = *v656++;
                    *(_BYTE *)v658 = v661;
                    v658 = (_QWORD *)((char *)v658 + 1);
                    --v659;
                  }
                  while( v659 );
                  v17 = (__int64)v1566;
                }
                v656 = *(char **)(v17 + 2688);
              }
              *((_QWORD *)v656 + 3) = i12;
              v662 = *(_QWORD *)(v17 + 1424);
              *(_QWORD *)v662 = v656;
              *(_DWORD *)(v662 + 16) = 48;
              v663 = *(_QWORD *)(v17 + 1424);
              *(_QWORD *)(v663 + 8) = i12;
              *(_DWORD *)(v663 + 20) = 4096;
              if( !*(_DWORD *)(v17 + 2296) )
              {
                *(_QWORD *)(v17 + 2304) = v17 - 0x5C5FC0A76E374B18i64;
                *(_QWORD *)(v17 + 2312) = v656 - 0x4C48B4211BBACBEBi64;
                *(_QWORD *)(v17 + 2320) = *(int *)v656;
                *(_QWORD *)(v17 + 2328) = 4i64;
                *(_DWORD *)(v17 + 2296) = 1;
                __b8(v17, 0i64);
              }
            }
          }
          __writecr8((unsigned __int8)v47);
          goto LABEL_1087;
        }
        v326 = v325 - 1;
        if( !v326 )
        {
          v644 = v56;
          v645 = 0i64;
          i11 = 0;
          do
          {
            v1605 = 0;
            while( 1 )
            {
              do
              {
                if( !(*(unsigned int(__fastcall **)(_QWORD, int *, __int64 *))(v17 + 760))(v50, &v1605, &v1634) )
                  goto LABEL_1060;
                v648 = (*(__int64(__fastcall **)(__int64, __int64, __int64, _QWORD))(v17 + 728))(
                         v1634,
                         v646,
                         v647,
                         0i64);
              }
              while( !v648 );
              ++i11;
              v47 = (*(__int64(__fastcall **)(__int64))(v17 + 736))(v648);
              if( !(*(__int64(__fastcall **)(unsigned __int64, char *))(v17 + 520))(v47, v1697) )
                break;
              (*(void(__fastcall **)(__int64, __int64, __int64, _QWORD))(v17 + 744))(v1634, v648, v649, 0i64);
            }
            if( (*(_DWORD *)(v17 + 2448) & 0x40000000) != 0 )
            {
              v650 = *(_QWORD **)(v17 + 2688);
              v651 = 48;
              v652 = 6i64;
              do
              {
                v651 -= 8;
                *v650 = *(_QWORD *)v644;
                v644 += 8;
                ++v650;
                --v652;
              }
              while( v652 );
              if( v651 )
              {
                do
                {
                  v653 = *v644++;
                  *(_BYTE *)v650 = v653;
                  v650 = (_QWORD *)((char *)v650 + 1);
                  --v651;
                }
                while( v651 );
                v17 = (__int64)v1566;
              }
              v644 = *(char **)(v17 + 2688);
            }
            *((_QWORD *)v644 + 3) = v47;
            v654 = *(_QWORD *)(v17 + 1424);
            *(_QWORD *)v654 = v644;
            *(_DWORD *)(v654 + 16) = 48;
            v655 = *(_QWORD *)(v17 + 1424);
            *(_QWORD *)(v655 + 8) = v47;
            *(_DWORD *)(v655 + 20) = 4096;
            if( !*(_DWORD *)(v17 + 2296) )
            {
              *(_QWORD *)(v17 + 2304) = v17 - 0x5C5FC0A76E374B18i64;
              *(_QWORD *)(v17 + 2312) = v644 - 0x4C48B4211BBACBEBi64;
              *(_QWORD *)(v17 + 2320) = *(int *)v644;
              *(_QWORD *)(v17 + 2328) = v645;
              *(_DWORD *)(v17 + 2296) = 1;
              __b8(v17, 0i64);
            }
LABEL_1060:
            ++v50;
            ++v645;
          }
          while( v50 < 3 );
          goto LABEL_1087;
        }
        v327 = v326 - 1;
        if( v327 )
        {
          v328 = v327 - 1;
          if( v328 )
          {
            if( v328 != 1 )
            {
              *(_DWORD *)(v17 + 2084) = 0;
LABEL_1090:
              v1566 = (_BYTE *)v17;
              goto LABEL_238;
            }
            v329 = v56;
            v1801 = -1;
            i11 = 0;
            v331 = 0;
            v47 = 0i64;
            do
            {
              v1644 = 0i64;
              while( (*(unsigned int(__fastcall **)(_QWORD, __int64 *, char *, __int64 *))(v17 + 1072))(
                        v331,
                        &v1644,
                        &v1801,
                        &v1613) )
              {
                ++i11;
                if( !(*(__int64(__fastcall **)(__int64, char *))(v17 + 520))(v1613, v1688) )
                {
                  if( (*(_DWORD *)(v17 + 2448) & 0x40000000) != 0 )
                  {
                    v332 = *(_QWORD **)(v17 + 2688);
                    v333 = 48;
                    v334 = 6i64;
                    do
                    {
                      v333 -= 8;
                      *v332 = *(_QWORD *)v329;
                      v329 += 8;
                      ++v332;
                      --v334;
                    }
                    while( v334 );
                    if( v333 )
                    {
                      do
                      {
                        v335 = *v329++;
                        *(_BYTE *)v332 = v335;
                        v332 = (_QWORD *)((char *)v332 + 1);
                        --v333;
                      }
                      while( v333 );
                      v17 = (__int64)v1566;
                    }
                    v329 = *(char **)(v17 + 2688);
                  }
                  *((_QWORD *)v329 + 3) = v1613;
                  v336 = *(_QWORD *)(v17 + 1424);
                  *(_QWORD *)v336 = v329;
                  *(_DWORD *)(v336 + 16) = 48;
                  v337 = *(_QWORD *)(v17 + 1424);
                  *(_QWORD *)(v337 + 8) = v1613;
                  *(_DWORD *)(v337 + 20) = 4096;
                  if( !*(_DWORD *)(v17 + 2296) )
                  {
                    *(_QWORD *)(v17 + 2304) = v17 - 0x5C5FC0A76E374B18i64;
                    *(_QWORD *)(v17 + 2312) = v329 - 0x4C48B4211BBACBEBi64;
                    *(_QWORD *)(v17 + 2320) = *(int *)v329;
                    *(_QWORD *)(v17 + 2328) = v47;
                    *(_DWORD *)(v17 + 2296) = 1;
                    __b8(v17, 0i64);
                  }
                }
              }
              ++v331;
              ++v47;
            }
            while( v331 < 3 );
          }
          else
          {
            v338 = *(__int64(__fastcall **)(_QWORD))(v17 + 792);
            i11 = 0;
            v1585 = 0;
            v47 = v338(0i64);
            if( v47 )
            {
              v339 = (__int64)v1565;
              do
              {
                v1645 = 0i64;
                v340 = (char *)v339;
                v341 = 1;
                v342 = (*(__int64(__fastcall **)(unsigned __int64, __int64 *))(v17 + 784))(v47, &v1645);
                if( v342 )
                {
                  do
                  {
                    ++v341;
                    if( !(*(__int64(__fastcall **)(__int64, char *))(v17 + 520))(v342, v1689) )
                    {
                      if( (*(_DWORD *)(v17 + 2448) & 0x40000000) != 0 )
                      {
                        v343 = *(_QWORD **)(v17 + 2688);
                        v344 = 48;
                        v345 = 6i64;
                        do
                        {
                          v344 -= 8;
                          *v343 = *(_QWORD *)v340;
                          v340 += 8;
                          ++v343;
                          --v345;
                        }
                        while( v345 );
                        if( v344 )
                        {
                          do
                          {
                            v346 = *v340++;
                            *(_BYTE *)v343 = v346;
                            v343 = (_QWORD *)((char *)v343 + 1);
                            --v344;
                          }
                          while( v344 );
                          v17 = (__int64)v1566;
                        }
                        v340 = *(char **)(v17 + 2688);
                      }
                      *((_QWORD *)v340 + 3) = v342;
                      *((_QWORD *)v340 + 4) = v47;
                      v347 = *(_QWORD *)(v17 + 1424);
                      *(_QWORD *)v347 = v340;
                      *(_DWORD *)(v347 + 16) = 48;
                      v348 = *(_QWORD *)(v17 + 1424);
                      *(_QWORD *)(v348 + 8) = v342;
                      *(_DWORD *)(v348 + 20) = 4096;
                      if( !*(_DWORD *)(v17 + 2296) )
                      {
                        *(_QWORD *)(v17 + 2304) = v17 - 0x5C5FC0A76E374B18i64;
                        *(_QWORD *)(v17 + 2312) = v340 - 0x4C48B4211BBACBEBi64;
                        *(_QWORD *)(v17 + 2320) = *(int *)v340;
                        *(_QWORD *)(v17 + 2328) = 6i64;
                        *(_DWORD *)(v17 + 2296) = 1;
                        __b8(v17, 0i64);
                      }
                    }
                    v342 = (*(__int64(__fastcall **)(unsigned __int64, __int64 *))(v17 + 784))(v47, &v1645);
                  }
                  while( v342 );
                  i11 = v1585;
                  v339 = (__int64)v1565;
                }
                v349 = *(__int64(__fastcall **)(unsigned __int64))(v17 + 792);
                i11 += v341;
                v1585 = i11;
                v47 = v349(v47);
              }
              while( v47 );
            }
          }
          goto LABEL_1087;
        }
        v350 = (_BYTE *)v17;
        v351 = *(__int64 **)(v17 + 1264);
        i11 = 0;
        v1595 = (_BYTE *)v17;
        v352 = *v351;
        v1586 = *v351;
        if( (*(_DWORD *)(v17 + 2448) & 0x40000000) != 0 )
          goto LABEL_1087;
        v353 = (int *)v1565;
        v354 = *((_QWORD *)v1565 + 5);
        if( v354 )
        {
          i11 = 1;
          if( v352 != v354 )
          {
            *((_QWORD *)v1565 + 3) = v352;
            v355 = *(_QWORD *)(v17 + 1424);
            *(_QWORD *)v355 = v353;
            *(_DWORD *)(v355 + 16) = 48;
            v356 = *(_QWORD *)(v17 + 1424);
            *(_QWORD *)(v356 + 8) = v352;
            *(_DWORD *)(v356 + 20) = 4096;
            if( !*(_DWORD *)(v17 + 2296) )
            {
              *(_QWORD *)(v17 + 2304) = v17 - 0x5C5FC0A76E374B18i64;
              *(_QWORD *)(v17 + 2312) = (char *)v353 - 0x4C48B4211BBACBEBi64;
              *(_QWORD *)(v17 + 2320) = *v353;
              *(_QWORD *)(v17 + 2328) = 5i64;
              *(_DWORD *)(v17 + 2296) = 1;
              __b8(v17, 0i64);
            }
          }
          goto LABEL_1087;
        }
        if( !v352 )
        {
LABEL_1087:
          v50 = 0;
          *(_DWORD *)(v17 + 2088) += i11 << 12;
          ++*(_DWORD *)(v17 + 2084);
          if( *(_DWORD *)(v17 + 2088) >= *(_DWORD *)(v17 + 2092) )
            goto LABEL_1090;
          v56 = v1565;
          LODWORD(v47) = 0x40000000;
          continue;
        }
        break;
      }
      v357 = *(__int64(__fastcall **)(__int64, char *))(v17 + 512);
      v1585 = 1;
      v1589 = (_BYTE *)v17;
      v358 = (unsigned int *)v357(v352, v1756);
      v359 = v1757;
      v360 = v1758;
      v361 = (signed __int64)v358;
      v1571 = (signed __int64)v358;
      v1782 = v1758;
      v1579 = v1758;
      BugCheckParameter2 = v1757;
      if( !v1757 )
      {
        v362 = -1073741701;
        goto LABEL_1040;
      }
      v363 = 4;
      v1611 = 0i64;
      v364 = &v1612;
      v365 = 0xFFFFFFFFi64;
      v366 = 1i64;
      do
      {
        *(_BYTE *)v364 = 0;
        v364 = (int *)((char *)v364 + 1);
        --v363;
      }
      while( v363 );
      LODWORD(v47) = 0;
      if( *(_DWORD *)(v17 + 2060) )
      {
        LODWORD(v366) = v1612;
        LODWORD(v365) = HIDWORD(v1611);
        v367 = v1611;
        while( 1 )
        {
          v368 = 0;
          v369 = v17;
          if( *(_QWORD *)(v17 + 2680) )
            v369 = *(_QWORD *)(v17 + 2680);
          v1567 = v369;
          v370 = (int *)(v369 + *(unsigned int *)(v369 + 2056));
          if( v367 && (unsigned int)v365 <= (unsigned int)v47 )
          {
            v368 = v365;
            v370 = (int *)(v369 + (unsigned int)v366);
          }
          if( v368 != (_DWORD)v47 )
            break;
LABEL_649:
          LODWORD(v1611) = 1;
          v366 = (unsigned int)((_DWORD)v370 - v369);
          HIDWORD(v1611) = v368;
          v1612 = (_DWORD)v370 - v369;
          v367 = 1;
          v378 = *v370;
          v365 = v368;
          if( (unsigned int)v378 <= 0x2B )
          {
            v379 = 0x80000001002i64;
            if( _bittest64(&v379, v378) )
            {
              if( *((_QWORD *)v370 + 1) == v361 && v370[4] == v360 )
                goto LABEL_659;
            }
          }
          if( (unsigned int)(v378 - 33) <= 1 && *((char **)v370 + 4) == v359 )
            goto LABEL_659;
          LODWORD(v47) = v47 + 1;
          if( (unsigned int)v47 >= *(_DWORD *)(v17 + 2060) )
            goto LABEL_658;
        }
        v371 = (unsigned int)v47 - v368;
        v368 = v47;
        while( 2 )
        {
          v372 = *v370;
          if( *v370 > 12 )
          {
            if( v372 == 28 )
            {
              v377 = *((unsigned __int16 *)v370 + 20);
              goto LABEL_646;
            }
            if( v372 == 30 )
            {
              v376 = (((v370[9] != 0 ? v370[9] - 1 : 0) / 0xCu + 7) & 0xFFFFFFF8)
                   + 24 * (*((unsigned __int16 *)v370 + 20) + 2);
              goto LABEL_647;
            }
            if( v372 <= 32 )
              goto LABEL_643;
            if( v372 <= 34 )
            {
              v376 = 20 * (unsigned int)(((v370[8] & 0xFFF) + (unsigned __int64)(unsigned int)v370[10] + 4095) >> 12)
                   + 48;
              goto LABEL_647;
            }
            if( v372 != 43 )
              goto LABEL_643;
          }
          else if( v372 != 12 )
          {
            v373 = v372 - 1;
            if( v373 )
            {
              v374 = v373 - 6;
              if( !v374 )
              {
                v376 = (unsigned int)(24 * (v370[6] + 2));
                goto LABEL_647;
              }
              v375 = v374 - 1;
              if( v375 )
              {
                if( v375 == 2 )
                {
                  v376 = (unsigned int)(16 * (v370[7] + 3));
                  goto LABEL_647;
                }
LABEL_643:
                v376 = 48i64;
LABEL_647:
                v370 = (int *)((char *)v370 + v376);
                if( !--v371 )
                {
                  v17 = (__int64)v1566;
                  LODWORD(v369) = v1567;
                  v360 = v1782;
                  v359 = (char *)BugCheckParameter2;
                  v361 = v1571;
                  goto LABEL_649;
                }
                continue;
              }
              v377 = *((unsigned __int16 *)v370 + 16);
LABEL_646:
              v376 = (v377 + 55) & 0xFFFFFFF8;
              goto LABEL_647;
            }
          }
          break;
        }
        v376 = 4 * (v370[4] / 0xCu) + 48;
        goto LABEL_647;
      }
LABEL_658:
      v370 = 0i64;
LABEL_659:
      v352 = v1586;
      v1598 = v370;
      if( v370 )
      {
        v362 = -1073741554;
        goto LABEL_1040;
      }
      v380 = (*(__int64(__fastcall **)(__int64, __int64, _QWORD, __int64))(v17 + 680))(v1586, v366, 0i64, v365);
      v72 = (*(_DWORD *)(v17 + 2448) & 0x40000000) == 0;
      LODWORD(v47) = v380;
      v1576 = v380;
      LODWORD(v1570) = v1579;
      if( !v72 )
      {
        v382 = sub_140A1BFE4((__int64)&v1595, v359, 9);
        v350 = v1595;
        v362 = v382;
LABEL_1040:
        v1566 = v350;
        v642 = &v350[-v17];
        v17 = (__int64)v350;
        v643 = &v1565[(_QWORD)v642];
        v1565 = &v1565[(_QWORD)v642];
        if( (int)(v362 + 0x80000000) < 0 || v362 == -1073741554 )
          *((_QWORD *)v643 + 5) = v352;
        i11 = v1585;
        goto LABEL_1087;
      }
      v383 = *(__int64(__fastcall **)(char *, __int64, _QWORD, unsigned int *))(v17 + 496);
      v1675 = 0i64;
      v1637[4] = 0;
      LOBYTE(v381) = 1;
      v1672 = v383(v359, v381, 0i64, &v1579);
      v384 = v1672 != 0 ? v1579 : 0;
      v1579 = v384;
      v385 = *(__int64(__fastcall **)(char *, __int64, __int64, unsigned int *))(v17 + 496);
      v1637[1] = v384;
      LOBYTE(v384) = 1;
      v386 = v385(v359, v384, 12i64, &v1579);
      v387 = v386;
      v1572 = v386;
      v1673 = v386;
      LOBYTE(v387) = 1;
      v1579 &= -(v386 != 0);
      v388 = *(__int64(__fastcall **)(char *, __int64, __int64, unsigned int *))(v17 + 496);
      v1580 = v1579;
      v1637[2] = v1579;
      v1674 = v388(v359, v387, 10i64, &v1579);
      v1579 &= -(v1674 != 0);
      v389 = *(__int64(__fastcall **)(char *))(v17 + 504);
      v1637[3] = v1579;
      v390 = v389(v359);
      if( !v390 )
        goto LABEL_664;
      v391 = (*(__int64(__fastcall **)(char *, int *))(v17 + 1176))(v359, &v1662);
      v392 = *(_DWORD *)(v17 + 2340);
      v1676 = v391;
      v1637[5] = v1662;
      v1637[0] = *(_DWORD *)(v390 + 84);
      LODWORD(v391) = v47;
      v47 = *(unsigned int *)(v17 + 2020);
      v1671 = v359;
      v393 = (_DWORD)v391 != 0 ? 0xB : 0;
      v394 = v47 + 288;
      v1783 = v393;
      if( (unsigned int)(v47 + 288) <= *(_DWORD *)(v17 + 2588) )
      {
        v395 = v17;
        v1567 = v17;
        *(_DWORD *)(v17 + 2020) = v394;
      }
      else
      {
        v1567 = sub_140A0EB30((_DWORD *)v17, v394, v392);
        v395 = v1567;
        if( !v1567 )
        {
          v1589 = 0i64;
LABEL_683:
          v362 = -1073741670;
          goto LABEL_1039;
        }
        v396 = *(_DWORD *)(v17 + 2448);
        if( (v396 & 4) == 0 )
        {
          v397 = *(_DWORD *)(v17 + 2020);
          v398 = *(_QWORD *)(v17 + 1992);
          v399 = (_QWORD *)v17;
          v400 = (v396 & 0x20000000) != 0 ? *(_DWORD *)(v17 + 2340) : 0;
          if( v397 >= 8 )
          {
            v401 = (unsigned __int64)v397 >> 3;
            do
            {
              *v399 = 0i64;
              v397 -= 8;
              ++v399;
              --v401;
            }
            while( v401 );
          }
          for( ; v397; --v397 )
          {
            *(_BYTE *)v399 = 0;
            v399 = (_QWORD *)((char *)v399 + 1);
          }
          v402 = *(_DWORD *)(v395 + 2340);
          *(_DWORD *)(v395 + 2340) = v400;
          if( v400 == 3 )
          {
            (*(void(__fastcall **)(__int64))(v395 + 872))(v398);
          }
          else
          {
            v403 = 0;
            if( (*(_DWORD *)(v395 + 2448) & 0x10000000) == 0 )
              v403 = v400;
            if( v403 )
              (*(void(__fastcall **)(__int64, _QWORD))(v395 + 552))(v398 - 8, *(_QWORD *)(v398 - 8));
            else(*(void(__fastcall **)(__int64))(v395 + 256))(v398);
          }
          *(_DWORD *)(v395 + 2340) = v402;
        }
        *(_DWORD *)(v395 + 2448) &= ~4u;
        v393 = v1783;
      }
      v404 = v395 + v47;
      *(_DWORD *)(v395 + 2060) += 6;
      v405 = (__int64 *)&v1671;
      v1648 = v395 + v47;
      v1598 = (_DWORD *)(v395 + v47);
      v406 = (unsigned int *)v1637;
      v1569 = 6i64;
      do
      {
        v407 = *v406;
        v408 = 48;
        v409 = (_QWORD *)*v405;
        v410 = 6i64;
        v1568 = *v406;
        v411 = (_QWORD *)v404;
        do
        {
          *v411 = 0i64;
          v408 -= 8;
          ++v411;
          --v410;
        }
        while( v410 );
        for( ; v408; --v408 )
        {
          *(_BYTE *)v411 = 0;
          v411 = (_QWORD *)((char *)v411 + 1);
        }
        *(_DWORD *)v404 = v393;
        *(_QWORD *)(v404 + 8) = v409;
        v412 = v409;
        *(_DWORD *)(v404 + 16) = v407;
        v413 = (char *)v409;
        *(_DWORD *)(v395 + 2088) += v407;
        v414 = *(_DWORD *)(v395 + 2068);
        v415 = *(_QWORD *)(v395 + 2072);
        if( v409 < (_QWORD *)((char *)v409 + v407) )
        {
          do
          {
            _mm_prefetchnta(v413);
            v413 += 64;
          }
          while( v413 < (char *)v409 + v407 );
        }
        v416 = *(_QWORD *)(v395 + 2072);
        v417 = (unsigned int)v407 >> 7;
        if( (unsigned int)v407 >> 7 )
        {
          do
          {
            v418 = 8i64;
            do
            {
              v419 = v416 ^ *v412;
              v420 = v412[1];
              v412 += 2;
              v416 = __ROL8__(__ROL8__(v419, v414) ^ v420, v414);
              --v418;
            }
            while( v418 );
            v421 = __ROL8__(v415 ^ ((char *)v412 - (char *)v409), 17);
            v1690 = ((v421 ^ v415 ^ (unsigned __int64)((char *)v412 - (char *)v409))
                   * (unsigned __int128)0x7010008004002001ui64) >> 64;
            v414 = ((unsigned __int8)(v421 ^ v415 ^ ((_BYTE)v412 - (_BYTE)v409) ^ v1690) ^ (unsigned __int8)v414) & 0x3F;
            if( !v414 )
              LOBYTE(v414) = 1;
            --v417;
          }
          while( v417 );
          v395 = v1567;
          LODWORD(v407) = v1568;
        }
        v422 = v407 & 0x7F;
        if( v422 >= 8 )
        {
          v423 = (unsigned __int64)(v407 & 0x7F) >> 3;
          do
          {
            v416 = __ROL8__(*v412++ ^ v416, v414);
            v422 -= 8;
            --v423;
          }
          while( v423 );
        }
        if( v422 )
        {
          do
          {
            v416 = __ROL8__(*(unsigned __int8 *)v412 ^ v416, v414);
            v412 = (_QWORD *)((char *)v412 + 1);
            --v422;
          }
          while( v422 );
          v395 = v1567;
        }
        for( i13 = v416; ; LODWORD(v416) = i13 ^ v416 )
        {
          i13 >>= 31;
          if( !i13 )
            break;
        }
        v393 = v1783;
        *(_DWORD *)(v404 + 20) = v416 & 0x7FFFFFFF;
        ++v406;
        *(_DWORD *)(v395 + 2088) += v407;
        ++v405;
        v404 = v1648 + 48;
        v72 = v1569-- == 1;
        v1648 += 48i64;
      }
      while( !v72 );
      v425 = v1598;
      v47 = (unsigned __int64)BugCheckParameter2;
      v17 = (__int64)v1566;
      v426 = v1576;
      *v1598 = 44;
      *((_QWORD *)v425 + 3) = v47;
      if( (*(_DWORD *)(v395 + 2448) & 0x10200000) != 0 )
      {
LABEL_714:
        if( !v426 )
          goto LABEL_716;
      }
      else if( !v426 )
      {
        if( (*(_DWORD *)(v395 + 2452) & 0x8000) != 0 )
        {
          v425[8] |= 1u;
          if( (unsigned int)sub_140A0FC50(v395, v47) )
          {
            v425[8] |= 4u;
            goto LABEL_714;
          }
        }
LABEL_716:
        v350 = (_BYTE *)v395;
        v1589 = (_BYTE *)v395;
        v1595 = (_BYTE *)v395;
        v362 = sub_140A0E098((__int64)&v1589, (unsigned int *)v1571, v1570, v47, v426, 9, (int *)&v1609, &v1631);
        if( v362 < 0 )
          goto LABEL_1039;
        v350 = v1589;
        v427 = v1631 - v1609;
        v1598 = &v1589[(_QWORD)v1598 - v395];
        v428 = (_QWORD *)(v47 + v1609);
        v1595 = v1589;
        v429 = v1598 + 48;
        v430 = 48;
        v431 = v1598 + 48;
        v432 = 6i64;
        do
        {
          *v431 = 0i64;
          v430 -= 8;
          ++v431;
          --v432;
        }
        while( v432 );
        for( ; v430; --v430 )
        {
          *(_BYTE *)v431 = 0;
          v431 = (_QWORD *)((char *)v431 + 1);
        }
        v433 = v428;
        *v429 = v1783;
        v434 = (char *)v428;
        *((_QWORD *)v429 + 1) = v428;
        v429[4] = v427;
        *((_DWORD *)v350 + 522) += v427;
        v435 = *((_DWORD *)v350 + 517);
        v436 = *((_QWORD *)v350 + 259);
        v437 = (unsigned __int64)v428 + v427;
        if( (unsigned __int64)v428 < v437 )
        {
          do
          {
            _mm_prefetchnta(v434);
            v434 += 64;
          }
          while( (unsigned __int64)v434 < v437 );
        }
        v438 = *((_QWORD *)v350 + 259);
        v439 = v427 >> 7;
        if( v427 >> 7 )
        {
          do
          {
            v440 = 8i64;
            do
            {
              v441 = v433[1] ^ __ROL8__(*v433 ^ v438, v435);
              v433 += 2;
              v438 = __ROL8__(v441, v435);
              --v440;
            }
            while( v440 );
            v442 = (__ROL8__(v436 ^ ((char *)v433 - (char *)v428), 17) ^ v436 ^ (unsigned __int64)((char *)v433
                                                                                                 - (char *)v428))
                 * (unsigned __int128)0x7010008004002001ui64;
            v1691 = *((_QWORD *)&v442 + 1);
            v435 = ((unsigned __int8)(v442 ^ BYTE8(v442)) ^ (unsigned __int8)v435) & 0x3F;
            if( !v435 )
              LOBYTE(v435) = 1;
            --v439;
          }
          while( v439 );
          v17 = (__int64)v1566;
          v426 = v1576;
        }
        v443 = v427 & 0x7F;
        if( (unsigned int)v443 >= 8 )
        {
          v444 = (unsigned __int64)(unsigned int)v443 >> 3;
          do
          {
            v438 = __ROL8__(*v433++ ^ v438, v435);
            v443 = (unsigned int)(v443 - 8);
            --v444;
          }
          while( v444 );
        }
        if( (_DWORD)v443 )
        {
          do
          {
            v445 = *(unsigned __int8 *)v433;
            v433 = (_QWORD *)((char *)v433 + 1);
            v438 = __ROL8__(v445 ^ v438, v435);
            v443 = (unsigned int)(v443 - 1);
          }
          while( (_DWORD)v443 );
          v17 = (__int64)v1566;
        }
        for( i14 = v438; ; v438 = (unsigned int)i14 ^ (unsigned int)v438 )
        {
          i14 >>= 31;
          if( !i14 )
            break;
        }
        LODWORD(v438) = v438 & 0x7FFFFFFF;
        v429[5] = v438;
        v447 = v1598;
        v1598[60] = 48;
        if( v447[64] )
        {
          v438 = 4294967294i64;
          v447[66] = v447[66] & 0xFFFFFFFE | (v426 != 0);
        }
        v1595 = v350;
        v1615 = v1598 + 24;
        LODWORD(v47) = (v426 != 0) + 13;
        if( v1598 == (_DWORD *)-96i64 )
        {
          v448 = *((unsigned int *)v350 + 505);
          v449 = v448 + 48;
          if( (unsigned int)(v448 + 48) <= *((_DWORD *)v350 + 647) )
          {
            v450 = (__int64)v350;
            *((_DWORD *)v350 + 505) = v449;
          }
          else
          {
            v450 = sub_140A0EB30(v350, v449, *((_DWORD *)v350 + 585));
            if( !v450 )
            {
              v1589 = 0i64;
              goto LABEL_683;
            }
            v451 = *((_DWORD *)v350 + 612);
            if( (v451 & 4) == 0 )
            {
              v452 = *((_DWORD *)v350 + 505);
              v453 = *((_QWORD *)v350 + 249);
              v454 = (v451 & 0x20000000) != 0 ? *((_DWORD *)v350 + 585) : 0;
              if( v452 >= 8 )
              {
                v455 = (unsigned __int64)v452 >> 3;
                do
                {
                  *(_QWORD *)v350 = 0i64;
                  v452 -= 8;
                  v350 += 8;
                  --v455;
                }
                while( v455 );
              }
              for( ; v452; --v452 )
                *v350++ = 0;
              v456 = *(_DWORD *)(v450 + 2340);
              *(_DWORD *)(v450 + 2340) = v454;
              if( v454 == 3 )
              {
                (*(void(__fastcall **)(__int64, __int64))(v450 + 872))(v453, 1i64);
              }
              else
              {
                v457 = 0;
                if( (*(_DWORD *)(v450 + 2448) & 0x10000000) == 0 )
                  v457 = v454;
                if( v457 )
                  (*(void(__fastcall **)(__int64, _QWORD))(v450 + 552))(v453 - 8, *(_QWORD *)(v453 - 8));
                else(*(void(__fastcall **)(__int64, __int64))(v450 + 256))(v453, 1i64);
              }
              *(_DWORD *)(v450 + 2340) = v456;
            }
            *(_DWORD *)(v450 + 2448) &= ~4u;
          }
          ++*(_DWORD *)(v450 + 2060);
          v458 = v450 + v448;
          v1663 = (_DWORD *)v458;
          v459 = (_QWORD *)v458;
          v460 = 48;
          v461 = 6i64;
          do
          {
            *v459 = 0i64;
            v460 -= 8;
            ++v459;
            --v461;
          }
          while( v461 );
          for( ; v460; --v460 )
          {
            *(_BYTE *)v459 = 0;
            v459 = (_QWORD *)((char *)v459 + 1);
          }
          v462 = v1572;
          *(_DWORD *)v458 = v47;
          v443 = v462;
          v47 = v1580;
          *(_QWORD *)(v458 + 8) = v462;
          *(_DWORD *)(v458 + 16) = v47;
          *(_DWORD *)(v450 + 2088) += v47;
          v463 = *(_DWORD *)(v450 + 2068);
          v464 = *(_QWORD *)(v450 + 2072);
          if( v462 < v462 + v47 )
          {
            v465 = (char *)v462;
            do
            {
              _mm_prefetchnta(v465);
              v465 += 64;
            }
            while( (unsigned __int64)v465 < v462 + v47 );
          }
          v438 = *(_QWORD *)(v450 + 2072);
          v466 = (unsigned int)v47 >> 7;
          if( (unsigned int)v47 >> 7 )
          {
            do
            {
              v467 = 8i64;
              do
              {
                v468 = v438 ^ *(_QWORD *)v443;
                v469 = *(_QWORD *)(v443 + 8);
                v443 += 16i64;
                v438 = __ROL8__(__ROL8__(v468, v463) ^ v469, v463);
                --v467;
              }
              while( v467 );
              v470 = __ROL8__(v464 ^ (v443 - v462), 17) ^ v464 ^ (v443 - v462);
              v1692 = (v470 * (unsigned __int128)0x7010008004002001ui64) >> 64;
              v463 = ((unsigned __int8)(v470 ^ v1692) ^ (unsigned __int8)v463) & 0x3F;
              if( !v463 )
                LOBYTE(v463) = 1;
              --v466;
            }
            while( v466 );
            v17 = (__int64)v1566;
            v426 = v1576;
          }
          v471 = v47 & 0x7F;
          if( v471 >= 8 )
          {
            v472 = (v47 & 0x7F) >> 3;
            do
            {
              v438 = __ROL8__(*(_QWORD *)v443 ^ v438, v463);
              v443 += 8i64;
              v471 -= 8;
              --v472;
            }
            while( v472 );
          }
          if( v471 )
          {
            do
            {
              v473 = *(unsigned __int8 *)v443++;
              v438 = __ROL8__(v473 ^ v438, v463);
              --v471;
            }
            while( v471 );
            v17 = (__int64)v1566;
          }
          for( i15 = v438; ; v438 = (unsigned int)i15 ^ (unsigned int)v438 )
          {
            i15 >>= 31;
            if( !i15 )
              break;
          }
          LODWORD(v438) = v438 & 0x7FFFFFFF;
          v350 = (_BYTE *)v450;
          *(_DWORD *)(v458 + 20) = v438;
          v1615 = v1663;
          *(_DWORD *)(v450 + 2088) += v47;
        }
        else
        {
          v462 = v1572;
          v1598[24] = v47;
          LODWORD(v47) = v1580;
        }
        if( (*((_DWORD *)v350 + 612) & 0x40000000) != 0 && (_DWORD)v47 )
          sub_1403E92DC((__int64)v350, v462, v47, (__int64)(v1615 + 7));
        v1595 = v350;
        v475 = 4294967294i64;
        v1615[6] = 0;
        v1615[6] |= 1u;
        v476 = v1598;
        v1598[36] = 35;
        v476[46] = v476[46] & 0xFFFFFFFE | (v426 != 0);
        if( v476[40] >= 0x94u )
        {
          v477 = (char *)BugCheckParameter2;
          v47 = *((_QWORD *)v476 + 19);
          v478 = (*((__int64(__fastcall **)(PVOID, __int64, __int64, unsigned __int64))v350 + 63))(
                   BugCheckParameter2,
                   4294967294i64,
                   v438,
                   v443);
          if( !v478 )
          {
            v1589 = 0i64;
            goto LABEL_683;
          }
          v479 = *(unsigned int *)(v478 + 80);
          v476[46] |= 2u;
          v480 = &v477[v479];
          v481 = *(char **)(v47 + 112);
          if( v481 >= v477 && v481 < v480 )
          {
            *((_QWORD *)v476 + 21) = *(_QWORD *)v481;
            v476[46] |= 4u;
          }
          v482 = *(char **)(v47 + 120);
          if( v482 >= v477 && v482 < v480 )
          {
            *((_QWORD *)v476 + 22) = *(_QWORD *)v482;
            v476[46] |= 8u;
          }
        }
        v72 = (*((_DWORD *)v350 + 612) & 0x400000) == 0;
        v1589 = v350;
        if( v72 )
          goto LABEL_1038;
        v483 = BugCheckParameter2;
        v484 = (char *)(*((__int64(__fastcall **)(PVOID, __int64, __int64, unsigned __int64))v350 + 63))(
                         BugCheckParameter2,
                         v475,
                         v438,
                         v443);
        v1578 = v484;
        LODWORD(v47) = (_DWORD)v484;
        if( !v484 )
          goto LABEL_664;
        v485 = *((_WORD *)v484 + 3);
        v1784 = v485;
        v1572 = (unsigned int)v1570 / 0xCui64;
        if( !v485 )
        {
          if( (*((_DWORD *)v350 + 612) & 0x200000) == 0 )
          {
            v1627 = -805294751;
            KeBugCheckEx(__ROR4__(-805306349, 92), (PVOID)0xA, v483, 0i64, 0i64);
          }
          if( !*((_DWORD *)v350 + 574) )
          {
            *((_QWORD *)v350 + 288) = v350 - 0x5C5FC0A76E374B18i64;
            *((_QWORD *)v350 + 289) = 0i64;
            *((_QWORD *)v350 + 290) = 271i64;
            *((_QWORD *)v350 + 291) = v483;
            *((_DWORD *)v350 + 574) = 1;
            goto LABEL_804;
          }
          goto LABEL_664;
        }
        v486 = 0;
        v487 = v485;
        v488 = (unsigned int *)v1571;
        LODWORD(v1577) = 0;
        v1568 = v485;
        v1581 = 12i64 * ((unsigned int)v1570 / 0xC);
        v1588 = v1571 + v1581;
        v489 = (__int64)&v484[*((unsigned __int16 *)v484 + 10) + 24];
        v1569 = v489;
        v490 = (_DWORD *)v489;
        v1567 = v489;
        v491 = 1i64;
        do
        {
          v492 = v490[4];
          v493 = (unsigned int)v490[3];
          if( v492 <= v490[2] )
            v492 = v490[2];
          v1580 = v490[3];
          v494 = v493 + v492;
          if( v486 )
          {
            if( v494 < *(_DWORD *)(v489 + 40i64 * (v486 - 1) + 12) )
            {
              if( (*((_DWORD *)v350 + 612) & 0x200000) == 0 )
              {
                v1626 = -805294751;
                KeBugCheckEx(__ROR4__(-805306349, 92), (PVOID)0xA, v483, (PVOID)1, 0i64);
              }
              if( !*((_DWORD *)v350 + 574) )
              {
                *((_QWORD *)v350 + 288) = v350 - 0x5C5FC0A76E374B18i64;
                *((_QWORD *)v350 + 289) = 0i64;
                *((_QWORD *)v350 + 290) = 271i64;
                *((_QWORD *)v350 + 291) = v483;
                *((_DWORD *)v350 + 574) = 1;
                goto LABEL_804;
              }
LABEL_664:
              v362 = -1073741701;
              goto LABEL_1039;
            }
            v486 = (unsigned int)v1577;
          }
          if( v488 != (unsigned int *)v1588 )
          {
            do
            {
              v495 = v488[1];
              if( *v488 >= v494 || v495 <= (unsigned int)v493 )
                break;
              if( *v488 < (unsigned int)v493 || v495 > v494 )
              {
                if( (*((_DWORD *)v350 + 612) & 0x200000) == 0 )
                {
                  v1623 = -805294751;
                  KeBugCheckEx(__ROR4__(-805306349, 92), (PVOID)0xA, v483, (PVOID)2, 0i64);
                }
LABEL_842:
                if( !*((_DWORD *)v350 + 574) )
                {
                  *((_QWORD *)v350 + 288) = v350 - 0x5C5FC0A76E374B18i64;
                  *((_QWORD *)v350 + 289) = 0i64;
                  *((_QWORD *)v350 + 290) = 271i64;
                  *((_QWORD *)v350 + 291) = v483;
                  *((_DWORD *)v350 + 574) = 1;
LABEL_804:
                  __b8((__int64)v350, 0i64);
                }
                goto LABEL_664;
              }
              v496 = v488[2];
              v1693 = v488;
              if( (v496 & 1) != 0 || (*((_BYTE *)v483 + v496) & 0x20) != 0 )
              {
                v497 = v490[4];
                v498 = v490[3];
                if( v497 <= v490[2] )
                  v497 = v490[2];
                LODWORD(v47) = v498 + v497;
                v499 = (unsigned int *)(*((__int64(__fastcall **)(unsigned int *, PVOID, __int64, __int64))v350 + 131))(
                                         v488,
                                         v483,
                                         v493,
                                         v491);
                v500 = v499;
                if( *v499 < v498 || v499[1] > (unsigned int)v47 )
                {
                  v501 = BugCheckParameter2;
                  if( (*((_DWORD *)v350 + 612) & 0x200000) == 0 )
                  {
                    v1624 = -805294751;
                    KeBugCheckEx(
                      __ROR4__(-805306349, 92),
                      (PVOID)0xA,
                      BugCheckParameter2,
                      (PVOID)(((_DWORD)v499 - (_DWORD)BugCheckParameter2) | 0x80000000),
                      0i64);
                  }
                  if( !*((_DWORD *)v350 + 574) )
                  {
                    *((_QWORD *)v350 + 288) = v350 - 0x5C5FC0A76E374B18i64;
                    *((_QWORD *)v350 + 289) = 0i64;
                    *((_QWORD *)v350 + 290) = 271i64;
                    *((_QWORD *)v350 + 291) = v501;
                    *((_DWORD *)v350 + 574) = 1;
                    __b8((__int64)v350, 0i64);
                  }
                }
                v502 = (unsigned int *)(*((__int64(__fastcall **)(unsigned int *, PVOID, char *))v350 + 132))(
                                         v500,
                                         BugCheckParameter2,
                                         (char *)BugCheckParameter2 + *v500);
                if( *v502 >= v498 && v502[1] <= (unsigned int)v47 )
                {
                  v483 = BugCheckParameter2;
                }
                else
                {
                  v483 = BugCheckParameter2;
                  v503 = ((_DWORD)v502 - (_DWORD)BugCheckParameter2) | 0x80000000;
                  if( (*((_DWORD *)v350 + 612) & 0x200000) == 0 )
                  {
                    v1625 = -805294751;
                    KeBugCheckEx(__ROR4__(-805306349, 92), (PVOID)0xA, BugCheckParameter2, (PVOID)v503, 0i64);
                  }
                  if( !*((_DWORD *)v350 + 574) )
                  {
                    *((_QWORD *)v350 + 288) = v350 - 0x5C5FC0A76E374B18i64;
                    *((_QWORD *)v350 + 289) = 0i64;
                    *((_QWORD *)v350 + 290) = 271i64;
                    *((_QWORD *)v350 + 291) = v483;
                    *((_DWORD *)v350 + 574) = 1;
                    __b8((__int64)v350, 0i64);
                  }
                }
                v490 = (_DWORD *)v1567;
                v493 = v1580;
              }
              v488 += 3;
            }
            while( v488 != (unsigned int *)v1588 );
            v486 = (unsigned int)v1577;
            v491 = 1i64;
            v487 = v1568;
            v489 = v1569;
          }
          ++v486;
          v490 += 10;
          LODWORD(v1577) = v486;
          v1567 = (__int64)v490;
        }
        while( v486 < v487 );
        v504 = v1572;
        v47 = (unsigned __int64)v1578;
        v505 = v1581;
        if( v488 != (unsigned int *)v1588 )
        {
          if( (*((_DWORD *)v350 + 612) & 0x200000) == 0 )
          {
            v1622 = -805294751;
            KeBugCheckEx(__ROR4__(-805306349, 92), (PVOID)0xA, v483, (PVOID)3, 0i64);
          }
          goto LABEL_842;
        }
        if( (_DWORD)v1572 )
          v506 = (v1572 + 6) & 0xFFFFFFF8;
        else
          v506 = 0;
        v507 = *((unsigned int *)v350 + 505);
        v508 = v507 + v506 + 24 * (v487 + 2);
        if( v508 <= *((_DWORD *)v350 + 647) )
        {
          v509 = (__int64)v350;
          v1577 = v350;
          *((_DWORD *)v350 + 505) = v508;
          goto LABEL_865;
        }
        v1577 = (_BYTE *)sub_140A0EB30(v350, v508, *((_DWORD *)v350 + 585));
        v509 = (__int64)v1577;
        if( !v1577 )
          goto LABEL_683;
        v510 = *((_DWORD *)v350 + 612);
        if( (v510 & 4) == 0 )
        {
          v511 = *((_DWORD *)v350 + 505);
          v512 = *((_QWORD *)v350 + 249);
          v513 = (v510 & 0x20000000) != 0 ? *((_DWORD *)v350 + 585) : 0;
          if( v511 >= 8 )
          {
            v514 = (unsigned __int64)v511 >> 3;
            do
            {
              *(_QWORD *)v350 = 0i64;
              v511 -= 8;
              v350 += 8;
              --v514;
            }
            while( v514 );
          }
          for( ; v511; --v511 )
            *v350++ = 0;
          v515 = *(_DWORD *)(v509 + 2340);
          *(_DWORD *)(v509 + 2340) = v513;
          if( v513 == 3 )
          {
            (*(void(__fastcall **)(__int64, __int64))(v509 + 872))(v512, 1i64);
          }
          else
          {
            v516 = 0;
            if( (*(_DWORD *)(v509 + 2448) & 0x10000000) == 0 )
              v516 = v513;
            if( v516 )
              (*(void(__fastcall **)(__int64, _QWORD))(v509 + 552))(v512 - 8, *(_QWORD *)(v512 - 8));
            else(*(void(__fastcall **)(__int64, __int64))(v509 + 256))(v512, 1i64);
          }
          *(_DWORD *)(v509 + 2340) = v515;
        }
        *(_DWORD *)(v509 + 2448) &= ~4u;
        v504 = v1572;
        v487 = v1568;
LABEL_865:
        v517 = v509 + v507;
        ++*(_DWORD *)(v509 + 2060);
        v1656 = v509 + v507;
        v518 = 48;
        v519 = (_QWORD *)(v509 + v507);
        v520 = 6i64;
        do
        {
          *v519 = 0i64;
          v518 -= 8;
          ++v519;
          --v520;
        }
        while( v520 );
        for( ; v518; --v518 )
        {
          *(_BYTE *)v519 = 0;
          v519 = (_QWORD *)((char *)v519 + 1);
        }
        v521 = v1571;
        *(_DWORD *)v517 = 30;
        *(_QWORD *)(v517 + 8) = v521;
        *(_DWORD *)(v517 + 16) = 0;
        v522 = *(_QWORD *)(v509 + 2072);
        for( i16 = v522; ; LODWORD(v522) = i16 ^ v522 )
        {
          i16 >>= 31;
          if( !i16 )
            break;
        }
        *(_DWORD *)(v517 + 20) = v522 & 0x7FFFFFFF;
        v350 = (_BYTE *)v509;
        v1608 = v1656;
        v1589 = (_BYTE *)v509;
        *(_QWORD *)(v1656 + 24) = BugCheckParameter2;
        *(_DWORD *)(v1608 + 32) = *(_DWORD *)(v47 + 80);
        *(_DWORD *)(v1608 + 36) = v1570;
        *(_WORD *)(v1608 + 40) = v1784;
        v524 = 0;
        *(_WORD *)(v1608 + 42) = *(_WORD *)(v1608 + 42) & 0xFFFE | (v1576 != 0);
        v1578 = (char *)(v1608 + 48);
        if( v504 )
          v47 = v1608 + 48 + (((unsigned int)(v504 - 1) + 7i64) & 0xFFFFFFFFFFFFFFF8ui64);
        else
          v47 = v1608 + 48;
        v525 = *(unsigned __int16 *)(v1608 + 40);
        v72 = v504 == 0;
        v526 = (unsigned int *)v1571;
        v1572 = v47;
        v527 = v47 + 24 * v525;
        v528 = 12i64;
        if( v72 )
          v528 = v505;
        v1581 = v47 + 24 * v525;
        v1567 = v1571 + v528;
        if( v487 )
        {
          v529 = v487;
          v530 = (_DWORD *)(v47 + 8);
          do
          {
            v531 = 2i64;
            do
            {
              *(v530 - 2) = 0;
              *(v530 - 1) = 0;
              *v530 = 0x80000000;
              v530 += 3;
              --v531;
            }
            while( v531 );
            --v529;
          }
          while( v529 );
          v17 = (__int64)v1566;
        }
        if( v47 != v527 )
        {
          v532 = (unsigned __int8 *)v1569;
          while( 1 )
          {
            v533 = 0;
            if( (*((_DWORD *)v532 + 9) & 0x2000000) != 0
              || (v534 = *(_DWORD *)v532, *(_DWORD *)v532 == 1414090313) && *((_DWORD *)v532 + 1) == 1195525195
              || v534 == 1162297680 && ((v535 = *((_WORD *)v532 + 2), v535 == 30839) || v535 == 29303 || v535 == 30583)
              || v534 == 1095914053 && *((_WORD *)v532 + 2) == 16724 )
            {
              v533 = 1;
            }
            else
            {
              v536 = 7;
              v537 = *(unsigned __int8 **)(v509 + 2352);
              v538 = v532;
              v1668 = *(__int64 **)(v509 + 2360);
              v1669 = *(unsigned __int8 **)(v509 + 2368);
              v1670 = *(unsigned __int8 **)(v509 + 2376);
              v1667 = v537;
              while( 1 )
              {
                v539 = *v538++;
                v540 = *v537++;
                if( v539 != v540 )
                  break;
                if( !--v536 )
                  goto LABEL_912;
              }
              v541 = v1668;
              v542 = 8;
              v543 = (__int64 *)v532;
              do
              {
                v544 = *v543++;
                v545 = *v541++;
                if( v544 != v545 )
                  goto LABEL_905;
                v542 -= 8;
              }
              while( v542 >= 8 );
              if( v542 )
              {
                while( 1 )
                {
                  v546 = *(unsigned __int8 *)v543;
                  v543 = (__int64 *)((char *)v543 + 1);
                  v547 = *(unsigned __int8 *)v541;
                  v541 = (__int64 *)((char *)v541 + 1);
                  if( v546 != v547 )
                    break;
                  if( !--v542 )
                    goto LABEL_912;
                }
LABEL_905:
                v548 = v1669;
                v549 = 4;
                v550 = v532;
                while( 1 )
                {
                  v551 = *v550++;
                  v552 = *v548++;
                  if( v551 != v552 )
                    break;
                  if( !--v549 )
                    goto LABEL_912;
                }
                v553 = v1670;
                v554 = 6;
                v555 = v532;
                while( 1 )
                {
                  v556 = *v555++;
                  v557 = *v553++;
                  if( v556 != v557 )
                    break;
                  if( !--v554 )
                    goto LABEL_912;
                }
              }
              else
              {
LABEL_912:
                v533 = 1;
              }
              v526 = (unsigned int *)v1571;
            }
            v558 = *((_DWORD *)v532 + 9);
            if( v558 < 0 )
              v533 = 1;
            v1785 = v533;
            if( v533 && *(_DWORD *)v532 == 1414090313 && *((_DWORD *)v532 + 1) == 1195525195 )
            {
              if( (*(_DWORD *)(v509 + 2452) & 0x2000) != 0 )
                v533 = 0;
              v1785 = v533;
            }
            v559 = (char *)BugCheckParameter2;
            if( (*(_DWORD *)(v509 + 2452) & 0x4000) != 0
              && (v558 & 0x20000000) != 0
              && (BugCheckParameter2 == *(PVOID *)(v509 + 1512) || BugCheckParameter2 == *(PVOID *)(v509 + 1520)) )
            {
              v533 = 1;
              v1785 = 1;
            }
            v560 = *((_DWORD *)v532 + 4);
            v561 = *((_DWORD *)v532 + 3);
            v562 = v1588;
            if( v560 <= *((_DWORD *)v532 + 2) )
              v560 = *((_DWORD *)v532 + 2);
            v563 = v561 + v560;
            v1568 = *((_DWORD *)v532 + 3);
            v564 = 0;
            v1576 = v563;
            if( v526 == (unsigned int *)v1588 )
            {
              v565 = 0;
            }
            else
            {
              v524 = *v526;
              v565 = v526[1];
            }
            v1580 = v565;
            v566 = v561;
            LODWORD(v1570) = v524;
            if( v526 != (unsigned int *)v1588 && v524 > v561 && v565 <= v563 && !v533 )
            {
              *(_DWORD *)v47 = v561;
              v567 = (__int64 *)&v1671;
              *(_DWORD *)(v47 + 4) = v524;
              v568 = *(unsigned int *)v47;
              v566 = v524;
              v569 = v524 - v568;
              v570 = (unsigned __int64)&v559[v568];
              v571 = &v559[v568 + v524 - (unsigned int)v568];
              v572 = v1637;
              do
              {
                if( v570 < *v567 + (unsigned __int64)(unsigned int)*v572 && (unsigned __int64)v571 > *v567 )
                {
                  v563 = v1576;
                  v562 = v1588;
                  v526 = (unsigned int *)v1571;
                  goto LABEL_961;
                }
                ++v564;
                ++v567;
                ++v572;
              }
              while( v564 < 6 );
              v573 = (__int64)v1577;
              v574 = (_QWORD *)v570;
              *((_DWORD *)v1577 + 522) += v569;
              v575 = *(_DWORD *)(v573 + 2068);
              v576 = *(_QWORD *)(v573 + 2072);
              v577 = (char *)v570;
              if( v570 < (unsigned __int64)v571 )
              {
                do
                {
                  _mm_prefetchnta(v577);
                  v577 += 64;
                }
                while( v577 < v571 );
              }
              v578 = v569 >> 7;
              v579 = v576;
              if( v569 >> 7 )
              {
                do
                {
                  v580 = 8i64;
                  do
                  {
                    v581 = v574[1] ^ __ROL8__(*v574 ^ v579, v575);
                    v574 += 2;
                    v579 = __ROL8__(v581, v575);
                    --v580;
                  }
                  while( v580 );
                  v582 = (__ROL8__(v576 ^ ((unsigned __int64)v574 - v570), 17) ^ v576 ^ ((unsigned __int64)v574 - v570))
                       * (unsigned __int128)0x7010008004002001ui64;
                  v1694 = *((_QWORD *)&v582 + 1);
                  v575 = ((unsigned __int8)v582 ^ (unsigned __int8)(BYTE8(v582) ^ v575)) & 0x3F;
                  if( !v575 )
                    LOBYTE(v575) = 1;
                  --v578;
                }
                while( v578 );
                v17 = (__int64)v1566;
                v524 = v1570;
                v565 = v1580;
              }
              v583 = v569 & 0x7F;
              if( v583 >= 8 )
              {
                v584 = (unsigned __int64)v583 >> 3;
                do
                {
                  v579 = __ROL8__(*v574++ ^ v579, v575);
                  v583 -= 8;
                  --v584;
                }
                while( v584 );
              }
              if( v583 )
              {
                do
                {
                  v585 = *(unsigned __int8 *)v574;
                  v574 = (_QWORD *)((char *)v574 + 1);
                  v579 = __ROL8__(v585 ^ v579, v575);
                  --v583;
                }
                while( v583 );
                v17 = (__int64)v1566;
              }
              for( i17 = v579; ; LODWORD(v579) = i17 ^ v579 )
              {
                i17 >>= 31;
                if( !i17 )
                  break;
              }
              v563 = v1576;
              v561 = v1568;
              v526 = (unsigned int *)v1571;
              *(_DWORD *)(v1572 + 8) = v579 & 0x7FFFFFFF;
              v562 = v1588;
            }
LABEL_961:
            if( v524 < v561 )
            {
              v588 = v1785;
            }
            else
            {
              v587 = v565 <= v563;
              v588 = v1785;
              if( v587 && v526 != (unsigned int *)v562 )
              {
                v589 = (unsigned int *)v1567;
LABEL_999:
                v616 = v589[1];
                while( v616 <= v563 && v589 != (unsigned int *)v562 )
                {
                  if( v588 )
                  {
                    v590 = 0x80;
                  }
                  else
                  {
                    v591 = v526[1];
                    v566 = *v589;
                    v592 = (__int64)v1577;
                    if( *v589 < (unsigned int)v591 )
                    {
                      if( (*((_DWORD *)v1577 + 612) & 0x200000) == 0 )
                      {
                        v1630 = -805294751;
                        KeBugCheckEx(__ROR4__(-805306349, 92), (PVOID)0xA, BugCheckParameter2, (PVOID)6, 0i64);
                      }
                      if( !*((_DWORD *)v1577 + 574) )
                      {
                        v593 = (__int64)v1577;
                        *((_QWORD *)v1577 + 288) = v1577 - 0x5C5FC0A76E374B18i64;
                        *(_QWORD *)(v592 + 2312) = 0i64;
                        v594 = BugCheckParameter2;
                        *(_QWORD *)(v592 + 2320) = 271i64;
                        *(_QWORD *)(v592 + 2328) = v594;
                        *(_DWORD *)(v592 + 2296) = 1;
                        __b8(v593, 0i64);
                      }
                    }
                    v595 = (__int64 *)&v1671;
                    v596 = v566 - v591;
                    v597 = (char *)BugCheckParameter2 + v591;
                    v598 = 0;
                    v599 = v1637;
                    v600 = (char *)BugCheckParameter2 + v591 + v566 - (unsigned int)v591;
                    do
                    {
                      if( (unsigned __int64)v597 < *v595 + (unsigned __int64)(unsigned int)*v599
                        && (unsigned __int64)v600 > *v595 )
                      {
                        goto LABEL_996;
                      }
                      ++v598;
                      ++v595;
                      ++v599;
                    }
                    while( v598 < 6 );
                    if( v596 < 4 )
                    {
LABEL_996:
                      v590 = 0x80;
                    }
                    else
                    {
                      *(_DWORD *)(v592 + 2088) += v596;
                      v601 = v597;
                      v602 = *(_DWORD *)(v592 + 2068);
                      v603 = *((_QWORD *)v1577 + 259);
                      for( i18 = v597; i18 < v600; i18 += 64 )
                        _mm_prefetchnta(i18);
                      v605 = *((_QWORD *)v1577 + 259);
                      v606 = v596 >> 7;
                      if( v596 >> 7 )
                      {
                        do
                        {
                          v607 = 8i64;
                          do
                          {
                            v608 = v605 ^ *v601;
                            v609 = v601[1];
                            v601 += 2;
                            v605 = __ROL8__(__ROL8__(v608, v602) ^ v609, v602);
                            --v607;
                          }
                          while( v607 );
                          v610 = __ROL8__(v603 ^ ((char *)v601 - v597), 17) ^ v603 ^ ((char *)v601 - v597);
                          v1695 = ((unsigned __int64)v610 * (unsigned __int128)0x7010008004002001ui64) >> 64;
                          v602 = ((unsigned __int8)(v610 ^ v1695) ^ (unsigned __int8)v602) & 0x3F;
                          if( !v602 )
                            LOBYTE(v602) = 1;
                          --v606;
                        }
                        while( v606 );
                        v17 = (__int64)v1566;
                        v588 = v1785;
                      }
                      v611 = v596 & 0x7F;
                      if( v611 >= 8 )
                      {
                        v612 = (unsigned __int64)v611 >> 3;
                        do
                        {
                          v605 = __ROL8__(*v601++ ^ v605, v602);
                          v611 -= 8;
                          --v612;
                        }
                        while( v612 );
                      }
                      if( v611 )
                      {
                        do
                        {
                          v613 = *(unsigned __int8 *)v601;
                          v601 = (_QWORD *)((char *)v601 + 1);
                          v605 = __ROL8__(v613 ^ v605, v602);
                          --v611;
                        }
                        while( v611 );
                        v588 = v1785;
                      }
                      for( i19 = v605; ; LOBYTE(v605) = i19 ^ v605 )
                      {
                        i19 >>= 7;
                        if( !i19 )
                          break;
                      }
                      v590 = v605 & 0x7F;
                    }
                    v526 = (unsigned int *)v1571;
                    v563 = v1576;
                  }
                  v615 = v1578++;
                  *v615 = v590;
                  v526 += 3;
                  v589 = (unsigned int *)(v1567 + 12);
                  v1571 = (signed __int64)v526;
                  v562 = v1588;
                  v1567 = (__int64)v589;
                  if( v589 != (unsigned int *)v1588 )
                    goto LABEL_999;
                }
              }
            }
            v617 = v1572;
            v524 = 0;
            if( v588 || v566 == v563 )
              goto LABEL_1029;
            v618 = BugCheckParameter2;
            v619 = v1637;
            *(_DWORD *)(v1572 + 12) = v566;
            v620 = (__int64 *)&v1671;
            *(_DWORD *)(v617 + 16) = v563;
            v621 = *(unsigned int *)(v617 + 12);
            v622 = v563 - v621;
            v623 = (unsigned __int64)v618 + v621;
            v624 = 0;
            v625 = v623 + v563 - (unsigned int)v621;
            do
            {
              if( v623 < *v620 + (unsigned __int64)(unsigned int)*v619 && v625 > *v620 )
              {
                v526 = (unsigned int *)v1571;
LABEL_1029:
                v509 = (__int64)v1577;
                goto LABEL_1030;
              }
              ++v624;
              ++v620;
              ++v619;
            }
            while( v624 < 6 );
            v509 = (__int64)v1577;
            v626 = (_QWORD *)v623;
            v627 = (char *)v623;
            *((_DWORD *)v1577 + 522) += v622;
            v628 = *(_DWORD *)(v509 + 2068);
            v629 = *(_QWORD *)(v509 + 2072);
            if( v623 < v625 )
            {
              do
              {
                _mm_prefetchnta(v627);
                v627 += 64;
              }
              while( (unsigned __int64)v627 < v625 );
            }
            v630 = *(_QWORD *)(v509 + 2072);
            v631 = v622 >> 7;
            if( v622 >> 7 )
            {
              do
              {
                v632 = 8i64;
                do
                {
                  v633 = v630 ^ *v626;
                  v634 = v626[1];
                  v626 += 2;
                  v630 = __ROL8__(__ROL8__(v633, v628) ^ v634, v628);
                  --v632;
                }
                while( v632 );
                v635 = __ROL8__(v629 ^ ((unsigned __int64)v626 - v623), 17) ^ v629 ^ ((unsigned __int64)v626 - v623);
                v1696 = (v635 * (unsigned __int128)0x7010008004002001ui64) >> 64;
                v628 = ((unsigned __int8)(v635 ^ v1696) ^ (unsigned __int8)v628) & 0x3F;
                if( !v628 )
                  LOBYTE(v628) = 1;
                --v631;
              }
              while( v631 );
              v17 = (__int64)v1566;
            }
            v636 = v622 & 0x7F;
            if( v636 >= 8 )
            {
              v637 = (unsigned __int64)v636 >> 3;
              do
              {
                v630 = __ROL8__(*v626++ ^ v630, v628);
                v636 -= 8;
                --v637;
              }
              while( v637 );
            }
            if( v636 )
            {
              do
              {
                v638 = *(unsigned __int8 *)v626;
                v626 = (_QWORD *)((char *)v626 + 1);
                v630 = __ROL8__(v638 ^ v630, v628);
                --v636;
              }
              while( v636 );
              v17 = (__int64)v1566;
            }
            for( i20 = v630; ; LODWORD(v630) = i20 ^ v630 )
            {
              i20 >>= 31;
              if( !i20 )
                break;
            }
            v617 = v1572;
            v526 = (unsigned int *)v1571;
            *(_DWORD *)(v1572 + 20) = v630 & 0x7FFFFFFF;
LABEL_1030:
            if( v526 != (unsigned int *)v1588 && *v526 >= v1568 && v526[1] <= v1576 )
            {
              v640 = v1567;
              if( v1567 != v1588 )
              {
                v641 = v1578;
                *v1578 = 0x80;
                v1578 = v641 + 1;
                v1567 = v640 + 12;
              }
              v526 += 3;
              v1571 = (signed __int64)v526;
            }
            v47 = v617 + 24;
            v532 = (unsigned __int8 *)(v1569 + 40);
            v1572 = v47;
            v1569 += 40i64;
            if( v47 == v1581 )
            {
              v350 = v1589;
              break;
            }
          }
        }
LABEL_1038:
        v1595 = v350;
        v362 = 0;
LABEL_1039:
        v352 = v1586;
        goto LABEL_1040;
      }
      v425[8] |= 2u;
      goto LABEL_716;
    }
    switch( v79 )
    {
      case 12:
        if( !*(_QWORD *)(v17 + 2432) )
          goto LABEL_1736;
        v1267 = *(_DWORD *)(v17 + 2452);
        LOBYTE(v1268) = v1267;
        if( *(_DWORD *)(v17 + 2084) )
        {
          if( (((unsigned __int8)v1267 ^ (unsigned __int8)(v1267 >> 3)) & 4) != 0 )
            goto LABEL_1736;
        }
        else
        {
          v1268 = v1267 ^ ((unsigned __int8)v1267 ^ (unsigned __int8)(8 * v1267)) & 0x20;
          *(_DWORD *)(v17 + 2452) = v1268;
        }
        if( (v1268 & 4) != 0 )
        {
          v47 = *((_QWORD *)v56 + 4);
          if( v47 )
          {
            v1269 = *(unsigned int *)(v17 + 2084);
            v1270 = ((((_WORD)v47 + (_WORD)v1269) & 0xFFF)
                   + (unsigned __int64)(unsigned int)(*((_DWORD *)v56 + 10) - v1269)
                   + 4095) >> 12;
            v1271 = v47 + v1269;
          }
          else
          {
            v1271 = *((_QWORD *)v56 + 1);
            v1270 = (*((unsigned int *)v56 + 4) + (unsigned __int64)(*((_DWORD *)v56 + 2) & 0xFFF) + 4095) >> 12;
          }
          v1272 = v1271 & 0xFFFFFFFFFFFFF000ui64;
          while( v1270 )
          {
            --v1270;
            if( (*(unsigned __int8(__fastcall **)(unsigned __int64))(v17 + 688))(v1272) && !*(_DWORD *)(v17 + 2296) )
            {
              *(_QWORD *)(v17 + 2304) = v17 - 0x5C5FC0A76E374B18i64;
              *(_QWORD *)(v17 + 2312) = v56 - 0x4C48B4211BBACBEBi64;
              *(_QWORD *)(v17 + 2320) = *(int *)v56;
              *(_QWORD *)(v17 + 2328) = v1272;
              *(_DWORD *)(v17 + 2296) = 1;
              __b8(v17, 0i64);
            }
            *(_DWORD *)(v17 + 2088) += 256;
            v1272 += 4096i64;
            if( v47 )
            {
              *(_DWORD *)(v17 + 2084) += 4096;
              if( *(_DWORD *)(v17 + 2088) >= *(_DWORD *)(v17 + 2092) )
                break;
            }
          }
          if( v47 && !v1270 )
            *(_DWORD *)(v17 + 2084) = 0;
          if( *(_DWORD *)(v17 + 2084) )
            goto LABEL_238;
          v1273 = *(_QWORD *)(v17 + 1344);
          LODWORD(v47) = KeGetCurrentIrql();
          __writecr8(0xFui64);
          (*(void(__fastcall **)(__int64))(v17 + 336))(v1273);
          v1275 = **(unsigned int ***)(v17 + 1552);
          v1276 = v1275 + 4;
          v1277 = *((_BYTE *)v1275 + 12);
          v1278 = (unsigned __int64)&v1275[6 * *v1275 + 4];
          do
          {
            v1279 = 24i64;
            v1280 = (__int64 *)(v56 + 24);
            v1281 = v1276;
            do
            {
              v1282 = *(_QWORD *)v1281;
              v1281 += 2;
              v1283 = *v1280++;
              if( v1282 != v1283 )
                goto LABEL_2123;
              v1279 = (unsigned int)(v1279 - 8);
            }
            while( (unsigned int)v1279 >= 8 );
            if( !(_DWORD)v1279 )
              break;
            while( 1 )
            {
              v1274 = *(unsigned __int8 *)v1281;
              v1281 = (unsigned int *)((char *)v1281 + 1);
              v1284 = *(unsigned __int8 *)v1280;
              v1280 = (__int64 *)((char *)v1280 + 1);
              if( v1274 != v1284 )
                break;
              v72 = (_DWORD)v1279 == 1;
              v1279 = (unsigned int)(v1279 - 1);
              if( v72 )
                goto LABEL_2124;
            }
LABEL_2123:
            v1276 += 6;
          }
          while( (unsigned __int64)v1276 < v1278 );
LABEL_2124:
          v17 = (__int64)v1566;
          (*((void(__fastcall **)(_QWORD, __int64, __int64, __int64 *))v1566 + 50))(
            *((_QWORD *)v1566 + 168),
            v1274,
            v1279,
            v1280);
          __writecr8((unsigned __int8)v47);
          if( v1277 )
          {
            v50 = 0;
            if( (*(_DWORD *)(v17 + 2452) & 0x10) != 0 && !*(_DWORD *)(v17 + 2296) )
            {
              *(_QWORD *)(v17 + 2304) = v17 - 0x5C5FC0A76E374B18i64;
              *(_QWORD *)(v17 + 2312) = v56 - 0x4C48B4211BBACBEBi64;
              *(_QWORD *)(v17 + 2320) = *(int *)v56;
              *(_QWORD *)(v17 + 2328) = 1i64;
              *(_DWORD *)(v17 + 2296) = 1;
              __b8(v17, 0i64);
            }
            if( *((_QWORD *)v56 + 3) == 1i64 )
              goto LABEL_238;
          }
          if( v1276 == (unsigned int *)v1278 )
          {
            v50 = 0;
            if( *(_DWORD *)(v17 + 2296) )
              goto LABEL_238;
            *(_QWORD *)(v17 + 2304) = v17 - 0x5C5FC0A76E374B18i64;
            *(_QWORD *)(v17 + 2312) = v56 - 0x4C48B4211BBACBEBi64;
            *(_QWORD *)(v17 + 2320) = *(int *)v56;
            *(_QWORD *)(v17 + 2328) = v1276;
            *(_DWORD *)(v17 + 2296) = 1;
            goto LABEL_460;
          }
LABEL_237:
          v50 = 0;
          goto LABEL_238;
        }
LABEL_2132:
        if( !*(_DWORD *)(v17 + 2084) )
        {
          if( v79 == 12 )
          {
            if( !*(_QWORD *)(v17 + 2432) )
            {
              *(_DWORD *)(v17 + 2084) = 0;
              goto LABEL_2175;
            }
            v1285 = *(_DWORD *)(v17 + 2452) ^ ((unsigned __int8)*(_DWORD *)(v17 + 2452) ^ (unsigned __int8)(8 * *(_DWORD *)(v17 + 2452))) & 0x20;
            *(_DWORD *)(v17 + 2452) = v1285;
            if( (v1285 & 4) != 0 )
            {
              v1286 = *((_QWORD *)v56 + 1) & 0xFFFFFFFFFFFFF000ui64;
              v1287 = (*((unsigned int *)v56 + 4) + (unsigned __int64)(*((_DWORD *)v56 + 2) & 0xFFF) + 4095) >> 12;
              if( !v1287 )
                goto LABEL_2175;
              LODWORD(v47) = 1;
              do
              {
                --v1287;
                if( (*(unsigned __int8(__fastcall **)(unsigned __int64))(v17 + 688))(v1286)
                  && !*(_DWORD *)(v17 + 2296) )
                {
                  *(_QWORD *)(v17 + 2304) = v17 - 0x5C5FC0A76E374B18i64;
                  *(_QWORD *)(v17 + 2312) = v56 - 0x4C48B4211BBACBEBi64;
                  *(_QWORD *)(v17 + 2320) = *(int *)v56;
                  *(_QWORD *)(v17 + 2328) = v1286;
                  *(_DWORD *)(v17 + 2296) = 1;
                  __b8(v17, 0i64);
                }
                *(_DWORD *)(v17 + 2088) += 256;
                v1286 += 4096i64;
              }
              while( v1287 );
LABEL_2174:
              v79 = v1773;
              goto LABEL_2175;
            }
            v1288 = (_QWORD *)*((_QWORD *)v56 + 1);
            v1289 = *((unsigned int *)v56 + 4);
            v1290 = v1288;
            *(_DWORD *)(v17 + 2088) += v1289;
            v1291 = (char *)v1288;
            v1292 = *(_DWORD *)(v17 + 2068);
            v1293 = *(_QWORD *)(v17 + 2072);
            if( v1288 < (_QWORD *)((char *)v1288 + v1289) )
            {
              do
              {
                _mm_prefetchnta(v1291);
                v1291 += 64;
              }
              while( v1291 < (char *)v1288 + v1289 );
            }
            v1294 = *(_QWORD *)(v17 + 2072);
            v1295 = (unsigned int)v1289 >> 7;
            if( (unsigned int)v1289 >> 7 )
            {
              do
              {
                v1296 = 8i64;
                do
                {
                  v1297 = v1294 ^ *v1290;
                  v1298 = v1290[1];
                  v1290 += 2;
                  v1294 = __ROL8__(__ROL8__(v1297, v1292) ^ v1298, v1292);
                  --v1296;
                }
                while( v1296 );
                v1299 = __ROL8__(v1293 ^ ((char *)v1290 - (char *)v1288), 17) ^ v1293 ^ ((char *)v1290 - (char *)v1288);
                v1717 = (v1299 * (unsigned __int128)0x7010008004002001ui64) >> 64;
                v1292 = ((unsigned __int8)(v1717 ^ v1299) ^ (unsigned __int8)v1292) & 0x3F;
                if( !v1292 )
                  LOBYTE(v1292) = 1;
                --v1295;
              }
              while( v1295 );
              v17 = (__int64)v1566;
            }
            v1300 = v1289 & 0x7F;
            LODWORD(v47) = 1;
            if( v1300 >= 8 )
            {
              v1301 = (unsigned __int64)v1300 >> 3;
              do
              {
                v1294 = __ROL8__(*v1290++ ^ v1294, v1292);
                v1300 -= 8;
                --v1301;
              }
              while( v1301 );
            }
            if( v1300 )
            {
              do
              {
                v1302 = *(unsigned __int8 *)v1290;
                v1290 = (_QWORD *)((char *)v1290 + 1);
                v1294 = __ROL8__(v1302 ^ v1294, v1292);
                --v1300;
              }
              while( v1300 );
              v17 = (__int64)v1566;
            }
            for( i21 = v1294; ; LODWORD(v1294) = i21 ^ v1294 )
            {
              i21 >>= 31;
              if( !i21 )
                break;
            }
            v1304 = *((_DWORD *)v56 + 5);
            v1305 = v1294 & 0x7FFFFFFF;
            if( v1305 == v1304 )
              goto LABEL_2174;
            v1306 = *((unsigned int *)v56 + 4);
            v1307 = *((_QWORD *)v56 + 1);
            if( *((_DWORD *)v56 + 4) && (*(_DWORD *)(v17 + 2452) & 0x40) != 0 )
            {
              v1308 = KeGetCurrentIrql();
              __writecr8(2ui64);
              v1309 = v1307 & 0xFFFFFFFFFFFFF000ui64;
              v1310 = (v1307 + v1306 - 1) | 0xFFF;
              v1311 = (v1307 & 0xFFFFFFFFFFFFF000ui64) - 1;
              while( 1 )
              {
                v47 = v1308;
                while( 1 )
                {
                  v1312 = (*(__int64(__fastcall **)(unsigned __int64, _QWORD))(v17 + 1128))(v1309, 0i64);
                  if( v1312 != -1073741267 )
                    break;
                  if( v1308 > 1u )
                    goto LABEL_2171;
                  v47 = v1308;
                  __writecr8(v1308);
                  KeGetCurrentIrql();
                  __writecr8(2ui64);
                }
                if( v1312 < 0 )
                  break;
LABEL_2171:
                v1309 += 4096i64;
                v1311 += 4096i64;
                if( v1311 == v1310 )
                  goto LABEL_2172;
              }
              __writecr8(v47);
              v56 = v1565;
              v50 = 0;
              v1304 = *((_DWORD *)v1565 + 5);
            }
            v1334 = *(_DWORD *)(v17 + 2296);
            if( !v1334 )
            {
              v1335 = v1305;
              v1336 = v1304;
              goto LABEL_2198;
            }
          }
          else
          {
            v1338 = (_QWORD *)*((_QWORD *)v56 + 1);
            v1339 = *((unsigned int *)v56 + 4);
            v1340 = v1338;
            *(_DWORD *)(v17 + 2088) += v1339;
            v1341 = (char *)v1338;
            v1342 = *(_DWORD *)(v17 + 2068);
            v1343 = *(_QWORD *)(v17 + 2072);
            if( v1338 < (_QWORD *)((char *)v1338 + v1339) )
            {
              do
              {
                _mm_prefetchnta(v1341);
                v1341 += 64;
              }
              while( v1341 < (char *)v1338 + v1339 );
            }
            v1344 = *(_QWORD *)(v17 + 2072);
            v1345 = (unsigned int)v1339 >> 7;
            if( (unsigned int)v1339 >> 7 )
            {
              do
              {
                v1346 = 8i64;
                do
                {
                  v1347 = v1344 ^ *v1340;
                  v1348 = v1340[1];
                  v1340 += 2;
                  v1344 = __ROL8__(__ROL8__(v1347, v1342) ^ v1348, v1342);
                  --v1346;
                }
                while( v1346 );
                v1349 = __ROL8__(v1343 ^ ((char *)v1340 - (char *)v1338), 17) ^ v1343 ^ ((char *)v1340 - (char *)v1338);
                v1718 = (v1349 * (unsigned __int128)0x7010008004002001ui64) >> 64;
                v1342 = ((unsigned __int8)(v1718 ^ v1349) ^ (unsigned __int8)v1342) & 0x3F;
                if( !v1342 )
                  LOBYTE(v1342) = 1;
                --v1345;
              }
              while( v1345 );
              v17 = (__int64)v1566;
            }
            v1350 = v1339 & 0x7F;
            LODWORD(v47) = 1;
            if( v1350 >= 8 )
            {
              v1351 = (unsigned __int64)v1350 >> 3;
              do
              {
                v1344 = __ROL8__(*v1340++ ^ v1344, v1342);
                v1350 -= 8;
                --v1351;
              }
              while( v1351 );
            }
            if( v1350 )
            {
              do
              {
                v1352 = *(unsigned __int8 *)v1340;
                v1340 = (_QWORD *)((char *)v1340 + 1);
                v1344 = __ROL8__(v1352 ^ v1344, v1342);
                --v1350;
              }
              while( v1350 );
              v17 = (__int64)v1566;
            }
            for( i22 = v1344; ; LODWORD(v1344) = i22 ^ v1344 )
            {
              i22 >>= 31;
              if( !i22 )
                break;
            }
            v1354 = v1344 & 0x7FFFFFFF;
            if( v1354 == *((_DWORD *)v56 + 5) )
            {
LABEL_2173:
              v50 = 0;
              goto LABEL_2174;
            }
            if( !*(_DWORD *)v56 && *((_DWORD *)v56 + 6) )
              v50 = 1;
            v1355 = *((unsigned int *)v56 + 4);
            v1356 = *((_QWORD *)v56 + 1);
            if( *((_DWORD *)v56 + 4) )
            {
              v1357 = 64i64;
              if( (*(_DWORD *)(v17 + 2452) & 0x40) != 0 )
              {
                v1358 = KeGetCurrentIrql();
                __writecr8(2ui64);
                v1359 = v1356 & 0xFFFFFFFFFFFFF000ui64;
                v1581 = (v1356 + v1355 - 1) | 0xFFF;
                v1360 = (v1356 & 0xFFFFFFFFFFFFF000ui64) - 1;
                while( 1 )
                {
                  v47 = v1358;
                  while( 1 )
                  {
                    v1361 = (*(__int64(__fastcall **)(unsigned __int64, _QWORD, __int64, _QWORD *))(v17 + 1128))(
                              v1359,
                              0i64,
                              v1357,
                              v1340);
                    if( v1361 != -1073741267 )
                      break;
                    if( v50 )
                      goto LABEL_2234;
                    if( v1358 > 1u )
                      goto LABEL_2232;
                    v47 = v1358;
                    __writecr8(v1358);
                    KeGetCurrentIrql();
                    __writecr8(2ui64);
                  }
                  if( v1361 < 0 )
                    break;
LABEL_2232:
                  v1359 += 4096i64;
                  v1360 += 4096i64;
                  if( v1360 == v1581 )
                  {
LABEL_2172:
                    __writecr8(v47);
                    v56 = v1565;
                    goto LABEL_2173;
                  }
                }
LABEL_2234:
                __writecr8(v47);
                v56 = v1565;
              }
            }
            v1334 = *(_DWORD *)(v17 + 2296);
            v50 = 0;
            v1335 = *((unsigned int *)v56 + 5);
            if( !v1334 )
            {
              v1336 = v1354;
LABEL_2198:
              *(_QWORD *)(*(_QWORD *)(v17 + 1424) + 24i64) = v1336 ^ v1335;
              v1334 = *(_DWORD *)(v17 + 2296);
            }
          }
          v1337 = *((_QWORD *)v56 + 1);
          if( !v1334 )
          {
            *(_QWORD *)(v17 + 2304) = v17 - 0x5C5FC0A76E374B18i64;
            *(_QWORD *)(v17 + 2312) = v56 - 0x4C48B4211BBACBEBi64;
            *(_QWORD *)(v17 + 2320) = *(int *)v56;
            *(_QWORD *)(v17 + 2328) = v1337;
            *(_DWORD *)(v17 + 2296) = 1;
            __b8(v17, 0i64);
          }
          goto LABEL_2174;
        }
LABEL_2175:
        v1313 = *(unsigned int *)(v17 + 2084);
        v1314 = *((unsigned int *)v56 + 4);
        v1569 = *((_QWORD *)v56 + 1);
        v1315 = (unsigned int *)(v1569 + 12 * v1313);
        v1578 = (char *)v1315;
        v1316 = (int *)&v56[4 * v1313 + 48];
        v1567 = (__int64)v1316;
        v1317 = v1569 + 12 * (v1314 / 0xC);
        v1572 = v1317;
        if( v1315 == (unsigned int *)v1317 )
          goto LABEL_2291;
        while( 2 )
        {
          if( *v1316 < 0 )
            goto LABEL_2282;
          v1318 = *((_QWORD *)v56 + 4) + *v1315;
          LODWORD(v47) = v1315[1] - *v1315;
          v1581 = v1318;
          if( v79 == 43 )
          {
            v1362 = sub_140A0F5E8(v17, (__int64 *)v1318, v47);
            *(_DWORD *)(v17 + 2088) += 8 * v47;
            if( (*(_DWORD *)(v17 + 2452) & 0x800) != 0 )
            {
              v1363 = (_BYTE *)(v1318 - 6);
              v1364 = (char *)(v1318 - 6 + 5);
              v1365 = *v1364;
              if( *(_BYTE *)(v1318 - 6) != 76
                || v1363[1] != 0x87
                || v1363[2]
                || v1363[3] != 0x98
                || v1363[4] != 0xC3
                || v1365 != -112 && v1365 != -15 )
              {
                goto LABEL_2586;
              }
              v1366 = *(volatile signed __int32 **)(v17 + 1248);
              while( 1 )
              {
                _disable();
                if( !_interlockedbittestandset(v1366, (*(_DWORD *)(v17 + 2448) >> 10) & 0x1F) )
                  break;
                _enable();
                _mm_pause();
              }
              v1367 = *(struct _KPRCB **)(v17 + 2272);
              v1368 = 38i64;
              v1369 = 304;
              v1370 = v1367;
              do
              {
                *(_QWORD *)&v1370->_MxCsr = 0i64;
                v1369 -= 8;
                v1370 = (struct _KPRCB *)((char *)v1370 + 8);
                --v1368;
              }
              while( v1368 );
              if( v1369 )
              {
                v1368 = 0xFFFFFFFFi64;
                do
                {
                  LOBYTE(v1370->_MxCsr) = 0;
                  v1370 = (struct _KPRCB *)((char *)v1370 + 1);
                  --v1369;
                }
                while( v1369 );
              }
              *(_OWORD *)&v1367->NextThread = *(_OWORD *)(v17 + 2120);
              *(_OWORD *)&v1367->NestingLevel = *(_OWORD *)(v17 + 2136);
              *(_OWORD *)&v1367->ProcessorState.SpecialRegisters.KernelDr0 = *(_OWORD *)(v17 + 2152);
              v1651[0] = 303;
              *(_QWORD *)&v1651[1] = v1367;
              LOWORD(v1367->NextThread) = v17 + 2188;
              v1371 = (unsigned __int64)(v17 + 2188) >> 16;
              v1720 = v17 + 2188;
              HIWORD(v1367->NextThread) = v1371;
              LODWORD(v1367->IdleThread) = (unsigned __int64)(v17 + 2188) >> 32;
              __sidt(v1679);
              __lidt(v1651);
              *v1364 = -15;
              if( *v1364 != -15 )
                goto LABEL_2262;
              if( (*(_DWORD *)(v17 + 2452) & 0x20000) == 0 )
              {
                v1367 = KeGetCurrentPrcb();
                **(_QWORD **)(v17 + 1216) = v17 - 0x5C5FC0A76E374B18i64;
                v1371 = v1318;
                **(_QWORD **)(v17 + 1224) = v1367;
                **(_QWORD **)(v17 + 1232) = v1318;
                **(_QWORD **)(v17 + 1240) = 275i64;
              }
              ((void(__fastcall *)(unsigned __int64, struct _KPRCB *, __int64, __int64))(v1318 - 6 + 5))(
                v1371,
                v1367,
                v1368,
                1i64);
              if( (*(_DWORD *)(v17 + 2452) & 0x20000) == 0 )
              {
                **(_QWORD **)(v17 + 1216) = 0xA3A03F5891C8B4E8ui64;
                **(_QWORD **)(v17 + 1224) = 0i64;
                **(_QWORD **)(v17 + 1232) = 0i64;
                **(_QWORD **)(v17 + 1240) = 0i64;
              }
              if( *v1364 == -15 )
              {
                *v1364 = -112;
                v1372 = *v1364 == -112;
              }
              else
              {
LABEL_2262:
                v1372 = 0;
              }
              __lidt(v1679);
              _InterlockedAnd(
                *(volatile signed __int32 **)(v17 + 1248),
                ~(1 << ((*(_DWORD *)(v17 + 2448) >> 10) & 0x1F)));
              _enable();
              if( !v1372 )
              {
LABEL_2586:
                if( !*(_DWORD *)(v17 + 2296) )
                {
                  v1373 = (int *)v1565;
                  *(_QWORD *)(v17 + 2304) = v17 - 0x5C5FC0A76E374B18i64;
                  *(_QWORD *)(v17 + 2312) = (char *)v1373 - 0x4C48B4211BBACBEBi64;
                  *(_QWORD *)(v17 + 2320) = *v1373;
                  *(_QWORD *)(v17 + 2328) = v1363;
                  *(_DWORD *)(v17 + 2296) = 1;
                  __b8(v17, 0i64);
                }
              }
              v1317 = v1572;
              v1315 = (unsigned int *)v1578;
            }
          }
          else
          {
            *(_DWORD *)(v17 + 2088) += v47;
            v1319 = (_QWORD *)v1318;
            v1320 = *(_DWORD *)(v17 + 2068);
            v1321 = (char *)v1318;
            v1322 = *(_QWORD *)(v17 + 2072);
            v1323 = v1318 + (unsigned int)v47;
            if( v1318 < v1323 )
            {
              do
              {
                _mm_prefetchnta(v1321);
                v1321 += 64;
              }
              while( (unsigned __int64)v1321 < v1323 );
            }
            v1324 = *(_QWORD *)(v17 + 2072);
            v1325 = (unsigned int)v47 >> 7;
            if( (unsigned int)v47 >> 7 )
            {
              do
              {
                v1326 = 8i64;
                do
                {
                  v1327 = v1324 ^ *v1319;
                  v1328 = v1319[1];
                  v1319 += 2;
                  v1324 = __ROL8__(__ROL8__(v1327, v1320) ^ v1328, v1320);
                  --v1326;
                }
                while( v1326 );
                v1329 = __ROL8__(v1322 ^ ((unsigned __int64)v1319 - v1318), 17) ^ v1322 ^ ((unsigned __int64)v1319
                                                                                         - v1318);
                v1719 = (v1329 * (unsigned __int128)0x7010008004002001ui64) >> 64;
                v1320 = ((unsigned __int8)(v1719 ^ v1329) ^ (unsigned __int8)v1320) & 0x3F;
                if( !v1320 )
                  LOBYTE(v1320) = 1;
                --v1325;
              }
              while( v1325 );
              v17 = (__int64)v1566;
              v1316 = (int *)v1567;
            }
            v1330 = v47 & 0x7F;
            if( v1330 >= 8 )
            {
              v1331 = (v47 & 0x7F) >> 3;
              do
              {
                v1324 = __ROL8__(*v1319++ ^ v1324, v1320);
                v1330 -= 8;
                --v1331;
              }
              while( v1331 );
              v1317 = v1572;
            }
            if( v1330 )
            {
              do
              {
                v1332 = *(unsigned __int8 *)v1319;
                v1319 = (_QWORD *)((char *)v1319 + 1);
                v1324 = __ROL8__(v1332 ^ v1324, v1320);
                --v1330;
              }
              while( v1330 );
              v17 = (__int64)v1566;
              v1316 = (int *)v1567;
            }
            for( i23 = v1324; ; LODWORD(v1324) = i23 ^ v1324 )
            {
              i23 >>= 31;
              if( !i23 )
                break;
            }
            v1362 = v1324 & 0x7FFFFFFF;
          }
          v1374 = *v1316;
          if( v1362 != (*v1316 & 0x7FFFFFFF) )
          {
            v1375 = (unsigned int)v47;
            if( (_DWORD)v47 && (*(_DWORD *)(v17 + 2452) & 0x40) != 0 )
            {
              LODWORD(v47) = KeGetCurrentIrql();
              __writecr8(2ui64);
              v1376 = v1318 & 0xFFFFFFFFFFFFF000ui64;
              v1377 = (v1375 + v1318 - 1) | 0xFFF;
              v1378 = (v1318 & 0xFFFFFFFFFFFFF000ui64) - 1;
              while( 1 )
              {
                v1379 = (unsigned __int8)v47;
                while( 1 )
                {
                  v1380 = (*(__int64(__fastcall **)(unsigned __int64, _QWORD))(v17 + 1128))(v1376, 0i64);
                  if( v1380 != -1073741267 )
                    break;
                  if( (unsigned __int8)v47 > 1u )
                    goto LABEL_2277;
                  v1379 = (unsigned __int8)v47;
                  __writecr8((unsigned __int8)v47);
                  KeGetCurrentIrql();
                  __writecr8(2ui64);
                }
                if( v1380 < 0 )
                  break;
LABEL_2277:
                v1376 += 4096i64;
                v1378 += 4096i64;
                if( v1378 == v1377 )
                {
                  __writecr8(v1379);
                  v1316 = (int *)v1567;
                  goto LABEL_2279;
                }
              }
              __writecr8(v1379);
              v1316 = (int *)v1567;
              v1318 = v1581;
              v1374 = *(_DWORD *)v1567;
            }
            v1382 = v1374;
            if( !*(_DWORD *)(v17 + 2296) )
            {
              LODWORD(v1382) = v1374 & 0x7FFFFFFF;
              *(_QWORD *)(*(_QWORD *)(v17 + 1424) + 24i64) = v1382 ^ v1362;
              if( !*(_DWORD *)(v17 + 2296) )
              {
                v56 = v1565;
                *(_QWORD *)(v17 + 2304) = v17 - 0x5C5FC0A76E374B18i64;
                *(_QWORD *)(v17 + 2312) = v56 - 0x4C48B4211BBACBEBi64;
                *(_QWORD *)(v17 + 2320) = *(int *)v56;
                *(_QWORD *)(v17 + 2328) = v1318;
                *(_DWORD *)(v17 + 2296) = 1;
                __b8(v17, 0i64);
                v1315 = (unsigned int *)v1578;
                v1317 = v1572;
LABEL_2281:
                v50 = 0;
LABEL_2282:
                ++v1316;
                v1315 += 3;
                v1567 = (__int64)v1316;
                v1578 = (char *)v1315;
                v1381 = v1315 == (unsigned int *)v1317;
                if( (unsigned __int64)v1315 >= v1317 )
                  goto LABEL_2285;
                v79 = v1773;
                if( *(_DWORD *)(v17 + 2088) >= *(_DWORD *)(v17 + 2092) )
                {
                  v1381 = v1315 == (unsigned int *)v1317;
LABEL_2285:
                  if( !v1381 )
                  {
                    *(_DWORD *)(v17 + 2084) = ((__int64)v1315 - v1569) / 12;
                    goto LABEL_238;
                  }
LABEL_2291:
                  v1383 = *(_QWORD *)(v17 + 1344);
                  LODWORD(v47) = KeGetCurrentIrql();
                  __writecr8(0xFui64);
                  (*(void(__fastcall **)(__int64))(v17 + 336))(v1383);
                  v1385 = **(unsigned int ***)(v17 + 1552);
                  v1386 = v1385 + 4;
                  v1387 = *((_BYTE *)v1385 + 12);
                  v1388 = (unsigned __int64)&v1385[6 * *v1385 + 4];
                  do
                  {
                    v1389 = 24i64;
                    v1390 = (__int64 *)(v56 + 24);
                    v1391 = v1386;
                    do
                    {
                      v1392 = *(_QWORD *)v1391;
                      v1391 += 2;
                      v1393 = *v1390++;
                      if( v1392 != v1393 )
                        goto LABEL_2299;
                      v1389 = (unsigned int)(v1389 - 8);
                    }
                    while( (unsigned int)v1389 >= 8 );
                    if( !(_DWORD)v1389 )
                      break;
                    while( 1 )
                    {
                      v1384 = *(unsigned __int8 *)v1391;
                      v1391 = (unsigned int *)((char *)v1391 + 1);
                      v1394 = *(unsigned __int8 *)v1390;
                      v1390 = (__int64 *)((char *)v1390 + 1);
                      if( v1384 != v1394 )
                        break;
                      v72 = (_DWORD)v1389 == 1;
                      v1389 = (unsigned int)(v1389 - 1);
                      if( v72 )
                        goto LABEL_2300;
                    }
LABEL_2299:
                    v1386 += 6;
                  }
                  while( (unsigned __int64)v1386 < v1388 );
LABEL_2300:
                  v17 = (__int64)v1566;
                  (*((void(__fastcall **)(_QWORD, __int64, __int64, __int64 *))v1566 + 50))(
                    *((_QWORD *)v1566 + 168),
                    v1384,
                    v1389,
                    v1390);
                  __writecr8((unsigned __int8)v47);
                  if( !v1387 )
                    goto LABEL_2305;
                  v50 = 0;
                  if( (*(_DWORD *)(v17 + 2452) & 0x10) != 0 && !*(_DWORD *)(v17 + 2296) )
                  {
                    *(_QWORD *)(v17 + 2304) = v17 - 0x5C5FC0A76E374B18i64;
                    *(_QWORD *)(v17 + 2312) = v56 - 0x4C48B4211BBACBEBi64;
                    *(_QWORD *)(v17 + 2320) = *(int *)v56;
                    *(_QWORD *)(v17 + 2328) = 1i64;
                    *(_DWORD *)(v17 + 2296) = 1;
                    __b8(v17, 0i64);
                  }
                  if( *((_QWORD *)v56 + 3) != 1i64 )
                  {
LABEL_2305:
                    v50 = 0;
                    if( v1386 == (unsigned int *)v1388 && !*(_DWORD *)(v17 + 2296) )
                    {
                      *(_QWORD *)(v17 + 2304) = v17 - 0x5C5FC0A76E374B18i64;
                      *(_QWORD *)(v17 + 2312) = v56 - 0x4C48B4211BBACBEBi64;
                      *(_QWORD *)(v17 + 2320) = *(int *)v56;
                      *(_QWORD *)(v17 + 2328) = v1386;
                      *(_DWORD *)(v17 + 2296) = 1;
                      __b8(v17, 0i64);
                    }
                  }
LABEL_1736:
                  *(_DWORD *)(v17 + 2084) = 0;
                  goto LABEL_238;
                }
                continue;
              }
            }
LABEL_2279:
            v1317 = v1572;
            v1315 = (unsigned int *)v1578;
          }
          break;
        }
        v56 = v1565;
        goto LABEL_2281;
      case 0:
        v221 = (_QWORD *)*((_QWORD *)v56 + 1);
        v222 = *((unsigned int *)v56 + 4);
        v223 = v221;
        *(_DWORD *)(v17 + 2088) += v222;
        v224 = (char *)v221;
        v225 = *(_DWORD *)(v17 + 2068);
        v47 = *(_QWORD *)(v17 + 2072);
        if( v221 < (_QWORD *)((char *)v221 + v222) )
        {
          do
          {
            _mm_prefetchnta(v224);
            v224 += 64;
          }
          while( v224 < (char *)v221 + v222 );
        }
        v226 = *(_QWORD *)(v17 + 2072);
        v227 = (unsigned int)v222 >> 7;
        if( (unsigned int)v222 >> 7 )
        {
          do
          {
            v228 = 8i64;
            do
            {
              v229 = v223[1] ^ __ROL8__(*v223 ^ v226, v225);
              v223 += 2;
              v226 = __ROL8__(v229, v225);
              --v228;
            }
            while( v228 );
            v230 = (__ROL8__(v47 ^ ((char *)v223 - (char *)v221), 17) ^ v47 ^ ((char *)v223 - (char *)v221))
                 * (unsigned __int128)0x7010008004002001ui64;
            v1736 = *((_QWORD *)&v230 + 1);
            v225 = ((unsigned __int8)(v230 ^ BYTE8(v230)) ^ (unsigned __int8)v225) & 0x3F;
            if( !v225 )
              LOBYTE(v225) = 1;
            --v227;
          }
          while( v227 );
          v17 = (__int64)v1566;
        }
        v231 = v222 & 0x7F;
        if( v231 >= 8 )
        {
          v232 = (unsigned __int64)v231 >> 3;
          do
          {
            v226 = __ROL8__(*v223++ ^ v226, v225);
            v231 -= 8;
            --v232;
          }
          while( v232 );
        }
        for( ; v231; --v231 )
        {
          v233 = *(unsigned __int8 *)v223;
          v223 = (_QWORD *)((char *)v223 + 1);
          v226 = __ROL8__(v233 ^ v226, v225);
        }
        for( i24 = v226; ; LODWORD(v226) = i24 ^ v226 )
        {
          i24 >>= 31;
          if( !i24 )
            break;
        }
        v235 = v226 & 0x7FFFFFFF;
        if( v235 == *((_DWORD *)v56 + 5) )
          goto LABEL_237;
        if( !*(_DWORD *)v56 && *((_DWORD *)v56 + 6) )
          v50 = 1;
        v236 = *((unsigned int *)v56 + 4);
        v237 = *((_QWORD *)v56 + 1);
        if( *((_DWORD *)v56 + 4) )
        {
          v238 = 64i64;
          if( (*(_DWORD *)(v17 + 2452) & 0x40) != 0 )
          {
            v239 = KeGetCurrentIrql();
            __writecr8(2ui64);
            v240 = v237 & 0xFFFFFFFFFFFFF000ui64;
            v1778 = (v237 + v236 - 1) | 0xFFF;
            v241 = (v237 & 0xFFFFFFFFFFFFF000ui64) - 1;
            while( 1 )
            {
              v47 = v239;
              while( 1 )
              {
                v242 = (*(__int64(__fastcall **)(unsigned __int64, _QWORD, __int64, _QWORD *))(v17 + 1128))(
                         v240,
                         0i64,
                         v238,
                         v223);
                if( v242 != -1073741267 )
                  break;
                if( v50 )
                  goto LABEL_452;
                if( v239 > 1u )
                  goto LABEL_450;
                v47 = v239;
                __writecr8(v239);
                KeGetCurrentIrql();
                __writecr8(2ui64);
              }
              if( v242 < 0 )
                break;
LABEL_450:
              v240 += 4096i64;
              v241 += 4096i64;
              if( v241 == v1778 )
                goto LABEL_236;
            }
LABEL_452:
            __writecr8(v47);
            v56 = v1565;
          }
        }
        v108 = *(_DWORD *)(v17 + 2296);
        v50 = 0;
        if( !v108 )
        {
          v109 = *((unsigned int *)v56 + 5) ^ (unsigned __int64)v235;
LABEL_455:
          *(_QWORD *)(*(_QWORD *)(v17 + 1424) + 24i64) = v109;
          v108 = *(_DWORD *)(v17 + 2296);
        }
LABEL_456:
        v243 = *((_QWORD *)v56 + 1);
LABEL_457:
        if( v108 )
          goto LABEL_238;
        *(_QWORD *)(v17 + 2304) = v17 - 0x5C5FC0A76E374B18i64;
        *(_QWORD *)(v17 + 2312) = v56 - 0x4C48B4211BBACBEBi64;
        *(_QWORD *)(v17 + 2320) = *(int *)v56;
        *(_QWORD *)(v17 + 2328) = v243;
        goto LABEL_459;
      case 1:
        goto LABEL_2132;
      case 4:
        if( (*(_DWORD *)(v17 + 2096) & 1) != 0 )
          goto LABEL_238;
        v204 = *(void(**)(void))(v17 + 376);
        v205 = 0;
        v206 = *(_QWORD *)(v17 + 1352);
        LODWORD(v1570) = 0;
        v204();
        if( (*(_DWORD *)(v17 + 2448) & 0x40000000) != 0 || (v207 = *(_DWORD *)(v17 + 2384), v207 >= 7) )
        {
          (*(void(__fastcall **)(_QWORD, _QWORD))(v17 + 296))(*(_QWORD *)(v17 + 2560), 0i64);
          v208 = 0x80;
        }
        else
        {
          v208 = 1 << v207;
        }
        v1777 = v208;
        (*(void(__fastcall **)(__int64, _QWORD))(v17 + 312))(v206, 0i64);
        v209 = *(_QWORD ***)(v17 + 1312);
        v210 = *v209;
        if( *v209 != v209 )
        {
          do
          {
            v211 = (unsigned __int64)v210 - *(_QWORD *)(v17 + 1744);
            if( v208 != 0x80
              && (v208 & *(_BYTE *)(v211 + *(_QWORD *)(v17 + 1720))) != 0
              && (*(_DWORD *)(v211 + *(_QWORD *)(v17 + 1728)) & *(_DWORD *)(v17 + 1752)) != 0
              && !*(_DWORD *)(v17 + 2296) )
            {
              v212 = (int *)v1565;
              *(_QWORD *)(v17 + 2304) = v17 - 0x5C5FC0A76E374B18i64;
              *(_QWORD *)(v17 + 2312) = (char *)v212 - 0x4C48B4211BBACBEBi64;
              *(_QWORD *)(v17 + 2320) = *v212;
              *(_QWORD *)(v17 + 2328) = v211 | 1;
              *(_DWORD *)(v17 + 2296) = 1;
              __b8(v17, 0i64);
            }
            _InterlockedOr8((volatile signed __int8 *)(v211 + *(_QWORD *)(v17 + 1720)), v208);
            v210 = (_QWORD *)*v210;
            ++v205;
          }
          while( v210 != v209 );
          LODWORD(v1570) = v205;
        }
        v213 = *(_QWORD *)(v17 + 1280);
        v1567 = KeGetCurrentIrql();
        __writecr8(0xCui64);
        (*(void(__fastcall **)(__int64, char *))(v17 + 328))(v213, v1767);
        v214 = *(unsigned __int64 **)(v17 + 1272);
        v47 = *v214;
        if( (unsigned __int64 *)*v214 != v214 )
        {
          v215 = v208;
          v216 = v208;
          v217 = (int *)v1565;
          v218 = ~v215;
          do
          {
            v219 = *(_QWORD *)(v17 + 1720);
            v220 = v47 - *(_QWORD *)(v17 + 1712);
            if( (*(char *)(v220 + v219) & v216) == 0 && !*(_DWORD *)(v17 + 2296) )
            {
              *(_QWORD *)(v17 + 2304) = v17 - 0x5C5FC0A76E374B18i64;
              *(_QWORD *)(v17 + 2312) = (char *)v217 - 0x4C48B4211BBACBEBi64;
              *(_QWORD *)(v17 + 2320) = *v217;
              *(_QWORD *)(v17 + 2328) = v220;
              *(_DWORD *)(v17 + 2296) = 1;
              __b8(v17, 0i64);
              v219 = *(_QWORD *)(v17 + 1720);
            }
            _InterlockedAnd8((volatile signed __int8 *)(v220 + v219), v218);
            v47 = *(_QWORD *)v47;
          }
          while( (unsigned __int64 *)v47 != v214 );
          v208 = v1777;
          v205 = v1570;
        }
        (*(void(__fastcall **)(char *))(v17 + 392))(v1767);
        __writecr8((unsigned __int8)v1567);
        if( v208 == 0x80 )
          (*(void(__fastcall **)(_QWORD, _QWORD))(v17 + 304))(*(_QWORD *)(v17 + 2560), 0i64);
        (*(void(__fastcall **)(_QWORD, _QWORD))(v17 + 320))(*(_QWORD *)(v17 + 1352), 0i64);
        (*(void(**)(void))(v17 + 384))();
        *(_DWORD *)(v17 + 2088) += v205 << 8;
        goto LABEL_237;
      case 5:
        v180 = *(_DWORD *)(v17 + 2096);
        if( (v180 & 1) == 0 )
          goto LABEL_238;
        if( (*(_DWORD *)(v17 + 2448) & 0x40000000) != 0 )
        {
          v181 = __rdtsc();
          v182 = (__ROR8__(v181, 3) ^ v181) * (unsigned __int128)0x7010008004002001ui64;
          v1735 = *((_QWORD *)&v182 + 1);
          v1776 = ((unsigned __int64)v182 ^ *((_QWORD *)&v182 + 1)) == 3
                                                                     * (((unsigned __int64)v182 ^ *((_QWORD *)&v182 + 1))
                                                                      / 3);
        }
        else
        {
          v1776 = (v180 & 3) == 3;
        }
        v183 = *(void(**)(void))(v17 + 376);
        v184 = 0;
        v185 = *(_QWORD *)(v17 + 1352);
        LODWORD(v1570) = 0;
        v183();
        if( (*(_DWORD *)(v17 + 2448) & 0x40000000) != 0 || (v186 = *(_DWORD *)(v17 + 2384), v186 >= 7) )
        {
          (*(void(__fastcall **)(_QWORD, _QWORD))(v17 + 296))(*(_QWORD *)(v17 + 2560), 0i64);
          v187 = 0x80;
        }
        else
        {
          v187 = 1 << v186;
        }
        (*(void(__fastcall **)(__int64, _QWORD))(v17 + 312))(v185, 0i64);
        v188 = *(volatile signed __int8 ***)(v17 + 1312);
        v189 = *v188;
        if( *v188 != (volatile signed __int8 *)v188 )
        {
          do
          {
            _InterlockedOr8(&v189[*(_QWORD *)(v17 + 1720) - *(_QWORD *)(v17 + 1744)], v187);
            v189 = *(volatile signed __int8 **)v189;
            ++v184;
          }
          while( v189 != (volatile signed __int8 *)v188 );
          LODWORD(v1570) = v184;
        }
        v47 = 4i64;
        v190 = **(_QWORD **)(v17 + 1360);
        v191 = *(unsigned int *)(*(_QWORD *)(v17 + 1840) + v190);
        while( 1 )
        {
          v192 = (__int64 *)(*(__int64(__fastcall **)(__int64, unsigned __int64))(v17 + 264))(v190, v47);
          v194 = 0i64;
          v195 = v192;
          if( v192 )
            break;
LABEL_393:
          v47 += 4i64;
          if( v47 >= v191 )
          {
            if( v187 == 0x80 )
              (*(void(__fastcall **)(_QWORD, _QWORD, __int64, __int64))(v17 + 304))(
                *(_QWORD *)(v17 + 2560),
                0i64,
                v193,
                v194);
            (*(void(__fastcall **)(_QWORD, _QWORD, __int64, __int64))(v17 + 320))(
              *(_QWORD *)(v17 + 1352),
              0i64,
              v193,
              v194);
            (*(void(**)(void))(v17 + 384))();
            *(_DWORD *)(v17 + 2088) += ((unsigned int)(v191 >> 2) + (_DWORD)v1570) << 8;
            goto LABEL_237;
          }
        }
        v196 = (_BYTE *)((*v192 >> 16) & 0xFFFFFFFFFFFFFFF0ui64);
        v197 = *v196 & 0x7F;
        if( v197 == 3 )
        {
          v193 = *(_QWORD *)(v17 + 1720);
          v198 = v193;
          if( (v187 & v196[v193]) == 0
            && (*(_DWORD *)&v196[*(_QWORD *)(v17 + 1728)] & *(_DWORD *)(v17 + 1752)) != 0
            && !*(_DWORD *)(v17 + 2296) )
          {
            v199 = (int *)v1565;
            *(_QWORD *)(v17 + 2304) = v17 - 0x5C5FC0A76E374B18i64;
            *(_QWORD *)(v17 + 2312) = (char *)v199 - 0x4C48B4211BBACBEBi64;
            *(_QWORD *)(v17 + 2320) = *v199;
            *(_QWORD *)(v17 + 2328) = v196;
            *(_DWORD *)(v17 + 2296) = 1;
            __b8(v17, 0i64);
            v198 = *(_QWORD *)(v17 + 1720);
          }
          _InterlockedAnd8(&v196[v198], ~v187);
          goto LABEL_392;
        }
        if( v197 == 6 )
        {
          if( v1776 )
          {
            v200 = *(_QWORD *)(v17 + 1664);
            v201 = *(_QWORD *)&v196[v200 + 32];
            if( (v201 == *(_QWORD *)(v17 + 800) || v201 == *(_QWORD *)(v17 + 808))
              && *(_QWORD *)&v196[v200 + 48] == *(_QWORD *)(v17 + 816) )
            {
              v202 = *(_QWORD *)&v196[v200 + 40] == *(_QWORD *)(v17 + 824);
              goto LABEL_389;
            }
            goto LABEL_390;
          }
        }
        else
        {
          v202 = v197 == 0;
LABEL_389:
          if( !v202 )
          {
LABEL_390:
            if( !*(_DWORD *)(v17 + 2296) )
            {
              v203 = (int *)v1565;
              *(_QWORD *)(v17 + 2304) = v17 - 0x5C5FC0A76E374B18i64;
              *(_QWORD *)(v17 + 2312) = (char *)v203 - 0x4C48B4211BBACBEBi64;
              *(_QWORD *)(v17 + 2320) = *v203;
              *(_QWORD *)(v17 + 2328) = v196;
              *(_DWORD *)(v17 + 2296) = 1;
              __b8(v17, 0i64);
            }
          }
        }
LABEL_392:
        (*(void(__fastcall **)(__int64, __int64 *, __int64, __int64))(v17 + 288))(v190, v195, v193, v194);
        goto LABEL_393;
      case 7:
        (*(void(__fastcall **)(char *, _QWORD))(v17 + 416))(v1740, *((unsigned int *)v56 + 7));
        (*(void(__fastcall **)(char *, char *))(v17 + 464))(v1740, v1741);
        for( i25 = 0; i25 < *((_DWORD *)v56 + 6); ++i25 )
        {
          v173 = *(unsigned int *)&v56[24 * i25 + 64];
          if( (*(_BYTE *)(v17 + 2171) & 2) != 0
            && (_DWORD)v173 == -1073741694
            && KeGetPcr()->Prcb.Number == *(_DWORD *)(v17 + 2288) )
          {
            v174 = *(_QWORD *)(v17 + 2280);
          }
          else
          {
            v174 = __readmsr(v173);
          }
          v175 = *(_QWORD *)&v56[24 * i25 + 48];
          v176 = *(_QWORD *)&v56[24 * i25 + 56];
          v177 = v175 & v174;
          if( v177 == v176 )
          {
            if( (*(_DWORD *)(v17 + 2452) & 0x200) != 0 && v175 == -1 )
              __writemsr(v173, v177);
          }
          else
          {
            v178 = v173 | ((unsigned __int64)*((unsigned int *)v56 + 7) << 32);
            if( !*(_DWORD *)(v17 + 2296) )
            {
              *(_QWORD *)(*(_QWORD *)(v17 + 1424) + 24i64) = v177 ^ v176;
              if( !*(_DWORD *)(v17 + 2296) )
              {
                *(_QWORD *)(v17 + 2304) = v17 - 0x5C5FC0A76E374B18i64;
                *(_QWORD *)(v17 + 2312) = v56 - 0x4C48B4211BBACBEBi64;
                *(_QWORD *)(v17 + 2320) = *(int *)v56;
                *(_QWORD *)(v17 + 2328) = v178;
                *(_DWORD *)(v17 + 2296) = 1;
                __b8(v17, 0i64);
              }
            }
          }
        }
        (*(void(__fastcall **)(char *))(v17 + 408))(v1741);
        v179 = *((_DWORD *)v56 + 6) << 15;
        goto LABEL_2414;
      case 8:
        v139 = *((_QWORD *)v56 + 3);
        v140 = *((_WORD *)v56 + 17);
        if( *(_WORD *)(v139 + *(_QWORD *)(v17 + 1776) + *(_QWORD *)(v17 + 1824)) != v140 && !*(_DWORD *)(v17 + 2296) )
        {
          *(_QWORD *)(v17 + 2304) = v17 - 0x5C5FC0A76E374B18i64;
          *(_QWORD *)(v17 + 2312) = v56 - 0x4C48B4211BBACBEBi64;
          *(_QWORD *)(v17 + 2320) = *(int *)v56;
          *(_QWORD *)(v17 + 2328) = v139;
          *(_DWORD *)(v17 + 2296) = 1;
          __b8(v17, 0i64);
          v140 = *((_WORD *)v56 + 17);
        }
        if( (v140 & *(_WORD *)(v17 + 1832)) == 0
          && *(_QWORD *)(v139 + *(_QWORD *)(v17 + 1784)) != v139 + *(_QWORD *)(v17 + 1784)
          && !*(_DWORD *)(v17 + 2296) )
        {
          *(_QWORD *)(v17 + 2304) = v17 - 0x5C5FC0A76E374B18i64;
          *(_QWORD *)(v17 + 2312) = v56 - 0x4C48B4211BBACBEBi64;
          *(_QWORD *)(v17 + 2320) = *(int *)v56;
          *(_QWORD *)(v17 + 2328) = v139;
          *(_DWORD *)(v17 + 2296) = 1;
          __b8(v17, 0i64);
        }
        v141 = (_QWORD *)*((_QWORD *)v56 + 1);
        v142 = *((unsigned int *)v56 + 4);
        v143 = v141;
        *(_DWORD *)(v17 + 2088) += v142;
        v144 = (char *)v141;
        v145 = *(_DWORD *)(v17 + 2068);
        v146 = *(_QWORD *)(v17 + 2072);
        if( v141 < (_QWORD *)((char *)v141 + v142) )
        {
          do
          {
            _mm_prefetchnta(v144);
            v144 += 64;
          }
          while( v144 < (char *)v141 + v142 );
        }
        v147 = *(_QWORD *)(v17 + 2072);
        v148 = (unsigned int)v142 >> 7;
        if( (unsigned int)v142 >> 7 )
        {
          do
          {
            v149 = 8i64;
            do
            {
              v150 = v143[1] ^ __ROL8__(*v143 ^ v147, v145);
              v143 += 2;
              v147 = __ROL8__(v150, v145);
              --v149;
            }
            while( v149 );
            v151 = (__ROL8__(v146 ^ ((char *)v143 - (char *)v141), 17) ^ v146 ^ (unsigned __int64)((char *)v143
                                                                                                 - (char *)v141))
                 * (unsigned __int128)0x7010008004002001ui64;
            v1734 = *((_QWORD *)&v151 + 1);
            v145 = ((unsigned __int8)v151 ^ (unsigned __int8)(BYTE8(v151) ^ v145)) & 0x3F;
            if( !v145 )
              LOBYTE(v145) = 1;
            --v148;
          }
          while( v148 );
          v17 = (__int64)v1566;
        }
        v152 = v142 & 0x7F;
        if( v152 >= 8 )
        {
          v153 = (unsigned __int64)v152 >> 3;
          do
          {
            v147 = __ROL8__(*v143++ ^ v147, v145);
            v152 -= 8;
            --v153;
          }
          while( v153 );
        }
        for( ; v152; --v152 )
        {
          v154 = *(unsigned __int8 *)v143;
          v143 = (_QWORD *)((char *)v143 + 1);
          v147 = __ROL8__(v154 ^ v147, v145);
        }
        for( i26 = v147; ; LODWORD(v147) = i26 ^ v147 )
        {
          i26 >>= 31;
          if( !i26 )
            break;
        }
        v156 = v147 & 0x7FFFFFFF;
        if( v156 == *((_DWORD *)v56 + 5) )
        {
LABEL_335:
          v50 = 0;
        }
        else
        {
          if( !*(_DWORD *)v56 && *((_DWORD *)v56 + 6) )
            v50 = 1;
          v157 = *((unsigned int *)v56 + 4);
          v158 = *((_QWORD *)v56 + 1);
          if( *((_DWORD *)v56 + 4) )
          {
            v159 = 64i64;
            if( (*(_DWORD *)(v17 + 2452) & 0x40) != 0 )
            {
              v160 = KeGetCurrentIrql();
              __writecr8(2ui64);
              v161 = v158 & 0xFFFFFFFFFFFFF000ui64;
              v1775 = (v158 + v157 - 1) | 0xFFF;
              v162 = (v158 & 0xFFFFFFFFFFFFF000ui64) - 1;
              while( 1 )
              {
                v163 = v160;
                while( 1 )
                {
                  v164 = (*(__int64(__fastcall **)(unsigned __int64, _QWORD, __int64, _QWORD *))(v17 + 1128))(
                           v161,
                           0i64,
                           v159,
                           v143);
                  if( v164 != -1073741267 )
                    break;
                  if( v50 )
                    goto LABEL_343;
                  if( v160 > 1u )
                    goto LABEL_333;
                  v163 = v160;
                  __writecr8(v160);
                  KeGetCurrentIrql();
                  __writecr8(2ui64);
                }
                if( v164 < 0 )
                  break;
LABEL_333:
                v161 += 4096i64;
                v162 += 4096i64;
                if( v162 == v1775 )
                {
                  __writecr8(v163);
                  v56 = v1565;
                  goto LABEL_335;
                }
              }
LABEL_343:
              __writecr8(v163);
              v56 = v1565;
            }
          }
          v170 = *(_DWORD *)(v17 + 2296);
          v50 = 0;
          if( !v170 )
          {
            *(_QWORD *)(*(_QWORD *)(v17 + 1424) + 24i64) = v156 ^ (unsigned __int64)*((unsigned int *)v56 + 5);
            v170 = *(_DWORD *)(v17 + 2296);
          }
          v171 = *((_QWORD *)v56 + 1);
          if( !v170 )
          {
            LODWORD(v47) = -465226731;
            *(_QWORD *)(v17 + 2304) = v17 - 0x5C5FC0A76E374B18i64;
            *(_QWORD *)(v17 + 2312) = v56 - 0x4C48B4211BBACBEBi64;
            *(_QWORD *)(v17 + 2320) = *(int *)v56;
            *(_QWORD *)(v17 + 2328) = v171;
            *(_DWORD *)(v17 + 2296) = 1;
            __b8(v17, 0i64);
            goto LABEL_337;
          }
        }
        LODWORD(v47) = -465226731;
LABEL_337:
        v1660 = v56 + 48;
        v165 = *((_WORD *)v56 + 16);
        v1564 = &v1643;
        v1659[0] = v165;
        v1659[1] = v165;
        v166 = *(_QWORD *)(v17 + 1288);
        v167 = *(int(__fastcall **)(__int16 *, _QWORD, _QWORD, _QWORD, __int64, _DWORD, _QWORD, __int64 *))(v17 + 488);
        LOBYTE(v1563) = 0;
        if( v167(v1659, 0i64, 0i64, 0i64, v166, v1563, 0i64, &v1643) < 0 )
          goto LABEL_238;
        v168 = v1643;
        if( v1643 != *((_QWORD *)v56 + 3) && !*(_DWORD *)(v17 + 2296) )
        {
          *(_QWORD *)(v17 + 2304) = v17 - 0x5C5FC0A76E374B18i64;
          *(_QWORD *)(v17 + 2312) = v56 - 0x4C48B4211BBACBEBi64;
          *(_QWORD *)(v17 + 2320) = *(int *)v56;
          *(_QWORD *)(v17 + 2328) = v168;
          *(_DWORD *)(v17 + 2296) = 1;
          __b8(v17, 0i64);
        }
LABEL_341:
        v169 = *(void(**)(void))(v17 + 480);
        goto LABEL_342;
      case 10:
        if( *((_DWORD *)v56 + 6) )
        {
          if( !*(_QWORD *)(v17 + 2432) )
            goto LABEL_270;
          v110 = *(_DWORD *)(v17 + 2452);
          if( (v110 & 4) != 0 )
            goto LABEL_270;
          if( *(_DWORD *)(v17 + 2084) )
          {
            if( (v110 & 0x20) != 0 )
              goto LABEL_270;
          }
          else
          {
            *(_DWORD *)(v17 + 2452) = v110 ^ ((unsigned __int8)v110 ^ (unsigned __int8)(8 * v110)) & 0x20;
          }
        }
        v111 = (unsigned __int64)&v56[16 * *(unsigned int *)(v17 + 2084) + 48];
        v112 = (unsigned __int64)&v56[16 * *((unsigned int *)v56 + 7) + 48];
        v1774 = v112;
        while( 1 )
        {
          if( *(int *)v111 >= 0 )
          {
            v113 = *(_QWORD *)(v111 + 8);
            v114 = *(unsigned int *)(v111 + 4);
            v115 = (_QWORD *)v113;
            *(_DWORD *)(v17 + 2088) += v114;
            v116 = (char *)v113;
            v117 = *(_DWORD *)(v17 + 2068);
            v118 = (unsigned int)v114;
            v47 = *(_QWORD *)(v17 + 2072);
            v1569 = v113;
            if( v113 < (unsigned __int64)(v114 + v113) )
            {
              do
              {
                _mm_prefetchnta(v116);
                v116 += 64;
              }
              while( (unsigned __int64)v116 < v114 + v113 );
            }
            v119 = v47;
            v120 = (unsigned int)v114 >> 7;
            if( (unsigned int)v114 >> 7 )
            {
              do
              {
                v121 = 8i64;
                do
                {
                  v122 = v119 ^ *v115;
                  v123 = v115[1];
                  v115 += 2;
                  v119 = __ROL8__(__ROL8__(v122, v117) ^ v123, v117);
                  --v121;
                }
                while( v121 );
                v124 = __ROL8__(v47 ^ ((unsigned __int64)v115 - v113), 17) ^ v47 ^ ((unsigned __int64)v115 - v113);
                v1733 = (v124 * (unsigned __int128)0x7010008004002001ui64) >> 64;
                v117 = ((unsigned __int8)(v124 ^ v1733) ^ (unsigned __int8)v117) & 0x3F;
                if( !v117 )
                  LOBYTE(v117) = 1;
                --v120;
              }
              while( v120 );
              v17 = (__int64)v1566;
              v112 = v1774;
            }
            v125 = v114 & 0x7F;
            if( (unsigned int)v125 >= 8 )
            {
              v126 = (unsigned __int64)(unsigned int)v125 >> 3;
              do
              {
                v119 = __ROL8__(*v115++ ^ v119, v117);
                v125 = (unsigned int)(v125 - 8);
                --v126;
              }
              while( v126 );
            }
            if( (_DWORD)v125 )
            {
              do
              {
                v127 = *(unsigned __int8 *)v115;
                v115 = (_QWORD *)((char *)v115 + 1);
                v119 = __ROL8__(v127 ^ v119, v117);
                v125 = (unsigned int)(v125 - 1);
              }
              while( (_DWORD)v125 );
              v17 = (__int64)v1566;
            }
            for( i27 = v119; ; LODWORD(v119) = i27 ^ v119 )
            {
              i27 >>= 31;
              if( !i27 )
                break;
            }
            v130 = *(_DWORD *)v111;
            v131 = v119 & 0x7FFFFFFF;
            if( v131 == (*(_DWORD *)v111 & 0x7FFFFFFF) )
            {
LABEL_284:
              v50 = 0;
            }
            else
            {
              if( v118 && (*(_DWORD *)(v17 + 2452) & 0x40) != 0 )
              {
                v132 = KeGetCurrentIrql();
                __writecr8(2ui64);
                v47 = v113 & 0xFFFFFFFFFFFFF000ui64;
                v1567 = (v118 + v113 - 1) | 0xFFF;
                v133 = (v113 & 0xFFFFFFFFFFFFF000ui64) - 1;
                while( 1 )
                {
                  v134 = v132;
                  while( 1 )
                  {
                    v135 = (*(__int64(__fastcall **)(unsigned __int64, _QWORD, __int64, _QWORD *))(v17 + 1128))(
                             v47,
                             0i64,
                             v125,
                             v115);
                    if( v135 != -1073741267 )
                      break;
                    if( v132 > 1u )
                      goto LABEL_282;
                    v134 = v132;
                    __writecr8(v132);
                    KeGetCurrentIrql();
                    __writecr8(2ui64);
                  }
                  if( v135 < 0 )
                    break;
LABEL_282:
                  v47 += 4096i64;
                  v133 += 4096i64;
                  if( v133 == v1567 )
                  {
                    __writecr8(v134);
                    v112 = v1774;
                    goto LABEL_284;
                  }
                }
                __writecr8(v134);
                v130 = *(_DWORD *)v111;
                v113 = v1569;
                v112 = v1774;
              }
              v138 = v130;
              v50 = 0;
              if( !*(_DWORD *)(v17 + 2296) )
              {
                LODWORD(v138) = v130 & 0x7FFFFFFF;
                *(_QWORD *)(*(_QWORD *)(v17 + 1424) + 24i64) = v138 ^ v131;
                if( !*(_DWORD *)(v17 + 2296) )
                {
                  v136 = (int *)v1565;
                  *(_QWORD *)(v17 + 2304) = v17 - 0x5C5FC0A76E374B18i64;
                  *(_QWORD *)(v17 + 2312) = (char *)v136 - 0x4C48B4211BBACBEBi64;
                  *(_QWORD *)(v17 + 2320) = *v136;
                  *(_QWORD *)(v17 + 2328) = v113;
                  *(_DWORD *)(v17 + 2296) = 1;
                  __b8(v17, 0i64);
                  goto LABEL_286;
                }
              }
            }
          }
          v136 = (int *)v1565;
LABEL_286:
          v111 += 16i64;
          v137 = v111 == v112;
          if( v111 >= v112 )
            goto LABEL_289;
          if( *(_DWORD *)(v17 + 2088) >= *(_DWORD *)(v17 + 2092) )
          {
            v137 = v111 == v112;
LABEL_289:
            if( !v137 )
            {
              v129 = (__int64)(v111 - (_QWORD)(v136 + 12)) >> 4;
              goto LABEL_291;
            }
LABEL_270:
            LODWORD(v129) = 0;
LABEL_291:
            *(_DWORD *)(v17 + 2084) = v129;
            goto LABEL_238;
          }
        }
    }
    if( v79 != 11 )
      goto LABEL_2328;
    if( !*(_QWORD *)(v17 + 2432) )
      goto LABEL_1736;
    if( *(_DWORD *)(v17 + 2084) )
    {
      v80 = *(_DWORD *)(v17 + 2452);
      if( (((unsigned __int8)v80 ^ (unsigned __int8)(v80 >> 3)) & 4) != 0 )
        goto LABEL_1736;
    }
    else
    {
      v80 = *(_DWORD *)(v17 + 2452) ^ ((unsigned __int8)*(_DWORD *)(v17 + 2452) ^ (unsigned __int8)(8
                                                                                                  * *(_DWORD *)(v17 + 2452))) & 0x20;
      *(_DWORD *)(v17 + 2452) = v80;
    }
    if( (v80 & 4) != 0 )
    {
      v81 = *((_QWORD *)v56 + 1) & 0xFFFFFFFFFFFFF000ui64;
      v82 = (*((unsigned int *)v56 + 4) + (unsigned __int64)(*((_DWORD *)v56 + 2) & 0xFFF) + 4095) >> 12;
      while( v82 )
      {
        --v82;
        if( (*(unsigned __int8(__fastcall **)(unsigned __int64))(v17 + 688))(v81) && !*(_DWORD *)(v17 + 2296) )
        {
          *(_QWORD *)(v17 + 2304) = v17 - 0x5C5FC0A76E374B18i64;
          *(_QWORD *)(v17 + 2312) = v56 - 0x4C48B4211BBACBEBi64;
          *(_QWORD *)(v17 + 2320) = *(int *)v56;
          *(_QWORD *)(v17 + 2328) = v81;
          *(_DWORD *)(v17 + 2296) = 1;
          __b8(v17, 0i64);
        }
        v81 += 4096i64;
        *(_DWORD *)(v17 + 2088) += 256;
      }
      goto LABEL_238;
    }
    v83 = (_QWORD *)*((_QWORD *)v56 + 1);
    v84 = *((unsigned int *)v56 + 4);
    v85 = v83;
    *(_DWORD *)(v17 + 2088) += v84;
    v86 = (char *)v83;
    v87 = *(_DWORD *)(v17 + 2068);
    v47 = *(_QWORD *)(v17 + 2072);
    if( v83 < (_QWORD *)((char *)v83 + v84) )
    {
      do
      {
        _mm_prefetchnta(v86);
        v86 += 64;
      }
      while( v86 < (char *)v83 + v84 );
    }
    v88 = *(_QWORD *)(v17 + 2072);
    v89 = (unsigned int)v84 >> 7;
    if( (unsigned int)v84 >> 7 )
    {
      do
      {
        v90 = 8i64;
        do
        {
          v91 = v88 ^ *v85;
          v92 = v85[1];
          v85 += 2;
          v88 = __ROL8__(__ROL8__(v91, v87) ^ v92, v87);
          --v90;
        }
        while( v90 );
        v93 = (__ROL8__(v47 ^ ((char *)v85 - (char *)v83), 17) ^ v47 ^ ((char *)v85 - (char *)v83))
            * (unsigned __int128)0x7010008004002001ui64;
        v1732 = *((_QWORD *)&v93 + 1);
        v87 = ((unsigned __int8)(v93 ^ BYTE8(v93)) ^ (unsigned __int8)v87) & 0x3F;
        if( !v87 )
          LOBYTE(v87) = 1;
        --v89;
      }
      while( v89 );
      v17 = (__int64)v1566;
    }
    v94 = v84 & 0x7F;
    if( v94 >= 8 )
    {
      v95 = (unsigned __int64)v94 >> 3;
      do
      {
        v88 = __ROL8__(*v85++ ^ v88, v87);
        v94 -= 8;
        --v95;
      }
      while( v95 );
      v17 = (__int64)v1566;
    }
    for( ; v94; --v94 )
    {
      v96 = *(unsigned __int8 *)v85;
      v85 = (_QWORD *)((char *)v85 + 1);
      v88 = __ROL8__(v96 ^ v88, v87);
    }
    for( i28 = v88; ; LODWORD(v88) = i28 ^ v88 )
    {
      i28 >>= 31;
      if( !i28 )
        break;
    }
    v98 = *((unsigned int *)v56 + 5);
    v99 = v88 & 0x7FFFFFFF;
    if( v99 != (_DWORD)v98 )
    {
      v100 = *((unsigned int *)v56 + 4);
      v101 = *((_QWORD *)v56 + 1);
      if( *((_DWORD *)v56 + 4) && (*(_DWORD *)(v17 + 2452) & 0x40) != 0 )
      {
        v102 = KeGetCurrentIrql();
        __writecr8(2ui64);
        v103 = v101 & 0xFFFFFFFFFFFFF000ui64;
        v104 = (v101 + v100 - 1) | 0xFFF;
        v105 = (v101 & 0xFFFFFFFFFFFFF000ui64) - 1;
        while( 2 )
        {
          v47 = v102;
          while( 1 )
          {
            v106 = (*(__int64(__fastcall **)(unsigned __int64, _QWORD))(v17 + 1128))(v103, 0i64);
            if( v106 != -1073741267 )
              break;
            if( v102 > 1u )
              goto LABEL_235;
            v47 = v102;
            __writecr8(v102);
            KeGetCurrentIrql();
            __writecr8(2ui64);
          }
          if( v106 < 0 )
          {
            __writecr8(v47);
            v56 = v1565;
            v50 = 0;
            v98 = *((unsigned int *)v1565 + 5);
            goto LABEL_244;
          }
LABEL_235:
          v103 += 4096i64;
          v105 += 4096i64;
          if( v105 != v104 )
            continue;
          break;
        }
LABEL_236:
        __writecr8(v47);
        goto LABEL_237;
      }
LABEL_244:
      v108 = *(_DWORD *)(v17 + 2296);
      if( !v108 )
      {
        v109 = v99 ^ v98;
        goto LABEL_455;
      }
      goto LABEL_456;
    }
LABEL_238:
    v107 = v1628 - 1;
    if( !*(_DWORD *)(v17 + 2084) )
      v107 = v1628;
    v24 = 1i64;
    v48 = v107 + 1;
    if( *(_DWORD *)(v17 + 2296) || *(_DWORD *)(v17 + 2088) >= *(_DWORD *)(v17 + 2092) )
      goto LABEL_2508;
    v49 = v1599;
    v51 = v1594;
    v52 = v1596;
  }
  ++*(_DWORD *)(v17 + 2096);
  v48 = 0;
  if( *(_DWORD *)(v17 + 2392) != 11 || (v1521 = *(_DWORD *)(v17 + 2448), (v1521 & 1) != 0) )
  {
LABEL_2508:
    v13 = (__int64)v1591;
    v2 = a2;
  }
  else
  {
    v2 = a2;
    v13 = (__int64)v1591;
    if( *(_DWORD *)(v17 + 2416) == -1 )
      *(_DWORD *)(v17 + 2416) = 0;
    else
      *(_DWORD *)(v17 + 2448) = v1521 | 1;
  }
  v14 = v1602;
LABEL_2510:
  *(_DWORD *)(v17 + 2080) = v48;
  if( v1584 )
  {
    v1522 = *(_QWORD *)(*(_QWORD *)(v17 + 1704)
                      + *(_QWORD *)((char *)&KeGetCurrentPrcb()->_MxCsr + *(_QWORD *)(v17 + 1608))
                      + *(_QWORD *)(v17 + 1672));
    (*(void(__fastcall **)(char *))(v17 + 408))(v1753);
    (*(void(__fastcall **)(char *))(v17 + 1088))(v1768);
    (*(void(__fastcall **)(__int64))(v17 + 936))(v1522);
    (*(void(__fastcall **)(__int64))(v17 + 952))(v1522);
  }
  if( v1607 && ((*(_DWORD *)(v17 + 2448) & 0x8000) != 0 || !*(_DWORD *)(v17 + 2296)) )
  {
    v1523 = *(_QWORD *)(v17 + 2432);
    *(_QWORD *)(v17 + 2432) = 0i64;
    (*(void(__fastcall **)(__int64, char *))(v17 + 664))(v1523, v1768);
    v1524 = *(_DWORD *)(v17 + 2448);
    if( (v1524 & 1) != 0 )
    {
      *(_DWORD *)(v17 + 2448) = v1524 & 0xFFFFFFFE;
      v1523 = (*(__int64(__fastcall **)(__int64))(v17 + 640))(v1523);
      if( v1523 )
        *(_DWORD *)(v17 + 2416) = (*(__int64(__fastcall **)(__int64))(v17 + 672))(v1523);
      else
        *(_DWORD *)(v17 + 2416) = -1;
    }
    if( v1523 )
      (*(void(__fastcall **)(__int64))(v17 + 648))(v1523);
  }
  if( *(_DWORD *)(v14 + 2296) )
  {
    v1525 = *(_QWORD *)(v14 + 2320);
    v1526 = *(_QWORD *)(v14 + 2328);
    v1527 = *(_QWORD *)(v14 + 2312);
    v1528 = *(_QWORD *)(v14 + 2304);
    v1594 = v1526;
    v1599 = v1527;
    v1600 = v1528;
    v1587 = v14;
    if( KeGetCurrentIrql() < 2u )
    {
      KeGetCurrentIrql();
      __writecr8(2ui64);
    }
    v1529 = KeGetCurrentPrcb();
    v1530 = *(void ***)((char *)&v1529->_MxCsr + *(_QWORD *)(v1587 + 1592));
    v1531 = *(_QWORD *)((char *)&v1529->_MxCsr + *(_QWORD *)(v1587 + 1608));
    v1532 = *(_QWORD *)(v1587 + 1600);
    v1581 = v1531;
    if( !*((_BYTE *)&v1529->_MxCsr + v1532) || &v1587 > (__int64 *)v1530 || &v1587 < (__int64 *)v1530 - 3072 )
      v1530 = *(void ***)(v1531 + *(_QWORD *)(v1587 + 1656));
    v1533 = v1587;
    if( (*(_DWORD *)(v1587 + 2448) & 0x8000000) == 0 )
    {
      v1534 = __readcr0();
      v1614 = v1534;
      __writecr0(v1534 & 0xFFFFFFFFFFFEFFFFui64);
      v1535 = v1587 + 2728;
      v1536 = 16i64 * *(unsigned int *)(v1587 + 2720) + v1587 + 2728;
      v1537 = 0;
      v1538 = (_QWORD *)v1536;
      if( *(_DWORD *)(v1587 + 2724) )
      {
        do
        {
          *(_QWORD *)*v1538 = v1538[1];
          v1539 = __readcr4();
          if( (v1539 & 0x20080) != 0 )
          {
            __writecr4(v1539 ^ 0x80);
            __writecr4(v1539);
          }
          else
          {
            v1540 = __readcr3();
            __writecr3(v1540);
          }
          v1538 += 2;
          ++v1537;
        }
        while( v1537 < *(_DWORD *)(v1533 + 2724) );
        v1526 = v1594;
      }
      if( v1535 < v1536 )
      {
        do
        {
          v1541 = *(unsigned int *)(v1535 + 8);
          v1542 = v1538;
          v1543 = *(char **)v1535;
          v1544 = v1541;
          if( (unsigned int)v1541 >= 8 )
          {
            v1545 = (unsigned __int64)(unsigned int)v1541 >> 3;
            do
            {
              v1544 -= 8;
              *(_QWORD *)v1543 = *v1542++;
              v1543 += 8;
              --v1545;
            }
            while( v1545 );
          }
          if( v1544 )
          {
            v1546 = v1543 - (char *)v1542;
            do
            {
              *((_BYTE *)v1542 + v1546) = *(_BYTE *)v1542;
              v1542 = (_QWORD *)((char *)v1542 + 1);
              --v1544;
            }
            while( v1544 );
          }
          v1538 = (_QWORD *)((char *)v1538 + v1541);
          v1535 += 16i64;
        }
        while( v1535 < v1536 );
        v1531 = v1581;
        v1534 = v1614;
        v1526 = v1594;
        v1527 = v1599;
      }
      **(_BYTE **)(v1533 + 536) = -61;
      __writecr0(v1534);
      v1528 = v1600;
    }
    v1554 = *(_DWORD *)(v1587 + 2344);
    if( v1554 )
    {
      if( KeGetCurrentIrql() < 2u )
      {
        KeGetCurrentIrql();
        __writecr8(2ui64);
        v1554 = *(_DWORD *)(v1587 + 2344);
      }
      if( v1554 )
      {
        v1555 = v1554 - 1;
        if( v1555 )
        {
          v1556 = v1555 - 1;
          if( v1556 )
          {
            v1557 = v1556 - 1;
            if( v1557 )
            {
              v1558 = v1557 - 1;
              if( v1558 )
              {
                if( v1558 == 1 )
                  _interlockedbittestandset(
                    *(volatile signed __int32 **)((char *)&KeGetCurrentPrcb()->_MxCsr + *(_QWORD *)(v1587 + 1608)),
                    (*(_DWORD *)(v1587 + 2448) >> 10) & 0x1F);
                else
                  _InterlockedOr64((volatile signed __int64 *)(*(_QWORD *)(v1587 + 1464) + 832i64), 1ui64);
              }
              else
              {
                _interlockedbittestandset(
                  *(volatile signed __int32 **)(*(_QWORD *)(v1587 + 1704)
                                              + *(_QWORD *)((char *)&KeGetCurrentPrcb()->_MxCsr
                                                          + *(_QWORD *)(v1587 + 1608))
                                              + *(_QWORD *)(v1587 + 1672)),
                  (*(_DWORD *)(v1587 + 2448) >> 10) & 0x1F);
              }
              goto LABEL_2582;
            }
            v1559 = *(volatile signed __int32 **)(v1587 + 1376);
          }
          else
          {
            v1559 = *(volatile signed __int32 **)(v1587 + 1368);
          }
        }
        else
        {
          v1559 = *(volatile signed __int32 **)(v1587 + 1352);
        }
        _interlockedbittestandset64(v1559, 0i64);
      }
    }
LABEL_2582:
    *(_QWORD *)(v1531 + *(_QWORD *)(v1587 + 1680)) = 0i64;
    *(_QWORD *)(v1531 + *(_QWORD *)(v1587 + 1696)) = 0i64;
    SdbpCheckDll(265i64, v1528, v1527, v1526, v1525, *(__int64(__fastcall **)(__int64))(v1587 + 344), v1530);
    __debugbreak();
  }
  if( *(_DWORD *)(v14 + 2084) || *(_DWORD *)(v14 + 2080) )
  {
    v1547 = -1073741802;
    *(_DWORD *)v2 = *(_DWORD *)(v14 + 2080);
    *(_DWORD *)(v2 + 4) = *(_DWORD *)(v14 + 2084);
  }
  else
  {
    v1547 = *(_QWORD *)(v2 + 8) == 0i64 ? 0xC0000225 : 0;
  }
  if( v1614 == 2800 )
    ExFreeToNPagedLookasideList((_NPAGED_LOOKASIDE_LIST *)&Lookaside, (VOID *)v13);
  else
    ExFreePoolWithTag((PVOID)v13, v24);
  return v1547;
}

Referenced by:

No references.