#define NULL ((void *)0)
typedef unsigned long size_t; // Customize by platform.
typedef long intptr_t;
typedef unsigned long uintptr_t;
typedef long scalar_t__; // Either arithmetic or pointer type.
/* By default, we understand bool (as a convenience). */
typedef int bool;
#define false 0
#define true 1

/* Forward declarations */

/* Type definitions */

/* Variables and functions */
int /*<<< orphan*/ writeBuffer(char *);
void loadMap(int mapId) {
  switch (mapId) {
  case 10:
    writeBuffer("############1#############\n"
                "#           .            #\n"
                "#           .            #\n"
                "#           . #Factory#  #\n"
                "#  #Pub#    . ###(})###  #\n"
                "#  #({)#    .     .      #\n"
                "#    .      .     .      #\n"
                "#    ..............      #\n"
                "#            .           #\n"
                "#            .           #\n"
                "#############0############\n");
    break;
  case 11:
    writeBuffer("##########################\n"
                "#                     #{##\n"
                "#                     #.##\n"
                "#######1#########      .##\n"
                "#      .        #        #\n"
                "#      .        #        #\n"
                "# .......       ##########\n"
                "#       .                #\n"
                "#       ...............  #\n"
                "#            .           #\n"
                "#############0############\n");
    break;
  case 12:
    writeBuffer("##########################\n"
                "#          #             #\n"
                "#           #            #\n"
                "#            ##          #\n"
                "#         ...........    #\n"
                "#############  . #  .    #\n"
                "# /----\\    #  . #  .    #\n"
                "#-[::::]-#  #  . #  .    #\n"
                "# \\----/ #     . #  .    #\n"
                "#        #       #  .    #\n"
                "####################0#####\n");
    break;
  case 20:
    writeBuffer("##################4#######\n"
                "#                 .      #\n"
                "#                 .      #\n"
                "#                 .      #\n"
                "#  #Shop#         .      #\n"
                "#  ##({)#   .............3\n"
                "#     .     .            #\n"
                "2............            #\n"
                "#           .            #\n"
                "#           .            #\n"
                "############1#############\n");
    break;
  case 30:
    writeBuffer("###############           \n"
                "#   #Mansion# #           \n"
                "#   ###({)### #           \n"
                "#       .     #           \n"
                "#       .     ########    \n"
                "1.........    #      #    \n"
                "#        .......     #    \n"
                "###############      #    \n"
                "            #        #    \n"
                "            ##########    \n"
                "                          \n");
    break;
  case 40:
    writeBuffer("#########3################\n"
                "######## ...   ###########\n"
                "#########  .   ###########\n"
                "##########     . . #######\n"
                "########## ..  #   . .####\n"
                "##########  .  ####({)####\n"
                "##########  .. ###  ## ###\n"
                "#########     .. .   .. .1\n"
                "##.....##### .  ##########\n"
                "##.###.#####.. ###########\n"
                "##5###4#####2#############\n");
    break;
  case 41:
    writeBuffer("                          \n"
                "                   #{#    \n"
                "                   #.#    \n"
                "                   #.#    \n"
                "                   #.#    \n"
                "                   #.#    \n"
                "                   #.#    \n"
                "                   #.#    \n"
                "                   #1#    \n"
                "                          \n"
                "                          \n");
  }
}


x86 assembly (clang, -O0):
<loadMap>:
push   %rbp
mov    %rsp,%rbp
sub    $0x10,%rsp
mov    %edi,-0x4(%rbp)
mov    -0x4(%rbp),%eax
add    $0xfffffff6,%eax
mov    %eax,%ecx
mov    %rcx,-0x10(%rbp)
sub    $0x1f,%eax
ja     11b6 <loadMap+0xa6>
mov    -0x10(%rbp),%rax
lea    0xec5(%rip),%rcx
movslq (%rcx,%rax,4),%rax
add    %rcx,%rax
jmp    *%rax
lea    0xf35(%rip),%rdi
call   1030 <writeBuffer@plt>
jmp    11b6 <loadMap+0xa6>
lea    0x104e(%rip),%rdi
call   1030 <writeBuffer@plt>
jmp    11b6 <loadMap+0xa6>
lea    0x1167(%rip),%rdi
call   1030 <writeBuffer@plt>
jmp    11b6 <loadMap+0xa6>
lea    0x1280(%rip),%rdi
call   1030 <writeBuffer@plt>
jmp    11b6 <loadMap+0xa6>
lea    0x1399(%rip),%rdi
call   1030 <writeBuffer@plt>
jmp    11b6 <loadMap+0xa6>
lea    0x14b2(%rip),%rdi
call   1030 <writeBuffer@plt>
jmp    11b6 <loadMap+0xa6>
lea    0x15cb(%rip),%rdi
call   1030 <writeBuffer@plt>
add    $0x10,%rsp
pop    %rbp
ret

x86 assembly (clang, -O2):
<loadMap>:
mov    %edi,%eax
add    $0xfffffff6,%eax
cmp    $0x1f,%eax
ja     1149 <loadMap+0x39>
lea    0xf5f(%rip),%rdi
lea    0xed8(%rip),%rcx
movslq (%rcx,%rax,4),%rax
add    %rcx,%rax
jmp    *%rax
lea    0x1072(%rip),%rdi
jmp    1030 <writeBuffer@plt>
lea    0x1190(%rip),%rdi
jmp    1030 <writeBuffer@plt>
ret
lea    0x12ad(%rip),%rdi
jmp    1030 <writeBuffer@plt>
lea    0x14f5(%rip),%rdi
jmp    1030 <writeBuffer@plt>
lea    0x1613(%rip),%rdi
jmp    1030 <writeBuffer@plt>
lea    0x13b3(%rip),%rdi
jmp    1030 <writeBuffer@plt>

LLVM IR (-O0):
@.str = [298 x i8] c"########################\0A# . #\0A# . #\0A# . #Factory# #\0A# #Pub# . ###(})### #\0A# #({)# . . #\0A# . . . #\0A# .............. #\0A# . #\0A# . #\0A########################\0A\00"
@.str.1 = [298 x i8] c"##########################\0A# #{##\0A# #.##\0A############### .##\0A# . # #\0A# . # #\0A# ....... ##########\0A# . #\0A# ............... #\0A# . #\0A########################\0A\00"
@.str.2 = [298 x i8] c"##########################\0A# # #\0A# # #\0A# ## #\0A# ........... #\0A############# . # . #\0A# /----\\ # . # . #\0A#-[::::]-# # . # . #\0A# \\----/ # . # . #\0A# # # . #\0A########################\0A\00"
@.str.3 = [298 x i8] c"########################\0A# . #\0A# . #\0A# . #\0A# #Shop# . #\0A# ##({)# .............3\0A# . . #\0A2............ #\0A# . #\0A# . #\0A########################\0A\00"
@.str.4 = [298 x i8] c"############### \0A# #Mansion# # \0A# ###({)### # \0A# . # \0A# . ######## \0A1......... # # \0A# ....... # \0A############### # \0A # # \0A ########## \0A \0A\00"
@.str.5 = [298 x i8] c"########################\0A######## ... ###########\0A######### . ###########\0A########## . . #######\0A########## .. # . .####\0A########## . ####({)####\0A########## .. ### ## ###\0A######### .. . .. .1\0A##.....##### . ##########\0A##.###.#####.. ###########\0A####################\0A\00"
@.str.6 = [298 x i8] c" \0A #{# \0A #.# \0A #.# \0A #.# \0A #.# \0A #.# \0A #.# \0A# \0A \0A \0A\00"
define void @loadMap(i32 %0) {
%2 = alloca i32
store i32 %0, i32* %2
%3 = load i32, i32* %2
switch i32 %3, label %18 [
i32 10, label %4
i32 11, label %6
i32 12, label %8
i32 20, label %10
i32 30, label %12
i32 40, label %14
i32 41, label %16
]
4: ; preds = %1
%5 = call i32 @writeBuffer(i8* getelementptr inbounds ([298 x i8], [298 x i8]* @.str, i64 0, i64 0))
br label %18
6: ; preds = %1
%7 = call i32 @writeBuffer(i8* getelementptr inbounds ([298 x i8], [298 x i8]* @.str.1, i64 0, i64 0))
br label %18
8: ; preds = %1
%9 = call i32 @writeBuffer(i8* getelementptr inbounds ([298 x i8], [298 x i8]* @.str.2, i64 0, i64 0))
br label %18
10: ; preds = %1
%11 = call i32 @writeBuffer(i8* getelementptr inbounds ([298 x i8], [298 x i8]* @.str.3, i64 0, i64 0))
br label %18
12: ; preds = %1
%13 = call i32 @writeBuffer(i8* getelementptr inbounds ([298 x i8], [298 x i8]* @.str.4, i64 0, i64 0))
br label %18
14: ; preds = %1
%15 = call i32 @writeBuffer(i8* getelementptr inbounds ([298 x i8], [298 x i8]* @.str.5, i64 0, i64 0))
br label %18
16: ; preds = %1
%17 = call i32 @writeBuffer(i8* getelementptr inbounds ([298 x i8], [298 x i8]* @.str.6, i64 0, i64 0))
br label %18
18: ; preds = %16, %1, %14, %12, %10, %8, %6, %4
ret void
}

LLVM IR (-O2):
@.str = [298 x i8] c"########################\0A# . #\0A# . #\0A# . #Factory# #\0A# #Pub# . ###(})### #\0A# #({)# . . #\0A# . . . #\0A# .............. #\0A# . #\0A# . #\0A########################\0A\00"
@.str.1 = [298 x i8] c"##########################\0A# #{##\0A# #.##\0A############### .##\0A# . # #\0A# . # #\0A# ....... ##########\0A# . #\0A# ............... #\0A# . #\0A########################\0A\00"
@.str.2 = [298 x i8] c"##########################\0A# # #\0A# # #\0A# ## #\0A# ........... #\0A############# . # . #\0A# /----\\ # . # . #\0A#-[::::]-# # . # . #\0A# \\----/ # . # . #\0A# # # . #\0A########################\0A\00"
@.str.3 = [298 x i8] c"########################\0A# . #\0A# . #\0A# . #\0A# #Shop# . #\0A# ##({)# .............3\0A# . . #\0A2............ #\0A# . #\0A# . #\0A########################\0A\00"
@.str.4 = [298 x i8] c"############### \0A# #Mansion# # \0A# ###({)### # \0A# . # \0A# . ######## \0A1......... # # \0A# ....... # \0A############### # \0A # # \0A ########## \0A \0A\00"
@.str.5 = [298 x i8] c"########################\0A######## ... ###########\0A######### . ###########\0A########## . . #######\0A########## .. # . .####\0A########## . ####({)####\0A########## .. ### ## ###\0A######### .. . .. .1\0A##.....##### . ##########\0A##.###.#####.. ###########\0A####################\0A\00"
@.str.6 = [298 x i8] c" \0A #{# \0A #.# \0A #.# \0A #.# \0A #.# \0A #.# \0A #.# \0A# \0A \0A \0A\00"
define void @loadMap(i32 %0) {
switch i32 %0, label %11 [
i32 10, label %8
i32 11, label %2
i32 12, label %3
i32 20, label %4
i32 30, label %5
i32 40, label %6
i32 41, label %7
]
2: ; preds = %1
br label %8
3: ; preds = %1
br label %8
4: ; preds = %1
br label %8
5: ; preds = %1
br label %8
6: ; preds = %1
br label %8
7: ; preds = %1
br label %8
8: ; preds = %1, %2, %3, %4, %5, %6, %7
%9 = phi i8* [ getelementptr inbounds ([298 x i8], [298 x i8]* @.str.6, i64 0, i64 0), %7 ], [ getelementptr inbounds ([298 x i8], [298 x i8]* @.str.5, i64 0, i64 0), %6 ], [ getelementptr inbounds ([298 x i8], [298 x i8]* @.str.4, i64 0, i64 0), %5 ], [ getelementptr inbounds ([298 x i8], [298 x i8]* @.str.3, i64 0, i64 0), %4 ], [ getelementptr inbounds ([298 x i8], [298 x i8]* @.str.2, i64 0, i64 0), %3 ], [ getelementptr inbounds ([298 x i8], [298 x i8]* @.str.1, i64 0, i64 0), %2 ], [ getelementptr inbounds ([298 x i8], [298 x i8]* @.str, i64 0, i64 0), %1 ]
%10 = tail call i32 @writeBuffer(i8* %9)
br label %11
11: ; preds = %8, %1
ret void
}