LVGL library updated to v9.0.0, some small breaking changes in C, none in HASPmota (#20659)

* LVGL library updated to v9.0.0, some small breaking changes in C, none in HASPmota

* fix compilation

* Move lvgl_berry to LVGL_assets
This commit is contained in:
s-hadinger 2024-02-05 12:07:41 +01:00 committed by GitHub
parent 3b0cb408ba
commit ff6be70ce1
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
1503 changed files with 200499 additions and 243205 deletions

View File

@ -14,6 +14,7 @@ All notable changes to this project will be documented in this file.
### Breaking Changed
- Matter aggregator relocated to endpoint 1 for Google compatibility, may break existing associations (#20654)
- LVGL library updated to v9.0.0, some small breaking changes in C, none in HASPmota
### Changed
- Library OneWire-Stickbreaker by TasmotaOneWire supporting Shelly Plus Add-On (#20580)

View File

@ -8,14 +8,17 @@
enum {
ctypes_i32 = 14,
ctypes_i24 = 13,
ctypes_i16 = 12,
ctypes_i8 = 11,
ctypes_u32 = 4,
ctypes_u24 = 3,
ctypes_u16 = 2,
ctypes_u8 = 1,
// big endian
ctypes_be_i32 = -14,
ctypes_be_i24 = -13,
ctypes_be_i16 = -12,
ctypes_be_i8 = -11,
ctypes_be_u32 = -4,

View File

@ -36,14 +36,17 @@ int32_t bin_search_ctypes(const char * needle, const void * table, size_t elt_si
enum {
ctypes_i32 = 14,
ctypes_i24 = 13,
ctypes_i16 = 12,
ctypes_i8 = 11,
ctypes_u32 = 4,
ctypes_u24 = 3,
ctypes_u16 = 2,
ctypes_u8 = 1,
// big endian
ctypes_be_i32 = -14,
ctypes_be_i24 = -13,
ctypes_be_i16 = -12,
ctypes_be_i8 = -11,
ctypes_be_u32 = -4,

File diff suppressed because it is too large Load Diff

View File

@ -25,6 +25,18 @@ def init(lv_tasmota)
lv.register_button_encoder = lv_tasmota.register_button_encoder
lv.screenshot = lv_tasmota.screenshot
# add version information
lv.version = lv.version_major()
# use the following to retrofit the version:
#-
def fix_lv_version()
import introspect
var v = introspect.get(lv, "version")
# if `lv.version` does not exist, v is `module('undefined')`
if type(v) != 'int' lv.version = 8 end
end
-#
# add widgets
lv.clock = lv_clock
lv.clock_icon = lv_clock_icon
@ -112,8 +124,7 @@ def splash()
tas_logo.set_zoom(150)
tas_logo.set_style_img_recolor_opa(255, 0) # lv.PART_MAIN | lv.STATE_DEFAULT
tas_logo.set_style_img_recolor(white, 0) # lv.PART_MAIN | lv.STATE_DEFAULT
tas_logo.set_align(lv.ALIGN_LEFT_MID)
tas_logo.set_x(-12)
tas_logo.align(lv.ALIGN_LEFT_MID, -12, 0)
var tas = lv.label(bg)
# tas.set_style_bg_opa(lv.OPA_TRANSP, lv.PART_MAIN | lv.STATE_DEFAULT)

View File

@ -88,7 +88,7 @@ class lv_obj end # for solidification
#@ solidify:lv_signal_arcs,weak
class lv_signal_arcs : lv_obj
var percentage # value to display, range 0..100
var p1, p2, area, arc_dsc # instances of objects kept to avoid re-instanciating at each call
var area, arc_dsc # instances of objects kept to avoid re-instanciating at each call
def init(parent)
# init custom widget (don't call super constructor)
@ -96,8 +96,6 @@ class lv_signal_arcs : lv_obj
# own values
self.percentage = 100
# pre-allocate buffers
self.p1 = lv.point()
self.p2 = lv.point()
self.area = lv.area()
self.arc_dsc = lv.draw_arc_dsc()
end
@ -105,7 +103,7 @@ class lv_signal_arcs : lv_obj
def widget_event(cl, event)
# Call the ancestor's event handler
if lv.obj_event_base(cl, event) != lv.RES_OK return end
var code = event.code
var code = event.get_code()
import math
def atleast1(x) if x >= 1 return x else return 1 end end
@ -119,18 +117,20 @@ class lv_signal_arcs : lv_obj
#print("inter_bar", inter_bar, "bar", bar, "bar_offset", bar_offset)
if code == lv.EVENT_DRAW_MAIN
var draw_ctx = lv.draw_ctx(event.param)
var arc_dsc = self.arc_dsc
var param = event.get_param()
var layer = event.get_layer()
# get coordinates of object
self.get_coords(self.area)
var x_ofs = self.area.x1
var y_ofs = self.area.y1
lv.draw_arc_dsc_init(self.arc_dsc) # initialize lv.draw_line_dsc structure
self.init_draw_arc_dsc(lv.PART_MAIN, self.arc_dsc) # copy the current values
lv.draw_arc_dsc_init(arc_dsc) # initialize lv.draw_line_dsc structure
self.init_draw_arc_dsc(lv.PART_MAIN, arc_dsc) # copy the current values
self.arc_dsc.rounded = 1
self.arc_dsc.width = (bar * 3 + 1) / 4
arc_dsc.rounded = 1
arc_dsc.width = (bar * 3 + 1) / 4
var on_color = self.get_style_line_color(lv.PART_MAIN | lv.STATE_DEFAULT)
var off_color = self.get_style_bg_color(lv.PART_MAIN | lv.STATE_DEFAULT)
@ -144,15 +144,26 @@ class lv_signal_arcs : lv_obj
if (angle > 45) angle = 45 end
# print("hypotenuse",hypotenuse,"adjacent",adjacent,"angle",angle)
self.p1.x = x_ofs + width / 2
self.p1.y = y_ofs + height - 1 - bar_offset
arc_dsc.center_x = x_ofs + width / 2
arc_dsc.center_y = y_ofs + height - 1 - bar_offset
self.arc_dsc.color = self.percentage >= 25 ? on_color : off_color
lv.draw_arc(draw_ctx, self.arc_dsc, self.p1, 0 * (bar + inter_bar) + bar_offset, 0, 360)
self.arc_dsc.color = self.percentage >= 50 ? on_color : off_color
lv.draw_arc(draw_ctx, self.arc_dsc, self.p1, 1 * (bar + inter_bar) + bar_offset - 1, 270 - angle, 270 + angle)
self.arc_dsc.color = self.percentage >= 75 ? on_color : off_color
lv.draw_arc(draw_ctx, self.arc_dsc, self.p1, 2 * (bar + inter_bar) + bar_offset - 2, 270 - angle, 270 + angle)
arc_dsc.color = self.percentage >= 25 ? on_color : off_color
arc_dsc.radius = 0 * (bar + inter_bar) + bar_offset
arc_dsc.start_angle = 0
arc_dsc.end_angle = 306
lv.draw_arc(layer, arc_dsc)
arc_dsc.radius = 1 * (bar + inter_bar) + bar_offset - 1
arc_dsc.start_angle = 270 - angle
arc_dsc.end_angle = 270 + angle
arc_dsc.color = self.percentage >= 50 ? on_color : off_color
lv.draw_arc(layer, arc_dsc)
arc_dsc.radius = 2 * (bar + inter_bar) + bar_offset - 2
arc_dsc.start_angle = 270 - angle
arc_dsc.end_angle = 270 + angle
arc_dsc.color = self.percentage >= 75 ? on_color : off_color
lv.draw_arc(layer, arc_dsc)
#elif mode == lv.DESIGN_DRAW_POST # commented since we don't want a frame around this object
# self.ancestor_design.call(self, clip_area, mode)
@ -221,7 +232,7 @@ end
#@ solidify:lv_signal_bars,weak
class lv_signal_bars : lv_obj
var percentage # value to display, range 0..100
var p1, p2, area, line_dsc # instances of objects kept to avoid re-instanciating at each call
var area, line_dsc # instances of objects kept to avoid re-instanciating at each call
def init(parent)
# init custom widget (don't call super constructor)
@ -229,16 +240,15 @@ class lv_signal_bars : lv_obj
# own values
self.percentage = 100
# pre-allocate buffers
self.p1 = lv.point()
self.p2 = lv.point()
self.area = lv.area()
self.line_dsc = lv.draw_line_dsc()
end
def widget_event(cl, event)
# Call the ancestor's event handler
# tasmota.log(f">>>: widget_event {cl=} {event=}")
if lv.obj_event_base(cl, event) != lv.RES_OK return end
var code = event.code
var code = event.get_code()
def atleast1(x) if x >= 1 return x else return 1 end end
# the model is that we have 4 bars and inter-bar (1/4 of width)
@ -250,32 +260,34 @@ class lv_signal_bars : lv_obj
var bar_offset = bar / 2
if code == lv.EVENT_DRAW_MAIN
var draw_ctx = lv.draw_ctx(event.param)
var line_dsc = self.line_dsc
var param = event.get_param()
var layer = event.get_layer()
# get coordinates of object
self.get_coords(self.area)
var x_ofs = self.area.x1
var y_ofs = self.area.y1
lv.draw_line_dsc_init(self.line_dsc) # initialize lv_draw_line_dsc structure
self.init_draw_line_dsc(lv.PART_MAIN, self.line_dsc) # copy the current values
lv.draw_line_dsc_init(line_dsc) # initialize lv_draw_line_dsc structure
self.init_draw_line_dsc(lv.PART_MAIN, line_dsc) # copy the current values
self.line_dsc.round_start = 1
self.line_dsc.round_end = 1
self.line_dsc.width = bar
line_dsc.round_start = 1
line_dsc.round_end = 1
line_dsc.width = bar
var on_color = self.get_style_line_color(lv.PART_MAIN | lv.STATE_DEFAULT)
var off_color = self.get_style_bg_color(lv.PART_MAIN | lv.STATE_DEFAULT)
lv.event_send(self, lv.EVENT_DRAW_PART_BEGIN, self.line_dsc)
# lv.event_send(self, lv.EVENT_DRAW_PART_BEGIN, line_dsc)
for i:0..3 # 4 bars
self.line_dsc.color = self.percentage >= (i+1)*20 ? on_color : off_color
self.p1.y = y_ofs + height - 1 - bar_offset
self.p1.x = x_ofs + i * (bar + inter_bar) + bar_offset
self.p2.y = y_ofs + ((3 - i) * (height - bar)) / 4 + bar_offset
self.p2.x = self.p1.x
lv.draw_line(draw_ctx, self.line_dsc, self.p1, self.p2)
line_dsc.color = self.percentage >= (i+1)*20 ? on_color : off_color
line_dsc.p1_y = y_ofs + height - 1 - bar_offset
line_dsc.p1_x = x_ofs + i * (bar + inter_bar) + bar_offset
line_dsc.p2_y = y_ofs + ((3 - i) * (height - bar)) / 4 + bar_offset
line_dsc.p2_x = line_dsc.p1_x
lv.draw_line(layer, line_dsc)
end
lv.event_send(self, lv.EVENT_DRAW_PART_END, self.line_dsc)
# lv.event_send(self, lv.EVENT_DRAW_PART_END, line_dsc)
end
end

View File

@ -17,7 +17,7 @@ be_local_closure(lv_tasmota_init, /* name */
0, /* has sup protos */
NULL, /* no sub protos */
1, /* has constants */
( &(const bvalue[33]) { /* constants */
( &(const bvalue[35]) { /* constants */
/* K0 */ be_nested_str_weak(lv),
/* K1 */ be_nested_str_weak(start),
/* K2 */ be_nested_str_weak(splash_init),
@ -32,29 +32,31 @@ be_local_closure(lv_tasmota_init, /* name */
/* K11 */ be_nested_str_weak(load_freetype_font),
/* K12 */ be_nested_str_weak(register_button_encoder),
/* K13 */ be_nested_str_weak(screenshot),
/* K14 */ be_nested_str_weak(clock),
/* K15 */ be_nested_str_weak(lv_clock),
/* K16 */ be_nested_str_weak(clock_icon),
/* K17 */ be_nested_str_weak(lv_clock_icon),
/* K18 */ be_nested_str_weak(signal_arcs),
/* K19 */ be_nested_str_weak(lv_signal_arcs),
/* K20 */ be_nested_str_weak(signal_bars),
/* K21 */ be_nested_str_weak(lv_signal_bars),
/* K22 */ be_nested_str_weak(wifi_arcs_icon),
/* K23 */ be_nested_str_weak(lv_wifi_arcs_icon),
/* K24 */ be_nested_str_weak(wifi_arcs),
/* K25 */ be_nested_str_weak(lv_wifi_arcs),
/* K26 */ be_nested_str_weak(wifi_bars_icon),
/* K27 */ be_nested_str_weak(lv_wifi_bars_icon),
/* K28 */ be_nested_str_weak(wifi_bars),
/* K29 */ be_nested_str_weak(lv_wifi_bars),
/* K30 */ be_nested_str_weak(tasmota),
/* K31 */ be_nested_str_weak(get_option),
/* K32 */ be_const_int(0),
/* K14 */ be_nested_str_weak(version),
/* K15 */ be_nested_str_weak(version_major),
/* K16 */ be_nested_str_weak(clock),
/* K17 */ be_nested_str_weak(lv_clock),
/* K18 */ be_nested_str_weak(clock_icon),
/* K19 */ be_nested_str_weak(lv_clock_icon),
/* K20 */ be_nested_str_weak(signal_arcs),
/* K21 */ be_nested_str_weak(lv_signal_arcs),
/* K22 */ be_nested_str_weak(signal_bars),
/* K23 */ be_nested_str_weak(lv_signal_bars),
/* K24 */ be_nested_str_weak(wifi_arcs_icon),
/* K25 */ be_nested_str_weak(lv_wifi_arcs_icon),
/* K26 */ be_nested_str_weak(wifi_arcs),
/* K27 */ be_nested_str_weak(lv_wifi_arcs),
/* K28 */ be_nested_str_weak(wifi_bars_icon),
/* K29 */ be_nested_str_weak(lv_wifi_bars_icon),
/* K30 */ be_nested_str_weak(wifi_bars),
/* K31 */ be_nested_str_weak(lv_wifi_bars),
/* K32 */ be_nested_str_weak(tasmota),
/* K33 */ be_nested_str_weak(get_option),
/* K34 */ be_const_int(0),
}),
be_str_weak(init),
&be_const_str_solidified,
( &(const binstruction[53]) { /* code */
( &(const binstruction[56]) { /* code */
0xA4060000, // 0000 IMPORT R1 K0
0x88080101, // 0001 GETMBR R2 R0 K1
0x90060202, // 0002 SETMBR R1 K1 R2
@ -82,32 +84,35 @@ be_local_closure(lv_tasmota_init, /* name */
0x90061802, // 0018 SETMBR R1 K12 R2
0x8808010D, // 0019 GETMBR R2 R0 K13
0x90061A02, // 001A SETMBR R1 K13 R2
0xB80A1E00, // 001B GETNGBL R2 K15
0x90061C02, // 001C SETMBR R1 K14 R2
0xB80A2200, // 001D GETNGBL R2 K17
0x90062002, // 001E SETMBR R1 K16 R2
0xB80A2600, // 001F GETNGBL R2 K19
0x90062402, // 0020 SETMBR R1 K18 R2
0xB80A2A00, // 0021 GETNGBL R2 K21
0x90062802, // 0022 SETMBR R1 K20 R2
0xB80A2E00, // 0023 GETNGBL R2 K23
0x90062C02, // 0024 SETMBR R1 K22 R2
0xB80A3200, // 0025 GETNGBL R2 K25
0x90063002, // 0026 SETMBR R1 K24 R2
0xB80A3600, // 0027 GETNGBL R2 K27
0x90063402, // 0028 SETMBR R1 K26 R2
0xB80A3A00, // 0029 GETNGBL R2 K29
0x90063802, // 002A SETMBR R1 K28 R2
0xB80A3C00, // 002B GETNGBL R2 K30
0x8C08051F, // 002C GETMET R2 R2 K31
0x54120086, // 002D LDINT R4 135
0x7C080400, // 002E CALL R2 2
0x1C080520, // 002F EQ R2 R2 K32
0x780A0001, // 0030 JMPF R2 #0033
0x8C080302, // 0031 GETMET R2 R1 K2
0x7C080200, // 0032 CALL R2 1
0x4C080000, // 0033 LDNIL R2
0x80040400, // 0034 RET 1 R2
0x8C08030F, // 001B GETMET R2 R1 K15
0x7C080200, // 001C CALL R2 1
0x90061C02, // 001D SETMBR R1 K14 R2
0xB80A2200, // 001E GETNGBL R2 K17
0x90062002, // 001F SETMBR R1 K16 R2
0xB80A2600, // 0020 GETNGBL R2 K19
0x90062402, // 0021 SETMBR R1 K18 R2
0xB80A2A00, // 0022 GETNGBL R2 K21
0x90062802, // 0023 SETMBR R1 K20 R2
0xB80A2E00, // 0024 GETNGBL R2 K23
0x90062C02, // 0025 SETMBR R1 K22 R2
0xB80A3200, // 0026 GETNGBL R2 K25
0x90063002, // 0027 SETMBR R1 K24 R2
0xB80A3600, // 0028 GETNGBL R2 K27
0x90063402, // 0029 SETMBR R1 K26 R2
0xB80A3A00, // 002A GETNGBL R2 K29
0x90063802, // 002B SETMBR R1 K28 R2
0xB80A3E00, // 002C GETNGBL R2 K31
0x90063C02, // 002D SETMBR R1 K30 R2
0xB80A4000, // 002E GETNGBL R2 K32
0x8C080521, // 002F GETMET R2 R2 K33
0x54120086, // 0030 LDINT R4 135
0x7C080400, // 0031 CALL R2 2
0x1C080522, // 0032 EQ R2 R2 K34
0x780A0001, // 0033 JMPF R2 #0036
0x8C080302, // 0034 GETMET R2 R1 K2
0x7C080200, // 0035 CALL R2 1
0x4C080000, // 0036 LDNIL R2
0x80040400, // 0037 RET 1 R2
})
)
);
@ -297,7 +302,7 @@ be_local_closure(lv_tasmota_splash, /* name */
0, /* has sup protos */
NULL, /* no sub protos */
1, /* has constants */
( &(const bvalue[42]) { /* constants */
( &(const bvalue[43]) { /* constants */
/* K0 */ be_nested_str_weak(display),
/* K1 */ be_nested_str_weak(started),
/* K2 */ be_nested_str_weak(lv),
@ -323,27 +328,28 @@ be_local_closure(lv_tasmota_splash, /* name */
/* K22 */ be_nested_str_weak(set_zoom),
/* K23 */ be_nested_str_weak(set_style_img_recolor_opa),
/* K24 */ be_nested_str_weak(set_style_img_recolor),
/* K25 */ be_nested_str_weak(set_align),
/* K25 */ be_nested_str_weak(align),
/* K26 */ be_nested_str_weak(ALIGN_LEFT_MID),
/* K27 */ be_nested_str_weak(set_x),
/* K28 */ be_nested_str_weak(label),
/* K29 */ be_nested_str_weak(set_style_text_color),
/* K30 */ be_nested_str_weak(set_text),
/* K31 */ be_nested_str_weak(TASMOTA),
/* K32 */ be_nested_str_weak(get_hor_res),
/* K33 */ be_nested_str_weak(set_style_text_font),
/* K34 */ be_nested_str_weak(driver_name),
/* K35 */ be_nested_str_weak(ALIGN_BOTTOM_MID),
/* K36 */ be_const_int(16777215),
/* K37 */ be_nested_str_weak(refr_now),
/* K38 */ be_nested_str_weak(_splash),
/* K39 */ be_nested_str_weak(tasmota),
/* K40 */ be_nested_str_weak(set_timer),
/* K41 */ be_nested_str_weak(splash_remove),
/* K27 */ be_nested_str_weak(label),
/* K28 */ be_nested_str_weak(set_style_text_color),
/* K29 */ be_nested_str_weak(set_text),
/* K30 */ be_nested_str_weak(TASMOTA),
/* K31 */ be_nested_str_weak(get_hor_res),
/* K32 */ be_nested_str_weak(set_style_text_font),
/* K33 */ be_nested_str_weak(set_align),
/* K34 */ be_nested_str_weak(set_x),
/* K35 */ be_nested_str_weak(driver_name),
/* K36 */ be_nested_str_weak(ALIGN_BOTTOM_MID),
/* K37 */ be_const_int(16777215),
/* K38 */ be_nested_str_weak(refr_now),
/* K39 */ be_nested_str_weak(_splash),
/* K40 */ be_nested_str_weak(tasmota),
/* K41 */ be_nested_str_weak(set_timer),
/* K42 */ be_nested_str_weak(splash_remove),
}),
be_str_weak(splash),
&be_const_str_solidified,
( &(const binstruction[166]) { /* code */
( &(const binstruction[165]) { /* code */
0xA4020000, // 0000 IMPORT R0 K0
0x8C040101, // 0001 GETMET R1 R0 K1
0x7C040200, // 0002 CALL R1 1
@ -427,89 +433,88 @@ be_local_closure(lv_tasmota_splash, /* name */
0x8C180B19, // 0050 GETMET R6 R5 K25
0xB8220400, // 0051 GETNGBL R8 K2
0x8820111A, // 0052 GETMBR R8 R8 K26
0x7C180400, // 0053 CALL R6 2
0x8C180B1B, // 0054 GETMET R6 R5 K27
0x5421FFF3, // 0055 LDINT R8 -12
0x7C180400, // 0056 CALL R6 2
0xB81A0400, // 0057 GETNGBL R6 K2
0x8C180D1C, // 0058 GETMET R6 R6 K28
0x5C200200, // 0059 MOVE R8 R1
0x7C180400, // 005A CALL R6 2
0x8C1C0D1D, // 005B GETMET R7 R6 K29
0x5C240800, // 005C MOVE R9 R4
0x5828000A, // 005D LDCONST R10 K10
0x7C1C0600, // 005E CALL R7 3
0x8C1C0D1E, // 005F GETMET R7 R6 K30
0x5824001F, // 0060 LDCONST R9 K31
0x7C1C0400, // 0061 CALL R7 2
0xB81E0400, // 0062 GETNGBL R7 K2
0x8C1C0F20, // 0063 GETMET R7 R7 K32
0x7C1C0200, // 0064 CALL R7 1
0x542200C7, // 0065 LDINT R8 200
0x281C0E08, // 0066 GE R7 R7 R8
0x781E0007, // 0067 JMPF R7 #0070
0x4C1C0000, // 0068 LDNIL R7
0x201C0407, // 0069 NE R7 R2 R7
0x781E0003, // 006A JMPF R7 #006F
0x8C1C0D21, // 006B GETMET R7 R6 K33
0x5C240400, // 006C MOVE R9 R2
0x5828000A, // 006D LDCONST R10 K10
0x7C1C0600, // 006E CALL R7 3
0x70020006, // 006F JMP #0077
0x4C1C0000, // 0070 LDNIL R7
0x201C0607, // 0071 NE R7 R3 R7
0x781E0003, // 0072 JMPF R7 #0077
0x8C1C0D21, // 0073 GETMET R7 R6 K33
0x5C240600, // 0074 MOVE R9 R3
0x5828000A, // 0075 LDCONST R10 K10
0x7C1C0600, // 0076 CALL R7 3
0x8C1C0D19, // 0077 GETMET R7 R6 K25
0xB8260400, // 0078 GETNGBL R9 K2
0x8824131A, // 0079 GETMBR R9 R9 K26
0x7C1C0400, // 007A CALL R7 2
0x8C1C0D1B, // 007B GETMET R7 R6 K27
0x54260029, // 007C LDINT R9 42
0x7C1C0400, // 007D CALL R7 2
0x8C1C0122, // 007E GETMET R7 R0 K34
0x7C1C0200, // 007F CALL R7 1
0x4C200000, // 0080 LDNIL R8
0x6024000C, // 0081 GETGBL R9 G12
0x5C280E00, // 0082 MOVE R10 R7
0x7C240200, // 0083 CALL R9 1
0x2424130A, // 0084 GT R9 R9 K10
0x78260012, // 0085 JMPF R9 #0099
0xB8260400, // 0086 GETNGBL R9 K2
0x8C24131C, // 0087 GETMET R9 R9 K28
0x5C2C0200, // 0088 MOVE R11 R1
0x7C240400, // 0089 CALL R9 2
0x5C201200, // 008A MOVE R8 R9
0x8C241119, // 008B GETMET R9 R8 K25
0xB82E0400, // 008C GETNGBL R11 K2
0x882C1723, // 008D GETMBR R11 R11 K35
0x7C240400, // 008E CALL R9 2
0x8C24111D, // 008F GETMET R9 R8 K29
0xB82E0400, // 0090 GETNGBL R11 K2
0x8C2C1707, // 0091 GETMET R11 R11 K7
0x58340024, // 0092 LDCONST R13 K36
0x7C2C0400, // 0093 CALL R11 2
0x5830000A, // 0094 LDCONST R12 K10
0x7C240600, // 0095 CALL R9 3
0x8C24111E, // 0096 GETMET R9 R8 K30
0x5C2C0E00, // 0097 MOVE R11 R7
0x7C240400, // 0098 CALL R9 2
0xB8260400, // 0099 GETNGBL R9 K2
0x8C241325, // 009A GETMET R9 R9 K37
0x582C000A, // 009B LDCONST R11 K10
0x7C240400, // 009C CALL R9 2
0xB8260400, // 009D GETNGBL R9 K2
0x90264C01, // 009E SETMBR R9 K38 R1
0xB8264E00, // 009F GETNGBL R9 K39
0x8C241328, // 00A0 GETMET R9 R9 K40
0x542E1387, // 00A1 LDINT R11 5000
0xB8320400, // 00A2 GETNGBL R12 K2
0x88301929, // 00A3 GETMBR R12 R12 K41
0x7C240600, // 00A4 CALL R9 3
0x80000000, // 00A5 RET 0
0x5425FFF3, // 0053 LDINT R9 -12
0x5828000A, // 0054 LDCONST R10 K10
0x7C180800, // 0055 CALL R6 4
0xB81A0400, // 0056 GETNGBL R6 K2
0x8C180D1B, // 0057 GETMET R6 R6 K27
0x5C200200, // 0058 MOVE R8 R1
0x7C180400, // 0059 CALL R6 2
0x8C1C0D1C, // 005A GETMET R7 R6 K28
0x5C240800, // 005B MOVE R9 R4
0x5828000A, // 005C LDCONST R10 K10
0x7C1C0600, // 005D CALL R7 3
0x8C1C0D1D, // 005E GETMET R7 R6 K29
0x5824001E, // 005F LDCONST R9 K30
0x7C1C0400, // 0060 CALL R7 2
0xB81E0400, // 0061 GETNGBL R7 K2
0x8C1C0F1F, // 0062 GETMET R7 R7 K31
0x7C1C0200, // 0063 CALL R7 1
0x542200C7, // 0064 LDINT R8 200
0x281C0E08, // 0065 GE R7 R7 R8
0x781E0007, // 0066 JMPF R7 #006F
0x4C1C0000, // 0067 LDNIL R7
0x201C0407, // 0068 NE R7 R2 R7
0x781E0003, // 0069 JMPF R7 #006E
0x8C1C0D20, // 006A GETMET R7 R6 K32
0x5C240400, // 006B MOVE R9 R2
0x5828000A, // 006C LDCONST R10 K10
0x7C1C0600, // 006D CALL R7 3
0x70020006, // 006E JMP #0076
0x4C1C0000, // 006F LDNIL R7
0x201C0607, // 0070 NE R7 R3 R7
0x781E0003, // 0071 JMPF R7 #0076
0x8C1C0D20, // 0072 GETMET R7 R6 K32
0x5C240600, // 0073 MOVE R9 R3
0x5828000A, // 0074 LDCONST R10 K10
0x7C1C0600, // 0075 CALL R7 3
0x8C1C0D21, // 0076 GETMET R7 R6 K33
0xB8260400, // 0077 GETNGBL R9 K2
0x8824131A, // 0078 GETMBR R9 R9 K26
0x7C1C0400, // 0079 CALL R7 2
0x8C1C0D22, // 007A GETMET R7 R6 K34
0x54260029, // 007B LDINT R9 42
0x7C1C0400, // 007C CALL R7 2
0x8C1C0123, // 007D GETMET R7 R0 K35
0x7C1C0200, // 007E CALL R7 1
0x4C200000, // 007F LDNIL R8
0x6024000C, // 0080 GETGBL R9 G12
0x5C280E00, // 0081 MOVE R10 R7
0x7C240200, // 0082 CALL R9 1
0x2424130A, // 0083 GT R9 R9 K10
0x78260012, // 0084 JMPF R9 #0098
0xB8260400, // 0085 GETNGBL R9 K2
0x8C24131B, // 0086 GETMET R9 R9 K27
0x5C2C0200, // 0087 MOVE R11 R1
0x7C240400, // 0088 CALL R9 2
0x5C201200, // 0089 MOVE R8 R9
0x8C241121, // 008A GETMET R9 R8 K33
0xB82E0400, // 008B GETNGBL R11 K2
0x882C1724, // 008C GETMBR R11 R11 K36
0x7C240400, // 008D CALL R9 2
0x8C24111C, // 008E GETMET R9 R8 K28
0xB82E0400, // 008F GETNGBL R11 K2
0x8C2C1707, // 0090 GETMET R11 R11 K7
0x58340025, // 0091 LDCONST R13 K37
0x7C2C0400, // 0092 CALL R11 2
0x5830000A, // 0093 LDCONST R12 K10
0x7C240600, // 0094 CALL R9 3
0x8C24111D, // 0095 GETMET R9 R8 K29
0x5C2C0E00, // 0096 MOVE R11 R7
0x7C240400, // 0097 CALL R9 2
0xB8260400, // 0098 GETNGBL R9 K2
0x8C241326, // 0099 GETMET R9 R9 K38
0x582C000A, // 009A LDCONST R11 K10
0x7C240400, // 009B CALL R9 2
0xB8260400, // 009C GETNGBL R9 K2
0x90264E01, // 009D SETMBR R9 K39 R1
0xB8265000, // 009E GETNGBL R9 K40
0x8C241329, // 009F GETMET R9 R9 K41
0x542E1387, // 00A0 LDINT R11 5000
0xB8320400, // 00A1 GETNGBL R12 K2
0x8830192A, // 00A2 GETMBR R12 R12 K42
0x7C240600, // 00A3 CALL R9 3
0x80000000, // 00A4 RET 0
})
)
);

View File

@ -1,267 +0,0 @@
#include "Adafruit_LvGL_Glue.h"
#include <lvgl.h>
#include "lv_berry.h"
// ARCHITECTURE-SPECIFIC TIMER STUFF ---------------------------------------
extern void lv_flush_callback(lv_disp_drv_t *disp, const lv_area_t *area, lv_color_t *color_p);
// Tick interval for LittlevGL internal timekeeping; 1 to 10 ms recommended
static const int lv_tick_interval_ms = 5;
static void lv_tick_handler(void) { lv_tick_inc(lv_tick_interval_ms); }
// TOUCHSCREEN STUFF -------------------------------------------------------
uint32_t Touch_Status(int32_t sel);
static void touchscreen_read(lv_indev_drv_t *indev_drv, lv_indev_data_t *data) {
data->point.x = Touch_Status(1); // Last-pressed coordinates
data->point.y = Touch_Status(2);
data->state = Touch_Status(0) ? LV_INDEV_STATE_PRESSED : LV_INDEV_STATE_RELEASED;
data->continue_reading = false; /*No buffering now so no more data read*/
// keep data for TS calibration
lv_ts_calibration.state = data->state;
if (data->state == LV_INDEV_STATE_PRESSED) { // if not pressed, the data may be invalid
lv_ts_calibration.x = data->point.x;
lv_ts_calibration.y = data->point.y;
lv_ts_calibration.raw_x = Touch_Status(-1);
lv_ts_calibration.raw_y = Touch_Status(-2);
}
}
// OTHER LITTLEVGL VITALS --------------------------------------------------
#if LV_COLOR_DEPTH != 16
#pragma error("LV_COLOR_DEPTH must be 16")
#endif
// This isn't necessarily true, don't mention it for now. See notes later.
//#if LV_COLOR_16_SWAP != 0
// #pragma message("Set LV_COLOR_16_SWAP to 0 for best display performance")
//#endif
// Actual RAM usage will be 2X these figures, since using 2 DMA buffers...
#define LV_BUFFER_ROWS 60 // Most others have a bit more space
// // This is the flush function required for LittlevGL screen updates.
// // It receives a bounding rect and an array of pixel data (conveniently
// // already in 565 format, so the Earth was lucky there).
// static void lv_flush_callback(lv_disp_drv_t *disp, const lv_area_t *area, lv_color_t *color_p) {
// // Get pointer to glue object from indev user data
// Adafruit_LvGL_Glue *glue = (Adafruit_LvGL_Glue *)disp->user_data;
// uint16_t width = (area->x2 - area->x1 + 1);
// uint16_t height = (area->y2 - area->y1 + 1);
// // check if we are currently doing a screenshot
// if (glue->getScreenshotFile() != nullptr) {
// // save pixels to file
// int32_t btw = (width * height * LV_COLOR_DEPTH + 7) / 8;
// while (btw > 0) {
// int32_t ret = glue->getScreenshotFile()->write((const uint8_t*) color_p, btw);
// if (ret >= 0) {
// btw -= ret;
// } else {
// btw = 0; // abort
// }
// }
// lv_disp_flush_ready(disp);
// return; // ok
// // }
// Renderer *display = glue->display;
// if (!glue->first_frame) {
// //display->dmaWait(); // Wait for prior DMA transfer to complete
// //display->endWrite(); // End transaction from any prior call
// } else {
// glue->first_frame = false;
// }
// display->setAddrWindow(area->x1, area->y1, area->x1+width, area->y1+height);
// display->pushColors((uint16_t *)color_p, width * height, true);
// display->setAddrWindow(0,0,0,0);
// lv_disp_flush_ready(disp);
// }
// #if (LV_USE_LOG)
// // Optional LittlevGL debug print function, writes to Serial if debug is
// // enabled when calling glue begin() function.
// static void lv_debug(lv_log_level_t level, const char *file, uint32_t line, const char *fname,
// const char *dsc) {
// Serial.print(file);
// Serial.write('@');
// Serial.print(line);
// Serial.print(":");
// Serial.print(fname);
// Serial.write("->");
// Serial.println(dsc);
// }
// #endif
// GLUE LIB FUNCTIONS ------------------------------------------------------
// Constructor
/**
* @brief Construct a new Adafruit_LvGL_Glue::Adafruit_LvGL_Glue object,
* initializing minimal variables
*
*/
Adafruit_LvGL_Glue::Adafruit_LvGL_Glue(void)
: first_frame(true), lv_pixel_buf(NULL) {
}
// Destructor
/**
* @brief Destroy the Adafruit_LvGL_Glue::Adafruit_LvGL_Glue object, freeing any
* memory previously allocated within this library.
*
*/
Adafruit_LvGL_Glue::~Adafruit_LvGL_Glue(void) {
delete[] lv_pixel_buf;
// Probably other stuff that could be deallocated here
}
// begin() function is overloaded for STMPE610 touch, ADC touch, or none.
// Pass in POINTERS to ALREADY INITIALIZED display & touch objects (user code
// should have previously called corresponding begin() functions and checked
// return states before invoking this),
// they are NOT initialized here. Debug arg is
// touch arg can be NULL (or left off) if using LittlevGL as a passive widget
// display.
/**
* @brief Configure the glue layer and the underlying LvGL code to use the given
* TFT display driver instance and touchscreen controller
*
* @param tft Pointer to an **already initialized** display object instance
* @param touch Pointer to an **already initialized** `Adafruit_STMPE610`
* touchscreen controller object instance
* @param debug Debug flag to enable debug messages. Only used if LV_USE_LOG is
* configured in LittleLVGL's lv_conf.h
* @return LvGLStatus The status of the initialization:
* * LVGL_OK : Success
* * LVGL_ERR_TIMER : Failure to set up timers
* * LVGL_ERR_ALLOC : Failure to allocate memory
*/
// LvGLStatus Adafruit_LvGL_Glue::begin(uDisplay_lvgl *tft,
// Adafruit_STMPE610 *touch, bool debug) {
// is_adc_touch = false;
// return begin(tft, (void *)touch, debug);
// }
/**
* @brief Configure the glue layer and the underlying LvGL code to use the given
* TFT display driver and touchscreen controller instances
*
* @param tft Pointer to an **already initialized** display object instance
* @param touch Pointer to an **already initialized** `TouchScreen` touchscreen
* controller object instance
* @param debug Debug flag to enable debug messages. Only used if LV_USE_LOG is
* configured in LittleLVGL's lv_conf.h
* @return LvGLStatus The status of the initialization:
* * LVGL_OK : Success
* * LVGL_ERR_TIMER : Failure to set up timers
* * LVGL_ERR_ALLOC : Failure to allocate memory
*/
// LvGLStatus Adafruit_LvGL_Glue::begin(uDisplay_lvgl *tft, TouchScreen *touch,
// bool debug) {
// is_adc_touch = true;
// return begin(tft, (void *)touch, debug);
// }
/**
* @brief Configure the glue layer and the underlying LvGL code to use the given
* TFT display driver and touchscreen controller instances
*
* @param tft Pointer to an **already initialized** display object instance
* @param debug Debug flag to enable debug messages. Only used if LV_USE_LOG is
* configured in LittleLVGL's lv_conf.h
* @return LvGLStatus The status of the initialization:
* * LVGL_OK : Success
* * LVGL_ERR_TIMER : Failure to set up timers
* * LVGL_ERR_ALLOC : Failure to allocate memory
*/
LvGLStatus Adafruit_LvGL_Glue::begin(Renderer *tft, bool debug) {
return begin(tft, (void *)NULL, debug);
}
LvGLStatus Adafruit_LvGL_Glue::begin(Renderer *tft, void *touch, bool debug) {
lv_init();
// Allocate LvGL display buffer (x2 because DMA double buffering)
LvGLStatus status = LVGL_ERR_ALLOC;
// if ((lv_pixel_buf = new lv_color_t[LV_HOR_RES_MAX * LV_BUFFER_ROWS * 2])) {
uint32_t lvgl_buffer_size;
//lvgl_buffer_size = LV_HOR_RES_MAX * LV_BUFFER_ROWS;
uint8_t flushlines = tft->lvgl_pars()->fluslines;
lvgl_buffer_size = tft->width() * (flushlines ? flushlines:LV_BUFFER_ROWS);
if (tft->lvgl_pars()->use_dma) {
lvgl_buffer_size /= 2;
if (lvgl_buffer_size < 1000000) {
lv_pixel_buf2 = new lv_color_t[lvgl_buffer_size];
}
if (!lv_pixel_buf2) {
return status;
}
} else {
lv_pixel_buf2 = nullptr;
}
if ((lv_pixel_buf = new lv_color_t[lvgl_buffer_size])) {
display = tft;
touchscreen = (void *)touch;
// // Initialize LvGL display buffers
// lv_disp_buf_init(
// &lv_disp_buf, lv_pixel_buf, // 1st half buf
// &lv_pixel_buf[LV_HOR_RES_MAX * LV_BUFFER_ROWS], // 2nd half buf
// LV_HOR_RES_MAX * LV_BUFFER_ROWS);
// Initialize LvGL display buffers
lv_disp_draw_buf_init(
&lv_disp_buf, lv_pixel_buf, // 1st half buf
lv_pixel_buf2, // 2nd half buf
lvgl_buffer_size);
// Initialize LvGL display driver
lv_disp_drv_init(&lv_disp_drv);
lv_disp_drv.hor_res = tft->width();
lv_disp_drv.ver_res = tft->height();
lv_disp_drv.flush_cb = lv_flush_callback;
lv_disp_drv.draw_buf = &lv_disp_buf;
lv_disp_drv.user_data = (void*)this;
lv_disp_drv_register(&lv_disp_drv);
// Initialize LvGL input device (touchscreen already started)
if (touch) { // Can also pass NULL if passive widget display
lv_indev_drv_init(&lv_indev_drv); // Basic init
lv_indev_drv.type = LV_INDEV_TYPE_POINTER; // Is pointer dev
lv_indev_drv.read_cb = touchscreen_read; // Read callback
lv_indev_drv.user_data = (void*)this;
lv_input_dev_ptr = lv_indev_drv_register(&lv_indev_drv);
}
// TIMER SETUP is architecture-specific ----------------------------
// ESP 32------------------------------------------------
tick.attach_ms(lv_tick_interval_ms, lv_tick_handler);
status = LVGL_OK;
// -----------------------------------------
}
if (status != LVGL_OK) {
delete[] lv_pixel_buf;
lv_pixel_buf = NULL;
}
return status;
}

View File

@ -1,54 +0,0 @@
#ifndef _ADAFRUIT_LVGL_GLUE_H_
#define _ADAFRUIT_LVGL_GLUE_H_
#include <lvgl.h> // LittlevGL core lib
#include <renderer.h>
#include <Ticker.h> // ESP32-specific timer lib
#include <FS.h>
typedef enum {
LVGL_OK,
LVGL_ERR_ALLOC,
LVGL_ERR_TIMER,
} LvGLStatus;
/**
* @brief Class to act as a "glue" layer between the LvGL graphics library and
* most of Adafruit's TFT displays
*
*/
class Adafruit_LvGL_Glue {
public:
Adafruit_LvGL_Glue(void);
~Adafruit_LvGL_Glue(void);
// Different begin() funcs for STMPE610, ADC or no touch
// LvGLStatus begin(uDisplay_lvgl *tft, Adafruit_STMPE610 *touch,
// bool debug = false);
// LvGLStatus begin(uDisplay_lvgl *tft, TouchScreen *touch,
// bool debug = false);
LvGLStatus begin(Renderer *tft, bool debug = false);
LvGLStatus begin(Renderer *tft, void *touch, bool debug);
// These items need to be public for some internal callbacks,
// but should be avoided by user code please!
Renderer *display; ///< Pointer to the SPITFT display instance
void *touchscreen; ///< Pointer to the touchscreen object to use
bool is_adc_touch; ///< determines if the touchscreen controlelr is ADC based
bool first_frame; ///< Tracks if a call to `lv_flush_callback` needs to wait
///< for DMA transfer to complete
void setScreenshotFile(File *f) { screenshot = f; }
File * getScreenshotFile(void) const { return screenshot; }
void stopScreenshot(void) { screenshot = nullptr; }
private:
lv_disp_drv_t lv_disp_drv;
lv_disp_draw_buf_t lv_disp_buf;
lv_color_t *lv_pixel_buf;
lv_color_t *lv_pixel_buf2;
lv_indev_drv_t lv_indev_drv;
lv_indev_t *lv_input_dev_ptr;
Ticker tick;
File * screenshot = nullptr;
};
#endif // _ADAFRUIT_LVGL_GLUE_H_

View File

@ -1,50 +0,0 @@
# Adafruit LvGL Glue [![Build Status](https://github.com/adafruit/Adafruit_LvGL_Glue/workflows/Arduino%20Library%20CI/badge.svg)](https://github.com/adafruit/Adafruit_LvGL_Glue/actions)
This Arduino library provides a layer between LittlevGL (a UI library for
embedded systems) and most of Adafruit's color TFT displays (anything that's
a subclass of SPITFT).
Examples show basic use on PyPortal, FeatherWing, CLUE and TFT Gizmo.
Use these as a starting point, see LittlevGL documentation at
docs.littlevgl.com for a thorough explanation of capabilities and use.
# Dependencies
* [LittlevGL](https://github.com/littlevgl/lvgl)
* [Adafruit GFX Library](https://github.com/adafruit/Adafruit-GFX-Library)
* [Adafruit HX8357 Library](https://github.com/adafruit/Adafruit_HX8357_Library)
* [Adafruit ILI9341](https://github.com/adafruit/Adafruit_ILI9341)
* [Adafruit ST7735 and ST7789 Library](https://github.com/adafruit/Adafruit-ST7735-Library)
* [Adafruit STMPE610](https://github.com/adafruit/Adafruit_STMPE610)
* [Adafruit TouchScreen](https://github.com/adafruit/Adafruit_TouchScreen)
* [Adafruit Zero DMA Library](https://github.com/adafruit/Adafruit_ZeroDMA)
* [Adafruit ZeroTimer Library](https://github.com/adafruit/Adafruit_ZeroTimer)
# Compatibility
Version 2.0.0 is a breaking change, mostly due to significant structural
changes in the LittlevGL library for Arduino. If you were previously using
an earlier version of this library and/or LittlevGL, both will need updating,
and you should skim the examples and read through the hello_changes example
specifically.
Use on M0 (SAMD21) boards isn't recommended anymore, as LittlevGL has grown.
Simple programs might still work, but it's better to move up to a device
with more RAM -- M4 (SAMD51), nRF52 and ESP32 are currently supported.
# Contributing
Contributions are welcome! Please read our [Code of Conduct](https://github.com/adafruit/Adafruit_LvGL_Glue/blob/master/CODE_OF_CONDUCT.md>)
before contributing to help this project stay welcoming.
## Documentation and doxygen
Documentation is produced by doxygen. Contributions should include documentation for any new code added.
Some examples of how to use doxygen can be found in these guide pages:
https://learn.adafruit.com/the-well-automated-arduino-library/doxygen
https://learn.adafruit.com/the-well-automated-arduino-library/doxygen-tips
Written by Phil Burgess aka Paint Your Dragon for Adafruit Industries.
BSD license, check license.txt for more information
All text above must be included in any redistribution
To install, use the Arduino Library Manager and search for "Adafruit LvGL Glue Library" and install the library.

View File

@ -1,127 +0,0 @@
# Adafruit Community Code of Conduct
## Our Pledge
In the interest of fostering an open and welcoming environment, we as
contributors and leaders pledge to making participation in our project and
our community a harassment-free experience for everyone, regardless of age, body
size, disability, ethnicity, gender identity and expression, level or type of
experience, education, socio-economic status, nationality, personal appearance,
race, religion, or sexual identity and orientation.
## Our Standards
We are committed to providing a friendly, safe and welcoming environment for
all.
Examples of behavior that contributes to creating a positive environment
include:
* Be kind and courteous to others
* Using welcoming and inclusive language
* Being respectful of differing viewpoints and experiences
* Collaborating with other community members
* Gracefully accepting constructive criticism
* Focusing on what is best for the community
* Showing empathy towards other community members
Examples of unacceptable behavior by participants include:
* The use of sexualized language or imagery and sexual attention or advances
* The use of inappropriate images, including in a community member's avatar
* The use of inappropriate language, including in a community member's nickname
* Any spamming, flaming, baiting or other attention-stealing behavior
* Excessive or unwelcome helping; answering outside the scope of the question
asked
* Trolling, insulting/derogatory comments, and personal or political attacks
* Public or private harassment
* Publishing others' private information, such as a physical or electronic
address, without explicit permission
* Other conduct which could reasonably be considered inappropriate
The goal of the standards and moderation guidelines outlined here is to build
and maintain a respectful community. We ask that you dont just aim to be
"technically unimpeachable", but rather try to be your best self.
We value many things beyond technical expertise, including collaboration and
supporting others within our community. Providing a positive experience for
other community members can have a much more significant impact than simply
providing the correct answer.
## Our Responsibilities
Project leaders are responsible for clarifying the standards of acceptable
behavior and are expected to take appropriate and fair corrective action in
response to any instances of unacceptable behavior.
Project leaders have the right and responsibility to remove, edit, or
reject messages, comments, commits, code, issues, and other contributions
that are not aligned to this Code of Conduct, or to ban temporarily or
permanently any community member for other behaviors that they deem
inappropriate, threatening, offensive, or harmful.
## Moderation
Instances of behaviors that violate the Adafruit Community Code of Conduct
may be reported by any member of the community. Community members are
encouraged to report these situations, including situations they witness
involving other community members.
You may report in the following ways:
In any situation, you may send an email to <support@adafruit.com>.
On the Adafruit Discord, you may send an open message from any channel
to all Community Helpers by tagging @community helpers. You may also send an
open message from any channel, or a direct message to @kattni#1507,
@tannewt#4653, @Dan Halbert#1614, @cater#2442, @sommersoft#0222, or
@Andon#8175.
Email and direct message reports will be kept confidential.
In situations on Discord where the issue is particularly egregious, possibly
illegal, requires immediate action, or violates the Discord terms of service,
you should also report the message directly to Discord.
These are the steps for upholding our communitys standards of conduct.
1. Any member of the community may report any situation that violates the
Adafruit Community Code of Conduct. All reports will be reviewed and
investigated.
2. If the behavior is an egregious violation, the community member who
committed the violation may be banned immediately, without warning.
3. Otherwise, moderators will first respond to such behavior with a warning.
4. Moderators follow a soft "three strikes" policy - the community member may
be given another chance, if they are receptive to the warning and change their
behavior.
5. If the community member is unreceptive or unreasonable when warned by a
moderator, or the warning goes unheeded, they may be banned for a first or
second offense. Repeated offenses will result in the community member being
banned.
## Scope
This Code of Conduct and the enforcement policies listed above apply to all
Adafruit Community venues. This includes but is not limited to any community
spaces (both public and private), the entire Adafruit Discord server, and
Adafruit GitHub repositories. Examples of Adafruit Community spaces include
but are not limited to meet-ups, audio chats on the Adafruit Discord, or
interaction at a conference.
This Code of Conduct applies both within project spaces and in public spaces
when an individual is representing the project or its community. As a community
member, you are representing our community, and are expected to behave
accordingly.
## Attribution
This Code of Conduct is adapted from the [Contributor Covenant][homepage],
version 1.4, available at
<https://www.contributor-covenant.org/version/1/4/code-of-conduct.html>,
and the [Rust Code of Conduct](https://www.rust-lang.org/en-US/conduct.html).
For other projects adopting the Adafruit Community Code of
Conduct, please contact the maintainers of those projects for enforcement.
If you wish to use this code of conduct for your own project, consider
explicitly mentioning your moderation policy or making a copy with your
own moderation policy so as to avoid confusion.

View File

@ -1,10 +0,0 @@
{
"name": "Adafruit LittlevGL Glue Library",
"description": "This library works in conjunction with LittlevGL (an embedded system GUI library) and Adafruit display-specific libraries to provide nice user interfaces on PyPortal, TFT FeatherWings, and more.",
"version": "2.0.0",
"homepage": "https://github.com/adafruit/Adafruit_LvGL_Glue",
"frameworks": "*",
"build": {
"flags": [ "-Wno-deprecated-enum-enum-conversion" ]
}
}

View File

@ -1,10 +0,0 @@
name=Adafruit LittlevGL Glue Library
version=2.0.0
author=Adafruit
maintainer=Adafruit <info@adafruit.com>
sentence=Simplifies use of LittlevGL library with Adafruit displays.
paragraph=This library works in conjunction with LittlevGL (an embedded system GUI library) and Adafruit display-specific libraries to provide nice user interfaces on PyPortal, TFT FeatherWings, and more.
category=Display
url=https://github.com/adafruit/Adafruit_LvGL_Glue
architectures=samd, nrf52, esp32
depends=Adafruit GFX Library, Adafruit TouchScreen, Adafruit STMPE610, Adafruit Zero DMA Library, Adafruit HX8357 Library, Adafruit ILI9341, Adafruit ZeroTimer Library, Adafruit ST7735 and ST7789 Library, lvgl

View File

@ -1,26 +0,0 @@
Software License Agreement (BSD License)
Copyright (c) 2020 Phil Burgess aka Paint Your Dragon for Adafruit Industries
All rights reserved.
Redistribution and use in source and binary forms, with or without
modification, are permitted provided that the following conditions are met:
1. Redistributions of source code must retain the above copyright
notice, this list of conditions and the following disclaimer.
2. Redistributions in binary form must reproduce the above copyright
notice, this list of conditions and the following disclaimer in the
documentation and/or other materials provided with the distribution.
3. Neither the name of the copyright holders nor the
names of its contributors may be used to endorse or promote products
derived from this software without specific prior written permission.
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS ''AS IS'' AND ANY
EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE FOR ANY
DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.9 KiB

View File

@ -2084,9 +2084,8 @@ static const lv_font_fmt_txt_cmap_t cmaps[] =
* ALL CUSTOM DATA
*--------------------*/
#if LV_VERSION_CHECK(8, 0, 0)
#if LVGL_VERSION_MAJOR >= 8
/*Store all the custom data of the font*/
static lv_font_fmt_txt_glyph_cache_t cache;
static const lv_font_fmt_txt_dsc_t font_dsc = {
#else
static lv_font_fmt_txt_dsc_t font_dsc = {
@ -2100,9 +2099,6 @@ static lv_font_fmt_txt_dsc_t font_dsc = {
.bpp = 3,
.kern_classes = 0,
.bitmap_format = 1,
#if LV_VERSION_CHECK(8, 0, 0)
.cache = &cache
#endif
};
@ -2111,7 +2107,7 @@ static lv_font_fmt_txt_dsc_t font_dsc = {
*----------------*/
/*Initialize a public general font descriptor*/
#if LV_VERSION_CHECK(8, 0, 0)
#if LVGL_VERSION_MAJOR >= 8
const lv_font_t robotocondensed_regular_12_latin1 = {
#else
lv_font_t robotocondensed_regular_12_latin1 = {

View File

@ -2335,9 +2335,8 @@ static const lv_font_fmt_txt_cmap_t cmaps[] =
* ALL CUSTOM DATA
*--------------------*/
#if LV_VERSION_CHECK(8, 0, 0)
#if LVGL_VERSION_MAJOR >= 8
/*Store all the custom data of the font*/
static lv_font_fmt_txt_glyph_cache_t cache;
static const lv_font_fmt_txt_dsc_t font_dsc = {
#else
static lv_font_fmt_txt_dsc_t font_dsc = {
@ -2351,9 +2350,6 @@ static lv_font_fmt_txt_dsc_t font_dsc = {
.bpp = 3,
.kern_classes = 0,
.bitmap_format = 1,
#if LV_VERSION_CHECK(8, 0, 0)
.cache = &cache
#endif
};
@ -2362,7 +2358,7 @@ static lv_font_fmt_txt_dsc_t font_dsc = {
*----------------*/
/*Initialize a public general font descriptor*/
#if LV_VERSION_CHECK(8, 0, 0)
#if LVGL_VERSION_MAJOR >= 8
const lv_font_t robotocondensed_regular_14_latin1 = {
#else
lv_font_t robotocondensed_regular_14_latin1 = {

View File

@ -2536,9 +2536,8 @@ static const lv_font_fmt_txt_cmap_t cmaps[] =
* ALL CUSTOM DATA
*--------------------*/
#if LV_VERSION_CHECK(8, 0, 0)
#if LVGL_VERSION_MAJOR >= 8
/*Store all the custom data of the font*/
static lv_font_fmt_txt_glyph_cache_t cache;
static const lv_font_fmt_txt_dsc_t font_dsc = {
#else
static lv_font_fmt_txt_dsc_t font_dsc = {
@ -2552,9 +2551,6 @@ static lv_font_fmt_txt_dsc_t font_dsc = {
.bpp = 3,
.kern_classes = 0,
.bitmap_format = 1,
#if LV_VERSION_CHECK(8, 0, 0)
.cache = &cache
#endif
};
@ -2563,7 +2559,7 @@ static lv_font_fmt_txt_dsc_t font_dsc = {
*----------------*/
/*Initialize a public general font descriptor*/
#if LV_VERSION_CHECK(8, 0, 0)
#if LVGL_VERSION_MAJOR >= 8
const lv_font_t robotocondensed_regular_16_latin1 = {
#else
lv_font_t robotocondensed_regular_16_latin1 = {

View File

@ -3076,9 +3076,8 @@ static const lv_font_fmt_txt_cmap_t cmaps[] =
* ALL CUSTOM DATA
*--------------------*/
#if LV_VERSION_CHECK(8, 0, 0)
#if LVGL_VERSION_MAJOR >= 8
/*Store all the custom data of the font*/
static lv_font_fmt_txt_glyph_cache_t cache;
static const lv_font_fmt_txt_dsc_t font_dsc = {
#else
static lv_font_fmt_txt_dsc_t font_dsc = {
@ -3092,9 +3091,6 @@ static lv_font_fmt_txt_dsc_t font_dsc = {
.bpp = 3,
.kern_classes = 0,
.bitmap_format = 1,
#if LV_VERSION_CHECK(8, 0, 0)
.cache = &cache
#endif
};
@ -3103,7 +3099,7 @@ static lv_font_fmt_txt_dsc_t font_dsc = {
*----------------*/
/*Initialize a public general font descriptor*/
#if LV_VERSION_CHECK(8, 0, 0)
#if LVGL_VERSION_MAJOR >= 8
const lv_font_t robotocondensed_regular_20_latin1 = {
#else
lv_font_t robotocondensed_regular_20_latin1 = {

View File

@ -3371,9 +3371,8 @@ static const lv_font_fmt_txt_cmap_t cmaps[] =
* ALL CUSTOM DATA
*--------------------*/
#if LV_VERSION_CHECK(8, 0, 0)
#if LVGL_VERSION_MAJOR >= 8
/*Store all the custom data of the font*/
static lv_font_fmt_txt_glyph_cache_t cache;
static const lv_font_fmt_txt_dsc_t font_dsc = {
#else
static lv_font_fmt_txt_dsc_t font_dsc = {
@ -3387,9 +3386,6 @@ static lv_font_fmt_txt_dsc_t font_dsc = {
.bpp = 3,
.kern_classes = 0,
.bitmap_format = 1,
#if LV_VERSION_CHECK(8, 0, 0)
.cache = &cache
#endif
};
@ -3398,7 +3394,7 @@ static lv_font_fmt_txt_dsc_t font_dsc = {
*----------------*/
/*Initialize a public general font descriptor*/
#if LV_VERSION_CHECK(8, 0, 0)
#if LVGL_VERSION_MAJOR >= 8
const lv_font_t robotocondensed_regular_22_latin1 = {
#else
lv_font_t robotocondensed_regular_22_latin1 = {

View File

@ -3527,9 +3527,8 @@ static const lv_font_fmt_txt_cmap_t cmaps[] =
* ALL CUSTOM DATA
*--------------------*/
#if LV_VERSION_CHECK(8, 0, 0)
#if LVGL_VERSION_MAJOR >= 8
/*Store all the custom data of the font*/
static lv_font_fmt_txt_glyph_cache_t cache;
static const lv_font_fmt_txt_dsc_t font_dsc = {
#else
static lv_font_fmt_txt_dsc_t font_dsc = {
@ -3543,9 +3542,6 @@ static lv_font_fmt_txt_dsc_t font_dsc = {
.bpp = 3,
.kern_classes = 0,
.bitmap_format = 1,
#if LV_VERSION_CHECK(8, 0, 0)
.cache = &cache
#endif
};
@ -3554,7 +3550,7 @@ static lv_font_fmt_txt_dsc_t font_dsc = {
*----------------*/
/*Initialize a public general font descriptor*/
#if LV_VERSION_CHECK(8, 0, 0)
#if LVGL_VERSION_MAJOR >= 8
const lv_font_t robotocondensed_regular_24_latin1 = {
#else
lv_font_t robotocondensed_regular_24_latin1 = {

View File

@ -3952,9 +3952,8 @@ static const lv_font_fmt_txt_cmap_t cmaps[] =
* ALL CUSTOM DATA
*--------------------*/
#if LV_VERSION_CHECK(8, 0, 0)
#if LVGL_VERSION_MAJOR >= 8
/*Store all the custom data of the font*/
static lv_font_fmt_txt_glyph_cache_t cache;
static const lv_font_fmt_txt_dsc_t font_dsc = {
#else
static lv_font_fmt_txt_dsc_t font_dsc = {
@ -3968,9 +3967,6 @@ static lv_font_fmt_txt_dsc_t font_dsc = {
.bpp = 3,
.kern_classes = 0,
.bitmap_format = 1,
#if LV_VERSION_CHECK(8, 0, 0)
.cache = &cache
#endif
};
@ -3979,7 +3975,7 @@ static lv_font_fmt_txt_dsc_t font_dsc = {
*----------------*/
/*Initialize a public general font descriptor*/
#if LV_VERSION_CHECK(8, 0, 0)
#if LVGL_VERSION_MAJOR >= 8
const lv_font_t robotocondensed_regular_26_latin1 = {
#else
lv_font_t robotocondensed_regular_26_latin1 = {

View File

@ -4309,9 +4309,8 @@ static const lv_font_fmt_txt_cmap_t cmaps[] =
* ALL CUSTOM DATA
*--------------------*/
#if LV_VERSION_CHECK(8, 0, 0)
#if LVGL_VERSION_MAJOR >= 8
/*Store all the custom data of the font*/
static lv_font_fmt_txt_glyph_cache_t cache;
static const lv_font_fmt_txt_dsc_t font_dsc = {
#else
static lv_font_fmt_txt_dsc_t font_dsc = {
@ -4325,9 +4324,6 @@ static lv_font_fmt_txt_dsc_t font_dsc = {
.bpp = 3,
.kern_classes = 0,
.bitmap_format = 1,
#if LV_VERSION_CHECK(8, 0, 0)
.cache = &cache
#endif
};
@ -4336,7 +4332,7 @@ static lv_font_fmt_txt_dsc_t font_dsc = {
*----------------*/
/*Initialize a public general font descriptor*/
#if LV_VERSION_CHECK(8, 0, 0)
#if LVGL_VERSION_MAJOR >= 8
const lv_font_t robotocondensed_regular_28_latin1 = {
#else
lv_font_t robotocondensed_regular_28_latin1 = {

View File

@ -4930,9 +4930,8 @@ static const lv_font_fmt_txt_cmap_t cmaps[] =
* ALL CUSTOM DATA
*--------------------*/
#if LV_VERSION_CHECK(8, 0, 0)
#if LVGL_VERSION_MAJOR >= 8
/*Store all the custom data of the font*/
static lv_font_fmt_txt_glyph_cache_t cache;
static const lv_font_fmt_txt_dsc_t font_dsc = {
#else
static lv_font_fmt_txt_dsc_t font_dsc = {
@ -4946,9 +4945,6 @@ static lv_font_fmt_txt_dsc_t font_dsc = {
.bpp = 3,
.kern_classes = 0,
.bitmap_format = 1,
#if LV_VERSION_CHECK(8, 0, 0)
.cache = &cache
#endif
};
@ -4957,7 +4953,7 @@ static lv_font_fmt_txt_dsc_t font_dsc = {
*----------------*/
/*Initialize a public general font descriptor*/
#if LV_VERSION_CHECK(8, 0, 0)
#if LVGL_VERSION_MAJOR >= 8
const lv_font_t robotocondensed_regular_32_latin1 = {
#else
lv_font_t robotocondensed_regular_32_latin1 = {

View File

@ -5714,9 +5714,8 @@ static const lv_font_fmt_txt_cmap_t cmaps[] =
* ALL CUSTOM DATA
*--------------------*/
#if LV_VERSION_CHECK(8, 0, 0)
#if LVGL_VERSION_MAJOR >= 8
/*Store all the custom data of the font*/
static lv_font_fmt_txt_glyph_cache_t cache;
static const lv_font_fmt_txt_dsc_t font_dsc = {
#else
static lv_font_fmt_txt_dsc_t font_dsc = {
@ -5730,9 +5729,6 @@ static lv_font_fmt_txt_dsc_t font_dsc = {
.bpp = 3,
.kern_classes = 0,
.bitmap_format = 1,
#if LV_VERSION_CHECK(8, 0, 0)
.cache = &cache
#endif
};
@ -5741,7 +5737,7 @@ static lv_font_fmt_txt_dsc_t font_dsc = {
*----------------*/
/*Initialize a public general font descriptor*/
#if LV_VERSION_CHECK(8, 0, 0)
#if LVGL_VERSION_MAJOR >= 8
const lv_font_t robotocondensed_regular_36_latin1 = {
#else
lv_font_t robotocondensed_regular_36_latin1 = {

View File

@ -6059,9 +6059,8 @@ static const lv_font_fmt_txt_cmap_t cmaps[] =
* ALL CUSTOM DATA
*--------------------*/
#if LV_VERSION_CHECK(8, 0, 0)
#if LVGL_VERSION_MAJOR >= 8
/*Store all the custom data of the font*/
static lv_font_fmt_txt_glyph_cache_t cache;
static const lv_font_fmt_txt_dsc_t font_dsc = {
#else
static lv_font_fmt_txt_dsc_t font_dsc = {
@ -6075,9 +6074,6 @@ static lv_font_fmt_txt_dsc_t font_dsc = {
.bpp = 3,
.kern_classes = 0,
.bitmap_format = 1,
#if LV_VERSION_CHECK(8, 0, 0)
.cache = &cache
#endif
};
@ -6086,7 +6082,7 @@ static lv_font_fmt_txt_dsc_t font_dsc = {
*----------------*/
/*Initialize a public general font descriptor*/
#if LV_VERSION_CHECK(8, 0, 0)
#if LVGL_VERSION_MAJOR >= 8
const lv_font_t robotocondensed_regular_38_latin1 = {
#else
lv_font_t robotocondensed_regular_38_latin1 = {

View File

@ -6422,9 +6422,8 @@ static const lv_font_fmt_txt_cmap_t cmaps[] =
* ALL CUSTOM DATA
*--------------------*/
#if LV_VERSION_CHECK(8, 0, 0)
#if LVGL_VERSION_MAJOR >= 8
/*Store all the custom data of the font*/
static lv_font_fmt_txt_glyph_cache_t cache;
static const lv_font_fmt_txt_dsc_t font_dsc = {
#else
static lv_font_fmt_txt_dsc_t font_dsc = {
@ -6438,9 +6437,6 @@ static lv_font_fmt_txt_dsc_t font_dsc = {
.bpp = 3,
.kern_classes = 0,
.bitmap_format = 1,
#if LV_VERSION_CHECK(8, 0, 0)
.cache = &cache
#endif
};
@ -6449,7 +6445,7 @@ static lv_font_fmt_txt_dsc_t font_dsc = {
*----------------*/
/*Initialize a public general font descriptor*/
#if LV_VERSION_CHECK(8, 0, 0)
#if LVGL_VERSION_MAJOR >= 8
const lv_font_t robotocondensed_regular_40_latin1 = {
#else
lv_font_t robotocondensed_regular_40_latin1 = {

View File

@ -7114,9 +7114,8 @@ static const lv_font_fmt_txt_cmap_t cmaps[] =
* ALL CUSTOM DATA
*--------------------*/
#if LV_VERSION_CHECK(8, 0, 0)
#if LVGL_VERSION_MAJOR >= 8
/*Store all the custom data of the font*/
static lv_font_fmt_txt_glyph_cache_t cache;
static const lv_font_fmt_txt_dsc_t font_dsc = {
#else
static lv_font_fmt_txt_dsc_t font_dsc = {
@ -7130,9 +7129,6 @@ static lv_font_fmt_txt_dsc_t font_dsc = {
.bpp = 3,
.kern_classes = 0,
.bitmap_format = 1,
#if LV_VERSION_CHECK(8, 0, 0)
.cache = &cache
#endif
};
@ -7141,7 +7137,7 @@ static lv_font_fmt_txt_dsc_t font_dsc = {
*----------------*/
/*Initialize a public general font descriptor*/
#if LV_VERSION_CHECK(8, 0, 0)
#if LVGL_VERSION_MAJOR >= 8
const lv_font_t robotocondensed_regular_44_latin1 = {
#else
lv_font_t robotocondensed_regular_44_latin1 = {

View File

@ -7613,9 +7613,8 @@ static const lv_font_fmt_txt_cmap_t cmaps[] =
* ALL CUSTOM DATA
*--------------------*/
#if LV_VERSION_CHECK(8, 0, 0)
#if LVGL_VERSION_MAJOR >= 8
/*Store all the custom data of the font*/
static lv_font_fmt_txt_glyph_cache_t cache;
static const lv_font_fmt_txt_dsc_t font_dsc = {
#else
static lv_font_fmt_txt_dsc_t font_dsc = {
@ -7629,9 +7628,6 @@ static lv_font_fmt_txt_dsc_t font_dsc = {
.bpp = 3,
.kern_classes = 0,
.bitmap_format = 1,
#if LV_VERSION_CHECK(8, 0, 0)
.cache = &cache
#endif
};
@ -7640,7 +7636,7 @@ static lv_font_fmt_txt_dsc_t font_dsc = {
*----------------*/
/*Initialize a public general font descriptor*/
#if LV_VERSION_CHECK(8, 0, 0)
#if LVGL_VERSION_MAJOR >= 8
const lv_font_t robotocondensed_regular_48_latin1 = {
#else
lv_font_t robotocondensed_regular_48_latin1 = {

View File

@ -119,9 +119,8 @@ static const lv_font_fmt_txt_cmap_t cmaps[] =
* ALL CUSTOM DATA
*--------------------*/
#if LV_VERSION_CHECK(8, 0, 0)
#if LVGL_VERSION_MAJOR >= 8
/*Store all the custom data of the font*/
static lv_font_fmt_txt_glyph_cache_t cache;
static const lv_font_fmt_txt_dsc_t font_dsc = {
#else
static lv_font_fmt_txt_dsc_t font_dsc = {
@ -135,9 +134,6 @@ static lv_font_fmt_txt_dsc_t font_dsc = {
.bpp = 1,
.kern_classes = 0,
.bitmap_format = 0,
#if LV_VERSION_CHECK(8, 0, 0)
.cache = &cache
#endif
};
@ -146,7 +142,7 @@ static lv_font_fmt_txt_dsc_t font_dsc = {
*----------------*/
/*Initialize a public general font descriptor*/
#if LV_VERSION_CHECK(8, 0, 0)
#if LVGL_VERSION_MAJOR >= 8
const lv_font_t seg7_10 = {
#else
lv_font_t seg7_10 = {

View File

@ -128,9 +128,8 @@ static const lv_font_fmt_txt_cmap_t cmaps[] =
* ALL CUSTOM DATA
*--------------------*/
#if LV_VERSION_CHECK(8, 0, 0)
#if LVGL_VERSION_MAJOR >= 8
/*Store all the custom data of the font*/
static lv_font_fmt_txt_glyph_cache_t cache;
static const lv_font_fmt_txt_dsc_t font_dsc = {
#else
static lv_font_fmt_txt_dsc_t font_dsc = {
@ -144,9 +143,6 @@ static lv_font_fmt_txt_dsc_t font_dsc = {
.bpp = 1,
.kern_classes = 0,
.bitmap_format = 0,
#if LV_VERSION_CHECK(8, 0, 0)
.cache = &cache
#endif
};
@ -155,7 +151,7 @@ static lv_font_fmt_txt_dsc_t font_dsc = {
*----------------*/
/*Initialize a public general font descriptor*/
#if LV_VERSION_CHECK(8, 0, 0)
#if LVGL_VERSION_MAJOR >= 8
const lv_font_t seg7_12 = {
#else
lv_font_t seg7_12 = {

View File

@ -134,9 +134,8 @@ static const lv_font_fmt_txt_cmap_t cmaps[] =
* ALL CUSTOM DATA
*--------------------*/
#if LV_VERSION_CHECK(8, 0, 0)
#if LVGL_VERSION_MAJOR >= 8
/*Store all the custom data of the font*/
static lv_font_fmt_txt_glyph_cache_t cache;
static const lv_font_fmt_txt_dsc_t font_dsc = {
#else
static lv_font_fmt_txt_dsc_t font_dsc = {
@ -150,9 +149,6 @@ static lv_font_fmt_txt_dsc_t font_dsc = {
.bpp = 1,
.kern_classes = 0,
.bitmap_format = 0,
#if LV_VERSION_CHECK(8, 0, 0)
.cache = &cache
#endif
};
@ -161,7 +157,7 @@ static lv_font_fmt_txt_dsc_t font_dsc = {
*----------------*/
/*Initialize a public general font descriptor*/
#if LV_VERSION_CHECK(8, 0, 0)
#if LVGL_VERSION_MAJOR >= 8
const lv_font_t seg7_14 = {
#else
lv_font_t seg7_14 = {

View File

@ -137,9 +137,8 @@ static const lv_font_fmt_txt_cmap_t cmaps[] =
* ALL CUSTOM DATA
*--------------------*/
#if LV_VERSION_CHECK(8, 0, 0)
#if LVGL_VERSION_MAJOR >= 8
/*Store all the custom data of the font*/
static lv_font_fmt_txt_glyph_cache_t cache;
static const lv_font_fmt_txt_dsc_t font_dsc = {
#else
static lv_font_fmt_txt_dsc_t font_dsc = {
@ -153,9 +152,6 @@ static lv_font_fmt_txt_dsc_t font_dsc = {
.bpp = 1,
.kern_classes = 0,
.bitmap_format = 0,
#if LV_VERSION_CHECK(8, 0, 0)
.cache = &cache
#endif
};
@ -164,7 +160,7 @@ static lv_font_fmt_txt_dsc_t font_dsc = {
*----------------*/
/*Initialize a public general font descriptor*/
#if LV_VERSION_CHECK(8, 0, 0)
#if LVGL_VERSION_MAJOR >= 8
const lv_font_t seg7_16 = {
#else
lv_font_t seg7_16 = {

View File

@ -143,9 +143,8 @@ static const lv_font_fmt_txt_cmap_t cmaps[] =
* ALL CUSTOM DATA
*--------------------*/
#if LV_VERSION_CHECK(8, 0, 0)
#if LVGL_VERSION_MAJOR >= 8
/*Store all the custom data of the font*/
static lv_font_fmt_txt_glyph_cache_t cache;
static const lv_font_fmt_txt_dsc_t font_dsc = {
#else
static lv_font_fmt_txt_dsc_t font_dsc = {
@ -159,9 +158,6 @@ static lv_font_fmt_txt_dsc_t font_dsc = {
.bpp = 1,
.kern_classes = 0,
.bitmap_format = 0,
#if LV_VERSION_CHECK(8, 0, 0)
.cache = &cache
#endif
};
@ -170,7 +166,7 @@ static lv_font_fmt_txt_dsc_t font_dsc = {
*----------------*/
/*Initialize a public general font descriptor*/
#if LV_VERSION_CHECK(8, 0, 0)
#if LVGL_VERSION_MAJOR >= 8
const lv_font_t seg7_18 = {
#else
lv_font_t seg7_18 = {

View File

@ -167,9 +167,8 @@ static const lv_font_fmt_txt_cmap_t cmaps[] =
* ALL CUSTOM DATA
*--------------------*/
#if LV_VERSION_CHECK(8, 0, 0)
#if LVGL_VERSION_MAJOR >= 8
/*Store all the custom data of the font*/
static lv_font_fmt_txt_glyph_cache_t cache;
static const lv_font_fmt_txt_dsc_t font_dsc = {
#else
static lv_font_fmt_txt_dsc_t font_dsc = {
@ -183,9 +182,6 @@ static lv_font_fmt_txt_dsc_t font_dsc = {
.bpp = 2,
.kern_classes = 0,
.bitmap_format = 1,
#if LV_VERSION_CHECK(8, 0, 0)
.cache = &cache
#endif
};
@ -194,7 +190,7 @@ static lv_font_fmt_txt_dsc_t font_dsc = {
*----------------*/
/*Initialize a public general font descriptor*/
#if LV_VERSION_CHECK(8, 0, 0)
#if LVGL_VERSION_MAJOR >= 8
const lv_font_t seg7_20 = {
#else
lv_font_t seg7_20 = {

View File

@ -183,9 +183,8 @@ static const lv_font_fmt_txt_cmap_t cmaps[] =
* ALL CUSTOM DATA
*--------------------*/
#if LV_VERSION_CHECK(8, 0, 0)
#if LVGL_VERSION_MAJOR >= 8
/*Store all the custom data of the font*/
static lv_font_fmt_txt_glyph_cache_t cache;
static const lv_font_fmt_txt_dsc_t font_dsc = {
#else
static lv_font_fmt_txt_dsc_t font_dsc = {
@ -199,9 +198,6 @@ static lv_font_fmt_txt_dsc_t font_dsc = {
.bpp = 2,
.kern_classes = 0,
.bitmap_format = 1,
#if LV_VERSION_CHECK(8, 0, 0)
.cache = &cache
#endif
};
@ -210,7 +206,7 @@ static lv_font_fmt_txt_dsc_t font_dsc = {
*----------------*/
/*Initialize a public general font descriptor*/
#if LV_VERSION_CHECK(8, 0, 0)
#if LVGL_VERSION_MAJOR >= 8
const lv_font_t seg7_24 = {
#else
lv_font_t seg7_24 = {

View File

@ -210,9 +210,8 @@ static const lv_font_fmt_txt_cmap_t cmaps[] =
* ALL CUSTOM DATA
*--------------------*/
#if LV_VERSION_CHECK(8, 0, 0)
#if LVGL_VERSION_MAJOR >= 8
/*Store all the custom data of the font*/
static lv_font_fmt_txt_glyph_cache_t cache;
static const lv_font_fmt_txt_dsc_t font_dsc = {
#else
static lv_font_fmt_txt_dsc_t font_dsc = {
@ -226,9 +225,6 @@ static lv_font_fmt_txt_dsc_t font_dsc = {
.bpp = 2,
.kern_classes = 0,
.bitmap_format = 1,
#if LV_VERSION_CHECK(8, 0, 0)
.cache = &cache
#endif
};
@ -237,7 +233,7 @@ static lv_font_fmt_txt_dsc_t font_dsc = {
*----------------*/
/*Initialize a public general font descriptor*/
#if LV_VERSION_CHECK(8, 0, 0)
#if LVGL_VERSION_MAJOR >= 8
const lv_font_t seg7_28 = {
#else
lv_font_t seg7_28 = {

View File

@ -257,9 +257,8 @@ static const lv_font_fmt_txt_cmap_t cmaps[] =
* ALL CUSTOM DATA
*--------------------*/
#if LV_VERSION_CHECK(8, 0, 0)
#if LVGL_VERSION_MAJOR >= 8
/*Store all the custom data of the font*/
static lv_font_fmt_txt_glyph_cache_t cache;
static const lv_font_fmt_txt_dsc_t font_dsc = {
#else
static lv_font_fmt_txt_dsc_t font_dsc = {
@ -273,9 +272,6 @@ static lv_font_fmt_txt_dsc_t font_dsc = {
.bpp = 2,
.kern_classes = 0,
.bitmap_format = 1,
#if LV_VERSION_CHECK(8, 0, 0)
.cache = &cache
#endif
};
@ -284,7 +280,7 @@ static lv_font_fmt_txt_dsc_t font_dsc = {
*----------------*/
/*Initialize a public general font descriptor*/
#if LV_VERSION_CHECK(8, 0, 0)
#if LVGL_VERSION_MAJOR >= 8
const lv_font_t seg7_36 = {
#else
lv_font_t seg7_36 = {

View File

@ -316,9 +316,8 @@ static const lv_font_fmt_txt_cmap_t cmaps[] =
* ALL CUSTOM DATA
*--------------------*/
#if LV_VERSION_CHECK(8, 0, 0)
#if LVGL_VERSION_MAJOR >= 8
/*Store all the custom data of the font*/
static lv_font_fmt_txt_glyph_cache_t cache;
static const lv_font_fmt_txt_dsc_t font_dsc = {
#else
static lv_font_fmt_txt_dsc_t font_dsc = {
@ -332,9 +331,6 @@ static lv_font_fmt_txt_dsc_t font_dsc = {
.bpp = 2,
.kern_classes = 0,
.bitmap_format = 1,
#if LV_VERSION_CHECK(8, 0, 0)
.cache = &cache
#endif
};
@ -343,7 +339,7 @@ static lv_font_fmt_txt_dsc_t font_dsc = {
*----------------*/
/*Initialize a public general font descriptor*/
#if LV_VERSION_CHECK(8, 0, 0)
#if LVGL_VERSION_MAJOR >= 8
const lv_font_t seg7_48 = {
#else
lv_font_t seg7_48 = {

View File

@ -119,9 +119,8 @@ static const lv_font_fmt_txt_cmap_t cmaps[] =
* ALL CUSTOM DATA
*--------------------*/
#if LV_VERSION_CHECK(8, 0, 0)
#if LVGL_VERSION_MAJOR >= 8
/*Store all the custom data of the font*/
static lv_font_fmt_txt_glyph_cache_t cache;
static const lv_font_fmt_txt_dsc_t font_dsc = {
#else
static lv_font_fmt_txt_dsc_t font_dsc = {
@ -135,9 +134,6 @@ static lv_font_fmt_txt_dsc_t font_dsc = {
.bpp = 1,
.kern_classes = 0,
.bitmap_format = 0,
#if LV_VERSION_CHECK(8, 0, 0)
.cache = &cache
#endif
};
@ -146,7 +142,7 @@ static lv_font_fmt_txt_dsc_t font_dsc = {
*----------------*/
/*Initialize a public general font descriptor*/
#if LV_VERSION_CHECK(8, 0, 0)
#if LVGL_VERSION_MAJOR >= 8
const lv_font_t seg7_8 = {
#else
lv_font_t seg7_8 = {

View File

@ -9,13 +9,13 @@
#include "../lvgl.h" /*To see all the widgets*/
#include "lv_theme_haspmota.h"
#include "misc/lv_gc.h"
// #include "misc/lv_gc.h" TODO
/*********************
* DEFINES
*********************/
#define MODE_DARK 1
#define RADIUS_DEFAULT (disp_size == DISP_LARGE ? lv_disp_dpx(theme.disp, 12) : lv_disp_dpx(theme.disp, 8))
#define RADIUS_DEFAULT (disp_size == DISP_LARGE ? lv_display_dpx(theme.disp, 12) : lv_display_dpx(theme.disp, 8))
/*SCREEN*/
#define LIGHT_COLOR_SCR lv_palette_lighten(LV_PALETTE_GREY, 4)
@ -28,12 +28,12 @@
#define DARK_COLOR_GREY lv_color_hex(0x2f3237)
#define TRANSITION_TIME LV_THEME_DEFAULT_TRANSITION_TIME
#define BORDER_WIDTH lv_disp_dpx(theme.disp, 2)
#define OUTLINE_WIDTH lv_disp_dpx(theme.disp, 3)
#define BORDER_WIDTH lv_display_dpx(theme.disp, 2)
#define OUTLINE_WIDTH lv_display_dpx(theme.disp, 3)
#define PAD_DEF (disp_size == DISP_LARGE ? lv_disp_dpx(theme.disp, 24) : disp_size == DISP_MEDIUM ? lv_disp_dpx(theme.disp, 20) : lv_disp_dpx(theme.disp, 16))
#define PAD_SMALL (disp_size == DISP_LARGE ? lv_disp_dpx(theme.disp, 14) : disp_size == DISP_MEDIUM ? lv_disp_dpx(theme.disp, 12) : lv_disp_dpx(theme.disp, 10))
#define PAD_TINY (disp_size == DISP_LARGE ? lv_disp_dpx(theme.disp, 8) : disp_size == DISP_MEDIUM ? lv_disp_dpx(theme.disp, 6) : lv_disp_dpx(theme.disp, 2))
#define PAD_DEF (disp_size == DISP_LARGE ? lv_display_dpx(theme.disp, 24) : disp_size == DISP_MEDIUM ? lv_display_dpx(theme.disp, 20) : lv_display_dpx(theme.disp, 16))
#define PAD_SMALL (disp_size == DISP_LARGE ? lv_display_dpx(theme.disp, 14) : disp_size == DISP_MEDIUM ? lv_display_dpx(theme.disp, 12) : lv_display_dpx(theme.disp, 10))
#define PAD_TINY (disp_size == DISP_LARGE ? lv_display_dpx(theme.disp, 8) : disp_size == DISP_MEDIUM ? lv_display_dpx(theme.disp, 6) : lv_display_dpx(theme.disp, 2))
// OpenHASP specific
/*BUTTON*/
@ -261,7 +261,7 @@ static void style_init(void)
LV_STYLE_BG_OPA, LV_STYLE_BG_COLOR,
LV_STYLE_TRANSFORM_WIDTH, LV_STYLE_TRANSFORM_HEIGHT,
LV_STYLE_TRANSLATE_Y, LV_STYLE_TRANSLATE_X,
LV_STYLE_TRANSFORM_ZOOM, LV_STYLE_TRANSFORM_ANGLE,
/*LV_STYLE_TRANSFORM_ZOOM_X, LV_STYLE_TRANSFORM_ZOOM_Y,*/ LV_STYLE_TRANSFORM_ANGLE,
LV_STYLE_COLOR_FILTER_OPA, LV_STYLE_COLOR_FILTER_DSC,
0
};
@ -286,9 +286,9 @@ static void style_init(void)
style_init_reset(&styles->scrollbar);
lv_style_set_bg_color(&styles->scrollbar, (theme.flags & MODE_DARK) ? lv_palette_darken(LV_PALETTE_GREY, 2) : lv_palette_main(LV_PALETTE_GREY));
lv_style_set_radius(&styles->scrollbar, LV_RADIUS_CIRCLE);
lv_style_set_pad_right(&styles->scrollbar, lv_disp_dpx(theme.disp, 7));
lv_style_set_pad_top(&styles->scrollbar, lv_disp_dpx(theme.disp, 7));
lv_style_set_size(&styles->scrollbar, lv_disp_dpx(theme.disp, 5));
lv_style_set_pad_right(&styles->scrollbar, lv_display_dpx(theme.disp, 7));
lv_style_set_pad_top(&styles->scrollbar, lv_display_dpx(theme.disp, 7));
lv_style_set_size(&styles->scrollbar, lv_display_dpx(theme.disp, 5), lv_display_dpx(theme.disp, 5));
lv_style_set_bg_opa(&styles->scrollbar, LV_OPA_40);
lv_style_set_transition(&styles->scrollbar, &trans_normal);
@ -316,7 +316,7 @@ static void style_init(void)
lv_style_set_pad_row(&styles->card, PAD_SMALL);
lv_style_set_pad_column(&styles->card, PAD_SMALL);
lv_style_set_line_color(&styles->card, lv_palette_main(LV_PALETTE_GREY));
lv_style_set_line_width(&styles->card, lv_disp_dpx(theme.disp, 1));
lv_style_set_line_width(&styles->card, lv_display_dpx(theme.disp, 1));
style_init_reset(&styles->outline_primary);
lv_style_set_outline_color(&styles->outline_primary, theme.color_primary);
@ -330,19 +330,19 @@ static void style_init(void)
lv_style_set_outline_opa(&styles->outline_secondary, LV_OPA_50);
style_init_reset(&styles->btn);
lv_style_set_radius(&styles->btn, (disp_size == DISP_LARGE ? lv_disp_dpx(theme.disp, 16) : disp_size == DISP_MEDIUM ? lv_disp_dpx(theme.disp, 12) : lv_disp_dpx(theme.disp, 8)));
lv_style_set_radius(&styles->btn, (disp_size == DISP_LARGE ? lv_display_dpx(theme.disp, 16) : disp_size == DISP_MEDIUM ? lv_display_dpx(theme.disp, 12) : lv_display_dpx(theme.disp, 8)));
lv_style_set_bg_opa(&styles->btn, LV_OPA_COVER);
lv_style_set_bg_color(&styles->btn, color_grey);
// if(!(theme.flags & MODE_DARK)) { // OpenHASP
// lv_style_set_shadow_color(&styles->btn, lv_palette_lighten(LV_PALETTE_GREY, 3));
// lv_style_set_shadow_width(&styles->btn, 1);
// lv_style_set_shadow_ofs_y(&styles->btn, lv_disp_dpx(theme.disp, 4));
// lv_style_set_shadow_ofs_y(&styles->btn, lv_display_dpx(theme.disp, 4));
// }
lv_style_set_text_color(&styles->btn, color_text);
lv_style_set_pad_hor(&styles->btn, PAD_DEF);
lv_style_set_pad_ver(&styles->btn, PAD_SMALL);
lv_style_set_pad_column(&styles->btn, lv_disp_dpx(theme.disp, 5));
lv_style_set_pad_row(&styles->btn, lv_disp_dpx(theme.disp, 5));
lv_style_set_pad_column(&styles->btn, lv_display_dpx(theme.disp, 5));
lv_style_set_pad_row(&styles->btn, lv_display_dpx(theme.disp, 5));
lv_style_set_text_font(&styles->btn, theme.font_normal);
static lv_color_filter_dsc_t dark_filter;
@ -372,11 +372,11 @@ static void style_init(void)
lv_style_set_pad_gap(&styles->pad_small, PAD_SMALL);
style_init_reset(&styles->pad_gap);
lv_style_set_pad_row(&styles->pad_gap, lv_disp_dpx(theme.disp, 10));
lv_style_set_pad_column(&styles->pad_gap, lv_disp_dpx(theme.disp, 10));
lv_style_set_pad_row(&styles->pad_gap, lv_display_dpx(theme.disp, 10));
lv_style_set_pad_column(&styles->pad_gap, lv_display_dpx(theme.disp, 10));
style_init_reset(&styles->line_space_large);
lv_style_set_text_line_space(&styles->line_space_large, lv_disp_dpx(theme.disp, 20));
lv_style_set_text_line_space(&styles->line_space_large, lv_display_dpx(theme.disp, 20));
style_init_reset(&styles->text_align_center);
lv_style_set_text_align(&styles->text_align_center, LV_TEXT_ALIGN_CENTER);
@ -429,14 +429,14 @@ static void style_init(void)
#if LV_THEME_DEFAULT_GROW
style_init_reset(&styles->grow);
lv_style_set_transform_width(&styles->grow, lv_disp_dpx(theme.disp, 3));
lv_style_set_transform_height(&styles->grow, lv_disp_dpx(theme.disp, 3));
lv_style_set_transform_width(&styles->grow, lv_display_dpx(theme.disp, 3));
lv_style_set_transform_height(&styles->grow, lv_display_dpx(theme.disp, 3));
#endif
style_init_reset(&styles->knob);
lv_style_set_bg_color(&styles->knob, theme.color_primary);
lv_style_set_bg_opa(&styles->knob, LV_OPA_COVER);
lv_style_set_pad_all(&styles->knob, lv_disp_dpx(theme.disp, 6));
lv_style_set_pad_all(&styles->knob, lv_display_dpx(theme.disp, 6));
lv_style_set_radius(&styles->knob, LV_RADIUS_CIRCLE);
style_init_reset(&styles->anim);
@ -445,7 +445,7 @@ static void style_init(void)
#if LV_USE_ARC
style_init_reset(&styles->arc_indic);
lv_style_set_arc_color(&styles->arc_indic, color_grey);
lv_style_set_arc_width(&styles->arc_indic, lv_disp_dpx(theme.disp, 18)); // OpenHASP
lv_style_set_arc_width(&styles->arc_indic, lv_display_dpx(theme.disp, 18)); // OpenHASP
lv_style_set_arc_rounded(&styles->arc_indic, true);
style_init_reset(&styles->arc_indic_primary);
@ -455,7 +455,7 @@ static void style_init(void)
style_init_reset(&styles->arc_knob);
lv_style_set_bg_color(&styles->arc_knob, theme.color_primary);
lv_style_set_bg_opa(&styles->arc_knob, LV_OPA_COVER);
lv_style_set_pad_all(&styles->arc_knob, lv_disp_dpx(theme.disp, 4));
lv_style_set_pad_all(&styles->arc_knob, lv_display_dpx(theme.disp, 4));
lv_style_set_radius(&styles->arc_knob, LV_RADIUS_CIRCLE);
#endif
@ -465,7 +465,7 @@ static void style_init(void)
#endif
#if LV_USE_CHECKBOX
style_init_reset(&styles->cb_marker);
lv_style_set_pad_all(&styles->cb_marker, lv_disp_dpx(theme.disp, 3));
lv_style_set_pad_all(&styles->cb_marker, lv_display_dpx(theme.disp, 3));
lv_style_set_border_width(&styles->cb_marker, BORDER_WIDTH);
lv_style_set_border_color(&styles->cb_marker, theme.color_primary);
lv_style_set_bg_color(&styles->cb_marker, color_card);
@ -473,14 +473,14 @@ static void style_init(void)
lv_style_set_radius(&styles->cb_marker, RADIUS_DEFAULT / 2);
style_init_reset(&styles->cb_marker_checked);
lv_style_set_bg_img_src(&styles->cb_marker_checked, LV_SYMBOL_OK);
lv_style_set_bg_image_src(&styles->cb_marker_checked, LV_SYMBOL_OK);
lv_style_set_text_color(&styles->cb_marker_checked, lv_color_white());
lv_style_set_text_font(&styles->cb_marker_checked, theme.font_small);
#endif
#if LV_USE_SWITCH
style_init_reset(&styles->switch_knob);
lv_style_set_pad_all(&styles->switch_knob, - lv_disp_dpx(theme.disp, 4));
lv_style_set_pad_all(&styles->switch_knob, - lv_display_dpx(theme.disp, 4));
lv_style_set_bg_color(&styles->switch_knob, lv_color_white());
#endif
@ -493,45 +493,45 @@ static void style_init(void)
#if LV_USE_CHART
style_init_reset(&styles->chart_bg);
lv_style_set_border_post(&styles->chart_bg, false);
lv_style_set_pad_column(&styles->chart_bg, lv_disp_dpx(theme.disp, 10));
lv_style_set_pad_column(&styles->chart_bg, lv_display_dpx(theme.disp, 10));
lv_style_set_line_color(&styles->chart_bg, color_grey);
style_init_reset(&styles->chart_series);
lv_style_set_line_width(&styles->chart_series, lv_disp_dpx(theme.disp, 3));
lv_style_set_radius(&styles->chart_series, lv_disp_dpx(theme.disp, 3));
lv_style_set_size(&styles->chart_series, lv_disp_dpx(theme.disp, 8));
lv_style_set_pad_column(&styles->chart_series, lv_disp_dpx(theme.disp, 2));
lv_style_set_line_width(&styles->chart_series, lv_display_dpx(theme.disp, 3));
lv_style_set_radius(&styles->chart_series, lv_display_dpx(theme.disp, 3));
lv_style_set_size(&styles->chart_series, lv_display_dpx(theme.disp, 8), lv_display_dpx(theme.disp, 8));
lv_style_set_pad_column(&styles->chart_series, lv_display_dpx(theme.disp, 2));
style_init_reset(&styles->chart_indic);
lv_style_set_radius(&styles->chart_indic,LV_RADIUS_CIRCLE);
lv_style_set_size(&styles->chart_indic, lv_disp_dpx(theme.disp, 8));
lv_style_set_size(&styles->chart_indic, lv_display_dpx(theme.disp, 8), lv_display_dpx(theme.disp, 8));
lv_style_set_bg_color(&styles->chart_indic, theme.color_primary);
lv_style_set_bg_opa(&styles->chart_indic, LV_OPA_COVER);
style_init_reset(&styles->chart_ticks);
lv_style_set_line_width(&styles->chart_ticks, lv_disp_dpx(theme.disp, 1));
lv_style_set_line_width(&styles->chart_ticks, lv_display_dpx(theme.disp, 1));
lv_style_set_line_color(&styles->chart_ticks, color_text);
lv_style_set_pad_all(&styles->chart_ticks, lv_disp_dpx(theme.disp, 2));
lv_style_set_pad_all(&styles->chart_ticks, lv_display_dpx(theme.disp, 2));
lv_style_set_text_color(&styles->chart_ticks, lv_palette_main(LV_PALETTE_GREY));
#endif
#if LV_USE_METER
style_init_reset(&styles->meter_marker);
lv_style_set_line_width(&styles->meter_marker, lv_disp_dpx(theme.disp, 5));
lv_style_set_line_width(&styles->meter_marker, lv_display_dpx(theme.disp, 5));
lv_style_set_line_color(&styles->meter_marker, color_text);
lv_style_set_size(&styles->meter_marker, lv_disp_dpx(theme.disp, 20));
lv_style_set_pad_left(&styles->meter_marker, lv_disp_dpx(theme.disp, 15));
lv_style_set_size(&styles->meter_marker, lv_display_dpx(theme.disp, 20));
lv_style_set_pad_left(&styles->meter_marker, lv_display_dpx(theme.disp, 15));
style_init_reset(&styles->meter_indic);
lv_style_set_radius(&styles->meter_indic, LV_RADIUS_CIRCLE);
lv_style_set_bg_color(&styles->meter_indic, color_text);
lv_style_set_bg_opa(&styles->meter_indic, LV_OPA_COVER);
lv_style_set_size(&styles->meter_indic, lv_disp_dpx(theme.disp, 15));
lv_style_set_size(&styles->meter_indic, lv_display_dpx(theme.disp, 15));
#endif
#if LV_USE_TABLE
style_init_reset(&styles->table_cell);
lv_style_set_border_width(&styles->table_cell, lv_disp_dpx(theme.disp, 1));
lv_style_set_border_width(&styles->table_cell, lv_display_dpx(theme.disp, 1));
lv_style_set_border_color(&styles->table_cell, color_grey);
lv_style_set_border_side(&styles->table_cell, LV_BORDER_SIDE_TOP | LV_BORDER_SIDE_BOTTOM );
#endif
@ -539,8 +539,8 @@ static void style_init(void)
#if LV_USE_TEXTAREA
style_init_reset(&styles->ta_cursor);
lv_style_set_border_color(&styles->ta_cursor, color_text);
lv_style_set_border_width(&styles->ta_cursor, lv_disp_dpx(theme.disp, 2));
lv_style_set_pad_left(&styles->ta_cursor, lv_disp_dpx(theme.disp, 1));
lv_style_set_border_width(&styles->ta_cursor, lv_display_dpx(theme.disp, 2));
lv_style_set_pad_left(&styles->ta_cursor, lv_display_dpx(theme.disp, 1));
lv_style_set_border_side(&styles->ta_cursor, LV_BORDER_SIDE_LEFT);
lv_style_set_anim_time(&styles->ta_cursor, 400);
@ -555,7 +555,7 @@ static void style_init(void)
lv_style_set_radius(&styles->calendar_bg, 0);
style_init_reset(&styles->calendar_day);
lv_style_set_border_width(&styles->calendar_day, lv_disp_dpx(theme.disp, 1));
lv_style_set_border_width(&styles->calendar_day, lv_display_dpx(theme.disp, 1));
lv_style_set_border_color(&styles->calendar_day, color_grey);
lv_style_set_bg_color(&styles->calendar_day, color_card);
lv_style_set_bg_opa(&styles->calendar_day, LV_OPA_20);
@ -563,13 +563,13 @@ static void style_init(void)
#if LV_USE_COLORWHEEL
style_init_reset(&styles->colorwheel_main);
lv_style_set_arc_width(&styles->colorwheel_main, lv_disp_dpx(theme.disp, 10));
lv_style_set_arc_width(&styles->colorwheel_main, lv_display_dpx(theme.disp, 10));
#endif
#if LV_USE_MSGBOX
/*To add space for for the button shadow*/
style_init_reset(&styles->msgbox_btn_bg);
lv_style_set_pad_all(&styles->msgbox_btn_bg, lv_disp_dpx(theme.disp, 4));
lv_style_set_pad_all(&styles->msgbox_btn_bg, lv_display_dpx(theme.disp, 4));
style_init_reset(&styles->msgbox_bg);
lv_style_set_max_width(&styles->msgbox_bg, lv_pct(100));
@ -598,7 +598,7 @@ static void style_init(void)
lv_style_set_clip_corner(&styles->list_bg, true);
style_init_reset(&styles->list_btn);
lv_style_set_border_width(&styles->list_btn, lv_disp_dpx(theme.disp, 1));
lv_style_set_border_width(&styles->list_btn, lv_display_dpx(theme.disp, 1));
lv_style_set_border_color(&styles->list_btn, color_grey);
lv_style_set_border_side(&styles->list_btn, LV_BORDER_SIDE_BOTTOM);
lv_style_set_pad_all(&styles->list_btn, PAD_SMALL);
@ -615,9 +615,9 @@ static void style_init(void)
lv_style_set_bg_color(&styles->led, lv_color_white());
lv_style_set_bg_grad_color(&styles->led, lv_palette_main(LV_PALETTE_GREY));
lv_style_set_radius(&styles->led, LV_RADIUS_CIRCLE);
lv_style_set_shadow_width(&styles->led, lv_disp_dpx(theme.disp, 15));
lv_style_set_shadow_width(&styles->led, lv_display_dpx(theme.disp, 15));
lv_style_set_shadow_color(&styles->led, lv_color_white());
lv_style_set_shadow_spread(&styles->led, lv_disp_dpx(theme.disp, 5));
lv_style_set_shadow_spread(&styles->led, lv_display_dpx(theme.disp, 5));
#endif
}
@ -625,15 +625,15 @@ static void style_init(void)
* GLOBAL FUNCTIONS
**********************/
lv_theme_t * lv_theme_haspmota_init(lv_disp_t * disp, lv_color_t color_primary, lv_color_t color_secondary, bool dark, const lv_font_t * font)
lv_theme_t * lv_theme_haspmota_init(lv_display_t * disp, lv_color_t color_primary, lv_color_t color_secondary, bool dark, const lv_font_t * font)
{
/*This trick is required only to avoid the garbage collection of
*styles' data if LVGL is used in a binding (e.g. Micropython)
*In a general case styles could be in simple `static lv_style_t my_style...` variables*/
if(!inited) {
LV_GC_ROOT(_lv_theme_default_styles) = lv_mem_alloc(sizeof(my_theme_styles_t));
styles = (my_theme_styles_t *)LV_GC_ROOT(_lv_theme_default_styles);
// LV_GC_ROOT(_lv_theme_default_styles) = lv_mem_alloc(sizeof(my_theme_styles_t));
styles = (my_theme_styles_t *)malloc(sizeof(my_theme_styles_t)); // TODO LVGL
}
if(LV_HOR_RES <= 320) disp_size = DISP_SMALL;
@ -693,13 +693,13 @@ static void theme_apply(lv_theme_t * th, lv_obj_t * obj)
#if LV_USE_WIN
/*Header*/
if(lv_obj_get_child_id(obj) == 0 && lv_obj_check_type(lv_obj_get_parent(obj), &lv_win_class)) {
if(lv_obj_get_index(obj) == 0 && lv_obj_check_type(lv_obj_get_parent(obj), &lv_win_class)) {
lv_obj_add_style(obj, &styles->bg_color_grey, 0);
lv_obj_add_style(obj, &styles->pad_tiny, 0);
return;
}
/*Content*/
else if(lv_obj_get_child_id(obj) == 1 && lv_obj_check_type(lv_obj_get_parent(obj), &lv_win_class)) {
else if(lv_obj_get_index(obj) == 1 && lv_obj_check_type(lv_obj_get_parent(obj), &lv_win_class)) {
lv_obj_add_style(obj, &styles->scr, 0);
lv_obj_add_style(obj, &styles->pad_normal, 0);
lv_obj_add_style(obj, &styles->scrollbar, LV_PART_SCROLLBAR);
@ -711,8 +711,8 @@ static void theme_apply(lv_theme_t * th, lv_obj_t * obj)
lv_obj_add_style(obj, &styles->scrollbar, LV_PART_SCROLLBAR);
lv_obj_add_style(obj, &styles->scrollbar_scrolled, LV_PART_SCROLLBAR | LV_STATE_SCROLLED);
}
#if LV_USE_BTN
else if(lv_obj_check_type(obj, &lv_btn_class)) {
#if LV_USE_BUTTON
else if(lv_obj_check_type(obj, &lv_button_class)) {
lv_obj_add_style(obj, &styles->btn, 0);
lv_obj_add_style(obj, &styles->bg_color_primary, 0);
lv_obj_add_style(obj, &styles->transition_delayed, 0);
@ -733,8 +733,8 @@ static void theme_apply(lv_theme_t * th, lv_obj_t * obj)
}
#endif
#if LV_USE_BTNMATRIX
else if(lv_obj_check_type(obj, &lv_btnmatrix_class)) {
#if LV_USE_BUTTONMATRIX
else if(lv_obj_check_type(obj, &lv_buttonmatrix_class)) {
#if LV_USE_MSGBOX
if(lv_obj_check_type(lv_obj_get_parent(obj), &lv_msgbox_class)) {
lv_obj_add_style(obj, &styles->msgbox_btn_bg, 0);
@ -862,7 +862,7 @@ static void theme_apply(lv_theme_t * th, lv_obj_t * obj)
lv_obj_add_style(obj, &styles->scrollbar_scrolled, LV_PART_SCROLLBAR | LV_STATE_SCROLLED);
lv_obj_add_style(obj, &styles->chart_series, LV_PART_ITEMS);
lv_obj_add_style(obj, &styles->chart_indic, LV_PART_INDICATOR);
lv_obj_add_style(obj, &styles->chart_ticks, LV_PART_TICKS);
lv_obj_add_style(obj, &styles->chart_ticks, LV_PART_ITEMS);
lv_obj_add_style(obj, &styles->chart_series, LV_PART_CURSOR);
}
#endif
@ -996,7 +996,7 @@ static void theme_apply(lv_theme_t * th, lv_obj_t * obj)
lv_obj_add_style(obj, &styles->bg_color_grey, 0);
lv_obj_add_style(obj, &styles->list_item_grow, 0);
}
else if(lv_obj_check_type(obj, &lv_list_btn_class)) {
else if(lv_obj_check_type(obj, &lv_list_button_class)) {
lv_obj_add_style(obj, &styles->bg_color_white, 0);
lv_obj_add_style(obj, &styles->list_btn, 0);
lv_obj_add_style(obj, &styles->bg_color_primary, LV_STATE_FOCUS_KEY);

View File

@ -40,7 +40,7 @@ typedef enum {
* @param font pointer to a font to use.
* @return a pointer to reference this theme later
*/
lv_theme_t * lv_theme_haspmota_init(lv_disp_t * disp, lv_color_t color_primary, lv_color_t color_secondary, bool dark, const lv_font_t * font);
lv_theme_t * lv_theme_haspmota_init(lv_display_t * disp, lv_color_t color_primary, lv_color_t color_secondary, bool dark, const lv_font_t * font);
bool lv_theme_haspmota_is_inited(void);

View File

@ -0,0 +1,127 @@
// Command:
// python3 LVGLImage.py --ofmt C --cf RGB565A8 TASMOTA_Symbol_64.png
#include "lvgl.h"
#ifndef LV_ATTRIBUTE_MEM_ALIGN
#define LV_ATTRIBUTE_MEM_ALIGN
#endif
#ifndef LV_ATTRIBUTE_IMG_DUST
#define LV_ATTRIBUTE_IMG_DUST
#endif
static const
LV_ATTRIBUTE_MEM_ALIGN LV_ATTRIBUTE_LARGE_CONST LV_ATTRIBUTE_IMG_DUST
uint8_t TASMOTA_Symbol_64_map[] = {
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x01,0x00,0x8c,0x8e,0x00,0x01,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x02,0x01,0x00,0x7f,0xff,0xff,0x81,0x00,0x01,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x02,0x02,0x00,0x80,0xff,0xfc,0xfc,0xff,0x83,0x00,0x02,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x02,0x00,0x7f,0xff,0xfc,0xfd,0xfd,0xfc,0xff,0x82,0x00,0x02,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x02,0x01,0x00,0x7f,0xff,0xfd,0xfd,0xff,0xff,0xfd,0xfd,0xff,0x82,0x00,0x01,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x02,0x02,0x00,0x80,0xff,0xfd,0xfd,0xff,0xfb,0xfb,0xff,0xfe,0xfd,0xff,0x83,0x00,0x02,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x02,0x02,0x00,0x7f,0xff,0xfc,0xfd,0xff,0xfb,0xff,0xff,0xfb,0xff,0xfd,0xfc,0xff,0x82,0x00,0x02,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x02,0x01,0x00,0x7f,0xff,0xfd,0xfd,0xff,0xfa,0xff,0xb9,0xb8,0xff,0xfa,0xff,0xfd,0xfd,0xff,0x81,0x00,0x01,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x02,0x02,0x00,0x80,0xff,0xfd,0xfe,0xff,0xf9,0xff,0xc4,0x02,0x01,0xc1,0xff,0xf9,0xff,0xfe,0xfd,0xff,0x83,0x00,0x02,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x02,0x02,0x00,0x7f,0xff,0xfc,0xfd,0xff,0xf9,0xff,0xc2,0x06,0x00,0x00,0x04,0xc0,0xff,0xf9,0xff,0xfd,0xfc,0xff,0x82,0x00,0x02,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x02,0x01,0x00,0x7f,0xff,0xfd,0xfd,0xff,0xf9,0xff,0xc3,0x05,0x00,0x04,0x04,0x00,0x04,0xc0,0xff,0xf9,0xff,0xfd,0xfd,0xff,0x82,0x00,0x01,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x02,0x02,0x00,0x80,0xff,0xfd,0xfe,0xff,0xf9,0xff,0xc2,0x05,0x00,0x04,0x00,0x00,0x04,0x00,0x04,0xc0,0xff,0xf9,0xff,0xfe,0xfd,0xff,0x83,0x00,0x02,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x02,0x02,0x00,0x7f,0xff,0xfc,0xfd,0xff,0xf9,0xff,0xc2,0x06,0x00,0x05,0x00,0x00,0x00,0x00,0x04,0x00,0x05,0xc0,0xff,0xf9,0xff,0xfd,0xfc,0xff,0x82,0x00,0x02,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x02,0x01,0x00,0x7f,0xff,0xfd,0xfd,0xff,0xf9,0xff,0xc3,0x05,0x00,0x05,0x00,0x00,0x00,0x00,0x00,0x00,0x05,0x00,0x04,0xc0,0xff,0xf9,0xff,0xfd,0xfd,0xff,0x82,0x00,0x01,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x02,0x02,0x00,0x80,0xff,0xfd,0xfe,0xff,0xf9,0xff,0xc2,0x05,0x00,0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x04,0x00,0x04,0xc0,0xff,0xf9,0xff,0xfe,0xfd,0xff,0x83,0x00,0x02,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x02,0x02,0x00,0x7f,0xff,0xfc,0xfd,0xff,0xf9,0xff,0xc2,0x06,0x00,0x05,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x04,0x00,0x05,0xc0,0xff,0xf9,0xff,0xfd,0xfc,0xff,0x82,0x00,0x02,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x02,0x01,0x00,0x7f,0xff,0xfd,0xfd,0xff,0xf9,0xff,0xc3,0x05,0x00,0x05,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x05,0x00,0x04,0xc0,0xff,0xf9,0xff,0xfd,0xfd,0xff,0x82,0x00,0x01,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x02,0x02,0x00,0x80,0xff,0xfd,0xfd,0xff,0xf9,0xff,0xc2,0x05,0x00,0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x04,0x00,0x04,0xc0,0xff,0xf9,0xff,0xfe,0xfd,0xff,0x83,0x00,0x02,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x02,0x02,0x00,0x7f,0xff,0xfc,0xfd,0xff,0xf9,0xff,0xc2,0x06,0x00,0x05,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x04,0x00,0x05,0xc0,0xff,0xf9,0xff,0xfd,0xfc,0xff,0x82,0x00,0x02,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x02,0x01,0x00,0x7f,0xff,0xfd,0xfd,0xff,0xf9,0xff,0xc3,0x05,0x00,0x05,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x05,0x00,0x04,0xc0,0xff,0xf9,0xff,0xfd,0xfd,0xff,0x82,0x00,0x01,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x02,0x02,0x00,0x80,0xff,0xfd,0xfd,0xff,0xf9,0xff,0xc2,0x05,0x00,0x04,0x00,0x00,0x00,0x00,0x01,0x03,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x03,0x01,0x00,0x00,0x00,0x00,0x04,0x00,0x04,0xc0,0xff,0xf9,0xff,0xfe,0xfd,0xff,0x83,0x00,0x02,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x02,0x02,0x00,0x7f,0xff,0xfc,0xfd,0xff,0xf9,0xff,0xc2,0x06,0x00,0x04,0x00,0x00,0x00,0x02,0x06,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x03,0x06,0x02,0x00,0x00,0x00,0x04,0x00,0x05,0xc0,0xff,0xf9,0xff,0xfd,0xfc,0xff,0x82,0x00,0x02,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x02,0x01,0x00,0x7f,0xff,0xfd,0xfd,0xff,0xf9,0xff,0xc3,0x05,0x00,0x05,0x00,0x00,0x02,0x04,0x00,0x00,0x00,0x09,0x29,0x49,0x5e,0x69,0x69,0x5e,0x49,0x29,0x09,0x00,0x00,0x00,0x05,0x02,0x00,0x00,0x05,0x00,0x04,0xc0,0xff,0xf9,0xff,0xfd,0xfd,0xff,0x82,0x00,0x01,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x02,0x02,0x00,0x80,0xff,0xfd,0xfd,0xff,0xf9,0xff,0xc2,0x05,0x00,0x05,0x00,0x02,0x04,0x00,0x00,0x0d,0x55,0xa2,0xda,0xf9,0xff,0xff,0xff,0xff,0xff,0xff,0xf9,0xd9,0xa5,0x59,0x0c,0x00,0x00,0x05,0x02,0x00,0x05,0x00,0x04,0xc0,0xff,0xf9,0xff,0xfe,0xfd,0xff,0x83,0x00,0x02,0x02,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x02,0x02,0x00,0x7f,0xff,0xfc,0xfd,0xff,0xf9,0xff,0xc2,0x06,0x00,0x05,0x00,0x03,0x00,0x00,0x13,0x81,0xe3,0xff,0xff,0xff,0xff,0xfe,0xfc,0xfb,0xfb,0xfc,0xfe,0xff,0xff,0xff,0xff,0xe2,0x83,0x14,0x00,0x00,0x04,0x00,0x04,0x00,0x05,0xc0,0xff,0xf9,0xff,0xfd,0xfc,0xff,0x82,0x00,0x02,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x01,0x00,0x7f,0xff,0xfd,0xfd,0xff,0xf9,0xff,0xc3,0x05,0x00,0x05,0x00,0x04,0x00,0x00,0x66,0xe9,0xff,0xff,0xfc,0xfb,0xfb,0xfc,0xfd,0xfe,0xff,0xff,0xfe,0xfd,0xfc,0xfc,0xfb,0xfc,0xff,0xff,0xea,0x69,0x00,0x00,0x05,0x00,0x05,0x00,0x04,0xc0,0xff,0xf9,0xff,0xfd,0xfd,0xff,0x82,0x00,0x01,0x02,0x00,0x00,0x00,
0x00,0x00,0x02,0x02,0x00,0x80,0xff,0xfd,0xfd,0xff,0xf9,0xff,0xc2,0x05,0x00,0x05,0x00,0x06,0x00,0x12,0xb5,0xff,0xff,0xf9,0xfd,0xfe,0xfb,0xfb,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xfb,0xfb,0xfe,0xfd,0xf9,0xff,0xff,0xb8,0x14,0x00,0x06,0x00,0x04,0x00,0x04,0xc0,0xff,0xf9,0xff,0xfe,0xfd,0xff,0x83,0x00,0x02,0x02,0x00,0x00,0x00,0x02,0x02,0x00,0x7f,0xff,0xfc,0xfd,0xff,0xf9,0xff,0xc2,0x06,0x00,0x04,0x00,0x05,0x00,0x29,0xe1,0xff,0xfa,0xfb,0xff,0xfb,0xfd,0xff,0xff,0xff,0xf7,0xff,0xff,0xff,0xff,0xf7,0xff,0xff,0xff,0xfe,0xfa,0xff,0xfb,0xfa,0xff,0xe2,0x2a,0x00,0x05,0x00,0x04,0x00,0x05,0xc0,0xff,0xf9,0xff,0xfd,0xfc,0xff,0x82,0x00,0x02,0x02,0x00,
0x01,0x01,0x00,0x7f,0xff,0xfd,0xfd,0xff,0xf9,0xff,0xc3,0x05,0x00,0x05,0x00,0x05,0x00,0x2e,0xf0,0xff,0xf9,0xff,0xfe,0xfb,0xff,0xff,0xcb,0x7c,0x25,0xa0,0xff,0xfc,0xfc,0xff,0xa1,0x25,0x7c,0xcb,0xff,0xff,0xfb,0xfe,0xff,0xf8,0xff,0xf0,0x2e,0x00,0x05,0x00,0x05,0x00,0x04,0xc0,0xff,0xf9,0xff,0xfd,0xfd,0xff,0x82,0x00,0x01,0x02,0x01,0x00,0x80,0xff,0xfd,0xfe,0xff,0xf9,0xff,0xc2,0x05,0x00,0x05,0x00,0x04,0x00,0x1d,0xea,0xff,0xf9,0xff,0xfc,0xff,0xff,0xca,0x4b,0x00,0x00,0x00,0x92,0xff,0xfb,0xfb,0xff,0x94,0x00,0x00,0x00,0x49,0xca,0xff,0xff,0xfc,0xff,0xf9,0xff,0xea,0x1d,0x00,0x04,0x00,0x05,0x00,0x04,0xc0,0xff,0xf9,0xff,0xfe,0xfd,0xff,0x83,0x00,0x01,
0x00,0x7f,0xff,0xfc,0xfd,0xff,0xf9,0xff,0xc2,0x06,0x00,0x04,0x00,0x01,0x00,0x01,0xc8,0xff,0xf8,0xff,0xfb,0xff,0xff,0x7c,0x00,0x00,0x00,0x09,0x00,0x97,0xff,0xfb,0xfb,0xff,0x98,0x00,0x09,0x00,0x00,0x00,0x7b,0xff,0xff,0xfb,0xff,0xf8,0xff,0xc8,0x01,0x00,0x01,0x00,0x04,0x00,0x05,0xc0,0xff,0xf9,0xff,0xfd,0xfc,0xff,0x81,0x00,0x8b,0xff,0xfc,0xfd,0xff,0xf9,0xff,0xc3,0x06,0x00,0x05,0x00,0x00,0x04,0x00,0x85,0xff,0xf8,0xff,0xfc,0xff,0xfb,0x4d,0x00,0x00,0x05,0x02,0x04,0x00,0x95,0xff,0xfb,0xfb,0xff,0x97,0x00,0x04,0x02,0x05,0x00,0x00,0x4c,0xfa,0xff,0xfc,0xff,0xf8,0xff,0x84,0x00,0x04,0x00,0x00,0x05,0x00,0x04,0xc0,0xff,0xf9,0xff,0xfd,0xfc,0xff,0x8e,
0x8a,0xff,0xfc,0xfd,0xf9,0xff,0xc2,0x05,0x00,0x05,0x00,0x00,0x04,0x00,0x2e,0xfe,0xff,0xfe,0xfd,0xff,0xff,0x46,0x00,0x06,0x01,0x00,0x00,0x04,0x00,0x96,0xff,0xfb,0xfb,0xff,0x97,0x00,0x04,0x00,0x00,0x01,0x06,0x00,0x45,0xff,0xff,0xfd,0xfe,0xff,0xfe,0x2e,0x00,0x04,0x00,0x00,0x05,0x00,0x04,0xc0,0xff,0xf9,0xfd,0xfc,0xff,0x8c,0x00,0x7f,0xff,0xf9,0xff,0xc2,0x06,0x00,0x04,0x00,0x00,0x01,0x02,0x00,0xac,0xff,0xfa,0xff,0xfc,0xff,0x66,0x00,0x07,0x00,0x00,0x00,0x00,0x04,0x00,0x96,0xff,0xfb,0xfb,0xff,0x97,0x00,0x04,0x00,0x00,0x00,0x00,0x07,0x00,0x66,0xff,0xfc,0xff,0xfa,0xff,0xab,0x00,0x02,0x01,0x00,0x00,0x04,0x00,0x05,0xc0,0xff,0xf9,0xff,0x81,0x00,
0x01,0x00,0x7d,0xff,0xc1,0x05,0x00,0x05,0x00,0x00,0x00,0x04,0x00,0x2e,0xfd,0xff,0xfd,0xfa,0xff,0xad,0x00,0x03,0x01,0x00,0x00,0x00,0x00,0x04,0x00,0x96,0xff,0xfb,0xfb,0xff,0x97,0x00,0x04,0x00,0x00,0x00,0x00,0x01,0x03,0x00,0xad,0xff,0xfa,0xfd,0xff,0xfc,0x2e,0x00,0x04,0x00,0x00,0x00,0x05,0x00,0x04,0xbf,0xff,0x7f,0x00,0x01,0x02,0x00,0x00,0x61,0x15,0x00,0x05,0x00,0x00,0x00,0x00,0x04,0x00,0x8a,0xff,0xfa,0xfe,0xff,0xf8,0x26,0x00,0x05,0x00,0x00,0x00,0x00,0x00,0x04,0x00,0x96,0xff,0xfb,0xfb,0xff,0x97,0x00,0x04,0x00,0x00,0x00,0x00,0x00,0x05,0x00,0x27,0xf8,0xff,0xfe,0xfa,0xff,0x89,0x00,0x04,0x00,0x00,0x00,0x00,0x05,0x00,0x14,0x61,0x00,0x00,0x02,
0x00,0x01,0x02,0x00,0x00,0x03,0x00,0x00,0x00,0x00,0x01,0x00,0x05,0xd4,0xff,0xfb,0xfb,0xff,0x9d,0x00,0x05,0x00,0x00,0x00,0x00,0x00,0x00,0x04,0x00,0x96,0xff,0xfb,0xfb,0xff,0x97,0x00,0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x05,0x00,0x9e,0xff,0xfb,0xfb,0xff,0xd3,0x05,0x00,0x01,0x00,0x00,0x00,0x00,0x03,0x00,0x00,0x02,0x01,0x00,0x00,0x00,0x01,0x04,0x02,0x00,0x00,0x00,0x00,0x00,0x03,0x00,0x30,0xff,0xff,0xfe,0xfe,0xff,0x3e,0x00,0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x04,0x00,0x96,0xff,0xfb,0xfb,0xff,0x97,0x00,0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x04,0x00,0x3f,0xff,0xfe,0xfd,0xff,0xff,0x2f,0x00,0x03,0x00,0x00,0x00,0x00,0x00,0x02,0x04,0x01,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x04,0x00,0x62,0xff,0xfc,0xfc,0xff,0xdb,0x08,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x04,0x00,0x96,0xff,0xfb,0xfb,0xff,0x97,0x00,0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x00,0x09,0xdc,0xff,0xfc,0xfb,0xff,0x62,0x00,0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x05,0x00,0x8c,0xff,0xfa,0xfa,0xff,0xaa,0x00,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x04,0x00,0x96,0xff,0xfb,0xfb,0xff,0x97,0x00,0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x03,0x00,0xaa,0xff,0xfa,0xfa,0xff,0x8c,0x00,0x05,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x03,0x00,0xa9,0xff,0xfa,0xfb,0xff,0x83,0x00,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x04,0x00,0x96,0xff,0xfb,0xfb,0xff,0x97,0x00,0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x03,0x00,0x83,0xff,0xfb,0xfa,0xff,0xa8,0x00,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x00,0xb8,0xff,0xfb,0xfb,0xff,0x6c,0x00,0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x04,0x00,0x96,0xff,0xfb,0xfb,0xff,0x97,0x00,0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x04,0x00,0x6d,0xff,0xfb,0xfb,0xff,0xb6,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x00,0xbc,0xff,0xfb,0xfb,0xff,0x66,0x00,0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x04,0x00,0x96,0xff,0xfb,0xfb,0xff,0x97,0x00,0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x04,0x00,0x67,0xff,0xfb,0xfb,0xff,0xbb,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x02,0x00,0xb4,0xff,0xfa,0xfb,0xff,0x71,0x00,0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x04,0x00,0x96,0xff,0xfb,0xfb,0xff,0x97,0x00,0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x04,0x00,0x72,0xff,0xfb,0xfa,0xff,0xb3,0x00,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x04,0x00,0xa1,0xff,0xfa,0xfa,0xff,0x8f,0x00,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x04,0x00,0x96,0xff,0xfb,0xfb,0xff,0x97,0x00,0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x03,0x00,0x90,0xff,0xfa,0xfa,0xff,0xa0,0x00,0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x05,0x00,0x81,0xff,0xfa,0xfa,0xff,0xba,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x04,0x00,0x96,0xff,0xfb,0xfb,0xff,0x97,0x00,0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x00,0xbb,0xff,0xfa,0xfa,0xff,0x80,0x00,0x05,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x03,0x00,0x51,0xff,0xfc,0xfd,0xff,0xec,0x16,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x04,0x00,0x96,0xff,0xfb,0xfb,0xff,0x97,0x00,0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x00,0x16,0xed,0xff,0xfd,0xfc,0xff,0x50,0x00,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x02,0x00,0x20,0xf4,0xff,0xfd,0xfc,0xff,0x5b,0x00,0x05,0x00,0x00,0x00,0x00,0x00,0x00,0x04,0x00,0x96,0xff,0xfb,0xfb,0xff,0x97,0x00,0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x05,0x00,0x5c,0xff,0xfc,0xfd,0xff,0xf3,0x1f,0x00,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x00,0x00,0xbe,0xff,0xfa,0xfc,0xff,0xc1,0x00,0x01,0x01,0x00,0x00,0x00,0x00,0x00,0x04,0x00,0x96,0xff,0xfb,0xfb,0xff,0x97,0x00,0x04,0x00,0x00,0x00,0x00,0x00,0x01,0x01,0x00,0xc2,0xff,0xfc,0xfa,0xff,0xbd,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x04,0x00,0x6a,0xff,0xfb,0xfe,0xfd,0xff,0x4e,0x00,0x06,0x00,0x00,0x00,0x00,0x00,0x04,0x00,0x96,0xff,0xfb,0xfb,0xff,0x97,0x00,0x04,0x00,0x00,0x00,0x00,0x00,0x06,0x00,0x4f,0xff,0xfd,0xfe,0xfb,0xff,0x69,0x00,0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x03,0x00,0x13,0xe8,0xff,0xfc,0xfb,0xff,0xdb,0x09,0x00,0x04,0x00,0x00,0x00,0x00,0x04,0x00,0x96,0xff,0xfb,0xfb,0xff,0x97,0x00,0x04,0x00,0x00,0x00,0x00,0x04,0x00,0x09,0xdb,0xff,0xfb,0xfc,0xff,0xe7,0x13,0x00,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x05,0x00,0x7f,0xff,0xfa,0xff,0xfa,0xff,0xa5,0x00,0x01,0x03,0x00,0x00,0x00,0x04,0x00,0x96,0xff,0xfb,0xfb,0xff,0x97,0x00,0x04,0x00,0x00,0x00,0x03,0x01,0x00,0xa6,0xff,0xfa,0xff,0xfa,0xff,0x7f,0x00,0x05,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x02,0x00,0x0c,0xe0,0xff,0xfc,0xff,0xfb,0xff,0x8c,0x00,0x00,0x05,0x00,0x00,0x04,0x00,0x96,0xff,0xfb,0xfb,0xff,0x97,0x00,0x04,0x00,0x00,0x05,0x00,0x00,0x8c,0xff,0xfb,0xff,0xfc,0xff,0xdf,0x0b,0x00,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x04,0x00,0x4c,0xff,0xfd,0xfd,0xfe,0xfc,0xff,0x9c,0x00,0x00,0x02,0x00,0x04,0x00,0x96,0xff,0xfb,0xfb,0xff,0x97,0x00,0x04,0x00,0x02,0x00,0x00,0x9a,0xff,0xfc,0xfe,0xfd,0xfd,0xff,0x4c,0x00,0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x04,0x00,0x8b,0xff,0xf8,0xff,0xfe,0xfc,0xff,0xcb,0x33,0x00,0x02,0x04,0x00,0x96,0xff,0xfb,0xfb,0xff,0x97,0x00,0x04,0x02,0x00,0x33,0xca,0xff,0xfc,0xfe,0xff,0xf8,0xff,0x8a,0x00,0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x02,0x00,0x00,0xae,0xff,0xf9,0xff,0xff,0xf9,0xff,0xe5,0x0b,0x00,0x06,0x00,0x96,0xff,0xfb,0xfb,0xff,0x97,0x00,0x06,0x00,0x0b,0xe5,0xff,0xf9,0xff,0xff,0xf8,0xff,0xae,0x00,0x00,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x03,0x00,0x00,0xb1,0xff,0xfb,0xfc,0xfd,0xff,0xe3,0x11,0x00,0x07,0x00,0x96,0xff,0xfb,0xfb,0xff,0x97,0x00,0x07,0x00,0x11,0xe3,0xff,0xfd,0xfc,0xfb,0xff,0xb3,0x01,0x00,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x03,0x00,0x00,0x99,0xff,0xff,0xf7,0xff,0xe3,0x0f,0x00,0x07,0x00,0x96,0xff,0xfb,0xfb,0xff,0x97,0x00,0x06,0x00,0x0f,0xe3,0xff,0xf7,0xff,0xff,0x9b,0x00,0x00,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x04,0x00,0x00,0x64,0xf2,0xff,0xff,0xde,0x0f,0x00,0x06,0x00,0x96,0xff,0xfb,0xfb,0xff,0x97,0x00,0x06,0x00,0x10,0xde,0xff,0xff,0xf2,0x65,0x00,0x00,0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x02,0x02,0x00,0x1f,0x9f,0xff,0xf4,0x10,0x00,0x07,0x00,0x96,0xff,0xfb,0xfb,0xff,0x97,0x00,0x07,0x00,0x10,0xf4,0xff,0x9e,0x1f,0x00,0x02,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x05,0x00,0x00,0x33,0x80,0x10,0x00,0x06,0x00,0x96,0xff,0xfb,0xfb,0xff,0x97,0x00,0x06,0x00,0x0f,0x84,0x36,0x00,0x00,0x05,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x04,0x03,0x00,0x00,0x00,0x00,0x04,0x00,0x96,0xff,0xfb,0xfb,0xff,0x97,0x00,0x04,0x00,0x00,0x00,0x00,0x03,0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x03,0x03,0x00,0x00,0x04,0x00,0x96,0xff,0xfb,0xfb,0xff,0x97,0x00,0x04,0x00,0x00,0x03,0x03,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x04,0x00,0x96,0xff,0xfb,0xfb,0xff,0x97,0x00,0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
};
const lv_img_dsc_t TASMOTA_Symbol_64 = {
.header.magic = LV_IMAGE_HEADER_MAGIC,
.header.cf = LV_COLOR_FORMAT_RGB565A8,
.header.flags = 0,
.header.w = 64,
.header.h = 64,
.header.stride = 128,
.data_size = 12288,
.data = TASMOTA_Symbol_64_map,
};

View File

@ -1,585 +0,0 @@
# CMakeLists.txt
#
# Copyright (C) 2013-2021 by
# David Turner, Robert Wilhelm, and Werner Lemberg.
#
# Written originally by John Cary <cary@txcorp.com>
#
# This file is part of the FreeType project, and may only be used, modified,
# and distributed under the terms of the FreeType project license,
# LICENSE.TXT. By continuing to use, modify, or distribute this file you
# indicate that you have read the license and understand and accept it
# fully.
#
#
# The following will 1. create a build directory and 2. change into it and
# call cmake to configure the build with default parameters as a static
# library. See https://cmake.org/cmake/help/latest/variable/CMAKE_BUILD_TYPE.html
# for information about Debug, Release, etc. builds.
#
# cmake -B build -D CMAKE_BUILD_TYPE=Release
#
# For a dynamic library, use
#
# cmake -B build -D BUILD_SHARED_LIBS=true -D CMAKE_BUILD_TYPE=Release
#
# For a framework on OS X, use
#
# cmake -E chdir build cmake -G Xcode -D BUILD_FRAMEWORK:BOOL=true ..
#
# For an iOS static library, use
#
# cmake -E chdir build cmake -G Xcode -D IOS_PLATFORM=OS ..
#
# or
#
# cmake -E chdir build cmake -G Xcode -D IOS_PLATFORM=SIMULATOR ..
#
# or
#
# cmake -E chdir build cmake -G Xcode -D IOS_PLATFORM=SIMULATOR64 ..
#
# Finally, build the project with:
#
# cmake --build build
#
# Install it with
#
# (sudo) cmake --build build --target install
#
# A binary distribution can be made with
#
# cmake --build build --config Release --target package
#
# Please refer to the cmake manual for further options, in particular, how
# to modify compilation and linking parameters.
#
# Some notes.
#
# . `cmake' creates configuration files in
#
# <build-directory>/include/freetype/config
#
# which should be further modified if necessary.
#
# . You can use `cmake' directly on a freshly cloned FreeType git
# repository.
#
# . `CMakeLists.txt' is provided as-is since it is normally not used by the
# developer team.
#
# . Set the `FT_WITH_ZLIB', `FT_WITH_BZIP2', `FT_WITH_PNG',
# `FT_WITH_HARFBUZZ', and `FT_WITH_BROTLI' CMake variables to `ON' to
# force using a dependency. Leave a variable undefined (which is the
# default) to use the dependency only if it is available. Example:
#
# cmake -B build -D FT_WITH_ZLIB=ON \
# -D FT_WITH_BZIP2=ON \
# -D FT_WITH_PNG=ON \
# -D FT_WITH_HARFBUZZ=ON \
# -D FT_WITH_BROTLI=ON [...]
#
# Set `CMAKE_DISABLE_FIND_PACKAGE_XXX=TRUE' to disable a dependency completely
# (where `XXX' is a CMake package name like `BZip2'). Example for disabling all
# dependencies:
#
# cmake -B build -D CMAKE_DISABLE_FIND_PACKAGE_ZLIB=TRUE \
# -D CMAKE_DISABLE_FIND_PACKAGE_BZip2=TRUE \
# -D CMAKE_DISABLE_FIND_PACKAGE_PNG=TRUE \
# -D CMAKE_DISABLE_FIND_PACKAGE_HarfBuzz=TRUE \
# -D CMAKE_DISABLE_FIND_PACKAGE_BrotliDec=TRUE [...]
#
# . Installation of FreeType can be controlled with the CMake variables
# `SKIP_INSTALL_HEADERS', `SKIP_INSTALL_LIBRARIES', and `SKIP_INSTALL_ALL'
# (this is compatible with the same CMake variables in zlib's CMake
# support).
# FreeType explicitly marks the API to be exported and relies on the compiler
# to hide all other symbols. CMake supports a C_VISBILITY_PRESET property
# starting with 2.8.12.
cmake_minimum_required(VERSION 2.8.12)
if (NOT CMAKE_VERSION VERSION_LESS 3.3)
# Allow symbol visibility settings also on static libraries. CMake < 3.3
# only sets the property on a shared library build.
cmake_policy(SET CMP0063 NEW)
endif ()
include(CheckIncludeFile)
# CMAKE_TOOLCHAIN_FILE must be set before `project' is called, which
# configures the base build environment and references the toolchain file
if (APPLE)
if (DEFINED IOS_PLATFORM)
if (NOT "${IOS_PLATFORM}" STREQUAL "OS"
AND NOT "${IOS_PLATFORM}" STREQUAL "SIMULATOR"
AND NOT "${IOS_PLATFORM}" STREQUAL "SIMULATOR64")
message(FATAL_ERROR
"IOS_PLATFORM must be set to either OS, SIMULATOR, or SIMULATOR64")
endif ()
if (NOT "${CMAKE_GENERATOR}" STREQUAL "Xcode")
message(AUTHOR_WARNING
"You should use Xcode generator with IOS_PLATFORM enabled to get Universal builds.")
endif ()
if (BUILD_SHARED_LIBS)
message(FATAL_ERROR
"BUILD_SHARED_LIBS can not be on with IOS_PLATFORM enabled")
endif ()
if (BUILD_FRAMEWORK)
message(FATAL_ERROR
"BUILD_FRAMEWORK can not be on with IOS_PLATFORM enabled")
endif ()
# iOS only uses static libraries
set(BUILD_SHARED_LIBS OFF)
set(CMAKE_TOOLCHAIN_FILE
${CMAKE_SOURCE_DIR}/builds/cmake/iOS.cmake)
endif ()
else ()
if (DEFINED IOS_PLATFORM)
message(FATAL_ERROR "IOS_PLATFORM is not supported on this platform")
endif ()
endif ()
project(freetype C)
set(VERSION_MAJOR "2")
set(VERSION_MINOR "10")
set(VERSION_PATCH "4")
# Generate LIBRARY_VERSION and LIBRARY_SOVERSION.
set(LIBTOOL_REGEX "version_info='([0-9]+):([0-9]+):([0-9]+)'")
file(STRINGS "${PROJECT_SOURCE_DIR}/builds/unix/configure.raw"
VERSION_INFO
REGEX ${LIBTOOL_REGEX})
string(REGEX REPLACE
${LIBTOOL_REGEX} "\\1"
LIBTOOL_CURRENT "${VERSION_INFO}")
string(REGEX REPLACE
${LIBTOOL_REGEX} "\\2"
LIBTOOL_REVISION "${VERSION_INFO}")
string(REGEX REPLACE
${LIBTOOL_REGEX} "\\3"
LIBTOOL_AGE "${VERSION_INFO}")
# This is what libtool does internally on Unix platforms.
math(EXPR LIBRARY_SOVERSION "${LIBTOOL_CURRENT} - ${LIBTOOL_AGE}")
set(LIBRARY_VERSION "${LIBRARY_SOVERSION}.${LIBTOOL_AGE}.${LIBTOOL_REVISION}")
# External dependency library detection is automatic. See the notes at the top
# of this file, for how to force or disable dependencies completely.
option(FT_WITH_ZLIB "Use system zlib instead of internal library." OFF)
option(FT_WITH_BZIP2 "Support bzip2 compressed fonts." OFF)
option(FT_WITH_PNG "Support PNG compressed OpenType embedded bitmaps." OFF)
option(FT_WITH_HARFBUZZ "Improve auto-hinting of OpenType fonts." OFF)
option(FT_WITH_BROTLI "Support compressed WOFF2 fonts." OFF)
# Disallow in-source builds
if ("${CMAKE_BINARY_DIR}" STREQUAL "${CMAKE_SOURCE_DIR}")
message(FATAL_ERROR
"In-source builds are not permitted! Make a separate folder for"
" building, e.g.,\n"
" cmake -E make_directory build\n"
" cmake -E chdir build cmake ..\n"
"Before that, remove the files created by this failed run with\n"
" cmake -E remove CMakeCache.txt\n"
" cmake -E remove_directory CMakeFiles")
endif ()
# Add local cmake modules
list(APPEND CMAKE_MODULE_PATH ${PROJECT_SOURCE_DIR}/builds/cmake)
if (BUILD_FRAMEWORK)
if (NOT "${CMAKE_GENERATOR}" STREQUAL "Xcode")
message(FATAL_ERROR
"You should use Xcode generator with BUILD_FRAMEWORK enabled")
endif ()
set(CMAKE_OSX_ARCHITECTURES "$(ARCHS_STANDARD_32_64_BIT)")
set(BUILD_SHARED_LIBS ON)
endif ()
# Find dependencies
set(HARFBUZZ_MIN_VERSION "2.0.0")
if (FT_WITH_HARFBUZZ)
find_package(HarfBuzz ${HARFBUZZ_MIN_VERSION} REQUIRED)
else ()
find_package(HarfBuzz ${HARFBUZZ_MIN_VERSION})
endif ()
if (FT_WITH_PNG)
find_package(PNG REQUIRED)
else ()
find_package(PNG)
endif ()
if (FT_WITH_ZLIB)
find_package(ZLIB REQUIRED)
else ()
find_package(ZLIB)
endif ()
if (FT_WITH_BZIP2)
find_package(BZip2 REQUIRED)
else ()
find_package(BZip2)
endif ()
if (FT_WITH_BROTLI)
find_package(BrotliDec REQUIRED)
else ()
find_package(BrotliDec)
endif ()
# Create the configuration file
if (UNIX)
check_include_file("unistd.h" HAVE_UNISTD_H)
check_include_file("fcntl.h" HAVE_FCNTL_H)
file(READ "${PROJECT_SOURCE_DIR}/builds/unix/ftconfig.h.in"
FTCONFIG_H)
if (HAVE_UNISTD_H)
string(REGEX REPLACE
"#undef +(HAVE_UNISTD_H)" "#define \\1 1"
FTCONFIG_H "${FTCONFIG_H}")
endif ()
if (HAVE_FCNTL_H)
string(REGEX REPLACE
"#undef +(HAVE_FCNTL_H)" "#define \\1 1"
FTCONFIG_H "${FTCONFIG_H}")
endif ()
else ()
file(READ "${PROJECT_SOURCE_DIR}/include/freetype/config/ftconfig.h"
FTCONFIG_H)
endif ()
set(FTCONFIG_H_NAME "${PROJECT_BINARY_DIR}/include/freetype/config/ftconfig.h")
if (EXISTS "${FTCONFIG_H_NAME}")
file(READ "${FTCONFIG_H_NAME}" ORIGINAL_FTCONFIG_H)
else ()
set(ORIGINAL_FTCONFIG_H "")
endif ()
if (NOT (ORIGINAL_FTCONFIG_H STREQUAL FTCONFIG_H))
file(WRITE "${FTCONFIG_H_NAME}" "${FTCONFIG_H}")
endif ()
# Create the options file
file(READ "${PROJECT_SOURCE_DIR}/include/freetype/config/ftoption.h"
FTOPTION_H)
if (ZLIB_FOUND)
string(REGEX REPLACE
"/\\* +(#define +FT_CONFIG_OPTION_SYSTEM_ZLIB) +\\*/" "\\1"
FTOPTION_H "${FTOPTION_H}")
endif ()
if (BZIP2_FOUND)
string(REGEX REPLACE
"/\\* +(#define +FT_CONFIG_OPTION_USE_BZIP2) +\\*/" "\\1"
FTOPTION_H "${FTOPTION_H}")
endif ()
if (PNG_FOUND)
string(REGEX REPLACE
"/\\* +(#define +FT_CONFIG_OPTION_USE_PNG) +\\*/" "\\1"
FTOPTION_H "${FTOPTION_H}")
endif ()
if (HARFBUZZ_FOUND)
string(REGEX REPLACE
"/\\* +(#define +FT_CONFIG_OPTION_USE_HARFBUZZ) +\\*/" "\\1"
FTOPTION_H "${FTOPTION_H}")
endif ()
if (BROTLIDEC_FOUND)
string(REGEX REPLACE
"/\\* +(#define +FT_CONFIG_OPTION_USE_BROTLI) +\\*/" "\\1"
FTOPTION_H "${FTOPTION_H}")
endif ()
set(FTOPTION_H_NAME "${PROJECT_BINARY_DIR}/include/freetype/config/ftoption.h")
if (EXISTS "${FTOPTION_H_NAME}")
file(READ "${FTOPTION_H_NAME}" ORIGINAL_FTOPTION_H)
else ()
set(ORIGINAL_FTOPTION_H "")
endif ()
if (NOT (ORIGINAL_FTOPTION_H STREQUAL FTOPTION_H))
file(WRITE "${FTOPTION_H_NAME}" "${FTOPTION_H}")
endif ()
file(GLOB PUBLIC_HEADERS "include/ft2build.h" "include/freetype/*.h")
file(GLOB PUBLIC_CONFIG_HEADERS "include/freetype/config/*.h")
file(GLOB PRIVATE_HEADERS "include/freetype/internal/*.h")
set(BASE_SRCS
src/autofit/autofit.c
src/base/ftbase.c
src/base/ftbbox.c
src/base/ftbdf.c
src/base/ftbitmap.c
src/base/ftcid.c
src/base/ftfstype.c
src/base/ftgasp.c
src/base/ftglyph.c
src/base/ftgxval.c
src/base/ftinit.c
src/base/ftmm.c
src/base/ftotval.c
src/base/ftpatent.c
src/base/ftpfr.c
src/base/ftstroke.c
src/base/ftsynth.c
src/base/fttype1.c
src/base/ftwinfnt.c
src/bdf/bdf.c
src/bzip2/ftbzip2.c
src/cache/ftcache.c
src/cff/cff.c
src/cid/type1cid.c
src/gzip/ftgzip.c
src/lzw/ftlzw.c
src/pcf/pcf.c
src/pfr/pfr.c
src/psaux/psaux.c
src/pshinter/pshinter.c
src/psnames/psnames.c
src/raster/raster.c
src/sdf/sdf.c
src/sfnt/sfnt.c
src/smooth/smooth.c
src/truetype/truetype.c
src/type1/type1.c
src/type42/type42.c
src/winfonts/winfnt.c
)
if (UNIX)
list(APPEND BASE_SRCS "builds/unix/ftsystem.c")
elseif (WIN32)
list(APPEND BASE_SRCS "builds/windows/ftsystem.c")
else ()
list(APPEND BASE_SRCS "src/base/ftsystem.c")
endif ()
if (WIN32)
enable_language(RC)
list(APPEND BASE_SRCS builds/windows/ftdebug.c
src/base/ftver.rc)
elseif (WINCE)
list(APPEND BASE_SRCS builds/wince/ftdebug.c)
else ()
list(APPEND BASE_SRCS src/base/ftdebug.c)
endif ()
if (BUILD_FRAMEWORK)
list(APPEND BASE_SRCS builds/mac/freetype-Info.plist)
endif ()
if (NOT DISABLE_FORCE_DEBUG_POSTFIX)
set(CMAKE_DEBUG_POSTFIX d)
endif ()
add_library(freetype
${PUBLIC_HEADERS}
${PUBLIC_CONFIG_HEADERS}
${PRIVATE_HEADERS}
${BASE_SRCS}
)
set_target_properties(
freetype PROPERTIES
C_VISIBILITY_PRESET hidden)
target_compile_definitions(
freetype PRIVATE FT2_BUILD_LIBRARY)
if (WIN32)
target_compile_definitions(
freetype PRIVATE _CRT_SECURE_NO_WARNINGS _CRT_NONSTDC_NO_WARNINGS)
if (BUILD_SHARED_LIBS)
target_compile_definitions(
freetype PRIVATE DLL_EXPORT)
endif ()
endif ()
if (BUILD_SHARED_LIBS)
set_target_properties(freetype PROPERTIES
VERSION ${LIBRARY_VERSION}
SOVERSION ${LIBRARY_SOVERSION})
endif ()
# Pick up ftconfig.h and ftoption.h generated above, first.
target_include_directories(
freetype
PUBLIC
$<INSTALL_INTERFACE:include/freetype2>
$<BUILD_INTERFACE:${CMAKE_CURRENT_BINARY_DIR}/include>
$<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/include>
PRIVATE
${CMAKE_CURRENT_BINARY_DIR}/include
${CMAKE_CURRENT_SOURCE_DIR}/include
# Make <ftconfig.h> available for builds/unix/ftsystem.c.
${CMAKE_CURRENT_BINARY_DIR}/include/freetype/config
)
if (BUILD_FRAMEWORK)
set_property(SOURCE ${PUBLIC_CONFIG_HEADERS}
PROPERTY MACOSX_PACKAGE_LOCATION Headers/config
)
set_target_properties(freetype PROPERTIES
FRAMEWORK TRUE
MACOSX_FRAMEWORK_INFO_PLIST builds/mac/freetype-Info.plist
PUBLIC_HEADER "${PUBLIC_HEADERS}"
XCODE_ATTRIBUTE_INSTALL_PATH "@rpath"
)
endif ()
set(PKG_CONFIG_REQUIRED_PRIVATE "")
set(PKG_CONFIG_LIBS_PRIVATE "")
if (ZLIB_FOUND)
target_link_libraries(freetype PRIVATE ${ZLIB_LIBRARIES})
target_include_directories(freetype PRIVATE ${ZLIB_INCLUDE_DIRS})
list(APPEND PKG_CONFIG_REQUIRED_PRIVATE "zlib")
endif ()
if (BZIP2_FOUND)
target_link_libraries(freetype PRIVATE ${BZIP2_LIBRARIES})
target_include_directories(freetype PRIVATE ${BZIP2_INCLUDE_DIR}) # not BZIP2_INCLUDE_DIRS
list(APPEND PKG_CONFIG_LIBS_PRIVATE "-lbz2")
endif ()
if (PNG_FOUND)
target_link_libraries(freetype PRIVATE ${PNG_LIBRARIES})
target_compile_definitions(freetype PRIVATE ${PNG_DEFINITIONS})
target_include_directories(freetype PRIVATE ${PNG_INCLUDE_DIRS})
list(APPEND PKG_CONFIG_REQUIRED_PRIVATE "libpng")
endif ()
if (HARFBUZZ_FOUND)
target_link_libraries(freetype PRIVATE ${HARFBUZZ_LIBRARIES})
target_include_directories(freetype PRIVATE ${HARFBUZZ_INCLUDE_DIRS})
list(APPEND PKG_CONFIG_REQUIRED_PRIVATE "harfbuzz >= ${HARFBUZZ_MIN_VERSION}")
endif ()
if (BROTLIDEC_FOUND)
target_link_libraries(freetype PRIVATE ${BROTLIDEC_LIBRARIES})
target_compile_definitions(freetype PRIVATE ${BROTLIDEC_DEFINITIONS})
target_include_directories(freetype PRIVATE ${BROTLIDEC_INCLUDE_DIRS})
list(APPEND PKG_CONFIG_REQUIRED_PRIVATE "libbrotlidec")
endif ()
# Installation
include(GNUInstallDirs)
if (NOT SKIP_INSTALL_HEADERS AND NOT SKIP_INSTALL_ALL)
install(
# Note the trailing slash in the argument to `DIRECTORY'!
DIRECTORY ${PROJECT_SOURCE_DIR}/include/
DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}/freetype2
COMPONENT headers
PATTERN "internal" EXCLUDE
PATTERN "ftconfig.h" EXCLUDE
PATTERN "ftoption.h" EXCLUDE)
install(
FILES ${PROJECT_BINARY_DIR}/include/freetype/config/ftconfig.h
${PROJECT_BINARY_DIR}/include/freetype/config/ftoption.h
DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}/freetype2/freetype/config
COMPONENT headers)
endif ()
if (NOT SKIP_INSTALL_LIBRARIES AND NOT SKIP_INSTALL_ALL)
# Generate the pkg-config file
file(READ "${PROJECT_SOURCE_DIR}/builds/unix/freetype2.in" FREETYPE2_PC_IN)
string(REPLACE ";" ", " PKG_CONFIG_REQUIRED_PRIVATE "${PKG_CONFIG_REQUIRED_PRIVATE}")
string(REPLACE "%prefix%" ${CMAKE_INSTALL_PREFIX}
FREETYPE2_PC_IN ${FREETYPE2_PC_IN})
string(REPLACE "%exec_prefix%" "\${prefix}"
FREETYPE2_PC_IN ${FREETYPE2_PC_IN})
string(REPLACE "%libdir%" "\${prefix}/${CMAKE_INSTALL_LIBDIR}"
FREETYPE2_PC_IN ${FREETYPE2_PC_IN})
string(REPLACE "%includedir%" "\${prefix}/${CMAKE_INSTALL_INCLUDEDIR}"
FREETYPE2_PC_IN ${FREETYPE2_PC_IN})
string(REPLACE "%ft_version%" "${LIBTOOL_CURRENT}.${LIBTOOL_REVISION}.${LIBTOOL_AGE}"
FREETYPE2_PC_IN ${FREETYPE2_PC_IN})
string(REPLACE "%REQUIRES_PRIVATE%" "${PKG_CONFIG_REQUIRED_PRIVATE}"
FREETYPE2_PC_IN ${FREETYPE2_PC_IN})
string(REPLACE "%LIBS_PRIVATE%" "${PKG_CONFIG_LIBS_PRIVATE}"
FREETYPE2_PC_IN ${FREETYPE2_PC_IN})
set(FREETYPE2_PC_IN_NAME "${PROJECT_BINARY_DIR}/freetype2.pc")
if (EXISTS "${FREETYPE2_PC_IN_NAME}")
file(READ "${FREETYPE2_PC_IN_NAME}" ORIGINAL_FREETYPE2_PC_IN)
else ()
set(ORIGINAL_FREETYPE2_PC_IN "")
endif ()
if (NOT (ORIGINAL_FREETYPE2_PC_IN STREQUAL FREETYPE2_PC_IN))
file(WRITE "${FREETYPE2_PC_IN_NAME}" ${FREETYPE2_PC_IN})
endif ()
install(
FILES ${PROJECT_BINARY_DIR}/freetype2.pc
DESTINATION ${CMAKE_INSTALL_LIBDIR}/pkgconfig
COMPONENT pkgconfig)
include(CMakePackageConfigHelpers)
write_basic_package_version_file(
${PROJECT_BINARY_DIR}/freetype-config-version.cmake
VERSION ${VERSION_MAJOR}.${VERSION_MINOR}.${VERSION_PATCH}
COMPATIBILITY SameMajorVersion)
install(
TARGETS freetype
EXPORT freetype-targets
LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR}
ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR}
RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR}
FRAMEWORK DESTINATION Library/Frameworks
COMPONENT libraries)
install(
EXPORT freetype-targets
DESTINATION ${CMAKE_INSTALL_LIBDIR}/cmake/freetype
FILE freetype-config.cmake
COMPONENT headers)
install(
FILES ${PROJECT_BINARY_DIR}/freetype-config-version.cmake
DESTINATION ${CMAKE_INSTALL_LIBDIR}/cmake/freetype
COMPONENT headers)
endif ()
# Packaging
set(CPACK_PACKAGE_NAME ${CMAKE_PROJECT_NAME})
set(CPACK_PACKAGE_DESCRIPTION_SUMMARY "The FreeType font rendering library.")
set(CPACK_PACKAGE_DESCRIPTION_FILE "${CMAKE_CURRENT_SOURCE_DIR}/README")
set(CPACK_RESOURCE_FILE_LICENSE "${CMAKE_CURRENT_SOURCE_DIR}/LICENSE.TXT")
set(CPACK_PACKAGE_VERSION_MAJOR ${VERSION_MAJOR})
set(CPACK_PACKAGE_VERSION_MINOR ${VERSION_MINOR})
set(CPACK_PACKAGE_VERSION_PATCH ${VERSION_PATCH})
set(CPACK_PACKAGE_VERSION "${CPACK_PACKAGE_VERSION_MAJOR}.${CPACK_PACKAGE_VERSION_MINOR}.${CPACK_PACKAGE_VERSION_PATCH}")
if (WIN32)
set(CPACK_GENERATOR ZIP)
else ()
set(CPACK_GENERATOR TGZ)
endif ()
set(CPACK_COMPONENT_LIBRARIES_DISPLAY_NAME "Libraries")
set(CPACK_COMPONENT_HEADERS_DISPLAY_NAME "C/C++ Headers")
set(CPACK_COMPONENT_LIBRARIES_DESCRIPTION
"Library used to build programs which use FreeType")
set(CPACK_COMPONENT_HEADERS_DESCRIPTION
"C/C++ header files for use with FreeType")
set(CPACK_COMPONENT_HEADERS_DEPENDS libraries)
set(CPACK_COMPONENT_LIBRARIES_GROUP "Development")
set(CPACK_COMPONENT_HEADERS_GROUP "Development")
include(CPack)

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@ -29,12 +29,16 @@ The contributed BDF and PCF drivers come with a license similar to
that of the X Window System. It is compatible to the above two
licenses (see files `src/bdf/README` and `src/pcf/README`). The same
holds for the source code files `src/base/fthash.c` and
`include/freetype/internal/fthash.h`; they wer part of the BDF driver
`include/freetype/internal/fthash.h`; they were part of the BDF driver
in earlier FreeType versions.
The gzip module uses the zlib license (see `src/gzip/zlib.h`) which
too is compatible to the above two licenses.
The files `src/autofit/ft-hb.c` and `src/autofit/ft-hb.h` contain code
taken almost verbatim from the HarfBuzz file `hb-ft.cc`, which uses
the 'Old MIT' license, compatible to the above two licenses.
The MD5 checksum support (only used for debugging in development
builds) is in the public domain.

View File

@ -1,34 +0,0 @@
#
# FreeType 2 build system -- top-level Makefile
#
# Copyright (C) 1996-2021 by
# David Turner, Robert Wilhelm, and Werner Lemberg.
#
# This file is part of the FreeType project, and may only be used, modified,
# and distributed under the terms of the FreeType project license,
# LICENSE.TXT. By continuing to use, modify, or distribute this file you
# indicate that you have read the license and understand and accept it
# fully.
# Project names
#
PROJECT := freetype
PROJECT_TITLE := FreeType
# The variable TOP_DIR holds the path to the topmost directory in the project
# engine source hierarchy. If it is not defined, default it to `.'.
#
TOP_DIR ?= .
# The variable OBJ_DIR gives the location where object files and the
# FreeType library are built.
#
OBJ_DIR ?= $(TOP_DIR)/objs
include $(TOP_DIR)/builds/toplevel.mk
# EOF

View File

@ -1,4 +1,4 @@
FreeType 2.10.4
FreeType 2.13.2
===============
Homepage: https://www.freetype.org
@ -16,7 +16,9 @@ Read the files `docs/INSTALL*` for installation instructions; see the
file `docs/LICENSE.TXT` for the available licenses.
For using FreeType's git repository instead of a distribution bundle,
please read file `README.git`.
please read file `README.git`. Note that you have to actually clone
the repository; using a snapshot will not work (in other words, don't
use gitlab's 'Download' button).
The FreeType 2 API reference is located in directory `docs/reference`;
use the file `index.html` as the top entry point. [Please note that
@ -30,9 +32,9 @@ sites. Go to
and download one of the following files.
freetype-doc-2.10.4.tar.xz
freetype-doc-2.10.4.tar.gz
ftdoc2104.zip
freetype-doc-2.13.2.tar.xz
freetype-doc-2.13.2.tar.gz
ftdoc2132.zip
To view the documentation online, go to
@ -88,12 +90,11 @@ Details on the process can be found here:
Enjoy!
The FreeType Team
----------------------------------------------------------------------
Copyright (C) 2006-2021 by
Copyright (C) 2006-2023 by
David Turner, Robert Wilhelm, and Werner Lemberg.
This file is part of the FreeType project, and may only be used,

View File

@ -1,5 +1,9 @@
README.git
----------
==========
repository issues
-----------------
FreeType's official repository site is
@ -23,7 +27,10 @@ digit '2' for historical reasons.
freetype-demos
The git archive doesn't contain pre-built configuration scripts for
standard builds with `configure`
--------------------------------
The git repository doesn't contain pre-built configuration scripts for
UNIXish platforms. To generate them say
sh autogen.sh
@ -38,54 +45,51 @@ The versions given in parentheses are known to work. Newer versions
should work too, of course. Note that `autogen.sh` also sets up
proper file permissions for the `configure` and auxiliary scripts.
The `autogen.sh` script now checks the versions of the above three
packages whether they match the numbers above. Otherwise it will
complain and suggest either upgrading or using an environment variable
to point to a more recent version of the required tool(s).
The `autogen.sh` script checks whether the versions of the above three
tools match the numbers above. Otherwise it will complain and suggest
either upgrading or using environment variables to point to more
recent versions of the required tools.
Note that `aclocal` is provided by the 'automake' package on Linux,
and that `libtoolize` is called `glibtoolize` on Darwin (OS X).
alternative build methods
-------------------------
For static builds that don't use platform-specific optimizations, no
configure script is necessary at all; saying
make setup ansi
make
should work on all platforms that have GNU `make` (or `makepp`).
Similarly, a build with `cmake` or `meson` can be done directly from
the git repository.
should work on all platforms that have GNU `make` (or `makepp`).
A build with `cmake` or `meson` can be done directly from the git
repository. However, if you want to use the `FT_DEBUG_LOGGING` macro
(see file `docs/DEBUG` for more information) it is currently mandatory
to execute `autogen.sh` in advance; this script clones the 'dlg' git
submodule and copies some files into FreeType's source tree.
For using the `FT_DEBUG_LOGGING` macro while debugging (see file
`docs/DEBUG` for more information) the following git commands are
necessary to check out the 'dlg' library as a git submodule.
Code of Conduct
---------------
git submodule init
git submodule update
Please note that this project is released with a Contributor Code of
Conduct (CoC). By participating in this project you agree to abide by
its terms, which you can find in the following link:
https://www.freedesktop.org/wiki/CodeOfConduct
If you want to contribute to FreeType it is recommended to install the
`git-merge-changelog` program we use a `ChangeLog` file, which often
prevents simple merging due to conflicts. Most GNU/Linux
distributions have a package for this program; otherwise you can
install it via the 'gnulib' git repository. Detailed instructions can
be found at the beginning of
https://git.savannah.gnu.org/cgit/gnulib.git/tree/lib/git-merge-changelog.c
To make it actually work, add to file `.git/config` in the FreeType
git repository (or to your `$HOME/.gitconfig` file) the lines
[merge "merge-changelog"]
name = GNU-style ChangeLog merge driver
driver = /usr/local/bin/git-merge-changelog %O %A %B
CoC issues may be raised to the project maintainers at the following
address:
wl@gnu.org
apodtele@gmail.com
----------------------------------------------------------------------
Copyright (C) 2005-2021 by
Copyright (C) 2005-2023 by
David Turner, Robert Wilhelm, and Werner Lemberg.
This file is part of the FreeType project, and may only be used,

View File

@ -4,7 +4,7 @@
*
* FreeType 2 build and setup macros (development version).
*
* Copyright (C) 1996-2021 by
* Copyright (C) 1996-2023 by
* David Turner, Robert Wilhelm, and Werner Lemberg.
*
* This file is part of the FreeType project, and may only be used,
@ -32,7 +32,6 @@
#define FT_CONFIG_MODULES_H <ftmodule.h>
#define FT_CONFIG_OPTIONS_H <ftoption.h>
#define FT_CONFIG_STANDARD_LIBRARY_H <ftstdlib.h>
#include <freetype/config/ftheader.h>

View File

@ -25,6 +25,6 @@ FT_USE_MODULE( FT_Driver_ClassRec, tt_driver_class )
// FT_USE_MODULE( FT_Renderer_Class, ft_raster1_renderer_class )
FT_USE_MODULE( FT_Module_Class, sfnt_module_class )
FT_USE_MODULE( FT_Renderer_Class, ft_smooth_renderer_class )
// FT_USE_MODULE( FT_Driver_ClassRec, bdf_driver_class )
FT_USE_MODULE( FT_Driver_ClassRec, bdf_driver_class )
/* EOF */

View File

@ -1,10 +1,10 @@
/****************************************************************************
*
* ftoption.h
* ftoption.h (for development)
*
* User-selectable configuration macros (specification only).
*
* Copyright (C) 1996-2021 by
* Copyright (C) 1996-2023 by
* David Turner, Robert Wilhelm, and Werner Lemberg.
*
* This file is part of the FreeType project, and may only be used,
@ -15,6 +15,7 @@
*
*/
#ifndef FTOPTION_H_
#define FTOPTION_H_
@ -104,8 +105,7 @@ FT_BEGIN_HEADER
*
* ```
* FREETYPE_PROPERTIES=truetype:interpreter-version=35 \
* cff:no-stem-darkening=1 \
* autofitter:warping=1
* cff:no-stem-darkening=1
* ```
*
*/
@ -219,6 +219,10 @@ FT_BEGIN_HEADER
* If you use a build system like cmake or the `configure` script,
* options set by those programs have precedence, overwriting the value
* here with the configured one.
*
* If you use the GNU make build system directly (that is, without the
* `configure` script) and you define this macro, you also have to pass
* `SYSTEM_ZLIB=yes` as an argument to make.
*/
/* #define FT_CONFIG_OPTION_SYSTEM_ZLIB */
@ -457,9 +461,9 @@ FT_BEGIN_HEADER
* while compiling in 'release' mode):
*
* ```
* _af_debug_disable_horz_hints
* _af_debug_disable_vert_hints
* _af_debug_disable_blue_hints
* af_debug_disable_horz_hints_
* af_debug_disable_vert_hints_
* af_debug_disable_blue_hints_
* ```
*
* Additionally, the following functions provide dumps of various
@ -476,7 +480,7 @@ FT_BEGIN_HEADER
* As an argument, they use another global variable:
*
* ```
* _af_debug_hints
* af_debug_hints_
* ```
*
* Please have a look at the `ftgrid` demo program to see how those
@ -520,7 +524,21 @@ FT_BEGIN_HEADER
*
* More details can be found in the files `ftmoderr.h` and `fterrors.h`.
*/
/* #undef FT_CONFIG_OPTION_USE_MODULE_ERRORS */
#undef FT_CONFIG_OPTION_USE_MODULE_ERRORS
/**************************************************************************
*
* OpenType SVG Glyph Support
*
* Setting this macro enables support for OpenType SVG glyphs. By
* default, FreeType can only fetch SVG documents. However, it can also
* render them if external rendering hook functions are plugged in at
* runtime.
*
* More details on the hooks can be found in file `otsvg.h`.
*/
// #define FT_CONFIG_OPTION_SVG
/**************************************************************************
@ -566,12 +584,12 @@ FT_BEGIN_HEADER
/**************************************************************************
*
* Define `TT_CONFIG_OPTION_POSTSCRIPT_NAMES` if you want to be able to
* load and enumerate the glyph Postscript names in a TrueType or OpenType
* load and enumerate Postscript names of glyphs in a TrueType or OpenType
* file.
*
* Note that when you do not compile the 'psnames' module by undefining the
* above `FT_CONFIG_OPTION_POSTSCRIPT_NAMES`, the 'sfnt' module will
* contain additional code used to read the PS Names table from a font.
* Note that if you do not compile the 'psnames' module by undefining the
* above `FT_CONFIG_OPTION_POSTSCRIPT_NAMES` macro, the 'sfnt' module will
* contain additional code to read the PostScript name table from a font.
*
* (By default, the module uses 'psnames' to extract glyph names.)
*/
@ -643,36 +661,12 @@ FT_BEGIN_HEADER
* not) instructions in a certain way so that all TrueType fonts look like
* they do in a Windows ClearType (DirectWrite) environment. See [1] for a
* technical overview on what this means. See `ttinterp.h` for more
* details on the LEAN option.
* details on this option.
*
* There are three possible values.
*
* Value 1:
* This value is associated with the 'Infinality' moniker, contributed by
* an individual nicknamed Infinality with the goal of making TrueType
* fonts render better than on Windows. A high amount of configurability
* and flexibility, down to rules for single glyphs in fonts, but also
* very slow. Its experimental and slow nature and the original
* developer losing interest meant that this option was never enabled in
* default builds.
*
* The corresponding interpreter version is v38.
*
* Value 2:
* The new default mode for the TrueType driver. The Infinality code
* base was stripped to the bare minimum and all configurability removed
* in the name of speed and simplicity. The configurability was mainly
* aimed at legacy fonts like 'Arial', 'Times New Roman', or 'Courier'.
* Legacy fonts are fonts that modify vertical stems to achieve clean
* black-and-white bitmaps. The new mode focuses on applying a minimal
* set of rules to all fonts indiscriminately so that modern and web
* fonts render well while legacy fonts render okay.
*
* The corresponding interpreter version is v40.
*
* Value 3:
* Compile both, making both v38 and v40 available (the latter is the
* default).
* The new default mode focuses on applying a minimal set of rules to all
* fonts indiscriminately so that modern and web fonts render well while
* legacy fonts render okay. The corresponding interpreter version is v40.
* The so-called Infinality mode (v38) is no longer available in FreeType.
*
* By undefining these, you get rendering behavior like on Windows without
* ClearType, i.e., Windows XP without ClearType enabled and Win9x
@ -687,9 +681,7 @@ FT_BEGIN_HEADER
* [1]
* https://www.microsoft.com/typography/cleartype/truetypecleartype.aspx
*/
/* #define TT_CONFIG_OPTION_SUBPIXEL_HINTING 1 */
#define TT_CONFIG_OPTION_SUBPIXEL_HINTING 2
/* #define TT_CONFIG_OPTION_SUBPIXEL_HINTING ( 1 | 2 ) */
#define TT_CONFIG_OPTION_SUBPIXEL_HINTING
/**************************************************************************
@ -721,12 +713,30 @@ FT_BEGIN_HEADER
// #define TT_CONFIG_OPTION_GX_VAR_SUPPORT
/**************************************************************************
*
* Define `TT_CONFIG_OPTION_NO_BORING_EXPANSION` if you want to exclude
* support for 'boring' OpenType specification expansions.
*
* https://github.com/harfbuzz/boring-expansion-spec
*
* Right now, the following features are covered:
*
* - 'avar' version 2.0
*
* Most likely, this is a temporary configuration option to be removed in
* the near future, since it is assumed that eventually those features are
* added to the OpenType standard.
*/
/* #define TT_CONFIG_OPTION_NO_BORING_EXPANSION */
/**************************************************************************
*
* Define `TT_CONFIG_OPTION_BDF` if you want to include support for an
* embedded 'BDF~' table within SFNT-based bitmap formats.
*/
// #define TT_CONFIG_OPTION_BDF
#define TT_CONFIG_OPTION_BDF
/**************************************************************************
@ -790,7 +800,7 @@ FT_BEGIN_HEADER
* into an existing face. Note that if set, the Type~1 driver will be
* unable to produce kerning distances.
*/
/* #undef T1_CONFIG_OPTION_NO_AFM */
// #undef T1_CONFIG_OPTION_NO_AFM
/**************************************************************************
@ -798,7 +808,7 @@ FT_BEGIN_HEADER
* Define this configuration macro if you want to prevent the compilation
* of the Multiple Masters font support in the Type~1 driver.
*/
/* #undef T1_CONFIG_OPTION_NO_MM_SUPPORT */
// #undef T1_CONFIG_OPTION_NO_MM_SUPPORT
/**************************************************************************
@ -808,7 +818,7 @@ FT_BEGIN_HEADER
* switch between the two engines using the `hinting-engine` property of
* the 'type1' driver module.
*/
/* #define T1_CONFIG_OPTION_OLD_ENGINE */
// #define T1_CONFIG_OPTION_OLD_ENGINE
/*************************************************************************/
@ -850,7 +860,7 @@ FT_BEGIN_HEADER
* between the two engines using the `hinting-engine` property of the 'cff'
* driver module.
*/
/* #define CFF_CONFIG_OPTION_OLD_ENGINE */
// #define CFF_CONFIG_OPTION_OLD_ENGINE
/*************************************************************************/
@ -877,7 +887,7 @@ FT_BEGIN_HEADER
* If this option is activated, it can be controlled with the
* `no-long-family-names` property of the 'pcf' driver module.
*/
/* #define PCF_CONFIG_OPTION_LONG_FAMILY_NAMES */
// #define PCF_CONFIG_OPTION_LONG_FAMILY_NAMES
/*************************************************************************/
@ -908,24 +918,6 @@ FT_BEGIN_HEADER
#endif
/**************************************************************************
*
* Compile 'autofit' module with warp hinting. The idea of the warping
* code is to slightly scale and shift a glyph within a single dimension so
* that as much of its segments are aligned (more or less) on the grid. To
* find out the optimal scaling and shifting value, various parameter
* combinations are tried and scored.
*
* You can switch warping on and off with the `warping` property of the
* auto-hinter (see file `ftdriver.h` for more information; by default it
* is switched off).
*
* This experimental option is not active if the rendering mode is
* `FT_RENDER_MODE_LIGHT`.
*/
// #define AF_CONFIG_OPTION_USE_WARPER
/**************************************************************************
*
* Use TrueType-like size metrics for 'light' auto-hinting.
@ -959,21 +951,14 @@ FT_BEGIN_HEADER
/*
* The next three macros are defined if native TrueType hinting is
* The next two macros are defined if native TrueType hinting is
* requested by the definitions above. Don't change this.
*/
#ifdef TT_CONFIG_OPTION_BYTECODE_INTERPRETER
#define TT_USE_BYTECODE_INTERPRETER
#ifdef TT_CONFIG_OPTION_SUBPIXEL_HINTING
#if TT_CONFIG_OPTION_SUBPIXEL_HINTING & 1
#define TT_SUPPORT_SUBPIXEL_HINTING_INFINALITY
#endif
#if TT_CONFIG_OPTION_SUBPIXEL_HINTING & 2
#define TT_SUPPORT_SUBPIXEL_HINTING_MINIMAL
#endif
#endif
#endif
@ -1020,8 +1005,8 @@ FT_BEGIN_HEADER
#error "Invalid CFF darkening parameters!"
#endif
FT_END_HEADER
FT_END_HEADER
#endif /* FTOPTION_H_ */

File diff suppressed because it is too large Load Diff

View File

@ -1,2 +0,0 @@
Support for a cmake build has been contributed. See the remarks in the
top-level `CMakeLists.txt' file for more.

View File

@ -1,152 +0,0 @@
How to customize the compilation of the library
===============================================
FreeType is highly customizable to fit various needs, and this
document describes how it is possible to select options and
components at compilation time.
I. Configuration macros
The file `include/freetype/config/ftoption.h' contains a list of
commented configuration macros that can be toggled by developers to
indicate which features should be active while building the library.
These options range from debug level to availability of certain
features, like native TrueType hinting through a bytecode
interpreter.
We invite you to read this file for more information. You can
change the file's content to suit your needs, or override it with
one of the techniques described below.
II. Modules list
If you use GNU make please edit the top-level file `modules.cfg'.
It contains a list of available FreeType modules and extensions to
be compiled. Change it to suit your own preferences. Be aware that
certain modules depend on others, as described in the file. GNU
make uses `modules.cfg' to generate `ftmodule.h' (in the object
directory).
If you build FreeType in a directory separate from the source files,
put your customized `modules.cfg' in that directory; that way you
can keep the source files `clean'.
If you don't use GNU make you have to manually edit the file
`include/freetype/config/ftmodule.h' (which is *not* used with if
compiled with GNU make) to add or remove the drivers and components
you want to compile into the library. See `INSTALL.ANY' for more
information.
III. System interface
FreeType's default interface to the system (i.e., the parts that
deal with memory management and i/o streams) is located in
`src/base/ftsystem.c'.
The current implementation uses standard C library calls to manage
memory and to read font files. It is however possible to write
custom implementations to suit specific systems.
To tell the GNU Make-based build system to use a custom system
interface, you have to define the environment variable FTSYS_SRC to
point to the relevant implementation:
on Unix:
./configure <your options>
export FTSYS_SRC=foo/my_ftsystem.c
make
make install
on Windows:
make setup <compiler>
set FTSYS_SRC=foo/my_ftsystem.c
make
IV. Overriding default configuration and module headers
It is possible to override the default configuration and module
headers without changing the original files. There are three ways
to do that:
1. With GNU make
[This is actually a combination of method 2 and 3.]
Just put your custom `ftoption.h' file into the objects directory
(normally `<topdir>/objs' if you build in the source tree, or the
directory where you invoke configure if you build in a separate
directory), which GNU make prefers over the standard location. No
action is needed for `ftmodule.h' because it is generated
automatically in the objects directory.
2. Using the C include path
Use the C include path to ensure that your own versions of the
files are used at compile time when the lines
#include FT_CONFIG_OPTIONS_H
#include FT_CONFIG_MODULES_H
are compiled. Their default values being
<freetype/config/ftoption.h> and <freetype/config/ftmodule.h>, you
can do something like:
custom/
config/
ftoption.h => custom options header
ftmodule.h => custom modules list
include/ => normal FreeType 2 include
...
then change the C include path to always give the path to `custom'
before the FreeType 2 `include'.
3. Redefining FT_CONFIG_OPTIONS_H and FT_CONFIG_MODULES_H
Another way to do the same thing is to redefine the macros used to
name the configuration headers. To do so, you need a custom
`ft2build.h' whose content can be as simple as:
#ifndef FT2_BUILD_MY_PLATFORM_H_
#define FT2_BUILD_MY_PLATFORM_H_
#define FT_CONFIG_OPTIONS_H <custom/my-ftoption.h>
#define FT_CONFIG_MODULES_H <custom/my-ftmodule.h>
#include <freetype/config/ftheader.h>
#endif /* FT2_BUILD_MY_PLATFORM_H_ */
Place those files in a separate directory, e.g.,
custom/
ft2build.h => custom version described above
my-ftoption.h => custom options header
my-ftmodule.h => custom modules list header
and change the C include path to ensure that `custom' is always
placed before the FT2 `include' during compilation.
----------------------------------------------------------------------
Copyright (C) 2003-2020 by
David Turner, Robert Wilhelm, and Werner Lemberg.
This file is part of the FreeType project, and may only be used,
modified, and distributed under the terms of the FreeType project
license, LICENSE.TXT. By continuing to use, modify, or distribute
this file you indicate that you have read the license and understand
and accept it fully.
--- end of CUSTOMIZE ---

View File

@ -1,216 +0,0 @@
Debugging within the FreeType sources
=====================================
I. Configuration macros
-----------------------
There are several ways to enable debugging features in a FreeType 2
builds. This is controlled through the definition of special macros
located in the file `ftoption.h'. The macros are:
FT_DEBUG_LEVEL_ERROR
#define this macro if you want to compile the `FT_ERROR' macro
calls to print error messages during program execution. This does
not stop the program. Very useful to spot invalid fonts during
development and to code workarounds for them.
FT_DEBUG_LEVEL_TRACE
#define this macro if you want to compile both macros `FT_ERROR'
and `FT_TRACE'. This also includes the variants `FT_TRACE0',
`FT_TRACE1', `FT_TRACE2', ..., `FT_TRACE7'.
The trace macros are used to send debugging messages when an
appropriate `debug level' is configured at runtime through the
`FT2_DEBUG' environment variable (more on this later).
FT_DEBUG_MEMORY
If this macro is #defined, the FreeType engine is linked with a
small but effective debugging memory manager that tracks all
allocations and frees that are performed within the font engine.
When the `FT2_DEBUG_MEMORY' environment variable is defined at
runtime, a call to `FT_Done_FreeType' dumps memory statistics,
including the list of leaked memory blocks and optionally with the
source locations where these were allocated. It is always a very
good idea to define this in development builds. This works with
_any_ program linked to FreeType, but requires a big deal of
memory (the debugging memory manager never frees the blocks to the
heap in order to detect double frees).
When `FT2_DEBUG_MEMORY' isn't defined at runtime, the debugging
memory manager is ignored, and performance is unaffected.
II. Debugging macros
--------------------
Several macros can be used within the FreeType sources to help
debugging its code:
1. FT_ERROR(( ... ))
This macro is used to send debug messages that indicate relatively
serious errors (like broken font files) without stopping the
execution of the running program. Its code is compiled only when
either `FT_DEBUG_LEVEL_ERROR' or `FT_DEBUG_LEVEL_TRACE' are
defined in `ftoption.h'.
Note that you have to use a printf-like signature, but with double
parentheses, like in
FT_ERROR(( "your %s is not %s\n", "foo", "bar" ));
2. FT_ASSERT( condition )
This macro is used to check strong assertions at runtime. If its
condition isn't TRUE, the program aborts with a panic message.
Its code is compiled when either `FT_DEBUG_LEVEL_ERROR' or
`FT_DEBUG_LEVEL_TRACE' are defined. You don't need double
parentheses here. Example:
FT_ASSERT( ptr != NULL );
3. FT_TRACE( level, (message...) )
The `FT_TRACE' macro is used to send general-purpose debugging
messages during program execution. This macro uses an *implicit*
macro named `FT_COMPONENT', which names the current FreeType
component being run.
The developer should always define `FT_COMPONENT' as appropriate,
for example as in
#undef FT_COMPONENT
#define FT_COMPONENT io
The value of the `FT_COMPONENT' macro is one of the component
names defined in the internal file `internal/fttrace.h'. If you
modify the FreeType source code and insert a new `FT_COMPONENT'
macro, you must register it in `fttrace.h'. If you insert or
remove many trace macros, you can test for undefined or unused
trace macros with the script `src/tools/chktrcmp.py'.
Each such component is assigned a `debug level', ranging from
value 0 to 7, through the use of the `FT2_DEBUG' environment
variable (described below) when a program linked with FreeType
starts.
When `FT_TRACE' is called, its level is compared to the one of the
corresponding component. Messages with trace levels *higher* than
the corresponding component level are filtered out and never
printed. This means that trace messages with level 0 are always
printed, those with level 2 are only printed when the component
level is *at least* 2, etc.
The second parameter to `FT_TRACE' must contain parentheses and
corresponds to a printf-like call, as in
FT_TRACE( 2, ( "your %s is not %s\n", "foo", "bar" ) )
The shortcut macros `FT_TRACE0', `FT_TRACE1', `FT_TRACE2', ...,
`FT_TRACE7' can be used with constant level indices, and are much
cleaner to use, as in
FT_TRACE2(( "your %s is not %s\n", "foo", "bar" ));
III. Environment variables
--------------------------
The following environment variables control debugging output and
behaviour of FreeType at runtime.
FT2_DEBUG
This variable is only used when FreeType is built with
`FT_DEBUG_LEVEL_TRACE' defined. It contains a list of component
level definitions, following this format:
component1:level1 component2:level2 component3:level3 ...
where `componentX' is the name of a tracing component, as defined
in `fttrace.h'. `levelX' is the corresponding level to use at
runtime.
`any' is a special component name that is interpreted as `any/all
components'. For example, the following definitions
set FT2_DEBUG=any:2 memory:5 io:4 (on Windows)
export FT2_DEBUG="any:2 memory:5 io:4" (on Linux with bash)
both stipulate that all components should have level 2, except for
the memory and io components, which are set to the trace levels 5
and 4, respectively.
FT2_DEBUG_MEMORY
This environment variable, when defined, tells FreeType to use a
debugging memory manager that tracks leaking memory blocks as well
as other common errors like double frees. It is also capable of
reporting _where_ the leaking blocks were allocated, which
considerably saves time when debugging new additions to the
library.
This code is only compiled when FreeType is built with the
`FT_DEBUG_MEMORY' macro #defined in `ftoption.h' though, it is
ignored in other builds.
FT2_ALLOC_TOTAL_MAX
This variable is ignored if `FT2_DEBUG_MEMORY' is not defined. It
allows you to specify a maximum heap size for all memory
allocations performed by FreeType. This is very useful to test
the robustness of the font engine and programs that use it in
tight memory conditions.
If it is undefined, or if its value is not strictly positive, no
allocation bounds are checked at runtime.
FT2_ALLOC_COUNT_MAX
This variable is ignored if `FT2_DEBUG_MEMORY' is not defined. It
allows you to specify a maximum number of memory allocations
performed by FreeType before returning the error
`FT_Err_Out_Of_Memory'. This is useful for debugging and testing
the engine's robustness.
If it is undefined, or if its value is not strictly positive, no
allocation bounds are checked at runtime.
FT2_KEEP_ALIVE
This variable is ignored if `FT2_DEBUG_MEMORY' is not defined.
`Keep alive' means that freed blocks aren't released to the heap.
This is useful to detect double-frees or weird heap corruption,
reporting the source code location of the original allocation and
deallocation in case of a problem. It uses large amounts of
memory, however.
If it is undefined, or if its value is not strictly positive,
freed blocks are released at runtime.
------------------------------------------------------------------------
Copyright (C) 2002-2020 by
David Turner, Robert Wilhelm, and Werner Lemberg.
This file is part of the FreeType project, and may only be used,
modified, and distributed under the terms of the FreeType project
license, LICENSE.TXT. By continuing to use, modify, or distribute this
file you indicate that you have read the license and understand and
accept it fully.
--- end of DEBUG ---

View File

@ -1,298 +0,0 @@
Introduction
------------
Documentation is an extremely important part of any project, and it
helps a lot if it uses consistent syntax and layout.
The documentation for the FreeType library is maintained in header
files in the `include/` directory in the form of code comments. These
comments are extracted and organized by 'docwriter' (previously
'docmaker'). The generated docs can be viewed in the
`docs/reference/site/` directory after running `make refdoc`.
Documentation comments follow a specific structure and format as
described below.
Documentation Structure
-----------------------
The documentation is divided into multiple chapters, which contain
sections relevant to it. The chapter details and sections contained
in them are listed in `include/freetype/ftchapters.h`. Any unlisted
section is added to the 'Miscellaneous' chapter.
Sections may contain sub-sections which consist of properties,
enumerations, and other data types.
Comment Blocks
--------------
Documentation blocks follow a specific format:
/***************************** (should end on column 77)
*
* (1 asterisk, 1 space, then content)
*
*/ (end of block)
To make 'docwriter' recognize a comment block, there must be at least
two asterisks in the first line. As a consequence, you should change
the second asterisk to something else if you want to prevent a comment
block being handled by 'docwriter' (for example, change `/****/` to
`/*#**/`).
Markup Tags
-----------
Markup tags are used to indicate what comes next. The syntax for a
tag is:
@foo:
An `@`, followed by the tag, and then `:`.
Reserved Tags
-------------
There are some keywords that have a special meaning to docwriter.
As a convention, all keywords are written in lowercase.
* `chapter`: Defines a chapter. Usually the title with underscores.
* `sections`: List of sections in the chapter, in order.
* `section`: Defines the start or continuation of a section.
* `title`: Title for a chapter or section. May contain spaces.
* `abstract`: The abstract for a section, visible in the Table of
Contents (TOC).
* `description`: Detailed description of a tag (except chapters),
shown as synopsis.
* `values`: A list of 'values' for the tag. These values are used for
cross-referencing.
Other Tags
----------
Except the ones given above, any other tags will be added as a part of
a subsection. All tags are lowercase by convention.
Public Header Definitions
-------------------------
The public headers for FreeType have their names defined in
`include/freetype/config/ftheader.h`. Any new public header file must
be defined in this file, in the following format:
#define FT_NEWNAME_H <freetype/newname.h>
Where `newname` is the name of the header file.
This macro is combined with the file location of a sub-section and
printed with the object.
Note on code blocks captured after comments
-------------------------------------------
All non-documentation lines after a documentation comment block are
captured to be displayed as the code for the sub-section. To stop
collection, a line with `/* */` should be added.
General Formatting Conventions
------------------------------
* Use two spaces after a full stop ending a sentence.
* Use appropriate uppercasing in titles. Refer
https://english.stackexchange.com/a/34
for more information.
* Do not add trailing parentheses when citing a C function.
Markdown Usage
--------------
All tags, except the ones that define the name and title for a block
support markdown in them. Docwriter uses a markdown parser that
follows rules given in John Gruber's markdown guide:
https://daringfireball.net/projects/markdown/syntax
with a few exceptions and extensions, detailed below. This may also
be referred to as the **FreeType Flavored Markdown**.
Headers
-------
Markdown headers should not be used directly, because these are added
based on section titles, sub-section names, and tags. However, if a
header needs to be added, note the following correspondence to HTML tags:
* Section title on top of the page is `H1`.
* Sub-section titles are `H2`.
* Parts of sub-sections are `H4`.
* Any header added will be visible in the Table of Contents (TOC) of
the page.
Emphasis
--------
* Use `_underscores_` for italics.
* Use `**double asterisks**` for bold.
Although the other notations (double underscore for bold, single
asterisk for italics) are supported, it is recommended to use the
above for consistency.
Note that there may be cases where having two asterisks or underscores
in a line may lead to text being picked up as italics or bold.
Although unintentional, this is correct markdown behavior.
For inline code, wrap the sequence with backticks (see below). This
renders symbols correctly without modifications. If a symbol is
absolutely required outside of an inline code block or code sequence,
escape it with a backslash (like `\*` or `\_`).
Lists
-----
Unordered lists can be created with asterisks:
* Unordered list items can use asterisks.
* Another list item.
Ordered lists start with numbers:
1. This is an ordered list item.
2. Brackets after numbers won't work.
To continue a list over multiple paragraphs, indent them with at least
four spaces. For example:
1. Lorem ipsum dolor sit amet, consectetuer adipiscing elit.
Aliquam hendrerit mi posuere lectus. Vestibulum enim wisi,
viverra nec, fringilla in, laoreet vitae, risus.
Donec sit amet nisl. Aliquam semper ipsum sit amet velit.
Suspendisse id sem consectetuer libero luctus adipiscing.
2. This is the second list item.
This paragraph is not a part of the list.
More information on lists in markdown is available at
https://daringfireball.net/projects/markdown/syntax#list
Cross-references
----------------
Other sub-sections can be linked with the `@` symbol:
@description:
While FreeType's CFF driver doesn't expose API functions by
itself, it is possible to control its behaviour with
@FT_Property_Set and @FT_Property_Get.
If a field in the `values` table of another sub-section is linked, the
link leads to its parent sub-section.
Links and Images
----------------
All URLs are converted to links in the HTML documentation.
Markdown syntax for links and images are fully supported.
Inline Code
-----------
To indicate a span of code, wrap it with backtick quotes (`` ` ``):
Use the `printf()` function.
Cross-references, markdown, and html styling do not work in inline code
sequences.
Code and Syntax Highlighting
----------------------------
Blocks of code are fenced by lines with three back-ticks `` ``` ``
followed by the language name, if any (used for syntax highlighting),
as demonstrated in the following example.
```c
x = y + z;
if ( zookoo == 2 )
{
foobar();
}
```
Note that the indentation of the opening line and the closing line
must be exactly the same. The code sequence itself should have a
larger indentation than the surrounding back-ticks.
Like inline code, markdown and html styling is *not* supported inside
code blocks.
Tables
------
Tables are used to list values, input, and other fields. The FreeType
Flavored Markdown adopts a simple approach to tables with two columns,
or field definition tables.
Field definition names may contain alphanumeric, underscore, and the
`.` characters. This is followed by `::`. The following lines are
the second column of the table. A field definition ends with the
start of another field definition, or a markup tag.
@Input:
pathname ::
A path to the font file.
face_index ::
See @FT_Open_Face for a detailed description of this
parameter.
Non-breaking Space
------------------
A tilde can be used to create a non-breaking space. The example
The encoding value~0 is reserved.
is converted to
The encoding value&nbsp;0 is reserved.
----------------------------------------------------------------------
Copyright (C) 2018-2020 by
Nikhil Ramakrishnan, David Turner, Robert Wilhelm, and Werner Lemberg.
This file is part of the FreeType project, and may only be used,
modified, and distributed under the terms of the FreeType project
license, LICENSE.TXT. By continuing to use, modify, or distribute
this file you indicate that you have read the license and understand
and accept it fully.
--- end of DOCGUIDE ---

View File

@ -1,169 +0,0 @@
The FreeType Project LICENSE
----------------------------
2006-Jan-27
Copyright 1996-2002, 2006 by
David Turner, Robert Wilhelm, and Werner Lemberg
Introduction
============
The FreeType Project is distributed in several archive packages;
some of them may contain, in addition to the FreeType font engine,
various tools and contributions which rely on, or relate to, the
FreeType Project.
This license applies to all files found in such packages, and
which do not fall under their own explicit license. The license
affects thus the FreeType font engine, the test programs,
documentation and makefiles, at the very least.
This license was inspired by the BSD, Artistic, and IJG
(Independent JPEG Group) licenses, which all encourage inclusion
and use of free software in commercial and freeware products
alike. As a consequence, its main points are that:
o We don't promise that this software works. However, we will be
interested in any kind of bug reports. (`as is' distribution)
o You can use this software for whatever you want, in parts or
full form, without having to pay us. (`royalty-free' usage)
o You may not pretend that you wrote this software. If you use
it, or only parts of it, in a program, you must acknowledge
somewhere in your documentation that you have used the
FreeType code. (`credits')
We specifically permit and encourage the inclusion of this
software, with or without modifications, in commercial products.
We disclaim all warranties covering The FreeType Project and
assume no liability related to The FreeType Project.
Finally, many people asked us for a preferred form for a
credit/disclaimer to use in compliance with this license. We thus
encourage you to use the following text:
"""
Portions of this software are copyright © <year> The FreeType
Project (www.freetype.org). All rights reserved.
"""
Please replace <year> with the value from the FreeType version you
actually use.
Legal Terms
===========
0. Definitions
--------------
Throughout this license, the terms `package', `FreeType Project',
and `FreeType archive' refer to the set of files originally
distributed by the authors (David Turner, Robert Wilhelm, and
Werner Lemberg) as the `FreeType Project', be they named as alpha,
beta or final release.
`You' refers to the licensee, or person using the project, where
`using' is a generic term including compiling the project's source
code as well as linking it to form a `program' or `executable'.
This program is referred to as `a program using the FreeType
engine'.
This license applies to all files distributed in the original
FreeType Project, including all source code, binaries and
documentation, unless otherwise stated in the file in its
original, unmodified form as distributed in the original archive.
If you are unsure whether or not a particular file is covered by
this license, you must contact us to verify this.
The FreeType Project is copyright (C) 1996-2000 by David Turner,
Robert Wilhelm, and Werner Lemberg. All rights reserved except as
specified below.
1. No Warranty
--------------
THE FREETYPE PROJECT IS PROVIDED `AS IS' WITHOUT WARRANTY OF ANY
KIND, EITHER EXPRESS OR IMPLIED, INCLUDING, BUT NOT LIMITED TO,
WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
PURPOSE. IN NO EVENT WILL ANY OF THE AUTHORS OR COPYRIGHT HOLDERS
BE LIABLE FOR ANY DAMAGES CAUSED BY THE USE OR THE INABILITY TO
USE, OF THE FREETYPE PROJECT.
2. Redistribution
-----------------
This license grants a worldwide, royalty-free, perpetual and
irrevocable right and license to use, execute, perform, compile,
display, copy, create derivative works of, distribute and
sublicense the FreeType Project (in both source and object code
forms) and derivative works thereof for any purpose; and to
authorize others to exercise some or all of the rights granted
herein, subject to the following conditions:
o Redistribution of source code must retain this license file
(`FTL.TXT') unaltered; any additions, deletions or changes to
the original files must be clearly indicated in accompanying
documentation. The copyright notices of the unaltered,
original files must be preserved in all copies of source
files.
o Redistribution in binary form must provide a disclaimer that
states that the software is based in part of the work of the
FreeType Team, in the distribution documentation. We also
encourage you to put an URL to the FreeType web page in your
documentation, though this isn't mandatory.
These conditions apply to any software derived from or based on
the FreeType Project, not just the unmodified files. If you use
our work, you must acknowledge us. However, no fee need be paid
to us.
3. Advertising
--------------
Neither the FreeType authors and contributors nor you shall use
the name of the other for commercial, advertising, or promotional
purposes without specific prior written permission.
We suggest, but do not require, that you use one or more of the
following phrases to refer to this software in your documentation
or advertising materials: `FreeType Project', `FreeType Engine',
`FreeType library', or `FreeType Distribution'.
As you have not signed this license, you are not required to
accept it. However, as the FreeType Project is copyrighted
material, only this license, or another one contracted with the
authors, grants you the right to use, distribute, and modify it.
Therefore, by using, distributing, or modifying the FreeType
Project, you indicate that you understand and accept all the terms
of this license.
4. Contacts
-----------
There are two mailing lists related to FreeType:
o freetype@nongnu.org
Discusses general use and applications of FreeType, as well as
future and wanted additions to the library and distribution.
If you are looking for support, start in this list if you
haven't found anything to help you in the documentation.
o freetype-devel@nongnu.org
Discusses bugs, as well as engine internals, design issues,
specific licenses, porting, etc.
Our home page can be found at
https://www.freetype.org
--- end of FTL.TXT ---

View File

@ -1,340 +0,0 @@
GNU GENERAL PUBLIC LICENSE
Version 2, June 1991
Copyright (C) 1989, 1991 Free Software Foundation, Inc.
51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
Everyone is permitted to copy and distribute verbatim copies
of this license document, but changing it is not allowed.
Preamble
The licenses for most software are designed to take away your
freedom to share and change it. By contrast, the GNU General Public
License is intended to guarantee your freedom to share and change free
software--to make sure the software is free for all its users. This
General Public License applies to most of the Free Software
Foundation's software and to any other program whose authors commit to
using it. (Some other Free Software Foundation software is covered by
the GNU Library General Public License instead.) You can apply it to
your programs, too.
When we speak of free software, we are referring to freedom, not
price. Our General Public Licenses are designed to make sure that you
have the freedom to distribute copies of free software (and charge for
this service if you wish), that you receive source code or can get it
if you want it, that you can change the software or use pieces of it
in new free programs; and that you know you can do these things.
To protect your rights, we need to make restrictions that forbid
anyone to deny you these rights or to ask you to surrender the rights.
These restrictions translate to certain responsibilities for you if you
distribute copies of the software, or if you modify it.
For example, if you distribute copies of such a program, whether
gratis or for a fee, you must give the recipients all the rights that
you have. You must make sure that they, too, receive or can get the
source code. And you must show them these terms so they know their
rights.
We protect your rights with two steps: (1) copyright the software, and
(2) offer you this license which gives you legal permission to copy,
distribute and/or modify the software.
Also, for each author's protection and ours, we want to make certain
that everyone understands that there is no warranty for this free
software. If the software is modified by someone else and passed on, we
want its recipients to know that what they have is not the original, so
that any problems introduced by others will not reflect on the original
authors' reputations.
Finally, any free program is threatened constantly by software
patents. We wish to avoid the danger that redistributors of a free
program will individually obtain patent licenses, in effect making the
program proprietary. To prevent this, we have made it clear that any
patent must be licensed for everyone's free use or not licensed at all.
The precise terms and conditions for copying, distribution and
modification follow.
GNU GENERAL PUBLIC LICENSE
TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
0. This License applies to any program or other work which contains
a notice placed by the copyright holder saying it may be distributed
under the terms of this General Public License. The "Program", below,
refers to any such program or work, and a "work based on the Program"
means either the Program or any derivative work under copyright law:
that is to say, a work containing the Program or a portion of it,
either verbatim or with modifications and/or translated into another
language. (Hereinafter, translation is included without limitation in
the term "modification".) Each licensee is addressed as "you".
Activities other than copying, distribution and modification are not
covered by this License; they are outside its scope. The act of
running the Program is not restricted, and the output from the Program
is covered only if its contents constitute a work based on the
Program (independent of having been made by running the Program).
Whether that is true depends on what the Program does.
1. You may copy and distribute verbatim copies of the Program's
source code as you receive it, in any medium, provided that you
conspicuously and appropriately publish on each copy an appropriate
copyright notice and disclaimer of warranty; keep intact all the
notices that refer to this License and to the absence of any warranty;
and give any other recipients of the Program a copy of this License
along with the Program.
You may charge a fee for the physical act of transferring a copy, and
you may at your option offer warranty protection in exchange for a fee.
2. You may modify your copy or copies of the Program or any portion
of it, thus forming a work based on the Program, and copy and
distribute such modifications or work under the terms of Section 1
above, provided that you also meet all of these conditions:
a) You must cause the modified files to carry prominent notices
stating that you changed the files and the date of any change.
b) You must cause any work that you distribute or publish, that in
whole or in part contains or is derived from the Program or any
part thereof, to be licensed as a whole at no charge to all third
parties under the terms of this License.
c) If the modified program normally reads commands interactively
when run, you must cause it, when started running for such
interactive use in the most ordinary way, to print or display an
announcement including an appropriate copyright notice and a
notice that there is no warranty (or else, saying that you provide
a warranty) and that users may redistribute the program under
these conditions, and telling the user how to view a copy of this
License. (Exception: if the Program itself is interactive but
does not normally print such an announcement, your work based on
the Program is not required to print an announcement.)
These requirements apply to the modified work as a whole. If
identifiable sections of that work are not derived from the Program,
and can be reasonably considered independent and separate works in
themselves, then this License, and its terms, do not apply to those
sections when you distribute them as separate works. But when you
distribute the same sections as part of a whole which is a work based
on the Program, the distribution of the whole must be on the terms of
this License, whose permissions for other licensees extend to the
entire whole, and thus to each and every part regardless of who wrote it.
Thus, it is not the intent of this section to claim rights or contest
your rights to work written entirely by you; rather, the intent is to
exercise the right to control the distribution of derivative or
collective works based on the Program.
In addition, mere aggregation of another work not based on the Program
with the Program (or with a work based on the Program) on a volume of
a storage or distribution medium does not bring the other work under
the scope of this License.
3. You may copy and distribute the Program (or a work based on it,
under Section 2) in object code or executable form under the terms of
Sections 1 and 2 above provided that you also do one of the following:
a) Accompany it with the complete corresponding machine-readable
source code, which must be distributed under the terms of Sections
1 and 2 above on a medium customarily used for software interchange; or,
b) Accompany it with a written offer, valid for at least three
years, to give any third party, for a charge no more than your
cost of physically performing source distribution, a complete
machine-readable copy of the corresponding source code, to be
distributed under the terms of Sections 1 and 2 above on a medium
customarily used for software interchange; or,
c) Accompany it with the information you received as to the offer
to distribute corresponding source code. (This alternative is
allowed only for noncommercial distribution and only if you
received the program in object code or executable form with such
an offer, in accord with Subsection b above.)
The source code for a work means the preferred form of the work for
making modifications to it. For an executable work, complete source
code means all the source code for all modules it contains, plus any
associated interface definition files, plus the scripts used to
control compilation and installation of the executable. However, as a
special exception, the source code distributed need not include
anything that is normally distributed (in either source or binary
form) with the major components (compiler, kernel, and so on) of the
operating system on which the executable runs, unless that component
itself accompanies the executable.
If distribution of executable or object code is made by offering
access to copy from a designated place, then offering equivalent
access to copy the source code from the same place counts as
distribution of the source code, even though third parties are not
compelled to copy the source along with the object code.
4. You may not copy, modify, sublicense, or distribute the Program
except as expressly provided under this License. Any attempt
otherwise to copy, modify, sublicense or distribute the Program is
void, and will automatically terminate your rights under this License.
However, parties who have received copies, or rights, from you under
this License will not have their licenses terminated so long as such
parties remain in full compliance.
5. You are not required to accept this License, since you have not
signed it. However, nothing else grants you permission to modify or
distribute the Program or its derivative works. These actions are
prohibited by law if you do not accept this License. Therefore, by
modifying or distributing the Program (or any work based on the
Program), you indicate your acceptance of this License to do so, and
all its terms and conditions for copying, distributing or modifying
the Program or works based on it.
6. Each time you redistribute the Program (or any work based on the
Program), the recipient automatically receives a license from the
original licensor to copy, distribute or modify the Program subject to
these terms and conditions. You may not impose any further
restrictions on the recipients' exercise of the rights granted herein.
You are not responsible for enforcing compliance by third parties to
this License.
7. If, as a consequence of a court judgment or allegation of patent
infringement or for any other reason (not limited to patent issues),
conditions are imposed on you (whether by court order, agreement or
otherwise) that contradict the conditions of this License, they do not
excuse you from the conditions of this License. If you cannot
distribute so as to satisfy simultaneously your obligations under this
License and any other pertinent obligations, then as a consequence you
may not distribute the Program at all. For example, if a patent
license would not permit royalty-free redistribution of the Program by
all those who receive copies directly or indirectly through you, then
the only way you could satisfy both it and this License would be to
refrain entirely from distribution of the Program.
If any portion of this section is held invalid or unenforceable under
any particular circumstance, the balance of the section is intended to
apply and the section as a whole is intended to apply in other
circumstances.
It is not the purpose of this section to induce you to infringe any
patents or other property right claims or to contest validity of any
such claims; this section has the sole purpose of protecting the
integrity of the free software distribution system, which is
implemented by public license practices. Many people have made
generous contributions to the wide range of software distributed
through that system in reliance on consistent application of that
system; it is up to the author/donor to decide if he or she is willing
to distribute software through any other system and a licensee cannot
impose that choice.
This section is intended to make thoroughly clear what is believed to
be a consequence of the rest of this License.
8. If the distribution and/or use of the Program is restricted in
certain countries either by patents or by copyrighted interfaces, the
original copyright holder who places the Program under this License
may add an explicit geographical distribution limitation excluding
those countries, so that distribution is permitted only in or among
countries not thus excluded. In such case, this License incorporates
the limitation as if written in the body of this License.
9. The Free Software Foundation may publish revised and/or new versions
of the General Public License from time to time. Such new versions will
be similar in spirit to the present version, but may differ in detail to
address new problems or concerns.
Each version is given a distinguishing version number. If the Program
specifies a version number of this License which applies to it and "any
later version", you have the option of following the terms and conditions
either of that version or of any later version published by the Free
Software Foundation. If the Program does not specify a version number of
this License, you may choose any version ever published by the Free Software
Foundation.
10. If you wish to incorporate parts of the Program into other free
programs whose distribution conditions are different, write to the author
to ask for permission. For software which is copyrighted by the Free
Software Foundation, write to the Free Software Foundation; we sometimes
make exceptions for this. Our decision will be guided by the two goals
of preserving the free status of all derivatives of our free software and
of promoting the sharing and reuse of software generally.
NO WARRANTY
11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY
FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN
OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES
PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED
OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS
TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE
PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING,
REPAIR OR CORRECTION.
12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR
REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES,
INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING
OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED
TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY
YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER
PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE
POSSIBILITY OF SUCH DAMAGES.
END OF TERMS AND CONDITIONS
How to Apply These Terms to Your New Programs
If you develop a new program, and you want it to be of the greatest
possible use to the public, the best way to achieve this is to make it
free software which everyone can redistribute and change under these terms.
To do so, attach the following notices to the program. It is safest
to attach them to the start of each source file to most effectively
convey the exclusion of warranty; and each file should have at least
the "copyright" line and a pointer to where the full notice is found.
<one line to give the program's name and a brief idea of what it does.>
Copyright (C) <year> <name of author>
This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation; either version 2 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program; if not, write to the Free Software
Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
Also add information on how to contact you by electronic and paper mail.
If the program is interactive, make it output a short notice like this
when it starts in an interactive mode:
Gnomovision version 69, Copyright (C) year name of author
Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
This is free software, and you are welcome to redistribute it
under certain conditions; type `show c' for details.
The hypothetical commands `show w' and `show c' should show the appropriate
parts of the General Public License. Of course, the commands you use may
be called something other than `show w' and `show c'; they could even be
mouse-clicks or menu items--whatever suits your program.
You should also get your employer (if you work as a programmer) or your
school, if any, to sign a "copyright disclaimer" for the program, if
necessary. Here is a sample; alter the names:
Yoyodyne, Inc., hereby disclaims all copyright interest in the program
`Gnomovision' (which makes passes at compilers) written by James Hacker.
<signature of Ty Coon>, 1 April 1989
Ty Coon, President of Vice
This General Public License does not permit incorporating your program into
proprietary programs. If your program is a subroutine library, you may
consider it more useful to permit linking proprietary applications with the
library. If this is what you want to do, use the GNU Library General
Public License instead of this License.

Some files were not shown because too many files have changed in this diff Show More