{"type": "func", "start": 368020, "end": 368620, "name": "sub_59D94", "pseudocode": "// \n// sub_59D94 from 0x59d94 to 0x59fec (600 bytes)\n// \n// 20 xrefs:\n// > sub_59AE8 @ 0x59bbc\n// > sub_5B0C4 @ 0x5b0d8\n// > sub_5B530 @ 0x5b534\n// > sub_5FD88 @ 0x5fe2c\n// > sub_5FF9C @ 0x5ffdc\n// > sub_601E4 @ 0x60230\n// > sub_60858 @ 0x60860\n// > sub_6E15C @ 0x6e290\n// > sub_6E374 @ 0x6e410\n// > sub_75F9C @ 0x76168\n// > sub_76178 @ 0x762a0\n// > sub_7A768 @ 0x7a914\n// > sub_7C19C @ 0x7c244\n// > sub_7C19C @ 0x7c41c\n// > sub_7C19C @ 0x7c524\n// > sub_8D6F8 @ 0x8f180\n// > sub_92230 @ 0x92248\n// > sub_9663C @ 0x96644\n// > sub_A1204 @ 0xa120c\n// > sub_A3828 @ 0xa38bc\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\nvoid sub_59D94()\n{\n  __int64 v0; // x0\n  char v1; // w1\n  __int64 v2; // x8\n  __int64 v3; // x19\n  char v4; // w20\n  __int64 v5; // x0\n  __int64 v6; // x0\n  _QWORD *v7; // x21\n  __int64 v8; // x8\n  int v9; // w9\n  unsigned int v10; // w8\n  __int64 v11; // x0\n  __int64 v12; // x8\n  __int64 v13; // x1\n  __int64 v14; // x0\n  __int64 v15; // x0\n  __int64 v16; // x8\n  __int64 v17; // x0\n  __int64 v18; // x0\n  __int64 v19; // x8\n  int v20; // w8\n  _QWORD *v21; // x8\n  _QWORD *v22; // x22\n  __int64 v23; // x8\n  __int64 v24; // x1\n  __int64 v25; // x0\n  __int64 v26; // x1\n  int v27; // w0\n\n  v0 = sub_5C6DC();\n  if ( !v2 || (*(_BYTE *)(v2 + 60) & 0x80) != 0 )\n    return;\n  v3 = v0;\n  v4 = v1;\n  if ( (v1 & 0x40) != 0 )\n    sub_5C6D0();\n  if ( (v4 & 4) == 0 )\n  {\n    v11 = ((__int64 (*)(void))sub_5C66C)();\n    v14 = (*(__int64 (__fastcall **)(__int64, __int64, _QWORD, _QWORD))(v12 + 224))(v11, v13, 0, 0);\n    v15 = sub_5C66C(v14);\n    v17 = (*(__int64 (__fastcall **)(__int64))(v16 + 256))(v15);\n    if ( (_DWORD)v17 )\n      return;\n    v18 = sub_5C66C(v17);\n    if ( (*(unsigned int (__fastcall **)(__int64))(v19 + 280))(v18) )\n      return;\n    if ( *(_QWORD *)(v3 + 96) )\n    {\n      sub_5C500();\n      sub_CBB14(*(_QWORD *)(v3 + 96), 0, 1);\n    }\n  }\n  v5 = (*(__int64 (__fastcall **)(_QWORD))(**(_QWORD **)(v3 + 472) + 80LL))(*(_QWORD *)(v3 + 472));\n  if ( (_DWORD)v5 )\n    return;\n  if ( (v4 & 0x10) != 0 )\n  {\n    v6 = sub_5C66C(v5);\n    v5 = sub_5C618(v6);\n    if ( (_DWORD)v5 )\n      return;\n  }\n  v7 = *(_QWORD **)(v3 + 472);\n  v8 = v7[5];\n  if ( v8 )\n  {\n    v9 = *(_DWORD *)(v8 + 312) - 1;\n    *(_DWORD *)(v8 + 312) = v9;\n    if ( !v9 )\n      *(_DWORD *)(v8 + 320) = *(_DWORD *)(*(_QWORD *)(v3 + 8) + 69864LL);\n  }\n  if ( (v4 & 2) != 0 )\n  {\n    v5 = sub_59520((_QWORD *)v3);\n    if ( (_DWORD)v5 )\n      return;\n    v20 = *(_DWORD *)(v3 + 72);\n    v7 = *(_QWORD **)(v3 + 472);\n    *(_DWORD *)(v3 + 484) = -1;\n    v10 = v20 & 0xFFFEFFFF;\n    *(_DWORD *)(v3 + 72) = v10;\n  }\n  else\n  {\n    v10 = *(_DWORD *)(v3 + 72);\n  }\n  *(_DWORD *)(v3 + 72) = v10 & 0xFFFBFFFF;\n  v21 = v7;\n  if ( (v4 & 8) != 0 )\n  {\n    v21 = v7;\n    if ( *(_QWORD *)(v3 + 368) )\n    {\n      v5 = sub_55C9C(v3, *(_QWORD *)(v3 + 80), 0, 0, 0, 0);\n      if ( (_DWORD)v5 )\n        return;\n      v21 = *(_QWORD **)(v3 + 472);\n    }\n  }\n  if ( v7 == v21 && (*((_DWORD *)v21 + 15) & 0x40) != 0 )\n  {\nLABEL_32:\n    if ( (v4 & 4) != 0 )\n      goto LABEL_37;\n    goto LABEL_33;\n  }\n  v22 = v7 + 5;\n  v5 = v7[5];\n  if ( !v5 || (v5 = (**(__int64 (__fastcall ***)(__int64))v5)(v5), (v5 & 1) == 0) )\n  {\n    v7[3] = 0;\n    *v22 = 0;\n    v7[6] = 0;\n    goto LABEL_32;\n  }\n  sub_7B9D0(*(_QWORD *)(v3 + 8), 8);\n  v7[3] = 0;\n  *v22 = 0;\n  v7[6] = 0;\n  v5 = sub_7B9F0(*(_QWORD *)(v3 + 8), 8);\n  if ( (v4 & 4) != 0 )\n    goto LABEL_37;\nLABEL_33:\n  v23 = *(_QWORD *)(v3 + 112);\n  v24 = *(_QWORD *)(v3 + 64);\n  *(_QWORD *)(v3 + 96) = v23;\n  *(_QWORD *)(v3 + 104) = v23;\n  if ( v24 )\n  {\n    v5 = sub_5C578(v5);\n    *(_QWORD *)(v3 + 64) = 0;\n  }\n  if ( *(_QWORD *)(v3 + 16) )\n  {\n    v5 = sub_5C578(v5);\n    *(_QWORD *)(v3 + 16) = 0;\n  }\nLABEL_37:\n  if ( *(_DWORD *)(v3 + 484) == -1 && !(*(_DWORD *)(v3 + 72) & 0x40000 | v4 & 0x80) )\n  {\n    *(_QWORD *)(v3 + 472) = 0;\n    if ( (v4 & 4) == 0 )\n    {\n      v25 = sub_5C66C(v5);\n      sub_560D4(v25, v26);\n      if ( v27 )\n        return;\n      *(_QWORD *)(v3 + 496) = 0;\n    }\n    if ( (v4 & 1) != 0 )\n      sub_59774(v3, 0);\n  }\n}", "assembly": "; \n; sub_59D94 from 0x59d94 to 0x59fec (600 bytes)\n; \n; 20 xrefs:\n; > sub_59AE8 @ 0x59bbc\n; > sub_5B0C4 @ 0x5b0d8\n; > sub_5B530 @ 0x5b534\n; > sub_5FD88 @ 0x5fe2c\n; > sub_5FF9C @ 0x5ffdc\n; > sub_601E4 @ 0x60230\n; > sub_60858 @ 0x60860\n; > sub_6E15C @ 0x6e290\n; > sub_6E374 @ 0x6e410\n; > sub_75F9C @ 0x76168\n; > sub_76178 @ 0x762a0\n; > sub_7A768 @ 0x7a914\n; > sub_7C19C @ 0x7c244\n; > sub_7C19C @ 0x7c41c\n; > sub_7C19C @ 0x7c524\n; > sub_8D6F8 @ 0x8f180\n; > sub_92230 @ 0x92248\n; > sub_9663C @ 0x96644\n; > sub_A1204 @ 0xa120c\n; > sub_A3828 @ 0xa38bc\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\nSTP             X22, X21, [SP,#var_30]!                                ; +0x0, 0x59d94\nSTP             X20, X19, [SP,#0x30+var_20]                            ; +0x4, 0x59d98\nSTP             X29, X30, [SP,#0x30+var_10]                            ; +0x8, 0x59d9c\nBL              sub_5C6DC                                              ; +0xc, 0x59da0\nCBZ             X8, loc_59E24                                          ; +0x10, 0x59da4\nLDRB            W8, [X8,#0x3C]                                         ; +0x14, 0x59da8\nTBNZ            W8, #7, loc_59FAC                                      ; +0x18, 0x59dac\nMOV             X19, X0                                                ; +0x1c, 0x59db0\nMOV             W20, W1                                                ; +0x20, 0x59db4\nTBZ             W1, #6, loc_59DC0                                      ; +0x24, 0x59db8\nBL              sub_5C6D0                                              ; +0x28, 0x59dbc\nTBZ             W20, #2, loc_59E2C                                     ; +0x2c, 0x59dc0\nLDR             X0, [X19,#0x1D8]                                       ; +0x30, 0x59dc4\nLDR             X8, [X0]                                               ; +0x34, 0x59dc8\nLDR             X8, [X8,#0x50]                                         ; +0x38, 0x59dcc\nBLR             X8                                                     ; +0x3c, 0x59dd0\nCBNZ            W0, loc_59FB0                                          ; +0x40, 0x59dd4\nTBZ             W20, #4, loc_59DE8                                     ; +0x44, 0x59dd8\nBL              sub_5C66C                                              ; +0x48, 0x59ddc\nBL              sub_5C618                                              ; +0x4c, 0x59de0\nCBNZ            W0, loc_59FB0                                          ; +0x50, 0x59de4\nLDR             X21, [X19,#0x1D8]                                      ; +0x54, 0x59de8\nLDR             X8, [X21,#0x28]                                        ; +0x58, 0x59dec\nCBZ             X8, loc_59E18                                          ; +0x5c, 0x59df0\nLDR             W9, [X8,#0x138]                                        ; +0x60, 0x59df4\nSUBS            W9, W9, #1                                             ; +0x64, 0x59df8\nSTR             W9, [X8,#0x138]                                        ; +0x68, 0x59dfc\nB.NE            loc_59E18                                              ; +0x6c, 0x59e00\nLDR             X9, [X19,#8]                                           ; +0x70, 0x59e04\nMOV             W10, #0x110E8                                          ; +0x74, 0x59e08\nLDR             W9, [X9,X10]                                           ; +0x7c, 0x59e10\nSTR             W9, [X8,#0x140]                                        ; +0x80, 0x59e14\nTBNZ            W20, #1, loc_59E90                                     ; +0x84, 0x59e18\nLDR             W8, [X19,#0x48]                                        ; +0x88, 0x59e1c\nB               loc_59EB4                                              ; +0x8c, 0x59e20\nMOV             W0, #0x1E                                              ; +0x90, 0x59e24\nB               loc_59FB0                                              ; +0x94, 0x59e28\nLDR             X8, [X19]                                              ; +0x98, 0x59e2c\nBL              sub_5C66C                                              ; +0x9c, 0x59e30\nMOV             X2, XZR                                                ; +0xa0, 0x59e34\nLDR             X8, [X8,#0xE0]                                         ; +0xa4, 0x59e38\nMOV             W3, WZR                                                ; +0xa8, 0x59e3c\nBLR             X8                                                     ; +0xac, 0x59e40\nLDR             X8, [X19]                                              ; +0xb0, 0x59e44\nMOV             X2, #0xFFFFFFFFFFF00000                                ; +0xb4, 0x59e48\nBL              sub_5C66C                                              ; +0xb8, 0x59e4c\nLDR             X8, [X8,#0x100]                                        ; +0xbc, 0x59e50\nBLR             X8                                                     ; +0xc0, 0x59e54\nCBNZ            W0, loc_59FB0                                          ; +0xc4, 0x59e58\nLDR             X8, [X19]                                              ; +0xc8, 0x59e5c\nBL              sub_5C66C                                              ; +0xcc, 0x59e60\nLDR             X8, [X8,#0x118]                                        ; +0xd0, 0x59e64\nBLR             X8                                                     ; +0xd4, 0x59e68\nCBNZ            W0, loc_59FB0                                          ; +0xd8, 0x59e6c\nLDR             X0, [X19,#0x60]                                        ; +0xdc, 0x59e70\nCBZ             X0, loc_59DC4                                          ; +0xe0, 0x59e74\nBL              sub_5C500                                              ; +0xe4, 0x59e78\nLDR             X0, [X19,#0x60]                                        ; +0xe8, 0x59e7c\nMOV             W2, #1                                                 ; +0xec, 0x59e80\nMOV             W1, WZR                                                ; +0xf0, 0x59e84\nBL              sub_CBB14                                              ; +0xf4, 0x59e88\nB               loc_59DC4                                              ; +0xf8, 0x59e8c\nMOV             X0, X19                                                ; +0xfc, 0x59e90\nBL              sub_59520                                              ; +0x100, 0x59e94\nCBNZ            W0, loc_59FB0                                          ; +0x104, 0x59e98\nLDR             W8, [X19,#0x48]                                        ; +0x108, 0x59e9c\nLDR             X21, [X19,#0x1D8]                                      ; +0x10c, 0x59ea0\nMOV             W9, #0xFFFFFFFF                                        ; +0x110, 0x59ea4\nSTR             W9, [X19,#0x1E4]                                       ; +0x114, 0x59ea8\nAND             W8, W8, #0xFFFEFFFF                                    ; +0x118, 0x59eac\nSTR             W8, [X19,#0x48]                                        ; +0x11c, 0x59eb0\nAND             W8, W8, #0xFFFBFFFF                                    ; +0x120, 0x59eb4\nSTR             W8, [X19,#0x48]                                        ; +0x124, 0x59eb8\nMOV             X8, X21                                                ; +0x128, 0x59ebc\nTBZ             W20, #3, loc_59EF4                                     ; +0x12c, 0x59ec0\nLDR             X9, [X19,#0x170]                                       ; +0x130, 0x59ec4\nMOV             X8, X21                                                ; +0x134, 0x59ec8\nCBZ             X9, loc_59EF4                                          ; +0x138, 0x59ecc\nLDR             X1, [X19,#0x50]                                        ; +0x13c, 0x59ed0\nMOV             X0, X19                                                ; +0x140, 0x59ed4\nMOV             W2, WZR                                                ; +0x144, 0x59ed8\nMOV             W3, WZR                                                ; +0x148, 0x59edc\nMOV             X4, XZR                                                ; +0x14c, 0x59ee0\nMOV             X5, XZR                                                ; +0x150, 0x59ee4\nBL              sub_55C9C                                              ; +0x154, 0x59ee8\nCBNZ            W0, loc_59FB0                                          ; +0x158, 0x59eec\nLDR             X8, [X19,#0x1D8]                                       ; +0x15c, 0x59ef0\nCMP             X21, X8                                                ; +0x160, 0x59ef4\nB.NE            loc_59F04                                              ; +0x164, 0x59ef8\nLDR             W8, [X8,#0x3C]                                         ; +0x168, 0x59efc\nTBNZ            W8, #6, loc_59F50                                      ; +0x16c, 0x59f00\nMOV             X22, X21                                               ; +0x170, 0x59f04\nLDR             X0, [X22,#0x28]!                                       ; +0x174, 0x59f08\nCBZ             X0, loc_59F48                                          ; +0x178, 0x59f0c\nLDR             X8, [X0]                                               ; +0x17c, 0x59f10\nLDR             X8, [X8]                                               ; +0x180, 0x59f14\nBLR             X8                                                     ; +0x184, 0x59f18\nTBZ             W0, #0, loc_59F48                                      ; +0x188, 0x59f1c\nLDR             X0, [X19,#8]                                           ; +0x18c, 0x59f20\nMOV             W1, #8                                                 ; +0x190, 0x59f24\nBL              sub_7B9D0                                              ; +0x194, 0x59f28\nSTR             XZR, [X21,#0x18]                                       ; +0x198, 0x59f2c\nSTP             XZR, XZR, [X22]                                        ; +0x19c, 0x59f30\nLDR             X0, [X19,#8]                                           ; +0x1a0, 0x59f34\nMOV             W1, #8                                                 ; +0x1a4, 0x59f38\nBL              sub_7B9F0                                              ; +0x1a8, 0x59f3c\nTBZ             W20, #2, loc_59F54                                     ; +0x1ac, 0x59f40\nB               loc_59F8C                                              ; +0x1b0, 0x59f44\nSTR             XZR, [X21,#0x18]                                       ; +0x1b4, 0x59f48\nSTP             XZR, XZR, [X22]                                        ; +0x1b8, 0x59f4c\nTBNZ            W20, #2, loc_59F8C                                     ; +0x1bc, 0x59f50\nLDR             X8, [X19,#0x70]                                        ; +0x1c0, 0x59f54\nLDR             X1, [X19,#0x40]                                        ; +0x1c4, 0x59f58\nSTP             X8, X8, [X19,#0x60]                                    ; +0x1c8, 0x59f5c\nCBZ             X1, loc_59F74                                          ; +0x1cc, 0x59f60\nLDR             X8, [X19,#8]                                           ; +0x1d0, 0x59f64\nMOV             W9, #0x8C8                                             ; +0x1d4, 0x59f68\nBL              sub_5C578                                              ; +0x1d8, 0x59f6c\nSTR             XZR, [X19,#0x40]                                       ; +0x1dc, 0x59f70\nLDR             X1, [X19,#0x10]                                        ; +0x1e0, 0x59f74\nCBZ             X1, loc_59F8C                                          ; +0x1e4, 0x59f78\nLDR             X8, [X19,#8]                                           ; +0x1e8, 0x59f7c\nMOV             W9, #0x848                                             ; +0x1ec, 0x59f80\nBL              sub_5C578                                              ; +0x1f0, 0x59f84\nSTR             XZR, [X19,#0x10]                                       ; +0x1f4, 0x59f88\nLDR             W8, [X19,#0x1E4]                                       ; +0x1f8, 0x59f8c\nCMN             W8, #1                                                 ; +0x1fc, 0x59f90\nB.NE            loc_59FAC                                              ; +0x200, 0x59f94\nLDR             W8, [X19,#0x48]                                        ; +0x204, 0x59f98\nAND             W9, W20, #0x80                                         ; +0x208, 0x59f9c\nAND             W8, W8, #0x40000                                       ; +0x20c, 0x59fa0\nORR             W8, W8, W9                                             ; +0x210, 0x59fa4\nCBZ             W8, loc_59FC0                                          ; +0x214, 0x59fa8\nMOV             W0, WZR                                                ; +0x218, 0x59fac\nLDP             X29, X30, [SP,#0x30+var_10]                            ; +0x21c, 0x59fb0\nLDP             X20, X19, [SP,#0x30+var_20]                            ; +0x220, 0x59fb4\nLDP             X22, X21, [SP+0x30+var_30],#0x30                       ; +0x224, 0x59fb8\nRET                                                                    ; +0x228, 0x59fbc\nSTR             XZR, [X19,#0x1D8]                                      ; +0x22c, 0x59fc0\nTBNZ            W20, #2, loc_59FD8                                     ; +0x230, 0x59fc4\nBL              sub_5C66C                                              ; +0x234, 0x59fc8\nBL              sub_560D4                                              ; +0x238, 0x59fcc\nCBNZ            W0, loc_59FB0                                          ; +0x23c, 0x59fd0\nSTR             XZR, [X19,#0x1F0]                                      ; +0x240, 0x59fd4\nTBZ             W20, #0, loc_59FAC                                     ; +0x244, 0x59fd8\nMOV             X0, X19                                                ; +0x248, 0x59fdc\nMOV             W1, WZR                                                ; +0x24c, 0x59fe0\nBL              sub_59774                                              ; +0x250, 0x59fe4\nB               loc_59FAC                                              ; +0x254, 0x59fe8", "xrefs": ["sub_59AE8 @ 0x59bbc", "sub_5B0C4 @ 0x5b0d8", "sub_5B530 @ 0x5b534", "sub_5FD88 @ 0x5fe2c", "sub_5FF9C @ 0x5ffdc", "sub_601E4 @ 0x60230", "sub_60858 @ 0x60860", "sub_6E15C @ 0x6e290", "sub_6E374 @ 0x6e410", "sub_75F9C @ 0x76168", "sub_76178 @ 0x762a0", "sub_7A768 @ 0x7a914", "sub_7C19C @ 0x7c244", "sub_7C19C @ 0x7c41c", "sub_7C19C @ 0x7c524", "sub_8D6F8 @ 0x8f180", "sub_92230 @ 0x92248", "sub_9663C @ 0x96644", "sub_A1204 @ 0xa120c", "sub_A3828 @ 0xa38bc"], "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"}