File 8base_80736669542d3727c77ccda1589f9d7c17568a1d97d98ffae84afbbbf081be67.elf
Function:
    004062b0
    004062b0thpool_wait:
    004062b0stp x29, x30, [sp-32]!
    004062b4add x29, sp, 0
    004062b8str x0, [sp+24]
    004062bcldr x0, [sp+24]
    004062c0add x0, x0, 16
    004062c4bl pthread_mutex_lock@plt
    004062c8b 0x4062e8
    004062cc
    004062ccloc_4062cc:
    004062ccldr x0, [sp+24]
    004062d0add x2, x0, 64
    004062d4ldr x0, [sp+24]
    004062d8add x0, x0, 16
    004062dcmov x1, x0
    004062e0mov x0, x2
    004062e4bl pthread_cond_wait@plt
    004062e8
    004062e8loc_4062e8:
    004062e8ldr x0, [sp+24]
    004062ecldr w0, [x0+184]
    004062f0subs wzr, w0, 0
    004062f4b.ne 0x4062cc
    004062f8ldr x0, [sp+24]
    004062fcldr w0, [x0+12]
    00406300subs wzr, w0, 0
    00406304b.ne 0x4062cc
    00406308ldr x0, [sp+24]
    0040630cadd x0, x0, 16
    00406310bl pthread_mutex_unlock@plt
    00406314hint
    00406318ldp x29, x30, [sp], 32
    0040631cret x30
    004062b0
    00406320
    00406320thpool_destroy:
    00406320stp x29, x30, [sp-80]!
    00406324add x29, sp, 0
    00406328str x0, [sp+24]
    0040632cldr x0, [sp+24]
    00406330subs xzr, x0, 0
    00406334b.eq 0x40643c
    00406338ldr x0, [sp+24]
    0040633cldr w0, [x0+8]
    00406340str w0, [sp+52]
    00406344adrp x0, 0x14000
    00406348add x0, x0, 688
    0040634cstr wzr, [x0]
    00406350fmov d0
    00406354str d0, [sp+56]
    00406358str xzr, [sp+72]
    0040635cadd x0, sp, 40
    00406360bl time@plt
    00406364b 0x40638c
    00406368
    00406368loc_406368:
    00406368ldr x0, [sp+24]
    0040636cldr x0, [x0+176]
    00406370bl bsem_post_all
    00406374add x0, sp, 32
    00406378bl time@plt
    0040637cldr x0, [sp+32]
    00406380ldr x1, [sp+40]
    00406384bl difftime@plt
    00406388str d0, [sp+72]
    0040638c
    0040638cloc_40638c:
    0040638cldr d1, [sp+72]
    00406390ldr d0, [sp+56]
    00406394fcmpe d1, d0
    00406398b.mi 0x4063a0
    0040639cb 0x4063b0
    004063a0
    004063a0loc_4063a0:
    004063a0ldr x0, [sp+24]
    004063a4ldr w0, [x0+8]
    004063a8subs wzr, w0, 0
    004063acb.ne 0x406368
    004063b0
    004063b0loc_4063b0:
    004063b0b 0x4063c8
    004063b4
    004063b4loc_4063b4:
    004063b4ldr x0, [sp+24]
    004063b8ldr x0, [x0+176]
    004063bcbl bsem_post_all
    004063c0movz w0, 1
    004063c4bl sleep@plt
    004063c8
    004063c8loc_4063c8:
    004063c8ldr x0, [sp+24]
    004063ccldr w0, [x0+8]
    004063d0subs wzr, w0, 0
    004063d4b.ne 0x4063b4
    004063d8ldr x0, [sp+24]
    004063dcadd x0, x0, 112
    004063e0bl jobqueue_destroy
    004063e4str wzr, [sp+68]
    004063e8b 0x406414
    004063ec
    004063ecloc_4063ec:
    004063ecldr x0, [sp+24]
    004063f0ldr x1, [x0]
    004063f4ldrsw x0, [sp+68]
    004063f8ubfm x0, x0, 61, 60
    004063fcadd x0, x1, x0
    00406400ldr x0, [x0]
    00406404bl thread_destroy
    00406408ldr w0, [sp+68]
    0040640cadd w0, w0, 1
    00406410str w0, [sp+68]
    00406414
    00406414loc_406414:
    00406414ldr w0, [sp+52]
    00406418ldr w1, [sp+68]
    0040641csubs wzr, w1, w0
    00406420b.lt 0x4063ec
    00406424ldr x0, [sp+24]
    00406428ldr x0, [x0]
    0040642cbl free@plt
    00406430ldr x0, [sp+24]
    00406434bl free@plt
    00406438b 0x406440
    0040643c
    0040643cloc_40643c:
    0040643chint
    00406440
    00406440loc_406440:
    00406440ldp x29, x30, [sp], 80
    00406444ret x30
    00406320
    00406448
    00406448thpool_pause:
    00406448stp x29, x30, [sp-48]!
    0040644cadd x29, sp, 0
    00406450str x0, [sp+24]
    00406454str wzr, [sp+44]
    00406458b 0x40648c
    0040645c
    0040645cloc_40645c:
    0040645cldr x0, [sp+24]
    00406460ldr x1, [x0]
    00406464ldrsw x0, [sp+44]
    00406468ubfm x0, x0, 61, 60
    0040646cadd x0, x1, x0
    00406470ldr x0, [x0]
    00406474ldr x0, [x0+8]
    00406478movz w1, 10
    0040647cbl pthread_kill@plt
    00406480ldr w0, [sp+44]
    00406484add w0, w0, 1
    00406488str w0, [sp+44]
    0040648c
    0040648cloc_40648c:
    0040648cldr x0, [sp+24]
    00406490ldr w0, [x0+8]
    00406494ldr w1, [sp+44]
    00406498subs wzr, w1, w0
    0040649cb.lt 0x40645c
    004064a0hint
    004064a4hint
    004064a8ldp x29, x30, [sp], 48
    004064acret x30
    00406448
    004064b0
    004064b0thpool_resume:
    004064b0sub sp, sp, 16
    004064b4str x0, [sp+8]
    004064b8adrp x0, 0x14000
    004064bcadd x0, x0, 692
    004064c0str wzr, [x0]
    004064c4hint
    004064c8add sp, sp, 16
    004064ccret x30
    004064b0
    004064d0
    004064d0thpool_num_threads_working:
    004064d0sub sp, sp, 16
    004064d4str x0, [sp+8]
    004064d8ldr x0, [sp+8]
    004064dcldr w0, [x0+12]
    004064e0add sp, sp, 16
    004064e4ret x30
    004064d0
    004064e8
    004064e8thread_init:
    004064e8stp x29, x30, [sp-48]!
    004064ecadd x29, sp, 0
    004064f0str x0, [sp+40]
    004064f4str x1, [sp+32]
    004064f8str w2, [sp+28]
    004064fcmovz x0, 24
    00406500bl malloc@plt
    00406504mov x1, x0
    00406508ldr x0, [sp+32]
    0040650cstr x1, [x0]
    00406510ldr x0, [sp+32]
    00406514ldr x0, [x0]
    00406518subs xzr, x0, 0
    0040651cb.ne 0x40654c
    00406520adrp x0, 0x14000
    00406524add x0, x0, 648
    00406528ldr x0, [x0]
    0040652cmov x3, x0
    00406530movz x2, 52
    00406534movz x1, 1
    00406538adrp x0, 8192
    0040653cadd x0, x0, 56
    00406540bl fwrite@plt
    00406544movn w0, 0
    00406548b 0x4065ac
    0040654c
    0040654cloc_40654c:
    0040654cldr x0, [sp+32]
    00406550ldr x0, [x0]
    00406554ldr x1, [sp+40]
    00406558str x1, [x0+16]
    0040655cldr x0, [sp+32]
    00406560ldr x0, [x0]
    00406564ldr w1, [sp+28]
    00406568str w1, [x0]
    0040656cldr x0, [sp+32]
    00406570ldr x0, [x0]
    00406574add x4, x0, 8
    00406578ldr x0, [sp+32]
    0040657cldr x0, [x0]
    00406580mov x3, x0
    00406584adrp x0, 0
    00406588add x2, x0, 1536
    0040658cmovz x1, 0
    00406590mov x0, x4
    00406594bl pthread_create@plt
    00406598ldr x0, [sp+32]
    0040659cldr x0, [x0]
    004065a0ldr x0, [x0+8]
    004065a4bl pthread_detach@plt
    004065a8movz w0, 0
    004065ac
    004065acloc_4065ac:
    004065acldp x29, x30, [sp], 48
    004065b0ret x30
    004064e8
    004065b4
    004065b4thread_hold:
    004065b4stp x29, x30, [sp-32]!
    004065b8add x29, sp, 0
    004065bcstr w0, [sp+28]
    004065c0adrp x0, 0x14000
    004065c4add x0, x0, 692
    004065c8movz w1, 1
    004065ccstr w1, [x0]
    004065d0b 0x4065dc
    004065d4
    004065d4loc_4065d4:
    004065d4movz w0, 1
    004065d8bl sleep@plt
    004065dc
    004065dcloc_4065dc:
    004065dcadrp x0, 0x14000
    004065e0add x0, x0, 692
    004065e4ldr w0, [x0]
    004065e8subs wzr, w0, 0
    004065ecb.ne 0x4065d4
    004065f0hint
    004065f4hint
    004065f8ldp x29, x30, [sp], 32
    004065fcret x30
    004065b4
    00406600
    00406600thread_do:
    00406600stp x29, x30, [sp-256]!
    00406604add x29, sp, 0
    00406608str x0, [sp+24]
    0040660cstp xzr, xzr, [sp+192]
    00406610stp xzr, xzr, [sp+208]
    00406614ldr x0, [sp+24]
    00406618ldr w0, [x0]
    0040661cadd x4, sp, 192
    00406620mov w3, w0
    00406624adrp x0, 8192
    00406628add x2, x0, 112
    0040662cmovz x1, 32
    00406630mov x0, x4
    00406634bl snprintf@plt
    00406638add x0, sp, 192
    0040663cmov x1, x0
    00406640movz w0, 15
    00406644bl prctl@plt
    00406648ldr x0, [sp+24]
    0040664cldr x0, [x0+16]
    00406650str x0, [sp+248]
    00406654add x0, sp, 40
    00406658add x0, x0, 8
    0040665cbl sigemptyset@plt
    00406660str wzr, [sp+176]
    00406664adrp x0, 0
    00406668add x0, x0, 1460
    0040666cstr x0, [sp+40]
    00406670add x0, sp, 40
    00406674movz x2, 0
    00406678mov x1, x0
    0040667cmovz w0, 10
    00406680bl sigaction@plt
    00406684adds wzr, w0, 1
    00406688b.ne 0x4066b0
    0040668cadrp x0, 0x14000
    00406690add x0, x0, 648
    00406694ldr x0, [x0]
    00406698mov x3, x0
    0040669cmovz x2, 34
    004066a0movz x1, 1
    004066a4adrp x0, 8192
    004066a8add x0, x0, 128
    004066acbl fwrite@plt
    004066b0
    004066b0loc_4066b0:
    004066b0ldr x0, [sp+248]
    004066b4add x0, x0, 16
    004066b8bl pthread_mutex_lock@plt
    004066bcldr x0, [sp+248]
    004066c0ldr w0, [x0+8]
    004066c4add w1, w0, 1
    004066c8ldr x0, [sp+248]
    004066ccstr w1, [x0+8]
    004066d0ldr x0, [sp+248]
    004066d4add x0, x0, 16
    004066d8bl pthread_mutex_unlock@plt
    004066dcb 0x4067bc
    004066e0
    004066e0loc_4066e0:
    004066e0ldr x0, [sp+248]
    004066e4ldr x0, [x0+176]
    004066e8bl bsem_wait
    004066ecadrp x0, 0x14000
    004066f0add x0, x0, 688
    004066f4ldr w0, [x0]
    004066f8subs wzr, w0, 0
    004066fcb.eq 0x4067bc
    00406700ldr x0, [sp+248]
    00406704add x0, x0, 16
    00406708bl pthread_mutex_lock@plt
    0040670cldr x0, [sp+248]
    00406710ldr w0, [x0+12]
    00406714add w1, w0, 1
    00406718ldr x0, [sp+248]
    0040671cstr w1, [x0+12]
    00406720ldr x0, [sp+248]
    00406724add x0, x0, 16
    00406728bl pthread_mutex_unlock@plt
    0040672cldr x0, [sp+248]
    00406730add x0, x0, 112
    00406734bl jobqueue_pull
    00406738str x0, [sp+240]
    0040673cldr x0, [sp+240]
    00406740subs xzr, x0, 0
    00406744b.eq 0x406774
    00406748ldr x0, [sp+240]
    0040674cldr x0, [x0+8]
    00406750str x0, [sp+232]
    00406754ldr x0, [sp+240]
    00406758ldr x0, [x0+16]
    0040675cstr x0, [sp+224]
    00406760ldr x1, [sp+232]
    00406764ldr x0, [sp+224]
    00406768blr x1
    0040676cldr x0, [sp+240]
    00406770bl free@plt
    00406774
    00406774loc_406774:
    00406774ldr x0, [sp+248]
    00406778add x0, x0, 16
    0040677cbl pthread_mutex_lock@plt
    00406780ldr x0, [sp+248]
    00406784ldr w0, [x0+12]
    00406788sub w1, w0, 1
    0040678cldr x0, [sp+248]
    00406790str w1, [x0+12]
    00406794ldr x0, [sp+248]
    00406798ldr w0, [x0+12]
    0040679csubs wzr, w0, 0
    004067a0b.ne 0x4067b0
    004067a4ldr x0, [sp+248]
    004067a8add x0, x0, 64
    004067acbl pthread_cond_signal@plt
    004067b0
    004067b0loc_4067b0:
    004067b0ldr x0, [sp+248]
    004067b4add x0, x0, 16
    004067b8bl pthread_mutex_unlock@plt
    004067bc
    004067bcloc_4067bc:
    004067bcadrp x0, 0x14000
    004067c0add x0, x0, 688
    004067c4ldr w0, [x0]
    004067c8subs wzr, w0, 0
    004067ccb.ne 0x4066e0
    004067d0ldr x0, [sp+248]
    004067d4add x0, x0, 16
    004067d8bl pthread_mutex_lock@plt
    004067dcldr x0, [sp+248]
    004067e0ldr w0, [x0+8]
    004067e4sub w1, w0, 1
    004067e8ldr x0, [sp+248]
    004067ecstr w1, [x0+8]
    004067f0ldr x0, [sp+248]
    004067f4add x0, x0, 16
    004067f8bl pthread_mutex_unlock@plt
    004067fcmovz x0, 0
    00406800ldp x29, x30, [sp], 256
    00406804ret x30
    00406600
    00406808
    00406808thread_destroy:
    00406808stp x29, x30, [sp-32]!
    0040680cadd x29, sp, 0
    00406810str x0, [sp+24]
    00406814ldr x0, [sp+24]
    00406818bl free@plt
    0040681chint
    00406820ldp x29, x30, [sp], 32
    00406824ret x30
    00406808
    00406828
    00406828jobqueue_init:
    00406828stp x29, x30, [sp-32]!
    0040682cadd x29, sp, 0
    00406830str x0, [sp+24]
    00406834ldr x0, [sp+24]
    00406838str wzr, [x0+72]
    0040683cldr x0, [sp+24]
    00406840str xzr, [x0+48]
    00406844ldr x0, [sp+24]
    00406848str xzr, [x0+56]
    0040684cmovz x0, 104
    00406850bl malloc@plt
    00406854mov x1, x0
    00406858ldr x0, [sp+24]
    0040685cstr x1, [x0+64]
    00406860ldr x0, [sp+24]
    00406864ldr x0, [x0+64]
    00406868subs xzr, x0, 0
    0040686cb.ne 0x406878
    00406870movn w0, 0
    00406874b 0x406898
    00406878
    00406878loc_406878:
    00406878ldr x0, [sp+24]
    0040687cmovz x1, 0
    00406880bl pthread_mutex_init@plt
    00406884ldr x0, [sp+24]
    00406888ldr x0, [x0+64]
    0040688cmovz w1, 0
    00406890bl bsem_init
    00406894movz w0, 0
    00406898
    00406898loc_406898:
    00406898ldp x29, x30, [sp], 32
    0040689cret x30
    00406828
    004068a0
    004068a0jobqueue_clear:
    004068a0stp x29, x30, [sp-32]!
    004068a4add x29, sp, 0
    004068a8str x0, [sp+24]
    004068acb 0x4068bc
    004068b0
    004068b0loc_4068b0:
    004068b0ldr x0, [sp+24]
    004068b4bl jobqueue_pull
    004068b8bl free@plt
    004068bc
    004068bcloc_4068bc:
    004068bcldr x0, [sp+24]
    004068c0ldr w0, [x0+72]
    004068c4subs wzr, w0, 0
    004068c8b.ne 0x4068b0
    004068ccldr x0, [sp+24]
    004068d0str xzr, [x0+48]
    004068d4ldr x0, [sp+24]
    004068d8str xzr, [x0+56]
    004068dcldr x0, [sp+24]
    004068e0ldr x0, [x0+64]
    004068e4bl bsem_reset
    004068e8ldr x0, [sp+24]
    004068ecstr wzr, [x0+72]
    004068f0hint
    004068f4ldp x29, x30, [sp], 32
    004068f8ret x30
    004068a0
    004068fc
    004068fcjobqueue_push:
    004068fcstp x29, x30, [sp-32]!
    00406900add x29, sp, 0
    00406904str x0, [sp+24]
    00406908str x1, [sp+16]
    0040690cldr x0, [sp+24]
    00406910bl pthread_mutex_lock@plt
    00406914ldr x0, [sp+16]
    00406918str xzr, [x0]
    0040691cldr x0, [sp+24]
    00406920ldr w0, [x0+72]
    00406924subs wzr, w0, 0
    00406928b.ne 0x406948
    0040692cldr x0, [sp+24]
    00406930ldr x1, [sp+16]
    00406934str x1, [x0+48]
    00406938ldr x0, [sp+24]
    0040693cldr x1, [sp+16]
    00406940str x1, [x0+56]
    00406944b 0x406964
    00406948
    00406948loc_406948:
    00406948ldr x0, [sp+24]
    0040694cldr x0, [x0+56]
    00406950ldr x1, [sp+16]
    00406954str x1, [x0]
    00406958ldr x0, [sp+24]
    0040695cldr x1, [sp+16]
    00406960str x1, [x0+56]
    00406964
    00406964loc_406964:
    00406964ldr x0, [sp+24]
    00406968ldr w0, [x0+72]
    0040696cadd w1, w0, 1
    00406970ldr x0, [sp+24]
    00406974str w1, [x0+72]
    00406978ldr x0, [sp+24]
    0040697cldr x0, [x0+64]
    00406980bl bsem_post
    00406984ldr x0, [sp+24]
    00406988bl pthread_mutex_unlock@plt
    0040698chint
    00406990ldp x29, x30, [sp], 32
    00406994ret x30
    004068fc
    00406998
    00406998jobqueue_pull:
    00406998stp x29, x30, [sp-48]!
    0040699cadd x29, sp, 0
    004069a0str x0, [sp+24]
    004069a4ldr x0, [sp+24]
    004069a8bl pthread_mutex_lock@plt
    004069acldr x0, [sp+24]
    004069b0ldr x0, [x0+48]
    004069b4str x0, [sp+40]
    004069b8ldr x0, [sp+24]
    004069bcldr w0, [x0+72]
    004069c0subs wzr, w0, 0
    004069c4b.eq 0x406a20
    004069c8subs wzr, w0, 1
    004069ccb.ne 0x4069ec
    004069d0ldr x0, [sp+24]
    004069d4str xzr, [x0+48]
    004069d8ldr x0, [sp+24]
    004069dcstr xzr, [x0+56]
    004069e0ldr x0, [sp+24]
    004069e4str wzr, [x0+72]
    004069e8b 0x406a24
    004069ec
    004069ecloc_4069ec:
    004069ecldr x0, [sp+40]
    004069f0ldr x1, [x0]
    004069f4ldr x0, [sp+24]
    004069f8str x1, [x0+48]
    004069fcldr x0, [sp+24]
    00406a00ldr w0, [x0+72]
    00406a04sub w1, w0, 1
    00406a08ldr x0, [sp+24]
    00406a0cstr w1, [x0+72]
    00406a10ldr x0, [sp+24]
    00406a14ldr x0, [x0+64]
    00406a18bl bsem_post
    00406a1cb 0x406a24
    00406a20
    00406a20loc_406a20:
    00406a20hint
    00406a24
    00406a24loc_406a24:
    00406a24ldr x0, [sp+24]
    00406a28bl pthread_mutex_unlock@plt
    00406a2cldr x0, [sp+40]
    00406a30ldp x29, x30, [sp], 48
    00406a34ret x30
    00406998
    00406a38
    00406a38jobqueue_destroy:
    00406a38stp x29, x30, [sp-32]!
    00406a3cadd x29, sp, 0
    00406a40str x0, [sp+24]
    00406a44ldr x0, [sp+24]
    00406a48bl jobqueue_clear
    00406a4cldr x0, [sp+24]
    00406a50ldr x0, [x0+64]
    00406a54bl free@plt
    00406a58hint
    00406a5cldp x29, x30, [sp], 32
    00406a60ret x30
    00406a38
    00406a64
    00406a64bsem_init:
    00406a64stp x29, x30, [sp-32]!
    00406a68add x29, sp, 0
    00406a6cstr x0, [sp+24]
    00406a70str w1, [sp+20]
    00406a74ldr w0, [sp+20]
    00406a78subs wzr, w0, 0
    00406a7cb.lt 0x406a8c
    00406a80ldr w0, [sp+20]
    00406a84subs wzr, w0, 1
    00406a88b.le 0x406ab8
    00406a8c
    00406a8cloc_406a8c:
    00406a8cadrp x0, 0x14000
    00406a90add x0, x0, 648
    00406a94ldr x0, [x0]
    00406a98mov x3, x0
    00406a9cmovz x2, 57
    00406aa0movz x1, 1
    00406aa4adrp x0, 8192
    00406aa8add x0, x0, 168
    00406aacbl fwrite@plt
    00406ab0movz w0, 1
    00406ab4bl exit@plt
    00406ab8
    00406ab8loc_406ab8:
    00406ab8ldr x0, [sp+24]
    00406abcmovz x1, 0
    00406ac0bl pthread_mutex_init@plt
    00406ac4ldr x0, [sp+24]
    00406ac8add x0, x0, 48
    00406accmovz x1, 0
    00406ad0bl pthread_cond_init@plt
    00406ad4ldr x0, [sp+24]
    00406ad8ldr w1, [sp+20]
    00406adcstr w1, [x0+96]
    00406ae0hint
    00406ae4ldp x29, x30, [sp], 32
    00406ae8ret x30
    00406a64
    00406aec
    00406aecbsem_reset:
    00406aecstp x29, x30, [sp-32]!
    00406af0add x29, sp, 0
    00406af4str x0, [sp+24]
    00406af8movz w1, 0
    00406afcldr x0, [sp+24]
    00406b00bl bsem_init
    00406b04hint
    00406b08ldp x29, x30, [sp], 32
    00406b0cret x30
    00406aec
    00406b10
    00406b10bsem_post:
    00406b10stp x29, x30, [sp-32]!
    00406b14add x29, sp, 0
    00406b18str x0, [sp+24]
    00406b1cldr x0, [sp+24]
    00406b20bl pthread_mutex_lock@plt
    00406b24ldr x0, [sp+24]
    00406b28movz w1, 1
    00406b2cstr w1, [x0+96]
    00406b30ldr x0, [sp+24]
    00406b34add x0, x0, 48
    00406b38bl pthread_cond_signal@plt
    00406b3cldr x0, [sp+24]
    00406b40bl pthread_mutex_unlock@plt
    00406b44hint
    00406b48ldp x29, x30, [sp], 32
    00406b4cret x30
    00406b10
    00406b50
    00406b50bsem_post_all:
    00406b50stp x29, x30, [sp-32]!
    00406b54add x29, sp, 0
    00406b58str x0, [sp+24]
    00406b5cldr x0, [sp+24]
    00406b60bl pthread_mutex_lock@plt
    00406b64ldr x0, [sp+24]
    00406b68movz w1, 1
    00406b6cstr w1, [x0+96]
    00406b70ldr x0, [sp+24]
    00406b74add x0, x0, 48
    00406b78bl pthread_cond_broadcast@plt
    00406b7cldr x0, [sp+24]
    00406b80bl pthread_mutex_unlock@plt
    00406b84hint
    00406b88ldp x29, x30, [sp], 32
    00406b8cret x30
    00406b50
    00406b90
    00406b90bsem_wait:
    00406b90stp x29, x30, [sp-32]!
    00406b94add x29, sp, 0
    00406b98str x0, [sp+24]
    00406b9cldr x0, [sp+24]
    00406ba0bl pthread_mutex_lock@plt
    00406ba4b 0x406bb8
    00406ba8
    00406ba8loc_406ba8:
    00406ba8ldr x0, [sp+24]
    00406bacadd x0, x0, 48
    00406bb0ldr x1, [sp+24]
    00406bb4bl pthread_cond_wait@plt
    00406bb8
    00406bb8loc_406bb8:
    00406bb8ldr x0, [sp+24]
    00406bbcldr w0, [x0+96]
    00406bc0subs wzr, w0, 1
    00406bc4b.ne 0x406ba8
    00406bc8ldr x0, [sp+24]
    00406bccstr wzr, [x0+96]
    00406bd0ldr x0, [sp+24]
    00406bd4bl pthread_mutex_unlock@plt
    00406bd8hint
    00406bdcldp x29, x30, [sp], 32
    00406be0ret x30
    00406b90
    00406be4
    00406be4copy_path:
    00406be4stp x29, x30, [sp-48]!
    00406be8add x29, sp, 0
    00406becstr x0, [sp+24]
    00406bf0ldr x0, [sp+24]
    00406bf4bl strlen@plt
    00406bf8add x0, x0, 1
    00406bfcbl malloc@plt
    00406c00str x0, [sp+40]
    00406c04ldr x0, [sp+40]
    00406c08subs xzr, x0, 0
    00406c0cb.ne 0x406c18
    00406c10movz x0, 0
    00406c14b 0x406c28
    00406c18
    00406c18loc_406c18:
    00406c18ldr x1, [sp+24]
    00406c1cldr x0, [sp+40]
    00406c20bl strcpy@plt
    00406c24ldr x0, [sp+40]
    00406c28
    00406c28loc_406c28:
    00406c28ldp x29, x30, [sp], 48
    00406c2cret x30
    00406be4
    00406c30
    00406c30file_write_message:
    00406c30stp x29, x30, [sp-64]!
    00406c34add x29, sp, 0
    00406c38str x0, [sp+40]
    00406c3cstr x1, [sp+32]
    00406c40str x2, [sp+24]
    00406c44str x3, [sp+16]
    00406c48movz x0, 4097
    00406c4cbl malloc@plt
    00406c50str x0, [sp+56]
    00406c54ldr x0, [sp+56]
    00406c58subs xzr, x0, 0
    00406c5cb.eq 0x406cec
    00406c60ldr x1, [sp+40]
    00406c64ldr x0, [sp+56]
    00406c68bl strcpy@plt
    00406c6cldr x0, [sp+56]
    00406c70bl strlen@plt
    00406c74mov x1, x0
    00406c78ldr x0, [sp+56]
    00406c7cadd x0, x0, x1
    00406c80movz w1, 47
    00406c84strh w1, [x0]
    00406c88ldr x1, [sp+32]
    00406c8cldr x0, [sp+56]
    00406c90bl strcat@plt
    00406c94ldr x1, [sp+16]
    00406c98ldr x0, [sp+56]
    00406c9cbl strcat@plt
    00406ca0adrp x0, 8192
    00406ca4add x1, x0, 552
    00406ca8ldr x0, [sp+56]
    00406cacbl fopen@plt
    00406cb0str x0, [sp+48]
    00406cb4ldr x0, [sp+48]
    00406cb8subs xzr, x0, 0
    00406cbcb.eq 0x406ce4
    00406cc0ldr x0, [sp+24]
    00406cc4bl strlen@plt
    00406cc8ldr x3, [sp+48]
    00406cccmov x2, x0
    00406cd0movz x1, 1
    00406cd4ldr x0, [sp+24]
    00406cd8bl fwrite@plt
    00406cdcldr x0, [sp+48]
    00406ce0bl fclose@plt
    00406ce4
    00406ce4loc_406ce4:
    00406ce4ldr x0, [sp+56]
    00406ce8bl free@plt
    00406cec
    00406cecloc_406cec:
    00406cechint
    00406cf0ldp x29, x30, [sp], 64
    00406cf4ret x30
    00406c30
    00406cf8
    00406cf8file_ext_get:
    00406cf8stp x29, x30, [sp-48]!
    00406cfcadd x29, sp, 0
    00406d00str x0, [sp+24]
    00406d04ldr x0, [sp+24]
    00406d08bl strlen@plt
    00406d0cmov x1, x0
    00406d10ldr x0, [sp+24]
    00406d14add x0, x0, x1
    00406d18str x0, [sp+40]
    00406d1c
    00406d1cloc_406d1c:
    00406d1cldr x0, [sp+40]
    00406d20sub x0, x0, 1
    00406d24str x0, [sp+40]
    00406d28ldr x0, [sp+40]
    00406d2cldrb w0, [x0]
    00406d30subs wzr, w0, 46
    00406d34b.eq 0x406d60
    00406d38ldr x1, [sp+40]
    00406d3cldr x0, [sp+24]
    00406d40subs xzr, x1, x0
    00406d44b.ls 0x406d58
    00406d48ldr x0, [sp+40]
    00406d4cldrb w0, [x0]
    00406d50subs wzr, w0, 47
    00406d54b.ne 0x406d1c
    00406d58
    00406d58loc_406d58:
    00406d58movz x0, 0
    00406d5cb 0x406d68
    00406d60
    00406d60loc_406d60:
    00406d60hint
    00406d64ldr x0, [sp+40]
    00406d68
    00406d68loc_406d68:
    00406d68ldp x29, x30, [sp], 48
    00406d6cret x30
    00406cf8
    00406d70
    00406d70file_ext_find:
    00406d70stp x29, x30, [sp-64]!
    00406d74add x29, sp, 0
    00406d78str x19, [sp+16]
    00406d7cstr x0, [sp+40]
    00406d80str x1, [sp+32]
    00406d84adrp x0, 0x14000
    00406d88add x0, x0, 536
    00406d8cldr x19, [x0]
    00406d90adrp x0, 0x14000
    00406d94add x0, x0, 536
    00406d98ldr x0, [x0]
    00406d9cbl strlen@plt
    00406da0mov x2, x0
    00406da4mov x1, x19
    00406da8ldr x0, [sp+40]
    00406dacbl strncmp@plt
    00406db0subs wzr, w0, 0
    00406db4b.ne 0x406dc0
    00406db8movz w0, 2
    00406dbcb 0x406e78
    00406dc0
    00406dc0loc_406dc0:
    00406dc0ldr x0, [sp+40]
    00406dc4bl file_ext_get
    00406dc8str x0, [sp+48]
    00406dccldr x0, [sp+48]
    00406dd0subs xzr, x0, 0
    00406dd4b.eq 0x406e74
    00406dd8adrp x0, 0x14000
    00406ddcadd x0, x0, 544
    00406de0ldr x0, [x0]
    00406de4mov x1, x0
    00406de8ldr x0, [sp+48]
    00406decbl strcmp@plt
    00406df0subs wzr, w0, 0
    00406df4b.ne 0x406e00
    00406df8movz w0, 2
    00406dfcb 0x406e78
    00406e00
    00406e00loc_406e00:
    00406e00adrp x0, 0x14000
    00406e04add x0, x0, 528
    00406e08ldr x0, [x0]
    00406e0cadd x0, x0, 1
    00406e10ldrb w0, [x0]
    00406e14subs wzr, w0, 42
    00406e18b.ne 0x406e24
    00406e1cmovz w0, 0
    00406e20b 0x406e78
    00406e24
    00406e24loc_406e24:
    00406e24str wzr, [sp+60]
    00406e28b 0x406e60
    00406e2c
    00406e2cloc_406e2c:
    00406e2cadrp x0, 0x14000
    00406e30add x0, x0, 528
    00406e34ldrsw x1, [sp+60]
    00406e38ldr x0, [x0+3*x1]
    00406e3cldr x1, [sp+48]
    00406e40bl strcasecmp@plt
    00406e44subs wzr, w0, 0
    00406e48b.ne 0x406e54
    00406e4cmovz w0, 0
    00406e50b 0x406e78
    00406e54
    00406e54loc_406e54:
    00406e54ldr w0, [sp+60]
    00406e58add w0, w0, 1
    00406e5cstr w0, [sp+60]
    00406e60
    00406e60loc_406e60:
    00406e60ldr w0, [sp+60]
    00406e64subs wzr, w0, 0
    00406e68b.eq 0x406e2c
    00406e6cmovz w0, 2
    00406e70b 0x406e78
    00406e74
    00406e74loc_406e74:
    00406e74movz w0, 1
    00406e78
    00406e78loc_406e78:
    00406e78ldr x19, [sp+16]
    00406e7cldp x29, x30, [sp], 64
    00406e80ret x30
    00406d70
    00406e84
    00406e84file_rename:
    00406e84stp x29, x30, [sp-64]!
    00406e88add x29, sp, 0
    00406e8cstr x19, [sp+16]
    00406e90str x0, [sp+40]
    00406e94str xzr, [sp+56]
    00406e98ldr x0, [sp+40]
    00406e9cbl strlen@plt
    00406ea0mov x19, x0
    00406ea4adrp x0, 0x14000
    00406ea8add x0, x0, 544
    00406eacldr x0, [x0]
    00406eb0bl strlen@plt
    00406eb4add x0, x19, x0
    00406eb8add x0, x0, 1
    00406ebcbl malloc@plt
    00406ec0str x0, [sp+56]
    00406ec4ldr x0, [sp+56]
    00406ec8subs xzr, x0, 0
    00406eccb.eq 0x406f08
    00406ed0ldr x1, [sp+40]
    00406ed4ldr x0, [sp+56]
    00406ed8bl strcpy@plt
    00406edcadrp x0, 0x14000
    00406ee0add x0, x0, 544
    00406ee4ldr x0, [x0]
    00406ee8mov x1, x0
    00406eecldr x0, [sp+56]
    00406ef0bl strcat@plt
    00406ef4ldr x1, [sp+56]
    00406ef8ldr x0, [sp+40]
    00406efcbl rename@plt
    00406f00ldr x0, [sp+40]
    00406f04bl free@plt
    00406f08
    00406f08loc_406f08:
    00406f08ldr x0, [sp+56]
    00406f0cldr x19, [sp+16]
    00406f10ldp x29, x30, [sp], 64
    00406f14ret x30
    00406e84
    00406f18
    00406f18file_get_meta_data:
    00406f18stp x29, x30, [sp-208]!
    00406f1cadd x29, sp, 0
    00406f20str x0, [sp+40]
    00406f24str x1, [sp+32]
    00406f28str w2, [sp+28]
    00406f2cmovz w0, 1
    00406f30str w0, [sp+204]
    00406f34str xzr, [sp+192]
    00406f38add x0, sp, 56
    00406f3cmov x1, x0
    00406f40ldr x0, [sp+40]
    00406f44bl stat@plt
    00406f48subs wzr, w0, 0
    00406f4cb.ne 0x407008
    00406f50ldr x0, [sp+104]
    00406f54subs xzr, x0, 35
    00406f58b.ls 0x407008
    00406f5cadrp x0, 8192
    00406f60add x1, x0, 560
    00406f64ldr x0, [sp+40]
    00406f68bl fopen@plt
    00406f6cstr x0, [sp+184]
    00406f70ldr x0, [sp+184]
    00406f74subs xzr, x0, 0
    00406f78b.eq 0x407008
    00406f7cmovz w2, 2
    00406f80movn x1, 35
    00406f84ldr x0, [sp+184]
    00406f88bl fseek@plt
    00406f8csubs wzr, w0, 0
    00406f90b.ne 0x406fd4
    00406f94ldr x3, [sp+184]
    00406f98movz x2, 36
    00406f9cmovz x1, 1
    00406fa0ldr x0, [sp+32]
    00406fa4bl fread@plt
    00406fa8str x0, [sp+192]
    00406facldr x0, [sp+192]
    00406fb0subs xzr, x0, 36
    00406fb4b.ne 0x406fd4
    00406fb8ldr x0, [sp+32]
    00406fbcldr w1, [x0+32]
    00406fc0movz w0, 50198
    00406fc4movk w0, 0x6c890000
    00406fc8subs wzr, w1, w0
    00406fccb.ne 0x406fd4
    00406fd0str wzr, [sp+204]
    00406fd4
    00406fd4loc_406fd4:
    00406fd4ldr x0, [sp+184]
    00406fd8bl fclose@plt
    00406fdcldr w0, [sp+28]
    00406fe0subs wzr, w0, 0
    00406fe4b.eq 0x407008
    00406fe8ldr w0, [sp+204]
    00406fecsubs wzr, w0, 0
    00406ff0b.ne 0x407008
    00406ff4ldr x0, [sp+104]
    00406ff8sub x0, x0, 36
    00406ffcmov x1, x0
    00407000ldr x0, [sp+40]
    00407004bl truncate@plt
    00407008
    00407008loc_407008:
    00407008ldr w0, [sp+204]
    0040700cldp x29, x30, [sp], 208
    00407010ret x30
    00406f18
    00407014
    00407014file_process:
    00407014stp x29, x30, [sp-336]!
    00407018add x29, sp, 0
    0040701cstr x0, [sp+24]
    00407020str xzr, [sp+320]
    00407024str xzr, [sp+328]
    00407028add x0, sp, 136
    0040702cmovz w2, 0
    00407030mov x1, x0
    00407034ldr x0, [sp+24]
    00407038bl file_get_meta_data
    0040703csubs wzr, w0, 0
    00407040b.eq 0x4071c8
    00407044add x0, sp, 176
    00407048mov x1, x0
    0040704cldr x0, [sp+24]
    00407050bl stat@plt
    00407054subs wzr, w0, 0
    00407058b.ne 0x4071cc
    0040705cldr x0, [sp+224]
    00407060subs xzr, x0, 15
    00407064b.le 0x4071cc
    00407068ldr x1, [sp+24]
    0040706cadrp x0, 4096
    00407070add x0, x0, 568
    00407074bl printf@plt
    00407078adrp x0, 4096
    0040707cadd x1, x0, 560
    00407080ldr x0, [sp+24]
    00407084bl fopen@plt
    00407088str x0, [sp+312]
    0040708cldr x0, [sp+312]
    00407090subs xzr, x0, 0
    00407094b.eq 0x4071cc
    00407098movz x0, 0x100000
    0040709cbl malloc@plt
    004070a0str x0, [sp+304]
    004070a4ldr x0, [sp+304]
    004070a8subs xzr, x0, 0
    004070acb.eq 0x4071bc
    004070b0add x1, sp, 136
    004070b4add x0, sp, 40
    004070b8mov x2, x1
    004070bcmov x1, x0
    004070c0adrp x0, 0x13000
    004070c4add x0, x0, 496
    004070c8bl session_key_get
    004070ccadd x1, sp, 40
    004070d0add x0, sp, 72
    004070d4bl crypto_session_init
    004070d8
    004070d8loc_4070d8:
    004070d8ldr x3, [sp+312]
    004070dcmovz x2, 0x100000
    004070e0movz x1, 1
    004070e4ldr x0, [sp+304]
    004070e8bl fread@plt
    004070ecstr x0, [sp+320]
    004070f0ldr x0, [sp+320]
    004070f4subs xzr, x0, 16
    004070f8b.ls 0x407178
    004070fcldr x0, [sp+320]
    00407100mov w1, w0
    00407104add x0, sp, 72
    00407108mov x2, x0
    0040710cldr x0, [sp+304]
    00407110bl buffer_crypt
    00407114ldr x0, [sp+320]
    00407118sub x0, xzr, x0
    0040711cmovz w2, 1
    00407120mov x1, x0
    00407124ldr x0, [sp+312]
    00407128bl fseek@plt
    0040712cldr x3, [sp+312]
    00407130ldr x2, [sp+320]
    00407134movz x1, 1
    00407138ldr x0, [sp+304]
    0040713cbl fwrite@plt
    00407140movz w2, 1
    00407144movz x1, 0x3100000
    00407148ldr x0, [sp+312]
    0040714cbl fseek@plt
    00407150ldr x1, [sp+328]
    00407154movz x0, 0x3200000
    00407158add x0, x1, x0
    0040715cstr x0, [sp+328]
    00407160ldr x0, [sp+224]
    00407164mov x1, x0
    00407168ldr x0, [sp+328]
    0040716csubs xzr, x0, x1
    00407170b.lo 0x4070d8
    00407174b 0x40717c
    00407178
    00407178loc_407178:
    00407178hint
    0040717c
    0040717cloc_40717c:
    0040717cadd x0, sp, 72
    00407180bl crypto_session_close
    00407184ldr x0, [sp+304]
    00407188bl free@plt
    0040718cmovz w0, 50198
    00407190movk w0, 0x6c890000
    00407194str w0, [sp+168]
    00407198movz w2, 2
    0040719cmovz x1, 0
    004071a0ldr x0, [sp+312]
    004071a4bl fseek@plt
    004071a8add x0, sp, 136
    004071acldr x3, [sp+312]
    004071b0movz x2, 36
    004071b4movz x1, 1
    004071b8bl fwrite@plt
    004071bc
    004071bcloc_4071bc:
    004071bcldr x0, [sp+312]
    004071c0bl fclose@plt
    004071c4b 0x4071cc
    004071c8
    004071c8loc_4071c8:
    004071c8hint
    004071cc
    004071ccloc_4071cc:
    004071ccldp x29, x30, [sp], 336
    004071d0ret x30
    00407014
    004071d4
    004071d4files_find_recursive:
    004071d4stp x29, x30, [sp-96]!
    004071d8add x29, sp, 0
    004071dcstr x0, [sp+40]
    004071e0str x1, [sp+32]
    004071e4str w2, [sp+28]
    004071e8movz x0, 4097
    004071ecbl malloc@plt
    004071f0str x0, [sp+88]
    004071f4ldr x0, [sp+88]
    004071f8subs xzr, x0, 0
    004071fcb.eq 0x40742c
    00407200ldr x1, [sp+40]
    00407204ldr x0, [sp+88]
    00407208bl strcpy@plt
    0040720cldr x1, [sp+40]
    00407210adrp x0, 4096
    00407214add x0, x0, 576
    00407218bl printf@plt
    0040721cldr x0, [sp+88]
    00407220bl opendir@plt
    00407224str x0, [sp+80]
    00407228ldr x0, [sp+80]
    0040722csubs xzr, x0, 0
    00407230b.eq 0x4073c4
    00407234str xzr, [sp+72]
    00407238b 0x4073a4
    0040723c
    0040723cloc_40723c:
    0040723cldr x0, [sp+72]
    00407240add x2, x0, 19
    00407244adrp x0, 4096
    00407248add x1, x0, 600
    0040724cmov x0, x2
    00407250bl strcmp@plt
    00407254subs wzr, w0, 0
    00407258b.eq 0x4073a4
    0040725cldr x0, [sp+72]
    00407260add x2, x0, 19
    00407264adrp x0, 4096
    00407268add x1, x0, 608
    0040726cmov x0, x2
    00407270bl strcmp@plt
    00407274subs wzr, w0, 0
    00407278b.eq 0x4073a4
    0040727cldr x0, [sp+72]
    00407280ldrb w0, [x0+18]
    00407284subs wzr, w0, 4
    00407288b.ne 0x4072f4
    0040728cldr x1, [sp+40]
    00407290ldr x0, [sp+88]
    00407294bl strcpy@plt
    00407298ldr x0, [sp+88]
    0040729cbl strlen@plt
    004072a0mov x1, x0
    004072a4ldr x0, [sp+88]
    004072a8add x0, x0, x1
    004072acmovz w1, 47
    004072b0strh w1, [x0]
    004072b4ldr x0, [sp+72]
    004072b8add x0, x0, 19
    004072bcmov x1, x0
    004072c0ldr x0, [sp+88]
    004072c4bl strcat@plt
    004072c8ldr x0, [sp+88]
    004072ccbl copy_path
    004072d0str x0, [sp+48]
    004072d4ldr x0, [sp+48]
    004072d8subs xzr, x0, 0
    004072dcb.eq 0x4073a4
    004072e0movz w2, 0
    004072e4ldr x1, [sp+32]
    004072e8ldr x0, [sp+48]
    004072ecbl files_find_recursive
    004072f0b 0x4073a4
    004072f4
    004072f4loc_4072f4:
    004072f4ldr x0, [sp+72]
    004072f8ldrb w0, [x0+18]
    004072fcsubs wzr, w0, 8
    00407300b.ne 0x4073a4
    00407304ldr x1, [sp+40]
    00407308ldr x0, [sp+88]
    0040730cbl strcpy@plt
    00407310ldr x0, [sp+88]
    00407314bl strlen@plt
    00407318mov x1, x0
    0040731cldr x0, [sp+88]
    00407320add x0, x0, x1
    00407324movz w1, 47
    00407328strh w1, [x0]
    0040732cldr x0, [sp+72]
    00407330add x0, x0, 19
    00407334mov x1, x0
    00407338ldr x0, [sp+88]
    0040733cbl strcat@plt
    00407340ldr x0, [sp+72]
    00407344add x2, x0, 19
    00407348adrp x0, 0x13000
    0040734cadd x1, x0, 528
    00407350mov x0, x2
    00407354bl file_ext_find
    00407358str w0, [sp+68]
    0040735cldr w0, [sp+68]
    00407360subs wzr, w0, 0
    00407364b.ne 0x4073a0
    00407368ldr x0, [sp+88]
    0040736cbl copy_path
    00407370str x0, [sp+56]
    00407374ldr x0, [sp+56]
    00407378subs xzr, x0, 0
    0040737cb.eq 0x4073a0
    00407380ldr x0, [sp+56]
    00407384bl file_rename
    00407388str x0, [sp+56]
    0040738cldr x2, [sp+56]
    00407390adrp x0, 0
    00407394add x1, x0, 20
    00407398ldr x0, [sp+32]
    0040739cbl thpool_add_work
    004073a0
    004073a0loc_4073a0:
    004073a0hint
    004073a4
    004073a4loc_4073a4:
    004073a4ldr x0, [sp+80]
    004073a8bl readdir@plt
    004073acstr x0, [sp+72]
    004073b0ldr x0, [sp+72]
    004073b4subs xzr, x0, 0
    004073b8b.ne 0x40723c
    004073bcldr x0, [sp+80]
    004073c0bl closedir@plt
    004073c4
    004073c4loc_4073c4:
    004073c4adrp x0, 0x13000
    004073c8add x0, x0, 536
    004073ccldr x1, [x0]
    004073d0adrp x0, 4096
    004073d4add x3, x0, 616
    004073d8adrp x0, 4096
    004073dcadd x2, x0, 248
    004073e0ldr x0, [sp+40]
    004073e4bl file_write_message
    004073e8adrp x0, 0x13000
    004073ecadd x0, x0, 536
    004073f0ldr x1, [x0]
    004073f4adrp x0, 4096
    004073f8add x3, x0, 624
    004073fcadrp x0, 4096
    00407400add x2, x0, 368
    00407404ldr x0, [sp+40]
    00407408bl file_write_message
    0040740cldr w0, [sp+28]
    00407410subs wzr, w0, 0
    00407414b.ne 0x407420
    00407418ldr x0, [sp+40]
    0040741cbl free@plt
    00407420
    00407420loc_407420:
    00407420ldr x0, [sp+88]
    00407424bl free@plt
    00407428b 0x407430
    0040742c
    0040742cloc_40742c:
    0040742chint
    00407430
    00407430loc_407430:
    00407430ldp x29, x30, [sp], 96
    00407434ret x30
    004071d4
    00407438
    00407438csprng:
    00407438stp x29, x30, [sp-48]!
    0040743cadd x29, sp, 0
    00407440str x0, [sp+24]
    00407444str w1, [sp+20]
    00407448adrp x0, 4096
    0040744cadd x1, x0, 952
    00407450adrp x0, 4096
    00407454add x0, x0, 960
    00407458bl fopen@plt
    0040745cstr x0, [sp+40]
    00407460ldr x0, [sp+40]
    00407464subs xzr, x0, 0
    00407468b.eq 0x40748c
    0040746cldrsw x0, [sp+20]
    00407470ldr x3, [sp+40]
    00407474mov x2, x0
    00407478movz x1, 1
    0040747cldr x0, [sp+24]
    00407480bl fread@plt
    00407484ldr x0, [sp+40]
    00407488bl fclose@plt
    0040748c
    0040748cloc_40748c:
    0040748chint
    00407490ldp x29, x30, [sp], 48
    00407494ret x30
    00407438
    00407498
    00407498session_key_get:
    00407498stp x29, x30, [sp-256]!
    0040749cadd x29, sp, 0
    004074a0str x0, [sp+40]
    004074a4str x1, [sp+32]
    004074a8str x2, [sp+24]
    004074acmovz x0, 9
    004074b0movz x1, 0
    004074b4stp x0, x1, [sp+88]
    004074b8stp xzr, xzr, [sp+104]
    004074bcadd x0, sp, 56
    004074c0movz w1, 32
    004074c4bl csprng
    004074c8ldrb w0, [sp+56]
    004074ccand w0, w0, 0xfffffff8
    004074d0and w0, w0, 255
    004074d4strb w0, [sp+56]
    004074d8ldrb w0, [sp+87]
    004074dcand w0, w0, 127
    004074e0and w0, w0, 255
    004074e4strb w0, [sp+87]
    004074e8ldrb w0, [sp+87]
    004074ecorr w0, w0, 64
    004074f0and w0, w0, 255
    004074f4strb w0, [sp+87]
    004074f8add x1, sp, 88
    004074fcadd x0, sp, 56
    00407500mov x2, x1
    00407504mov x1, x0
    00407508ldr x0, [sp+24]
    0040750cbl curve25519_donna
    00407510add x1, sp, 56
    00407514add x0, sp, 224
    00407518ldr x2, [sp+40]
    0040751cbl curve25519_donna
    00407520add x0, sp, 56
    00407524movz x2, 32
    00407528movz w1, 0
    0040752cbl memset@plt
    00407530add x0, sp, 120
    00407534bl sha256_init
    00407538add x1, sp, 224
    0040753cadd x0, sp, 120
    00407540movz w2, 32
    00407544bl sha256_hash
    00407548add x0, sp, 120
    0040754cldr x1, [sp+32]
    00407550bl sha256_done
    00407554add x0, sp, 120
    00407558movz x2, 104
    0040755cmovz w1, 0
    00407560bl memset@plt
    00407564hint
    00407568ldp x29, x30, [sp], 256
    0040756cret x30
    00407498
    00407570
    00407570buffer_crypt:
    00407570stp x29, x30, [sp-48]!
    00407574add x29, sp, 0
    00407578str x0, [sp+40]
    0040757cstr w1, [sp+36]
    00407580str x2, [sp+24]
    00407584ldr x0, [sp+24]
    00407588mov x2, x0
    0040758cldr x1, [sp+40]
    00407590ldr w0, [sp+36]
    00407594bl cc20_encrypt
    00407598hint
    0040759cldp x29, x30, [sp], 48
    004075a0ret x30
    00407570
    004075a4
    004075a4crypto_session_init:
    004075a4stp x29, x30, [sp-32]!
    004075a8add x29, sp, 0
    004075acstr x0, [sp+24]
    004075b0str x1, [sp+16]
    004075b4movz x2, 64
    004075b8movz w1, 0
    004075bcldr x0, [sp+24]
    004075c0bl memset@plt
    004075c4ldr x3, [sp+24]
    004075c8adrp x0, 0x13000
    004075ccadd x2, x0, 568
    004075d0ldr x1, [sp+16]
    004075d4mov x0, x3
    004075d8bl cc20_setkey
    004075dchint
    004075e0ldp x29, x30, [sp], 32
    004075e4ret x30
    004075a4
    004075e8
    004075e8crypto_session_close:
    004075e8stp x29, x30, [sp-32]!
    004075ecadd x29, sp, 0
    004075f0str x0, [sp+24]
    004075f4movz x2, 64
    004075f8movz w1, 0
    004075fcldr x0, [sp+24]
    00407600bl memset@plt
    00407604hint
    00407608ldp x29, x30, [sp], 32
    0040760cret x30
    004075e8
    00407610
    00407610usage:
    00407610stp x29, x30, [sp-16]!
    00407614add x29, sp, 0
    00407618movz w0, 10
    0040761cbl putchar@plt
    00407620adrp x0, 4096
    00407624add x0, x0, 976
    00407628bl puts@plt
    0040762cadrp x0, 4096
    00407630add x0, x0, 1000
    00407634bl puts@plt
    00407638movz w0, 1
    0040763cbl exit@plt
    00407610
    00407640
    00407640parse_args:
    00407640stp x29, x30, [sp-64]!
    00407644add x29, sp, 0
    00407648str w0, [sp+44]
    0040764cstr x1, [sp+32]
    00407650str x2, [sp+24]
    00407654str xzr, [sp+56]
    00407658b 0x4076a4
    0040765c
    0040765cloc_40765c:
    0040765cldr w0, [sp+52]
    00407660subs wzr, w0, 100
    00407664b.eq 0x407678
    00407668ldr w0, [sp+52]
    0040766csubs wzr, w0, 112
    00407670b.eq 0x407688
    00407674b 0x4076a0
    00407678
    00407678loc_407678:
    00407678ldr x0, [sp+24]
    0040767cmovz w1, 1
    00407680strb w1, [x0]
    00407684b 0x4076a4
    00407688
    00407688loc_407688:
    00407688adrp x0, 0x13000
    0040768cadd x0, x0, 656
    00407690ldr x1, [x0]
    00407694ldr x0, [sp+24]
    00407698str x1, [x0+8]
    0040769cb 0x4076a4
    004076a0
    004076a0loc_4076a0:
    004076a0bl usage
    004076a4
    004076a4loc_4076a4:
    004076a4adrp x0, 4096
    004076a8add x2, x0, 1072
    004076acldr x1, [sp+32]
    004076b0ldr w0, [sp+44]
    004076b4bl getopt@plt
    004076b8str w0, [sp+52]
    004076bcldr w0, [sp+52]
    004076c0adds wzr, w0, 1
    004076c4b.ne 0x40765c
    004076c8movz w0, 0
    004076ccldp x29, x30, [sp], 64
    004076d0ret x30
    00407640
    004076d4
    004076d4cc20_setkey:
    004076d4sub sp, sp, 48
    004076d8str x0, [sp+24]
    004076dcstr x1, [sp+16]
    004076e0str x2, [sp+8]
    004076e4ldr x0, [sp+8]
    004076e8str x0, [sp+32]
    004076ecldr x0, [sp+24]
    004076f0movz w1, 30821
    004076f4movk w1, 0x61700000
    004076f8str w1, [x0]
    004076fcldr x0, [sp+24]
    00407700movz w1, 25710
    00407704movk w1, 0x33200000
    00407708str w1, [x0+4]
    0040770cldr x0, [sp+24]
    00407710movz w1, 11570
    00407714movk w1, 0x79620000
    00407718str w1, [x0+8]
    0040771cldr x0, [sp+24]
    00407720movz w1, 25972
    00407724movk w1, 0x6b200000
    00407728str w1, [x0+12]
    0040772cstr wzr, [sp+44]
    00407730b 0x407764
    00407734
    00407734loc_407734:
    00407734ldrsw x0, [sp+44]
    00407738ldr x1, [sp+16]
    0040773cadd x0, x1, x0
    00407740ldr w1, [sp+44]
    00407744add w3, w1, 16
    00407748ldrb w2, [x0]
    0040774cldr x1, [sp+24]
    00407750sbfm x0, x3, 0, 31
    00407754strb w2, [x1+x0]
    00407758ldr w0, [sp+44]
    0040775cadd w0, w0, 1
    00407760str w0, [sp+44]
    00407764
    00407764loc_407764:
    00407764ldr w0, [sp+44]
    00407768subs wzr, w0, 31
    0040776cb.le 0x407734
    00407770ldr x0, [sp+24]
    00407774str wzr, [x0+48]
    00407778ldr x0, [sp+24]
    0040777cstr wzr, [x0+52]
    00407780ldr x0, [sp+32]
    00407784ldr w1, [x0]
    00407788ldr x0, [sp+24]
    0040778cstr w1, [x0+56]
    00407790ldr x0, [sp+32]
    00407794ldr w1, [x0+4]
    00407798ldr x0, [sp+24]
    0040779cstr w1, [x0+60]
    004077a0hint
    004077a4add sp, sp, 48
    004077a8ret x30
    004076d4
    004077ac
    004077acchacha_permute:
    004077acsub sp, sp, 48
    004077b0str x0, [sp+8]
    004077b4strh w1, [sp+6]
    004077b8ldr x0, [sp+8]
    004077bcstr x0, [sp+40]
    004077c0ldrh w0, [sp+6]
    004077c4and w0, w0, 15
    004077c8str w0, [sp+36]
    004077ccldrh w0, [sp+6]
    004077d0ubfm w0, w0, 4, 31
    004077d4and w0, w0, 65535
    004077d8and w0, w0, 15
    004077dcstr w0, [sp+32]
    004077e0ldrh w0, [sp+6]
    004077e4ubfm w0, w0, 8, 31
    004077e8and w0, w0, 65535
    004077ecand w0, w0, 15
    004077f0str w0, [sp+28]
    004077f4ldrh w0, [sp+6]
    004077f8ubfm w0, w0, 12, 31
    004077fcand w0, w0, 65535
    00407800and w0, w0, 15
    00407804str w0, [sp+24]
    00407808ldr w0, [sp+36]
    0040780cubfm x0, x0, 62, 61
    00407810ldr x1, [sp+40]
    00407814add x0, x1, x0
    00407818ldr w2, [x0]
    0040781cldr w0, [sp+32]
    00407820ubfm x0, x0, 62, 61
    00407824ldr x1, [sp+40]
    00407828add x0, x1, x0
    0040782cldr w1, [x0]
    00407830ldr w0, [sp+36]
    00407834ubfm x0, x0, 62, 61
    00407838ldr x3, [sp+40]
    0040783cadd x0, x3, x0
    00407840add w1, w2, w1
    00407844str w1, [x0]
    00407848ldr w0, [sp+24]
    0040784cubfm x0, x0, 62, 61
    00407850ldr x1, [sp+40]
    00407854add x0, x1, x0
    00407858ldr w1, [x0]
    0040785cldr w0, [sp+36]
    00407860ubfm x0, x0, 62, 61
    00407864ldr x2, [sp+40]
    00407868add x0, x2, x0
    0040786cldr w0, [x0]
    00407870eor w1, w1, w0
    00407874ldr w0, [sp+24]
    00407878ubfm x0, x0, 62, 61
    0040787cldr x2, [sp+40]
    00407880add x0, x2, x0
    00407884extr w1, w1, w1, 16
    00407888str w1, [x0]
    0040788cldr w0, [sp+28]
    00407890ubfm x0, x0, 62, 61
    00407894ldr x1, [sp+40]
    00407898add x0, x1, x0
    0040789cldr w2, [x0]
    004078a0ldr w0, [sp+24]
    004078a4ubfm x0, x0, 62, 61
    004078a8ldr x1, [sp+40]
    004078acadd x0, x1, x0
    004078b0ldr w1, [x0]
    004078b4ldr w0, [sp+28]
    004078b8ubfm x0, x0, 62, 61
    004078bcldr x3, [sp+40]
    004078c0add x0, x3, x0
    004078c4add w1, w2, w1
    004078c8str w1, [x0]
    004078ccldr w0, [sp+32]
    004078d0ubfm x0, x0, 62, 61
    004078d4ldr x1, [sp+40]
    004078d8add x0, x1, x0
    004078dcldr w1, [x0]
    004078e0ldr w0, [sp+28]
    004078e4ubfm x0, x0, 62, 61
    004078e8ldr x2, [sp+40]
    004078ecadd x0, x2, x0
    004078f0ldr w0, [x0]
    004078f4eor w1, w1, w0
    004078f8ldr w0, [sp+32]
    004078fcubfm x0, x0, 62, 61
    00407900ldr x2, [sp+40]
    00407904add x0, x2, x0
    00407908extr w1, w1, w1, 20
    0040790cstr w1, [x0]
    00407910ldr w0, [sp+36]
    00407914ubfm x0, x0, 62, 61
    00407918ldr x1, [sp+40]
    0040791cadd x0, x1, x0
    00407920ldr w2, [x0]
    00407924ldr w0, [sp+32]
    00407928ubfm x0, x0, 62, 61
    0040792cldr x1, [sp+40]
    00407930add x0, x1, x0
    00407934ldr w1, [x0]
    00407938ldr w0, [sp+36]
    0040793cubfm x0, x0, 62, 61
    00407940ldr x3, [sp+40]
    00407944add x0, x3, x0
    00407948add w1, w2, w1
    0040794cstr w1, [x0]
    00407950ldr w0, [sp+24]
    00407954ubfm x0, x0, 62, 61
    00407958ldr x1, [sp+40]
    0040795cadd x0, x1, x0
    00407960ldr w1, [x0]
    00407964ldr w0, [sp+36]
    00407968ubfm x0, x0, 62, 61
    0040796cldr x2, [sp+40]
    00407970add x0, x2, x0
    00407974ldr w0, [x0]
    00407978eor w1, w1, w0
    0040797cldr w0, [sp+24]
    00407980ubfm x0, x0, 62, 61
    00407984ldr x2, [sp+40]
    00407988add x0, x2, x0
    0040798cextr w1, w1, w1, 24
    00407990str w1, [x0]
    00407994ldr w0, [sp+28]
    00407998ubfm x0, x0, 62, 61
    0040799cldr x1, [sp+40]
    004079a0add x0, x1, x0
    004079a4ldr w2, [x0]
    004079a8ldr w0, [sp+24]
    004079acubfm x0, x0, 62, 61
    004079b0ldr x1, [sp+40]
    004079b4add x0, x1, x0
    004079b8ldr w1, [x0]
    004079bcldr w0, [sp+28]
    004079c0ubfm x0, x0, 62, 61
    004079c4ldr x3, [sp+40]
    004079c8add x0, x3, x0
    004079ccadd w1, w2, w1
    004079d0str w1, [x0]
    004079d4ldr w0, [sp+32]
    004079d8ubfm x0, x0, 62, 61
    004079dcldr x1, [sp+40]
    004079e0add x0, x1, x0
    004079e4ldr w1, [x0]
    004079e8ldr w0, [sp+28]
    004079ecubfm x0, x0, 62, 61
    004079f0ldr x2, [sp+40]
    004079f4add x0, x2, x0
    004079f8ldr w0, [x0]
    004079fceor w1, w1, w0
    00407a00ldr w0, [sp+32]
    00407a04ubfm x0, x0, 62, 61
    00407a08ldr x2, [sp+40]
    00407a0cadd x0, x2, x0
    00407a10extr w1, w1, w1, 25
    00407a14str w1, [x0]
    00407a18hint
    00407a1cadd sp, sp, 48
    00407a20ret x30
    004077ac
    00407a24
    00407a24cc20_stream:
    00407a24stp x29, x30, [sp-64]!
    00407a28add x29, sp, 0
    00407a2cstr x0, [sp+24]
    00407a30str x1, [sp+16]
    00407a34movn w0, 14271
    00407a38strh w0, [sp+40]
    00407a3cmovn w0, 9902
    00407a40strh w0, [sp+42]
    00407a44movn w0, 5533
    00407a48strh w0, [sp+44]
    00407a4cmovn w0, 1164
    00407a50strh w0, [sp+46]
    00407a54movn w0, 1455
    00407a58strh w0, [sp+48]
    00407a5cmovn w0, 13470
    00407a60strh w0, [sp+50]
    00407a64movn w0, 10125
    00407a68strh w0, [sp+52]
    00407a6cmovn w0, 5820
    00407a70strh w0, [sp+54]
    00407a74str wzr, [sp+60]
    00407a78b 0x407aa0
    00407a7c
    00407a7cloc_407a7c:
    00407a7cldr x0, [sp+24]
    00407a80ldrsw x1, [sp+60]
    00407a84ldr w2, [x0+2*x1]
    00407a88ldr x0, [sp+16]
    00407a8cldrsw x1, [sp+60]
    00407a90str w2, [x0+2*x1]
    00407a94ldr w0, [sp+60]
    00407a98add w0, w0, 1
    00407a9cstr w0, [sp+60]
    00407aa0
    00407aa0loc_407aa0:
    00407aa0ldr w0, [sp+60]
    00407aa4subs wzr, w0, 15
    00407aa8b.le 0x407a7c
    00407aacstr wzr, [sp+60]
    00407ab0b 0x407afc
    00407ab4
    00407ab4loc_407ab4:
    00407ab4str wzr, [sp+56]
    00407ab8b 0x407ae4
    00407abc
    00407abcloc_407abc:
    00407abcldrsw x0, [sp+56]
    00407ac0ubfm x0, x0, 63, 62
    00407ac4add x1, sp, 40
    00407ac8ldrh w0, [x1+x0]
    00407accmov w1, w0
    00407ad0ldr x0, [sp+16]
    00407ad4bl chacha_permute
    00407ad8ldr w0, [sp+56]
    00407adcadd w0, w0, 1
    00407ae0str w0, [sp+56]
    00407ae4
    00407ae4loc_407ae4:
    00407ae4ldr w0, [sp+56]
    00407ae8subs wzr, w0, 7
    00407aecb.le 0x407abc
    00407af0ldr w0, [sp+60]
    00407af4add w0, w0, 2
    00407af8str w0, [sp+60]
    00407afc
    00407afcloc_407afc:
    00407afcldr w0, [sp+60]
    00407b00subs wzr, w0, 19
    00407b04b.le 0x407ab4
    00407b08str wzr, [sp+60]
    00407b0cb 0x407b44
    00407b10
    00407b10loc_407b10:
    00407b10ldr x0, [sp+16]
    00407b14ldrsw x1, [sp+60]
    00407b18ldr w1, [x0+2*x1]
    00407b1cldr x0, [sp+24]
    00407b20ldrsw x2, [sp+60]
    00407b24ldr w0, [x0+2*x2]
    00407b28add w2, w1, w0
    00407b2cldr x0, [sp+16]
    00407b30ldrsw x1, [sp+60]
    00407b34str w2, [x0+2*x1]
    00407b38ldr w0, [sp+60]
    00407b3cadd w0, w0, 1
    00407b40str w0, [sp+60]
    00407b44
    00407b44loc_407b44:
    00407b44ldr w0, [sp+60]
    00407b48subs wzr, w0, 15
    00407b4cb.le 0x407b10
    00407b50ldr x0, [sp+24]
    00407b54ldr x0, [x0+48]
    00407b58add x1, x0, 1
    00407b5cldr x0, [sp+24]
    00407b60str x1, [x0+48]
    00407b64hint
    00407b68ldp x29, x30, [sp], 64
    00407b6cret x30
    00407a24
    00407b70
    00407b70cc20_encrypt:
    00407b70stp x29, x30, [sp-144]!
    00407b74add x29, sp, 0
    00407b78str w0, [sp+44]
    00407b7cstr x1, [sp+32]
    00407b80str x2, [sp+24]
    00407b84ldr x0, [sp+32]
    00407b88str x0, [sp+128]
    00407b8cb 0x407c30
    00407b90
    00407b90loc_407b90:
    00407b90add x0, sp, 56
    00407b94mov x1, x0
    00407b98ldr x0, [sp+24]
    00407b9cbl cc20_stream
    00407ba0ldr w2, [sp+44]
    00407ba4ldr w1, [sp+44]
    00407ba8movz w0, 64
    00407bacsubs wzr, w2, 64
    00407bb0csel w0, w1, w0, ls
    00407bb4str w0, [sp+124]
    00407bb8str wzr, [sp+140]
    00407bbcb 0x407c00
    00407bc0
    00407bc0loc_407bc0:
    00407bc0ldr w0, [sp+140]
    00407bc4ldr x1, [sp+128]
    00407bc8add x0, x1, x0
    00407bccldrb w2, [x0]
    00407bd0ldr w0, [sp+140]
    00407bd4add x1, sp, 56
    00407bd8ldrb w1, [x1+x0]
    00407bdcldr w0, [sp+140]
    00407be0ldr x3, [sp+128]
    00407be4add x0, x3, x0
    00407be8eor w1, w2, w1
    00407becand w1, w1, 255
    00407bf0strb w1, [x0]
    00407bf4ldr w0, [sp+140]
    00407bf8add w0, w0, 1
    00407bfcstr w0, [sp+140]
    00407c00
    00407c00loc_407c00:
    00407c00ldr w1, [sp+140]
    00407c04ldr w0, [sp+124]
    00407c08subs wzr, w1, w0
    00407c0cb.lo 0x407bc0
    00407c10ldr w1, [sp+44]
    00407c14ldr w0, [sp+124]
    00407c18sub w0, w1, w0
    00407c1cstr w0, [sp+44]
    00407c20ldr w0, [sp+124]
    00407c24ldr x1, [sp+128]
    00407c28add x0, x1, x0
    00407c2cstr x0, [sp+128]
    00407c30
    00407c30loc_407c30:
    00407c30ldr w0, [sp+44]
    00407c34subs wzr, w0, 0
    00407c38b.ne 0x407b90
    00407c3chint
    00407c40hint
    00407c44ldp x29, x30, [sp], 144
    00407c48ret x30
    00407b70
    00407c4c
    00407c4c_fini:
    00407c4chint
    00407c50stp x29, x30, [sp-16]!
    00407c54add x29, sp, 0
    00407c58ldp x29, x30, [sp], 16
    00407c5cret x30
    00407c4c
    00407c60
    00407c60 string ".rodata"