Compare commits
	
		
			7 Commits
		
	
	
		
			ed3a679bca
			...
			oob_fix
		
	
	| Author | SHA1 | Date | |
|---|---|---|---|
|  | 3e6328ac43 | ||
|  | 64902b845d | ||
|  | 1fdff47dc8 | ||
|  | e387808065 | ||
|  | 1c881d6f22 | ||
|  | cd6bf1eabe | ||
|  | 1dd01e3bc6 | 
							
								
								
									
										1
									
								
								.gitattributes
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						| @@ -0,0 +1 @@ | ||||
| util/blender export-ignore | ||||
							
								
								
									
										89
									
								
								api.lua
									
									
									
									
									
								
							
							
						
						| @@ -1,6 +1,7 @@ | ||||
| -- signs_lib api, backported from street_signs | ||||
|  | ||||
| local S = signs_lib.S | ||||
| local FS = function(...) return minetest.formspec_escape(S(...)) end | ||||
| local has_default_mod = minetest.get_modpath("default") | ||||
|  | ||||
| local function log(level, messagefmt, ...) | ||||
| @@ -165,12 +166,14 @@ local ctexcache_wide = {} | ||||
| -- entity handling | ||||
|  | ||||
| minetest.register_entity("signs_lib:text", { | ||||
| 	collisionbox = { 0, 0, 0, 0, 0, 0 }, | ||||
| 	visual = "mesh", | ||||
| 	mesh = "signs_lib_standard_sign_entity_wall.obj", | ||||
| 	textures = {}, | ||||
| 	static_save = true, | ||||
| 	backface_culling = false, | ||||
| 	initial_properties = { | ||||
| 		collisionbox = { 0, 0, 0, 0, 0, 0 }, | ||||
| 		visual = "mesh", | ||||
| 		mesh = "signs_lib_standard_sign_entity_wall.obj", | ||||
| 		textures = {}, | ||||
| 		static_save = true, | ||||
| 		backface_culling = false, | ||||
| 	}, | ||||
| 	on_activate = function(self) | ||||
| 		local node = minetest.get_node(self.object:get_pos()) | ||||
| 		if minetest.get_item_group(node.name, "sign") == 0 then | ||||
| @@ -464,15 +467,6 @@ signs_lib.charwidth_wide32 = build_char_db(32) | ||||
|  | ||||
| local math_max = math.max | ||||
|  | ||||
| local function fill_line(x, y, w, c, font_size, colorbgw) | ||||
| 	c = c or "0" | ||||
| 	local tex = { } | ||||
| 	for xx = 0, math.max(0, w), colorbgw do | ||||
| 		table.insert(tex, (":%d,%d=signs_lib_color_"..font_size.."px_%s.png"):format(x + xx, y, c)) | ||||
| 	end | ||||
| 	return table.concat(tex) | ||||
| end | ||||
|  | ||||
| -- make char texture file name | ||||
| -- if texture file does not exist use fallback texture instead | ||||
| local function char_tex(font_name, ch) | ||||
| @@ -508,6 +502,26 @@ local function char_tex_wide(font_name, ch) | ||||
| 	end | ||||
| end | ||||
|  | ||||
| -- sign colour table | ||||
| local colgrid = { | ||||
| 	["0"] = "000000", -- black | ||||
| 	["1"] = "000080", -- blue | ||||
| 	["2"] = "008000", -- dark green | ||||
| 	["3"] = "008080", -- dark cyan | ||||
| 	["4"] = "800000", -- red | ||||
| 	["5"] = "800080", -- purple | ||||
| 	["6"] = "804000", -- brown | ||||
| 	["7"] = "808080", -- light grey | ||||
| 	["8"] = "404040", -- dark grey | ||||
| 	["9"] = "8080ff", -- light blue | ||||
| 	["A"] = "80ff80", -- green | ||||
| 	["B"] = "80ffff", -- cyan | ||||
| 	["C"] = "ff8080", -- skin pink | ||||
| 	["D"] = "ff80ff", -- pink | ||||
| 	["E"] = "ffff00", -- yellow | ||||
| 	["F"] = "ffffff"  -- white | ||||
| } | ||||
|  | ||||
| local function make_line_texture(line, lineno, pos, line_width, line_height, cwidth_tab, font_size, colorbgw, cwidth_tab_wide, force_unicode_font) | ||||
| 	local width = 0 | ||||
| 	local maxw = 0 | ||||
| @@ -522,7 +536,7 @@ local function make_line_texture(line, lineno, pos, line_width, line_height, cwi | ||||
|  | ||||
| 	-- We check which chars are available here. | ||||
| 	for word_i, word in ipairs(line) do | ||||
| 		local chars = { } | ||||
| 		local chars = {} | ||||
| 		local ch_offs = 0 | ||||
| 		local word_l = #word | ||||
| 		local i = 1 | ||||
| @@ -580,7 +594,7 @@ local function make_line_texture(line, lineno, pos, line_width, line_height, cwi | ||||
| 					end | ||||
| 				end | ||||
| 				if w then | ||||
| 					width = width + w + 1 | ||||
| 					width = width + w | ||||
| 					if width >= (line_width - cwidth_tab[" "]) then | ||||
| 						width = 0 | ||||
| 					else | ||||
| @@ -612,7 +626,7 @@ local function make_line_texture(line, lineno, pos, line_width, line_height, cwi | ||||
| 			else | ||||
| 				local w = cwidth_tab[c] | ||||
| 				if w then | ||||
| 					width = width + w + 1 | ||||
| 					width = width + w | ||||
| 					if width >= (line_width - cwidth_tab[" "]) then | ||||
| 						width = 0 | ||||
| 					else | ||||
| @@ -630,7 +644,7 @@ local function make_line_texture(line, lineno, pos, line_width, line_height, cwi | ||||
| 			end | ||||
| 			i = i + 1 | ||||
| 		end | ||||
| 		width = width + cwidth_tab[" "] + 1 | ||||
| 		width = width + cwidth_tab[" "] | ||||
| 		maxw = math_max(width, maxw) | ||||
| 		table.insert(words, { chars=chars, w=ch_offs }) | ||||
| 	end | ||||
| @@ -644,36 +658,25 @@ local function make_line_texture(line, lineno, pos, line_width, line_height, cwi | ||||
| 	local xpos = start_xpos | ||||
| 	local ypos = (line_height + def.line_spacing)* lineno + def.y_offset | ||||
|  | ||||
| 	cur_color = nil | ||||
|  | ||||
| 	for word_i, word in ipairs(words) do | ||||
| 		local xoffs = (xpos - start_xpos) | ||||
| 		if (xoffs > 0) and ((xoffs + word.w) > maxw) then | ||||
| 			table.insert(texture, fill_line(xpos, ypos, maxw, "n", font_size, colorbgw)) | ||||
| 			xpos = start_xpos | ||||
| 			ypos = ypos + line_height + def.line_spacing | ||||
| 			lineno = lineno + 1 | ||||
| 			if lineno >= def.number_of_lines then break end | ||||
| 			table.insert(texture, fill_line(xpos, ypos, maxw, cur_color, font_size, colorbgw)) | ||||
| 		end | ||||
| 		for ch_i, ch in ipairs(word.chars) do | ||||
| 			if ch.col ~= cur_color then | ||||
| 				cur_color = ch.col | ||||
| 				table.insert(texture, fill_line(xpos + ch.off, ypos, maxw, cur_color, font_size, colorbgw)) | ||||
| 			end | ||||
| 			table.insert(texture, (":%d,%d=%s"):format(xpos + ch.off, ypos, ch.tex)) | ||||
|  | ||||
| 			-- colorize character texture | ||||
| 			local newtex = ch.tex .. '\\^[colorize\\:#' .. colgrid[ch.col] | ||||
|  | ||||
| 			table.insert(texture, (":%d,%d=%s"):format(xpos + ch.off, ypos, newtex)) | ||||
| 		end | ||||
| 		table.insert( | ||||
| 			texture, | ||||
| 			(":%d,%d="):format(xpos + word.w, ypos) .. char_tex(font_name, " ") | ||||
| 		) | ||||
| 		xpos = xpos + word.w + cwidth_tab[" "] | ||||
| 		if xpos >= (line_width + cwidth_tab[" "]) then break end | ||||
| 	end | ||||
|  | ||||
| 	table.insert(texture, fill_line(xpos, ypos, maxw, "n", font_size, colorbgw)) | ||||
| 	table.insert(texture, fill_line(start_xpos, ypos + line_height, maxw, "n", font_size, colorbgw)) | ||||
|  | ||||
| 	return table.concat(texture), lineno | ||||
| end | ||||
|  | ||||
| @@ -718,7 +721,7 @@ function signs_lib.make_sign_texture(lines, pos) | ||||
| 		table.insert(texture, linetex) | ||||
| 		lineno = ln + 1 | ||||
| 	end | ||||
| 	table.insert(texture, "^[makealpha:0,0,0") | ||||
|  | ||||
| 	return table.concat(texture, "") | ||||
| end | ||||
|  | ||||
| @@ -1278,7 +1281,7 @@ minetest.register_lbm({ | ||||
| minetest.register_chatcommand("regen_signs", { | ||||
| 	params = "", | ||||
| 	privs = {server = true}, | ||||
| 	description = "Skims through all currently-loaded sign-bearing mapblocks, clears away any entities within each sign's node space, and regenerates their text entities, if any.", | ||||
| 	description = S("Skims through all currently-loaded sign-bearing mapblocks, clears away any entities within each sign's node space, and regenerates their text entities, if any."), | ||||
| 	func = function(player_name, params) | ||||
| 		local allsigns = {} | ||||
| 		local totalsigns = 0 | ||||
| @@ -1297,13 +1300,13 @@ minetest.register_chatcommand("regen_signs", { | ||||
| 		end | ||||
| 		if signs_lib.totalblocks < 0 then signs_lib.totalblocks = 0 end | ||||
| 		if totalsigns == 0 then | ||||
| 			minetest.chat_send_player(player_name, "There are no signs in the currently-loaded terrain.") | ||||
| 			minetest.chat_send_player(player_name, S("There are no signs in the currently-loaded terrain.")) | ||||
| 			signs_lib.block_list = {} | ||||
| 			return | ||||
| 		end | ||||
|  | ||||
| 		minetest.chat_send_player(player_name, "Found a total of "..totalsigns.." sign nodes across "..signs_lib.totalblocks.." blocks.") | ||||
| 		minetest.chat_send_player(player_name, "Regenerating sign entities...") | ||||
| 		minetest.chat_send_player(player_name, S("Found a total of @1 sign nodes across @2 blocks.", totalsigns, signs_lib.totalblocks)) | ||||
| 		minetest.chat_send_player(player_name, S("Regenerating sign entities ...")) | ||||
|  | ||||
| 		for _, b in pairs(allsigns) do | ||||
| 			for _, pos in ipairs(b) do | ||||
| @@ -1315,7 +1318,7 @@ minetest.register_chatcommand("regen_signs", { | ||||
| 				end | ||||
| 			end | ||||
| 		end | ||||
| 		minetest.chat_send_player(player_name, "Finished.") | ||||
| 		minetest.chat_send_player(player_name, S("Finished.")) | ||||
| 	end | ||||
| }) | ||||
|  | ||||
| @@ -1343,14 +1346,14 @@ function get_sign_formspec(pos, nodename) | ||||
| 		"image[0.1,2.4;7,1;signs_lib_sign_color_palette.png]", | ||||
| 		"textarea[0.15,-0.2;6.3,2.8;text;;" .. minetest.formspec_escape(txt) .. "]", | ||||
| 		"button_exit[3.7,3.4;2,1;ok;" .. S("Write") .. "]", | ||||
| 		"label[0.3,3.4;Unicode font]", | ||||
| 		"label[0.3,3.4;"..FS("Unicode font").."]", | ||||
| 		"image_button[0.6,3.7;1,0.6;signs_lib_switch_" .. state .. ".png;uni_" | ||||
| 			.. state .. ";;;false;signs_lib_switch_interm.png]", | ||||
| 	} | ||||
|  | ||||
| 	if minetest.registered_nodes[nodename].allow_widefont then | ||||
| 		state = meta:get_int("widefont") == 1 and "on" or "off" | ||||
| 		formspec[#formspec+1] = "label[2.1,3.4;Wide font]" | ||||
| 		formspec[#formspec+1] = "label[2.1,3.4;"..FS("Wide font").."]" | ||||
| 		formspec[#formspec+1] = "image_button[2.3,3.7;1,0.6;signs_lib_switch_" .. state .. ".png;wide_" | ||||
| 				.. state .. ";;;false;signs_lib_switch_interm.png]" | ||||
| 	end | ||||
|   | ||||
| @@ -1,27 +1,12 @@ | ||||
| # textdomain: signs_lib | ||||
| Locked sign, owned by @1@n=gesperrter Schild, gehört @1@n | ||||
| Write=schreiben | ||||
| @1 wrote "@2" to sign at @3= | ||||
| @1 flipped the wide-font switch to "@2" at @3= | ||||
| @1 flipped the unicode-font switch to "@2" at @3= | ||||
|  | ||||
|  | ||||
| ##### not used anymore ##### | ||||
|  | ||||
| locked =gesperrt  | ||||
| @1 wrote "@2" to @3sign at @4=@1 schrieb "@2" auf das @3Schild bei @4 | ||||
| Sign=Schild | ||||
| Can edit all locked signs=Kann alle gesperrte Schilder bearbeiten | ||||
| Locked Sign=gesperrter Schild | ||||
| green=grün | ||||
| yellow=gelb | ||||
| red=rot | ||||
| white_red=weißrot | ||||
| white_black=schwarzweiß | ||||
| orange=orange | ||||
| blue=blau | ||||
| brown=braun | ||||
| Sign (@1, metal)=Schild (@1, Metall) | ||||
| Attempt to register unknown node as fence=Versuch ein unbekanntes Element als Zaun zu registrieren | ||||
| Registered @1 and @2=Registrierte @1 und @2 | ||||
| [MOD] signs loaded=[MOD] Schilder-Mod geladen | ||||
| Locked sign, owned by @1@n=Abgeschlossenes Schild, gehört @1@n | ||||
| Skims through all currently-loaded sign-bearing mapblocks, clears away any entities within each sign's node space, and regenerates their text entities, if any.=Iteriert durch alle derzeit geladenen Kartenblöcke, die Schilder enthalten, löscht alle Entities innerhalb des Node-Raums eines jeden Schildes und erzeugt ihre Text-Entities, falls vorhanden, neu. | ||||
| There are no signs in the currently-loaded terrain.=Im derzeit geladenen Gelände befinden sich keine Schilder. | ||||
| Found a total of @1 sign nodes across @2 blocks.=Insgesamt wurden @1 Schild-Nodes über @2 Kartenblöcke gefunden. | ||||
| Regenerating sign entities ...=Schild-Entities werden neu erzeugt ... | ||||
| Finished.=Fertig. | ||||
| Write=Schreiben | ||||
| Unicode font=Unicode-Schrift | ||||
| Wide font=Weite Schrift | ||||
| Wooden Wall Sign=Holzwandschild | ||||
| Steel Wall Sign=Stahlwandschild | ||||
|   | ||||
| @@ -1,25 +1,12 @@ | ||||
| # textdomain: signs_lib | ||||
| Locked sign, owned by @1@n= | ||||
| Write= | ||||
| @1 wrote "@2" to sign at @3= | ||||
| @1 flipped the wide-font switch to "@2" at @3= | ||||
| @1 flipped the unicode-font switch to "@2" at @3= | ||||
|  | ||||
|  | ||||
| ##### not used anymore ##### | ||||
|  | ||||
| locked =bloqueada  | ||||
| @1 wrote "@2" to @3sign at @4=@1 escribio "@2" en el cartel @3en @4 | ||||
| Sign=Letrero | ||||
| Locked Sign=Letrero bloqueada | ||||
| green=verde | ||||
| yellow=amarillo | ||||
| red=rojo | ||||
| white_red=rojo y blanco | ||||
| white_black=negro y blanco | ||||
| orange=naranja | ||||
| blue=azul | ||||
| brown=marrón | ||||
| Sign (@1, metal)=Letrero (@1, metal) | ||||
| Registered @1 and @2=Registrado @1 y @2 | ||||
| [MOD] signs loaded=[MOD] signs cargados | ||||
| Locked sign, owned by @1@n=Cartel bloqueado, propiedad de @1 | ||||
| Skims through all currently-loaded sign-bearing mapblocks, clears away any entities within each sign's node space, and regenerates their text entities, if any.=Examina todos los bloques de mapas que contienen letreros cargados actualmente, elimina cualquier entidad dentro del espacio de nodo de cada cartel y regenera sus entidades de texto, si las hay. | ||||
| There are no signs in the currently-loaded terrain.=No hay carteles en el terreno actual cargado. | ||||
| Found a total of @1 sign nodes across @2 blocks.=Se han encontrado un total de @1 cartel(es) a traves de @2 bloque(s). | ||||
| Regenerating sign entities ...=Regenerando entidades de los carteles... | ||||
| Finished.=Terminado | ||||
| Write=Escribir | ||||
| Unicode font=Fuente unicode | ||||
| Wide font=Fuente ancha | ||||
| Wooden Wall Sign=Cartel de Madera | ||||
| Steel Wall Sign=Cartel de Acero | ||||
|   | ||||
| @@ -1,27 +1,12 @@ | ||||
| # textdomain: signs_lib | ||||
| Locked sign, owned by @1@n=Panneau verrouillé, appartient à @1@n | ||||
| Skims through all currently-loaded sign-bearing mapblocks, clears away any entities within each sign's node space, and regenerates their text entities, if any.= | ||||
| There are no signs in the currently-loaded terrain.= | ||||
| Found a total of @1 sign nodes across @2 blocks.= | ||||
| Regenerating sign entities ...= | ||||
| Finished.= | ||||
| Write= | ||||
| @1 wrote "@2" to sign at @3= | ||||
| @1 flipped the wide-font switch to "@2" at @3= | ||||
| @1 flipped the unicode-font switch to "@2" at @3= | ||||
|  | ||||
|  | ||||
| ##### not used anymore ##### | ||||
|  | ||||
| locked =verrouillé  | ||||
| @1 wrote "@2" to @3sign at @4=@1 a écrit "@2" sur le panneau @3en @4 | ||||
| Sign=Panneau | ||||
| Can edit all locked signs=Peut modifier les panneaux verrouillés | ||||
| Locked Sign=Panneau (verrouillé) | ||||
| green=vert | ||||
| yellow=jaune | ||||
| red=rouge | ||||
| white_red=rouge et blanc | ||||
| white_black=noir et blanc | ||||
| orange=orange | ||||
| blue=bleu | ||||
| brown=marron | ||||
| Sign (@1, metal)=Panneau (@1, métal) | ||||
| Attempt to register unknown node as fence=Tentative d'enregistrer un nœud inconnu comme barrière | ||||
| Registered @1 and @2=Enregistrement de @1 et @ | ||||
| [MOD] signs loaded=[MOD] signs chargé | ||||
| Unicode font= | ||||
| Wide font= | ||||
| Wooden Wall Sign= | ||||
| Steel Wall Sign= | ||||
|   | ||||
| @@ -1,27 +1,12 @@ | ||||
| # textdomain: signs_lib | ||||
| Locked sign, owned by @1@n=Papan tanda berkunci, milik @1@n | ||||
| Skims through all currently-loaded sign-bearing mapblocks, clears away any entities within each sign's node space, and regenerates their text entities, if any.= | ||||
| There are no signs in the currently-loaded terrain.= | ||||
| Found a total of @1 sign nodes across @2 blocks.= | ||||
| Regenerating sign entities ...= | ||||
| Finished.= | ||||
| Write= | ||||
| @1 wrote "@2" to sign at @3= | ||||
| @1 flipped the wide-font switch to "@2" at @3= | ||||
| @1 flipped the unicode-font switch to "@2" at @3= | ||||
|  | ||||
|  | ||||
| ##### not used anymore ##### | ||||
|  | ||||
| locked =berkunci  | ||||
| @1 wrote "@2" to @3sign at @4=@1 menulis "@2" atas papan tanda @3dekat @4 | ||||
| Sign=Papan Tanda | ||||
| Can edit all locked signs=Boleh sunting semua papan tanda berkunci | ||||
| Locked Sign=Papan Tanda Berkunci | ||||
| green=hijau | ||||
| yellow=kuning | ||||
| red=merah | ||||
| white_red=putih_merah | ||||
| white_black=putih_hitam | ||||
| orange=jingga | ||||
| blue=biru | ||||
| brown=perang | ||||
| Sign (@1, metal)=Papan Tanda (@1, logam) | ||||
| Attempt to register unknown node as fence=Cuba untuk mendaftar nod tidak diketahui sebagai pagar | ||||
| Registered @1 and @2=Telah daftar @1 dan @2 | ||||
| [MOD] signs loaded=[MODS] signs telah dimuatkan | ||||
| Unicode font= | ||||
| Wide font= | ||||
| Wooden Wall Sign= | ||||
| Steel Wall Sign= | ||||
|   | ||||
| @@ -1,27 +1,12 @@ | ||||
| # textdomain: signs_lib | ||||
| Locked sign, owned by @1@n=защищенная табличка, пренадлежит @1@n | ||||
| Skims through all currently-loaded sign-bearing mapblocks, clears away any entities within each sign's node space, and regenerates their text entities, if any.= | ||||
| There are no signs in the currently-loaded terrain.= | ||||
| Found a total of @1 sign nodes across @2 blocks.= | ||||
| Regenerating sign entities ...= | ||||
| Finished.= | ||||
| Write=записать | ||||
| @1 wrote "@2" to sign at @3= | ||||
| @1 flipped the wide-font switch to "@2" at @3= | ||||
| @1 flipped the unicode-font switch to "@2" at @3= | ||||
|  | ||||
|  | ||||
| ##### not used anymore ##### | ||||
|  | ||||
| locked =защищенный  | ||||
| @1 wrote "@2" to @3sign at @4=@1 записал "@2" в @3sign на @4 | ||||
| Sign=табличка | ||||
| Can edit all locked signs=Может редактировать все защищенные таблички | ||||
| Locked Sign=защищенная табличка | ||||
| green=зеленая | ||||
| yellow=желтая | ||||
| red=красная | ||||
| white_red=краснобелая | ||||
| white_black=чернобелая | ||||
| orange=оранжевая | ||||
| blue=синея | ||||
| brown=коричневая | ||||
| Sign (@1, metal)=Табличка (@1, металл) | ||||
| Attempt to register unknown node as fence=Попытка зарегистрировать неизвестный узел как забор | ||||
| Registered @1 and @2=Зарегистрировано @1 для @2 | ||||
| [MOD] signs loaded=[MOD] мод табличек загружен | ||||
| Unicode font= | ||||
| Wide font= | ||||
| Wooden Wall Sign= | ||||
| Steel Wall Sign= | ||||
|   | ||||
| @@ -1,6 +1,12 @@ | ||||
| # textdomain: signs_lib | ||||
| Locked sign, owned by @1@n= | ||||
| Skims through all currently-loaded sign-bearing mapblocks, clears away any entities within each sign's node space, and regenerates their text entities, if any.= | ||||
| There are no signs in the currently-loaded terrain.= | ||||
| Found a total of @1 sign nodes across @2 blocks.= | ||||
| Regenerating sign entities ...= | ||||
| Finished.= | ||||
| Write= | ||||
| @1 wrote "@2" to sign at @3= | ||||
| @1 flipped the wide-font switch to "@2" at @3= | ||||
| @1 flipped the unicode-font switch to "@2" at @3= | ||||
| Unicode font= | ||||
| Wide font= | ||||
| Wooden Wall Sign= | ||||
| Steel Wall Sign= | ||||
|   | ||||
| @@ -1,8 +1,10 @@ | ||||
| -- Definitions for standard minetest_game wooden and steel wall signs | ||||
|  | ||||
| local S = signs_lib.S | ||||
|  | ||||
| if minetest.get_modpath("default") then | ||||
| 	signs_lib.register_sign("default:sign_wall_wood", { | ||||
| 		description = "Wooden wall sign", | ||||
| 		description = S("Wooden Wall Sign"), | ||||
| 		inventory_image = "signs_lib_sign_wall_wooden_inv.png", | ||||
| 		tiles = { | ||||
| 			"signs_lib_sign_wall_wooden.png", | ||||
| @@ -20,7 +22,7 @@ if minetest.get_modpath("default") then | ||||
| 	}) | ||||
|  | ||||
| 	signs_lib.register_sign("default:sign_wall_steel", { | ||||
| 		description = "Steel wall sign", | ||||
| 		description = S("Steel Wall Sign"), | ||||
| 		inventory_image = "signs_lib_sign_wall_steel_inv.png", | ||||
| 		tiles = { | ||||
| 			"signs_lib_sign_wall_steel.png", | ||||
|   | ||||
| Before Width: | Height: | Size: 89 B | 
| Before Width: | Height: | Size: 85 B | 
| Before Width: | Height: | Size: 85 B | 
| Before Width: | Height: | Size: 85 B | 
| Before Width: | Height: | Size: 85 B | 
| Before Width: | Height: | Size: 85 B | 
| Before Width: | Height: | Size: 85 B | 
| Before Width: | Height: | Size: 89 B | 
| Before Width: | Height: | Size: 89 B | 
| Before Width: | Height: | Size: 85 B | 
| Before Width: | Height: | Size: 85 B | 
| Before Width: | Height: | Size: 85 B | 
| Before Width: | Height: | Size: 85 B | 
| Before Width: | Height: | Size: 85 B | 
| Before Width: | Height: | Size: 85 B | 
| Before Width: | Height: | Size: 89 B | 
| Before Width: | Height: | Size: 99 B | 
| Before Width: | Height: | Size: 87 B | 
| Before Width: | Height: | Size: 87 B | 
| Before Width: | Height: | Size: 87 B | 
| Before Width: | Height: | Size: 87 B | 
| Before Width: | Height: | Size: 87 B | 
| Before Width: | Height: | Size: 87 B | 
| Before Width: | Height: | Size: 99 B | 
| Before Width: | Height: | Size: 99 B | 
| Before Width: | Height: | Size: 87 B | 
| Before Width: | Height: | Size: 87 B | 
| Before Width: | Height: | Size: 87 B | 
| Before Width: | Height: | Size: 87 B | 
| Before Width: | Height: | Size: 87 B | 
| Before Width: | Height: | Size: 87 B | 
| Before Width: | Height: | Size: 98 B | 
| Before Width: | Height: | Size: 95 B After Width: | Height: | Size: 103 B | 
| Before Width: | Height: | Size: 115 B After Width: | Height: | Size: 124 B | 
| Before Width: | Height: | Size: 117 B After Width: | Height: | Size: 123 B | 
| Before Width: | Height: | Size: 115 B After Width: | Height: | Size: 125 B | 
| Before Width: | Height: | Size: 110 B After Width: | Height: | Size: 126 B | 
| Before Width: | Height: | Size: 106 B After Width: | Height: | Size: 118 B | 
| Before Width: | Height: | Size: 108 B After Width: | Height: | Size: 118 B | 
| Before Width: | Height: | Size: 110 B After Width: | Height: | Size: 118 B | 
| Before Width: | Height: | Size: 113 B After Width: | Height: | Size: 123 B | 
| Before Width: | Height: | Size: 114 B After Width: | Height: | Size: 124 B | 
| Before Width: | Height: | Size: 113 B After Width: | Height: | Size: 122 B | 
| Before Width: | Height: | Size: 105 B After Width: | Height: | Size: 117 B | 
| Before Width: | Height: | Size: 108 B After Width: | Height: | Size: 116 B | 
| Before Width: | Height: | Size: 108 B After Width: | Height: | Size: 124 B | 
| Before Width: | Height: | Size: 107 B After Width: | Height: | Size: 123 B | 
| Before Width: | Height: | Size: 107 B After Width: | Height: | Size: 120 B | 
| Before Width: | Height: | Size: 110 B After Width: | Height: | Size: 122 B | 
| Before Width: | Height: | Size: 108 B After Width: | Height: | Size: 117 B | 
| Before Width: | Height: | Size: 107 B After Width: | Height: | Size: 128 B | 
| Before Width: | Height: | Size: 108 B After Width: | Height: | Size: 128 B | 
| Before Width: | Height: | Size: 116 B After Width: | Height: | Size: 127 B | 
| Before Width: | Height: | Size: 103 B After Width: | Height: | Size: 122 B | 
| Before Width: | Height: | Size: 109 B After Width: | Height: | Size: 120 B | 
| Before Width: | Height: | Size: 104 B After Width: | Height: | Size: 116 B | 
| Before Width: | Height: | Size: 102 B After Width: | Height: | Size: 120 B | 
| Before Width: | Height: | Size: 102 B After Width: | Height: | Size: 113 B | 
| Before Width: | Height: | Size: 116 B After Width: | Height: | Size: 127 B | 
| Before Width: | Height: | Size: 105 B After Width: | Height: | Size: 118 B | 
| Before Width: | Height: | Size: 114 B After Width: | Height: | Size: 123 B | 
| Before Width: | Height: | Size: 106 B After Width: | Height: | Size: 121 B | 
| Before Width: | Height: | Size: 104 B After Width: | Height: | Size: 117 B | 
| Before Width: | Height: | Size: 108 B After Width: | Height: | Size: 125 B | 
| Before Width: | Height: | Size: 104 B After Width: | Height: | Size: 113 B | 
| Before Width: | Height: | Size: 95 B After Width: | Height: | Size: 103 B | 
| Before Width: | Height: | Size: 116 B After Width: | Height: | Size: 127 B | 
| Before Width: | Height: | Size: 108 B After Width: | Height: | Size: 122 B | 
| Before Width: | Height: | Size: 107 B After Width: | Height: | Size: 117 B | 
| Before Width: | Height: | Size: 99 B After Width: | Height: | Size: 119 B | 
| Before Width: | Height: | Size: 106 B After Width: | Height: | Size: 117 B | 
| Before Width: | Height: | Size: 99 B After Width: | Height: | Size: 116 B | 
| Before Width: | Height: | Size: 68 B After Width: | Height: | Size: 74 B | 
| Before Width: | Height: | Size: 90 B After Width: | Height: | Size: 94 B | 
| Before Width: | Height: | Size: 90 B After Width: | Height: | Size: 92 B | 
| Before Width: | Height: | Size: 98 B After Width: | Height: | Size: 115 B | 
| Before Width: | Height: | Size: 107 B After Width: | Height: | Size: 120 B | 
| Before Width: | Height: | Size: 123 B After Width: | Height: | Size: 131 B | 
| Before Width: | Height: | Size: 114 B After Width: | Height: | Size: 129 B | 
| Before Width: | Height: | Size: 88 B After Width: | Height: | Size: 91 B | 
| Before Width: | Height: | Size: 92 B After Width: | Height: | Size: 104 B | 
| Before Width: | Height: | Size: 92 B After Width: | Height: | Size: 106 B | 
| Before Width: | Height: | Size: 98 B After Width: | Height: | Size: 109 B | 
| Before Width: | Height: | Size: 95 B After Width: | Height: | Size: 97 B | 
| Before Width: | Height: | Size: 91 B After Width: | Height: | Size: 96 B | 
| Before Width: | Height: | Size: 89 B After Width: | Height: | Size: 90 B | 
| Before Width: | Height: | Size: 88 B After Width: | Height: | Size: 87 B | 
| Before Width: | Height: | Size: 90 B After Width: | Height: | Size: 104 B | 
| Before Width: | Height: | Size: 96 B After Width: | Height: | Size: 108 B | 
| Before Width: | Height: | Size: 102 B After Width: | Height: | Size: 112 B | 
| Before Width: | Height: | Size: 108 B After Width: | Height: | Size: 119 B |