// File: /workspace/github_cpp_makefile_star2_O1/deadshot465[P]OwoifyCpp/./owoify.h
// Function: Owoifier::owoify(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>> const&, Owoifier::OwoifyLevel)
static std::wstring owoify(const std::string& value, OwoifyLevel level = OwoifyLevel::Owo)
	{
		auto word_regex = std::basic_regex(L"[^\\s]+", std::regex_constants::ECMAScript | std::regex_constants::optimize);
		
		auto w_value = stringToWstring(value);
		
		auto word_begin = std::wsregex_iterator(w_value.cbegin(), w_value.cend(), word_regex);
		auto word_end = std::wsregex_iterator();

		auto space_regex = std::basic_regex(L"\\s+", std::regex_constants::ECMAScript | std::regex_constants::optimize);

		auto space_begin = std::wsregex_iterator(w_value.cbegin(), w_value.cend(), space_regex);
		auto space_end = std::wsregex_iterator();

		auto words = std::deque<Word>();
		std::transform(word_begin, word_end, std::back_inserter(words),
			[&](const std::wsmatch& match) {
				return Word(match.str());
			});

		auto spaces = std::deque<Word>();
		std::transform(space_begin, space_end, std::back_inserter(spaces),
			[&](const std::wsmatch& match) {
				return Word(match.str());
			});

		auto transformed_words = std::deque<Word>();
		std::transform(words.begin(), words.end(), std::back_inserter(transformed_words),
			[&](Word& word) {

				for (const auto& func : Utility::m_specificWordMappingList)
				{
					word = func(word);
				}

				switch (level)
				{
				case Owoifier::OwoifyLevel::Uvu:
					for (const auto& func : Utility::m_uvuMappingList)
					{
						word = func(word);
					}
				case Owoifier::OwoifyLevel::Uwu:
					for (const auto& func : Utility::m_uwuMappingList)
					{
						word = func(word);
					}
				case Owoifier::OwoifyLevel::Owo:
					for (const auto& func : Utility::m_owoMappingList)
					{
						word = func(word);
					}
					break;
				default:
					break;
				}
				
				return word;
			});

		auto result = Utility::interleaveArrays(words, spaces);
		return join(result);
	}

// Assembly:
pushq %r14
pushq %rbx
subq $0x3f8, %rsp            # imm = 0x3F8
movq %rsi, %r14
movq %rdi, %rbx
movl %edx, 0xc(%rsp)
leaq 0x13d47(%rip), %rsi     # 0x1de30
leaq 0xd0(%rsp), %rdi
movl $0x14, %edx
callq 0x7a22
leaq 0x10(%rsp), %rdi
movq %r14, %rsi
callq 0xfd88
movq 0x10(%rsp), %rsi
movq 0x18(%rsp), %rax
leaq (%rsi,%rax,4), %rdx
leaq 0x200(%rsp), %rdi
leaq 0xd0(%rsp), %rcx
xorl %r8d, %r8d
callq 0xac30
xorps %xmm0, %xmm0
movaps %xmm0, 0xa0(%rsp)
movaps %xmm0, 0x90(%rsp)
movaps %xmm0, 0x80(%rsp)
movaps %xmm0, 0x70(%rsp)
leaq 0x13cf7(%rip), %rsi     # 0x1de4c
leaq 0xb0(%rsp), %rdi
movl $0x14, %edx
callq 0x7a22
movq 0x10(%rsp), %rsi
movq 0x18(%rsp), %rax
leaq (%rsi,%rax,4), %rdx
leaq 0x1c0(%rsp), %rdi
leaq 0xb0(%rsp), %rcx
xorl %r8d, %r8d
callq 0xac30
xorps %xmm0, %xmm0
movaps %xmm0, 0x60(%rsp)
movaps %xmm0, 0x50(%rsp)
movaps %xmm0, 0x40(%rsp)
movaps %xmm0, 0x30(%rsp)
leaq 0xf0(%rsp), %rdi
movaps %xmm0, 0x40(%rdi)
movaps %xmm0, 0x30(%rdi)
movaps %xmm0, 0x20(%rdi)
movaps %xmm0, 0x10(%rdi)
movaps %xmm0, (%rdi)
xorl %esi, %esi
callq 0x104d2
leaq 0x220(%rsp), %rsi
movups -0x20(%rsi), %xmm0
movups -0x14(%rsi), %xmm1
leaq 0x1a0(%rsp), %rdi
movups %xmm1, -0x14(%rdi)
movaps %xmm0, -0x20(%rdi)
callq 0xbc82
leaq 0x90(%rsp), %rsi
movq 0x238(%rsp), %rax
movq %rax, 0x1b8(%rsp)
movaps -0x20(%rsi), %xmm0
leaq 0x2a0(%rsp), %rdi
movaps %xmm0, -0x20(%rdi)
movups -0x14(%rsi), %xmm0
movups %xmm0, -0x14(%rdi)
callq 0xbc82
movq 0xa8(%rsp), %rax
leaq 0x280(%rsp), %rsi
movq %rax, 0x38(%rsi)
leaq 0x180(%rsp), %rdi
leaq 0xf0(%rsp), %rdx
callq 0xfe0c
movq 0x2a0(%rsp), %rdi
testq %rdi, %rdi
je 0xa266
movq 0x2b0(%rsp), %rsi
subq %rdi, %rsi
callq 0x5300
movq 0x1a0(%rsp), %rdi
testq %rdi, %rdi
je 0xa283
movq 0x1b0(%rsp), %rsi
subq %rdi, %rsi
callq 0x5300
xorps %xmm0, %xmm0
leaq 0x2c0(%rsp), %rdi
movaps %xmm0, 0x40(%rdi)
movaps %xmm0, 0x30(%rdi)
movaps %xmm0, 0x20(%rdi)
movaps %xmm0, 0x10(%rdi)
movaps %xmm0, (%rdi)
xorl %esi, %esi
callq 0x104d2
leaq 0x1e0(%rsp), %rsi
movups -0x20(%rsi), %xmm0
movups -0x14(%rsi), %xmm1
leaq 0x160(%rsp), %rdi
movups %xmm1, -0x14(%rdi)
movaps %xmm0, -0x20(%rdi)
callq 0xbc82
leaq 0x50(%rsp), %rsi
movq 0x1f8(%rsp), %rax
movq %rax, 0x178(%rsp)
movaps -0x20(%rsi), %xmm0
leaq 0x260(%rsp), %rdi
movaps %xmm0, -0x20(%rdi)
movups -0x14(%rsi), %xmm0
movups %xmm0, -0x14(%rdi)
callq 0xbc82
movq 0x68(%rsp), %rax
leaq 0x240(%rsp), %rsi
movq %rax, 0x38(%rsi)
leaq 0x140(%rsp), %rdi
leaq 0x2c0(%rsp), %rdx
callq 0xff40
movq 0x260(%rsp), %rdi
testq %rdi, %rdi
je 0xa342
movq 0x270(%rsp), %rsi
subq %rdi, %rsi
callq 0x5300
movq 0x160(%rsp), %rdi
testq %rdi, %rdi
je 0xa35f
movq 0x170(%rsp), %rsi
subq %rdi, %rsi
callq 0x5300
xorps %xmm0, %xmm0
leaq 0x310(%rsp), %rdi
movaps %xmm0, 0x40(%rdi)
movaps %xmm0, 0x30(%rdi)
movaps %xmm0, 0x20(%rdi)
movaps %xmm0, 0x10(%rdi)
movaps %xmm0, (%rdi)
xorl %esi, %esi
callq 0x104d2
movaps 0x100(%rsp), %xmm0
movaps 0x110(%rsp), %xmm1
movaps 0x120(%rsp), %xmm2
movaps 0x130(%rsp), %xmm3
leaq 0x3d0(%rsp), %rdi
movaps %xmm0, (%rdi)
movaps %xmm1, 0x10(%rdi)
leaq 0x3b0(%rsp), %rsi
movaps %xmm2, (%rsi)
movaps %xmm3, 0x10(%rsi)
leaq 0x310(%rsp), %rdx
leaq 0xc(%rsp), %rcx
callq 0x10074
leaq 0x360(%rsp), %rdi
leaq 0xf0(%rsp), %rsi
leaq 0x2c0(%rsp), %rdx
callq 0x10148
leaq 0x360(%rsp), %rsi
movq %rbx, %rdi
callq 0x103b8
leaq 0x360(%rsp), %rdi
callq 0x10488
leaq 0x310(%rsp), %rdi
callq 0x10488
leaq 0x2c0(%rsp), %rdi
callq 0x10488
leaq 0xf0(%rsp), %rdi
callq 0x10488
movq 0x50(%rsp), %rdi
testq %rdi, %rdi
je 0xa44c
movq 0x60(%rsp), %rsi
subq %rdi, %rsi
callq 0x5300
movq 0x1e0(%rsp), %rdi
testq %rdi, %rdi
je 0xa469
movq 0x1f0(%rsp), %rsi
subq %rdi, %rsi
callq 0x5300
leaq 0xb0(%rsp), %rdi
callq 0x7a8a
movq 0x90(%rsp), %rdi
testq %rdi, %rdi
je 0xa493
movq 0xa0(%rsp), %rsi
subq %rdi, %rsi
callq 0x5300
movq 0x220(%rsp), %rdi
testq %rdi, %rdi
je 0xa4b0
movq 0x230(%rsp), %rsi
subq %rdi, %rsi
callq 0x5300
leaq 0x20(%rsp), %rax
movq -0x10(%rax), %rdi
cmpq %rax, %rdi
je 0xa4d0
movq 0x20(%rsp), %rax
leaq 0x4(,%rax,4), %rsi
callq 0x5300
leaq 0xd0(%rsp), %rdi
callq 0x7a8a
movq %rbx, %rax
addq $0x3f8, %rsp            # imm = 0x3F8
popq %rbx
popq %r14
retq
movq %rax, %rbx
leaq 0x360(%rsp), %rdi
callq 0x10488
jmp 0xa502
jmp 0xa4ff
movq %rax, %rbx
leaq 0x310(%rsp), %rdi
callq 0x10488
jmp 0xa55a
jmp 0xa557
movq %rax, %rbx
movq 0x260(%rsp), %rdi
testq %rdi, %rdi
je 0xa538
movq 0x270(%rsp), %rsi
subq %rdi, %rsi
callq 0x5300
jmp 0xa538
movq %rax, %rbx
movq 0x160(%rsp), %rdi
testq %rdi, %rdi
je 0xa55a
movq 0x170(%rsp), %rsi
subq %rdi, %rsi
callq 0x5300
jmp 0xa55a
movq %rax, %rbx
leaq 0x2c0(%rsp), %rdi
callq 0x10488
jmp 0xa5b2
jmp 0xa5af
movq %rax, %rbx
movq 0x2a0(%rsp), %rdi
testq %rdi, %rdi
je 0xa590
movq 0x2b0(%rsp), %rsi
subq %rdi, %rsi
callq 0x5300
jmp 0xa590
movq %rax, %rbx
movq 0x1a0(%rsp), %rdi
testq %rdi, %rdi
je 0xa5b2
movq 0x1b0(%rsp), %rsi
subq %rdi, %rsi
callq 0x5300
jmp 0xa5b2
movq %rax, %rbx
leaq 0xf0(%rsp), %rdi
callq 0x10488
movq 0x50(%rsp), %rdi
testq %rdi, %rdi
je 0xa5d6
movq 0x60(%rsp), %rsi
subq %rdi, %rsi
callq 0x5300
movq 0x1e0(%rsp), %rdi
testq %rdi, %rdi
je 0xa5f3
movq 0x1f0(%rsp), %rsi
subq %rdi, %rsi
callq 0x5300
leaq 0xb0(%rsp), %rdi
callq 0x7a8a
movq 0x90(%rsp), %rdi
testq %rdi, %rdi
je 0xa61d
movq 0xa0(%rsp), %rsi
subq %rdi, %rsi
callq 0x5300
movq 0x220(%rsp), %rdi
testq %rdi, %rdi
je 0xa63a
movq 0x230(%rsp), %rsi
subq %rdi, %rsi
callq 0x5300
leaq 0x20(%rsp), %rax
movq -0x10(%rax), %rdi
cmpq %rax, %rdi
je 0xa65a
movq 0x20(%rsp), %rax
leaq 0x4(,%rax,4), %rsi
callq 0x5300
leaq 0xd0(%rsp), %rdi
callq 0x7a8a
movq %rbx, %rdi
callq 0x5470
movq %rax, %rbx
jmp 0xa5bf
movq %rax, %rbx
jmp 0xa5f3
movq %rax, %rbx
jmp 0xa600
movq %rax, %rbx
jmp 0xa63a
movq %rax, %rbx
jmp 0xa65a
nop