// Updated 18 March 2006. // Added a little routine. Frivolous describes it well. I'm not giving any clues as to how to find it. // // 11 March 2006. // Bug fix: // Mis-use of ran() // // Added: // Cheat mode - allow the computer to suggest a move (limited to 5 goes per game) // Routine adapted(stolen? borrowed?) from the YaBasic demo written by Marc-Oliver Ihm. // // 05 March 2006 // Bug Fix: // New words were being added to the dictionary twice or more. Local vars should remain // local :) And don't use restricted var names for strings :) // // Added: // Transparency to the user's cursor. Now the square under the cursor can be read. // Highlighted text - easier to read. // New end game routine - now shows how the scores are calculated. // Can now query the dictionary // // 04 March 2006 // Bug Fix: // If there was only one player the program couldn't decide who should start! // // Added: // Highlighting to indicate the word the computer is considering. // New, larger dictionary. // // 7th Aug 2005 // Added: Colour // // To Do: // Add sound - Mouse clicks, wrong moves, words that are successfully challenged etc. // Animate tiles when they are being shuffled // // Quicksort routine written by Jan // // Some of the bitmaps were created from the old black and white // bitmaps with Hermang Masilla Mattos' converter // // Use the keyboard to stear the cursor around the board or left click the // square where the first letter of the word to be placed will be. // Right clicking the board will give more options for the player. // The icons beside the rack will // 1. Place a word from left to right // 2. Place a word reading from top to bottom // 3. Cancel the selected square and allow a new square to be chosen // 4. Play the entered word. // // Through out the game questions are asked, either press 'n' or 'y' in // response or click the cross and tick icons. // // When playing a word the letters can either be typed from the keyboard // or the tiles at the bottom left of the screen can be clicked. // // The in-game instructions are very confused (I'm not good at explaining // things) so if anybody wishes to re-word them please feel free. :) // // The dictionary in UK English, please feel free to alter it. Because the dictionary is // separate from the program other languages can be substituted. // // If any bugs are found (and I'm convinced they are there) please report // them on the forum along with any suggestions and comments, thank you. Derek. // gosub init repeat if first_game = false then clear window draw_board$() end if randomize() repeat turn = int(ran(players + 1)) if players = 1 turn = 1 until(turn > 0 and turn <= players) repeat show_status() first_game = false if player$(turn, 2) = "" then this_go = players_move() else this_go = computers_move(false) end if if this_go = 0 then pass = pass + 1 comment(player$(turn, 1) + " passes.") pause 2 end if if this_go > 0 then comment(player$(turn, 1) + " plays " + this_go$ + " for " + str$(this_go) + " points.") sc(turn) = sc(turn) + this_go pass = 0 pause 2 end if if this_go = - 1 then comment(player$(turn, 1) + " has changed tiles.") pause 2 end if last_turn = turn turn = turn + 1 if turn > players turn = 1 until(pass = players or rack$(last_turn) = "") show_status() comment("Game over - press any key.") inkey$ if pass = players pass(true) if rack$(last_turn) = "" empty() inkey$ q$ = question$("Another go?") if q$ = "y" then rego = true gosub re_init else rego = false end if until(rego = false) quit() // sub empty() local left_over, n, w_score, x clear fill box 314, 4, 506, 296 x = 315 // y=y+25 w_score = sc(last_turn) for n = 1 to players if n = last_turn continue left_over = count_tiles(n) w_score = w_score + left_over sc(n) = sc(n) - left_over display_results(sc(n), left_over, x, 4 + ((n - 1) * 45), n) next n display_winner(sc(last_turn), w_score, x, 4 + ((last_turn - 1) * 45), last_turn) sc(last_turn) = w_score pass(false) end sub // sub pass(flag) local draw, high, left_over, n, winner, x local bl$, c$ local draw(players), s(players) if flag = true then comment("All players have passed, press any key for the scores.") inkey$ clear fill box 314, 4, 506, 296 end if x = 315 for n = 1 to players if flag = true then left_over = count_tiles(n) sc(n) = sc(n) - left_over display_results(sc(n), left_over, x, 4 + ((n - 1) * 45), n) end if if sc(n) > high then high = sc(n) winner = n elsif sc(n) = high then draw(n) = true draw(winner) = true draw = true end if next n if draw and players > 1 then c$ = "It's a draw between:" bl$ = string$() left$(bl$, len(c$)) = c$ c$ = bl$ for n = 1 to players if draw(n) then bl$ = string$() left$(bl$, len(player$(n, 1))) = player$(n, 1) c$ = c$ + bl$ end if next n end if if not draw and players > 1 then c$ = "The winner is " + player$(winner, 1) + " with " + str$(sc(winner)) + " points." end if if players = 1 then c$ = player$(1, 1) + " scores " + str$(sc(1)) + " points." end if comment(c$) end sub // sub display_results(new_score, left_over, x, y, players_idx) local old_score old_score = new_score + left_over my_text(x, y, player$(players_idx, 1) + " = ") my_text(x, y + 20, str$(old_score) + " - " + str$(left_over) + " = " + str$(new_score)) end sub // sub display_winner(old_score, new_score, x, y, players_idx) my_text(x, y, player$(players_idx, 1) + " = ") my_text(x, y + 20, str$(old_score) + " + " + str$(new_score - old_score) + " = " + str$(new_score)) end sub // sub string$() local n local b$ for n = 1 to 62 b$ = b$ + " " next n return b$ end sub // sub count_tiles(pl) local n, point, score print "pl = ", pl for n = 1 to len(rack$(pl)) if mid$(rack$(pl), n, 1) <> "?" then score = score + points(asc(mid$(rack$(pl), n, 1)) - 64) end if next n return score end sub // sub comp_starts() local score, x, y local rack$, word$ coords(0) = 1 word$ = first$() if word$ <> "" then first = false centre_square = true x = coords(1) y = coords(2) score = score(word$, coords(1), 8) rack$ = place$(tile$(), word$, x, y, true) rack$(turn) = replenish$(rack$) screen_place(word$, x, y, true, false) this_go$ = word$ end if return score end sub // sub computers_move(cheat) local dir, ld, lx, ly, score, temp_dir, x, y local hidir$, last_word$, ord$, rack$ if cheat = false then show_player() else comment(player$(turn, 1) + " is cheating!") end if if first = true then score = comp_starts() return score end if reset_coords() get_word$(0, 0) //best_move() for y = 1 to 15 for x = 1 to 15 for dir = 1 to 2 if tile$(x, y) <> "" then coords(0) = dir hiword$ = get_word$(x, y, false) if hiword$ <> last_word$ then if cheat = false then screen_place(mid$(last_word$, 4), lx, ly, ld, false, true) end if lx = coords(1) ly = coords(2) if left$(hiword$, 1) = "r" then ld = 1 else ld = 2 end if last_word$ = hiword$ if cheat = false then screen_place(mid$(hiword$, 4), lx, ly, ld, true, true) end if temp_dir = coords(0) coords(0) = ld if cheat = false then show_player("is considering " + mid$(hiword$, 4) + " for " + str$(score(mid$(hiword$, 4), coords(1), coords(2))) + " points.") end if coords(0) = temp_dir end if end if next dir next x next y hidir$ = left$(hiword$, 1) hiword$ = mid$(hiword$, 4) if hidir$ = "r" then coords(0) = 1 else coords(0) = 2 end if x = coords(1) y = coords(2) if cheat = false then if hiword$ <> "" then score = score(hiword$, x, y) rack$ = place$(tile$(), hiword$, x, y, true) rack$(turn) = replenish$(rack$) screen_place(hiword$, x, y, coords(0), true, false) this_go$ = hiword$ end if else this_go$ = hiword$ score = score(hiword$, x, y) end if return score end sub // sub get_word$(x, y, extra) local finish, has_room, legal, letters, n, pfinish, pos, pstart, score, start, stream local d$, file$, letter$, mask$, patt$, placed$, rack$, row$, tmprow$, word$ static hiscore, idx, skill, total static hiword$ static done(100, 3) if x = 0 and y = 0 then hiscore = - 9999 hiword$ = "" done(0, 0) = 0 done(0, 1) = 0 done(0, 2) = 0 done(0, 3) = 0 idx = 0 skill = val(player$(turn, 2)) total = calc_total() if skill = 2 total = int(total * 1.5) return end if if skill <= 2 and hiscore = total return hiword$ file$ = home$ + "\\d" + str$(extra) + ".tmp" d$ = direction$() if d$ = "r" then row$ = get_row$(tile$(), y) pstart = get_start(row$, x) pfinish = get_end(row$, x) for n = 0 to idx - 1 if done(n, 0) = pstart and done(n, 1) = pfinish and done(n, 2) = y and done(n, 3) = coords(0) then return hiword$ end if next n placed$ = mid$(row$, pstart, (pfinish - pstart) + 1) if len(placed$) > 1 then done(idx, 0) = pstart done(idx, 1) = pfinish done(idx, 2) = y done(idx, 3) = coords(0) idx = idx + 1 end if if extra = true and len(placed$) > 1 and not word(placed$) return hiword$ stream = find(placed$, row$, file$, x) else row$ = get_row$(tile$(), x) pstart = get_start(row$, y) pfinish = get_end(row$, y) for n = 0 to idx - 1 if done(n, 0) = pstart and done(n, 1) = pfinish and done(n, 2) = x and done(n, 3) = coords(0) then return hiword$ end if next n placed$ = mid$(row$, pstart, (pfinish - pstart) + 1) if len(placed$) > 1 then done(idx, 0) = pstart done(idx, 1) = pfinish done(idx, 2) = x done(idx, 3) = coords(0) idx = idx + 1 end if if extra = true and len(placed$) > 1 and not word(placed$) return hiword$ stream = find(placed$, row$, file$, y) end if open #stream, file$, "r" while( ! eof(stream)) input #stream patt$ word$ = assemble$(patt$) if word$ = placed$ continue pos = instr(patt$, "*") start = calc_start(x, y, len(patt$) - pos, d$) tmprow$ = insert$(word$, row$, start) start = start(tmprow$, x, y, d$) finish = finish(tmprow$, x, y, d$) word$ = mid$(tmprow$, start, (finish - start) + 1) legal = is_legal(word$, start, x, y, d$) if skill = 4 and extra = false and legal then hiword$ = get_extra$(hiword$, word$, row$, x, y, start, finish, d$) end if if legal then score = get_score(word$, mask$, start, x, y, skill, total, d$) if score > hiscore then if (skill = 1 and score <= total) or (skill = 2 and score <= total * 1.5) or skill >= 3 then hiscore = score hiword$ = d$ + chr$(x) + chr$(y) + word$ update_coords(start, x, y, d$) if skill <= 2 then close #stream return hiword$ end if end if end if end if wend close #stream return hiword$ end sub // sub update_coords(start, x, y, d$) if d$ = "r" then coords(1) = start coords(2) = y else coords(1) = x coords(2) = start end if end sub // sub calc_total() local n, sum for n = 1 to len(rack$(turn)) if mid$(rack$(turn), n, 1) <> "?" then sum = sum + points(asc(mid$(rack$(turn), n, 1)) - 64) else sum = sum + 3 end if next n return sum end sub // sub get_extra$(hiword$, word$, row$, x, y, start, finish, d$) local location, pos, tmpx, tmpy local letter$, mask$, rack$ mask$ = mid$(row$, start, (finish - start) + 1) location = count_spaces(mask$) if location = 0 return hiword$ letter$ = mid$(word$, location, 1) if d$ = "r" then tmpx = start + location - 1 tmpy = y coords(0) = 2 else tmpx = x tmpy = start + location - 1 coords(0) = 1 end if tile$(tmpx, tmpy) = letter$ rack$ = rack$(turn) pos = instr(rack$(turn), letter$) if pos = 0 pos = instr(rack$(turn), "?") mid$(rack$(turn), pos, 1) = " " hiword$ = get_word$(tmpx, tmpy, true) rack$(turn) = rack$ tile$(tmpx, tmpy) = "" if d$ = "r" then coords(0) = 1 else coords(0) = 2 end if return hiword$ end sub // sub get_score(word$, mask$, start, x, y, skill, total, d$) local score if d$ = "r" then score = score(word$, start, y) else score = score(word$, x, start) end if if (skill = 1 or skill = 2) and score <= total then return score end if if (skill = 1 or skill = 2) and score > total then return 0 end if if skill = 3 return score if tiles$ <> "" score = best_move(mask$, word$, score) return score end sub // sub is_legal(word$, start, x, y, d$) local legal local legal$ if d$ = "r" then legal$ = legal$(word$, start, y, true) else legal$ = legal$(word$, x, start, true) end if if legal$ = "" then legal = true else legal = false end if return legal end sub // sub start(tmprow$, x, y, d$) local start if d$ = "r" then start = get_start(tmprow$, x) else start = get_start(tmprow$, y) end if return start end sub // sub finish(tmprow$, x, y, d$) local finish if d$ = "r" then finish = get_end(tmprow$, x) else finish = get_end(tmprow$, y) end if return finish end sub // sub calc_start(x, y, length, d$) local start if d$ = "r" then start = x - length else start = y - length end if return start end sub // sub best_move(mask$, word$, score) local n local play$ for n = 1 to len(mask$) pos = instr(rack$(turn), mid$(mask$, n, 1)) if pos > 1 then play$ = play$ + mid$(word$, n, 1) else play$ = play$ + "?" end if next n if glob(play$, "*S*") then for n = 1 to len(play$) if mid$(play$, n, 1) = "S" score = score - 4 next n end if if glob(play$, "*?*") then for n = 1 to len(play$) if mid$(play$, n, 1) = "?" score = score - 3 next n end if return score end sub // sub count_spaces(mask$) local loc, n, space for n = 1 to len(mask$) if mid$(mask$, n, 1) = " " then space = space + 1 loc = n end if if space > 1 return 0 next n return loc end sub // sub insert$(word$, row$, start) local tmprow$ tmprow$ = row$ mid$(tmprow$, start) = word$ return tmprow$ end sub // sub find(placed$, row$, f$, x) local finish, start, stream1, stream2 local pat$ stream2 = open(f$, "w") if len(placed$) = 1 then stream1 = open(home$ + "\\dictionary") seek #stream1, idx(asc(left$(placed$, 1)) - 65), "begin" else stream1 = open_dict(placed$) end if repeat input #stream1 pat$ if placed$ = left$(pat$, len(placed$)) then pos = instr(pat$, "*") start = x - (len(pat$) - pos) finish = start + (len(pat$) - 2) if start < 1 or finish > 15 continue if have_letters(row$, pat$, x) then print #stream2, pat$ end if end if until(placed$ <> left$(pat$, len(placed$))) close #stream2 close #stream1 return stream2 end sub // sub get_row$(a$(), row) local col local d$, row$ d$ = direction$() for col = 1 to 15 if d$ = "d" then if a$(row, col) = "" then row$ = row$ + " " else row$ = row$ + a$(row, col) end if else if a$(col, row) = "" then row$ = row$ + " " else row$ = row$ + a$(col, row) end if end if next col return row$ end sub // sub screen_place(word$, x, y, dir, show, black) local n, person, pos, qm local d$, rack$ if player$(turn, 2) = "" person = true rack$ = rack$(turn) if dir = 1 then d$ = "r" else d$ = "d" end if if show = true then for n = 1 to len(word$) qm = false if tile$(x, y) = "" then if person then if (bp(0, 0) = x and bp(0, 1) = y) or (bp(1, 0) = x and bp(1, 1) = y) then qm = true pos = instr(rack$, "?") else pos = instr(rack$, mid$(word$, n, 1)) end if else pos = instr(rack$, mid$(word$, n, 1)) if pos = 0 then pos = instr(rack$, "?") qm = true end if end if end if mid$(rack$, pos, 1) = " " if (blanks(1, 1) = x and blanks(1, 2) = y) or (blanks(2, 1) = x and blanks(2, 2) = y) or qm = true then write_blank(mid$(word$, n, 1), grid_scr(x), grid_scr(y), black) else write(mid$(word$, n, 1), grid_scr(x), grid_scr(y), black) end if if d$ = "r" then x = x + 1 else y = y + 1 end if next n end if if show = false then for n = 1 to len(word$) if tile$(x, y) = "" then print_square(x, y) else if (blanks(1, 1) = x and blanks(1, 2) = y) or (blanks(2, 1) = x and blanks(2, 2) = y) then write_blank(tile$(x, y), grid_scr(x), grid_scr(y)) else write(tile$(x, y), grid_scr(x), grid_scr(y)) end if end if if d$ = "r" then x = x + 1 else y = y + 1 end if next n end if box 0, 0, 300, 300 end sub // sub players_move() local count, m, n, num, play, score, tmpx, tmpy, x, xe, xs, y, ye, ys local event$, key$, lin$, new$, q$, rack$, unknown$, word$ local v$(1) repeat repeat word$ = "" show_player() event$ = navigate$() if event$ = "pass" return 0 if event$ = "change" return - 1 x = coords(1) y = coords(2) connected = false lin$ = input_word$(x, y) if connected = false and first = false and lin$ <> "restart player" then comment("Unconnected word - miss a go. --____Press any key to continue____--") inkey$ refresh() return - 2 end if if centre_square = false and lin$ <> "restart player" then comment("The first word should be placed over the centre square - miss a go. --____Press any key to continue____--") inkey$ refresh() return - 2 end if if lin$ <> "restart player" centre_square = true until(lin$ <> "restart player") if coords(0) = 1 then xs = get_start(lin$, x) xe = get_end(lin$, x) word$ = mid$(lin$, xs, (xe - xs) + 1) else ys = get_start(lin$, y) ye = get_end(lin$, y) word$ = mid$(lin$, ys, (ye - ys) + 1) end if if coords(0) = 1 then score = score(word$, xs, y) else score = score(word$, x, ys) end if q$ = question$(word$ + " will score " + str$(score) + " points, do you wish to play this word?") if q$ = "n" then if coords(0) = 1 then screen_place(word$, xs, y, 1, false) else screen_place(word$, x, ys, 2, false) end if if first = true centre_square = false end if until(q$ = "y") if len(word$) = 1 then comment("One letter word --____Press any key to continue____--") inkey$ refresh() return - 2 end if if coords(0) = 1 then tmpx = xs tmpy = y else tmpx = x tmpy = ys end if unknown$ = legal$(word$, tmpx, tmpy, false) play = true if len(unknown$) > 0 then num = token(unknown$, v$()) for n = 1 to num if ask(v$(n)) = false then v$(n) = "" play = false end if next n for n = 1 to num if v$(n) <> "" then new$ = new$ + v$(n) + " " end if next n if len(new$) > 0 add(new$) end if if play = true then rack$ = place$(tile$(), word$, tmpx, tmpy, true) screen_place(word$, tmpx, tmpy, coords(0), true, false) rack$(turn) = replenish$(rack$) comment(word$ + " is played for " + str$(score) + " points.") first = false else comment("Illegal word --____Press any key to continue____--") screen_place(word$, tmpx, tmpy, coords(0), false, false) return - 2 end if this_go$ = word$ return score end sub // sub get_cross_row$(a$(), row) local col local d$, row$ d$ = direction$() for col = 1 to 15 if d$ = "r" then if a$(row, col) = "" then row$ = row$ + " " else row$ = row$ + a$(row, col) end if else if a$(col, row) = "" then row$ = row$ + " " else row$ = row$ + a$(col, row) end if end if next col return row$ end sub // sub first$() local got, hiscore, m, n, sc, skill, x local hiword$, pat$, rack$, w$, word$ local t$(16, 16) skill = val(player$(turn, 2)) first_find() open #1, home$ + "\\d.tmp", "r" while( ! eof(1)) input #1 word$ for x = 9 - len(word$) to 8 sc = score(word$, x, 8) if (skill = 1 and sc <= 10) or (skill = 2 and sc <= 20) or skill > 2 then if sc > hiscore then show_player("is considering " + word$ + " for " + str$(sc) + " points.") coords(0) = 1 coords(1) = x coords(2) = 8 hiword$ = word$ hiscore = sc end if if skill <= 2 break end if next x wend close #1 return hiword$ end sub // sub first_find() local fail, missing, pos local letter$, pat$, rack$ open #2, home$ + "\\d.tmp", "w" open #1, home$ + "\\based.txt", "r" while( ! eof(1)) input #1 pat$ rack$ = rack$(turn) missing = 0 fail = false for n = 1 to len(pat$) letter$ = mid$(pat$, n, 1) pos = instr(rack$, letter$) if pos > 0 then mid$(rack$, pos, 1) = " " end if if pos = 0 then pos = instr(rack$, "?") end if if pos > 0 then mid$(rack$, pos, 1) = " " end if if pos = 0 then missing = missing + 1 end if if missing = 1 then fail = true break end if next n if fail = false then print #2, pat$ end if wend close #2 close #1 end sub // sub reset_coords() coords(0) = 0 coords(1) = 0 coords(2) = 0 end sub // sub place$(a$(), w$, x, y, play) local m, n, person, pos, tmpx, tmpy local d$, rack$ if player$(turn, 2) = "" person = true d$ = direction$() rack$ = rack$(turn) for n = 1 to len(w$) if d$ = "r" then tmpx = x + n - 1 tmpy = y else tmpx = x tmpy = y + n - 1 end if if a$(tmpx, tmpy) = "" then if person then if (bp(0, 0) = tmpx and bp(0, 1) = tmpy) or (bp(1, 0) = tmpx and bp(1, 1) = tmpy) then pos = instr(rack$, "?") if play = true then blanks_played = blanks_played + 1 blanks(blanks_played, 1) = tmpx blanks(blanks_played, 2) = tmpy end if else pos = instr(rack$, mid$(w$, n, 1)) end if else pos = instr(rack$, mid$(w$, n, 1)) if pos = 0 and play = true then pos = instr(rack$, "?") blanks_played = blanks_played + 1 blanks(blanks_played, 1) = tmpx blanks(blanks_played, 2) = tmpy end if if pos = 0 and play = false then pos = instr(rack$, "?") end if end if mid$(rack$, pos, 1) = " " a$(tmpx, tmpy) = mid$(w$, n, 1) end if next n return rack$ end sub // sub assemble$(t$) local pos local tmp$, word$ pos = 1 repeat tmp$ = mid$(t$, pos, 1) if tmp$ <> "*" word$ = word$ + tmp$ pos = pos + 1 until(tmp$ = "*") repeat tmp$ = mid$(t$, pos, 1) if pos <= len(t$) word$ = tmp$ + word$ pos = pos + 1 until(pos - 1 > len(t$)) return word$ end sub // sub have_letters(row$, pattern$, x) local count, found, storex local char$ storex = x count = 1 char$ = mid$(pattern$, count, 1) check("", - 99, "") while(char$ <> "*" and x <= 16) if not check(mid$(row$, x, 1), x, char$) return false count = count + 1 char$ = mid$(pattern$, count, 1) x = x + 1 wend count = count + 1 x = storex - 1 char$ = mid$(pattern$, count, 1) while(char$ <> "" and x >= 0) if not check(mid$(row$, x, 1), x, char$) return false count = count + 1 x = x - 1 char$ = mid$(pattern$, count, 1) wend return true end sub // sub check(part$, x, char$) local found, pos static rack$ if x = - 99 then rack$ = rack$(turn) return end if if part$ <> " " and part$ <> char$ then return false end if if part$ = char$ then return true end if if glob(rack$, "*" + char$ + "*") then mid$(rack$, instr(rack$, char$), 1) = " " return true end if pos = instr(rack$, "?") if pos > 0 then mid$(rack$, pos, 1) = " " return true end if end sub // sub ask(word$) local q$ q$ = question$("Are you sure about " + word$ + "?") if q$ = "y" then return true else return false end if end sub // sub legal$(word$, x, y, computers_move) local m, n, tmpx, tmpy, xe, xs, ye, ys local d$, lin$, new_word$, unknown$ local t$(16, 16) d$ = direction$() copy(t$()) place$(t$(), word$, x, y, false) if not(word(word$)) then unknown$ = word$ + " " if computers_move return "Wrong" end if for n = 0 to len(word$) - 1 if d$ = "d" then tmpx = x tmpy = y + n else tmpx = x + n tmpy = y end if if d$ = "r" then lin$ = get_cross_row$(t$(), tmpx) start = get_start(lin$, tmpy) finish = get_end(lin$, tmpy) else lin$ = get_cross_row$(t$(), tmpy) start = get_start(lin$, tmpx) finish = get_end(lin$, tmpx) end if new_word$ = mid$(lin$, start, (finish - start) + 1) if len(new_word$) > 1 and not(word(new_word$)) then unknown$ = unknown$ + new_word$ + " " if computers_move return "Wrong" end if next n return unknown$ end sub // sub get_start(lin$, pos) local start start = rinstr(lin$, " ", pos) + 1 //IF start=2 AND LEFT$(lin$,1)<>" " start=1 return start end sub // sub get_end(lin$, pos) local finish finish = instr(lin$, " ", pos) if finish = 0 return 15 return finish - 1 end sub // sub reset(t$(), d$) local m, n for n = 0 to 16 for m = 0 to 16 if d$ = "r" then t$(m, n) = tile$(m, n) else t$(m, n) = tile$(n, m) end if next m next n end sub // sub score(word$, x, y) local bonus, check, count, doubl, length, m, n, person, pos, score, storex, sundries, temp, tripl, tscore local dir$, rack$, tmp$ local tmpbp(1, 1) local t$(16, 16) if player$(turn, 2) = "" then person = true else person = false end if dir$ = direction$() rack$ = rack$(turn) reset(t$(), dir$) length = len(word$) local v(length) storex = x if dir$ = "d" then x = y y = storex temp = bp(0, 0) tmpbp(0, 0) = bp(0, 1) tmpbp(0, 1) = temp temp = bp(1, 0) tmpbp(1, 0) = bp(1, 1) tmpbp(1, 1) = temp else for n = 0 to 1 tmpbp(n, 0) = bp(n, 0) tmpbp(n, 1) = bp(n, 1) next n end if for n = 1 to length if t$(x, y) = "" then t$(x, y) = mid$(word$, n, 1) if person then if (tmpbp(0, 0) = x and tmpbp(0, 1) = y) or (tmpbp(1, 0) = x and tmpbp(1, 1) = y) then v(n) = 0 pos = instr(rack$, "?") else v(n) = points(asc(t$(x, y)) - 64) pos = instr(rack$, mid$(word$, n, 1)) end if else pos = instr(rack$, mid$(word$, n, 1)) v(n) = points(asc(t$(x, y)) - 64) if pos = 0 then pos = instr(rack$, "?") v(n) = 0 end if end if mid$(rack$, pos, 1) = " " if board$(x, y) = "2L" v(n) = v(n) * 2 if board$(x, y) = "3L" v(n) = v(n) * 3 tempy = y - 1 tscore = 0 check = false repeat tmp$ = t$(x, tempy) if tmp$ <> "" check = true if tmp$ <> "" and not is_blank(x, tempy) then tscore = tscore + points(asc(t$(x, tempy)) - 64) end if tempy = tempy - 1 until(tmp$ = "") tempy = y + 1 repeat tmp$ = t$(x, tempy) if tmp$ <> "" check = true if tmp$ <> "" and not is_blank(x, tempy) then tscore = tscore + points(asc(t$(x, tempy)) - 64) end if tempy = tempy + 1 until(tmp$ = "") if check tscore = tscore + v(n) if board$(x, y) = "3W" tscore = tscore * 3 if board$(x, y) = "2W" tscore = tscore * 2 sundries = sundries + tscore if board$(x, y) = "2W" doubl = doubl + 1 if board$(x, y) = "3W" tripl = tripl + 1 else if not is_blank(x, y) then v(n) = points(asc(t$(x, y)) - 64) else v(n) = 0 end if end if x = x + 1 next n tscore = 0 for n = 1 to length tscore = tscore + v(n) next n for n = 1 to doubl tscore = tscore * 2 next n for n = 1 to tripl tscore = tscore * 3 next n score = tscore + sundries if rack$ = " " score = score + 50 return score end sub // sub is_blank(x, y) local d$ if blanks_played = 0 return false d$ = direction$() if d$ = "r" then if blanks(1, 1) = x and blanks(1, 2) = y return true if blanks(2, 1) = x and blanks(2, 2) = y return true else if blanks(1, 1) = y and blanks(1, 2) = x return true if blanks(2, 1) = y and blanks(2, 2) = x return true end if end sub // sub add(n$) local count, n, size, stream local com$, tmp$ local v$(1) size = token(n$, v$()) if size = 1 then com$ = "Adding " + v$(1) + " to the dictionary, please wait." end if if size = 2 then com$ = "Adding " + v$(1) + " and " + v$(2) + " to the dictionary, please wait." end if if size > 2 then com$ = "Adding " for n = 1 to size - 2 com$ = com$ + v$(n) + ", " next n com$ = com$ + v$(size - 1) + " and " + v$(size) + " to the dictionary, please wait." end if comment(com$) open #1, home$ + "\\based.txt", "r" while( ! eof(1)) input #1 tmp$ count = count + 1 wend close #1 local d$(count+size) load_file(d$()) for n = 1 to size insert(d$(), v$(n)) next n save_dict(d$()) create_dictionary() index() beep end sub // sub save_dict(word$()) local finish, m, n, pos, size local lin$ size = arraysize(word$(), 1) unlock() open #1, home$ + "\\based.txt", "w" pos = 1 repeat lin$ = "" repeat lin$ = lin$ + word$(pos) + " " pos = pos + 1 until(len(lin$) >= 72 or pos = size + 1) print #1, trim$(lin$) until(pos = size + 1) close #1 lock() end sub // sub insert(a$(), word$) local count, insert_here, n, size, start size = arraysize(a$(), 1) repeat size = size - 1 until(a$(size) <> "") size = size + 1 count = size start = base_idx(asc(word$) - 65) repeat count = count - 1 until(word$ > a$(count) or count = start) insert_here = count + 1 for n = size - 1 to insert_here step - 1 a$(n + 1) = a$(n) next n a$(insert_here) = word$ end sub // sub load_file(d$()) local count, n local tmp$ open #1, home$ + "\\based.txt", "r" while( ! eof(1)) input #1 tmp$ count = count + 1 wend seek 1, 0, "begin" for n = 1 to count input #1 d$(n) next n close #1 end sub // sub open_dict(w$) local debug, idx, pos, stream local res$, tmp$ idx = asc(left$(w$, 1)) - 65 stream = open(home$ + "\\dictionary") seek stream, idx(idx), "begin" if len(w$) = 1 return stream repeat debug = debug + 1 // if debug = 5000 error "Can't find " + w$ pos = tell(#stream) input #stream tmp$ until(w$ + "*" = tmp$) seek stream, pos, "begin" return stream end sub // sub word(w$) local found, stream local tmp$ stream = open(home$ + "\\based.txt", "r") seek stream, base_idx(asc(left$(w$, 1)) - 65), "begin" repeat input #stream tmp$ if tmp$ = w$ then found = true break end if until(w$ < left$(tmp$, len(w$)) or tmp$ = "") close #stream return found end sub // sub direction$() local d$ if coords(0) = 1 then d$ = "r" else d$ = "d" end if return d$ end sub // sub comment(t$) local pos, y local tmp$, tmpline$ clear fill box 4, 317, 506, 404 y = 317 if len(t$) <= 62 then my_text(4, y, t$) return end if repeat pos = 62 repeat tmp$ = mid$(t$, pos, 1) if tmp$ <> " " pos = pos - 1 until(tmp$ = " ") tmpline$ = left$(t$, pos) t$ = mid$(t$, pos + 1) my_text(4, y, tmpline$) y = y + 16 until(len(t$) <= 62) my_text(4, y, t$) end sub // sub input_word$(x, y) local bp_idx, linx, liny, pos, space, startx, starty local d$, key$, lin$, rack$, word$ local t$(16, 16) bp(0, 0) = 0 bp(0, 1) = 0 bp(1, 0) = 0 bp(1, 1) = 0 startx = x starty = y d$ = direction$() repeat until(inkey$(0) = "") rack$ = rack$(turn) read_mouse$("reset") repeat if tile$(x, y) <> "" then word$ = word$ + tile$(x, y) if d$ = "r" then x = x + 1 else y = y + 1 end if my_text(4, 388, word$) continue end if key$ = inkey$ if mouseb(key$) = - 1 then key$ = read_mouse$(key$) end if key$ = upper$(key$) if key$ >= "A" and key$ <= "Z" and tile$(x, y) = "" and len(key$) = 1 then if x <= 15 and y <= 15 and glob(rack$, "*" + key$ + "*") then pos = instr(rack$, key$) mid$(rack$, pos, 1) = " " word$ = word$ + key$ if d$ = "r" then screen_place(key$, x, y, 1, true, true) else screen_place(key$, x, y, 2, true, true) end if if first = true and x = 8 and y = 8 then centre_square = true end if if connected = false then is_connected(x, y) end if if d$ = "r" then x = x + 1 else y = y + 1 end if end if end if if key$ = "BACKSPACE" then connected = false if first = true then centre_square = false connected = false end if if d$ = "r" then screen_place(word$, startx, starty, 1, false) else screen_place(word$, startx, starty, 2, false) end if return "restart player" end if pos = instr(rack$, "?") if left$(key$, 1) = " " and pos > 0 then key$ = right$(key$, 1) bp(bp_idx, 0) = x bp(bp_idx, 1) = y bp_idx = bp_idx + 1 colour 185, 189, 106 fill box grid_scr(x) + 3, grid_scr(y) + 3, grid_scr(x) + 16, grid_scr(y) + 16 colour 0, 0, 0 if key$ = " " then repeat key$ = upper$(inkey$) until(key$ >= "A" and key$ <= "Z" and len(key$) = 1) end if word$ = word$ + key$ if d$ = "r" then screen_place(key$, x, y, 1, true, true) else screen_place(key$, x, y, 2, true, true) end if if first = true and x = 8 and y = 8 then centre_square = true end if if connected = false then is_connected(x, y) end if mid$(rack$, pos, 1) = " " if d$ = "r" then x = x + 1 else y = y + 1 end if end if until(key$ = "ENTER") copy(t$()) place$(t$(), word$, startx, starty, false) if d$ = "r" then for linx = 1 to 15 if t$(linx, y) = "" t$(linx, y) = " " lin$ = lin$ + t$(linx, y) next linx else for liny = 1 to 15 if t$(x, liny) = "" t$(x, liny) = " " lin$ = lin$ + t$(x, liny) next liny end if return lin$ end sub // sub read_mouse$(key$, rearrange) local letter, x, y local letter$ static rack$ if key$ = "reset" then rack$ = rack$(turn) return end if x = mousex(key$) - 6 y = mousey(key$) x = align(x) y = align(y) if x > 200 or y <> 360 return letter = int((x / 20)) + 1 if letter > len(rack$) and letter < 10 return if letter = 10 return "backspace" if letter = 11 return "enter" letter$ = mid$(rack$, letter, 1) if letter$ = " " return if letter$ >= "A" and letter$ <= "Z" then mid$(rack$, letter, 1) = " " return letter$ end if if rearrange = false then if letter$ = "?" then mid$(rack$, letter, 1) = " " return " " + choose_blank$() end if else mid$(rack$, letter, 1) = " " return "?" end if end sub // sub choose_blank$() local bot_row$, key$, letter$, top_row$ top_row$ = "ABCDEFGHIJKLM" bot_row$ = "NOPQRSTUVWXYZ" clear fill box 4, 317, 506, 404 comment("Choose the blank letter.") write_blank(top_row$, 5, 335, false) write_blank(bot_row$, 5, 375, false) letter$ = read_tiles$(top_row$, bot_row$) show_player() return letter$ end sub // sub read_tiles$(top_row$, bot_row$) local letter, x, y local key$, letter$ repeat repeat key$ = inkey$ until((mouseb(key$) = - 1) or len(key$) = 1) if mouseb(key$) = - 1 then x = mousex(key$) - 6 y = mousey(key$) x = align(x) y = align(y) end if until((x >= 0 and x <= 240 and (y = 340 or y = 380)) or len(key$) = 1) if len(key$) > 1 then letter = (x / 20) + 1 if y = 340 then letter$ = mid$(top_row$, letter, 1) else letter$ = mid$(bot_row$, letter, 1) end if else letter$ = key$ end if return letter$ end sub // sub is_connected(x, y) local d$ d$ = direction$() if first = false then if d$ = "r" then if x < 15 then if tile$(x + 1, y) <> "" connected = true end if if y < 15 then if tile$(x, y + 1) <> "" connected = true end if if y > 0 then if tile$(x, y - 1) <> "" connected = true end if if x > 0 then if tile$(x - 1, y) <> "" connected = true end if else if y < 15 then if tile$(x, y + 1) <> "" connected = true end if if x < 15 then if tile$(x + 1, y) <> "" connected = true end if if x > 0 then if tile$(x - 1, y) <> "" connected = true end if if y > 0 then if tile$(x, y - 1) <> "" connected = true end if end if end if end sub // sub refresh() local m, n, x, y for n = 1 to 15 for m = 1 to 15 if tile$(m, n) <> "" then x = grid_scr(m) y = grid_scr(n) if (blanks(1, 1) = m and blanks(1, 2) = n) or (blanks(2, 1) = m and blanks(2, 2) = n) then write_blank(tile$(m, n), grid_scr(m), grid_scr(n)) else write(tile$(m, n), x, y) end if else print_square(m, n) end if next m next n box 0, 0, 300, 300 end sub // sub copy(a$()) local m, n for n = 1 to 15 for m = 1 to 15 a$(m, n) = tile$(m, n) next m next n end sub // sub mess_about() // This routine is adapted (stolen?) from Marc-Oliver's demo for YaBasic local count, dx, dy, phi, x, xo, y, yo local c$, o$ x = 200 y = 200 phi = ran(2 * pi) dx = 2 * sin(phi) dy = 2 * cos(phi) o$ = "" count = 0 repeat if (o$ <> "") putbit o$, xo - 2, yo - 2 xo = x yo = y x = x + dx y = y + dy o$ = getbit$(x - 2, y - 2, x + 46, y + 46) c$ = getbit$(x, y, x + 42, y + 42) putbit c$, x, y, "t" if (x < 0 or x > 469) dx = - dx if (y < 0 or y > 366) dy = - dy key$ = inkey$(0) until(key$ <> "") clear window refresh() show_status() show_player() end sub // sub navigate$() local correct, new_time, old_time, tmpx, tmpy, tx, ty, x, y local cursor$, key$, r$, under$, utmp$ x = 1 y = 1 under$ = getbit$(x, y, x + 19, y + 19) place_cursor(x, y) old_time = val(mid$(time$, 10)) repeat repeat key$ = inkey$(0) new_time = val(mid$(time$, 10)) if new_time - old_time >= 120 then mess_about() old_time = val(mid$(time$, 10)) end if until(key$ <> "") old_time = new_time tx = x ty = y correct = false if mouseb(key$) = - 2 then r$ = right_click$(key$) if r$ = "pass" or r$ = "change" then putbit under$, x, y return r$ end if end if if mouseb(key$) = - 1 then x = align(mousex(key$)) y = align(mousey(key$)) if x < 300 and y < 300 then utmp$ = getbit$(x, y, x + 19, y + 19) place_cursor(x, y) putbit under$, tx, ty under$ = utmp$ correct = true end if if x = 140 and y = 360 then key$ = "a" x = tx y = ty correct = true end if if x = 160 and y = 360 then key$ = "d" x = tx y = ty correct = true end if if correct = false then x = tx y = ty end if end if key$ = lower$(key$) if key$ = "left" and x > 1 then x = x - 20 utmp$ = getbit$(x, y, x + 19, y + 19) place_cursor(x, y) putbit under$, tx, ty under$ = utmp$ end if if key$ = "right" and x < 280 then x = x + 20 utmp$ = getbit$(x, y, x + 19, y + 19) place_cursor(x, y) putbit under$, tx, ty under$ = utmp$ end if if key$ = "up" and y > 1 then y = y - 20 utmp$ = getbit$(x, y, x + 19, y + 19) place_cursor(x, y) putbit under$, tx, ty under$ = utmp$ end if if key$ = "down" and y < 280 then y = y + 20 utmp$ = getbit$(x, y, x + 19, y + 19) place_cursor(x, y) putbit under$, tx, ty under$ = utmp$ end if until(key$ = "a" or key$ = "d") putbit under$, x, y if key$ = "a" then coords(0) = 1 else coords(0) = 2 end if coords(1) = scr_grid(x) coords(2) = scr_grid(y) end sub // sub place_cursor(x, y) local cursor$ cursor$ = getbit$(x, y, x + 19, y + 19) cursor$ = fade$(cursor$) putbit cursor$, x, y end sub // sub fade$(pix$) local b, g, n, r local b$, g$, graf$, header$, r$ header$ = header$(pix$) graf$ = graphic_data$(pix$) for n = 1 to len(graf$) step 6 r = dec(mid$(graf$, n, 2)) g = dec(mid$(graf$, n + 2, 2)) b = dec(mid$(graf$, n + 4, 2)) r = r + 75 g = g + 75 b = b + 75 if r > 255 r = 255 if g > 255 g = 255 if b > 255 b = 255 r$ = pad$(r) g$ = pad$(g) b$ = pad$(b) mid$(graf$, n, 2) = r$ mid$(graf$, n + 2, 2) = g$ mid$(graf$, n + 4, 2) = b$ next n return header$ + graf$ end sub // sub pad$(n) local h$ h$ = hex$(n) if len(h$) = 1 h$ = "0" + h$ return h$ end sub // sub right_click$(key$) local dy, option, x, y local pix$ local c(3) if mousex(key$) > 299 or mousey(key$) > 299 return pix$ = pop_up$(c(), key$) x1 = c(0) y1 = c(1) x2 = c(2) y2 = c(3) repeat key$ = inkey$ until(mouseb(key$) <= 0) if mouseb(key$) = - 2 or mouseb(key$) = 0 then putbit pix$, c(0), c(1) return end if x = mousex(key$) y = mousey(key$) if x < c(0) or x > c(2) or y < c(1) or y > c(3) then putbit pix$, c(0), c(1) return end if dy = y - (c(1) + 3) option = int(dy / 16) + 1 putbit pix$, c(0), c(1) switch option case 1 rack$(turn) = rearrange$(rack$(turn)) show_player() break case 2 rack$(turn) = shuffle$(rack$(turn)) show_player() break case 3 return "pass" break case 4 if tiles$ = "" return rack$(turn) = change$(rack$(turn)) return "change" break case 5 query() break case 6 cheat() break case 7 save() show_player() break case 8 load() show_player() return "load" break case 9 quit() break end switch end sub // sub query() // Hit enter to escape from the loop :( local key$, letter$, word$ comment("Type in a word and search for it in the dictionary (wild cards NOT allowed :p)") repeat key$ = upper$(inkey$) if len(key$) = 1 and key$ >= "A" and key$ <= "Z" then word$ = word$ + key$ my_text(4, 388, word$) end if until(key$ = "ENTER") if word(word$) = true then comment(word$ + " is in the dictionary.") else comment(word$ + " isn't in the dictionary.") end if inkey$ show_player() end sub // sub cheat(control$) local d, n, players_rank, score, skill, x, y local tsc(players) static cheats if control$ = "reset" then cheats = 0 return end if if first = true then comment("The first word hasn't been played yet!") inkey$ show_player() return end if cheats = cheats + 1 if cheats >= 5 then comment("No more cheating!") inkey$ show_player() return end if for n = 1 to players tsc(n) = sc(n) next n players_rank = sort(tsc()) skill = players + 1 - players_rank player$(turn, 2) = str$(skill) score = computers_move(true) d = coords(0) x = coords(1) y = coords(2) comment(this_go$ + " for " + str$(score) + " points. Press any key to continue.") screen_place(this_go$, x, y, d, true, true) inkey$ screen_place(this_go$, x, y, d, false, true) player$(turn, 2) = "" show_player() end sub // sub sort(a()) local m, n, player, score, size, tmp size = arraysize(a(), 1) player = turn score = a(player) for n = size to 1 step - 1 for m = 1 to n - 1 if a(m) > a(m + 1) then tmp = a(m + 1) a(m + 1) = a(m) a(m) = tmp end if next m next n for n = 1 to size if score = a(n) then player = n break end if next n return player end sub // sub quit() local sys$ // local variable :) comment("Thanks for playing :)") sys$ = system$("del \"" + home$ + "\\d\"") sys$ = system$("del \"" + home$ + "\\*.tmp\"") pause 2 exit end sub // sub load() local cols, genuine, num, stream, width local ext$, key$, name$ local c(5) local v$(1) comment("Either click the file to load or type it's name.") dir$ = system$("dir \"" + home$ + "\\*.scb\" /b") if dir$ = "" or len(dir$) = 3 then comment("No saved games!") pause 2 return end if num = token(dir$, v$(), "\xa\xd") x = 5 y = 335 ext$ = ".scb" pix$ = show_files$(v$(), c()) repeat my_text(x, y, "*" + ext$) repeat key$ = inkey$ if len(key$) = 1 then name$ = name$ + key$ clear fill box x, y, 397, y + 16 my_text(x, y, name$ + ext$) end if if mouseb(key$) = - 1 then name$ = read_file_name$(key$, c(), v$()) if name$ <> "" key$ = "enter" end if until(lower$(key$) = "enter") if name$ = "" then putbit pix$, 1, 1 return end if genuine = false for n = 1 to num if name$ + ext$ = v$(n) genuine = true next n if genuine = false then comment("No such file, the files are listed above.") inkey$ name$ = "" end if until(genuine = true) putbit pix$, 1, 1 open_file(name$ + ext$) refresh() show_status() end sub // sub open_file(f$) local m, n, stream local char$, row$ stream = open(f$, "r") input #stream players dim player$(players, 2) dim rack$(players) dim sc(players) input #stream turn input #stream tiles$ for n = 1 to players input #stream player$(n, 1) input #stream player$(n, 2) input #stream rack$(n) input #stream sc(n) next n for n = 0 to 16 input #stream row$ for m = 1 to len(row$) char$ = mid$(row$, m, 1) if char$ = "." then tile$(m - 1, n) = "" else tile$(m - 1, n) = char$ end if next m next n close #stream end sub // sub read_file_name$(key$, c(), v$()) local col, idx, length, x, y local name$ x = mousex(key$) y = mousey(key$) if x < 1 or y < 1 or x > c(2) or y > c(3) return col = int(x / ((c(5) * 8) - 3)) idx = (int(y / 16) + 1) + (col * 18) if idx > arraysize(v$(), 1) return length = len(v$(idx)) - 4 return left$(v$(idx), length) end sub // sub save() local n, num, original, x, y local dir$, ext$, key$, name$, pix$ local c(5) local v$(1) dir$ = system$("dir \"" + home$ + "\\*.scb\" /b") num = token(dir$, v$(), "\xa\xd") x = 5 y = 335 ext$ = ".scb" pix$ = show_files$(v$(), c()) repeat comment("Save game - Enter file name.") my_text(x, y, "*" + ext$) repeat key$ = inkey$ if len(key$) = 1 then name$ = name$ + key$ clear fill box x, y, 397, y + 16 my_text(x, y, name$ + ext$) end if until(lower$(key$) = "enter") if name$ = "" then putbit pix$, 1, 1 return end if original = true for n = 1 to num if name$ + ext$ = v$(n) original = false next n if original = false then comment("There's already a file with that name, please enter an original name.") inkey$ name$ = "" end if until(original = true) output(name$ + ext$) putbit pix$, 1, 1 end sub // sub output(n$) local m, n, stream local row$ stream = open(home$ + "\\"+n$, "w") print #stream, players print #stream, turn print #stream tiles$ for n = 1 to players print #stream, player$(n, 1) print #stream, player$(n, 2) print #stream, rack$(n) print #stream, sc(n) next n for n = 0 to 16 row$ = "" for m = 0 to 16 if tile$(m, n) = "" then row$ = row$ + "." else row$ = row$ + tile$(m, n) end if next m print #stream, row$ next n close #stream end sub // sub show_files$(a$(), c()) local cols, longest, n, size, tmp, x, x1, x2, y, y1, y2 local pix$ size = arraysize(a$(), 1) x1 = 1 y1 = 1 if size > 18 then tmp = size / 18 cols = int(tmp + 1) else cols = 1 end if for n = 1 to size if len(a$(n)) > longest longest = len(a$(n)) next n x2 = (cols * (longest * 8)) + 5 if size > 18 then y2 = 292 else y2 = (size * 16) end if pix$ = getbit$(x1, y1, x2 + 2, y2 + 2) clear fill box x1, y1, x2 + 2, y2 + 2 box x1, y1, x2, y2 x = 1 y = 1 for n = 1 to size my_text(x + 3, y, a$(n)) if y > 1 line x1, y, x2, y y = y + 16 if y = 289 then x = x + (longest * 8) y = 1 end if next n for n = 1 to cols line ((longest * 8) * n) + 5, 1, ((longest * 8) * n) + 5, y2 next n c(0) = x1 c(1) = y1 c(2) = x2 c(3) = y2 c(4) = cols c(5) = longest return pix$ end sub // sub rearrange$(r$) local pos local key$, newr$ read_mouse$("reset") comment("Either type the letters or click the tiles.") write(rack$(turn), 5, 366) repeat key$ = inkey$ if mouseb(key$) = - 1 key$ = read_mouse$(key$, true) if key$ = " " key$ = "?" key$ = upper$(key$) pos = instr(r$, key$) if pos > 0 then newr$ = newr$ + key$ mid$(r$, pos, 1) = " " my_text(5, 350, newr$) end if until(r$ = left$(" ", len(r$))) return newr$ end sub // sub change$(rack$) local changed, n, pos local change$, key$ comment("Type or click the letters to be exchanged.") write(rack$, 5, 366) read_mouse$("reset") putbit across$, 146, 367 putbit down$, 166, 367 putbit cancel$, 186, 367 putbit okay$, 206, 367 repeat my_text(5, 350, change$) repeat key$ = inkey$ until(mouseb(key$) = - 1 or key$ = "enter" or key$ = "backspace" or len(key$) = 1) if mouseb(key$) = - 1 then key$ = read_mouse$(key$, true) end if pos = instr(rack$, upper$(key$)) if len(key$) = 1 and pos > 0 then change$ = change$ + upper$(key$) mid$(rack$, pos, 1) = " " changed = changed + 1 end if if key$ = "backspace" then read_mouse$("reset") change$ = "" rack$ = rack$(turn) changed = 0 clear fill box 5, 350, 397, 366 end if if changed = len(tiles$) then clear fill box 5, 350, 397, 366 comment("Can not swap any more letters because there are no more tiles in the bag.") pause 2 break end if until(key$ = "enter") rack$ = replenish$(rack$) tiles$ = tiles$ + change$ return rack$ end sub // sub pop_up$(c(), key$) local m, n, x, xbr, xtl, y, ybr, ytl local pix$ local m$(8) m$(0) = "Rearrange" m$(1) = "Shuffle" m$(2) = "Pass" m$(3) = "Change" m$(4) = "Query" m$(5) = "Cheat" m$(6) = "Save game" m$(7) = "Load game" m$(8) = "Quit" xtl = mousex(key$) ytl = mousey(key$) if xtl <= 220 then x = xtl + 3 xbr = xtl + 80 else xbr = xtl xtl = xtl - 80 x = xtl + 3 end if if ytl <= 185 then y = ytl + 3 ybr = ytl + 115 else ybr = ytl ytl = ytl - 115 y = ytl + 3 end if pix$ = getbit$(xtl, ytl, xbr, ybr) clear fill box xtl, ytl, xbr, ybr box xtl + 2, ytl + 2, xbr - 2, ybr - 2 for n = 0 to 6 text x, y, m$(n) y = y + 16 if n < 6 line xtl + 2, y, xbr - 2, y next n c(0) = xtl c(1) = ytl c(2) = xbr c(3) = ybr colour 128, 255, 128 for n = ytl to ybr for m = xtl to xbr if mid$(getbit$(m, n, m, n), 9) = "000000" then dot m, n end if next m next n colour 0, 0, 0 return pix$ end sub // sub align(x) x = scr_grid(x) x = grid_scr(x) return x end sub // sub show_player(extra$) local t$ clear fill box 4, 317, 506, 404 t$ = ", use the cursor keys to manoeuvre around the board, press 'A'" t$ = t$ + " to place letters across and 'D' to place letters downwards." if player$(turn, 2) = "" then comment(player$(turn, 1) + t$) putbit across$, 146, 367 putbit down$, 166, 367 putbit cancel$, 186, 367 putbit okay$, 206, 367 else comment(player$(turn, 1) + " " + extra$) end if write(rack$(turn), 5, 366) end sub // sub question$(q$) local key$ comment(q$) putbit cancel$, 466, 384 putbit okay$, 486, 384 repeat key$ = inkey$ if mouseb(key$) = 1 key$ = yes_no$(key$) key$ = lower$(key$) until(key$ = "y" or key$ = "n") return key$ end sub // sub yes_no$(key$) local x, y repeat until(mouseb(inkey$) = - 1) x = mousex(key$) y = mousey(key$) if y < 384 or y > 404 return if x >= 466 and x <= 484 return "n" if x >= 486 and x <= 504 return "y" end sub // label init home$ = system$("cd") home$ = trim$(home$) check_files_present() open window 511, 408, "modern" backcolour 0, 140, 0 clear screen clear window colour 249, 255, 206 fill box 1, 1, 20, 20 colour 0, 0, 0 fill box 1, 1, 20, 20 SetupBoard() draw_board$() show_status(true) display_bitmap() restore tiles read tiles$ poke("textalign"), "lt" my_text(314, 4, "Please wait...") y = 20 my_text(314, y, "Main dictionary check.") validate_dictionary() y = y + 16 first_game = true dim points(27) dim coords(2) dim hw$(5) dim blanks(2, 2) dim bp(1, 1) randomize() clear screen op = open(home$ + "\\dictionary") if op = 0 then my_text(314, y, "Creating temp dictionary,") create_dictionary() y = y + 16 else close op end if dim idx(25) dim base_idx(25) my_text(314, y, "Indexing dictionary.") y = 0 index() for n = 1 to 27 read points(n) next n restore across read across$ read down$ read cancel$ read okay$ instructions() get_players() first = true return // label re_init for n = 0 to 16 for m = 0 to 16 tile$(n, m) = "" next m next n for n = 1 to players sc(n) = 0 next n pass = 0 blanks_played = 0 for n = 1 to 2 blanks(n, 1) = 0 blanks(n, 2) = 0 next n first = true centre_square = false connected = false restore tiles read tiles$ for n = 1 to players rack$(n) = " " rack$(n) = replenish$(rack$(n)) next n cheat("reset") return // sub check_files_present() local stream stream = open("based.txt", "r") if stream = 0 error "\nCan't find 'based.txt'. This is a required file. Please ensure it is in the same directory as 'Scrabble.yab'" close stream end sub // sub instructions() local q$, t$ q$ = question$("Would you like instructions?") if q$ <> "y" return t$ = "The game plays exactly like the original version so these instructions" t$ = t$ + " concentrate on how to move around the board with the cursor keys and mouse." t$ = t$ + " Press any key to continue..." comment(t$) inkey$ t$ = "The cursor keys move the cursor around the board. When it is on the square where " t$ = t$ + "the word will begin press either \"A\" or \"D\" for the word to run across or " t$ = t$ + "down. Press any key to continue..." comment(t$) inkey$ t$ = "To use the mouse to place a word, left click a square on the board where the word is to begin, then click the " t$ = t$ + "arrow buttons next to the tiles below the board for the direction the word is to run." t$ = t$ + " Press any key to continue..." comment(t$) inkey$ t$ = "Left and right clicking does nothing during the computer's play but right clicking the " t$ = t$ + "board anytime else offers more options. Press any key to continue..." comment(t$) inkey$ t$ = "The computer has 4 skill levels, and can take the place of none or all of the players. " t$ = t$ + " Press any key to continue..." comment(t$) inkey$ end sub // sub display_bitmap() local stream local pix$ stream = open("bitmap", "r") if stream = 0 return input #stream pix$ close #stream putbit pix$, 4, 317 end sub // sub randomize() local d, i, j, k local rnd$ d = 1 rnd$ = left$(date$, 13) + left$(time$, 8) for i = len(rnd$) to 1 step - 1 for j = d * i * asc(mid$(rnd$, i, 1)) / 3.75 to 0 step - 1 k = ran(100) next j d = 1 + k / 100 next i end sub // sub shuffle$(a$) local a, b, n local tmp$ randomize() for n = 1 to len(a$) * 2 a = int(ran(len(a$)) + 1) b = int(ran(len(a$)) + 1) tmp$ = mid$(a$, a, 1) mid$(a$, a, 1) = mid$(a$, b, 1) mid$(a$, b, 1) = tmp$ next n return a$ end sub // sub show_status(setup) local n, tmpy, y colour 197, 0, 0 for n = 0 to 3 box 310 + n, 0 + n, 510 - n, 300 - n box 0 + n, 313 + n, 510 - n, 407 - n next n colour 0, 0, 0 if not first_game clear fill box 314, 4, 506, 296 if setup = true return y = 3 for n = 1 to players tmpy = y my_text(315, y, player$(n, 1) + " Score = " + str$(sc(n))) y = y + 16 if player$(n, 2) <> "" then my_text(315, y, "Skill level = " + player$(n, 2)) end if y = y + 16 write(rack$(n), 315, y) y = y + 25 next n my_text(315, y, "Tiles remaining = ") y = y + 16 my_text(315, y, str$(len(tiles$))) end sub // sub my_text(xa, ya, t$) local x, xb, y, yb local pix$ xb = xa + len(t$) * 8 yb = ya + 16 text xa, ya, t$ colour 255, 255, 0 for y = ya to yb for x = xa to xb pix$ = getbit$(x, y, x, y) if mid$(pix$, 9) = "000000" then dot x, y end if next x next y colour 0, 0, 0 end sub // sub validate_dictionary() local closed, err local a$, b$, sys$, tmp$ open #1, home$ + "\\based.txt", "r" input #1 a$ while( ! eof(1)) input #1 b$ if a$ >= b$ then if closed = false then closed = true close window print "These words are repeated within based.txt or not in alphabetical order, please delete them." print "(Press any key to continue)" end if err = true print a$, " ", b$ inkey$ end if a$ = b$ wend close #1 if err then sys$ = system$("del " + home$ + "\\dictionary") error "\n\nThe dictionary has not been validated.\n" end if end sub // sub replenish$(r$) local n, rnd if tiles$ <> "" then randomize() tiles$ = shuffle$(tiles$) for n = 1 to len(r$) if mid$(r$, n, 1) = " " then repeat rnd = int(ran(len(tiles$))) + 1 until(rnd > 0 and rnd <= len(tiles$)) mid$(r$, n, 1) = mid$(tiles$, rnd, 1) tiles$ = left$(tiles$, rnd - 1) + mid$(tiles$, rnd + 1) if tiles$ = "" break end if next n end if for n = 1 to len(r$) repeat if mid$(r$, n, 1) = " " then r$ = left$(r$, n - 1) + mid$(r$, n + 1) end if until(mid$(r$, n, 1) <> " ") next n return r$ end sub // sub create_dictionary() local count, n, pos local sys$, word$ open #1, "based.txt", "r" open #2, "d", "w" while( ! eof(1)) input #1 word$ word$ = word$ + "*" print #2, word$ count = count + 1 for n = 1 to len(word$) - 1 pos = instr(word$, "*") word$ = mid$(word$, 2, pos - 2) + "*" + left$(word$, 1) + mid$(word$, pos + 1) if left$(word$, 1) <> "*" then print #2, word$ count = count + 1 end if next n wend close #1 close #2 open #1, home$ + "\\d", "r" local d$(count) for n = 1 to count input #1 d$(n) next n close #1 sys$ = system$("del " + home$ + "\\scrabble\\d") stringsort(d$()) open #1, home$ + "\\dictionary", "w" for n = 1 to count print #1, d$(n) next n close #1 end sub // sub index() local count, tidx local tmp$, word$ open #1, home$ + "\\dictionary", "r" idx(0) = 0 tmp$ = "A" count = 1 while( ! eof(1)) repeat tidx = tell(1) input #1 word$ until(left$(word$, 1) <> tmp$) if word$ <> "" then idx(asc(left$(word$, 1)) - 65) = tidx tmp$ = left$(word$, 1) end if wend close #1 open #1, home$ + "\\based.txt", "r" base_idx(0) = 0 tmp$ = "A" count = 1 while( ! eof(1)) repeat tidx = tell(1) input #1 word$ until(left$(word$, 1) <> tmp$) if word$ <> "" then base_idx(asc(left$(word$, 1)) - 65) = tidx tmp$ = left$(word$, 1) end if wend close #1 end sub // sub get_players() local n, num, y local key$, ordinal$, prompt$, q$, rack$ comment("How many players are there?") repeat key$ = inkey$ until(key$ >= "1" and key$ <= "4") players = val(key$) dim player$(players, 2) dim rack$(players) dim sc(players) y = 3 clear fill box 314, 4, 506, 296 for n = 1 to players ordinal$ = ordinal$(n) comment("What is the name of the " + ordinal$ + " player?") player$(n, 1) = get_name$() my_text(315, y, player$(n, 1)) y = y + 16 q$ = question$("Do you want the computer to play for this person?") if q$ = "y" then comment("Enter the skill level for this player (1 to 4).") repeat key$ = inkey$ until(key$ >= "1" and key$ <= "4") player$(n, 2) = key$ my_text(315, y, "Skill level = " + player$(n, 2)) else player$(n, 2) = "" end if y = y + 16 rack$ = " " rack$(n) = replenish$(rack$) scroll(rack$(n), y) y = y + 25 next n end sub // sub scroll(r$, target) local done, jump, n, ori, start, x, y local pos(7, 2) ori = 276 x = 315 jump = 20 for n = 1 to 7 pos(n, 1) = x pos(n, 2) = ori ori = ori + 10 x = x + 20 next n start = 1 repeat for n = start to 7 if pos(n, 2) > target and pos(n, 2) < 276 then clear fill box pos(n, 1), pos(n, 2), pos(n, 1) + 20, pos(n, 2) + 20 end if pos(n, 2) = pos(n, 2) - jump if pos(n, 2) < target pos(n, 2) = target if pos(n, 2) < 276 then write(mid$(r$, n, 1), pos(n, 1), pos(n, 2), false) end if if pos(n, 2) <= target then start = start + 1 done = done + 1 end if next n pause .001 until(done = 7) end sub // sub get_name$() local key$, name$ repeat key$ = inkey$ if len(key$) = 1 name$ = name$ + key$ if key$ = "backspace" name$ = left$(name$, len(name$) - 1) clear fill box 4, 333, 80, 349 my_text(4, 333, name$) until(key$ = "enter") return name$ end sub // sub ordinal$(x) local style$ switch x case 1 style$ = "first" break case 2 style$ = "second" break case 3 style$ = "third" break case 4 style$ = "fourth" break end switch return style$ end sub // sub write(p$, x, y, disp) local m, n local pix$, tmp$ x = x + 1 y = y + 1 for n = 1 to len(p$) tmp$ = mid$(p$, n, 1) if tmp$ = " " then clear fill box x, y, x + 20, y + 20 end if if tmp$ >= "A" and tmp$ <= "Z" then restore letter_points for m = 0 to asc(tmp$) - 65 read pix$ next m if disp = true then // fill box x + 1, y + 1, x + 16, y + 16 pix$ = highlight_blue$(pix$) putbit pix$, x, y else putbit pix$, x, y end if end if if tmp$ = "?" then restore blank read pix$ putbit pix$, x, y end if x = x + 20 next n return x + 19 end sub // sub highlight_blue$(pix$) local pos local graf$, header$ // mid$(pix$,11)=graphic data header$ = header$(pix$) graf$ = graphic_data$(pix$) for pos = 5 to len(graf$) step 6 mid$(graf$, pos, 2) = "ff" next pos return header$ + graf$ end sub // sub header$(pix$) return left$(pix$, 10) end sub // sub graphic_data$(pix$) return mid$(pix$, 11) end sub // sub write_blank(t$, x, y, disp) local m, n local letter$, pix$ x = x + 1 y = y + 1 for m = 1 to len(t$) letter$ = mid$(t$, m, 1) restore blanks for n = 0 to asc(letter$) - 65 read pix$ next n if disp = true then // fill box x + 1, y + 1, x + 16, y + 16 pix$ = highlight_blue$(pix$) putbit pix$, x, y else putbit pix$, x, y end if x = x + 20 next m end sub // sub draw_board$() local m, n, x, y local pix$ for n = 1 to 15 for m = 1 to 15 print_square(m, n) next m next n box 0, 0, 300, 300 end sub // sub print_square(m, n) local x, y local pix$ x = grid_scr(m) y = grid_scr(n) if board$(m, n) = "3W" then restore triple_word read pix$ fill box x, y, x + 20, y + 20 putbit pix$, x, y end if if board$(m, n) = "2L" then restore double_letter read pix$ fill box x, y, x + 20, y + 20 putbit pix$, x, y end if if board$(m, n) = "2W" then restore double_word read pix$ fill box x, y, x + 20, y + 20 putbit pix$, x, y end if if board$(m, n) = "3L" then restore triple_letter read pix$ fill box x, y, x + 20, y + 20 putbit pix$, x, y end if if board$(m, n) = "01" then colour 185, 189, 106 fill box x + 1, y + 1, x + 19, y + 19 colour 0, 0, 0 end if clear box x, y, x + 20, y + 20 // draw grid end sub // sub scr_grid(x) local tmp tmp = int(x / 20) return tmp + 1 end sub // sub grid_scr(x) local tmp tmp = (x * 20) - 20 return tmp end sub // sub SetupBoard() local count, x, y local lin$ restore board dim board$(15, 15) for y = 1 to 15 count = 1 read lin$ for x = 1 to 30 step 2 board$(count, y) = mid$(lin$, x, 2) count = count + 1 next x next y dim tile$(16, 16) end sub // sub lock() local sys$ sys$ = system$("attrib +r based.txt") end sub // sub unlock() sys$ = system$("attrib -r based.txt") end sub // sub stringsort(sortarray$(), low) stringquicksort(low, arraysize(sortarray$(), 1), sortarray$()) return end sub // sub stringquicksort(l, r, sortarray$()) local i, j local t$, v$ if(r > l) then v$ = sortarray$(r) i = l - 1 j = r do i = i + 1 while(sortarray$(i) < v$) i = i + 1 wend j = j - 1 while(sortarray$(j) > v$ and j >= 1) j = j - 1 wend if(i >= j) break t$ = sortarray$(i) sortarray$(i) = sortarray$(j) sortarray$(j) = t$ loop t$ = sortarray$(i) sortarray$(i) = sortarray$(r) sortarray$(r) = t$ stringquicksort(l, i - 1, sortarray$()) stringquicksort(i + 1, r, sortarray$()) end if return end sub // label board data "3W01012L0101013W0101012L01013W" data "012W0101013L0101013L0101012W01" data "01012W0101012L012L0101012W0101" data "2L01012W0101012L0101012W01012L" data "010101012W01010101012W01010101" data "013L0101013L0101013L0101013L01" data "01012L0101012L012L0101012L0101" data "3W01012L0101012W0101012L01013W" data "01012L0101012L012L0101012L0101" data "013L0101013L0101013L0101013L01" data "010101012W01010101012W01010101" data "2L01012W0101012L0101012W01012L" data "01012W0101012L012L0101012W0101" data "012W0101013L0101013L0101012W01" data "3W01012L0101013W0101012L01013W" // label tiles data "AAAAAAAAABBCCDDDDEEEEEEEEEEEEFFGGGHHIIIIIIIIIJKLLLLMMNNNNNNOOOOOOOOPPQRRRRRRSSSSTTTTTTUUUUVVWWXYYZ??" // label points data 1, 3, 3, 2, 1, 4, 2, 4, 1, 8, 5, 1, 3, 1, 1, 3, 10, 1, 1, 1, 1, 4, 4, 8, 4, 10, 0 // A B C D E F G H I J K L M N O P Q R S T U V W X Y Z ? // label letter_points // A with points data "rgb 18,18:000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5000000000000eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5000000000000eadfb5eadfb5eadfb5eadfb5000000eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5000000000000eadfb5eadfb5eadfb5eadfb5000000eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5000000000000eadfb5eadfb5eadfb5000000eadfb5000000eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5000000000000eadfb5eadfb5eadfb5000000eadfb5000000eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5000000000000eadfb5eadfb5000000eadfb5eadfb5eadfb5000000eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5000000000000eadfb5eadfb5000000eadfb5eadfb5eadfb5000000eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5000000000000eadfb5eadfb5000000000000000000000000000000eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5000000000000eadfb5000000eadfb5eadfb5eadfb5eadfb5eadfb5000000eadfb5eadfb5eadfb5eadfb5eadfb5000000eadfb5eadfb5000000000000eadfb5000000eadfb5eadfb5eadfb5eadfb5eadfb5000000eadfb5eadfb5eadfb5eadfb5000000000000eadfb5eadfb5000000000000000000000000000000eadfb5eadfb5eadfb5000000000000000000eadfb5eadfb5eadfb5eadfb5000000eadfb5eadfb5000000000000eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5000000eadfb5eadfb5000000000000eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5000000eadfb5eadfb5000000000000eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5000000000000000000eadfb5000000000000eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" // B with points data "rgb 18,18:000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5000000000000eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5000000000000eadfb5000000000000000000000000000000000000eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5000000000000eadfb5eadfb5000000eadfb5eadfb5eadfb5eadfb5000000eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5000000000000eadfb5eadfb5000000eadfb5eadfb5eadfb5eadfb5000000eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5000000000000eadfb5eadfb5000000eadfb5eadfb5eadfb5eadfb5000000eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5000000000000eadfb5eadfb5000000000000000000000000000000eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5000000000000eadfb5eadfb5000000eadfb5eadfb5eadfb5eadfb5000000eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5000000000000eadfb5eadfb5000000eadfb5eadfb5eadfb5eadfb5000000eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5000000000000eadfb5eadfb5000000eadfb5eadfb5eadfb5eadfb5000000eadfb5eadfb5eadfb5000000000000000000000000eadfb5000000000000eadfb5eadfb5000000eadfb5eadfb5eadfb5eadfb5000000eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5000000eadfb5000000000000eadfb5000000000000000000000000000000000000eadfb5eadfb5eadfb5eadfb5eadfb5000000000000000000eadfb5000000000000eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5000000eadfb5000000000000eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5000000eadfb5000000000000eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5000000000000000000000000eadfb5000000000000eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" // C with points data "rgb 18,18:000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5000000000000eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5000000000000eadfb5eadfb5eadfb5000000000000000000000000eadfb5000000eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5000000000000eadfb5eadfb5000000eadfb5eadfb5eadfb5eadfb5000000000000eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5000000000000eadfb5000000eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5000000eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5000000000000eadfb5000000eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5000000000000eadfb5000000eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5000000000000eadfb5000000eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5000000000000eadfb5000000eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5000000000000eadfb5000000eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5000000eadfb5eadfb5000000000000000000000000eadfb5000000000000eadfb5eadfb5000000eadfb5eadfb5eadfb5eadfb5000000eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5000000eadfb5000000000000eadfb5eadfb5eadfb5000000000000000000000000eadfb5eadfb5eadfb5eadfb5eadfb5000000000000000000eadfb5000000000000eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5000000eadfb5000000000000eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5000000eadfb5000000000000eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5000000000000000000000000eadfb5000000000000eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" // D with points data "rgb 18,18:000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5000000000000eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5000000000000eadfb5000000000000000000000000000000eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5000000000000eadfb5eadfb5000000eadfb5eadfb5eadfb5000000000000eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5000000000000eadfb5eadfb5000000eadfb5eadfb5eadfb5eadfb5000000eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5000000000000eadfb5eadfb5000000eadfb5eadfb5eadfb5eadfb5eadfb5000000eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5000000000000eadfb5eadfb5000000eadfb5eadfb5eadfb5eadfb5eadfb5000000eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5000000000000eadfb5eadfb5000000eadfb5eadfb5eadfb5eadfb5eadfb5000000eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5000000000000eadfb5eadfb5000000eadfb5eadfb5eadfb5eadfb5eadfb5000000eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5000000000000eadfb5eadfb5000000eadfb5eadfb5eadfb5eadfb5000000eadfb5eadfb5eadfb5000000000000000000000000eadfb5000000000000eadfb5eadfb5000000eadfb5eadfb5eadfb5000000000000eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5000000eadfb5000000000000eadfb5000000000000000000000000000000eadfb5eadfb5eadfb5eadfb5eadfb5000000000000000000000000eadfb5000000000000eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5000000eadfb5eadfb5eadfb5eadfb5000000000000eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5000000000000000000000000eadfb5000000000000eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5000000000000eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" // E with points data "rgb 18,18:000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5000000000000eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5000000000000eadfb5000000000000000000000000000000000000eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5000000000000eadfb5eadfb5000000eadfb5eadfb5eadfb5000000eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5000000000000eadfb5eadfb5000000eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5000000000000eadfb5eadfb5000000eadfb5eadfb5000000eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5000000000000eadfb5eadfb5000000000000000000000000eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5000000000000eadfb5eadfb5000000eadfb5eadfb5000000eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5000000000000eadfb5eadfb5000000eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5000000000000eadfb5eadfb5000000eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5000000eadfb5eadfb5000000000000eadfb5eadfb5000000eadfb5eadfb5eadfb5000000eadfb5eadfb5eadfb5eadfb5eadfb5000000000000eadfb5eadfb5000000000000eadfb5000000000000000000000000000000000000eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5000000eadfb5eadfb5000000000000eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5000000eadfb5eadfb5000000000000eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5000000eadfb5eadfb5000000000000eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5000000000000000000eadfb5000000000000eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" // F with points data "rgb 18,18:000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5000000000000eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5000000000000eadfb5000000000000000000000000000000000000eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5000000000000eadfb5eadfb5000000eadfb5eadfb5eadfb5000000eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5000000000000eadfb5eadfb5000000eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5000000000000eadfb5eadfb5000000eadfb5eadfb5000000eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5000000000000eadfb5eadfb5000000000000000000000000eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5000000000000eadfb5eadfb5000000eadfb5eadfb5000000eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5000000000000eadfb5eadfb5000000eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5000000000000eadfb5eadfb5000000eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5000000000000eadfb5eadfb5000000000000eadfb5eadfb5000000eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5000000eadfb5000000eadfb5eadfb5000000000000eadfb5000000000000000000eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5000000eadfb5000000eadfb5eadfb5000000000000eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5000000000000000000000000eadfb5eadfb5000000000000eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5000000eadfb5eadfb5000000000000eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5000000000000000000eadfb5000000000000eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" // G with points data "rgb 18,18:000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5000000000000eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5000000000000eadfb5eadfb5eadfb5000000000000000000000000eadfb5000000eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5000000000000eadfb5eadfb5000000eadfb5eadfb5eadfb5eadfb5000000000000eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5000000000000eadfb5000000eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5000000eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5000000000000eadfb5000000eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5000000000000eadfb5000000eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5000000000000eadfb5000000eadfb5eadfb5eadfb5eadfb5eadfb5000000000000000000eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5000000000000eadfb5000000eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5000000eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5000000000000eadfb5000000eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5000000eadfb5eadfb5000000000000000000000000eadfb5000000000000eadfb5eadfb5000000eadfb5eadfb5eadfb5eadfb5eadfb5000000eadfb5eadfb5eadfb5eadfb5eadfb5000000eadfb5000000000000eadfb5eadfb5eadfb5000000000000000000000000000000eadfb5eadfb5eadfb5000000000000000000000000eadfb5000000000000eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5000000eadfb5eadfb5eadfb5eadfb5000000000000eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5000000000000000000000000eadfb5000000000000eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5000000000000eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" // H with points data "rgb 18,18:000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5000000000000eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5000000000000eadfb5000000000000000000eadfb5eadfb5000000000000000000eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5000000000000eadfb5eadfb5000000eadfb5eadfb5eadfb5eadfb5000000eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5000000000000eadfb5eadfb5000000eadfb5eadfb5eadfb5eadfb5000000eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5000000000000eadfb5eadfb5000000eadfb5eadfb5eadfb5eadfb5000000eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5000000000000eadfb5eadfb5000000000000000000000000000000000000eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5000000000000eadfb5eadfb5000000eadfb5eadfb5eadfb5eadfb5000000eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5000000000000eadfb5eadfb5000000eadfb5eadfb5eadfb5eadfb5000000eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5000000000000eadfb5eadfb5000000eadfb5eadfb5eadfb5eadfb5000000eadfb5eadfb5eadfb5eadfb5000000000000eadfb5eadfb5000000000000eadfb5eadfb5000000eadfb5eadfb5eadfb5eadfb5000000eadfb5eadfb5eadfb5000000eadfb5000000eadfb5eadfb5000000000000eadfb5000000000000000000eadfb5eadfb5000000000000000000eadfb5eadfb5000000eadfb5000000eadfb5eadfb5000000000000eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5000000000000000000000000eadfb5eadfb5000000000000eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5000000eadfb5eadfb5000000000000eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5000000000000000000eadfb5000000000000eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" // I with points data "rgb 18,18:000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5000000000000eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5000000000000eadfb5000000000000000000eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5000000000000eadfb5eadfb5000000eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5000000000000eadfb5eadfb5000000eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5000000000000eadfb5eadfb5000000eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5000000000000eadfb5eadfb5000000eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5000000000000eadfb5eadfb5000000eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5000000000000eadfb5eadfb5000000eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5000000000000eadfb5eadfb5000000eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5000000eadfb5eadfb5000000000000eadfb5eadfb5000000eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5000000000000eadfb5eadfb5000000000000eadfb5000000000000000000eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5000000eadfb5eadfb5000000000000eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5000000eadfb5eadfb5000000000000eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5000000eadfb5eadfb5000000000000eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5000000000000000000eadfb5000000000000eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" // J with points data "rgb 18,18:000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5000000000000eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5000000000000eadfb5eadfb5000000000000000000eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5000000000000eadfb5eadfb5eadfb5000000eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5000000000000eadfb5eadfb5eadfb5000000eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5000000000000eadfb5eadfb5eadfb5000000eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5000000000000eadfb5eadfb5eadfb5000000eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5000000000000eadfb5eadfb5eadfb5000000eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5000000000000eadfb5eadfb5eadfb5000000eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5000000000000eadfb5eadfb5eadfb5000000eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5000000000000000000000000eadfb5000000000000000000eadfb5eadfb5000000eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5000000eadfb5eadfb5000000eadfb5000000000000000000000000000000eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5000000000000000000000000eadfb5000000000000eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5000000eadfb5eadfb5000000eadfb5000000000000eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5000000000000000000000000eadfb5000000000000eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5000000000000eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" // K with points data "rgb 18,18:000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5000000000000eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5000000000000eadfb5000000000000000000eadfb5000000000000000000eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5000000000000eadfb5eadfb5000000eadfb5eadfb5eadfb5000000eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5000000000000eadfb5eadfb5000000eadfb5eadfb5000000eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5000000000000eadfb5eadfb5000000eadfb5000000eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5000000000000eadfb5eadfb5000000000000eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5000000000000eadfb5eadfb5000000eadfb5000000eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5000000000000eadfb5eadfb5000000eadfb5eadfb5000000eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5000000000000eadfb5eadfb5000000eadfb5eadfb5eadfb5000000eadfb5eadfb5eadfb5eadfb5000000000000000000000000eadfb5000000000000eadfb5eadfb5000000eadfb5eadfb5eadfb5eadfb5000000eadfb5eadfb5eadfb5000000eadfb5eadfb5eadfb5eadfb5000000000000eadfb5000000000000000000eadfb5eadfb5000000000000000000eadfb5eadfb5000000000000000000000000eadfb5000000000000eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5000000eadfb5000000000000eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5000000000000000000000000eadfb5000000000000eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5000000000000eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" // L with points data "rgb 18,18:000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5000000000000eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5000000000000eadfb5000000000000000000eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5000000000000eadfb5eadfb5000000eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5000000000000eadfb5eadfb5000000eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5000000000000eadfb5eadfb5000000eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5000000000000eadfb5eadfb5000000eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5000000000000eadfb5eadfb5000000eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5000000000000eadfb5eadfb5000000eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5000000000000eadfb5eadfb5000000eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5000000eadfb5eadfb5000000000000eadfb5eadfb5000000eadfb5eadfb5eadfb5eadfb5000000eadfb5eadfb5eadfb5eadfb5000000000000eadfb5eadfb5000000000000eadfb5000000000000000000000000000000000000000000eadfb5eadfb5eadfb5eadfb5eadfb5000000eadfb5eadfb5000000000000eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5000000eadfb5eadfb5000000000000eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5000000eadfb5eadfb5000000000000eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5000000000000000000eadfb5000000000000eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" // M with points data "rgb 18,18:000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5000000000000eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5000000000000eadfb5000000000000eadfb5eadfb5eadfb5eadfb5eadfb5000000000000eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5000000000000eadfb5eadfb5000000000000eadfb5eadfb5eadfb5000000000000eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5000000000000eadfb5eadfb5000000000000eadfb5eadfb5eadfb5000000000000eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5000000000000eadfb5eadfb5000000000000eadfb5eadfb5eadfb5000000000000eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5000000000000eadfb5eadfb5000000eadfb5000000eadfb5000000eadfb5000000eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5000000000000eadfb5eadfb5000000eadfb5000000eadfb5000000eadfb5000000eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5000000000000eadfb5eadfb5000000eadfb5000000eadfb5000000eadfb5000000eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5000000000000eadfb5eadfb5000000eadfb5eadfb5000000eadfb5eadfb5000000eadfb5eadfb5000000000000000000000000eadfb5000000000000eadfb5eadfb5000000eadfb5eadfb5000000eadfb5eadfb5000000eadfb5eadfb5eadfb5eadfb5eadfb5000000eadfb5000000000000eadfb5000000000000000000eadfb5000000eadfb5000000000000000000eadfb5eadfb5000000000000000000eadfb5000000000000eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5000000eadfb5000000000000eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5000000eadfb5000000000000eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5000000000000000000000000eadfb5000000000000eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" // N with points data "rgb 18,18:000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5000000000000eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5000000000000eadfb5000000000000eadfb5eadfb5eadfb5000000000000000000eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5000000000000eadfb5eadfb5000000000000eadfb5eadfb5eadfb5000000eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5000000000000eadfb5eadfb5000000000000eadfb5eadfb5eadfb5000000eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5000000000000eadfb5eadfb5000000eadfb5000000eadfb5eadfb5000000eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5000000000000eadfb5eadfb5000000eadfb5000000eadfb5eadfb5000000eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5000000000000eadfb5eadfb5000000eadfb5eadfb5000000eadfb5000000eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5000000000000eadfb5eadfb5000000eadfb5eadfb5000000eadfb5000000eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5000000000000eadfb5eadfb5000000eadfb5eadfb5eadfb5000000000000eadfb5eadfb5eadfb5eadfb5eadfb5000000eadfb5eadfb5000000000000eadfb5eadfb5000000eadfb5eadfb5eadfb5000000000000eadfb5eadfb5eadfb5eadfb5000000000000eadfb5eadfb5000000000000eadfb5000000000000000000eadfb5eadfb5eadfb5000000eadfb5eadfb5eadfb5eadfb5eadfb5000000eadfb5eadfb5000000000000eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5000000eadfb5eadfb5000000000000eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5000000eadfb5eadfb5000000000000eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5000000000000000000eadfb5000000000000eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" // O with points data "rgb 18,18:000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5000000000000eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5000000000000eadfb5eadfb5eadfb5000000000000000000000000eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5000000000000eadfb5eadfb5000000eadfb5eadfb5eadfb5eadfb5000000eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5000000000000eadfb5000000eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5000000eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5000000000000eadfb5000000eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5000000eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5000000000000eadfb5000000eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5000000eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5000000000000eadfb5000000eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5000000eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5000000000000eadfb5000000eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5000000eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5000000000000eadfb5000000eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5000000eadfb5eadfb5eadfb5eadfb5000000eadfb5eadfb5000000000000eadfb5eadfb5000000eadfb5eadfb5eadfb5eadfb5000000eadfb5eadfb5eadfb5eadfb5000000000000eadfb5eadfb5000000000000eadfb5eadfb5eadfb5000000000000000000000000eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5000000eadfb5eadfb5000000000000eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5000000eadfb5eadfb5000000000000eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5000000eadfb5eadfb5000000000000eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5000000000000000000eadfb5000000000000eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" // P with points data "rgb 18,18:000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5000000000000eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5000000000000eadfb5000000000000000000000000000000eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5000000000000eadfb5eadfb5000000eadfb5eadfb5eadfb5000000eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5000000000000eadfb5eadfb5000000eadfb5eadfb5eadfb5000000eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5000000000000eadfb5eadfb5000000eadfb5eadfb5eadfb5000000eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5000000000000eadfb5eadfb5000000eadfb5eadfb5eadfb5000000eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5000000000000eadfb5eadfb5000000000000000000000000eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5000000000000eadfb5eadfb5000000eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5000000000000eadfb5eadfb5000000eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5000000000000000000000000eadfb5000000000000eadfb5eadfb5000000eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5000000eadfb5000000000000eadfb5000000000000000000eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5000000000000000000eadfb5000000000000eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5000000eadfb5000000000000eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5000000eadfb5000000000000eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5000000000000000000000000eadfb5000000000000eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" // Q with points data "rgb 18,18:000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5000000000000eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5000000000000eadfb5eadfb5eadfb5000000000000000000000000eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5000000000000eadfb5eadfb5000000eadfb5eadfb5eadfb5eadfb5000000eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5000000000000eadfb5000000eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5000000eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5000000000000eadfb5000000eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5000000eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5000000000000eadfb5000000eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5000000eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5000000000000eadfb5000000eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5000000eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5000000000000eadfb5000000eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5000000eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5000000000000eadfb5000000eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5000000eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5000000000000eadfb5eadfb5000000eadfb5eadfb5eadfb5eadfb5000000eadfb5eadfb5eadfb5000000eadfb5000000000000000000000000000000eadfb5eadfb5eadfb5000000000000000000000000eadfb5eadfb5eadfb5eadfb5000000eadfb5000000eadfb5000000000000000000eadfb5eadfb5eadfb5eadfb5eadfb5000000000000eadfb5eadfb5eadfb5eadfb5000000eadfb5000000eadfb5000000000000000000eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5000000000000eadfb5eadfb5eadfb5000000eadfb5000000000000000000000000000000eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5000000000000eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" // R with points data "rgb 18,18:000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5000000000000eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5000000000000eadfb5000000000000000000000000000000eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5000000000000eadfb5eadfb5000000eadfb5eadfb5eadfb5000000eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5000000000000eadfb5eadfb5000000eadfb5eadfb5eadfb5000000eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5000000000000eadfb5eadfb5000000eadfb5eadfb5eadfb5000000eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5000000000000eadfb5eadfb5000000eadfb5eadfb5eadfb5000000eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5000000000000eadfb5eadfb5000000000000000000000000eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5000000000000eadfb5eadfb5000000eadfb5eadfb5000000eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5000000000000eadfb5eadfb5000000eadfb5eadfb5eadfb5000000eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5000000eadfb5eadfb5000000000000eadfb5eadfb5000000eadfb5eadfb5eadfb5eadfb5000000eadfb5eadfb5eadfb5eadfb5000000000000eadfb5eadfb5000000000000eadfb5000000000000000000eadfb5eadfb5eadfb5000000000000eadfb5eadfb5eadfb5eadfb5000000eadfb5eadfb5000000000000eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5000000eadfb5eadfb5000000000000eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5000000eadfb5eadfb5000000000000eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5000000000000000000eadfb5000000000000eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" // S with points data "rgb 18,18:000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5000000000000eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5000000000000eadfb5eadfb5000000000000eadfb5000000eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5000000000000eadfb5000000eadfb5eadfb5000000000000eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5000000000000eadfb5000000eadfb5eadfb5eadfb5000000eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5000000000000eadfb5000000eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5000000000000eadfb5eadfb5000000000000eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5000000000000eadfb5eadfb5eadfb5eadfb5000000eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5000000000000eadfb5eadfb5eadfb5eadfb5eadfb5000000eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5000000000000eadfb5000000eadfb5eadfb5eadfb5000000eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5000000eadfb5eadfb5000000000000eadfb5000000000000eadfb5eadfb5000000eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5000000000000eadfb5eadfb5000000000000eadfb5000000eadfb5000000000000eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5000000eadfb5eadfb5000000000000eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5000000eadfb5eadfb5000000000000eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5000000eadfb5eadfb5000000000000eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5000000000000000000eadfb5000000000000eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" // T with points data "rgb 18,18:000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5000000000000eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5000000000000000000000000000000000000000000000000000000000000000000eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5000000000000000000eadfb5eadfb5eadfb5000000eadfb5eadfb5eadfb5000000eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5000000000000eadfb5eadfb5eadfb5eadfb5000000eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5000000000000eadfb5eadfb5eadfb5eadfb5000000eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5000000000000eadfb5eadfb5eadfb5eadfb5000000eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5000000000000eadfb5eadfb5eadfb5eadfb5000000eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5000000000000eadfb5eadfb5eadfb5eadfb5000000eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5000000000000eadfb5eadfb5eadfb5eadfb5000000eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5000000eadfb5eadfb5000000000000eadfb5eadfb5eadfb5eadfb5000000eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5000000000000eadfb5eadfb5000000000000eadfb5eadfb5eadfb5000000000000000000eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5000000eadfb5eadfb5000000000000eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5000000eadfb5eadfb5000000000000eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5000000eadfb5eadfb5000000000000eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5000000000000000000eadfb5000000000000eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" // U with points data "rgb 18,18:000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5000000000000eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5000000000000eadfb5000000000000000000eadfb5eadfb5000000000000000000eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5000000000000eadfb5eadfb5000000eadfb5eadfb5eadfb5eadfb5000000eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5000000000000eadfb5eadfb5000000eadfb5eadfb5eadfb5eadfb5000000eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5000000000000eadfb5eadfb5000000eadfb5eadfb5eadfb5eadfb5000000eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5000000000000eadfb5eadfb5000000eadfb5eadfb5eadfb5eadfb5000000eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5000000000000eadfb5eadfb5000000eadfb5eadfb5eadfb5eadfb5000000eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5000000000000eadfb5eadfb5000000eadfb5eadfb5eadfb5eadfb5000000eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5000000000000eadfb5eadfb5000000eadfb5eadfb5eadfb5eadfb5000000eadfb5eadfb5eadfb5eadfb5eadfb5000000eadfb5eadfb5000000000000eadfb5eadfb5000000eadfb5eadfb5eadfb5eadfb5000000eadfb5eadfb5eadfb5eadfb5000000000000eadfb5eadfb5000000000000eadfb5eadfb5eadfb5000000000000000000000000eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5000000eadfb5eadfb5000000000000eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5000000eadfb5eadfb5000000000000eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5000000eadfb5eadfb5000000000000eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5000000000000000000eadfb5000000000000eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" // V with points data "rgb 18,18:000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5000000000000eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5000000000000000000000000000000eadfb5eadfb5eadfb5000000000000000000eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5000000000000eadfb5000000eadfb5eadfb5eadfb5eadfb5eadfb5000000eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5000000000000eadfb5000000eadfb5eadfb5eadfb5eadfb5eadfb5000000eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5000000000000eadfb5eadfb5000000eadfb5eadfb5eadfb5000000eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5000000000000eadfb5eadfb5000000eadfb5eadfb5eadfb5000000eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5000000000000eadfb5eadfb5eadfb5000000eadfb5000000eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5000000000000eadfb5eadfb5eadfb5000000eadfb5000000eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5000000000000eadfb5eadfb5eadfb5000000eadfb5000000eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5000000000000eadfb5eadfb5000000000000eadfb5eadfb5eadfb5eadfb5000000eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5000000eadfb5000000eadfb5eadfb5000000000000eadfb5eadfb5eadfb5eadfb5000000eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5000000eadfb5000000eadfb5eadfb5000000000000eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5000000000000000000000000eadfb5eadfb5000000000000eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5000000eadfb5eadfb5000000000000eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5000000000000000000eadfb5000000000000eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" // W with points data "rgb 18,18:000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5000000000000eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5000000000000000000000000000000eadfb5000000000000eadfb5000000000000eadfb5000000000000000000eadfb5eadfb5eadfb5000000000000eadfb5000000eadfb5eadfb5eadfb5000000eadfb5000000eadfb5eadfb5eadfb5000000eadfb5eadfb5eadfb5eadfb5000000000000eadfb5000000eadfb5eadfb5eadfb5000000eadfb5000000eadfb5eadfb5eadfb5000000eadfb5eadfb5eadfb5eadfb5000000000000eadfb5eadfb5000000eadfb5eadfb5eadfb5000000eadfb5eadfb5eadfb5000000eadfb5eadfb5eadfb5eadfb5eadfb5000000000000eadfb5eadfb5000000eadfb5eadfb5eadfb5000000eadfb5eadfb5eadfb5000000eadfb5eadfb5eadfb5eadfb5eadfb5000000000000eadfb5eadfb5eadfb5000000eadfb5000000eadfb5000000eadfb5000000eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5000000000000eadfb5eadfb5eadfb5000000eadfb5000000eadfb5000000eadfb5000000eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5000000000000eadfb5eadfb5eadfb5000000eadfb5000000eadfb5000000eadfb5000000eadfb5eadfb5000000000000eadfb5eadfb5000000000000eadfb5eadfb5eadfb5eadfb5000000eadfb5eadfb5eadfb5000000eadfb5eadfb5000000eadfb5000000eadfb5eadfb5000000000000eadfb5eadfb5eadfb5eadfb5000000eadfb5eadfb5eadfb5000000eadfb5eadfb5000000eadfb5000000eadfb5eadfb5000000000000eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5000000000000000000000000eadfb5eadfb5000000000000eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5000000eadfb5eadfb5000000000000eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5000000000000000000eadfb5000000000000eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" // X with points data "rgb 18,18:000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5000000000000eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5000000000000000000000000000000eadfb5eadfb5eadfb5eadfb5000000000000000000eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5000000000000eadfb5000000eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5000000eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5000000000000eadfb5eadfb5000000eadfb5eadfb5eadfb5eadfb5000000eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5000000000000eadfb5eadfb5eadfb5000000eadfb5eadfb5000000eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5000000000000eadfb5eadfb5eadfb5eadfb5000000000000eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5000000000000eadfb5eadfb5eadfb5eadfb5000000000000eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5000000000000eadfb5eadfb5eadfb5000000eadfb5eadfb5000000eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5000000000000eadfb5eadfb5000000eadfb5eadfb5eadfb5eadfb5000000eadfb5eadfb5eadfb5000000000000000000000000eadfb5000000000000eadfb5000000eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5000000eadfb5eadfb5000000eadfb5eadfb5000000eadfb5000000000000000000000000000000eadfb5eadfb5eadfb5eadfb5000000000000000000eadfb5000000000000000000000000eadfb5000000000000eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5000000eadfb5eadfb5000000eadfb5000000000000eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5000000000000000000000000eadfb5000000000000eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5000000000000eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" // Y with points data "rgb 18,18:000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5000000000000eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5000000000000000000000000000000eadfb5eadfb5eadfb5000000000000000000eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5000000000000eadfb5000000eadfb5eadfb5eadfb5eadfb5eadfb5000000eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5000000000000eadfb5eadfb5000000eadfb5eadfb5eadfb5000000eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5000000000000eadfb5eadfb5000000eadfb5eadfb5eadfb5000000eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5000000000000eadfb5eadfb5eadfb5000000eadfb5000000eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5000000000000eadfb5eadfb5eadfb5eadfb5000000eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5000000000000eadfb5eadfb5eadfb5eadfb5000000eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5000000000000eadfb5eadfb5eadfb5eadfb5000000eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5000000000000eadfb5eadfb5000000000000eadfb5eadfb5eadfb5eadfb5000000eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5000000eadfb5000000eadfb5eadfb5000000000000eadfb5eadfb5eadfb5000000000000000000eadfb5eadfb5eadfb5eadfb5eadfb5000000eadfb5000000eadfb5eadfb5000000000000eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5000000000000000000000000eadfb5eadfb5000000000000eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5000000eadfb5eadfb5000000000000eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5000000000000000000eadfb5000000000000eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" // Z with points data "rgb 18,18:000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5000000000000eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5000000000000000000000000000000000000000000000000000000000000eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5000000000000000000eadfb5eadfb5eadfb5eadfb5eadfb5000000eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5000000000000eadfb5eadfb5eadfb5eadfb5eadfb5000000eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5000000000000eadfb5eadfb5eadfb5eadfb5eadfb5000000eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5000000000000eadfb5eadfb5eadfb5eadfb5000000eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5000000000000eadfb5eadfb5eadfb5000000eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5000000000000eadfb5eadfb5000000eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5000000000000eadfb5eadfb5000000eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5000000000000eadfb5000000eadfb5eadfb5eadfb5eadfb5eadfb5000000eadfb5eadfb5eadfb5000000eadfb5000000000000000000000000000000000000000000000000000000000000000000000000000000eadfb5eadfb5eadfb5000000eadfb5000000eadfb5000000000000000000eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5000000eadfb5000000eadfb5000000000000000000eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5000000eadfb5000000000000000000000000000000eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5000000000000eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" label blank // blank data "rgb 18,18:000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5000000000000eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5000000000000eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5000000000000eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5000000000000eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5000000000000eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5000000000000eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5000000000000eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5000000000000eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5000000000000eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5000000000000eadfb5eadfb5000000000000eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5000000eadfb5eadfb5000000eadfb5000000000000eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5000000eadfb5eadfb5000000eadfb5000000000000eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5000000eadfb5eadfb5000000eadfb5000000000000eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5000000eadfb5eadfb5000000eadfb5000000000000eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5000000000000eadfb5eadfb5000000000000eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" label blanks // A Blank data "rgb 18,18:000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5000000000000eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5000000000000eadfb5eadfb5eadfb5eadfb5000000eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5000000000000eadfb5eadfb5eadfb5eadfb5000000eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5000000000000eadfb5eadfb5eadfb5000000eadfb5000000eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5000000000000eadfb5eadfb5eadfb5000000eadfb5000000eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5000000000000eadfb5eadfb5000000eadfb5eadfb5eadfb5000000eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5000000000000eadfb5eadfb5000000eadfb5eadfb5eadfb5000000eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5000000000000eadfb5eadfb5000000000000000000000000000000eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5000000000000eadfb5000000eadfb5eadfb5eadfb5eadfb5eadfb5000000eadfb5eadfb5eadfb5eadfb5000000000000eadfb5eadfb5000000000000eadfb5000000eadfb5eadfb5eadfb5eadfb5eadfb5000000eadfb5eadfb5eadfb5000000eadfb5eadfb5000000eadfb5000000000000000000000000000000eadfb5eadfb5eadfb5000000000000000000eadfb5eadfb5000000eadfb5eadfb5000000eadfb5000000000000eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5000000eadfb5eadfb5000000eadfb5000000000000eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5000000eadfb5eadfb5000000eadfb5000000000000eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5000000000000eadfb5eadfb5000000000000eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" // B Blank data "rgb 18,18:000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5000000000000eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5000000000000eadfb5000000000000000000000000000000000000eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5000000000000eadfb5eadfb5000000eadfb5eadfb5eadfb5eadfb5000000eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5000000000000eadfb5eadfb5000000eadfb5eadfb5eadfb5eadfb5000000eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5000000000000eadfb5eadfb5000000eadfb5eadfb5eadfb5eadfb5000000eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5000000000000eadfb5eadfb5000000000000000000000000000000eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5000000000000eadfb5eadfb5000000eadfb5eadfb5eadfb5eadfb5000000eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5000000000000eadfb5eadfb5000000eadfb5eadfb5eadfb5eadfb5000000eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5000000000000eadfb5eadfb5000000eadfb5eadfb5eadfb5eadfb5000000eadfb5eadfb5eadfb5eadfb5000000000000eadfb5eadfb5000000000000eadfb5eadfb5000000eadfb5eadfb5eadfb5eadfb5000000eadfb5eadfb5eadfb5000000eadfb5eadfb5000000eadfb5000000000000eadfb5000000000000000000000000000000000000eadfb5eadfb5eadfb5eadfb5000000eadfb5eadfb5000000eadfb5000000000000eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5000000eadfb5eadfb5000000eadfb5000000000000eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5000000eadfb5eadfb5000000eadfb5000000000000eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5000000000000eadfb5eadfb5000000000000eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" // C Blank data "rgb 18,18:000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5000000000000eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5000000000000eadfb5eadfb5eadfb5000000000000000000000000eadfb5000000eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5000000000000eadfb5eadfb5000000eadfb5eadfb5eadfb5eadfb5000000000000eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5000000000000eadfb5000000eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5000000eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5000000000000eadfb5000000eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5000000000000eadfb5000000eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5000000000000eadfb5000000eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5000000000000eadfb5000000eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5000000000000eadfb5000000eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5000000eadfb5eadfb5eadfb5000000000000eadfb5eadfb5000000000000eadfb5eadfb5000000eadfb5eadfb5eadfb5eadfb5000000eadfb5eadfb5eadfb5000000eadfb5eadfb5000000eadfb5000000000000eadfb5eadfb5eadfb5000000000000000000000000eadfb5eadfb5eadfb5eadfb5000000eadfb5eadfb5000000eadfb5000000000000eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5000000eadfb5eadfb5000000eadfb5000000000000eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5000000eadfb5eadfb5000000eadfb5000000000000eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5000000000000eadfb5eadfb5000000000000eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" // D Blank data "rgb 18,18:000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5000000000000eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5000000000000eadfb5000000000000000000000000000000eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5000000000000eadfb5eadfb5000000eadfb5eadfb5eadfb5000000000000eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5000000000000eadfb5eadfb5000000eadfb5eadfb5eadfb5eadfb5000000eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5000000000000eadfb5eadfb5000000eadfb5eadfb5eadfb5eadfb5eadfb5000000eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5000000000000eadfb5eadfb5000000eadfb5eadfb5eadfb5eadfb5eadfb5000000eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5000000000000eadfb5eadfb5000000eadfb5eadfb5eadfb5eadfb5eadfb5000000eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5000000000000eadfb5eadfb5000000eadfb5eadfb5eadfb5eadfb5eadfb5000000eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5000000000000eadfb5eadfb5000000eadfb5eadfb5eadfb5eadfb5000000eadfb5eadfb5eadfb5eadfb5000000000000eadfb5eadfb5000000000000eadfb5eadfb5000000eadfb5eadfb5eadfb5000000000000eadfb5eadfb5eadfb5000000eadfb5eadfb5000000eadfb5000000000000eadfb5000000000000000000000000000000eadfb5eadfb5eadfb5eadfb5eadfb5000000eadfb5eadfb5000000eadfb5000000000000eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5000000eadfb5eadfb5000000eadfb5000000000000eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5000000eadfb5eadfb5000000eadfb5000000000000eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5000000000000eadfb5eadfb5000000000000eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" // E Blank data "rgb 18,18:000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5000000000000eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5000000000000eadfb5000000000000000000000000000000000000eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5000000000000eadfb5eadfb5000000eadfb5eadfb5eadfb5000000eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5000000000000eadfb5eadfb5000000eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5000000000000eadfb5eadfb5000000eadfb5eadfb5000000eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5000000000000eadfb5eadfb5000000000000000000000000eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5000000000000eadfb5eadfb5000000eadfb5eadfb5000000eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5000000000000eadfb5eadfb5000000eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5000000000000eadfb5eadfb5000000eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5000000000000eadfb5eadfb5000000000000eadfb5eadfb5000000eadfb5eadfb5eadfb5000000eadfb5eadfb5eadfb5eadfb5000000eadfb5eadfb5000000eadfb5000000000000eadfb5000000000000000000000000000000000000eadfb5eadfb5eadfb5eadfb5000000eadfb5eadfb5000000eadfb5000000000000eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5000000eadfb5eadfb5000000eadfb5000000000000eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5000000eadfb5eadfb5000000eadfb5000000000000eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5000000000000eadfb5eadfb5000000000000eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" // F Blank data "rgb 18,18:000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5000000000000eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5000000000000eadfb5000000000000000000000000000000000000eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5000000000000eadfb5eadfb5000000eadfb5eadfb5eadfb5000000eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5000000000000eadfb5eadfb5000000eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5000000000000eadfb5eadfb5000000eadfb5eadfb5000000eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5000000000000eadfb5eadfb5000000000000000000000000eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5000000000000eadfb5eadfb5000000eadfb5eadfb5000000eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5000000000000eadfb5eadfb5000000eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5000000000000eadfb5eadfb5000000eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5000000000000eadfb5eadfb5000000000000eadfb5eadfb5000000eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5000000eadfb5eadfb5000000eadfb5000000000000eadfb5000000000000000000eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5000000eadfb5eadfb5000000eadfb5000000000000eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5000000eadfb5eadfb5000000eadfb5000000000000eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5000000eadfb5eadfb5000000eadfb5000000000000eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5000000000000eadfb5eadfb5000000000000eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" // G Blank data "rgb 18,18:000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5000000000000eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5000000000000eadfb5eadfb5eadfb5000000000000000000000000eadfb5000000eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5000000000000eadfb5eadfb5000000eadfb5eadfb5eadfb5eadfb5000000000000eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5000000000000eadfb5000000eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5000000eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5000000000000eadfb5000000eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5000000000000eadfb5000000eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5000000000000eadfb5000000eadfb5eadfb5eadfb5eadfb5eadfb5000000000000000000eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5000000000000eadfb5000000eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5000000eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5000000000000eadfb5000000eadfb5eadfb5eadfb5eadfb5eadfb5eadfb5000000eadfb5eadfb5eadfb5000000000000eadfb5eadfb5000000000000eadfb5eadfb5000000eadfb5eadfb5eadfb5eadfb5eadfb5000000eadfb5eadfb5000000eadfb5eadfb5000000eadfb5000000000000eadfb5ead