// File: nmmmnu[P]HM3/test/test_stringimploder.cc
// Function: test_stringimploder()
static int test_stringimploder(){
	StringImploder imploder;

	using container = std::vector<std::string>;

	assert(imploder(container{ "hello", "world" },	' ') == "hello world"	);
	assert(imploder(container{ "how", "are", "u" },	' ') == "how are u"	);
	assert(imploder(container{ "I", "am", "OK" },	'.') == "I.am.OK"	);

	return 0;
}

// Assembly:
subq $0x398, %rsp            # imm = 0x398
movb $0x1, 0x2ea(%rsp)
leaq 0x308(%rsp), %rax
movq %rax, 0x168(%rsp)
movq %rax, 0x300(%rsp)
leaq 0x2ff(%rsp), %rdi
movq %rdi, 0x170(%rsp)
callq 0x1180
movq 0x168(%rsp), %rdi
movq 0x170(%rsp), %rdx
leaq 0x1d11(%rip), %rsi      # 0x3004
callq 0x1140
jmp 0x12fa
leaq 0x328(%rsp), %rax
movq %rax, 0x158(%rsp)
movq %rax, 0x300(%rsp)
leaq 0x2eb(%rsp), %rdi
movq %rdi, 0x160(%rsp)
callq 0x1180
movq 0x158(%rsp), %rdi
movq 0x160(%rsp), %rdx
leaq 0x1cd2(%rip), %rsi      # 0x3010
callq 0x1140
jmp 0x1345
movb $0x0, 0x2ea(%rsp)
leaq 0x308(%rsp), %rax
movq %rax, 0x348(%rsp)
movq $0x2, 0x350(%rsp)
leaq 0x2e9(%rsp), %rdi
movq %rdi, 0x150(%rsp)
callq 0x1f20
movq 0x150(%rsp), %rcx
movq 0x348(%rsp), %rsi
movq 0x350(%rsp), %rdx
leaq 0x358(%rsp), %rdi
callq 0x1f30
jmp 0x13a5
leaq 0x370(%rsp), %rdi
leaq 0x397(%rsp), %rsi
leaq 0x358(%rsp), %rdx
movl $0x20, %ecx
callq 0x1df0
jmp 0x13c9
leaq 0x1c3a(%rip), %rsi      # 0x300a
leaq 0x370(%rsp), %rdi
callq 0x1dc0
movb %al, 0x14f(%rsp)
jmp 0x13e6
movb 0x14f(%rsp), %al
testb $0x1, %al
jne 0x13f3
jmp 0x13f8
jmp 0x14a1
leaq 0x1c17(%rip), %rdi      # 0x3016
leaq 0x1c4e(%rip), %rsi      # 0x3054
movl $0xc, %edx
leaq 0x1c5e(%rip), %rcx      # 0x3070
callq 0x10b0
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x2f0(%rsp)
movl %eax, 0x2ec(%rsp)
jmp 0x176a
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x2f0(%rsp)
movl %eax, 0x2ec(%rsp)
jmp 0x175d
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x2f0(%rsp)
movl %eax, 0x2ec(%rsp)
jmp 0x16fc
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x2f0(%rsp)
movl %eax, 0x2ec(%rsp)
jmp 0x16ef
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x2f0(%rsp)
movl %eax, 0x2ec(%rsp)
leaq 0x370(%rsp), %rdi
callq 0x10a0
jmp 0x16ef
leaq 0x370(%rsp), %rdi
callq 0x10a0
leaq 0x358(%rsp), %rdi
callq 0x1fc0
leaq 0x2e9(%rsp), %rdi
callq 0x2020
leaq 0x308(%rsp), %rax
movq %rax, 0x138(%rsp)
addq $0x40, %rax
movq %rax, 0x140(%rsp)
movq 0x140(%rsp), %rdi
addq $-0x20, %rdi
movq %rdi, 0x130(%rsp)
callq 0x10a0
movq 0x138(%rsp), %rcx
movq 0x130(%rsp), %rax
cmpq %rcx, %rax
movq %rax, 0x140(%rsp)
jne 0x14e4
leaq 0x2eb(%rsp), %rdi
callq 0x1130
leaq 0x2ff(%rsp), %rdi
callq 0x1130
movb $0x1, 0x234(%rsp)
leaq 0x240(%rsp), %rax
movq %rax, 0x120(%rsp)
movq %rax, 0x238(%rsp)
leaq 0x237(%rsp), %rdi
movq %rdi, 0x128(%rsp)
callq 0x1180
movq 0x120(%rsp), %rdi
movq 0x128(%rsp), %rdx
leaq 0x1b0a(%rip), %rsi      # 0x308a
callq 0x1140
jmp 0x1587
leaq 0x260(%rsp), %rax
movq %rax, 0x110(%rsp)
movq %rax, 0x238(%rsp)
leaq 0x236(%rsp), %rdi
movq %rdi, 0x118(%rsp)
callq 0x1180
movq 0x110(%rsp), %rdi
movq 0x118(%rsp), %rdx
leaq 0x1ac3(%rip), %rsi      # 0x308e
callq 0x1140
jmp 0x15d2
leaq 0x280(%rsp), %rax
movq %rax, 0x100(%rsp)
movq %rax, 0x238(%rsp)
leaq 0x235(%rsp), %rdi
movq %rdi, 0x108(%rsp)
callq 0x1180
movq 0x100(%rsp), %rdi
movq 0x108(%rsp), %rdx
leaq 0x1a84(%rip), %rsi      # 0x309a
callq 0x1140
jmp 0x161d
movb $0x0, 0x234(%rsp)
leaq 0x240(%rsp), %rax
movq %rax, 0x2a0(%rsp)
movq $0x3, 0x2a8(%rsp)
leaq 0x233(%rsp), %rdi
movq %rdi, 0xf8(%rsp)
callq 0x1f20
movq 0xf8(%rsp), %rcx
movq 0x2a0(%rsp), %rsi
movq 0x2a8(%rsp), %rdx
leaq 0x2b0(%rsp), %rdi
callq 0x1f30
jmp 0x167d
leaq 0x2c8(%rsp), %rdi
leaq 0x397(%rsp), %rsi
leaq 0x2b0(%rsp), %rdx
movl $0x20, %ecx
callq 0x1df0
jmp 0x16a1
leaq 0x19ea(%rip), %rsi      # 0x3092
leaq 0x2c8(%rsp), %rdi
callq 0x1dc0
movb %al, 0xf7(%rsp)
jmp 0x16be
movb 0xf7(%rsp), %al
testb $0x1, %al
jne 0x16cb
jmp 0x16d0
jmp 0x1880
leaq 0x19c5(%rip), %rdi      # 0x309c
leaq 0x1976(%rip), %rsi      # 0x3054
movl $0xd, %edx
leaq 0x1986(%rip), %rcx      # 0x3070
callq 0x10b0
leaq 0x358(%rsp), %rdi
callq 0x1fc0
leaq 0x2e9(%rsp), %rdi
callq 0x2020
leaq 0x308(%rsp), %rax
movq %rax, 0xe0(%rsp)
addq $0x40, %rax
movq %rax, 0xe8(%rsp)
movq 0xe8(%rsp), %rdi
addq $-0x20, %rdi
movq %rdi, 0xd8(%rsp)
callq 0x10a0
movq 0xe0(%rsp), %rcx
movq 0xd8(%rsp), %rax
cmpq %rcx, %rax
movq %rax, 0xe8(%rsp)
jne 0x1725
jmp 0x175d
leaq 0x2eb(%rsp), %rdi
callq 0x1130
leaq 0x2ff(%rsp), %rdi
callq 0x1130
testb $0x1, 0x2ea(%rsp)
jne 0x1783
jmp 0x17d8
movq 0x300(%rsp), %rax
leaq 0x308(%rsp), %rcx
cmpq %rax, %rcx
movq %rax, 0xd0(%rsp)
je 0x17d6
movq 0xd0(%rsp), %rdi
addq $-0x20, %rdi
movq %rdi, 0xc8(%rsp)
callq 0x10a0
movq 0xc8(%rsp), %rax
leaq 0x308(%rsp), %rcx
cmpq %rcx, %rax
movq %rax, 0xd0(%rsp)
jne 0x17a0
jmp 0x17d8
jmp 0x1db2
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x2f0(%rsp)
movl %eax, 0x2ec(%rsp)
jmp 0x1b42
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x2f0(%rsp)
movl %eax, 0x2ec(%rsp)
jmp 0x1b35
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x2f0(%rsp)
movl %eax, 0x2ec(%rsp)
jmp 0x1b28
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x2f0(%rsp)
movl %eax, 0x2ec(%rsp)
jmp 0x1adc
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x2f0(%rsp)
movl %eax, 0x2ec(%rsp)
jmp 0x1acf
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x2f0(%rsp)
movl %eax, 0x2ec(%rsp)
leaq 0x2c8(%rsp), %rdi
callq 0x10a0
jmp 0x1acf
leaq 0x2c8(%rsp), %rdi
callq 0x10a0
leaq 0x2b0(%rsp), %rdi
callq 0x1fc0
leaq 0x233(%rsp), %rdi
callq 0x2020
leaq 0x240(%rsp), %rax
movq %rax, 0xb8(%rsp)
addq $0x60, %rax
movq %rax, 0xc0(%rsp)
movq 0xc0(%rsp), %rdi
addq $-0x20, %rdi
movq %rdi, 0xb0(%rsp)
callq 0x10a0
movq 0xb8(%rsp), %rcx
movq 0xb0(%rsp), %rax
cmpq %rcx, %rax
movq %rax, 0xc0(%rsp)
jne 0x18c3
leaq 0x235(%rsp), %rdi
callq 0x1130
leaq 0x236(%rsp), %rdi
callq 0x1130
leaq 0x237(%rsp), %rdi
callq 0x1130
movb $0x1, 0x17c(%rsp)
leaq 0x188(%rsp), %rax
movq %rax, 0xa0(%rsp)
movq %rax, 0x180(%rsp)
leaq 0x17f(%rsp), %rdi
movq %rdi, 0xa8(%rsp)
callq 0x1180
movq 0xa0(%rsp), %rdi
movq 0xa8(%rsp), %rdx
leaq 0x176d(%rip), %rsi      # 0x30d9
callq 0x1140
jmp 0x1973
leaq 0x1a8(%rsp), %rax
movq %rax, 0x90(%rsp)
movq %rax, 0x180(%rsp)
leaq 0x17e(%rsp), %rdi
movq %rdi, 0x98(%rsp)
callq 0x1180
movq 0x90(%rsp), %rdi
movq 0x98(%rsp), %rdx
leaq 0x1724(%rip), %rsi      # 0x30db
callq 0x1140
jmp 0x19be
leaq 0x1c8(%rsp), %rax
movq %rax, 0x80(%rsp)
movq %rax, 0x180(%rsp)
leaq 0x17d(%rsp), %rdi
movq %rdi, 0x88(%rsp)
callq 0x1180
movq 0x80(%rsp), %rdi
movq 0x88(%rsp), %rdx
leaq 0x16e1(%rip), %rsi      # 0x30e3
callq 0x1140
jmp 0x1a09
movb $0x0, 0x17c(%rsp)
leaq 0x188(%rsp), %rax
movq %rax, 0x1e8(%rsp)
movq $0x3, 0x1f0(%rsp)
leaq 0x17b(%rsp), %rdi
movq %rdi, 0x78(%rsp)
callq 0x1f20
movq 0x78(%rsp), %rcx
movq 0x1e8(%rsp), %rsi
movq 0x1f0(%rsp), %rdx
leaq 0x1f8(%rsp), %rdi
callq 0x1f30
jmp 0x1a63
leaq 0x210(%rsp), %rdi
leaq 0x397(%rsp), %rsi
leaq 0x1f8(%rsp), %rdx
movl $0x2e, %ecx
callq 0x1df0
jmp 0x1a87
leaq 0x1650(%rip), %rsi      # 0x30de
leaq 0x210(%rsp), %rdi
callq 0x1dc0
movb %al, 0x77(%rsp)
jmp 0x1aa1
movb 0x77(%rsp), %al
testb $0x1, %al
jne 0x1aab
jmp 0x1ab0
jmp 0x1c49
leaq 0x162f(%rip), %rdi      # 0x30e6
leaq 0x1596(%rip), %rsi      # 0x3054
movl $0xe, %edx
leaq 0x15a6(%rip), %rcx      # 0x3070
callq 0x10b0
leaq 0x2b0(%rsp), %rdi
callq 0x1fc0
leaq 0x233(%rsp), %rdi
callq 0x2020
leaq 0x240(%rsp), %rax
movq %rax, 0x60(%rsp)
addq $0x60, %rax
movq %rax, 0x68(%rsp)
movq 0x68(%rsp), %rdi
addq $-0x20, %rdi
movq %rdi, 0x58(%rsp)
callq 0x10a0
movq 0x60(%rsp), %rcx
movq 0x58(%rsp), %rax
cmpq %rcx, %rax
movq %rax, 0x68(%rsp)
jne 0x1aff
jmp 0x1b28
leaq 0x235(%rsp), %rdi
callq 0x1130
leaq 0x236(%rsp), %rdi
callq 0x1130
leaq 0x237(%rsp), %rdi
callq 0x1130
testb $0x1, 0x234(%rsp)
jne 0x1b5b
jmp 0x1ba1
movq 0x238(%rsp), %rax
leaq 0x240(%rsp), %rcx
cmpq %rax, %rcx
movq %rax, 0x50(%rsp)
je 0x1b9f
movq 0x50(%rsp), %rdi
addq $-0x20, %rdi
movq %rdi, 0x48(%rsp)
callq 0x10a0
movq 0x48(%rsp), %rax
leaq 0x240(%rsp), %rcx
cmpq %rcx, %rax
movq %rax, 0x50(%rsp)
jne 0x1b75
jmp 0x1ba1
jmp 0x1db2
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x2f0(%rsp)
movl %eax, 0x2ec(%rsp)
jmp 0x1d51
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x2f0(%rsp)
movl %eax, 0x2ec(%rsp)
jmp 0x1d44
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x2f0(%rsp)
movl %eax, 0x2ec(%rsp)
jmp 0x1d37
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x2f0(%rsp)
movl %eax, 0x2ec(%rsp)
jmp 0x1ceb
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x2f0(%rsp)
movl %eax, 0x2ec(%rsp)
jmp 0x1cde
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x2f0(%rsp)
movl %eax, 0x2ec(%rsp)
leaq 0x210(%rsp), %rdi
callq 0x10a0
jmp 0x1cde
leaq 0x210(%rsp), %rdi
callq 0x10a0
leaq 0x1f8(%rsp), %rdi
callq 0x1fc0
leaq 0x17b(%rsp), %rdi
callq 0x2020
leaq 0x188(%rsp), %rax
movq %rax, 0x38(%rsp)
addq $0x60, %rax
movq %rax, 0x40(%rsp)
movq 0x40(%rsp), %rdi
addq $-0x20, %rdi
movq %rdi, 0x30(%rsp)
callq 0x10a0
movq 0x38(%rsp), %rcx
movq 0x30(%rsp), %rax
cmpq %rcx, %rax
movq %rax, 0x40(%rsp)
jne 0x1c86
leaq 0x17d(%rsp), %rdi
callq 0x1130
leaq 0x17e(%rsp), %rdi
callq 0x1130
leaq 0x17f(%rsp), %rdi
callq 0x1130
xorl %eax, %eax
addq $0x398, %rsp            # imm = 0x398
retq
leaq 0x1f8(%rsp), %rdi
callq 0x1fc0
leaq 0x17b(%rsp), %rdi
callq 0x2020
leaq 0x188(%rsp), %rax
movq %rax, 0x20(%rsp)
addq $0x60, %rax
movq %rax, 0x28(%rsp)
movq 0x28(%rsp), %rdi
addq $-0x20, %rdi
movq %rdi, 0x18(%rsp)
callq 0x10a0
movq 0x20(%rsp), %rcx
movq 0x18(%rsp), %rax
cmpq %rcx, %rax
movq %rax, 0x28(%rsp)
jne 0x1d0e
jmp 0x1d37
leaq 0x17d(%rsp), %rdi
callq 0x1130
leaq 0x17e(%rsp), %rdi
callq 0x1130
leaq 0x17f(%rsp), %rdi
callq 0x1130
testb $0x1, 0x17c(%rsp)
jne 0x1d6a
jmp 0x1db0
movq 0x180(%rsp), %rax
leaq 0x188(%rsp), %rcx
cmpq %rax, %rcx
movq %rax, 0x10(%rsp)
je 0x1dae
movq 0x10(%rsp), %rdi
addq $-0x20, %rdi
movq %rdi, 0x8(%rsp)
callq 0x10a0
movq 0x8(%rsp), %rax
leaq 0x188(%rsp), %rcx
cmpq %rcx, %rax
movq %rax, 0x10(%rsp)
jne 0x1d84
jmp 0x1db0
jmp 0x1db2
movq 0x2f0(%rsp), %rdi
callq 0x1170
nop