{"type": "func", "start": 1064084, "end": 1064580, "name": "sub_103C94", "pseudocode": "// \n// sub_103C94 from 0x103c94 to 0x103e84 (496 bytes)\n// \n// 4 xrefs:\n// > sub_103E84 @ 0x103f24\n// > sub_103E84 @ 0x10403c\n// > sub_10449C @ 0x1045dc\n// > sub_104768 @ 0x104770\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__int16 __usercall sub_103C94@<H0>(__int64 a1@<X0>, __int64 a2@<X1>)\n{\n  __int64 v2; // x28\n  __int64 v3; // x25\n  __int64 v4; // x27\n  unsigned __int64 v7; // x24\n  unsigned int v8; // w13\n  int v9; // w14\n  __int16 v10; // w22\n  int v11; // w26\n  unsigned __int64 v12; // x8\n  __int16 v13; // w23\n  int v14; // w21\n  __int16 v15; // w8\n  unsigned int v16; // w2\n  __int64 v17; // x0\n  __int64 v18; // x1\n  __int16 v19; // w13\n  unsigned __int64 v20; // x23\n  unsigned int v21; // w22\n  __int64 v22; // x0\n  __int16 v23; // w2\n  unsigned int v24; // w13\n  unsigned int v25; // w21\n  int v26; // w14\n  int v27; // w22\n  __int64 v28; // x1\n  unsigned int v29; // w0\n  unsigned __int64 v30; // x24\n  int v31; // w8\n  unsigned int v32; // w23\n  __int64 v33; // x0\n  __int16 v34; // w2\n  unsigned int v35; // w13\n  unsigned int v36; // w21\n  int v37; // w14\n  int v38; // w23\n  __int64 v39; // x1\n  unsigned int v40; // w0\n  __int64 v41; // x0\n  unsigned int v42; // w13\n  unsigned int v43; // w24\n  int v44; // w14\n  int v45; // w27\n  __int64 v46; // x1\n  __int16 v47; // w2\n  int v48; // w3\n  unsigned int v49; // w0\n  int v50; // w9\n  int v51; // w10\n  __int64 v52; // x9\n\n  v2 = *(unsigned int *)(a1 + 112);\n  v4 = *(_QWORD *)(a1 + 48);\n  v3 = *(_QWORD *)(a1 + 56);\n  v7 = **(_QWORD **)a2 >> *(_DWORD *)(a2 + 16);\n  v8 = *(unsigned __int16 *)(v4 + 2 * (v7 & v2));\n  v9 = *(unsigned __int8 *)(v3 + (v8 & 0x7FFF));\n  v10 = *(_WORD *)(v4 + 2 * ((v7 >> v9) & v2));\n  v11 = *(unsigned __int8 *)(v3 + (v10 & 0x7FFF));\n  v12 = v7 >> v9 >> v11;\n  v13 = *(_WORD *)(v4 + 2 * (v12 & v2));\n  v14 = *(unsigned __int8 *)(v3 + (v13 & 0x7FFF));\n  v15 = *(_WORD *)(v4 + 2 * ((v12 >> v14) & v2));\n  if ( (__int16)(v10 | v8 | v13 | v15) < 0 )\n  {\n    if ( (__int16)v8 < 0 )\n    {\n      v17 = sub_104774();\n      v8 = sub_FBCF8(v17, v18, v19, v7);\n    }\n    v9 = *(unsigned __int8 *)(v3 + v8);\n    v20 = v7 >> v9;\n    v21 = *(unsigned __int16 *)(v4 + 2 * ((v7 >> v9) & v2));\n    if ( *(__int16 *)(v4 + 2 * ((v7 >> v9) & v2)) < 0 )\n    {\n      v22 = sub_104774();\n      v23 = v21;\n      v25 = v24;\n      v27 = v26;\n      v29 = sub_FBCF8(v22, v28, v23, v20);\n      v9 = v27;\n      v8 = v25;\n      v21 = v29;\n    }\n    v11 = *(unsigned __int8 *)(v3 + v21);\n    v30 = v20 >> v11;\n    v31 = *(__int16 *)(v4 + 2 * ((v20 >> v11) & v2));\n    v32 = *(unsigned __int16 *)(v4 + 2 * ((v20 >> v11) & v2));\n    if ( v31 < 0 )\n    {\n      v33 = sub_104774();\n      v34 = v32;\n      v36 = v35;\n      v38 = v37;\n      v40 = sub_FBCF8(v33, v39, v34, v30);\n      v9 = v38;\n      v8 = v36;\n      v32 = v40;\n    }\n    v14 = *(unsigned __int8 *)(v3 + v32);\n    v16 = *(unsigned __int16 *)(v4 + 2 * ((v30 >> v14) & v2));\n    if ( *(__int16 *)(v4 + 2 * ((v30 >> v14) & v2)) < 0 )\n    {\n      v41 = sub_104774();\n      v43 = v42;\n      v45 = v44;\n      v49 = sub_FBCF8(v41, v46, v47, v48);\n      v9 = v45;\n      v8 = v43;\n      v16 = v49;\n    }\n  }\n  else\n  {\n    v16 = v15 & 0x7FFF;\n  }\n  v50 = v11 + v14 + v9 + *(unsigned __int8 *)(v3 + v16) + *(_DWORD *)(a2 + 16);\n  v51 = v50 & 7;\n  v52 = *(_QWORD *)a2 + (v50 >> 3);\n  *(_DWORD *)(a2 + 16) = v51;\n  *(_QWORD *)a2 = v52;\n  return *(_WORD *)(*(_QWORD *)(a1 + 72) + 2LL * (v8 - 1));\n}", "assembly": "; \n; sub_103C94 from 0x103c94 to 0x103e84 (496 bytes)\n; \n; 4 xrefs:\n; > sub_103E84 @ 0x103f24\n; > sub_103E84 @ 0x10403c\n; > sub_10449C @ 0x1045dc\n; > sub_104768 @ 0x104770\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             X28, X27, [SP,#-0x10+var_50]!                          ; +0x0, 0x103c94\nSTP             X26, X25, [SP,#0x50+var_40]                            ; +0x4, 0x103c98\nSTP             X24, X23, [SP,#0x50+var_30]                            ; +0x8, 0x103c9c\nSTP             X22, X21, [SP,#0x50+var_20]                            ; +0xc, 0x103ca0\nSTP             X20, X19, [SP,#0x50+var_10]                            ; +0x10, 0x103ca4\nSTP             X29, X30, [SP,#0x50+var_s0]                            ; +0x14, 0x103ca8\nLDR             X8, [X1]                                               ; +0x18, 0x103cac\nLDR             W9, [X1,#0x10]                                         ; +0x1c, 0x103cb0\nLDR             W28, [X0,#0x70]                                        ; +0x20, 0x103cb4\nLDP             X27, X25, [X0,#0x30]                                   ; +0x24, 0x103cb8\nLDR             X8, [X8]                                               ; +0x28, 0x103cbc\nMOV             X19, X1                                                ; +0x2c, 0x103cc0\nMOV             X20, X0                                                ; +0x30, 0x103cc4\nADD             X29, SP, #0x50                                         ; +0x34, 0x103cc8\nLSR             X24, X8, X9                                            ; +0x38, 0x103ccc\nAND             X8, X24, X28                                           ; +0x3c, 0x103cd0\nLDRH            W13, [X27,X8,LSL#1]                                    ; +0x40, 0x103cd4\nAND             X8, X13, #0x7FFF                                       ; +0x44, 0x103cd8\nLDRB            W14, [X25,X8]                                          ; +0x48, 0x103cdc\nLSR             X8, X24, X14                                           ; +0x4c, 0x103ce0\nAND             X9, X8, X28                                            ; +0x50, 0x103ce4\nLDRH            W22, [X27,X9,LSL#1]                                    ; +0x54, 0x103ce8\nAND             X9, X22, #0x7FFF                                       ; +0x58, 0x103cec\nLDRB            W26, [X25,X9]                                          ; +0x5c, 0x103cf0\nLSR             X8, X8, X26                                            ; +0x60, 0x103cf4\nAND             X9, X8, X28                                            ; +0x64, 0x103cf8\nLDRH            W23, [X27,X9,LSL#1]                                    ; +0x68, 0x103cfc\nAND             X9, X23, #0x7FFF                                       ; +0x6c, 0x103d00\nLDRB            W21, [X25,X9]                                          ; +0x70, 0x103d04\nORR             W9, W22, W13                                           ; +0x74, 0x103d08\nORR             W9, W9, W23                                            ; +0x78, 0x103d0c\nLSR             X8, X8, X21                                            ; +0x7c, 0x103d10\nAND             X8, X8, X28                                            ; +0x80, 0x103d14\nLDRH            W8, [X27,X8,LSL#1]                                     ; +0x84, 0x103d18\nORR             W9, W9, W8                                             ; +0x88, 0x103d1c\nSXTH            W9, W9                                                 ; +0x8c, 0x103d20\nTBNZ            W9, #0x1F, loc_103D30                                  ; +0x90, 0x103d24\nAND             W2, W8, #0x7FFF                                        ; +0x94, 0x103d28\nB               loc_103E04                                             ; +0x98, 0x103d2c\nSXTH            W8, W13                                                ; +0x9c, 0x103d30\nTBZ             W8, #0x1F, loc_103D4C                                  ; +0xa0, 0x103d34\nBL              sub_104774                                             ; +0xa4, 0x103d38\nMOV             W2, W13                                                ; +0xa8, 0x103d3c\nMOV             W3, W24                                                ; +0xac, 0x103d40\nBL              sub_FBCF8                                              ; +0xb0, 0x103d44\nMOV             W13, W0                                                ; +0xb4, 0x103d48\nLDRB            W14, [X25,W13,UXTW]                                    ; +0xb8, 0x103d4c\nLSR             X23, X24, X14                                          ; +0xbc, 0x103d50\nAND             X8, X23, X28                                           ; +0xc0, 0x103d54\nLDRSH           W8, [X27,X8,LSL#1]                                     ; +0xc4, 0x103d58\nAND             W22, W8, #0xFFFF                                       ; +0xc8, 0x103d5c\nTBZ             W8, #0x1F, loc_103D88                                  ; +0xcc, 0x103d60\nBL              sub_104774                                             ; +0xd0, 0x103d64\nMOV             W2, W22                                                ; +0xd4, 0x103d68\nMOV             W3, W23                                                ; +0xd8, 0x103d6c\nMOV             X21, X13                                               ; +0xdc, 0x103d70\nMOV             X22, X14                                               ; +0xe0, 0x103d74\nBL              sub_FBCF8                                              ; +0xe4, 0x103d78\nMOV             X14, X22                                               ; +0xe8, 0x103d7c\nMOV             X13, X21                                               ; +0xec, 0x103d80\nMOV             W22, W0                                                ; +0xf0, 0x103d84\nLDRB            W26, [X25,W22,UXTW]                                    ; +0xf4, 0x103d88\nLSR             X24, X23, X26                                          ; +0xf8, 0x103d8c\nAND             X8, X24, X28                                           ; +0xfc, 0x103d90\nLDRSH           W8, [X27,X8,LSL#1]                                     ; +0x100, 0x103d94\nAND             W23, W8, #0xFFFF                                       ; +0x104, 0x103d98\nTBZ             W8, #0x1F, loc_103DC4                                  ; +0x108, 0x103d9c\nBL              sub_104774                                             ; +0x10c, 0x103da0\nMOV             W2, W23                                                ; +0x110, 0x103da4\nMOV             W3, W24                                                ; +0x114, 0x103da8\nMOV             X21, X13                                               ; +0x118, 0x103dac\nMOV             X23, X14                                               ; +0x11c, 0x103db0\nBL              sub_FBCF8                                              ; +0x120, 0x103db4\nMOV             X14, X23                                               ; +0x124, 0x103db8\nMOV             X13, X21                                               ; +0x128, 0x103dbc\nMOV             W23, W0                                                ; +0x12c, 0x103dc0\nLDRB            W21, [X25,W23,UXTW]                                    ; +0x130, 0x103dc4\nLSR             X3, X24, X21                                           ; +0x134, 0x103dc8\nAND             X8, X3, X28                                            ; +0x138, 0x103dcc\nLDRSH           W8, [X27,X8,LSL#1]                                     ; +0x13c, 0x103dd0\nAND             W2, W8, #0xFFFF                                        ; +0x140, 0x103dd4\nTBNZ            W8, #0x1F, loc_103DE4                                  ; +0x144, 0x103dd8\nMOV             W8, W2                                                 ; +0x148, 0x103ddc\nB               loc_103E04                                             ; +0x14c, 0x103de0\nBL              sub_104774                                             ; +0x150, 0x103de4\nMOV             X24, X13                                               ; +0x154, 0x103de8\nMOV             X27, X14                                               ; +0x158, 0x103dec\nBL              sub_FBCF8                                              ; +0x15c, 0x103df0\nMOV             X14, X27                                               ; +0x160, 0x103df4\nMOV             X13, X24                                               ; +0x164, 0x103df8\nMOV             W2, W0                                                 ; +0x168, 0x103dfc\nMOV             W8, W0                                                 ; +0x16c, 0x103e00\nLDRB            W9, [X25,W2,UXTW]                                      ; +0x170, 0x103e04\nLDR             W10, [X19,#0x10]                                       ; +0x174, 0x103e08\nADD             W11, W26, W21                                          ; +0x178, 0x103e0c\nLDR             X12, [X19]                                             ; +0x17c, 0x103e10\nADD             W11, W11, W14                                          ; +0x180, 0x103e14\nADD             W9, W11, W9                                            ; +0x184, 0x103e18\nADD             W9, W9, W10                                            ; +0x188, 0x103e1c\nAND             W10, W9, #7                                            ; +0x18c, 0x103e20\nASR             W9, W9, #3                                             ; +0x190, 0x103e24\nADD             X9, X12, W9,SXTW                                       ; +0x194, 0x103e28\nSTR             W10, [X19,#0x10]                                       ; +0x198, 0x103e2c\nSTR             X9, [X19]                                              ; +0x19c, 0x103e30\nLDR             X9, [X20,#0x48]                                        ; +0x1a0, 0x103e34\nSUB             W10, W13, #1                                           ; +0x1a4, 0x103e38\nSUB             W11, W22, #1                                           ; +0x1a8, 0x103e3c\nSUB             W12, W23, #1                                           ; +0x1ac, 0x103e40\nLDRH            W10, [X9,W10,UXTW#1]                                   ; +0x1b0, 0x103e44\nLDRH            W11, [X9,W11,UXTW#1]                                   ; +0x1b4, 0x103e48\nLDRH            W12, [X9,W12,UXTW#1]                                   ; +0x1b8, 0x103e4c\nSUB             W8, W8, #1                                             ; +0x1bc, 0x103e50\nLDRH            W8, [X9,W8,UXTW#1]                                     ; +0x1c0, 0x103e54\nFMOV            S0, W10                                                ; +0x1c4, 0x103e58\nLDP             X29, X30, [SP,#0x50+var_s0]                            ; +0x1c8, 0x103e5c\nLDP             X20, X19, [SP,#0x50+var_10]                            ; +0x1cc, 0x103e60\nLDP             X22, X21, [SP,#0x50+var_20]                            ; +0x1d0, 0x103e64\nLDP             X24, X23, [SP,#0x50+var_30]                            ; +0x1d4, 0x103e68\nLDP             X26, X25, [SP,#0x50+var_40]                            ; +0x1d8, 0x103e6c\nINS             V0.S[1], W11                                           ; +0x1dc, 0x103e70\nINS             V0.S[2], W12                                           ; +0x1e0, 0x103e74\nINS             V0.S[3], W8                                            ; +0x1e4, 0x103e78\nLDP             X28, X27, [SP+0x50+var_50],#0x60                       ; +0x1e8, 0x103e7c\nRET                                                                    ; +0x1ec, 0x103e80", "xrefs": ["sub_103E84 @ 0x103f24", "sub_103E84 @ 0x10403c", "sub_10449C @ 0x1045dc", "sub_104768 @ 0x104770"], "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"}