Comments (3)
Potentially useful information i have discovered
MZMediaType (mt)
1 = Music
2 = Podcasts
3 = Audiobooks
4 = TVShows
5 = MusicVideos
6 = Movies
7 = ClassicSoftware
8 = MobileSoftware
9 = Ringtones
10 = iTunesU
11 = EBooks
12 = MacSoftware
MZPriceType
STDQ = Standard quality.//apples documentation
PLUS = High quality. //apples documentation - is this lossless? (music videos, ringtone, premium tracks) Unsure if PLUS replaced HQ; HQPRE and HQRDL are used instead of PLUSPRE/PLUSRDL. Unsure what the UP variants are unless its for uploading? PLUSUP & PLUSPREUP exist whereas HQUP/HQPREUP do not exist.
HQPRE = High quality preorder
HQRDL = High quality redownload
STDQPRE = Standard Quality Preorder
STDRDL - Standard redownload
STDOTA - Standard over the air
HCSD = Video SD upscaled to HD?
HDBUY - Video HD
HDPRE - Video HD Preorder
HDRDL - Video HD redownload
HDDESKTOPVOD = Desktop iTunes HD video resolutions
LCVOD = Desktop iTunes SD video resolutions?
SDVOD = Standard video rental
HDVOD = HD video rental
SWUPD - Software update
SWUPGRD - Software upgrade? I think this is when an app needs completely downloaded and update is when it can just patch the existing files
PLUSUP
SUBS = subscription; I think this is used if you "Get" an album on Apple Music instead of "Buy" it
GAME = Apple Arcade
productType
A=Apple offer
B=Digital Booklet
C=iOS App
P=audiobook, tv seasons(HDBUY, HCSD), album
PUB=eBook
S=song
V=video
Q=season pass HDBUY,STDQ
"Subtitles for the deaf and hard of hearing (SDH) refer to subtitles in the original language with the addition of relevant non-dialog information.
"MZPriceType": {
"STDQ": {
"isHD": false,
"isSTDQ": true,
"isRental": false,
"isRedownload": false,
"isBuy": true,
"isPreorder": false
},
"STDQPRE": {
"isHD": false,
"isSTDQ": true,
"isRental": false,
"isRedownload": false,
"isBuy": false,
"isPreorder": true
},
"STDQFUL": {
"isHD": false,
"isSTDQ": true,
"isRental": false,
"isRedownload": false,
"isBuy": false,
"isPreorder": false
},
"HCSD": {
"isHD": false,
"isSTDQ": true,//variant=SD
"isRental": false,
"isRedownload": false,
"isBuy": true,//kind=BUY
"isPreorder": false
},
"HCSDPRE": {
"isHD": false,
"isSTDQ": true,
"isRental": false,
"isRedownload": false,
"isBuy": false,
"isPreorder": true
},
"HCSDFUL": {
"isHD": false,
"isSTDQ": true,
"isRental": false,
"isRedownload": false,
"isBuy": false,
"isPreorder": false
},
"PLUS": {
"isHD": true,
"isSTDQ": false,
"isRental": false,
"isRedownload": false,
"isBuy": true,
"isPreorder": false
},
"HQPRE": {
"isHD": true,
"isSTDQ": false,
"isRental": false,
"isRedownload": false,
"isBuy": false,
"isPreorder": true
},
"HQFUL": {
"isHD": true,
"isSTDQ": false,
"isRental": false,
"isRedownload": false,
"isBuy": false,
"isPreorder": false
},
"HDBUY": {
"isHD": true,
"isSTDQ": false,
"isRental": false,
"isRedownload": false,
"isBuy": true,
"isPreorder": false
},
"HDPRE": {
"isHD": true,
"isSTDQ": false,
"isRental": false,
"isRedownload": false,
"isBuy": false,
"isPreorder": true
},
"HDFUL": {
"isHD": true,
"isSTDQ": false,
"isRental": false,
"isRedownload": false,
"isBuy": false,
"isPreorder": false
},
"SDVOD": {
"isHD": false,
"isSTDQ": true,
"isRental": true,
"isRedownload": false,
"isBuy": false,
"isPreorder": false
},
"LCVOD": {
"isHD": false,
"isSTDQ": true,
"isRental": true,
"isRedownload": false,
"isBuy": false,
"isPreorder": false
},
"HDVOD": {
"isHD": true,
"isSTDQ": false,
"isRental": true,
"isRedownload": false,
"isBuy": false,
"isPreorder": false
},
"HDDESKTOPVOD": {
"isHD": true,
"isSTDQ": false,
"isRental": true,
"isRedownload": false,
"isBuy": false,
"isPreorder": false
},
"STDRDL": {
"isHD": false,
"isSTDQ": true,
"isRental": false,
"isRedownload": true,
"isBuy": false,
"isPreorder": false
},
"HCSDRDL": {
"isHD": false,
"isSTDQ": true,
"isRental": false,
"isRedownload": true,
"isBuy": false,
"isPreorder": false
},
"HQRDL": {
"isHD": true,
"isSTDQ": false,
"isRental": false,
"isRedownload": true,
"isBuy": false,
"isPreorder": false
},
"HDRDL": {
"isHD": true,
"isSTDQ": false,
"isRental": false,
"isRedownload": true,
"isBuy": false,
"isPreorder": false
},
"PLUSUP": {
"isHD": false,
"isSTDQ": false,
"isRental": false,
"isRedownload": false,
"isBuy": false,
"isPreorder": false
},
"PLUSPREUP": {
"isHD": false,
"isSTDQ": false,
"isRental": false,
"isRedownload": false,
"isBuy": false,
"isPreorder": true
},
"RING": {
"isHD": false,
"isSTDQ": false,
"isRental": false,
"isRedownload": false,
"isBuy": false,
"isPreorder": false
},
"TKTM": {
"isHD": false,
"isSTDQ": false,
"isRental": false,
"isRedownload": false,
"isBuy": false,
"isPreorder": false
},
"2NDS": {
"isHD": false,
"isSTDQ": false,
"isRental": false,
"isRedownload": false,
"isBuy": false,
"isPreorder": false
},
"SWUPGRD": {
"isHD": false,
"isSTDQ": false,
"isRental": false,
"isRedownload": false,
"isBuy": false,
"isPreorder": false
},
"SWUPD": {
"isHD": false,
"isSTDQ": false,
"isRental": false,
"isRedownload": false,
"isBuy": false,
"isPreorder": false
},
"THDOME": {
"isHD": false,
"isSTDQ": false,
"isRental": false,
"isRedownload": false,
"isBuy": false,
"isPreorder": false
},
"STDOTA": {
"isHD": false,
"isSTDQ": true,
"isRental": false,
"isRedownload": false,
"isBuy": false,
"isPreorder": false
},
"HQOTA": {
"isHD": true,
"isSTDQ": false,
"isRental": false,
"isRedownload": false,
"isBuy": false,
"isPreorder": false
},
"HDOTA": {
"isHD": true,
"isSTDQ": false,
"isRental": false,
"isRedownload": false,
"isBuy": false,
"isPreorder": false
},
"RADIO": {
"isHD": false,
"isSTDQ": false,
"isRental": false,
"isRedownload": false,
"isBuy": false,
"isPreorder": false
}
},
char *__fastcall GenerateKBSync(__int64 a1)
{
char *v1; // rsi
int m_scInfo; // r13d
_QWORD *v3; // rdi
__int64 v4; // rcx
__int64 v5; // rdx
int v6; // ebx
__int64 v7; // rcx
__int64 v8; // r14
unsigned int Length; // eax
unsigned int v10; // r15d
char *v11; // r12
unsigned int v12; // ebx
__int64 BytePtr; // rax
unsigned int v14; // eax
volatile signed __int32 *v15; // rbx
int v17; // [rsp+20h] [rbp-49h]
__int64 v18; // [rsp+30h] [rbp-39h] BYREF
char v19; // [rsp+38h] [rbp-31h]
__int64 v20; // [rsp+40h] [rbp-29h] BYREF
char v21; // [rsp+48h] [rbp-21h]
__int64 v22; // [rsp+50h] [rbp-19h] BYREF
char v23; // [rsp+58h] [rbp-11h]
char v24; // [rsp+60h] [rbp-9h]
void *Block; // [rsp+68h] [rbp-1h] BYREF
__int64 v26; // [rsp+70h] [rbp+7h]
__int64 v27; // [rsp+78h] [rbp+Fh]
char v28; // [rsp+80h] [rbp+17h]
__int64 v29; // [rsp+D0h] [rbp+67h] BYREF
__int64 v30; // [rsp+D8h] [rbp+6Fh] BYREF
v29 = a1;
v24 = 0;
v1 = 0i64;
v26 = 0i64;
v27 = 0i64;
v28 = 0;
Block = 0i64;
m_scInfo = GetSCInfo(0i64, 0i64, &Block);
LODWORD(v26) = m_scInfo;
v3 = Block;
if ( m_scInfo )
{
v4 = HIDWORD(v26);
}
else
{
v24 = 1;
if ( Block )
{
v4 = *(unsigned int *)Block;
HIDWORD(v26) = *(_DWORD *)Block;
}
else
{
v4 = (unsigned int)dword_14209565C;
v3 = 0i64;
HIDWORD(v26) = dword_14209565C;
}
v27 = 0i64;
v28 = 0;
}
if ( !v24 )
goto LABEL_47;
v18 = 0i64;
v19 = 0;
v5 = 0i64;
if ( *(_QWORD *)&qword_142070F80 )
v5 = *(_QWORD *)(*(_QWORD *)&qword_142070F80 + 62716i64);
v30 = 0i64;
LODWORD(v29) = 0;
v6 = sub_1400AEE70(v4, v5, 0i64, 9i64, &v30, &v29);
if ( v6 )
{
v22 = 0i64;
v23 = 0;
SwapAndReset(&v18, &v22);
v7 = v22;
}
else
{
if ( v30 && (_DWORD)v29 )
v20 = CFDataCreate(qword_1420700D8, v30, (unsigned int)v29);
else
v20 = 0i64;
v21 = 0;
SwapAndReset(&v18, &v20);
v7 = v20;
}
if ( v7 )
CFRelease(v7);
if ( v30 )
sub_140022260(v30);
v8 = v18;
if ( !v6 )
{
if ( v18 && CFDataGetLength(v18) )
{
Length = CFDataGetLength(v8);
if ( Length <= 0xBFFFFFFD )
v10 = 4 * ((Length + 2) / 3);
else
v10 = -1;
v11 = 0i64;
if ( v10 )
{
v1 = (char *)sub_140252AF0(v10);
v11 = &v1[v10];
memset(v1, 0, v10);
}
v12 = CFDataGetLength(v8);
BytePtr = CFDataGetBytePtr(v8);
v14 = encodeutf8(BytePtr, v12, v1, v10);
v15 = 0i64;
if ( v1 )
{
if ( v14 )
v15 = (volatile signed __int32 *)sub_140AE9D90(v1, v14);
if ( (unsigned __int64)(v11 - v1) >= 0x1000 )
{
if ( (unsigned __int64)&v1[-*((_QWORD *)v1 - 1) - 8] > 0x1F )
invalid_parameter_noinfo_noreturn();
v1 = (char *)*((_QWORD *)v1 - 1);
}
j_j_free_1(v1);
if ( v15 )
{
if ( *(_QWORD *)v15 )
{
LOBYTE(v17) = 0;
v1 = (char *)CFStringCreateWithBytes(0i64, v15 + 3, *(_QWORD *)v15, 134217984i64, v17);
LABEL_42:
if ( _InterlockedExchangeAdd(v15 + 2, 0xFFFFFFFF) == 1 )
{
*((_DWORD *)v15 + 2) = -1000000000;
j_free_1((void *)v15);
}
v3 = Block;
v8 = v18;
goto LABEL_45;
}
}
}
v1 = 0i64;
}
else
{
v15 = 0i64;
}
if ( v15 )
goto LABEL_42;
}
LABEL_45:
if ( v8 )
CFRelease(v8);
LABEL_47:
if ( v24 && !m_scInfo && v3 )
{
if ( v3[1] )
{
sub_140028FA0(*(unsigned int *)v3);
if ( !v3[1] )
{
_InterlockedCompareExchange(&dword_14209565C, 0, dword_14209565C);
v3 = Block;
}
}
aligned_free(v3);
}
return v1;
}
__int64 __fastcall sub_140022260(__int64 a1)
{
int v1; // edx
unsigned int v2; // r10d
char v3; // al
__int16 v4; // ax
__int64 v6; // [rsp+20h] [rbp-18h] BYREF
unsigned int v7; // [rsp+28h] [rbp-10h]
unsigned int v8; // [rsp+2Ch] [rbp-Ch]
int v9; // [rsp+30h] [rbp-8h]
v1 = *(_DWORD *)((char *)off_1419B8C68 - 735133071);
v2 = 102057763 * ((unsigned int)&v6 ^ 0x185F6DFB);
v8 = 5 - v2;
v6 = a1;
v9 = v1 + v2;
v3 = (char)((v1 - ((v1 + ((unsigned __int8)((char)v1 >> 7) >> 4)) & 0x70) + 11) | 0x82) / 109;
LOBYTE(v2) = v3 - 61;
v4 = (char)(-110 * ((v3 - 110) ^ 0x19) + 22);
((void (__fastcall *)(__int64 *))((char *)*(&off_1419B8A20
+ (unsigned __int8)((v2 & ((((unsigned __int8)(((unsigned __int8)(((unsigned __int16)(109 * v4) >> 8) - v4) >> 7)
+ ((char)(((unsigned __int16)(109 * v4) >> 8)
- v4) >> 6)) | 0x3Cu) > 0xD1) | 0xC2))
+ 49)
- 153)
- 509927050))(&v6);
return v7;
}
__int64 __fastcall sub_140028FA0(int a1)
{
__int16 v1; // dx
__int64 v2; // r10
unsigned int v3; // edx
int v4; // eax
int v6[4]; // [rsp+28h] [rbp-10h] BYREF
v1 = (char)(107 * (((unsigned __int8)a1 >> 5) ^ 4) * (((unsigned __int8)a1 >> 5) ^ 4));
LOBYTE(v1) = v1 - 71 * (((unsigned __int16)(29 * v1) >> 15) + ((char)((unsigned __int16)(29 * v1) >> 8) >> 3));
LOBYTE(v1) = ((unsigned __int8)(v1 ^ (((_BYTE)v1 << 6) - 124)) / 0x2Du) | 0xA9;
v2 = (__int64)*(&off_1419B8A20
+ ((((unsigned __int8)(((unsigned __int16)(91 * (char)((char)v1 % 30 + 44)) >> 15)
+ ((char)((unsigned __int16)(91 * (char)((char)v1 % 30 + 44)) >> 8) >> 5)
- 30) >> 2)
% 0x27u) & (unsigned __int8)((char)v1 % 30 + 44))
+ 230);
v3 = 511220603 * ((unsigned int)v6 ^ 0x36F6DC0B);
v4 = v3 + *(_DWORD *)(v2 - 72276499);
v6[3] = 6 - v3;
v6[1] = v4;
v6[0] = v3 + a1;
LOWORD(v4) = (char)(-110
* (((char)((v3
- ((v3 + ((unsigned __int8)((char)(123 * ((unsigned __int8)v6 ^ 0xB)) >> 7) >> 4)) & 0x70)
+ 11) | 0x82)
/ 109
- 110) ^ 0x19)
+ 22);
((void (__fastcall *)(int *))((char *)*(&off_1419B8A20
+ (unsigned __int8)((((char)((v3
- ((v3
+ ((unsigned __int8)((char)(123
* ((unsigned __int8)v6 ^ 0xB)) >> 7) >> 4)) & 0x70)
+ 11) | 0x82)
/ 109
- 61) & ((((unsigned __int8)(((unsigned __int8)(((unsigned __int16)(109 * v4) >> 8) - v4) >> 7)
+ ((char)(((unsigned __int16)(109 * v4) >> 8)
- v4) >> 6)) | 0x3Cu) > 0xD1) | 0xC2))
+ 49)
- 165)
- 37283174))(v6);
return (unsigned int)v6[2];
}
void __fastcall sub_1400AEE70(char a1, __int64 a2, __int64 a3, __int64 a4, __int64 a5, __int64 a6)
{
int v7; // eax
__int64 v8; // r8
char v9[280]; // [rsp+90h] [rbp-118h] BYREF
v7 = (unsigned __int8)(((((char)(-112
* ((unsigned __int8)((char)(a1
- 108
* (((char)((unsigned __int16)(19 * a1) >> 8) >> 3)
+ ((unsigned __int16)(19 * a1) >> 15))) >> 1) >> 4)
- 64) >> 7) | 0x43)
/ -32) >> 7);
((void (__fastcall *)(char *, _QWORD, __int64))((char *)*(&off_1419B8A20
+ (unsigned int)(unsigned __int8)(((((unsigned __int8)((unsigned int)(175 * v7) >> 13)
+ (_BYTE)v7) << 6) | 0x5A)
- 37)
+ 98)
- 586092799))(
v9,
0i64,
128i64);
while ( a5 != 0 && a6 != 0 )
;
++v9[v8];
__asm { jmp rbp }
}
_DWORD *__fastcall sub_140AE9D90(void *Src, size_t Size)
{
_DWORD *result; // rax
_DWORD *v5; // rbx
result = operator new(Size + 16, (const struct std::nothrow_t *)&unk_141987F60);
v5 = result;
if ( result )
{
*(_QWORD *)result = Size;
result[2] = 1;
*((_BYTE *)result + Size + 12) = 0;
memcpy(result + 3, Src, Size);
return v5;
}
return result;
}
_QWORD *__fastcall sub_140252AF0(size_t a1)
{
void *v1; // rax
void *v2; // rcx
_QWORD *result; // rax
if ( a1 < 0x1000 )
{
if ( a1 )
return operator new(a1);
else
return 0i64;
}
else
{
if ( a1 + 39 <= a1 )
sub_140252AD0();
v1 = operator new(a1 + 39);
v2 = v1;
if ( !v1 )
invalid_parameter_noinfo_noreturn();
result = (_QWORD *)(((unsigned __int64)v1 + 39) & 0xFFFFFFFFFFFFFFE0ui64);
*(result - 1) = v2;
}
return result;
}
void __noreturn sub_140252AD0()
{
char pExceptionObject[40]; // [rsp+20h] [rbp-28h] BYREF
sub_1402529B0(pExceptionObject);
CxxThrowException(pExceptionObject, (_ThrowInfo *)&_TI3_AVbad_array_new_length_std__);
}
_QWORD *__fastcall sub_1402529B0(_QWORD *a1)
{
a1[2] = 0i64;
a1[1] = "bad array new length";
*a1 = &std::bad_array_new_length::`vftable';
return a1;
}
__int64 __fastcall encodeutf8(unsigned __int8 *a1, unsigned int a2, __int64 a3, unsigned int a4)
{
__int64 v5; // r8
unsigned int v6; // r10d
unsigned __int8 *v7; // rbx
unsigned int v8; // edx
__int64 v9; // r9
__int64 v10; // rax
unsigned __int64 v11; // rdx
unsigned __int64 v12; // rdx
__int64 v13; // r8
__int64 v14; // r8
__int64 v15; // r8
unsigned int v16; // ecx
unsigned __int64 v17; // rdx
__int64 v18; // r8
__int64 v19; // rax
__int64 v20; // rcx
char v22[80]; // [rsp+0h] [rbp-68h] BYREF
v5 = 0i64;
v6 = a2;
strcpy(v22, "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/");
v7 = a1;
if ( !a1 && a2 )
return 0i64;
if ( !a3 )
return 0i64;
v8 = a2 <= 0xBFFFFFFD ? 4 * ((a2 + 2) / 3) : -1;
if ( a4 < v8 )
return 0i64;
if ( v6 >= 3 )
{
v9 = v6 / 3;
do
{
v6 -= 3;
v10 = v7[2];
v11 = (v7[1] | ((unsigned __int64)*v7 << 8)) << 8;
v7 += 3;
v12 = v10 | v11;
*(_BYTE *)(v5 + a3) = v22[v12 >> 18];
v13 = (unsigned int)(v5 + 1);
*(_BYTE *)(v13 + a3) = v22[(v12 >> 12) & 0x3F];
v14 = (unsigned int)(v13 + 1);
*(_BYTE *)(v14 + a3) = v22[(v12 >> 6) & 0x3F];
v15 = (unsigned int)(v14 + 1);
*(_BYTE *)(v15 + a3) = v22[v12 & 0x3F];
v5 = (unsigned int)(v15 + 1);
--v9;
}
while ( v9 );
}
if ( v6 )
{
v16 = *v7 << 16;
if ( v6 == 2 )
v16 |= v7[1] << 8;
v17 = v16;
*(_BYTE *)(v5 + a3) = v22[(unsigned __int64)v16 >> 18];
v18 = (unsigned int)(v5 + 1);
v19 = (v16 >> 12) & 0x3F;
v20 = (unsigned int)(v18 + 1);
*(_BYTE *)(v18 + a3) = v22[v19];
v5 = (unsigned int)(v18 + 2);
if ( v6 == 2 )
{
*(_BYTE *)(v20 + a3) = v22[(v17 >> 6) & 0x3F];
*(_BYTE *)(v5 + a3) = 61;
return (unsigned int)(v5 + 1);
}
*(_BYTE *)(v20 + a3) = 61;
*(_BYTE *)(v5 + a3) = 61;
LODWORD(v5) = v5 + 1;
}
return (unsigned int)v5;
}
__int64 __fastcall GetSCInfo(__int64 a1, char a2, _QWORD *a3)
{
unsigned int v5; // ebx
__int64 (__fastcall *v6)(__int64 *, __int16 *, int *, _QWORD); // rax
unsigned int v7; // eax
__int64 (__fastcall *v8)(__int64 *, __int16 *, _QWORD, _QWORD, int *); // rax
__int64 v9; // rdx
__int64 (__fastcall *v10)(int *, __int64); // r8
void *v11; // rbp
char v13[16]; // [rsp+30h] [rbp-678h] BYREF
__int64 v14[68]; // [rsp+40h] [rbp-668h] BYREF
int v15[4]; // [rsp+260h] [rbp-448h] BYREF
__int64 v16; // [rsp+270h] [rbp-438h]
__int16 v17[256]; // [rsp+480h] [rbp-228h] BYREF
if ( !a1 && a3 )
{
memset(v14, 0, sizeof(v14));
v13[0] = 0;
v5 = LoadSCInfo(v14);
if ( v5 )
{
v13[0] = 1;
*a3 = 0i64;
goto LABEL_32;
}
v17[0] = 0;
readBytes("SC Info.sidb", 12);
if ( v14[2] && (LODWORD(v14[0]) == 1095123792 || LODWORD(v14[0]) == 1466527312) )
{
v6 = *(__int64 (__fastcall **)(__int64 *, __int16 *, int *, _QWORD))(v14[2] + 56);
if ( v6 )
{
v7 = v6(v14, v17, v15, 0i64);
v5 = v7;
if ( !v7 )
{
v11 = (void *)allocateAlignedMemory(0i64);
if ( !v11 )
goto LABEL_24;
LABEL_28:
v5 = sub_140724060(v14, v11);
if ( !v5 )
{
*a3 = v11;
return v5;
}
aligned_free(v11);
LABEL_31:
*a3 = 0i64;
if ( v5 == -5000 )
{
LABEL_32:
if ( a2 )
{
sub_140726830(sub_140723AA0, v13);
return (unsigned int)-128;
}
}
return v5;
}
v15[0] = 0;
if ( v7 != -43 )
goto LABEL_31;
if ( v14[2] && (LODWORD(v14[0]) == 1095123792 || LODWORD(v14[0]) == 1466527312) )
{
if ( !v17[0] )
{
v5 = -50;
goto LABEL_31;
}
v8 = *(__int64 (__fastcall **)(__int64 *, __int16 *, _QWORD, _QWORD, int *))(v14[2] + 112);
if ( !v8 )
{
LABEL_16:
v5 = -4;
LABEL_35:
*a3 = 0i64;
return v5;
}
v5 = v8(v14, v17, 0i64, 0i64, v15);
if ( v5 )
goto LABEL_31;
if ( v16 && (v15[0] == 1095123792 || v15[0] == 1466527312) )
{
v10 = *(__int64 (__fastcall **)(int *, __int64))(v16 + 88);
if ( !v10 )
goto LABEL_16;
LOBYTE(v9) = 1;
v5 = v10(v15, v9);
if ( v5 )
goto LABEL_31;
v11 = (void *)allocateAlignedMemory(0i64);
if ( !v11 )
{
LABEL_24:
v5 = -108;
goto LABEL_35;
}
a2 = 1;
goto LABEL_28;
}
}
}
}
v5 = -50;
goto LABEL_35;
}
return 4294967246i64;
}
__int64 __fastcall LoadSCInfo(__int64 a1)
{
DWORD v3; // eax
unsigned int v4; // ebx
DWORD LastError; // eax
__int64 v6; // rcx
char *v7; // rcx
__int64 v8; // rdx
signed __int64 v9; // r8
int v10; // [rsp+30h] [rbp-648h] BYREF
__int16 v11; // [rsp+34h] [rbp-644h]
int v12; // [rsp+38h] [rbp-640h]
__int64 v13; // [rsp+40h] [rbp-638h]
char v14[520]; // [rsp+48h] [rbp-630h] BYREF
WCHAR PathName[264]; // [rsp+250h] [rbp-428h] BYREF
__int16 v16[256]; // [rsp+460h] [rbp-218h] BYREF
if ( !a1 )
return 4294967246i64;
v3 = SHGetFolderPathW(0i64, 32803, 0i64, 0, PathName);
if ( v3 == -2147467259 )
{
v4 = -120;
}
else
{
v4 = sub_140ADE7B0(v3);
if ( !v4 )
{
PathAppendW(PathName, L"Apple Computer");
if ( !CreateDirectoryW(PathName, 0i64) )
{
LastError = GetLastError();
if ( LastError != 183 )
goto LABEL_20;
}
PathAppendW(PathName, &WideCharStr);
LODWORD(v6) = 0;
if ( !PathName[0] )
goto LABEL_16;
do
v6 = (unsigned int)(v6 + 1);
while ( PathName[v6] );
if ( (unsigned int)(v6 - 1) <= 0x102 )
{
v7 = v14;
v8 = 0i64;
v9 = (char *)PathName - v14;
do
{
if ( (_DWORD)v8 == 259 )
break;
v8 = (unsigned int)(v8 + 1);
*(_WORD *)v7 = *(_WORD *)&v7[v9];
v7 += 2;
}
while ( *(_WORD *)&v7[v9] );
*(_WORD *)v7 = 0;
v10 = 1466527312;
v11 = 0;
v12 = 0;
v13 = sub_140AFF6E0(v7, v8);
v4 = 0;
}
else
{
LABEL_16:
v4 = -50;
}
if ( CreateDirectoryW(PathName, 0i64) )
goto LABEL_21;
LastError = GetLastError();
if ( LastError == 183 )
v4 = 0;
else
LABEL_20:
v4 = sub_140ADE7B0(LastError);
}
}
LABEL_21:
if ( !v4 )
{
v16[0] = 0;
readBytes("SC Info", 7i64, v16);
return (unsigned int)sub_140723720(&v10, v16, a1);
}
return v4;
}
__int64 __fastcall readBytes(LPCCH lpMultiByteStr, __int64 cbMultiByte, _WORD *a3)
{
unsigned int v4; // ebx
__int64 result; // rax
int v6; // esi
DWORD LastError; // eax
if ( !a3 )
return 4294967246i64;
v4 = 0;
*a3 = 0;
if ( !cbMultiByte )
return 0i64;
if ( !lpMultiByteStr )
return 4294967246i64;
if ( a3 == (_WORD *)-2i64 )
{
result = 4294967246i64;
LOWORD(MEMORY[0xFFFFFFFFFFFFFFFE]) = 0;
}
else
{
v6 = MultiByteToWideChar(0xFDE9u, 0, lpMultiByteStr, cbMultiByte, a3 + 1, 255);
if ( !v6 )
{
LastError = GetLastError();
v4 = sub_140ADE7B0(LastError);
}
result = v4;
*a3 = v6;
}
return result;
}
__int64 __fastcall sub_140ADE7B0(DWORD dwMessageId)
{
__int64 result; // rax
unsigned int *i; // rcx
WCHAR Buffer[512]; // [rsp+40h] [rbp-418h] BYREF
result = 0i64;
if ( dwMessageId )
{
for ( i = dword_141A21420; *i != dwMessageId; i += 2 )
{
result = (unsigned int)(result + 1);
if ( (unsigned int)result >= 0xA4 )
{
FormatMessageW(0x1000u, 0i64, dwMessageId, 0, Buffer, 0x1FEu, 0i64);
return 4294967246i64;
}
}
return dword_141A21420[2 * result + 1];
}
return result;
}
__int64 __fastcall sub_140724060(__int64 a1, unsigned __int32 *a2)
{
__int64 result; // rax
unsigned __int32 v4; // [rsp+38h] [rbp+10h] BYREF
*a2 = 0;
if ( dword_14209565C )
*a2 = dword_14209565C;
if ( *a2 )
return 0i64;
result = sub_140723CE0(a1, &v4);
if ( !(_DWORD)result )
{
if ( _InterlockedCompareExchange(&dword_14209565C, v4, 0) )
{
sub_140028FA0(v4);
*a2 = dword_14209565C;
return 0i64;
}
else
{
*a2 = v4;
return 0i64;
}
}
return result;
}
__int64 __fastcall sub_140723CE0(__int64 a1, unsigned int *a2)
{
__int64 v5; // rax
__int64 (__fastcall *v6)(__int64, __int64 *, __int64); // r9
unsigned int v7; // ebx
__int64 fPending; // [rsp+20h] [rbp-858h] BYREF
int *v9; // [rsp+28h] [rbp-850h]
__int64 v10; // [rsp+30h] [rbp-848h]
int *v11; // [rsp+38h] [rbp-840h]
__int64 v12; // [rsp+40h] [rbp-838h]
__int64 v13; // [rsp+48h] [rbp-830h]
__int64 v14[2]; // [rsp+50h] [rbp-828h] BYREF
int v15; // [rsp+60h] [rbp-818h]
int v16; // [rsp+68h] [rbp-810h]
int v17; // [rsp+70h] [rbp-808h]
int v18; // [rsp+78h] [rbp-800h]
char v19; // [rsp+80h] [rbp-7F8h]
char v20; // [rsp+88h] [rbp-7F0h]
int v21; // [rsp+90h] [rbp-7E8h]
int v22; // [rsp+98h] [rbp-7E0h]
int v23; // [rsp+A0h] [rbp-7D8h]
int v24; // [rsp+A8h] [rbp-7D0h]
int v25; // [rsp+B0h] [rbp-7C8h]
int v26; // [rsp+B8h] [rbp-7C0h]
int v27; // [rsp+C0h] [rbp-7B8h]
int v28; // [rsp+C8h] [rbp-7B0h]
int v29; // [rsp+D0h] [rbp-7A8h]
int v30; // [rsp+D8h] [rbp-7A0h]
int v31; // [rsp+E0h] [rbp-798h]
int v32; // [rsp+E8h] [rbp-790h]
int v33; // [rsp+F0h] [rbp-788h]
int v34; // [rsp+F8h] [rbp-780h]
int v35; // [rsp+100h] [rbp-778h]
__int64 v36; // [rsp+108h] [rbp-770h]
int v37; // [rsp+110h] [rbp-768h]
__int64 v38; // [rsp+118h] [rbp-760h]
__int64 v39; // [rsp+120h] [rbp-758h]
if ( !a2 )
return 4294967246i64;
if ( !InitOnceBeginInitialize(&stru_1420CD398, 0, (PBOOL)&fPending, 0i64)
|| (_DWORD)fPending
&& (v9 = (int *)&stru_1420CD398, LODWORD(v10) = 4, sub_140818BB0(), !InitOnceComplete(&stru_1420CD398, 0, 0i64)) )
{
abort();
}
v9 = &dword_1420CEA30;
LOBYTE(v10) = 0;
if ( !InitOnceBeginInitialize(&stru_1420CD3A8, 0, (PBOOL)&fPending, 0i64)
|| (_DWORD)fPending
&& (v11 = (int *)&stru_1420CD3A8, LODWORD(v12) = 4, sub_140818FE0(), !InitOnceComplete(&stru_1420CD3A8, 0, 0i64)) )
{
abort();
}
v11 = &dword_1420CEA48;
LOBYTE(v12) = 0;
if ( a1 && (v5 = *(_QWORD *)(a1 + 16)) != 0 && (*(_DWORD *)a1 == 1095123792 || *(_DWORD *)a1 == 1466527312) )
{
v6 = *(__int64 (__fastcall **)(__int64, __int64 *, __int64))(v5 + 32);
if ( v6 )
{
v7 = v6(a1, v14, 2048i64);
if ( !v7 )
{
v7 = ((__int64 (__fastcall *)(unsigned int, unsigned int, unsigned int, _DWORD, __int64, __int64, __int64, __int64, __int64, __int64, __int64, __int64, int, int, int, int, char, char, int, int, int, int, int, int, int, int, int, int, int, int, int, int, int, __int64, int, __int64, __int64))sub_14001DB60)(
(unsigned int)&dword_1420CEA30,
(unsigned int)&dword_1420CEA48,
(unsigned int)v14,
(_DWORD)a2,
fPending,
(__int64)v9,
v10,
(__int64)v11,
v12,
v13,
v14[0],
v14[1],
v15,
v16,
v17,
v18,
v19,
v20,
v21,
v22,
v23,
v24,
v25,
v26,
v27,
v28,
v29,
v30,
v31,
v32,
v33,
v34,
v35,
v36,
v37,
v38,
v39);
if ( v7 == -42153 )
sub_140028FA0(*a2);
}
}
else
{
return (unsigned int)-4;
}
}
else
{
return (unsigned int)-50;
}
return v7;
}
__int64 __fastcall sub_140028FA0(int a1)
{
__int16 v1; // dx
__int64 v2; // r10
unsigned int v3; // edx
int v4; // eax
int v6[4]; // [rsp+28h] [rbp-10h] BYREF
v1 = (char)(107 * (((unsigned __int8)a1 >> 5) ^ 4) * (((unsigned __int8)a1 >> 5) ^ 4));
LOBYTE(v1) = v1 - 71 * (((unsigned __int16)(29 * v1) >> 15) + ((char)((unsigned __int16)(29 * v1) >> 8) >> 3));
LOBYTE(v1) = ((unsigned __int8)(v1 ^ (((_BYTE)v1 << 6) - 124)) / 0x2Du) | 0xA9;
v2 = (__int64)*(&off_1419B8A20
+ ((((unsigned __int8)(((unsigned __int16)(91 * (char)((char)v1 % 30 + 44)) >> 15)
+ ((char)((unsigned __int16)(91 * (char)((char)v1 % 30 + 44)) >> 8) >> 5)
- 30) >> 2)
% 0x27u) & (unsigned __int8)((char)v1 % 30 + 44))
+ 230);
v3 = 511220603 * ((unsigned int)v6 ^ 0x36F6DC0B);
v4 = v3 + *(_DWORD *)(v2 - 72276499);
v6[3] = 6 - v3;
v6[1] = v4;
v6[0] = v3 + a1;
LOWORD(v4) = (char)(-110
* (((char)((v3
- ((v3 + ((unsigned __int8)((char)(123 * ((unsigned __int8)v6 ^ 0xB)) >> 7) >> 4)) & 0x70)
+ 11) | 0x82)
/ 109
- 110) ^ 0x19)
+ 22);
((void (__fastcall *)(int *))((char *)*(&off_1419B8A20
+ (unsigned __int8)((((char)((v3
- ((v3
+ ((unsigned __int8)((char)(123
* ((unsigned __int8)v6 ^ 0xB)) >> 7) >> 4)) & 0x70)
+ 11) | 0x82)
/ 109
- 61) & ((((unsigned __int8)(((unsigned __int8)(((unsigned __int16)(109 * v4) >> 8) - v4) >> 7)
+ ((char)(((unsigned __int16)(109 * v4) >> 8)
- v4) >> 6)) | 0x3Cu) > 0xD1) | 0xC2))
+ 49)
- 165)
- 37283174))(v6);
return (unsigned int)v6[2];
}
__int64 __fastcall sub_140726830(__int64 a1, char *a2)
{
unsigned __int8 v2; // si
volatile signed __int32 *v3; // rbx
__int64 *v4; // rdx
__int64 v6[2]; // [rsp+20h] [rbp-88h] BYREF
char v7; // [rsp+30h] [rbp-78h]
__int64 *v8; // [rsp+58h] [rbp-50h]
__int64 v9; // [rsp+60h] [rbp-48h]
__int64 v10; // [rsp+68h] [rbp-40h]
__int16 v11; // [rsp+70h] [rbp-38h]
char v12; // [rsp+72h] [rbp-36h]
__int64 v13; // [rsp+78h] [rbp-30h]
__int128 v14; // [rsp+80h] [rbp-28h]
v6[0] = (__int64)&std::_Func_impl_no_alloc<std::_Binder<std::_Unforced,void (&)(unsigned char),unsigned char &>,void,>::`vftable';
v6[1] = a1;
v7 = *a2;
v8 = v6;
v9 = 0i64;
v10 = 0i64;
v11 = 0;
v12 = 0;
v13 = 0i64;
v14 = 0i64;
v2 = sub_140AF4DA0(v6);
v3 = (volatile signed __int32 *)*((_QWORD *)&v14 + 1);
if ( *((_QWORD *)&v14 + 1) )
{
if ( _InterlockedExchangeAdd((volatile signed __int32 *)(*((_QWORD *)&v14 + 1) + 8i64), 0xFFFFFFFF) == 1 )
{
(**(void (__fastcall ***)(volatile signed __int32 *))v3)(v3);
if ( _InterlockedExchangeAdd(v3 + 3, 0xFFFFFFFF) == 1 )
(*(void (__fastcall **)(volatile signed __int32 *))(*(_QWORD *)v3 + 8i64))(v3);
}
}
if ( v8 )
{
v4 = v6;
LOBYTE(v4) = v8 != v6;
(*(void (__fastcall **)(__int64 *, __int64 *))(*v8 + 32))(v8, v4);
}
return v2;
}
char __fastcall sub_140AF4DA0(__int64 a1)
{
_QWORD *v3; // rax
__int64 v4; // rbp
__int64 (__fastcall ***v5)(_QWORD, void *); // rcx
double v6; // xmm1_8
__int64 v7; // rax
__int64 v8; // rax
__int64 v9; // rbx
DWORD CurrentThreadId; // esi
int v11; // eax
__int64 v12; // rdi
__int64 v13; // rsi
__int64 i; // r14
__int64 v15; // rdi
__int64 *v16; // rsi
unsigned __int64 v17; // rdi
__int64 *v18; // rdx
__int64 v19; // rax
__int64 *v20; // r9
bool v21; // zf
char v22; // al
char v23; // bl
__int64 v24; // [rsp+50h] [rbp+8h]
void *Block; // [rsp+58h] [rbp+10h]
LARGE_INTEGER PerformanceCount; // [rsp+60h] [rbp+18h] BYREF
__int64 v27; // [rsp+68h] [rbp+20h] BYREF
if ( !*(_QWORD *)(a1 + 56) )
return 0;
v3 = operator new(0x78ui64, (const struct std::nothrow_t *)&unk_141987F60);
v4 = (__int64)v3;
if ( v3 )
{
v3[7] = 0i64;
v5 = *(__int64 (__fastcall ****)(_QWORD, void *))(a1 + 56);
if ( v5 )
v3[7] = (**v5)(v5, v3);
*(_DWORD *)(v4 + 64) = *(_DWORD *)(a1 + 64);
*(_DWORD *)(v4 + 68) = *(_DWORD *)(a1 + 68);
v6 = 0.0;
if ( *(double *)(a1 + 72) != 0.0 )
{
QueryPerformanceCounter(&PerformanceCount);
v6 = (double)(int)PerformanceCount.LowPart * *(double *)&qword_14209E638 + *(double *)(a1 + 72);
}
*(double *)(v4 + 72) = v6;
*(_BYTE *)(v4 + 80) = *(_BYTE *)(a1 + 80);
*(_BYTE *)(v4 + 81) = *(_BYTE *)(a1 + 81);
*(_BYTE *)(v4 + 82) = *(_BYTE *)(a1 + 82);
*(_QWORD *)(v4 + 88) = *(_QWORD *)(a1 + 88);
*(_BYTE *)(v4 + 96) = *(_QWORD *)(a1 + 96) != 0i64;
*(_QWORD *)(v4 + 104) = 0i64;
*(_QWORD *)(v4 + 112) = 0i64;
if ( *(_QWORD *)(a1 + 104) )
{
*(_QWORD *)(v4 + 104) = *(_QWORD *)(a1 + 96);
v7 = *(_QWORD *)(a1 + 104);
*(_QWORD *)(v4 + 112) = v7;
_InterlockedIncrement((volatile signed __int32 *)(v7 + 12));
}
}
else
{
v4 = 0i64;
}
Block = (void *)v4;
if ( v4 )
{
v8 = sub_140AF4C90();
v9 = v8 + 32;
v24 = v8 + 32;
if ( v8 != -32 && *(_DWORD *)v9 == 1819239275 )
{
CurrentThreadId = GetCurrentThreadId();
EnterCriticalSection((LPCRITICAL_SECTION)(v9 + 16));
v11 = *(_DWORD *)(v9 + 8);
if ( !v11 )
{
*(_DWORD *)(v9 + 4) = CurrentThreadId;
v11 = *(_DWORD *)(v9 + 8);
}
*(_DWORD *)(v9 + 8) = v11 + 1;
}
if ( !*(_BYTE *)(sub_140AF4C90() + 24) )
{
v12 = *(_QWORD *)(a1 + 88);
if ( !v12 )
goto LABEL_23;
v13 = *(_QWORD *)(sub_140AF4C90() + 8);
for ( i = *(_QWORD *)sub_140AF4C90(); i != v13; i += 8i64 )
{
if ( v12 == *(_QWORD *)(*(_QWORD *)i + 88i64) )
break;
}
if ( i == *(_QWORD *)(sub_140AF4C90() + 8) )
{
LABEL_23:
v15 = *(_QWORD *)(sub_140AF4C90() + 8);
v16 = *(__int64 **)sub_140AF4C90();
v17 = (v15 - (__int64)v16) >> 3;
while ( (__int64)v17 > 0 )
{
v18 = &v16[v17 >> 1];
if ( *(_DWORD *)(v4 + 64) <= *(_DWORD *)(*v18 + 64) )
{
v16 = v18 + 1;
v17 += -1i64 - (v17 >> 1);
}
else
{
v17 >>= 1;
}
}
v19 = sub_140AF4C90();
Block = 0i64;
v27 = v4;
v20 = *(__int64 **)(v19 + 8);
if ( v20 == *(__int64 **)(v19 + 16) )
{
sub_1402C5C50(v19, v16, &v27);
}
else if ( v16 == v20 )
{
*v20 = v4;
*(_QWORD *)(v19 + 8) += 8i64;
}
else
{
*v20 = *(v20 - 1);
*(_QWORD *)(v19 + 8) += 8i64;
memmove(v16 + 1, v16, (char *)(v20 - 1) - (char *)v16);
*v16 = v4;
}
if ( v9 && *(_DWORD *)v9 == 1819239275 && *(_DWORD *)(v9 + 4) == GetCurrentThreadId() )
{
v21 = (*(_DWORD *)(v24 + 8))-- == 1;
if ( v21 )
*(_DWORD *)(v9 + 4) = -1;
LeaveCriticalSection((LPCRITICAL_SECTION)(v24 + 16));
}
v22 = byte_14209E2CE;
byte_14209E2CE = 1;
if ( !v22 && hWnd )
PostMessageW((HWND)hWnd, 0x9017u, 0i64, 0i64);
v23 = 1;
goto LABEL_50;
}
}
if ( v9 && *(_DWORD *)v9 == 1819239275 && *(_DWORD *)(v9 + 4) == GetCurrentThreadId() )
{
v21 = (*(_DWORD *)(v24 + 8))-- == 1;
if ( v21 )
*(_DWORD *)(v9 + 4) = -1;
LeaveCriticalSection((LPCRITICAL_SECTION)(v24 + 16));
}
}
v23 = 0;
LABEL_50:
if ( Block )
sub_140AF4C30(Block);
return v23;
}
// attributes: thunk
__int64 __fastcall sub_140723AA0()
{
return sub_140723890();
}
void sub_140723890()
{
__int64 v0; // rax
__int64 v1; // rax
__int64 v2; // rax
char *v3; // rdx
_DWORD *v4; // rcx
_DWORD *v5; // rcx
_DWORD *v6; // rcx
_DWORD *v7; // rcx
_DWORD *v8; // rcx
_DWORD *v9; // rcx
_DWORD *v10; // rcx
_DWORD *v11; // rax
void *Block; // [rsp+30h] [rbp-69h] BYREF
void *v13; // [rsp+38h] [rbp-61h]
void *v14[2]; // [rsp+40h] [rbp-59h] BYREF
void *v15; // [rsp+50h] [rbp-49h] BYREF
void *v16; // [rsp+58h] [rbp-41h]
void *v17; // [rsp+60h] [rbp-39h] BYREF
void *v18; // [rsp+68h] [rbp-31h]
char v19[56]; // [rsp+70h] [rbp-29h] BYREF
char *v20; // [rsp+A8h] [rbp+Fh]
char v21[56]; // [rsp+B0h] [rbp+17h] BYREF
__int64 v22; // [rsp+E8h] [rbp+4Fh]
v0 = sub_140B09C00(458752023i64);
sub_140AE2540(&v17, v0);
v1 = sub_140B09C00(458752024i64);
sub_140AE2540(&v15, v1);
v20 = 0i64;
*(_OWORD *)v14 = 0i64;
v2 = sub_140B09C00(1572012035i64);
sub_140AE2540(&Block, v2);
v22 = 0i64;
if ( v20 )
v22 = (**(__int64 (__fastcall ***)(char *, char *))v20)(v20, v21);
sub_140B75280((unsigned int)&v17, (unsigned int)&v15, (unsigned int)&Block, (unsigned int)v14, 0i64, (__int64)v21);
if ( v20 )
{
v3 = v19;
LOBYTE(v3) = v20 != v19;
(*(void (__fastcall **)(char *, char *))(*(_QWORD *)v20 + 32i64))(v20, v3);
v20 = 0i64;
}
v4 = Block;
if ( Block && _InterlockedExchangeAdd((volatile signed __int32 *)Block + 2, 0xFFFFFFFF) == 1 )
{
v4[2] = -1000000000;
j_free_1(Block);
}
v5 = v13;
if ( v13 && _InterlockedExchangeAdd((volatile signed __int32 *)v13 + 2, 0xFFFFFFFF) == 1 )
{
v5[2] = -1000000000;
j_free_1(v13);
}
v6 = v14[0];
if ( v14[0] && _InterlockedExchangeAdd((volatile signed __int32 *)v14[0] + 2, 0xFFFFFFFF) == 1 )
{
v6[2] = -1000000000;
j_free_1(v14[0]);
}
v7 = v14[1];
if ( v14[1] && _InterlockedExchangeAdd((volatile signed __int32 *)v14[1] + 2, 0xFFFFFFFF) == 1 )
{
v7[2] = -1000000000;
j_free_1(v14[1]);
}
v8 = v15;
if ( v15 && _InterlockedExchangeAdd((volatile signed __int32 *)v15 + 2, 0xFFFFFFFF) == 1 )
{
v8[2] = -1000000000;
j_free_1(v15);
}
v9 = v16;
if ( v16 && _InterlockedExchangeAdd((volatile signed __int32 *)v16 + 2, 0xFFFFFFFF) == 1 )
{
v9[2] = -1000000000;
j_free_1(v16);
}
v10 = v17;
if ( v17 && _InterlockedExchangeAdd((volatile signed __int32 *)v17 + 2, 0xFFFFFFFF) == 1 )
{
v10[2] = -1000000000;
j_free_1(v17);
}
v11 = v18;
if ( v18 )
{
if ( _InterlockedExchangeAdd((volatile signed __int32 *)v18 + 2, 0xFFFFFFFF) == 1 )
{
v11[2] = -1000000000;
j_free_1(v18);
}
}
}
from ipatool.
did you manage to download old version ipa? or do you know any other way to download them?
from ipatool.
did you manage to download old version ipa? or do you know any other way to download them?
Yes, you can follow the directions listed here https://github.com/NyaMisty/ipatool-py#download-old-version
from ipatool.
Related Issues (20)
- .IPA not opening after being installed HOT 1
- crashes Windows HOT 1
- Expose cobra command functions HOT 2
- ERR error="license is required" success=false HOT 1
- error download ipatool HOT 1
- (HELP) I am to dumb to get it working HOT 9
- (ERROR) this software couldnt run on your device HOT 1
- I cannot type a passphrase HOT 1
- log something when purchasing an app
- Cannot use -purchase command HOT 4
- Purchase succeeds, download fails HOT 2
- --device-family flag removed ? HOT 1
- I use windows HOT 3
- errors everywhere HOT 1
- How to run ipatool in crontab / cronjob?
- Search doesnt find specific app HOT 2
- Every command will get keychain error on Ubuntu 22.04 HOT 3
- visionOS support
- Cannot create an item in a locked collection
- Resume interrupted download HOT 1
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
D3
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
-
Recommend Topics
-
javascript
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
-
web
Some thing interesting about web. New door for the world.
-
server
A server is a program made to process requests and deliver data to clients.
-
Machine learning
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ❤️ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.
from ipatool.