============================== Sample 1 ============================== ASM: ;************************************************************************************************************************************************************ ;* FUNCTION * ;************************************************************************************************************************************************************ ;undefined GHOST_GetWindowUserData() MOV RAX,qword ptr [RDI] JMP qword ptr [RAX + 0xe0] ?? 0Fh Actual src: GHOST_TUserDataPtr GHOST_GetWindowUserData(GHOST_WindowHandle windowhandle) { GHOST_IWindow *window = (GHOST_IWindow *)windowhandle; return window->getUserData(); } Predicted src: int G_CALL G_CALL G_CALL G_CALL G_CALL G_CALL G_CALL (G_CALL G_CALL G_CALL G_CALL G_CALL G_CALL G_CALL G_CALL G_CALL G_CALL G_CALL G_CALL G_CALL G_CALL G_CALL G_CALL G_CALL G_CALL G_CALL G_CALL G_CALL G_CALL G_CALL G_CALL G_CALL G_CALL G_CALL G_CALL G_CALL G_CALL G_CALL G_CALL G_CALL G_CALL G_CALL G_CALL G_CALL G_CALL G_CALL G_CALL G_CALL G_CALL G_CALL G_CALL G_CALL G_CALL G_CALL G_CALL G_CALL G_CALL G_CALL G_CALL G_CALL G_CALL G_CALL G_CALL G_ GCALL G_CALL G_CALL G_CALL G_CALL G_CALL G_ GCALL G_CALL G_CALL G_ GCALL G_CALL G_ GCALL G_CALL G_CALL G_ GCALL G_CALL G_ GCALL G_CALL G_ GCALL G_CALL G_ GCALL G_ GCALL G_CALL G_ GCALL GCALL G_ GCALL G_ GCALL G_ GCALL G_ GCALL G_CALL G_ GCALL GCALL G_ GCALL G_ GCALL G_ GCALL G_ GCALL GCALL G_ GCALL G_ GCALL GCALL G_ GCALL G_ GCALL G_ GCALL GCALL G_ GCALL G_ GCALL GCALL G_ GCALL GCALL G_ GCALL GCALL G_ GCALL GCALL G_ GCALL GCALL G_ GCALL GCALL G_ GCALL GCALL G_ GCALL GCALL G_ GCALL GCALL GCALL GCALL G_ GCALL GCALL GCALL G_ GCALL GCALL G_ GCALL GCALL GCALL GCALL G_ GCALL GCALL GCALL GCALL GCALL G_ GCALL GCALL GCALL G_ GCALL GCALL GCALL GCALL GCALL GCALL GCALL GCALL GCALL GCALL GCALL GCALL GCALL GCALL GCALL GCALL GCALL GCALL GCALL GCALL GCALL GCALL GCALL GCALL GCALL GCALL GCALL GCALL GCALL GCALL GCALL GCALL GCALL GCALL GCALL GCALL GCALL GCALL GCALL GCALL GCALL GCALL GCALL GCALL GCALL GCALL GCALL GCALL GCALL GCALL GCALL GCALL GCALL GCALL GCALL GCALL GCALL GCALL GCALL GCALL GCALL GCALL GCALL GCALL GCALL GCALL GCALL GCALL GCALL GCALL GCALL GCALL GCALL GCALL GCALL GCALL GCALL GCALL GCALL GCALL GCALL GCALL GCALL GCALL GCALL GCALL GCALL GCALL GCALL GCALL GCALL GCALL GCALL GCALL GCALL GCALL GCALL GCALL GCALL GCALL GCALL GCALL GCALL GCALL GCALL GCALL GCALL GCALL GCALL GCALL GCALL GCALL GCALL GCALL GCALL GCALL GCALL GCALL GCALL GCALL GCALL GCALL GCALL GCALL GCALL GCALL GCALL GCALL GCALL GCALL GCALL GCALL GCALL GCALL GCALL GCALL GCALL GCALL GCALL GCALL GCALL GCALL GCALL GCALL GCALL GCALL GCALL GCALL GCALL GCALL GCALL GCALL GCALL GCALL GCALL GCALL GCALL GCALL GCALL GCALL GCALL GCALL GCALL GCALL GCALL GCALL GCALL GCALL GCALL GCALL GCALL GCALL GCALL GCALL GCALL GCALL GCALL GCALL GCALL GCALL GCALL GCALL GCALL GCALL GCALL GCALL GCALL GCALL GCALL GCALL GCALL GCALL GCALL GCALL GCALL GCALL GCALL GCALL GCALL GCALL GCALL GCALL GCALL GCALL GCALL GCALL GCALL GCALL GCALL GCALL GCALL GCALL GCALL GCALL GCALL GCALL GCALL GCALL GCALL GCALL GCALL GCALL GCALL GCALL GCALL GCALL GCALL GCALL GCALL GCALL GCALL GCALL GCALL GCALL GCALL GCALL GCALL GCALL GCALL GCALL GCALL GCALL GCALL GCALL GCALL GCALL GCALL GCALL GCALL GCALL GCALL GCALL GCALL GCALL GCALL GCALL GCALL GCALL GCALL GCALL GCALL GCALL GCALL GCALL GCALL GCALL GCALL GCALL GCALL GCALL GCALL GCALL GCALL GCALL GCALL GCALL GCALL GCALL GCALL GCALL GCALL GCALL GCALL GCALL GCALL GCALL ============================== Sample 2 ============================== ASM: ;************************************************************************************************************************************************************ ;* FUNCTION * ;************************************************************************************************************************************************************ ;undefined dev_c1700_mb_wic2t_set_nio() CMP EDX,0x1 JA LAB_00179172 ADD EDX,dword ptr [RSI + 0x20] CMP EDX,0x20 JZ LAB_00179188 JA LAB_00179168 CMP EDX,0x10 JZ LAB_00179180 CMP EDX,0x11 JNZ LAB_00179172 MOV ESI,0x3 LAB_0017914e: MOV RAX,qword ptr [RDI + 0xa20] MOV RDX,RCX MOV RDI,qword ptr [RAX + 0x510] JMP mpc860_scc_set_nio ;undefined mpc860_scc_set_nio() ?? 0Fh ?? 1Fh ?? 40h @ ?? 00h LAB_00179168: MOV ESI,0x2 CMP EDX,0x21 JZ LAB_0017914e LAB_00179172: MOV EAX,0xffffffff RET ?? 0Fh ?? 1Fh ?? 84h ?? 00h ?? 00h ?? 00h ?? 00h ?? 00h LAB_00179180: XOR ESI,ESI JMP LAB_0017914e ?? 0Fh ?? 1Fh ?? 40h @ ?? 00h LAB_00179188: MOV ESI,0x1 JMP LAB_0017914e ?? 90h Actual src: static int dev_c1700_mb_wic2t_set_nio(vm_instance_t *vm,struct cisco_card *card, u_int port_id,netio_desc_t *nio) { u_int scc_chan; if ((port_id > 1) || (dev_c1700_mb_wic_get_scc_chan(card,port_id,&scc_chan) == -1)) return(-1); return(mpc860_scc_set_nio(VM_C1700(vm)->mpc_data,scc_chan,nio)); } Predicted src: int ipmi_ipmi_set_bit_w(ipmi_ipmi_ipmi_ipmi_t *ipmi_ipmi_ipmi_ipmi_ipmi_ipmi_ipmi_ipmi_ipmi_ipmi_ipmi_ipmi_ipmi_ipmi_ipmi_ipmi_ipmi_ipmi_ipmi_ipmi_ipmi_ipmi_ipmi_ipmi_ipmi_ipmi_ipmi_ipmi_ipmi_ipmi_ipmi_ipmi_ipmi_ipmi_ipmi_ipmi_ipmi_ipmi_ipmi_ipmi_ipmi_ipmi_ipmi_ipmi_ipmi_ipmi_ipmi_ipmi_ipmi_ipmi_ipmi_ipmi_ipmi_ipmi_ipmi_ipmi_ipmi_ipmi_ipmi_ipmi_ipmi_ipmi_ipmi_ipmi_ipmi_ipmi_ipmi_ipmi_ipmi_ipmi_ipmi_ipmi_ipmiipmi_ipmi_ipmi_ipmiipmi_ipmi_ipmiipmi_ipmiipmi_ipmiipmi_ipmiipmi_ipmiipmiipmi_ipmiipmiipmi_ipmiipmiipmiipmiipmiipmi_ipmi_ipmiipmi_ipmiipmiipmiipmi_ipmiipmiipmiipmiipmiipmiipmiipmiipmiipmiipmiipmiipmiipmiipmiipmiipmiipmiipmiipmiipmiipmiipmiipmiipmiipmiipmiipmiipmiipmiipmiipmiipmiipmiipmiipmiipmiipmiipmiipmiipmiipmiipmiipmiipmiipmiipmiipmiipmiipmiipmiipmiipmiipmiipmiipmiipmiipmiipmiipmiipmiipmiipmiipmiipmiipmiipmiipmiipmiipmiipmiipmiipmiipmiipmiipmiipmiipmiipmiipmiipmiipmiipmiipmiipmiipmiipmiipmiipmiipmiipmiipmiipmiipmiipmiipmiipmiipmiipmiipmiipmiipmiipmiipmiipmiipmiipmiipmiipmiipmiipmiipmiipmiipmiipmiipmiipmiipmiipmiipmiipmiipmiipmiipmiipmiipmiipmiipmiipmiipmiipmiipmiipmiipmiipmiipmiipmiipmiipmiipmiipmiipmiipmiipmiipmiipmiipmiipmiipmiipmiipmiipmiipmiipmiipmiipmiipmiipmiipmiipmiipmiipmiipmiipmiipmiipmiipmiipmiipmiipmiipmiipmiipmiipmiipmiipmiipmiipmiipmiipmiipmiipmiipmiipmiipmiipmiipmiipmiipmiipmiipmiipmiipmiipmiipmiipmiipmiipmiipmiipmiipmiipmiipmiipmiipmiipmiipmiipmiipmiipmiipmiipmiipmiipmiipmiipmiipmiipmiipmiipmiipmiipmiipmiipmiipmiipmiipmiipmiipmiipmiipmiipmiipmiipmiipmiipmiipmiipmiipmiipmiipmiipmiipmiipmiipmiipmiipmiipmiipmiipmiipmiipmiipmiipmiipmiipmiipmiipmiipmiipmiipmiipmiipmiipmiipmiipmiipmiipmiipmiipmiipmiipmiipmiipmiipmiipmiipmiipmiipmiipmiipmiipmiipmiipmiipmiipmiipmiipmiipmiipmiipmiipmiipmiipmiipmiipmiipmiipmiipmiipmiipmiipmiipmiipmiipmiipmiipmiipmiipmiipmiipmiipmiipmiipmiipmiipmiipmiipmiipmiipmiipmiipmiipmiipmiipmiipmiipmiipmiipmiipmiipmiipmiipmiipmiipmiipmiipmiipmiipmiipmiipmiipmiipmiipmiipmiipmiipmiipmiipmiipmiipmiipmiipmiipmiipmiipmiipmiipmiipmiipmiipmiipmiipmiipmiipmiipmiipmiipmiipmiipmiipmiipmiipmiipmiipmiipmiipmiipmiipmiipmiipmiipmiipmiipmiipmiipmiipmiipmiipmiipmiipmiipmiipmiipmiipmiipmiipmiipmiipmiipmiipmiipmiipmiipmiipmiipmiipmiipmiipmiipmiipmiipmiipmiipmiipmiipmiipmiipmiipmiipmiipmiipmiipmiipmiipmiipmiipmiipmiipmiipmiipmiipmiipmiipmiipmiipmiipmiipmiipmiipmiipmiipmiipmiipmiipmiipmiipmiipmiipmiipmiipmiipmiipmiipmiipmiipmiipmiipmiipmiipmiipmiipmiipmiipmiipmiipmiipmiipmiipmiipmiipmiipmiipmiipmiipmiipmiipmiipmiipmiipmiipmiipmiipmiipmiipmiipmiipmiipmiipmiipmiipmiipmiipmiipmiipmiipmiipmiipmiipmiipmiipmiipmiipmiipmiipmiipmiipmiipmiipmiipmiipmiipmiipmiipmiipmiipmiipmiipmiipmiipmiipmiipmiipmiipmiipmiipmiipmiipmiipmiipmiipmiipmiipmiipmiipmiipmiipmiipmiipmiipmiipmiipmiipmiipmiipmiipmiipmiipmiipmiipmiipmiipmiipmiipmiipmiipmiipmiipmiipmiipmiipmiipmiipmiipmiipmiipmiipmiipmiipmiipmiipmiipmiipmiipmiipmiipmiipmiipmiipmiipmiipmiipmiipmiipmiipmiipmiipmiipmiipmiipmiipmiipmiipmiipmiipmiipmiipmiipmiipmiipmiipmiipmiipmiipmiipmiipmiipmiipmiipmiipmiipmiipmiipmiipmiipmiipmiipmiipmiipmiipmiipmiipmiipmiipmiipmiipmiipmiipmiipmiipmiipmiipmiipmiipmiipmiipmiipmiipmiipmiipmiipmiipmiipmiipmiipmiipmiipmiipmiipmiipmiipmiipmiipmiipmiipmiipmiipmiipmiipmiipmiipmiipmiipmiipmiipmiipmiipmiipmiipmiipmiipmiipmiipmiipmiipmiipmiipmiipmiipmiipmiipmiipmiipmiipmiipmiipmiipmiipmiipmiipmiipmiipmiipmiipmiipmiipmiipmiipmiipmiipmiipmiipmiipmiipmiipmiipmiipmiipmiipmiipmiipmiipmiipmiipmiipmiipmiipmiipmiipmiipmiipmiipmiipmiipmiipmiipmiipmiipmiipmiipmiipmiipmiipmiipmiipmiipmiipmiipmiipmiipmiipmiipmiipmiipmiipmiipmiipmiipmiipmiipmiipmiipmiipmiipmiipmiipmiipmiipmiipmiipmiipmiipmiipmiipmiipmiipmiipmiipmiipmiipmiipmiipmiipmiipmiipmiipmiipmiipmiipmiipmiipmiipmiipmiipmiipmiipmiipmiipmiipmiipmiipmiipmiipmiipmiipmiipmiipmiipmiipmiipmiipmiipmiipmiipmiipmiipmiipmiipm ============================== Sample 3 ============================== ASM: ;************************************************************************************************************************************************************ ;* op_0690_40_ff(unsigned int) * ;************************************************************************************************************************************************************ ;undefined op_0690_40_ff(uint param_1) ;param_1 uint EDI AND param_1,0x7 PUSH R12 MOV RAX,qword ptr [.bss:regs[72]] MOV R12D,dword ptr [.bss:regs[32] + param_1*0x4] PUSH RBP PUSH RBX MOV EBX,dword ptr [RAX + 0x2] MOV EBP,R12D MOV param_1,R12D SHR EBP,0x10 MOV RAX,qword ptr [.bss:mem_banks + RBP*0x8] BSWAP EBX MOV EDX,dword ptr [RAX + 0x6c] OR dword ptr [.bss:special_mem],EDX CALL qword ptr [RAX] XOR ECX,ECX MOV ESI,EAX MOV EDX,EAX MOV EAX,dword ptr [.bss:regflags] ADD ESI,EBX SETZ CL AND EAX,0xffffbffe MOV param_1,ESI SHL ECX,0xe XOR param_1,EBX OR EAX,ECX MOV ECX,ESI XOR ECX,EDX AND ECX,param_1 MOV param_1,R12D SHR ECX,0x1f OR EAX,ECX AND AH,0xfe ADD EDX,EBX SETC DL Actual src: uae_u32 REGPARAM2 CPUFUNC(op_4650_0)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca; srca = m68k_areg (regs, srcreg); { uae_s16 src = get_word (srca); { uae_u32 dst = ~src; CLEAR_CZNV (); SET_ZFLG (((uae_s16)(dst)) == 0); SET_NFLG (((uae_s16)(dst)) < 0); put_word (srca, dst); }}}} m68k_incpc (2); return 8 * CYCLE_UNIT / 2; } Predicted src: uae_u32 REGPARAM2 CPUFUNC(op_0c0_0)(uae_u32 opcode) { uae_u32 srcreg = (opcode & 7); {{ uaecptr srca; srca = get_disp_ea_000 (m68k_areg (regs, srcreg), get_diword (2)); { uae_s8 src = get_byte (srca); { uaecptr dsta; dsta = get_disp_ea_000 (m68k_areg (regs, dstreg), get_diword (4)); CLEAR_CZNV (); SET_ZFLG (((uae_s8)(src)) == 0); SET_NFLG (((uae_s8)(src)) < 0); put_byte (dsta, src); }}}} m68k_incpc (4); return 16 * CYCLE_UNIT / 2; } ============================== Sample 4 ============================== ASM: ;************************************************************************************************************************************************************ ;* FUNCTION * ;************************************************************************************************************************************************************ ;undefined linphone_contact_search_get_predicate() MOV RAX,qword ptr [RDI + 0x40] RET ?? 66h f Actual src: const char*linphone_contact_search_get_predicate(LinphoneContactSearch* obj) { return obj->predicate; } Predicted src: const char * linphone_core_get_contact(LinphoneCore *lc) { return (const LinphoneCore *)lc->contact; } ============================== Sample 5 ============================== ASM: ;************************************************************************************************************************************************************ ;* FUNCTION * ;************************************************************************************************************************************************************ ;undefined CG_CreateBlend() ;local_3c undefined4 -3c PUSH R15 XOR EAX,EAX PUSH R14 PUSH R13 PUSH R12 PUSH RBP PUSH RBX SUB RSP,0x18 CALL .plt:getCaliValue ;undefined getCaliValue() MOV EBP,EAX XOR EAX,EAX CALL .plt:getCaliValue ;undefined getCaliValue() MOV R12D,EAX XOR EAX,EAX CALL .plt:getCaliValue ;undefined getCaliValue() MOV R13D,EAX XOR EAX,EAX CALL .plt:getCaliValue ;undefined getCaliValue() MOV R14D,EAX XOR EAX,EAX CALL .plt:getCaliValue ;undefined getCaliValue() MOV EBX,EAX XOR EAX,EAX CALL .plt:getCaliValue ;undefined getCaliValue() MOV R15D,EAX MOV RAX,qword ptr [->sys_nextdebuglv] ;= 0034e0c8 MOV dword ptr [RAX]=>EXTERNAL:sys_nextdebuglv,0x2 ;=?? XOR EAX,EAX CALL .plt:sl_getIndex ;undefined sl_getIndex() MOV dword ptr [RSP + local_3c+0x48],EAX XOR EAX,EAX CALL .plt:sl_getPage ;undefined sl_getPage() MOV EDX,dword ptr [RSP + local_3c+0x48] LEA RDI,[.rodata:s_%d,%x:_0011c03b] ;= "%d,%x: " MOV ESI,EAX XOR EAX,EAX CALL .plt:sys_message ;undefined sys_message() SUB RSP,0x8 MOV R9D,EBX MOV R8D,R14D PUSH R15 MOV ECX,R13D MOV EDX,R12D MOV ESI,EBP LEA RDI,[.rodata:s_SACT.CG_CreateBlend_%d,%d,%d,%d,_0011cae0] ;= "SACT.CG_CreateBlend %d,%d,%d,%d,%... XOR EAX,EAX CALL .plt:sys_message ;undefined sys_message() ADD RSP,0x28 MOV R9D,R15D MOV R8D,EBX MOV ECX,R14D POP RBX MOV EDX,R13D MOV ESI,R12D MOV EDI,EBP POP RBP POP R12 POP R13 POP R14 POP R15 JMP .plt:LAB_00107970 ?? 66h f Actual src: void CG_CreateBlend() { int wNumDstCG = getCaliValue(); int wNumBaseCG = getCaliValue(); int wX = getCaliValue(); int wY = getCaliValue(); int wNumBlendCG = getCaliValue(); int wAlphaMapMode = getCaliValue(); DEBUG_COMMAND_YET("SACT.CG_CreateBlend %d,%d,%d,%d,%d,%d:\n", wNumDstCG, wNumBaseCG, wX, wY, wNumBlendCG, wAlphaMapMode); scg_create_blend(wNumDstCG, wNumBaseCG, wX, wY, wNumBlendCG, wAlphaMapMode); } Predicted src: void CreateCreateCreate(void) { int i; i = getCaliValue(); int i; i = getCaliValue(); i = getCaliValue(); DEBUG_COMMAND_YET("CreateCreateCreateCreateCreateCreateCreateCreateCreateCreateCreateCreateCreateCreateCreateCreateCreateCreateCreateCreateCreateCreateCreateCreateCreateCreateCreateCreateCreateCreateCreateCreateCreateCreateCreateCreateCreateCreateCreateCreateCreateCreateCreateCreateCreateCreateCreateCreateCreateCreateCreateCreateCreateCreateCreateCreateCreateCreateCreateCreateCreateCreateCreateCreateCreateCreateCreateCreateCreateCreateCreateCreateCreateCreateCreateCreateCreateCreateCreateCreateCreateCreateCreateCreateCreateCreateCreateCreateCreateCreateCreateCreateCreateCreateCreateCreateCreateCreateCreateCreateCreateCreateCreateCreateCreateCreateCreateCreateCreateCreateCreateCreateCreateCreateCreateCreateCreateCreateCreateCreateCreateCreateCreateCreateCreateCreateCreateCreateCreateCreateCreateCreateCreateCreateCreateCreateCreateCreateCreateCreateCreateCreateCreateCreateCreateCreateCreateCreateCreateCreateCreateCreateCreateCreateCreateCreateCreateCreateCreateCreateCreateCreateCreateCreateCreateCreateCreateCreateCreateCreateCreateCreateCreateCreateCreateCreateCreateCreateCreateCreateCreateCreateCreateCreateCreateCreateCreateCreateCreateCreateCreateCreateCreateCreateCreateCreateCreateCreateCreateCreateCreateCreateCreateCreateCreateCreateCreateCreateCreateCreateCreateCreateCreateCreateCreateCreateCreateCreateCreateCreateCreateCreateCreateCreateCreateCreateCreateCreateCreateCreateCreateCreateCreateCreateCreateCreateCreateCreateCreateCreateCreateCreateCreateCreateCreateCreateCreateCreateCreateCreateCreateCreateCreateCreateCreateCreateCreateCreateCreateCreateCreateCreateCreateCreateCreateCreateCreateCreateCreateCreateCreateCreateCreateCreateCreateCreateCreateCreateCreateCreateCreateCreateCreateCreateCreateCreateCreateCreateCreateCreateCreateCreateCreateCreateCreateCreateCreateCreateCreateCreateCreateCreateCreateCreateCreateCreateCreateCreateCreateCreateCreateCreateCreateCreateCreateCreateCreateCreateCreateCreateCreateCreateCreateCreateCreateCreateCreateCreateCreateCreateCreateCreateCreateCreateCreateCreateCreateCreateCreateCreateCreateCreateCreateCreateCreateCreateCreateCreateCreateCreateCreateCreateCreateCreateCreateCreateCreateCreateCreateCreateCreateCreateCreateCreateCreateCreateCreateCreateCreateCreateCreateCreateCreateCreateCreateCreateCreateCreateCreateCreateCreateCreateCreateCreateCreateCreateCreateCreateCreateCreateCreateCreateCreateCreateCreateCreateCreateCreateCreateCreateCreateCreateCreateCreateCreateCreateCreateCreateCreateCreateCreateCreateCreateCreateCreateCreateCreateCreateCreateCreateCreateCreateCreateCreateCreateCreateCreateCreateCreateCreateCreateCreateCreateCreateCreateCreateCreateCreateCreateCreateCreateCreateCreateCreateCreateCreateCreateCreateCreateCreateCreateCreateCreateCreateCreateCreateCreateCreateCreateCreateCreateCreateCreateCreateCreateCreateCreateCreateCreateCreateCreateCreateCreateCreateCreateCreateCreateCreateCreateCreateCreateCreateCreateCreateCreateCreateCreateCreateCreateCreateCreateCreateCreateCreateCreateCreateCreateCreateCreateCreateCreateCreateCreateCreateCreateCreateCreateCreateCreateCreateCreateCreateCreateCreateCreateCreateCreateCreateCreateCreateCreateCreateCreateCreateCreateCreateCreateCreateCreateCreateCreateCreateCreateCreateCreateCreateCreateCreateCreateCreateCreateCreateCreateCreateCreateCreateCreateCreateCreateCreateCreateCreateCreateCreateCreateCreateCreateCreateCreateCreateCreateCreateCreateCreateCreateCreateCreateCreateCreateCreateCreateCreateCreateCreateCreateCreateCreateCreateCreateCreateCreateCreateCreateCreateCreateCreateCreateCreateCreateCreateCreateCreateCreateCreateCreateCreateCreateCreateCreateCreateCreateCreateCreateCreateCreateCreateCreateCreateCreateCreateCreateCreateCreateCreateCreateCreateCreateCreateCreateCreateCreateCreateCreateCreateCreateCreateCreateCreateCreateCreateCreateCreateCreateCreateCreateCreateCreateCreateCreateCreateCreateCreateCreateCreateCreateCreateCreateCreateCreateCreateCreateCreateCreateCreateCreateCreateCreateCreateCreateCreateCreateCreateCreateCreateCreateCreateCreateCreateCreateCreateCreateCreateCreateCreateCreateCreateCreateCreateCreateCreateCreateCreateCreateCreateCreateCreateCreateCreateCreateCreateCreateCreateCreateCreateCreateCreateCreateCreateCreateCreateCreateCreateCreateCreateCreateCreateCreateCreateCreateCreateCreateCreateCreateCreateCreateCreateCreateCreateCreateCreateCreateCreateCreateCreateCreateCreateCreateCreateCreateCreateCreateCreateCreateCreateCreateCreateCreateCreateCreateCreateCreateCreateCreateCreateCreateCreateCreateCreateCreateCreateCreateCreateCreateCreateCreateCreateCreateCreateCreateCreateCreateCreateCreateCreateCreateCreateCreateCreateCreateCreateCreateCreateCreateCreateCreateCreateCreateCreateCreateCreateCreateCreateCreateCreateCreateCreateCreateCreateCreateCreateCreateCreateCreateCreateCreateCreateCreateCreateCreateCreateCreateCreateCreateCreateCreateCreateCreateCreateCreateCreateCreateCreateCreateCreateCreateCreateCreateCreateCreateCreateCreateCreateCreateCreateCreateCreateCreateCreateCreateCreateCreateCreateCreateCreateCreateCreateCreateCreateCreateCreateCreateCreateCreateCreateCreateCreateCreateCreateCreateCreateCreateCreateCreateCreateCreateCreateCreateCreateCreateCreateCreateCreateCreateCreateCreateCreateCreateCreateCreateCreateCreateCreateCreateCreateCreateCreateCreateCreateCreateCreateCreateCreateCreateCreateCreateCreateCreateCreateCreateCreateCreateCreateCreateCreateCreateCreateCreateCreateCreateCreateCreateCreateCreateCreateCreateCreateCreateCreateCreateCreateCreateCreateCreateCreateCreateCreateCreateCreateCreateCreateCreateCreateCreateCreateCreateCreateCreateCreateCreateCreateCreateCreateCreateCreateCreateCreateCreateCreateCreateCreateCreateCreateCreateCreateCreateCreateCreateCreateCreateCreateCreateCreateCreateCreateCreateCreateCreateCreateCreateCreateCreateCreateCreateCreateCreateCreateCreateCreateCreateCreateCreateCreateCreateCreat