{"type": "func", "start": 361904, "end": 362068, "name": "sub_585B0", "pseudocode": "// \n// sub_585B0 from 0x585b0 to 0x58654 (164 bytes)\n// \n// 3 xrefs:\n// > sub_581C4 @ 0x5834c\n// > sub_584E4 @ 0x58540\n// > sub_585B0 @ 0x58600\n// \n// This function is hookable on this platform!\n// \n// Using BromaIDA 8.0.0 @ https://github.com/Stazzical/BromaIDA\n// Using bindings at commit ba9f177b at Thu Jul 16 22:52:06 2026 from https://github.com/geode-sdk/bindings\n// \n\n__int64 __fastcall sub_585B0(__int64 a1, char a2)\n{\n  int v2; // w8\n  __int64 v3; // x19\n  __int64 v4; // x21\n  char v5; // w9\n  unsigned int v6; // w10\n  int v7; // w8\n  char v8; // zf\n  _QWORD *v9; // x20\n  _QWORD *v10; // x21\n  __int64 v11; // x19\n  _BYTE v13[4]; // [xsp+Ch] [xbp-14h] BYREF\n\n  v2 = *(_DWORD *)(a1 + 72);\n  v3 = a1;\n  v4 = a1 + 400;\n  v5 = v2 & 1 | a2;\n  v6 = v2 & 0xFFFFFFEF;\n  v7 = v2 | 0x10;\n  if ( (v5 & 1) == 0 )\n    v7 = v6;\n  *(_DWORD *)(a1 + 72) = v7;\n  while ( 1 )\n  {\n    sub_5937C(a1);\n    if ( v8 )\n      break;\n    a1 = sub_585B0(*(_QWORD *)(v4 + 16), (*(_DWORD *)(v3 + 72) >> 4) & 1);\n  }\n  v9 = *(_QWORD **)(v3 + 424);\n  v10 = (_QWORD *)(v3 + 424);\n  while ( v9 != v10 )\n  {\n    v11 = v9[2];\n    (*(void (__fastcall **)(__int64, _BYTE *))(*(_QWORD *)v11 + 24LL))(v11, v13);\n    (*(void (__fastcall **)(__int64, _QWORD))(*(_QWORD *)v11 + 16LL))(v11, v13[0]);\n    v9 = (_QWORD *)*v9;\n  }\n  return 0;\n}", "assembly": "; \n; sub_585B0 from 0x585b0 to 0x58654 (164 bytes)\n; \n; 3 xrefs:\n; > sub_581C4 @ 0x5834c\n; > sub_584E4 @ 0x58540\n; > sub_585B0 @ 0x58600\n; \n; This function is hookable on this platform!\n; \n; Using BromaIDA 8.0.0 @ https:;github.com/Stazzical/BromaIDA\n; Using bindings at commit ba9f177b at Thu Jul 16 22:52:06 2026 from https:;github.com/geode-sdk/bindings\n; \n\nSTR             X21, [SP,#-0x10+var_20]!                               ; +0x0, 0x585b0\nSTP             X20, X19, [SP,#0x20+var_10]                            ; +0x4, 0x585b4\nSTP             X29, X30, [SP,#0x20+var_s0]                            ; +0x8, 0x585b8\nLDR             W8, [X0,#0x48]                                         ; +0xc, 0x585bc\nADD             X20, X0, #0x190                                        ; +0x10, 0x585c0\nMOV             X19, X0                                                ; +0x14, 0x585c4\nMOV             X21, X20                                               ; +0x18, 0x585c8\nAND             W9, W8, #1                                             ; +0x1c, 0x585cc\nORR             W9, W9, W1                                             ; +0x20, 0x585d0\nAND             W10, W8, #0xFFFFFFEF                                   ; +0x24, 0x585d4\nORR             W8, W8, #0x10                                          ; +0x28, 0x585d8\nTST             W9, #1                                                 ; +0x2c, 0x585dc\nCSEL            W8, W8, W10, NE                                        ; +0x30, 0x585e0\nADD             X29, SP, #0x20                                         ; +0x34, 0x585e4\nSTR             W8, [X0,#0x48]                                         ; +0x38, 0x585e8\nBL              sub_5937C                                              ; +0x3c, 0x585ec\nB.EQ            loc_58608                                              ; +0x40, 0x585f0\nLDR             W8, [X19,#0x48]                                        ; +0x44, 0x585f4\nLDR             X0, [X21,#0x10]                                        ; +0x48, 0x585f8\nUBFX            W1, W8, #4, #1                                         ; +0x4c, 0x585fc\nBL              sub_585B0                                              ; +0x50, 0x58600\nB               loc_585EC                                              ; +0x54, 0x58604\nLDR             X20, [X19,#0x1A8]                                      ; +0x58, 0x58608\nADD             X21, X19, #0x1A8                                       ; +0x5c, 0x5860c\nCMP             X20, X21                                               ; +0x60, 0x58610\nB.EQ            loc_5864C                                              ; +0x64, 0x58614\nLDR             X19, [X20,#0x10]                                       ; +0x68, 0x58618\nADD             X1, SP, #0x20+var_14                                   ; +0x6c, 0x5861c\nLDR             X8, [X19]                                              ; +0x70, 0x58620\nMOV             X0, X19                                                ; +0x74, 0x58624\nLDR             X8, [X8,#0x18]                                         ; +0x78, 0x58628\nBLR             X8                                                     ; +0x7c, 0x5862c\nLDR             X8, [X19]                                              ; +0x80, 0x58630\nLDRB            W1, [SP,#0x20+var_14]                                  ; +0x84, 0x58634\nMOV             X0, X19                                                ; +0x88, 0x58638\nLDR             X8, [X8,#0x10]                                         ; +0x8c, 0x5863c\nBLR             X8                                                     ; +0x90, 0x58640\nLDR             X20, [X20]                                             ; +0x94, 0x58644\nB               loc_58610                                              ; +0x98, 0x58648\nLDP             X29, X30, [SP,#0x20+var_s0]                            ; +0x9c, 0x5864c\nB               loc_59338                                              ; +0xa0, 0x58650", "xrefs": ["sub_581C4 @ 0x5834c", "sub_584E4 @ 0x58540", "sub_585B0 @ 0x58600"], "is_objc": false, "is_arm32": false, "is_arm64": false, "bida_info": "8.0.0 @ https://github.com/Stazzical/BromaIDA", "bindings_info": "commit ba9f177b at Thu Jul 16 22:52:06 2026 from https://github.com/geode-sdk/bindings"}