{"type": "func", "start": 360272, "end": 360900, "name": "sub_57F50", "pseudocode": "// \n// sub_57F50 from 0x57f50 to 0x581c4 (628 bytes)\n// \n// 3 xrefs:\n// > sub_57F28 @ 0x57f44\n// > sub_57F50 @ 0x57f88\n// > sub_6A544 @ 0x6a76c\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_57F50(_QWORD *a1, char a2)\n{\n  _QWORD *v3; // x8\n  _QWORD *v4; // x20\n  _QWORD *v5; // x21\n  __int64 result; // x0\n  __int64 v7; // x0\n  _QWORD *v8; // x8\n  __int64 v9; // x20\n  __int64 v10; // x21\n  _QWORD *v11; // x8\n  _QWORD *i; // x20\n  _QWORD *v13; // x9\n  __int64 v14; // x8\n  unsigned int *v15; // x8\n  unsigned int v16; // w9\n  unsigned int *v17; // x8\n  unsigned int v18; // w9\n  __int64 v19; // x1\n  _QWORD *v20; // x8\n  _QWORD *j; // x8\n  _QWORD *v22; // x23\n  _QWORD *v23; // x9\n\n  if ( (a2 & 1) != 0 )\n  {\n    v3 = (_QWORD *)a1[50];\n    v4 = a1 + 50;\n    while ( v3 != v4 )\n    {\n      v5 = (_QWORD *)*v3;\n      result = sub_57F50(v3[2], 1);\n      v3 = v5;\n      if ( (_DWORD)result )\n        return result;\n    }\n  }\n  v7 = (*(__int64 (__fastcall **)(_QWORD *, _QWORD, __int64))(*a1 + 256LL))(a1, 0, -1048576);\n  result = sub_59394(v7);\n  if ( v8 != a1 )\n  {\n    v9 = 0;\n    v10 = 73664;\n    while ( v9 != 4 )\n    {\n      if ( *(_QWORD *)(a1[1] + v10) )\n      {\n        result = (*(__int64 (__fastcall **)(_QWORD *, _QWORD, float))(*a1 + 104LL))(a1, (unsigned int)v9, 0.0);\n        if ( (_DWORD)result )\n          return result;\n      }\n      ++v9;\n      v10 += 24;\n    }\n    result = sub_59394(result);\n    if ( v11 && v11 != a1 )\n    {\n      for ( i = a1 + 53; (_QWORD *)*i != i; result = sub_5BE98(*(_QWORD *)(*i + 16LL), *(_QWORD *)(a1[1] + 69856LL)) )\n        ;\n    }\n  }\n  if ( *((__int16 *)a1 + 254) == -1 || (result = sub_6E864(a1[1], a1), !(_DWORD)result) )\n  {\n    v13 = (_QWORD *)a1[57];\n    *v13 = a1[56];\n    *(_QWORD *)(a1[56] + 8LL) = v13;\n    v14 = a1[14];\n    a1[56] = a1 + 56;\n    a1[57] = a1 + 56;\n    if ( v14 )\n    {\n      v15 = (unsigned int *)(v14 + 100);\n      do\n        v16 = __ldaxr(v15);\n      while ( __stlxr(v16 & 0xFFFFFFDF, v15) );\n      v17 = (unsigned int *)(a1[14] + 100LL);\n      do\n        v18 = __ldaxr(v17);\n      while ( __stlxr(v18 & 0xFFFFFFBF, v17) );\n      result = (*(__int64 (__fastcall **)(_QWORD))(*(_QWORD *)a1[14] + 16LL))(a1[14]);\n      if ( (_DWORD)result )\n        return result;\n      a1[14] = 0;\n    }\n    v19 = a1[60];\n    if ( v19 )\n      result = sub_E2D74(\n                 *(__int64 *)((char *)&qword_1B0 + (_QWORD)off_114000),\n                 v19,\n                 \"../../src/fmod_channelgroupi.cpp\",\n                 452,\n                 1);\n    if ( a1[8] )\n    {\n      result = sub_59360(result);\n      *((_DWORD *)a1 + 14) = 0;\n      a1[8] = 0;\n    }\n    if ( a1[2] )\n    {\n      result = sub_59360(result);\n      a1[2] = 0;\n    }\n    sub_59394(result);\n    if ( v20 && v20 != a1 )\n    {\n      for ( j = (_QWORD *)a1[50]; j != a1 + 50; j = v22 )\n      {\n        v22 = (_QWORD *)*j;\n        sub_581C4(*(_QWORD *)(a1[1] + 69856LL), j[2], 1, 0);\n      }\n    }\n    v23 = (_QWORD *)a1[48];\n    *v23 = a1[47];\n    *(_QWORD *)(a1[47] + 8LL) = v23;\n    a1[47] = a1 + 47;\n    a1[48] = a1 + 47;\n    *((_DWORD *)a1 + 118) = -559039983;\n    sub_E2D74(*(__int64 *)((char *)&qword_1B0 + (_QWORD)off_114000), a1, \"../../src/fmod_channelgroupi.cpp\", 489, 1);\n    return 0;\n  }\n  return result;\n}", "assembly": "; \n; sub_57F50 from 0x57f50 to 0x581c4 (628 bytes)\n; \n; 3 xrefs:\n; > sub_57F28 @ 0x57f44\n; > sub_57F50 @ 0x57f88\n; > sub_6A544 @ 0x6a76c\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             X23, [SP,#-0x10+var_30]!                               ; +0x0, 0x57f50\nSTP             X20, X19, [SP,#0x30+var_10]                            ; +0x4, 0x57f54\nMOV             X19, X0                                                ; +0x8, 0x57f58\nSTP             X22, X21, [SP,#0x30+var_20]                            ; +0xc, 0x57f5c\nSTP             X29, X30, [SP,#0x30+var_s0]                            ; +0x10, 0x57f60\nADD             X29, SP, #0x30                                         ; +0x14, 0x57f64\nTBZ             W1, #0, loc_57F98                                      ; +0x18, 0x57f68\nLDR             X8, [X19,#0x190]                                       ; +0x1c, 0x57f6c\nADD             X20, X19, #0x190                                       ; +0x20, 0x57f70\nCMP             X8, X20                                                ; +0x24, 0x57f74\nB.EQ            loc_57F98                                              ; +0x28, 0x57f78\nLDR             X0, [X8,#0x10]                                         ; +0x2c, 0x57f7c\nLDR             X21, [X8]                                              ; +0x30, 0x57f80\nMOV             W1, #1                                                 ; +0x34, 0x57f84\nBL              sub_57F50                                              ; +0x38, 0x57f88\nMOV             X8, X21                                                ; +0x3c, 0x57f8c\nCBZ             W0, loc_57F74                                          ; +0x40, 0x57f90\nB               loc_581BC                                              ; +0x44, 0x57f94\nLDR             X8, [X19]                                              ; +0x48, 0x57f98\nMOV             X2, #0xFFFFFFFFFFF00000                                ; +0x4c, 0x57f9c\nMOV             X0, X19                                                ; +0x50, 0x57fa0\nMOV             X1, XZR                                                ; +0x54, 0x57fa4\nLDR             X8, [X8,#0x100]                                        ; +0x58, 0x57fa8\nBLR             X8                                                     ; +0x5c, 0x57fac\nLDR             X8, [X19,#8]                                           ; +0x60, 0x57fb0\nBL              sub_59394                                              ; +0x64, 0x57fb4\nCMP             X8, X19                                                ; +0x68, 0x57fb8\nB.EQ            loc_58044                                              ; +0x6c, 0x57fbc\nMOV             W21, #0x1FC0                                           ; +0x70, 0x57fc0\nMOV             X20, XZR                                               ; +0x74, 0x57fc4\nMOVK            W21, #1,LSL#16                                         ; +0x78, 0x57fc8\nLDR             X8, [X19,#8]                                           ; +0x7c, 0x57fcc\nCMP             X20, #4                                                ; +0x80, 0x57fd0\nB.EQ            loc_58008                                              ; +0x84, 0x57fd4\nLDR             X8, [X8,X21]                                           ; +0x88, 0x57fd8\nCBZ             X8, loc_57FFC                                          ; +0x8c, 0x57fdc\nLDR             X8, [X19]                                              ; +0x90, 0x57fe0\nFMOV            S0, WZR                                                ; +0x94, 0x57fe4\nMOV             X0, X19                                                ; +0x98, 0x57fe8\nMOV             W1, W20                                                ; +0x9c, 0x57fec\nLDR             X8, [X8,#0x68]                                         ; +0xa0, 0x57ff0\nBLR             X8                                                     ; +0xa4, 0x57ff4\nCBNZ            W0, loc_581BC                                          ; +0xa8, 0x57ff8\nADD             X20, X20, #1                                           ; +0xac, 0x57ffc\nADD             X21, X21, #0x18                                        ; +0xb0, 0x58000\nB               loc_57FCC                                              ; +0xb4, 0x58004\nBL              sub_59394                                              ; +0xb8, 0x58008\nCBZ             X8, loc_58044                                          ; +0xbc, 0x5800c\nCMP             X8, X19                                                ; +0xc0, 0x58010\nB.EQ            loc_58044                                              ; +0xc4, 0x58014\nMOV             W21, #0x10E0                                           ; +0xc8, 0x58018\nADD             X20, X19, #0x1A8                                       ; +0xcc, 0x5801c\nMOVK            W21, #1,LSL#16                                         ; +0xd0, 0x58020\nLDR             X8, [X20]                                              ; +0xd4, 0x58024\nCMP             X8, X20                                                ; +0xd8, 0x58028\nB.EQ            loc_58044                                              ; +0xdc, 0x5802c\nLDR             X9, [X19,#8]                                           ; +0xe0, 0x58030\nLDR             X0, [X8,#0x10]                                         ; +0xe4, 0x58034\nLDR             X1, [X9,X21]                                           ; +0xe8, 0x58038\nBL              sub_5BE98                                              ; +0xec, 0x5803c\nB               loc_58024                                              ; +0xf0, 0x58040\nLDRSH           W8, [X19,#0x1FC]                                       ; +0xf4, 0x58044\nCMN             W8, #1                                                 ; +0xf8, 0x58048\nB.EQ            loc_58060                                              ; +0xfc, 0x5804c\nLDR             X0, [X19,#8]                                           ; +0x100, 0x58050\nMOV             X1, X19                                                ; +0x104, 0x58054\nBL              sub_6E864                                              ; +0x108, 0x58058\nCBNZ            W0, loc_581BC                                          ; +0x10c, 0x5805c\nLDP             X8, X9, [X19,#0x1C0]                                   ; +0x110, 0x58060\nSTR             X8, [X9]                                               ; +0x114, 0x58064\nLDR             X8, [X19,#0x1C0]                                       ; +0x118, 0x58068\nSTR             X9, [X8,#8]                                            ; +0x11c, 0x5806c\nLDR             X8, [X19,#0x70]                                        ; +0x120, 0x58070\nADD             X9, X19, #0x1C0                                        ; +0x124, 0x58074\nSTP             X9, X9, [X19,#0x1C0]                                   ; +0x128, 0x58078\nCBZ             X8, loc_580C4                                          ; +0x12c, 0x5807c\nADD             X8, X8, #0x64 ; 'd'                                    ; +0x130, 0x58080\nLDAXR           W9, [X8]                                               ; +0x134, 0x58084\nAND             W9, W9, #0xFFFFFFDF                                    ; +0x138, 0x58088\nSTLXR           W10, W9, [X8]                                          ; +0x13c, 0x5808c\nCBNZ            W10, loc_58084                                         ; +0x140, 0x58090\nLDR             X8, [X19,#0x70]                                        ; +0x144, 0x58094\nADD             X8, X8, #0x64 ; 'd'                                    ; +0x148, 0x58098\nLDAXR           W9, [X8]                                               ; +0x14c, 0x5809c\nAND             W9, W9, #0xFFFFFFBF                                    ; +0x150, 0x580a0\nSTLXR           W10, W9, [X8]                                          ; +0x154, 0x580a4\nCBNZ            W10, loc_5809C                                         ; +0x158, 0x580a8\nLDR             X0, [X19,#0x70]                                        ; +0x15c, 0x580ac\nLDR             X8, [X0]                                               ; +0x160, 0x580b0\nLDR             X8, [X8,#0x10]                                         ; +0x164, 0x580b4\nBLR             X8                                                     ; +0x168, 0x580b8\nCBNZ            W0, loc_581BC                                          ; +0x16c, 0x580bc\nSTR             XZR, [X19,#0x70]                                       ; +0x170, 0x580c0\nADRP            X20, #off_10F7A0@PAGE                                  ; +0x174, 0x580c4\nLDR             X1, [X19,#0x1E0]                                       ; +0x178, 0x580c8\nLDR             X20, [X20,#off_10F7A0@PAGEOFF]; off_114000             ; +0x17c, 0x580cc\nCBZ             X1, loc_580F0                                          ; +0x180, 0x580d0\nLDR             X8, [X20]; unk_11F800                                  ; +0x184, 0x580d4\nADRL            X2, aSrcFmodChannel; \"../../src/fmod_channelgroupi.cpp\" ; +0x188, 0x580d8\nMOV             W3, #0x1C4                                             ; +0x190, 0x580e0\nLDR             X0, [X8,#(qword_11F9B0 - 0x11F800)]                    ; +0x194, 0x580e4\nMOV             W4, #1                                                 ; +0x198, 0x580e8\nBL              sub_E2D74                                              ; +0x19c, 0x580ec\nLDR             X1, [X19,#0x40]                                        ; +0x1a0, 0x580f0\nCBZ             X1, loc_5810C                                          ; +0x1a4, 0x580f4\nLDR             X8, [X19,#8]                                           ; +0x1a8, 0x580f8\nMOV             W9, #0x8C8                                             ; +0x1ac, 0x580fc\nBL              sub_59360                                              ; +0x1b0, 0x58100\nSTR             WZR, [X19,#0x38]                                       ; +0x1b4, 0x58104\nSTR             XZR, [X19,#0x40]                                       ; +0x1b8, 0x58108\nLDR             X1, [X19,#0x10]                                        ; +0x1bc, 0x5810c\nCBZ             X1, loc_58124                                          ; +0x1c0, 0x58110\nLDR             X8, [X19,#8]                                           ; +0x1c4, 0x58114\nMOV             W9, #0x848                                             ; +0x1c8, 0x58118\nBL              sub_59360                                              ; +0x1cc, 0x5811c\nSTR             XZR, [X19,#0x10]                                       ; +0x1d0, 0x58120\nLDR             X8, [X19,#8]                                           ; +0x1d4, 0x58124\nBL              sub_59394                                              ; +0x1d8, 0x58128\nCBZ             X8, loc_58174                                          ; +0x1dc, 0x5812c\nCMP             X8, X19                                                ; +0x1e0, 0x58130\nB.EQ            loc_58174                                              ; +0x1e4, 0x58134\nLDR             X8, [X19,#0x190]                                       ; +0x1e8, 0x58138\nMOV             W22, #0x10E0                                           ; +0x1ec, 0x5813c\nADD             X21, X19, #0x190                                       ; +0x1f0, 0x58140\nMOVK            W22, #1,LSL#16                                         ; +0x1f4, 0x58144\nCMP             X8, X21                                                ; +0x1f8, 0x58148\nB.EQ            loc_58174                                              ; +0x1fc, 0x5814c\nLDR             X9, [X19,#8]                                           ; +0x200, 0x58150\nLDR             X1, [X8,#0x10]                                         ; +0x204, 0x58154\nLDR             X23, [X8]                                              ; +0x208, 0x58158\nMOV             W2, #1                                                 ; +0x20c, 0x5815c\nLDR             X0, [X9,X22]                                           ; +0x210, 0x58160\nMOV             X3, XZR                                                ; +0x214, 0x58164\nBL              sub_581C4                                              ; +0x218, 0x58168\nMOV             X8, X23                                                ; +0x21c, 0x5816c\nB               loc_58148                                              ; +0x220, 0x58170\nLDP             X8, X9, [X19,#0x178]                                   ; +0x224, 0x58174\nMOV             W11, #0xBA11                                           ; +0x228, 0x58178\nADD             X10, X19, #0x178                                       ; +0x22c, 0x5817c\nMOVK            W11, #0xDEAD,LSL#16                                    ; +0x230, 0x58180\nSTR             X8, [X9]                                               ; +0x234, 0x58184\nLDR             X8, [X19,#0x178]                                       ; +0x238, 0x58188\nADRL            X2, aSrcFmodChannel; \"../../src/fmod_channelgroupi.cpp\" ; +0x23c, 0x5818c\nMOV             W3, #0x1E9                                             ; +0x244, 0x58194\nSTR             X9, [X8,#8]                                            ; +0x248, 0x58198\nSTP             X10, X10, [X19,#0x178]                                 ; +0x24c, 0x5819c\nSTR             W11, [X19,#0x1D8]                                      ; +0x250, 0x581a0\nLDR             X8, [X20]; unk_11F800                                  ; +0x254, 0x581a4\nMOV             W4, #1                                                 ; +0x258, 0x581a8\nMOV             X1, X19                                                ; +0x25c, 0x581ac\nLDR             X0, [X8,#(qword_11F9B0 - 0x11F800)]                    ; +0x260, 0x581b0\nBL              sub_E2D74                                              ; +0x264, 0x581b4\nMOV             W0, WZR                                                ; +0x268, 0x581b8\nLDP             X29, X30, [SP,#0x30+var_s0]                            ; +0x26c, 0x581bc\nB               loc_593B0                                              ; +0x270, 0x581c0", "xrefs": ["sub_57F28 @ 0x57f44", "sub_57F50 @ 0x57f88", "sub_6A544 @ 0x6a76c"], "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"}