diff --git a/.vscode/settings.json b/.vscode/settings.json new file mode 100644 index 00000000..a0691856 --- /dev/null +++ b/.vscode/settings.json @@ -0,0 +1,5 @@ +{ + "files.associations": { + "lv_style.h": "c" + } +} \ No newline at end of file diff --git a/lvgl/README.md b/lvgl/README.md new file mode 100644 index 00000000..363ed961 --- /dev/null +++ b/lvgl/README.md @@ -0,0 +1,100 @@ +# LVGL Go Bindings + +This package provides Go bindings for the LVGL graphics library, allowing you to create embedded GUI applications using Go. + +## Prerequisites + +Before using these bindings, you need to install the required dependencies: + +1. Install SDL2 (for simulator support): + ```bash + # macOS + brew install sdl2 + + # Ubuntu/Debian + sudo apt-get install libsdl2-dev + + # Fedora + sudo dnf install SDL2-devel + ``` + +## Installation + +1. Clone the LVGL C library: + ```bash + mkdir ext + cd ext/ + git clone git@github.com:lvgl/lvgl.git + cd ../ + ``` + +2. Build the LVGL library: + ```bash + sh scripts/build_lvgl.sh + ``` + +## Usage + +Here's a simple example of how to use the LVGL Go bindings: + +```go +package main + +import ( + "github.com/yourusername/llgo/c/lvgl/display" + "github.com/yourusername/llgo/c/lvgl/widgets" + "time" +) + +func main() { + // Initialize display + disp := display.LvDisplayCreate(800, 480) + display.LvDisplaySetDefault(disp) + + // Create a label + label := widgets.LvLabelCreate(display.LvScreenActive()) + widgets.LvLabelSetText(label, "Hello, LVGL from Go!") + + // Main loop + for { + // Handle LVGL tasks + // ... + time.Sleep(10 * time.Millisecond) + } +} +``` + +## API Documentation + +The Go bindings follow the same API structure as the original LVGL C library, with the following naming conventions: + +- C function `lv_display_create` becomes Go function `display.LvDisplayCreate` +- C function `lv_label_set_text` becomes Go function `widgets.LvLabelSetText` + +For detailed API documentation, refer to the [LVGL documentation](https://docs.lvgl.io/). + +## Building for Different Platforms + +### Desktop Simulator + +The default build targets the desktop simulator using SDL2, which is useful for development and testing. + +### Embedded Targets + +To build for embedded targets, you'll need to: + +1. Set up the appropriate cross-compiler for your target platform +2. Modify the build scripts to use the cross-compiler +3. Implement the appropriate display and input drivers for your hardware + +## Contributing + +Contributions to improve these Go bindings are welcome! Please feel free to submit issues and pull requests. + +## License + +This project is licensed under the MIT License - see the LICENSE file for details. + + + + diff --git a/lvgl/_demo/example/assert/img_cogwheel_argb.go b/lvgl/_demo/example/assert/img_cogwheel_argb.go new file mode 100644 index 00000000..3186ecdd --- /dev/null +++ b/lvgl/_demo/example/assert/img_cogwheel_argb.go @@ -0,0 +1,129 @@ +package assert + +import ( + "unsafe" + + "github.com/goplus/llgo/c" + "github.com/goplus/llpkg/lvgl/core" +) + +var imgCogwheelARGBMap = [...]uint8{ + + 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xfb, 0xfa, 0xf9, 0x08, 0xad, 0x9b, 0x8f, 0xff, 0x95, 0x7e, 0x6d, 0xff, 0x90, 0x7a, 0x67, 0xff, 0x92, 0x7c, 0x69, 0xff, 0x91, 0x7b, 0x69, 0xff, 0x8c, 0x75, 0x63, 0xff, 0x97, 0x83, 0x72, 0xff, 0xd1, 0xc8, 0xc0, 0x6c, 0xfe, 0xfe, 0xfe, 0x03, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, + 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xf4, 0xf2, 0xf1, 0x10, 0x9e, 0x8a, 0x79, 0xff, 0x8f, 0x78, 0x65, 0xff, 0x90, 0x79, 0x66, 0xff, 0x91, 0x7a, 0x67, 0xff, 0x8f, 0x79, 0x66, 0xff, 0x8c, 0x75, 0x63, 0xff, 0x8c, 0x76, 0x64, 0xff, 0x9f, 0x8c, 0x7d, 0xff, 0xf8, 0xf7, 0xf6, 0x08, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xfc, 0xfc, 0xfb, 0x08, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, + 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xf9, 0xf7, 0xf6, 0x0c, 0xf5, 0xf2, 0xf1, 0x0f, 0xfd, 0xfc, 0xfc, 0x04, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xe5, 0xdf, 0xdb, 0x38, 0x9a, 0x85, 0x74, 0xff, 0x90, 0x79, 0x66, 0xff, 0x94, 0x7e, 0x6c, 0xff, 0x95, 0x7f, 0x6d, 0xff, 0x94, 0x7e, 0x6c, 0xff, 0x92, 0x7c, 0x6b, 0xff, 0x8c, 0x76, 0x63, 0xff, 0x95, 0x7f, 0x6e, 0xff, 0xf9, 0xf8, 0xf7, 0x07, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0xcb, 0xc2, 0xba, 0x53, 0xae, 0xa2, 0x96, 0xff, 0xdf, 0xda, 0xd6, 0x28, 0xf9, 0xf8, 0xf8, 0x07, 0xf9, 0xf8, 0xf7, 0x0b, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, + 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xfe, 0xfe, 0xfe, 0x07, 0xfa, 0xf9, 0xf8, 0x0c, 0xe7, 0xe1, 0xdc, 0x2b, 0xaf, 0x9a, 0x8b, 0xff, 0x9d, 0x85, 0x73, 0xff, 0xb9, 0xa8, 0x9b, 0xa4, 0xfd, 0xfd, 0xfc, 0x0b, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xdf, 0xd9, 0xd4, 0x4b, 0x9d, 0x88, 0x77, 0xff, 0x91, 0x7a, 0x68, 0xff, 0x95, 0x7f, 0x6d, 0xff, 0x96, 0x80, 0x6e, 0xff, 0x95, 0x7f, 0x6d, 0xff, 0x93, 0x7e, 0x6c, 0xff, 0x8d, 0x78, 0x65, 0xff, 0x95, 0x80, 0x6f, 0xff, 0xde, 0xd9, 0xd5, 0x2c, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xc7, 0xbe, 0xb5, 0x50, 0x87, 0x74, 0x61, 0xff, 0x85, 0x73, 0x60, 0xff, 0x82, 0x70, 0x5e, 0xff, 0x90, 0x80, 0x6f, 0xff, 0xa7, 0x9a, 0x8c, 0xff, 0xe1, 0xdc, 0xd8, 0x28, 0xfa, 0xfa, 0xf9, 0x08, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, + 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xfc, 0xfb, 0xfa, 0x0c, 0xce, 0xc0, 0xb7, 0x8c, 0xad, 0x97, 0x87, 0xff, 0xa7, 0x90, 0x7f, 0xff, 0xa2, 0x8a, 0x78, 0xff, 0x9c, 0x83, 0x71, 0xff, 0xa0, 0x89, 0x77, 0xff, 0xc1, 0xb2, 0xa6, 0x98, 0xfd, 0xfc, 0xfc, 0x07, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xfd, 0xfd, 0xfd, 0x04, 0xc4, 0xb7, 0xad, 0xab, 0x9c, 0x88, 0x77, 0xff, 0x92, 0x7c, 0x69, 0xff, 0x95, 0x7f, 0x6d, 0xff, 0x95, 0x7f, 0x6d, 0xff, 0x95, 0x7e, 0x6c, 0xff, 0x93, 0x7e, 0x6c, 0xff, 0x90, 0x79, 0x67, 0xfb, 0x92, 0x7e, 0x6e, 0xff, 0x9f, 0x92, 0x89, 0xff, 0xfa, 0xf9, 0xf9, 0x04, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xea, 0xe7, 0xe4, 0x20, 0x9c, 0x8b, 0x7c, 0xff, 0x82, 0x6e, 0x5b, 0xff, 0x81, 0x6e, 0x5a, 0xfb, 0x82, 0x70, 0x5d, 0xff, 0x85, 0x73, 0x61, 0xff, 0x89, 0x77, 0x65, 0xff, 0x8f, 0x7f, 0x6e, 0xff, 0x9c, 0x8e, 0x7f, 0xff, 0xf9, 0xf8, 0xf7, 0x0b, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, + 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xfe, 0xfe, 0xfe, 0x07, 0xc5, 0xb4, 0xa9, 0xb3, 0xa6, 0x8d, 0x7b, 0xff, 0x9d, 0x82, 0x6f, 0xff, 0x9f, 0x85, 0x72, 0xff, 0x9f, 0x87, 0x75, 0xff, 0xa0, 0x89, 0x77, 0xfc, 0x9b, 0x82, 0x6f, 0xff, 0xa5, 0x8e, 0x7d, 0xff, 0xed, 0xe8, 0xe5, 0x1b, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xfb, 0xfa, 0xfa, 0x04, 0xad, 0x9b, 0x8d, 0xff, 0x9a, 0x84, 0x73, 0xff, 0x94, 0x7d, 0x6a, 0xff, 0x95, 0x80, 0x6d, 0xff, 0x95, 0x7e, 0x6c, 0xff, 0x95, 0x7e, 0x6c, 0xff, 0x93, 0x7e, 0x6c, 0xff, 0x92, 0x7c, 0x69, 0xff, 0x91, 0x7c, 0x6c, 0xff, 0x92, 0x82, 0x79, 0xff, 0xf9, 0xf9, 0xf9, 0x04, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xfd, 0xfc, 0xfc, 0x04, 0xaf, 0xa2, 0x96, 0xd7, 0x8a, 0x77, 0x65, 0xff, 0x88, 0x73, 0x61, 0xff, 0x88, 0x75, 0x63, 0xff, 0x87, 0x75, 0x63, 0xff, 0x84, 0x72, 0x60, 0xfb, 0x81, 0x6e, 0x5b, 0xff, 0x7c, 0x69, 0x56, 0xff, 0x82, 0x6f, 0x5d, 0xff, 0xeb, 0xe8, 0xe5, 0x23, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, + 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xf6, 0xf4, 0xf2, 0x24, 0xaf, 0x99, 0x89, 0xff, 0xa0, 0x84, 0x72, 0xff, 0xa4, 0x89, 0x78, 0xff, 0xa3, 0x8a, 0x79, 0xff, 0xa2, 0x8a, 0x78, 0xff, 0xa2, 0x8a, 0x78, 0xff, 0x9e, 0x85, 0x73, 0xff, 0xa0, 0x87, 0x76, 0xff, 0xc1, 0xb2, 0xa7, 0x6b, 0xfe, 0xfe, 0xfe, 0x03, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xfc, 0xfb, 0xfb, 0x03, 0xa5, 0x91, 0x82, 0xff, 0x99, 0x83, 0x71, 0xff, 0x94, 0x7e, 0x6c, 0xff, 0x95, 0x80, 0x6e, 0xff, 0x95, 0x7f, 0x6d, 0xff, 0x95, 0x7e, 0x6d, 0xff, 0x94, 0x7e, 0x6c, 0xff, 0x93, 0x7d, 0x6a, 0xff, 0x90, 0x7b, 0x6a, 0xff, 0x8e, 0x7e, 0x74, 0xfb, 0xfa, 0xfa, 0xfa, 0x04, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xf3, 0xf1, 0xf0, 0x10, 0x94, 0x83, 0x72, 0xff, 0x84, 0x6e, 0x5b, 0xff, 0x8a, 0x76, 0x64, 0xff, 0x89, 0x76, 0x63, 0xff, 0x87, 0x75, 0x62, 0xff, 0x86, 0x74, 0x62, 0xff, 0x86, 0x74, 0x62, 0xff, 0x7f, 0x6c, 0x59, 0xff, 0x83, 0x70, 0x5e, 0xff, 0xcb, 0xc3, 0xbc, 0x67, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, + 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xfc, 0xfb, 0xfb, 0x0b, 0xb4, 0x9f, 0x92, 0xc4, 0xa2, 0x88, 0x77, 0xff, 0xa4, 0x8a, 0x79, 0xff, 0xa5, 0x8b, 0x79, 0xff, 0xa3, 0x8a, 0x78, 0xff, 0xa2, 0x8a, 0x78, 0xff, 0xa1, 0x88, 0x77, 0xff, 0x9e, 0x86, 0x73, 0xff, 0x9f, 0x89, 0x77, 0xff, 0xe2, 0xdb, 0xd6, 0x2b, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xf9, 0xf8, 0xf7, 0x08, 0xa1, 0x8c, 0x7c, 0xff, 0x96, 0x80, 0x6e, 0xff, 0x95, 0x7f, 0x6d, 0xff, 0x95, 0x7f, 0x6d, 0xff, 0x95, 0x7f, 0x6d, 0xff, 0x95, 0x7f, 0x6d, 0xff, 0x94, 0x7f, 0x6d, 0xff, 0x93, 0x7d, 0x6b, 0xff, 0x8e, 0x79, 0x68, 0xff, 0x8e, 0x7d, 0x72, 0xff, 0xce, 0xc9, 0xc6, 0x40, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0xbe, 0xb4, 0xaa, 0x7c, 0x90, 0x7d, 0x6b, 0xff, 0x88, 0x73, 0x60, 0xff, 0x8a, 0x77, 0x64, 0xff, 0x89, 0x76, 0x63, 0xff, 0x87, 0x74, 0x62, 0xff, 0x86, 0x74, 0x62, 0xff, 0x86, 0x74, 0x62, 0xff, 0x81, 0x6f, 0x5c, 0xff, 0x87, 0x76, 0x66, 0xff, 0xab, 0xa1, 0x99, 0xd4, 0xfe, 0xfe, 0xfe, 0x03, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, + 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xba, 0xa7, 0x99, 0xa3, 0xa4, 0x8a, 0x79, 0xff, 0xa4, 0x89, 0x78, 0xff, 0xa5, 0x8b, 0x79, 0xff, 0xa3, 0x8a, 0x78, 0xff, 0xa1, 0x8a, 0x77, 0xff, 0xa1, 0x89, 0x77, 0xff, 0x9f, 0x87, 0x75, 0xff, 0x9a, 0x81, 0x6e, 0xff, 0xb4, 0xa2, 0x96, 0xbf, 0xfa, 0xf9, 0xf9, 0x0f, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xfd, 0xfd, 0xfc, 0x07, 0xe1, 0xda, 0xd6, 0x2c, 0xbd, 0xaf, 0xa3, 0x83, 0x99, 0x83, 0x72, 0xff, 0x95, 0x7f, 0x6d, 0xff, 0x96, 0x80, 0x6e, 0xff, 0x96, 0x80, 0x6e, 0xff, 0x96, 0x80, 0x6e, 0xff, 0x95, 0x7f, 0x6d, 0xff, 0x95, 0x7f, 0x6c, 0xff, 0x93, 0x7d, 0x6c, 0xff, 0x8f, 0x7a, 0x69, 0xfb, 0x8f, 0x7a, 0x6b, 0xff, 0x9a, 0x89, 0x7d, 0xff, 0xcd, 0xc5, 0xbe, 0x47, 0xfd, 0xfd, 0xfd, 0x04, 0xff, 0xff, 0xff, 0x00, 0xda, 0xd4, 0xce, 0x30, 0x92, 0x80, 0x6f, 0xff, 0x8a, 0x75, 0x63, 0xff, 0x8b, 0x77, 0x65, 0xfb, 0x8b, 0x77, 0x65, 0xff, 0x89, 0x75, 0x64, 0xff, 0x87, 0x74, 0x62, 0xff, 0x86, 0x74, 0x62, 0xff, 0x86, 0x73, 0x61, 0xff, 0x81, 0x6f, 0x5d, 0xfb, 0x86, 0x77, 0x6b, 0xff, 0xa5, 0x9c, 0x98, 0xdc, 0xfe, 0xfe, 0xfe, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, + 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0xbb, 0xa7, 0x99, 0xbb, 0xa3, 0x8a, 0x78, 0xff, 0xa3, 0x89, 0x77, 0xfc, 0xa5, 0x8c, 0x7a, 0xff, 0xa4, 0x8b, 0x78, 0xff, 0xa2, 0x8a, 0x78, 0xff, 0xa1, 0x88, 0x77, 0xff, 0xa0, 0x88, 0x76, 0xff, 0x9f, 0x86, 0x74, 0xff, 0xa1, 0x8a, 0x79, 0xff, 0xb7, 0xa6, 0x9a, 0xa8, 0xd5, 0xcb, 0xc4, 0x3b, 0xd4, 0xca, 0xc2, 0x34, 0xcd, 0xc2, 0xb9, 0x4f, 0xbc, 0xad, 0xa1, 0xac, 0xa6, 0x93, 0x83, 0xff, 0x9a, 0x84, 0x72, 0xff, 0x96, 0x7f, 0x6e, 0xfb, 0x97, 0x80, 0x6f, 0xfb, 0x96, 0x80, 0x6f, 0xff, 0x96, 0x80, 0x6e, 0xff, 0x96, 0x80, 0x6e, 0xff, 0x96, 0x80, 0x6e, 0xff, 0x94, 0x7e, 0x6d, 0xff, 0x93, 0x7d, 0x6c, 0xff, 0x92, 0x7c, 0x6b, 0xff, 0x90, 0x7b, 0x69, 0xf7, 0x90, 0x7a, 0x68, 0xff, 0x9c, 0x89, 0x7b, 0xff, 0xb2, 0xa4, 0x99, 0xa8, 0xc3, 0xb9, 0xaf, 0x58, 0x9f, 0x8f, 0x7f, 0xff, 0x89, 0x75, 0x62, 0xff, 0x88, 0x74, 0x61, 0xfb, 0x8c, 0x78, 0x66, 0xff, 0x8b, 0x77, 0x65, 0xff, 0x89, 0x76, 0x64, 0xff, 0x87, 0x75, 0x63, 0xff, 0x86, 0x74, 0x62, 0xff, 0x86, 0x74, 0x60, 0xff, 0x82, 0x6f, 0x5d, 0xff, 0x86, 0x78, 0x6f, 0xff, 0xac, 0xa4, 0xa3, 0xc7, 0xfe, 0xfe, 0xfe, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, + 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xd0, 0xc2, 0xb8, 0x7f, 0xa9, 0x90, 0x7f, 0xff, 0xa2, 0x88, 0x76, 0xff, 0xa5, 0x8b, 0x79, 0xff, 0xa4, 0x8b, 0x79, 0xff, 0xa3, 0x8a, 0x79, 0xff, 0xa2, 0x88, 0x78, 0xff, 0xa1, 0x88, 0x77, 0xff, 0xa0, 0x88, 0x76, 0xfb, 0x9e, 0x85, 0x74, 0xf7, 0x9c, 0x84, 0x71, 0xff, 0x9e, 0x86, 0x75, 0xff, 0x9e, 0x87, 0x75, 0xff, 0x9a, 0x83, 0x70, 0xff, 0x97, 0x7f, 0x6c, 0xff, 0x97, 0x81, 0x6e, 0xf7, 0x99, 0x82, 0x71, 0xf7, 0x98, 0x81, 0x70, 0xff, 0x97, 0x80, 0x6f, 0xff, 0x97, 0x80, 0x6f, 0xff, 0x96, 0x80, 0x6e, 0xff, 0x96, 0x80, 0x6e, 0xff, 0x96, 0x80, 0x6d, 0xff, 0x94, 0x7e, 0x6d, 0xff, 0x93, 0x7e, 0x6d, 0xff, 0x92, 0x7d, 0x6c, 0xff, 0x91, 0x7c, 0x6b, 0xff, 0x90, 0x7a, 0x69, 0xfb, 0x8e, 0x78, 0x66, 0xf3, 0x8c, 0x76, 0x64, 0xff, 0x8c, 0x78, 0x66, 0xff, 0x8a, 0x76, 0x63, 0xff, 0x8c, 0x7a, 0x67, 0xf7, 0x8c, 0x79, 0x66, 0xff, 0x8b, 0x78, 0x65, 0xff, 0x8b, 0x76, 0x65, 0xff, 0x89, 0x76, 0x64, 0xff, 0x87, 0x76, 0x64, 0xff, 0x86, 0x74, 0x62, 0xff, 0x86, 0x74, 0x60, 0xff, 0x82, 0x70, 0x5e, 0xff, 0x84, 0x77, 0x71, 0xff, 0xd7, 0xd4, 0xd4, 0x3c, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, + 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xfb, 0xfa, 0xf9, 0x08, 0xb5, 0xa0, 0x92, 0xdb, 0xa4, 0x8b, 0x7a, 0xff, 0xa4, 0x8a, 0x78, 0xff, 0xa5, 0x8b, 0x7a, 0xff, 0xa3, 0x8a, 0x78, 0xff, 0xa1, 0x89, 0x77, 0xff, 0xa0, 0x88, 0x76, 0xff, 0x9f, 0x87, 0x76, 0xff, 0x9f, 0x87, 0x75, 0xff, 0x9e, 0x85, 0x74, 0xf7, 0x9b, 0x82, 0x70, 0xf3, 0x9a, 0x83, 0x6f, 0xf0, 0x9a, 0x83, 0x70, 0xf3, 0x99, 0x82, 0x70, 0xf7, 0x99, 0x82, 0x70, 0xff, 0x9a, 0x83, 0x71, 0xff, 0x98, 0x82, 0x70, 0xff, 0x97, 0x80, 0x6f, 0xff, 0x97, 0x80, 0x6f, 0xff, 0x96, 0x80, 0x6e, 0xff, 0x96, 0x80, 0x6e, 0xff, 0x96, 0x80, 0x6e, 0xff, 0x94, 0x7e, 0x6c, 0xff, 0x93, 0x7e, 0x6c, 0xff, 0x92, 0x7e, 0x6c, 0xff, 0x91, 0x7b, 0x6b, 0xff, 0x90, 0x7a, 0x69, 0xff, 0x8f, 0x79, 0x68, 0xff, 0x8d, 0x78, 0x67, 0xf7, 0x8c, 0x76, 0x65, 0xf3, 0x8c, 0x77, 0x65, 0xff, 0x8d, 0x79, 0x67, 0xff, 0x8c, 0x78, 0x66, 0xff, 0x8c, 0x78, 0x65, 0xff, 0x8b, 0x76, 0x64, 0xff, 0x89, 0x76, 0x64, 0xff, 0x88, 0x75, 0x64, 0xff, 0x86, 0x74, 0x62, 0xff, 0x86, 0x74, 0x5f, 0xff, 0x83, 0x73, 0x62, 0xff, 0x81, 0x76, 0x73, 0xe4, 0xfb, 0xfb, 0xfb, 0x03, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xea, 0xe7, 0xe4, 0x17, 0xa7, 0x9d, 0x90, 0x94, 0xdf, 0xdb, 0xd7, 0x2f, 0xff, 0xff, 0xff, 0x03, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, + 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xfd, 0xfd, 0xfd, 0x04, 0xea, 0xe3, 0xde, 0x4b, 0xf8, 0xf5, 0xf4, 0x1c, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xcd, 0xbe, 0xb4, 0x88, 0xa7, 0x8e, 0x7c, 0xff, 0xa2, 0x87, 0x76, 0xff, 0xa5, 0x8a, 0x7a, 0xff, 0xa3, 0x8a, 0x79, 0xff, 0xa1, 0x8a, 0x77, 0xff, 0xa0, 0x89, 0x76, 0xff, 0x9f, 0x87, 0x75, 0xff, 0x9f, 0x87, 0x75, 0xff, 0xa0, 0x88, 0x76, 0xff, 0x9f, 0x87, 0x75, 0xff, 0x9d, 0x86, 0x73, 0xff, 0x9c, 0x86, 0x73, 0xff, 0x9b, 0x85, 0x73, 0xff, 0x9a, 0x83, 0x72, 0xff, 0x99, 0x83, 0x71, 0xff, 0x98, 0x82, 0x70, 0xff, 0x98, 0x80, 0x70, 0xff, 0x98, 0x80, 0x70, 0xff, 0x97, 0x80, 0x6f, 0xff, 0x96, 0x80, 0x6e, 0xff, 0x96, 0x80, 0x6e, 0xff, 0x94, 0x7e, 0x6c, 0xff, 0x93, 0x7e, 0x6c, 0xff, 0x92, 0x7e, 0x6c, 0xff, 0x91, 0x7b, 0x6a, 0xff, 0x90, 0x7a, 0x69, 0xff, 0x90, 0x7a, 0x6a, 0xff, 0x90, 0x7b, 0x6a, 0xff, 0x8e, 0x7a, 0x69, 0xff, 0x8d, 0x79, 0x68, 0xff, 0x8d, 0x78, 0x67, 0xff, 0x8c, 0x78, 0x66, 0xff, 0x8c, 0x78, 0x66, 0xff, 0x8b, 0x76, 0x64, 0xff, 0x8a, 0x76, 0x64, 0xff, 0x88, 0x76, 0x64, 0xff, 0x87, 0x74, 0x62, 0xff, 0x86, 0x73, 0x60, 0xff, 0x84, 0x73, 0x62, 0xff, 0x82, 0x77, 0x70, 0xec, 0xfb, 0xfb, 0xfb, 0x03, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xf4, 0xf2, 0xf1, 0x0f, 0xb5, 0xaa, 0xa0, 0x87, 0x8e, 0x7e, 0x6e, 0xe7, 0x85, 0x75, 0x63, 0xff, 0x8a, 0x7c, 0x6b, 0xff, 0xb1, 0xa7, 0x9b, 0x93, 0xfc, 0xfc, 0xfc, 0x04, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, + 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xfc, 0xfc, 0xfb, 0x07, 0xc6, 0xb2, 0xa5, 0xaf, 0xb8, 0x9f, 0x8f, 0xff, 0xbd, 0xa5, 0x97, 0xff, 0xea, 0xe2, 0xde, 0x30, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xfd, 0xfc, 0xfc, 0x07, 0xba, 0xa5, 0x98, 0xd3, 0xa6, 0x8c, 0x7a, 0xff, 0xa3, 0x89, 0x77, 0xff, 0xa4, 0x8a, 0x79, 0xff, 0xa3, 0x8a, 0x78, 0xff, 0xa2, 0x8a, 0x78, 0xff, 0xa1, 0x88, 0x77, 0xff, 0x9f, 0x87, 0x75, 0xff, 0x9f, 0x87, 0x75, 0xff, 0x9f, 0x87, 0x75, 0xff, 0x9d, 0x86, 0x73, 0xff, 0x9c, 0x85, 0x72, 0xff, 0x9b, 0x85, 0x72, 0xff, 0x9a, 0x84, 0x72, 0xff, 0x9a, 0x84, 0x71, 0xff, 0x9a, 0x83, 0x71, 0xff, 0x99, 0x82, 0x71, 0xff, 0x98, 0x81, 0x70, 0xff, 0x98, 0x80, 0x70, 0xff, 0x96, 0x80, 0x6e, 0xff, 0x96, 0x80, 0x6e, 0xff, 0x96, 0x80, 0x6e, 0xff, 0x94, 0x7e, 0x6c, 0xff, 0x93, 0x7e, 0x6c, 0xff, 0x92, 0x7e, 0x6c, 0xff, 0x92, 0x7c, 0x6b, 0xff, 0x91, 0x7b, 0x69, 0xff, 0x90, 0x7a, 0x69, 0xff, 0x8f, 0x7a, 0x69, 0xff, 0x8e, 0x7a, 0x68, 0xff, 0x8d, 0x79, 0x67, 0xff, 0x8d, 0x78, 0x67, 0xff, 0x8c, 0x78, 0x66, 0xff, 0x8b, 0x78, 0x66, 0xff, 0x8a, 0x76, 0x64, 0xff, 0x89, 0x76, 0x64, 0xff, 0x88, 0x76, 0x64, 0xff, 0x87, 0x74, 0x62, 0xff, 0x86, 0x73, 0x61, 0xff, 0x83, 0x70, 0x5f, 0xff, 0x86, 0x77, 0x69, 0xff, 0xb3, 0xa9, 0xa2, 0x87, 0xfe, 0xfe, 0xfe, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xf6, 0xf5, 0xf4, 0x0b, 0xa6, 0x9a, 0x8d, 0xf4, 0x8a, 0x79, 0x68, 0xff, 0x7a, 0x69, 0x55, 0xff, 0x7e, 0x6c, 0x59, 0xdc, 0x74, 0x61, 0x4d, 0xff, 0x83, 0x74, 0x62, 0xff, 0xa8, 0x9d, 0x92, 0xb0, 0xfc, 0xfc, 0xfc, 0x04, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, + 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xfc, 0xfb, 0xfb, 0x08, 0xc0, 0xa9, 0x9a, 0xcc, 0xb3, 0x96, 0x85, 0xff, 0xab, 0x8c, 0x7a, 0xff, 0xac, 0x8e, 0x7c, 0xff, 0xb1, 0x96, 0x85, 0xff, 0xdc, 0xd1, 0xca, 0x4b, 0xff, 0xff, 0xfe, 0x03, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xfc, 0xfb, 0xfa, 0x07, 0xc1, 0xaf, 0xa2, 0x88, 0xa8, 0x8d, 0x7b, 0xff, 0xa5, 0x8b, 0x79, 0xff, 0xa5, 0x8b, 0x7a, 0xff, 0xa3, 0x8a, 0x78, 0xff, 0xa3, 0x8a, 0x78, 0xff, 0xa2, 0x89, 0x78, 0xff, 0xa0, 0x88, 0x76, 0xff, 0x9f, 0x87, 0x75, 0xff, 0x9f, 0x87, 0x75, 0xff, 0x9f, 0x87, 0x75, 0xff, 0x9e, 0x87, 0x74, 0xff, 0x9e, 0x86, 0x73, 0xff, 0x9e, 0x86, 0x74, 0xff, 0x9d, 0x86, 0x74, 0xff, 0x9b, 0x84, 0x72, 0xff, 0x9a, 0x82, 0x71, 0xff, 0x98, 0x81, 0x70, 0xff, 0x98, 0x81, 0x70, 0xff, 0x98, 0x81, 0x70, 0xff, 0x97, 0x81, 0x6f, 0xff, 0x96, 0x80, 0x6e, 0xff, 0x96, 0x80, 0x6e, 0xff, 0x94, 0x7e, 0x6c, 0xff, 0x93, 0x7d, 0x6c, 0xff, 0x92, 0x7c, 0x6c, 0xff, 0x91, 0x7c, 0x6a, 0xff, 0x91, 0x7b, 0x6a, 0xff, 0x91, 0x7b, 0x6a, 0xff, 0x91, 0x7b, 0x6a, 0xff, 0x90, 0x7b, 0x6a, 0xff, 0x8e, 0x7a, 0x68, 0xff, 0x8d, 0x79, 0x67, 0xff, 0x8c, 0x78, 0x66, 0xff, 0x8a, 0x77, 0x65, 0xff, 0x8a, 0x76, 0x64, 0xff, 0x8a, 0x76, 0x64, 0xff, 0x89, 0x75, 0x63, 0xff, 0x87, 0x74, 0x62, 0xff, 0x86, 0x74, 0x62, 0xff, 0x85, 0x73, 0x61, 0xf7, 0x83, 0x70, 0x5d, 0xff, 0x90, 0x7f, 0x6f, 0xff, 0xb1, 0xa5, 0x9a, 0x83, 0xfb, 0xfb, 0xfa, 0x03, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xef, 0xee, 0xeb, 0x0c, 0x98, 0x8a, 0x7b, 0xff, 0x82, 0x71, 0x5f, 0xff, 0x79, 0x67, 0x54, 0xfb, 0x7d, 0x6c, 0x58, 0xff, 0x7e, 0x6d, 0x5a, 0xff, 0x7d, 0x6c, 0x58, 0xf7, 0x75, 0x64, 0x50, 0xff, 0x7e, 0x6f, 0x5d, 0xff, 0x9d, 0x92, 0x85, 0xbf, 0xfa, 0xfa, 0xf9, 0x07, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, + 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xfc, 0xfb, 0xfb, 0x08, 0xc2, 0xab, 0x9d, 0xc8, 0xb3, 0x97, 0x85, 0xff, 0xaf, 0x91, 0x7f, 0xff, 0xaf, 0x92, 0x81, 0xf8, 0xac, 0x8e, 0x7e, 0xf8, 0xac, 0x8d, 0x7c, 0xff, 0xb0, 0x94, 0x83, 0xff, 0xc8, 0xb4, 0xa8, 0xbb, 0xf7, 0xf5, 0xf4, 0x18, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xfe, 0xfe, 0xfe, 0x03, 0xcc, 0xbd, 0xb3, 0x78, 0xae, 0x96, 0x86, 0xff, 0xa7, 0x8d, 0x7b, 0xff, 0xa6, 0x8c, 0x79, 0xff, 0xa6, 0x8c, 0x7c, 0xf8, 0xa5, 0x8b, 0x7a, 0xff, 0xa4, 0x8a, 0x79, 0xff, 0xa3, 0x8a, 0x79, 0xff, 0xa1, 0x89, 0x78, 0xff, 0xa1, 0x88, 0x77, 0xff, 0xa0, 0x88, 0x76, 0xff, 0xa0, 0x88, 0x75, 0xff, 0xa0, 0x88, 0x75, 0xff, 0x9f, 0x87, 0x75, 0xff, 0x9d, 0x86, 0x73, 0xff, 0x9c, 0x85, 0x73, 0xff, 0x9b, 0x84, 0x72, 0xff, 0x96, 0x80, 0x6e, 0xff, 0x90, 0x7b, 0x69, 0xff, 0x8f, 0x7a, 0x68, 0xff, 0x95, 0x7f, 0x6e, 0xff, 0x97, 0x81, 0x70, 0xff, 0x97, 0x81, 0x6f, 0xff, 0x96, 0x80, 0x6e, 0xff, 0x96, 0x80, 0x6e, 0xff, 0x95, 0x7f, 0x6d, 0xff, 0x93, 0x7d, 0x6c, 0xff, 0x8e, 0x79, 0x68, 0xff, 0x89, 0x76, 0x64, 0xff, 0x8a, 0x76, 0x65, 0xff, 0x8e, 0x78, 0x67, 0xff, 0x90, 0x7a, 0x69, 0xff, 0x8f, 0x7a, 0x69, 0xff, 0x8d, 0x7a, 0x67, 0xff, 0x8e, 0x79, 0x67, 0xff, 0x8d, 0x78, 0x66, 0xff, 0x8b, 0x78, 0x66, 0xff, 0x8a, 0x77, 0x65, 0xff, 0x8b, 0x77, 0x65, 0xff, 0x89, 0x75, 0x63, 0xff, 0x87, 0x74, 0x62, 0xff, 0x86, 0x74, 0x62, 0xff, 0x86, 0x74, 0x61, 0xff, 0x84, 0x72, 0x5f, 0xf7, 0x83, 0x70, 0x5e, 0xff, 0x85, 0x73, 0x61, 0xff, 0x8e, 0x7d, 0x6d, 0xff, 0xca, 0xc3, 0xbb, 0x6b, 0xdf, 0xdb, 0xd7, 0x2c, 0x8c, 0x7e, 0x6e, 0xf7, 0x80, 0x6f, 0x5d, 0xff, 0x7a, 0x67, 0x54, 0xff, 0x7e, 0x6d, 0x5a, 0xfb, 0x80, 0x6f, 0x5c, 0xff, 0x7f, 0x6e, 0x5b, 0xff, 0x7e, 0x6d, 0x5a, 0xff, 0x7c, 0x6b, 0x58, 0xf7, 0x73, 0x62, 0x4f, 0xff, 0x7f, 0x6f, 0x5d, 0xff, 0xac, 0xa2, 0x96, 0xa7, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, + 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0xc9, 0xb4, 0xa9, 0x9f, 0xb4, 0x97, 0x86, 0xff, 0xaf, 0x90, 0x7e, 0xff, 0xb0, 0x93, 0x82, 0xf8, 0xb0, 0x93, 0x82, 0xff, 0xaf, 0x92, 0x81, 0xff, 0xae, 0x90, 0x80, 0xf8, 0xac, 0x8e, 0x7c, 0xff, 0xaf, 0x93, 0x83, 0xff, 0xc0, 0xaa, 0x9e, 0xe7, 0xf0, 0xeb, 0xe8, 0x20, 0xfb, 0xfa, 0xfa, 0x07, 0xc9, 0xba, 0xaf, 0x77, 0xae, 0x96, 0x86, 0xff, 0xa5, 0x8b, 0x77, 0xff, 0xa5, 0x8c, 0x79, 0xff, 0xa7, 0x8e, 0x7d, 0xf8, 0xa6, 0x8c, 0x7b, 0xff, 0xa5, 0x8b, 0x7a, 0xff, 0xa5, 0x8a, 0x7a, 0xff, 0xa3, 0x8a, 0x79, 0xff, 0xa1, 0x89, 0x77, 0xff, 0xa1, 0x89, 0x77, 0xff, 0xa2, 0x89, 0x77, 0xff, 0xa3, 0x8a, 0x78, 0xff, 0xa0, 0x88, 0x76, 0xff, 0x98, 0x81, 0x6f, 0xff, 0x8f, 0x7b, 0x68, 0xff, 0x86, 0x74, 0x61, 0xff, 0x7f, 0x6d, 0x5a, 0xff, 0x79, 0x6a, 0x57, 0xff, 0x74, 0x66, 0x53, 0xff, 0x7b, 0x6b, 0x58, 0xff, 0x90, 0x7b, 0x6a, 0xff, 0x98, 0x82, 0x70, 0xff, 0x97, 0x81, 0x6f, 0xff, 0x96, 0x80, 0x6e, 0xff, 0x96, 0x80, 0x6e, 0xff, 0x96, 0x80, 0x6e, 0xff, 0x91, 0x7c, 0x6a, 0xff, 0x85, 0x73, 0x61, 0xff, 0x78, 0x69, 0x55, 0xff, 0x74, 0x65, 0x52, 0xff, 0x78, 0x68, 0x55, 0xff, 0x7c, 0x6c, 0x58, 0xff, 0x81, 0x70, 0x5d, 0xff, 0x85, 0x73, 0x61, 0xff, 0x8a, 0x76, 0x64, 0xff, 0x8d, 0x79, 0x67, 0xff, 0x8d, 0x79, 0x67, 0xff, 0x8b, 0x78, 0x66, 0xff, 0x8a, 0x76, 0x64, 0xff, 0x89, 0x75, 0x63, 0xff, 0x87, 0x74, 0x62, 0xff, 0x85, 0x74, 0x62, 0xff, 0x85, 0x73, 0x61, 0xff, 0x85, 0x73, 0x61, 0xff, 0x83, 0x72, 0x60, 0xf7, 0x7e, 0x6b, 0x58, 0xff, 0x80, 0x6e, 0x5c, 0xff, 0x91, 0x82, 0x72, 0xff, 0x90, 0x81, 0x71, 0xff, 0x7e, 0x6c, 0x5a, 0xff, 0x7b, 0x69, 0x57, 0xff, 0x7f, 0x6d, 0x5b, 0xfb, 0x7f, 0x6e, 0x5b, 0xff, 0x7f, 0x6e, 0x5b, 0xff, 0x7e, 0x6d, 0x5a, 0xff, 0x7d, 0x6c, 0x59, 0xff, 0x7e, 0x6d, 0x5a, 0xff, 0x79, 0x68, 0x54, 0xf7, 0x76, 0x65, 0x52, 0xff, 0x97, 0x89, 0x7b, 0xe3, 0xfe, 0xfe, 0xfe, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, + 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xfe, 0xfd, 0xfd, 0x08, 0xbb, 0xa2, 0x94, 0xd7, 0xad, 0x8f, 0x7d, 0xff, 0xaf, 0x92, 0x81, 0xf8, 0xb0, 0x93, 0x82, 0xff, 0xaf, 0x92, 0x81, 0xff, 0xaf, 0x92, 0x81, 0xff, 0xae, 0x91, 0x80, 0xff, 0xae, 0x90, 0x7f, 0xfc, 0xaa, 0x8d, 0x7c, 0xff, 0xaa, 0x90, 0x7e, 0xff, 0xac, 0x92, 0x81, 0xff, 0xab, 0x91, 0x7f, 0xff, 0xaa, 0x90, 0x7e, 0xff, 0xa6, 0x8c, 0x79, 0xff, 0xa6, 0x8d, 0x7a, 0xf8, 0xa8, 0x8e, 0x7c, 0xff, 0xa7, 0x8d, 0x7c, 0xff, 0xa6, 0x8c, 0x7b, 0xff, 0xa5, 0x8b, 0x7a, 0xff, 0xa4, 0x8a, 0x7a, 0xff, 0xa5, 0x8b, 0x7a, 0xff, 0xa5, 0x8c, 0x7a, 0xff, 0xa1, 0x89, 0x77, 0xff, 0x9a, 0x83, 0x71, 0xff, 0x92, 0x7d, 0x6b, 0xff, 0x89, 0x76, 0x64, 0xff, 0x81, 0x70, 0x5d, 0xff, 0x7a, 0x6b, 0x57, 0xff, 0x73, 0x64, 0x50, 0xff, 0x6b, 0x5e, 0x49, 0xff, 0x69, 0x5d, 0x49, 0xff, 0x66, 0x5b, 0x47, 0xff, 0x71, 0x63, 0x51, 0xff, 0x8d, 0x79, 0x67, 0xff, 0x99, 0x82, 0x70, 0xff, 0x97, 0x81, 0x6f, 0xff, 0x96, 0x80, 0x6e, 0xff, 0x96, 0x80, 0x6e, 0xff, 0x96, 0x80, 0x6e, 0xff, 0x91, 0x7c, 0x69, 0xff, 0x81, 0x70, 0x5c, 0xff, 0x6e, 0x61, 0x4c, 0xff, 0x67, 0x5c, 0x47, 0xff, 0x6a, 0x5e, 0x49, 0xff, 0x6d, 0x60, 0x4b, 0xff, 0x72, 0x63, 0x4f, 0xff, 0x77, 0x68, 0x54, 0xff, 0x7b, 0x6c, 0x58, 0xff, 0x80, 0x6e, 0x5c, 0xff, 0x85, 0x71, 0x60, 0xff, 0x89, 0x75, 0x63, 0xff, 0x8b, 0x77, 0x65, 0xff, 0x89, 0x76, 0x64, 0xff, 0x87, 0x74, 0x62, 0xff, 0x85, 0x74, 0x62, 0xff, 0x85, 0x73, 0x61, 0xff, 0x84, 0x72, 0x60, 0xff, 0x84, 0x72, 0x60, 0xff, 0x84, 0x72, 0x60, 0xff, 0x80, 0x6e, 0x5c, 0xfb, 0x7c, 0x6a, 0x57, 0xff, 0x7d, 0x6b, 0x57, 0xff, 0x7f, 0x6d, 0x5b, 0xff, 0x80, 0x6e, 0x5c, 0xfb, 0x80, 0x6e, 0x5c, 0xff, 0x7f, 0x6d, 0x5b, 0xff, 0x7f, 0x6e, 0x5b, 0xff, 0x7f, 0x6e, 0x5b, 0xff, 0x7d, 0x6c, 0x59, 0xff, 0x7d, 0x6c, 0x59, 0xff, 0x78, 0x68, 0x53, 0xff, 0x7b, 0x6b, 0x59, 0xff, 0x9c, 0x90, 0x85, 0xb8, 0xfe, 0xfe, 0xfe, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, + 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xfe, 0xfe, 0xfe, 0x07, 0xbb, 0xa2, 0x94, 0xc4, 0xac, 0x8e, 0x7c, 0xff, 0xae, 0x91, 0x7f, 0xfc, 0xaf, 0x92, 0x81, 0xff, 0xae, 0x91, 0x80, 0xff, 0xae, 0x91, 0x80, 0xff, 0xae, 0x90, 0x7f, 0xff, 0xae, 0x90, 0x7f, 0xff, 0xac, 0x91, 0x7f, 0xfc, 0xa9, 0x8f, 0x7d, 0xff, 0xaa, 0x8f, 0x7d, 0xff, 0xaa, 0x90, 0x7e, 0xff, 0xa8, 0x8e, 0x7b, 0xff, 0xa8, 0x8e, 0x7c, 0xfb, 0xa8, 0x8e, 0x7d, 0xff, 0xa7, 0x8d, 0x7b, 0xff, 0xa6, 0x8d, 0x7b, 0xff, 0xa6, 0x8c, 0x7b, 0xff, 0xa6, 0x8c, 0x7b, 0xff, 0xa5, 0x8c, 0x7b, 0xff, 0xa2, 0x89, 0x78, 0xff, 0x9c, 0x85, 0x74, 0xff, 0x92, 0x7d, 0x6b, 0xff, 0x84, 0x72, 0x5f, 0xff, 0x75, 0x66, 0x53, 0xff, 0x6b, 0x5f, 0x4c, 0xff, 0x6b, 0x5f, 0x4b, 0xff, 0x6d, 0x61, 0x4c, 0xff, 0x6e, 0x61, 0x4c, 0xff, 0x6e, 0x61, 0x4c, 0xff, 0x6e, 0x61, 0x4c, 0xff, 0x6b, 0x5e, 0x4a, 0xff, 0x74, 0x65, 0x52, 0xff, 0x8d, 0x79, 0x67, 0xff, 0x98, 0x82, 0x70, 0xff, 0x97, 0x81, 0x6f, 0xff, 0x96, 0x80, 0x6e, 0xff, 0x96, 0x80, 0x6e, 0xff, 0x96, 0x80, 0x6e, 0xff, 0x91, 0x7c, 0x6a, 0xff, 0x83, 0x71, 0x5e, 0xff, 0x71, 0x63, 0x4e, 0xff, 0x6a, 0x5e, 0x48, 0xff, 0x6b, 0x5e, 0x49, 0xff, 0x6b, 0x5f, 0x49, 0xff, 0x6c, 0x5f, 0x4a, 0xff, 0x6d, 0x60, 0x4c, 0xff, 0x6d, 0x61, 0x4c, 0xff, 0x6e, 0x61, 0x4d, 0xff, 0x76, 0x66, 0x53, 0xff, 0x7f, 0x6e, 0x5b, 0xff, 0x85, 0x73, 0x61, 0xff, 0x86, 0x74, 0x62, 0xff, 0x86, 0x74, 0x62, 0xff, 0x87, 0x74, 0x62, 0xff, 0x85, 0x73, 0x61, 0xff, 0x84, 0x72, 0x60, 0xff, 0x84, 0x72, 0x60, 0xff, 0x83, 0x71, 0x5f, 0xff, 0x82, 0x70, 0x5e, 0xff, 0x80, 0x6e, 0x5b, 0xff, 0x7f, 0x6e, 0x5b, 0xff, 0x80, 0x6f, 0x5c, 0xff, 0x80, 0x6e, 0x5c, 0xff, 0x80, 0x6d, 0x5c, 0xff, 0x7f, 0x6d, 0x5b, 0xff, 0x7f, 0x6e, 0x5b, 0xff, 0x7e, 0x6d, 0x5a, 0xff, 0x7d, 0x6c, 0x59, 0xff, 0x7c, 0x6b, 0x57, 0xff, 0x77, 0x65, 0x52, 0xff, 0x80, 0x72, 0x65, 0xff, 0xa9, 0xa2, 0x9d, 0xbb, 0xfe, 0xfe, 0xfe, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, + 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xd5, 0xc6, 0xbe, 0x6f, 0xb0, 0x94, 0x83, 0xff, 0xab, 0x8d, 0x7c, 0xff, 0xae, 0x91, 0x80, 0xfc, 0xae, 0x91, 0x80, 0xff, 0xae, 0x91, 0x80, 0xff, 0xad, 0x90, 0x7f, 0xff, 0xac, 0x91, 0x7f, 0xff, 0xab, 0x91, 0x7f, 0xff, 0xaa, 0x91, 0x7f, 0xff, 0xaa, 0x90, 0x7e, 0xff, 0xa9, 0x8f, 0x7d, 0xff, 0xa9, 0x8e, 0x7c, 0xff, 0xa9, 0x8e, 0x7d, 0xff, 0xa8, 0x8e, 0x7d, 0xff, 0xa7, 0x8d, 0x7c, 0xff, 0xa6, 0x8d, 0x7b, 0xff, 0xa6, 0x8d, 0x7b, 0xff, 0xa7, 0x8d, 0x7b, 0xff, 0xa2, 0x88, 0x77, 0xff, 0x92, 0x7c, 0x6b, 0xff, 0x7f, 0x6e, 0x5b, 0xff, 0x74, 0x65, 0x51, 0xff, 0x6f, 0x62, 0x4d, 0xff, 0x6d, 0x5f, 0x4b, 0xff, 0x6a, 0x5d, 0x4a, 0xff, 0x6b, 0x5f, 0x4b, 0xff, 0x6c, 0x60, 0x4c, 0xff, 0x6d, 0x60, 0x4c, 0xff, 0x6e, 0x61, 0x4d, 0xff, 0x6f, 0x61, 0x4d, 0xff, 0x6c, 0x5e, 0x4a, 0xff, 0x75, 0x65, 0x52, 0xff, 0x8d, 0x79, 0x67, 0xff, 0x98, 0x82, 0x70, 0xff, 0x97, 0x81, 0x6f, 0xff, 0x96, 0x80, 0x6e, 0xff, 0x96, 0x80, 0x6e, 0xff, 0x96, 0x80, 0x6e, 0xff, 0x92, 0x7c, 0x6b, 0xff, 0x84, 0x71, 0x5f, 0xff, 0x71, 0x63, 0x4e, 0xff, 0x6a, 0x5d, 0x47, 0xff, 0x6b, 0x5e, 0x48, 0xff, 0x6b, 0x5e, 0x49, 0xff, 0x6b, 0x5e, 0x4a, 0xff, 0x6c, 0x5f, 0x4b, 0xff, 0x6c, 0x60, 0x4c, 0xff, 0x6d, 0x61, 0x4d, 0xff, 0x71, 0x63, 0x50, 0xff, 0x74, 0x66, 0x53, 0xff, 0x78, 0x68, 0x55, 0xff, 0x7d, 0x6c, 0x5a, 0xff, 0x84, 0x71, 0x5f, 0xff, 0x86, 0x74, 0x62, 0xff, 0x85, 0x73, 0x61, 0xff, 0x84, 0x72, 0x60, 0xff, 0x83, 0x71, 0x5f, 0xff, 0x83, 0x71, 0x5f, 0xff, 0x82, 0x70, 0x5e, 0xff, 0x81, 0x6f, 0x5d, 0xff, 0x81, 0x6f, 0x5d, 0xff, 0x80, 0x6e, 0x5c, 0xff, 0x80, 0x6e, 0x5c, 0xff, 0x80, 0x6e, 0x5c, 0xff, 0x7f, 0x6d, 0x5b, 0xff, 0x7e, 0x6d, 0x5a, 0xff, 0x7e, 0x6d, 0x5a, 0xff, 0x7d, 0x6c, 0x59, 0xff, 0x7b, 0x69, 0x55, 0xff, 0x78, 0x67, 0x57, 0xff, 0x84, 0x79, 0x75, 0xff, 0xdf, 0xdd, 0xde, 0x28, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, + 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xfe, 0xfe, 0xfe, 0x0b, 0xce, 0xbe, 0xb4, 0x8f, 0xab, 0x8d, 0x7c, 0xff, 0xac, 0x8e, 0x7c, 0xff, 0xaf, 0x92, 0x81, 0xfc, 0xae, 0x91, 0x80, 0xff, 0xad, 0x91, 0x7f, 0xff, 0xab, 0x91, 0x7f, 0xff, 0xab, 0x91, 0x7f, 0xff, 0xaa, 0x90, 0x7e, 0xff, 0xaa, 0x90, 0x7e, 0xff, 0xa9, 0x8f, 0x7d, 0xff, 0xa9, 0x8f, 0x7c, 0xff, 0xa9, 0x8e, 0x7c, 0xff, 0xa8, 0x8e, 0x7c, 0xff, 0xa8, 0x8e, 0x7c, 0xff, 0xa9, 0x8f, 0x7e, 0xff, 0xa5, 0x8c, 0x7b, 0xff, 0x96, 0x80, 0x6e, 0xff, 0x85, 0x72, 0x60, 0xff, 0x77, 0x67, 0x54, 0xff, 0x6d, 0x61, 0x4d, 0xff, 0x69, 0x5e, 0x49, 0xff, 0x6b, 0x5e, 0x4a, 0xff, 0x6d, 0x60, 0x4c, 0xff, 0x6f, 0x62, 0x4d, 0xff, 0x6f, 0x62, 0x4d, 0xff, 0x6e, 0x60, 0x4b, 0xff, 0x6c, 0x5d, 0x49, 0xff, 0x6a, 0x5b, 0x4a, 0xff, 0x6e, 0x61, 0x53, 0xff, 0x74, 0x69, 0x60, 0xff, 0x7c, 0x6f, 0x66, 0xff, 0x8f, 0x7a, 0x6a, 0xfb, 0x98, 0x81, 0x6f, 0xfb, 0x96, 0x80, 0x6e, 0xff, 0x96, 0x80, 0x6e, 0xff, 0x96, 0x80, 0x6e, 0xff, 0x97, 0x80, 0x6e, 0xff, 0x8e, 0x79, 0x69, 0xff, 0x78, 0x66, 0x5a, 0xfb, 0x63, 0x57, 0x4c, 0xff, 0x69, 0x5e, 0x52, 0xff, 0x76, 0x6b, 0x5b, 0xff, 0x73, 0x67, 0x55, 0xff, 0x6a, 0x5d, 0x4a, 0xff, 0x67, 0x58, 0x43, 0xff, 0x6b, 0x5d, 0x47, 0xff, 0x70, 0x62, 0x4e, 0xff, 0x73, 0x64, 0x51, 0xff, 0x73, 0x64, 0x52, 0xff, 0x73, 0x64, 0x52, 0xff, 0x77, 0x67, 0x55, 0xff, 0x7b, 0x6a, 0x58, 0xff, 0x7f, 0x6e, 0x5c, 0xff, 0x82, 0x71, 0x5f, 0xff, 0x85, 0x73, 0x61, 0xff, 0x85, 0x73, 0x61, 0xff, 0x83, 0x71, 0x5f, 0xff, 0x82, 0x70, 0x5e, 0xff, 0x81, 0x6f, 0x5d, 0xff, 0x81, 0x6f, 0x5d, 0xff, 0x80, 0x6e, 0x5c, 0xff, 0x80, 0x6e, 0x5c, 0xff, 0x80, 0x6e, 0x5c, 0xff, 0x7e, 0x6d, 0x5a, 0xff, 0x7e, 0x6d, 0x5a, 0xff, 0x7e, 0x6d, 0x5a, 0xff, 0x7e, 0x6d, 0x58, 0xff, 0x76, 0x66, 0x53, 0xff, 0x7a, 0x6e, 0x66, 0xff, 0x9f, 0x98, 0x9a, 0xd3, 0xfe, 0xfe, 0xfe, 0x03, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, + 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xfe, 0xfd, 0xfd, 0x0b, 0xcc, 0xba, 0xaf, 0x8f, 0xac, 0x8e, 0x7d, 0xff, 0xab, 0x8d, 0x7b, 0xff, 0xad, 0x92, 0x80, 0xff, 0xac, 0x91, 0x7f, 0xff, 0xab, 0x91, 0x7f, 0xff, 0xaa, 0x90, 0x7e, 0xff, 0xa9, 0x8f, 0x7d, 0xff, 0xaa, 0x90, 0x7e, 0xff, 0xa9, 0x8f, 0x7d, 0xff, 0xa8, 0x8e, 0x7d, 0xff, 0xa9, 0x8f, 0x7d, 0xff, 0xaa, 0x8f, 0x7d, 0xff, 0xa9, 0x8f, 0x7d, 0xff, 0xa0, 0x88, 0x77, 0xff, 0x90, 0x7b, 0x69, 0xff, 0x7c, 0x6c, 0x58, 0xff, 0x6c, 0x60, 0x4c, 0xff, 0x68, 0x5d, 0x49, 0xff, 0x6c, 0x60, 0x4c, 0xff, 0x6e, 0x61, 0x4d, 0xff, 0x6f, 0x61, 0x4c, 0xff, 0x6c, 0x5f, 0x4a, 0xff, 0x6a, 0x5d, 0x4a, 0xff, 0x6c, 0x5e, 0x4e, 0xff, 0x6f, 0x62, 0x55, 0xff, 0x7c, 0x71, 0x67, 0xff, 0x91, 0x87, 0x80, 0xff, 0xa8, 0xa1, 0x9c, 0x97, 0xdb, 0xd9, 0xd9, 0x13, 0xc9, 0xc3, 0xc2, 0x2b, 0x9c, 0x88, 0x7c, 0xff, 0x97, 0x81, 0x6f, 0xff, 0x96, 0x7f, 0x6d, 0xff, 0x95, 0x7f, 0x6d, 0xff, 0x96, 0x80, 0x6e, 0xff, 0x97, 0x81, 0x6e, 0xff, 0x89, 0x74, 0x65, 0xfb, 0x71, 0x62, 0x5a, 0xff, 0x72, 0x68, 0x68, 0xff, 0xac, 0xa7, 0xa6, 0x63, 0xd9, 0xd5, 0xd2, 0x18, 0xd8, 0xd5, 0xd0, 0x14, 0xc2, 0xbc, 0xb5, 0x30, 0x95, 0x8b, 0x7d, 0xff, 0x85, 0x79, 0x68, 0xff, 0x72, 0x63, 0x50, 0xff, 0x6e, 0x5d, 0x4a, 0xff, 0x71, 0x60, 0x4d, 0xff, 0x75, 0x64, 0x52, 0xfb, 0x77, 0x67, 0x55, 0xff, 0x77, 0x67, 0x55, 0xff, 0x79, 0x68, 0x56, 0xff, 0x7e, 0x6d, 0x5b, 0xff, 0x83, 0x71, 0x5f, 0xff, 0x85, 0x73, 0x61, 0xff, 0x84, 0x72, 0x60, 0xff, 0x82, 0x70, 0x5e, 0xff, 0x81, 0x6f, 0x5d, 0xff, 0x81, 0x6f, 0x5d, 0xff, 0x80, 0x6e, 0x5c, 0xff, 0x80, 0x6e, 0x5c, 0xff, 0x80, 0x6e, 0x5c, 0xff, 0x7e, 0x6d, 0x5a, 0xff, 0x7e, 0x6d, 0x5a, 0xff, 0x7f, 0x6d, 0x5a, 0xff, 0x79, 0x68, 0x55, 0xfb, 0x71, 0x64, 0x5a, 0xff, 0x7e, 0x76, 0x78, 0xff, 0xe3, 0xe2, 0xe4, 0x1c, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, + 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xfa, 0xf8, 0xf7, 0x13, 0xb5, 0x9c, 0x8c, 0xff, 0xab, 0x8f, 0x7d, 0xff, 0xab, 0x91, 0x7e, 0xfc, 0xab, 0x91, 0x7f, 0xff, 0xaa, 0x90, 0x7e, 0xff, 0xa9, 0x8f, 0x7d, 0xff, 0xa9, 0x8f, 0x7d, 0xff, 0xa9, 0x8f, 0x7d, 0xff, 0xa8, 0x8e, 0x7c, 0xff, 0xa9, 0x8f, 0x7d, 0xff, 0xaa, 0x90, 0x7e, 0xff, 0xa9, 0x8f, 0x7d, 0xff, 0xa1, 0x87, 0x76, 0xff, 0x86, 0x74, 0x61, 0xff, 0x70, 0x63, 0x4f, 0xff, 0x6c, 0x60, 0x4c, 0xff, 0x6c, 0x60, 0x4b, 0xff, 0x6d, 0x60, 0x4c, 0xff, 0x6e, 0x60, 0x4d, 0xff, 0x6d, 0x5f, 0x4b, 0xfb, 0x6e, 0x60, 0x4d, 0xff, 0x6f, 0x62, 0x51, 0xff, 0x74, 0x68, 0x5d, 0xff, 0x80, 0x77, 0x73, 0xff, 0x8f, 0x88, 0x88, 0xff, 0xd0, 0xcc, 0xcd, 0x28, 0xef, 0xed, 0xed, 0x0f, 0xfd, 0xfc, 0xfd, 0x04, 0xff, 0xff, 0xff, 0x00, 0xfe, 0xfd, 0xfd, 0x00, 0xae, 0x9d, 0x90, 0xff, 0x97, 0x81, 0x70, 0xff, 0x94, 0x7d, 0x6b, 0xff, 0x95, 0x7f, 0x6d, 0xff, 0x96, 0x7f, 0x6d, 0xff, 0x96, 0x80, 0x6e, 0xff, 0x86, 0x72, 0x62, 0xff, 0x7d, 0x6f, 0x67, 0xff, 0xa9, 0xa3, 0xa4, 0xb3, 0xfe, 0xfe, 0xff, 0x03, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xfa, 0xfa, 0xf9, 0x07, 0xd1, 0xcd, 0xc7, 0x37, 0x98, 0x8d, 0x81, 0xff, 0x83, 0x75, 0x66, 0xff, 0x79, 0x6a, 0x57, 0xff, 0x75, 0x65, 0x53, 0xff, 0x75, 0x65, 0x53, 0xff, 0x77, 0x67, 0x55, 0xfb, 0x7a, 0x6a, 0x57, 0xff, 0x7c, 0x6b, 0x58, 0xff, 0x7e, 0x6c, 0x5a, 0xff, 0x81, 0x6f, 0x5d, 0xff, 0x83, 0x71, 0x5f, 0xff, 0x82, 0x70, 0x5e, 0xff, 0x81, 0x6f, 0x5d, 0xff, 0x81, 0x6f, 0x5d, 0xff, 0x80, 0x6e, 0x5c, 0xff, 0x80, 0x6e, 0x5c, 0xff, 0x80, 0x6e, 0x5c, 0xff, 0x7e, 0x6d, 0x5a, 0xff, 0x7e, 0x6d, 0x5a, 0xff, 0x7f, 0x6d, 0x59, 0xff, 0x71, 0x60, 0x52, 0xff, 0x76, 0x6a, 0x68, 0xff, 0xaa, 0xa6, 0xa9, 0x9c, 0xfe, 0xfe, 0xfe, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, + 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xec, 0xe6, 0xe2, 0x28, 0xb5, 0x9d, 0x8d, 0xff, 0xa9, 0x8f, 0x7c, 0xff, 0xa9, 0x8f, 0x7d, 0xff, 0xa9, 0x8f, 0x7d, 0xff, 0xa9, 0x8f, 0x7d, 0xff, 0xa9, 0x8f, 0x7d, 0xff, 0xa9, 0x8f, 0x7d, 0xff, 0xa9, 0x8f, 0x7d, 0xff, 0xac, 0x91, 0x7f, 0xff, 0xaa, 0x90, 0x7e, 0xff, 0x9c, 0x84, 0x72, 0xff, 0x82, 0x70, 0x5d, 0xff, 0x6f, 0x62, 0x4d, 0xff, 0x6a, 0x5f, 0x4a, 0xff, 0x6c, 0x60, 0x4c, 0xff, 0x6e, 0x61, 0x4d, 0xff, 0x70, 0x61, 0x4d, 0xff, 0x6e, 0x5f, 0x4a, 0xfb, 0x6d, 0x5e, 0x4d, 0xff, 0x70, 0x65, 0x5d, 0xff, 0x84, 0x7c, 0x7a, 0xff, 0xbd, 0xb9, 0xb8, 0x54, 0xea, 0xe8, 0xe8, 0x0f, 0xef, 0xef, 0xf0, 0x0b, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xfa, 0xf9, 0xf9, 0x04, 0xb2, 0xa1, 0x94, 0xff, 0x98, 0x82, 0x70, 0xff, 0x93, 0x7d, 0x6b, 0xff, 0x95, 0x7f, 0x6d, 0xff, 0x95, 0x7f, 0x6d, 0xff, 0x95, 0x7f, 0x6c, 0xff, 0x87, 0x74, 0x64, 0xff, 0x86, 0x78, 0x70, 0xff, 0xeb, 0xe9, 0xe8, 0x13, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xf1, 0xf0, 0xef, 0x0c, 0xf0, 0xee, 0xec, 0x0b, 0xba, 0xb2, 0xa9, 0x4f, 0x85, 0x76, 0x66, 0xff, 0x77, 0x67, 0x54, 0xff, 0x78, 0x67, 0x54, 0xff, 0x7c, 0x6b, 0x57, 0xfb, 0x7d, 0x6c, 0x59, 0xff, 0x7e, 0x6c, 0x5a, 0xff, 0x7f, 0x6d, 0x5b, 0xff, 0x81, 0x6e, 0x5d, 0xff, 0x81, 0x6f, 0x5d, 0xff, 0x81, 0x6f, 0x5d, 0xff, 0x81, 0x6f, 0x5d, 0xff, 0x80, 0x6e, 0x5c, 0xff, 0x80, 0x6e, 0x5c, 0xff, 0x80, 0x6e, 0x5c, 0xff, 0x7e, 0x6d, 0x5a, 0xff, 0x7e, 0x6d, 0x5a, 0xff, 0x7d, 0x6c, 0x58, 0xff, 0x74, 0x63, 0x54, 0xff, 0x86, 0x7b, 0x75, 0xff, 0xf3, 0xf2, 0xf2, 0x0f, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, + 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xfc, 0xfb, 0xfb, 0x0c, 0xb4, 0x9e, 0x8e, 0xff, 0xa7, 0x8d, 0x7a, 0xff, 0xa8, 0x8e, 0x7c, 0xff, 0xa9, 0x8f, 0x7d, 0xff, 0xa9, 0x8f, 0x7d, 0xff, 0xa8, 0x8e, 0x7c, 0xff, 0xa9, 0x8f, 0x7d, 0xff, 0xac, 0x91, 0x7f, 0xff, 0xa9, 0x8f, 0x7d, 0xff, 0x99, 0x83, 0x70, 0xff, 0x81, 0x6f, 0x5c, 0xff, 0x6d, 0x61, 0x4c, 0xff, 0x69, 0x5e, 0x49, 0xff, 0x6e, 0x61, 0x4e, 0xff, 0x6f, 0x62, 0x4e, 0xff, 0x6e, 0x60, 0x4b, 0xfb, 0x6b, 0x5d, 0x4c, 0xff, 0x6f, 0x63, 0x57, 0xff, 0x7f, 0x76, 0x71, 0xff, 0xb9, 0xb4, 0xb4, 0x40, 0xf3, 0xf3, 0xf4, 0x07, 0xfe, 0xfe, 0xfe, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xfa, 0xf9, 0xf8, 0x04, 0xb0, 0x9e, 0x92, 0xff, 0x98, 0x82, 0x71, 0xff, 0x93, 0x7d, 0x6b, 0xff, 0x95, 0x7e, 0x6c, 0xff, 0x95, 0x7e, 0x6c, 0xff, 0x94, 0x7e, 0x6c, 0xff, 0x8a, 0x76, 0x67, 0xff, 0x88, 0x7a, 0x72, 0xff, 0xf7, 0xf7, 0xf6, 0x03, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0xf0, 0xee, 0xec, 0x08, 0xb8, 0xae, 0xa5, 0x5f, 0x8b, 0x7c, 0x6c, 0xff, 0x77, 0x64, 0x51, 0xff, 0x7b, 0x69, 0x56, 0xff, 0x80, 0x6e, 0x5c, 0xfb, 0x80, 0x6e, 0x5c, 0xff, 0x81, 0x6e, 0x5d, 0xff, 0x81, 0x6f, 0x5d, 0xff, 0x81, 0x6f, 0x5d, 0xff, 0x81, 0x6f, 0x5d, 0xff, 0x80, 0x6e, 0x5c, 0xff, 0x7f, 0x6d, 0x5b, 0xff, 0x7f, 0x6d, 0x5b, 0xff, 0x7f, 0x6d, 0x5b, 0xff, 0x7e, 0x6d, 0x5a, 0xff, 0x7c, 0x6b, 0x58, 0xff, 0x77, 0x66, 0x53, 0xff, 0x8d, 0x80, 0x72, 0xff, 0xf4, 0xf2, 0xf1, 0x0f, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, + 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xfe, 0xfe, 0xfe, 0x03, 0xc9, 0xb8, 0xac, 0x9f, 0xac, 0x93, 0x82, 0xff, 0xa7, 0x8d, 0x7a, 0xff, 0xa9, 0x8f, 0x7d, 0xff, 0xa9, 0x8f, 0x7d, 0xff, 0xa8, 0x8e, 0x7c, 0xff, 0xa9, 0x8e, 0x7c, 0xff, 0xab, 0x90, 0x7e, 0xff, 0xaa, 0x8f, 0x7d, 0xff, 0x99, 0x82, 0x6f, 0xff, 0x7e, 0x6e, 0x5a, 0xff, 0x6d, 0x60, 0x4c, 0xff, 0x6c, 0x5f, 0x4b, 0xff, 0x6f, 0x62, 0x4e, 0xff, 0x70, 0x62, 0x4e, 0xff, 0x6e, 0x60, 0x4b, 0xf7, 0x6c, 0x5f, 0x4f, 0xff, 0x75, 0x6b, 0x63, 0xff, 0x8b, 0x85, 0x85, 0xff, 0xc4, 0xc1, 0xc3, 0x44, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xfa, 0xf9, 0xf8, 0x04, 0xb0, 0x9f, 0x92, 0xff, 0x98, 0x82, 0x71, 0xff, 0x93, 0x7d, 0x6b, 0xff, 0x95, 0x7f, 0x6c, 0xff, 0x95, 0x7f, 0x6c, 0xff, 0x94, 0x7e, 0x6c, 0xff, 0x8a, 0x77, 0x68, 0xff, 0x8a, 0x7c, 0x74, 0xff, 0xf5, 0xf5, 0xf4, 0x04, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xc0, 0xb8, 0xaf, 0x60, 0x91, 0x83, 0x73, 0xff, 0x7f, 0x6d, 0x5b, 0xff, 0x7e, 0x6b, 0x58, 0xff, 0x81, 0x70, 0x5e, 0xf7, 0x83, 0x71, 0x5f, 0xff, 0x84, 0x72, 0x60, 0xff, 0x83, 0x71, 0x5f, 0xff, 0x82, 0x70, 0x5e, 0xff, 0x7f, 0x6d, 0x5b, 0xff, 0x7f, 0x6d, 0x5b, 0xff, 0x7f, 0x6d, 0x5b, 0xff, 0x7e, 0x6d, 0x5a, 0xff, 0x7e, 0x6d, 0x5a, 0xff, 0x7d, 0x6c, 0x59, 0xff, 0x78, 0x67, 0x53, 0xff, 0x83, 0x73, 0x61, 0xff, 0xab, 0xa0, 0x95, 0xb3, 0xfe, 0xfe, 0xfe, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, + 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xf6, 0xf4, 0xf2, 0x18, 0xae, 0x96, 0x85, 0xff, 0xa6, 0x8c, 0x79, 0xff, 0xa8, 0x8e, 0x7c, 0xfc, 0xa8, 0x8e, 0x7c, 0xff, 0xa8, 0x8e, 0x7c, 0xff, 0xa8, 0x8e, 0x7c, 0xff, 0xab, 0x90, 0x7e, 0xff, 0xaa, 0x8f, 0x7d, 0xff, 0x9a, 0x83, 0x71, 0xff, 0x7e, 0x6e, 0x5b, 0xff, 0x6c, 0x60, 0x4c, 0xff, 0x6c, 0x5f, 0x4c, 0xff, 0x6f, 0x62, 0x4e, 0xff, 0x71, 0x63, 0x4e, 0xff, 0x6f, 0x60, 0x4c, 0xf4, 0x6e, 0x60, 0x52, 0xff, 0x78, 0x6f, 0x6c, 0xff, 0xa8, 0xa4, 0xa6, 0x88, 0xf3, 0xf3, 0xf3, 0x0f, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xfa, 0xf9, 0xf8, 0x04, 0xb0, 0x9f, 0x92, 0xff, 0x98, 0x82, 0x70, 0xff, 0x93, 0x7d, 0x6b, 0xff, 0x95, 0x7f, 0x6c, 0xff, 0x95, 0x7f, 0x6c, 0xff, 0x94, 0x7e, 0x6c, 0xff, 0x8a, 0x77, 0x68, 0xff, 0x8b, 0x7c, 0x75, 0xff, 0xf6, 0xf5, 0xf4, 0x04, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xeb, 0xe8, 0xe6, 0x1f, 0x9e, 0x91, 0x83, 0xc0, 0x82, 0x70, 0x5f, 0xff, 0x82, 0x70, 0x5e, 0xff, 0x83, 0x72, 0x60, 0xf7, 0x85, 0x74, 0x61, 0xff, 0x87, 0x75, 0x62, 0xff, 0x84, 0x72, 0x60, 0xff, 0x80, 0x6e, 0x5c, 0xff, 0x7f, 0x6d, 0x5b, 0xff, 0x7e, 0x6d, 0x5a, 0xff, 0x7e, 0x6d, 0x5a, 0xff, 0x7e, 0x6d, 0x5a, 0xff, 0x7e, 0x6d, 0x5a, 0xff, 0x7c, 0x6b, 0x57, 0xfb, 0x77, 0x66, 0x52, 0xff, 0x81, 0x71, 0x5f, 0xff, 0xf3, 0xf2, 0xf0, 0x0b, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xfe, 0xfe, 0xfe, 0x03, 0xd5, 0xd1, 0xcc, 0x44, 0xa5, 0x9c, 0x8f, 0x7c, 0x99, 0x8d, 0x7f, 0x70, 0x90, 0x84, 0x75, 0x87, 0xde, 0xda, 0xd5, 0x20, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, + 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xfd, 0xfc, 0xfc, 0x0b, 0xfd, 0xfc, 0xfc, 0x0b, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xfd, 0xfc, 0xfc, 0x04, 0xba, 0xa6, 0x97, 0xb0, 0xa7, 0x8d, 0x7b, 0xff, 0xa6, 0x8c, 0x7a, 0xff, 0xa8, 0x8e, 0x7c, 0xff, 0xa8, 0x8e, 0x7c, 0xff, 0xa8, 0x8e, 0x7c, 0xff, 0xa9, 0x8f, 0x7d, 0xff, 0xaa, 0x8f, 0x7d, 0xff, 0x9d, 0x86, 0x73, 0xff, 0x80, 0x6f, 0x5c, 0xff, 0x6d, 0x60, 0x4c, 0xff, 0x6c, 0x5f, 0x4b, 0xff, 0x6f, 0x62, 0x4e, 0xff, 0x71, 0x63, 0x4d, 0xff, 0x6d, 0x5f, 0x4d, 0xf4, 0x6b, 0x5e, 0x53, 0xff, 0x83, 0x7b, 0x7a, 0xff, 0xbf, 0xbb, 0xbd, 0x4f, 0xfe, 0xfe, 0xfe, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xfa, 0xf9, 0xf8, 0x04, 0xaf, 0x9f, 0x91, 0xff, 0x97, 0x81, 0x70, 0xff, 0x94, 0x7d, 0x6a, 0xff, 0x95, 0x7f, 0x6d, 0xff, 0x94, 0x7e, 0x6d, 0xff, 0x93, 0x7d, 0x6b, 0xff, 0x8a, 0x77, 0x68, 0xff, 0x8b, 0x7d, 0x75, 0xff, 0xf6, 0xf5, 0xf5, 0x04, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xfd, 0xfd, 0xfc, 0x00, 0xb1, 0xa6, 0x9b, 0x70, 0x8e, 0x7d, 0x6c, 0xff, 0x81, 0x6e, 0x5c, 0xff, 0x85, 0x73, 0x61, 0xf7, 0x89, 0x77, 0x64, 0xff, 0x89, 0x77, 0x64, 0xff, 0x85, 0x73, 0x61, 0xff, 0x80, 0x6e, 0x5c, 0xff, 0x7e, 0x6d, 0x5a, 0xff, 0x7e, 0x6d, 0x5a, 0xff, 0x7d, 0x6c, 0x59, 0xff, 0x7d, 0x6c, 0x59, 0xff, 0x7d, 0x6c, 0x59, 0xff, 0x77, 0x66, 0x52, 0xff, 0x77, 0x67, 0x54, 0xfb, 0x9c, 0x90, 0x83, 0xac, 0xb7, 0xae, 0xa5, 0x80, 0xb9, 0xb0, 0xa7, 0x80, 0xaf, 0xa6, 0x9b, 0x78, 0xa0, 0x95, 0x88, 0x9b, 0x8c, 0x7f, 0x70, 0xff, 0x7d, 0x6e, 0x5d, 0xff, 0x73, 0x63, 0x50, 0xff, 0x70, 0x60, 0x4c, 0xff, 0x8d, 0x81, 0x72, 0xff, 0xf0, 0xef, 0xed, 0x13, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, + 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xee, 0xe9, 0xe6, 0x23, 0xb3, 0x9d, 0x8f, 0xf3, 0xb5, 0xa0, 0x92, 0xe8, 0xdb, 0xd1, 0xca, 0x64, 0xfc, 0xfb, 0xfa, 0x0b, 0xfe, 0xfe, 0xfe, 0x00, 0xfe, 0xfd, 0xfd, 0x03, 0xff, 0xff, 0xff, 0x00, 0xfe, 0xfe, 0xfe, 0x04, 0xc7, 0xb6, 0xaa, 0x94, 0xa5, 0x8b, 0x79, 0xff, 0xa5, 0x8b, 0x78, 0xff, 0xa9, 0x8f, 0x7d, 0xfc, 0xa8, 0x8e, 0x7c, 0xff, 0xa8, 0x8e, 0x7c, 0xff, 0xa8, 0x8e, 0x7c, 0xff, 0xab, 0x90, 0x7e, 0xff, 0x9f, 0x87, 0x74, 0xff, 0x84, 0x73, 0x5f, 0xff, 0x6e, 0x61, 0x4e, 0xff, 0x6b, 0x5e, 0x4b, 0xff, 0x70, 0x62, 0x4e, 0xff, 0x70, 0x63, 0x4d, 0xff, 0x6c, 0x5e, 0x4b, 0xf4, 0x6c, 0x60, 0x55, 0xff, 0x84, 0x7c, 0x7d, 0xff, 0xc0, 0xbd, 0xc1, 0x54, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xfa, 0xf9, 0xf8, 0x04, 0xaf, 0x9f, 0x91, 0xff, 0x97, 0x81, 0x6f, 0xff, 0x93, 0x7c, 0x6a, 0xff, 0x95, 0x7f, 0x6c, 0xff, 0x93, 0x7e, 0x6c, 0xff, 0x92, 0x7c, 0x6a, 0xff, 0x8a, 0x76, 0x68, 0xff, 0x8c, 0x7d, 0x75, 0xff, 0xf6, 0xf5, 0xf5, 0x04, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0xb6, 0xab, 0xa0, 0x77, 0x90, 0x7e, 0x6d, 0xff, 0x85, 0x72, 0x5f, 0xff, 0x89, 0x76, 0x64, 0xf7, 0x8d, 0x79, 0x67, 0xff, 0x8b, 0x77, 0x66, 0xff, 0x85, 0x72, 0x60, 0xff, 0x7f, 0x6e, 0x5b, 0xff, 0x7d, 0x6c, 0x59, 0xff, 0x7d, 0x6d, 0x59, 0xff, 0x7d, 0x6c, 0x59, 0xff, 0x7d, 0x6b, 0x58, 0xff, 0x7b, 0x6a, 0x58, 0xfb, 0x7a, 0x6a, 0x57, 0xff, 0x7b, 0x6b, 0x59, 0xff, 0x83, 0x74, 0x63, 0xff, 0x83, 0x75, 0x64, 0xff, 0x7a, 0x6b, 0x59, 0xff, 0x73, 0x62, 0x50, 0xff, 0x70, 0x5f, 0x4c, 0xf7, 0x76, 0x66, 0x54, 0xe7, 0x77, 0x67, 0x56, 0xe8, 0x74, 0x65, 0x52, 0xe7, 0x77, 0x69, 0x57, 0xff, 0x9a, 0x90, 0x82, 0xff, 0xf9, 0xf9, 0xf8, 0x07, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, + 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xf8, 0xf7, 0xf6, 0x10, 0xad, 0x96, 0x86, 0xff, 0xa1, 0x87, 0x75, 0xff, 0xa6, 0x8c, 0x7b, 0xff, 0xaa, 0x91, 0x80, 0xff, 0xa9, 0x8f, 0x7f, 0xe3, 0xa9, 0x91, 0x7f, 0xcc, 0xb5, 0x9f, 0x90, 0xcf, 0xc8, 0xb7, 0xae, 0xac, 0xc0, 0xad, 0xa0, 0xd4, 0xaf, 0x98, 0x87, 0xff, 0xa5, 0x8b, 0x79, 0xff, 0xa6, 0x8c, 0x7b, 0xf8, 0xa8, 0x8e, 0x7c, 0xff, 0xa7, 0x8d, 0x7c, 0xff, 0xa7, 0x8d, 0x7b, 0xff, 0xa8, 0x8e, 0x7c, 0xff, 0xa4, 0x8a, 0x78, 0xff, 0x8a, 0x77, 0x63, 0xff, 0x6d, 0x61, 0x4d, 0xff, 0x6a, 0x5e, 0x4b, 0xff, 0x6f, 0x62, 0x4e, 0xff, 0x71, 0x63, 0x4e, 0xff, 0x6e, 0x60, 0x4d, 0xf4, 0x6a, 0x5e, 0x53, 0xff, 0x85, 0x7e, 0x7e, 0xff, 0xc5, 0xc2, 0xc6, 0x4f, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xfa, 0xf9, 0xf8, 0x04, 0xb0, 0x9f, 0x92, 0xff, 0x97, 0x81, 0x70, 0xff, 0x92, 0x7c, 0x6a, 0xff, 0x93, 0x7e, 0x6b, 0xff, 0x93, 0x7e, 0x6b, 0xff, 0x92, 0x7c, 0x6a, 0xff, 0x8a, 0x76, 0x67, 0xff, 0x8c, 0x7e, 0x76, 0xff, 0xf6, 0xf5, 0xf5, 0x04, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0xb5, 0xa9, 0x9d, 0x77, 0x93, 0x81, 0x70, 0xff, 0x8b, 0x77, 0x65, 0xff, 0x8d, 0x79, 0x68, 0xf7, 0x8f, 0x7a, 0x69, 0xff, 0x8d, 0x79, 0x67, 0xff, 0x84, 0x72, 0x5f, 0xff, 0x7e, 0x6d, 0x59, 0xff, 0x7e, 0x6d, 0x5a, 0xff, 0x7d, 0x6c, 0x59, 0xff, 0x7c, 0x6b, 0x58, 0xff, 0x7c, 0x6a, 0x58, 0xff, 0x7a, 0x6a, 0x58, 0xff, 0x77, 0x67, 0x54, 0xff, 0x74, 0x64, 0x51, 0xff, 0x73, 0x62, 0x4f, 0xff, 0x72, 0x61, 0x4f, 0xff, 0x72, 0x62, 0x50, 0xff, 0x74, 0x64, 0x52, 0xff, 0x75, 0x65, 0x53, 0xff, 0x75, 0x66, 0x54, 0xff, 0x75, 0x66, 0x53, 0xff, 0x6c, 0x5d, 0x49, 0xff, 0x84, 0x77, 0x67, 0xff, 0xe8, 0xe6, 0xe4, 0x18, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, + 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xdd, 0xd4, 0xcd, 0x50, 0xa8, 0x8f, 0x7e, 0xff, 0xa0, 0x85, 0x72, 0xff, 0xa4, 0x8a, 0x7a, 0xf8, 0xa2, 0x87, 0x76, 0xff, 0xa2, 0x89, 0x77, 0xff, 0xa4, 0x8a, 0x79, 0xff, 0xa8, 0x8e, 0x7d, 0xff, 0xac, 0x93, 0x83, 0xff, 0xab, 0x92, 0x81, 0xff, 0xa7, 0x8c, 0x7b, 0xff, 0xa6, 0x8c, 0x7c, 0xf8, 0xa6, 0x8c, 0x7b, 0xff, 0xa7, 0x8c, 0x7b, 0xff, 0xa5, 0x8c, 0x7b, 0xff, 0xa7, 0x8e, 0x7d, 0xff, 0xa7, 0x8c, 0x7b, 0xff, 0x90, 0x7b, 0x69, 0xff, 0x75, 0x66, 0x53, 0xff, 0x6b, 0x5f, 0x4b, 0xff, 0x6d, 0x61, 0x4d, 0xff, 0x71, 0x64, 0x4f, 0xff, 0x6f, 0x60, 0x4c, 0xf8, 0x6c, 0x5f, 0x53, 0xff, 0x82, 0x7b, 0x7a, 0xff, 0xc5, 0xc3, 0xc6, 0x50, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xfa, 0xf9, 0xf8, 0x04, 0xaf, 0x9e, 0x91, 0xff, 0x97, 0x81, 0x6f, 0xff, 0x92, 0x7c, 0x6a, 0xff, 0x92, 0x7d, 0x6c, 0xff, 0x92, 0x7d, 0x6b, 0xff, 0x92, 0x7b, 0x69, 0xff, 0x8a, 0x76, 0x66, 0xff, 0x8b, 0x7d, 0x75, 0xff, 0xf6, 0xf5, 0xf5, 0x04, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0xb8, 0xaa, 0xa0, 0x74, 0x92, 0x7d, 0x6d, 0xff, 0x8c, 0x77, 0x65, 0xff, 0x91, 0x7b, 0x6a, 0xff, 0x92, 0x7c, 0x6b, 0xff, 0x8c, 0x78, 0x66, 0xff, 0x82, 0x71, 0x5e, 0xff, 0x7d, 0x6c, 0x59, 0xff, 0x7c, 0x6b, 0x58, 0xff, 0x7b, 0x6a, 0x57, 0xff, 0x7b, 0x6a, 0x58, 0xff, 0x7a, 0x6a, 0x58, 0xff, 0x78, 0x68, 0x57, 0xff, 0x78, 0x68, 0x56, 0xff, 0x78, 0x67, 0x55, 0xff, 0x77, 0x67, 0x56, 0xff, 0x77, 0x67, 0x56, 0xff, 0x76, 0x66, 0x54, 0xff, 0x75, 0x66, 0x53, 0xff, 0x75, 0x66, 0x53, 0xff, 0x75, 0x66, 0x53, 0xff, 0x6d, 0x5e, 0x49, 0xff, 0x75, 0x67, 0x54, 0xff, 0xb8, 0xb1, 0xa8, 0x88, 0xfe, 0xfe, 0xfe, 0x04, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, + 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xf7, 0xf5, 0xf4, 0x10, 0xab, 0x95, 0x85, 0xff, 0xa3, 0x89, 0x78, 0xff, 0xa4, 0x8a, 0x78, 0xff, 0xa5, 0x8b, 0x7a, 0xff, 0xa5, 0x8c, 0x7a, 0xff, 0xa5, 0x8c, 0x7a, 0xff, 0xa5, 0x8b, 0x7a, 0xff, 0xa4, 0x89, 0x78, 0xff, 0xa3, 0x88, 0x76, 0xff, 0xa3, 0x89, 0x77, 0xff, 0xa4, 0x8b, 0x7a, 0xff, 0xa6, 0x8c, 0x7b, 0xff, 0xa6, 0x8c, 0x7b, 0xff, 0xa6, 0x8b, 0x79, 0xff, 0xa6, 0x8c, 0x7a, 0xff, 0xa6, 0x8c, 0x7b, 0xff, 0x9d, 0x85, 0x73, 0xff, 0x7e, 0x6d, 0x5b, 0xff, 0x6b, 0x5e, 0x4b, 0xff, 0x6d, 0x61, 0x4e, 0xff, 0x70, 0x63, 0x4f, 0xff, 0x70, 0x62, 0x4c, 0xfc, 0x6c, 0x5f, 0x51, 0xff, 0x79, 0x70, 0x6e, 0xff, 0xbe, 0xbb, 0xbd, 0x57, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xfa, 0xf9, 0xf8, 0x04, 0xaf, 0x9f, 0x91, 0xff, 0x96, 0x81, 0x6f, 0xff, 0x92, 0x7c, 0x6a, 0xff, 0x92, 0x7c, 0x6c, 0xff, 0x91, 0x7c, 0x6a, 0xff, 0x92, 0x7b, 0x68, 0xff, 0x8a, 0x75, 0x66, 0xff, 0x8b, 0x7c, 0x75, 0xff, 0xf6, 0xf5, 0xf5, 0x04, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xfd, 0xfc, 0xfc, 0x03, 0xa7, 0x96, 0x88, 0xf3, 0x8d, 0x76, 0x64, 0xff, 0x91, 0x7b, 0x68, 0xff, 0x95, 0x7f, 0x6e, 0xff, 0x94, 0x7e, 0x6d, 0xff, 0x8b, 0x77, 0x65, 0xff, 0x7e, 0x6c, 0x5a, 0xff, 0x7b, 0x6a, 0x58, 0xff, 0x7b, 0x6a, 0x57, 0xff, 0x7a, 0x6a, 0x57, 0xff, 0x7a, 0x6a, 0x58, 0xff, 0x78, 0x69, 0x56, 0xff, 0x78, 0x68, 0x56, 0xff, 0x78, 0x68, 0x56, 0xff, 0x77, 0x67, 0x55, 0xff, 0x77, 0x66, 0x55, 0xff, 0x76, 0x66, 0x54, 0xff, 0x75, 0x66, 0x53, 0xff, 0x75, 0x65, 0x53, 0xff, 0x75, 0x65, 0x53, 0xff, 0x71, 0x62, 0x4e, 0xff, 0x72, 0x64, 0x51, 0xff, 0x87, 0x7b, 0x6c, 0xff, 0xf1, 0xf0, 0xee, 0x0b, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, + 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xef, 0xeb, 0xe7, 0x1f, 0x9f, 0x86, 0x74, 0xff, 0x9f, 0x86, 0x74, 0xff, 0xa3, 0x8a, 0x79, 0xff, 0xa4, 0x8b, 0x79, 0xff, 0xa5, 0x8b, 0x79, 0xff, 0xa5, 0x8b, 0x79, 0xff, 0xa5, 0x8b, 0x7a, 0xff, 0xa5, 0x8a, 0x7a, 0xff, 0xa4, 0x8b, 0x7a, 0xff, 0xa5, 0x8b, 0x7a, 0xff, 0xa5, 0x8c, 0x7a, 0xff, 0xa5, 0x8b, 0x7a, 0xff, 0xa5, 0x8b, 0x7a, 0xff, 0xa4, 0x8a, 0x79, 0xff, 0xa8, 0x8d, 0x7b, 0xff, 0xa1, 0x87, 0x76, 0xff, 0x89, 0x75, 0x63, 0xff, 0x72, 0x64, 0x52, 0xff, 0x6b, 0x5f, 0x4c, 0xff, 0x70, 0x63, 0x4e, 0xff, 0x72, 0x64, 0x4e, 0xff, 0x6a, 0x5d, 0x4c, 0xff, 0x74, 0x6a, 0x65, 0xff, 0xaa, 0xa6, 0xa9, 0x87, 0xfe, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xfa, 0xf9, 0xf8, 0x04, 0xae, 0x9e, 0x91, 0xff, 0x95, 0x80, 0x6e, 0xff, 0x91, 0x7b, 0x69, 0xff, 0x92, 0x7d, 0x6c, 0xff, 0x91, 0x7c, 0x6a, 0xff, 0x92, 0x7b, 0x68, 0xff, 0x8a, 0x75, 0x66, 0xff, 0x8b, 0x7c, 0x74, 0xff, 0xf6, 0xf5, 0xf4, 0x04, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xe3, 0xde, 0xd9, 0x2f, 0xa2, 0x8f, 0x7f, 0xff, 0x92, 0x7b, 0x68, 0xff, 0x94, 0x7d, 0x6b, 0xfb, 0x99, 0x82, 0x71, 0xff, 0x93, 0x7d, 0x6c, 0xff, 0x85, 0x72, 0x60, 0xff, 0x7d, 0x6b, 0x59, 0xff, 0x7a, 0x6a, 0x57, 0xff, 0x7a, 0x6a, 0x57, 0xff, 0x7a, 0x6a, 0x58, 0xff, 0x78, 0x69, 0x56, 0xff, 0x77, 0x67, 0x55, 0xff, 0x77, 0x67, 0x55, 0xff, 0x77, 0x67, 0x55, 0xff, 0x77, 0x66, 0x55, 0xff, 0x76, 0x66, 0x54, 0xff, 0x74, 0x66, 0x53, 0xff, 0x74, 0x65, 0x52, 0xff, 0x74, 0x65, 0x53, 0xff, 0x73, 0x64, 0x50, 0xff, 0x71, 0x62, 0x4e, 0xff, 0x76, 0x69, 0x59, 0xff, 0xef, 0xed, 0xec, 0x0b, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, + 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x04, 0xd3, 0xc8, 0xc0, 0x7b, 0x9d, 0x84, 0x72, 0xff, 0x9e, 0x84, 0x72, 0xff, 0xa2, 0x89, 0x78, 0xff, 0xa2, 0x89, 0x78, 0xff, 0xa3, 0x8a, 0x79, 0xff, 0xa3, 0x8a, 0x79, 0xff, 0xa4, 0x8a, 0x79, 0xff, 0xa4, 0x8a, 0x79, 0xff, 0xa4, 0x8a, 0x79, 0xff, 0xa5, 0x8b, 0x79, 0xff, 0xa4, 0x8b, 0x79, 0xff, 0xa4, 0x8a, 0x79, 0xff, 0xa4, 0x8a, 0x79, 0xff, 0xa4, 0x8a, 0x79, 0xff, 0xa7, 0x8c, 0x7a, 0xff, 0x97, 0x80, 0x6e, 0xff, 0x75, 0x66, 0x53, 0xff, 0x6b, 0x5f, 0x4c, 0xff, 0x70, 0x62, 0x4f, 0xff, 0x71, 0x63, 0x4e, 0xff, 0x6f, 0x60, 0x4c, 0xff, 0x6f, 0x65, 0x5d, 0xff, 0x92, 0x8c, 0x8f, 0xff, 0xf9, 0xf9, 0xfa, 0x0f, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xfa, 0xf9, 0xf9, 0x04, 0xaf, 0x9f, 0x92, 0xff, 0x95, 0x7f, 0x6e, 0xff, 0x90, 0x7a, 0x69, 0xff, 0x92, 0x7c, 0x6b, 0xff, 0x92, 0x7c, 0x6a, 0xff, 0x91, 0x7b, 0x68, 0xff, 0x89, 0x74, 0x66, 0xff, 0x8a, 0x7b, 0x74, 0xff, 0xf6, 0xf5, 0xf5, 0x04, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xd3, 0xca, 0xc3, 0x44, 0x98, 0x82, 0x70, 0xff, 0x94, 0x7d, 0x6a, 0xff, 0x9a, 0x82, 0x71, 0xff, 0x99, 0x82, 0x71, 0xff, 0x90, 0x7b, 0x69, 0xff, 0x80, 0x6e, 0x5c, 0xff, 0x79, 0x69, 0x56, 0xff, 0x7a, 0x6a, 0x57, 0xff, 0x79, 0x69, 0x57, 0xff, 0x78, 0x68, 0x56, 0xff, 0x78, 0x68, 0x56, 0xff, 0x77, 0x67, 0x55, 0xff, 0x76, 0x66, 0x54, 0xff, 0x76, 0x66, 0x54, 0xff, 0x76, 0x66, 0x54, 0xff, 0x75, 0x66, 0x53, 0xff, 0x74, 0x65, 0x52, 0xff, 0x73, 0x64, 0x51, 0xff, 0x6f, 0x60, 0x4b, 0xff, 0x72, 0x64, 0x53, 0xff, 0x90, 0x87, 0x7d, 0xff, 0xf4, 0xf3, 0xf3, 0x0b, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, + 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x03, 0xd2, 0xc6, 0xbe, 0x78, 0x9f, 0x86, 0x74, 0xff, 0x9d, 0x84, 0x71, 0xff, 0xa0, 0x88, 0x76, 0xff, 0xa1, 0x88, 0x77, 0xff, 0xa1, 0x89, 0x78, 0xff, 0xa2, 0x8a, 0x78, 0xff, 0xa2, 0x8a, 0x78, 0xff, 0xa3, 0x8a, 0x79, 0xff, 0xa3, 0x8a, 0x79, 0xff, 0xa3, 0x8a, 0x79, 0xff, 0xa3, 0x8a, 0x79, 0xff, 0xa2, 0x8a, 0x78, 0xff, 0xa3, 0x8a, 0x78, 0xff, 0xa4, 0x8b, 0x79, 0xff, 0x9e, 0x87, 0x74, 0xff, 0x89, 0x75, 0x62, 0xff, 0x70, 0x61, 0x4e, 0xff, 0x6c, 0x5f, 0x4b, 0xff, 0x72, 0x64, 0x4f, 0xff, 0x6f, 0x60, 0x4c, 0xfc, 0x6d, 0x60, 0x52, 0xff, 0x89, 0x81, 0x80, 0xff, 0xdd, 0xdc, 0xde, 0x37, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xfc, 0xfc, 0xfb, 0x03, 0xaf, 0x9f, 0x92, 0xff, 0x95, 0x80, 0x6f, 0xff, 0x8f, 0x7a, 0x69, 0xff, 0x91, 0x7b, 0x6a, 0xff, 0x92, 0x7c, 0x69, 0xff, 0x91, 0x7a, 0x68, 0xff, 0x88, 0x74, 0x66, 0xff, 0x89, 0x7b, 0x74, 0xff, 0xf9, 0xf9, 0xf9, 0x03, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xfc, 0xfc, 0xfb, 0x03, 0xaf, 0x9f, 0x91, 0xfb, 0x9a, 0x84, 0x72, 0xff, 0x97, 0x80, 0x6e, 0xff, 0x9c, 0x85, 0x73, 0xff, 0x99, 0x82, 0x70, 0xff, 0x86, 0x74, 0x61, 0xff, 0x7b, 0x6a, 0x57, 0xff, 0x79, 0x69, 0x57, 0xff, 0x79, 0x69, 0x57, 0xff, 0x78, 0x68, 0x56, 0xff, 0x78, 0x68, 0x56, 0xff, 0x77, 0x67, 0x55, 0xff, 0x76, 0x66, 0x54, 0xff, 0x76, 0x66, 0x54, 0xff, 0x76, 0x66, 0x54, 0xff, 0x75, 0x66, 0x53, 0xff, 0x75, 0x64, 0x50, 0xff, 0x71, 0x61, 0x4d, 0xff, 0x71, 0x64, 0x57, 0xff, 0x8a, 0x81, 0x7c, 0xff, 0xce, 0xca, 0xc9, 0x4f, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, + 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xfd, 0xfc, 0xfc, 0x08, 0xbf, 0xaf, 0xa4, 0x93, 0xa0, 0x88, 0x77, 0xff, 0x99, 0x80, 0x6d, 0xff, 0x9d, 0x85, 0x72, 0xff, 0xa0, 0x88, 0x76, 0xfc, 0xa1, 0x89, 0x77, 0xff, 0xa1, 0x89, 0x77, 0xff, 0xa1, 0x89, 0x77, 0xff, 0xa1, 0x88, 0x77, 0xff, 0xa1, 0x89, 0x77, 0xff, 0xa1, 0x89, 0x77, 0xff, 0xa0, 0x88, 0x76, 0xff, 0xa1, 0x8a, 0x77, 0xff, 0xa4, 0x8c, 0x7a, 0xff, 0x92, 0x7d, 0x6b, 0xff, 0x77, 0x67, 0x55, 0xff, 0x6e, 0x60, 0x4d, 0xff, 0x70, 0x62, 0x4e, 0xff, 0x72, 0x63, 0x4e, 0xff, 0x6f, 0x60, 0x4f, 0xff, 0x74, 0x69, 0x65, 0xff, 0xc3, 0xbf, 0xc1, 0x4b, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xe8, 0xe3, 0xdf, 0x20, 0xa4, 0x91, 0x83, 0xff, 0x91, 0x7c, 0x6b, 0xff, 0x90, 0x7a, 0x69, 0xff, 0x91, 0x7b, 0x69, 0xff, 0x91, 0x7b, 0x69, 0xff, 0x90, 0x7a, 0x68, 0xff, 0x88, 0x74, 0x64, 0xff, 0x8d, 0x7c, 0x70, 0xff, 0xcf, 0xc8, 0xc4, 0x37, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xe4, 0xde, 0xda, 0x2c, 0xa2, 0x8d, 0x7d, 0xff, 0x95, 0x7c, 0x69, 0xff, 0x9e, 0x86, 0x74, 0xff, 0x9e, 0x86, 0x74, 0xff, 0x91, 0x7b, 0x69, 0xff, 0x80, 0x6e, 0x5c, 0xff, 0x78, 0x68, 0x56, 0xff, 0x78, 0x68, 0x56, 0xff, 0x78, 0x68, 0x56, 0xff, 0x77, 0x67, 0x55, 0xff, 0x76, 0x66, 0x54, 0xff, 0x76, 0x66, 0x54, 0xff, 0x76, 0x66, 0x54, 0xff, 0x76, 0x66, 0x54, 0xff, 0x74, 0x64, 0x51, 0xfb, 0x6d, 0x5e, 0x50, 0xff, 0x75, 0x69, 0x61, 0xff, 0x98, 0x91, 0x8f, 0xac, 0xdd, 0xdb, 0xdc, 0x28, 0xfe, 0xfe, 0xfe, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, + 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xfe, 0xfd, 0xfd, 0x04, 0xdd, 0xd5, 0xcf, 0x40, 0xb6, 0xa3, 0x96, 0xd8, 0xa4, 0x8d, 0x7c, 0xff, 0x9b, 0x82, 0x6f, 0xff, 0x9d, 0x84, 0x71, 0xff, 0x9f, 0x87, 0x75, 0xfc, 0xa0, 0x88, 0x76, 0xff, 0xa0, 0x88, 0x76, 0xff, 0xa0, 0x88, 0x76, 0xff, 0xa0, 0x88, 0x76, 0xff, 0x9f, 0x88, 0x76, 0xff, 0xa1, 0x89, 0x77, 0xff, 0xa1, 0x88, 0x77, 0xff, 0x88, 0x74, 0x62, 0xff, 0x6c, 0x5f, 0x4c, 0xff, 0x6e, 0x60, 0x4d, 0xff, 0x72, 0x64, 0x50, 0xff, 0x6f, 0x61, 0x4c, 0xfc, 0x72, 0x65, 0x59, 0xff, 0x89, 0x81, 0x83, 0xff, 0xf8, 0xf8, 0xf8, 0x08, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xf1, 0xef, 0xec, 0x10, 0xd3, 0xca, 0xc3, 0x44, 0xac, 0x9a, 0x8d, 0xff, 0x95, 0x80, 0x6f, 0xff, 0x8f, 0x79, 0x68, 0xff, 0x91, 0x7b, 0x6a, 0xff, 0x91, 0x7b, 0x69, 0xff, 0x8f, 0x7b, 0x69, 0xff, 0x8e, 0x79, 0x68, 0xff, 0x8b, 0x76, 0x65, 0xfb, 0x8e, 0x79, 0x69, 0xff, 0x9c, 0x8b, 0x7d, 0xff, 0xce, 0xc6, 0xbe, 0x47, 0xfc, 0xfc, 0xfb, 0x07, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xfe, 0xfe, 0xfd, 0x03, 0xbe, 0xad, 0xa1, 0xa7, 0x9b, 0x82, 0x70, 0xff, 0x9e, 0x86, 0x74, 0xff, 0xa0, 0x88, 0x76, 0xff, 0x9c, 0x84, 0x72, 0xff, 0x87, 0x74, 0x62, 0xff, 0x77, 0x67, 0x55, 0xff, 0x77, 0x67, 0x55, 0xff, 0x78, 0x68, 0x55, 0xff, 0x77, 0x67, 0x55, 0xff, 0x76, 0x66, 0x54, 0xff, 0x76, 0x66, 0x54, 0xff, 0x77, 0x67, 0x54, 0xff, 0x71, 0x62, 0x51, 0xfb, 0x6a, 0x5d, 0x52, 0xff, 0x7b, 0x70, 0x6e, 0xff, 0xa1, 0x9b, 0x9d, 0x83, 0xfc, 0xfc, 0xfc, 0x03, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, + 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xfd, 0xfd, 0xfd, 0x0b, 0xc8, 0xb9, 0xb0, 0x7f, 0xa8, 0x91, 0x81, 0xff, 0x9f, 0x87, 0x75, 0xff, 0x9f, 0x87, 0x77, 0xf8, 0x9f, 0x87, 0x76, 0xff, 0xa0, 0x88, 0x76, 0xff, 0xa0, 0x88, 0x76, 0xff, 0xa0, 0x88, 0x76, 0xff, 0xa1, 0x88, 0x76, 0xff, 0xa0, 0x88, 0x76, 0xff, 0x97, 0x81, 0x6f, 0xff, 0x7f, 0x6e, 0x5c, 0xff, 0x6d, 0x61, 0x4d, 0xff, 0x70, 0x62, 0x4e, 0xff, 0x74, 0x65, 0x50, 0xff, 0x6e, 0x60, 0x50, 0xff, 0x79, 0x6e, 0x69, 0xff, 0xc9, 0xc6, 0xc7, 0x44, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xd8, 0xd0, 0xc9, 0x2b, 0xa3, 0x90, 0x80, 0xff, 0x9b, 0x87, 0x76, 0xff, 0x93, 0x7c, 0x6a, 0xff, 0x91, 0x7c, 0x6a, 0xfb, 0x91, 0x7b, 0x6a, 0xff, 0x91, 0x7b, 0x69, 0xff, 0x91, 0x7b, 0x69, 0xff, 0x8f, 0x7a, 0x69, 0xff, 0x8e, 0x79, 0x68, 0xff, 0x8e, 0x79, 0x68, 0xff, 0x8e, 0x79, 0x68, 0xf7, 0x8d, 0x78, 0x67, 0xff, 0x95, 0x82, 0x72, 0xff, 0xa3, 0x92, 0x84, 0xff, 0xe0, 0xda, 0xd6, 0x1c, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xec, 0xe7, 0xe3, 0x1b, 0xaa, 0x95, 0x85, 0xff, 0x9e, 0x85, 0x73, 0xff, 0xa2, 0x89, 0x77, 0xff, 0xa5, 0x8c, 0x7a, 0xff, 0x90, 0x7b, 0x69, 0xff, 0x79, 0x69, 0x57, 0xff, 0x77, 0x67, 0x55, 0xff, 0x78, 0x67, 0x55, 0xff, 0x77, 0x67, 0x55, 0xff, 0x76, 0x66, 0x55, 0xff, 0x76, 0x66, 0x54, 0xff, 0x78, 0x69, 0x53, 0xff, 0x68, 0x5b, 0x4f, 0xf4, 0x6c, 0x63, 0x65, 0xff, 0xa4, 0xa0, 0xa4, 0x84, 0xfe, 0xfe, 0xfe, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, + 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xfe, 0xfe, 0xfe, 0x03, 0xf4, 0xf1, 0xef, 0x17, 0xc5, 0xb6, 0xac, 0x78, 0xa6, 0x8f, 0x7f, 0xff, 0x9c, 0x84, 0x73, 0xf8, 0x9e, 0x86, 0x74, 0xff, 0xa0, 0x88, 0x76, 0xff, 0x9f, 0x87, 0x75, 0xff, 0xa1, 0x89, 0x77, 0xff, 0x9f, 0x87, 0x75, 0xff, 0x8b, 0x78, 0x65, 0xff, 0x76, 0x67, 0x54, 0xff, 0x6f, 0x62, 0x4e, 0xff, 0x72, 0x64, 0x4f, 0xff, 0x73, 0x63, 0x4e, 0xff, 0x6f, 0x62, 0x56, 0xff, 0x88, 0x81, 0x82, 0xff, 0xf6, 0xf5, 0xf6, 0x0f, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xec, 0xe8, 0xe5, 0x18, 0xba, 0xab, 0x9f, 0x8c, 0x9a, 0x84, 0x72, 0xff, 0x8f, 0x77, 0x64, 0xff, 0x8f, 0x78, 0x65, 0xf3, 0x91, 0x7b, 0x6a, 0xff, 0x91, 0x7c, 0x6b, 0xff, 0x91, 0x7c, 0x6a, 0xff, 0x91, 0x7b, 0x69, 0xff, 0x90, 0x7a, 0x69, 0xff, 0x8f, 0x7a, 0x69, 0xff, 0x8e, 0x79, 0x68, 0xff, 0x8d, 0x79, 0x68, 0xff, 0x8e, 0x79, 0x68, 0xff, 0x8c, 0x77, 0x65, 0xfb, 0x85, 0x70, 0x5d, 0xf7, 0x88, 0x72, 0x5f, 0xff, 0x92, 0x7e, 0x6d, 0xff, 0xbc, 0xb0, 0xa6, 0x5b, 0xec, 0xe9, 0xe6, 0x14, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0xc9, 0xbb, 0xb0, 0x6c, 0x9f, 0x85, 0x73, 0xff, 0xa3, 0x89, 0x78, 0xff, 0xa8, 0x8e, 0x7d, 0xff, 0x99, 0x82, 0x70, 0xff, 0x83, 0x71, 0x5f, 0xff, 0x78, 0x68, 0x56, 0xff, 0x77, 0x67, 0x55, 0xff, 0x77, 0x67, 0x55, 0xff, 0x76, 0x66, 0x55, 0xff, 0x76, 0x66, 0x54, 0xff, 0x77, 0x68, 0x53, 0xf7, 0x6d, 0x5f, 0x54, 0xff, 0x91, 0x89, 0x8b, 0x8b, 0xfd, 0xfd, 0xfe, 0x03, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, + 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xdc, 0xd2, 0xcc, 0x44, 0xa7, 0x91, 0x81, 0xff, 0x9c, 0x84, 0x72, 0xf3, 0x9d, 0x85, 0x73, 0xff, 0x9f, 0x86, 0x75, 0xff, 0x9e, 0x86, 0x74, 0xff, 0xa1, 0x88, 0x76, 0xff, 0x9c, 0x85, 0x73, 0xff, 0x81, 0x6f, 0x5c, 0xff, 0x6e, 0x61, 0x4e, 0xff, 0x71, 0x63, 0x4f, 0xff, 0x73, 0x65, 0x50, 0xff, 0x70, 0x61, 0x4e, 0xff, 0x72, 0x67, 0x5f, 0xff, 0xa8, 0xa3, 0xa7, 0xb8, 0xfc, 0xfc, 0xfd, 0x08, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xeb, 0xe7, 0xe3, 0x1c, 0xa7, 0x96, 0x87, 0xff, 0x8c, 0x77, 0x64, 0xff, 0x86, 0x71, 0x5e, 0xf7, 0x8f, 0x79, 0x67, 0xf7, 0x93, 0x7d, 0x6b, 0xff, 0x92, 0x7d, 0x6d, 0xff, 0x91, 0x7c, 0x6b, 0xff, 0x92, 0x7c, 0x6b, 0xff, 0x92, 0x7c, 0x6b, 0xff, 0x90, 0x7b, 0x6a, 0xff, 0x90, 0x7a, 0x69, 0xff, 0x8f, 0x79, 0x68, 0xff, 0x8d, 0x79, 0x67, 0xff, 0x8c, 0x78, 0x67, 0xff, 0x8c, 0x79, 0x67, 0xff, 0x8d, 0x79, 0x66, 0xff, 0x89, 0x76, 0x62, 0xef, 0x7f, 0x6b, 0x57, 0xfb, 0x87, 0x75, 0x63, 0xff, 0xa2, 0x94, 0x86, 0xff, 0xeb, 0xe8, 0xe5, 0x18, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xe6, 0xe0, 0xda, 0x18, 0xa3, 0x8a, 0x77, 0xff, 0xa5, 0x8a, 0x78, 0xff, 0xa9, 0x8f, 0x7e, 0xff, 0xa1, 0x89, 0x77, 0xff, 0x8e, 0x79, 0x67, 0xff, 0x7a, 0x69, 0x57, 0xff, 0x76, 0x66, 0x54, 0xff, 0x77, 0x67, 0x55, 0xff, 0x76, 0x66, 0x54, 0xff, 0x76, 0x65, 0x54, 0xff, 0x77, 0x67, 0x53, 0xf0, 0x75, 0x67, 0x59, 0xff, 0xbe, 0xb9, 0xb5, 0x37, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, + 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xcf, 0xc4, 0xbb, 0x4c, 0x9f, 0x89, 0x76, 0xff, 0x9d, 0x85, 0x73, 0xf3, 0x9e, 0x86, 0x74, 0xff, 0x9e, 0x86, 0x74, 0xff, 0x9d, 0x86, 0x73, 0xff, 0x9f, 0x87, 0x75, 0xff, 0x97, 0x81, 0x6f, 0xff, 0x7a, 0x6a, 0x57, 0xff, 0x6c, 0x5f, 0x4b, 0xff, 0x72, 0x64, 0x50, 0xff, 0x73, 0x64, 0x50, 0xff, 0x6e, 0x60, 0x51, 0xff, 0x82, 0x78, 0x75, 0xff, 0xe3, 0xe1, 0xe2, 0x28, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xfd, 0xfc, 0xfc, 0x08, 0xad, 0x9a, 0x8b, 0xe8, 0x87, 0x72, 0x5e, 0xff, 0x7e, 0x6d, 0x5b, 0xe3, 0x86, 0x76, 0x65, 0xff, 0x92, 0x80, 0x6f, 0xff, 0x93, 0x7e, 0x6d, 0xff, 0x8f, 0x79, 0x68, 0xff, 0x8f, 0x79, 0x67, 0xfb, 0x8b, 0x75, 0x63, 0xff, 0x88, 0x73, 0x61, 0xff, 0x88, 0x74, 0x61, 0xff, 0x88, 0x73, 0x60, 0xff, 0x89, 0x72, 0x60, 0xff, 0x8a, 0x75, 0x64, 0xff, 0x8c, 0x77, 0x65, 0xff, 0x8b, 0x77, 0x64, 0xf7, 0x87, 0x74, 0x62, 0xff, 0x82, 0x72, 0x61, 0xff, 0x79, 0x6b, 0x58, 0xff, 0x7a, 0x69, 0x56, 0xdf, 0x82, 0x70, 0x5e, 0xff, 0xaa, 0x9d, 0x90, 0xb7, 0xff, 0xff, 0xff, 0x03, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xec, 0xe7, 0xe3, 0x13, 0xae, 0x96, 0x85, 0xff, 0xa7, 0x8d, 0x7b, 0xff, 0xaa, 0x90, 0x7e, 0xff, 0xa9, 0x8f, 0x7d, 0xff, 0x96, 0x80, 0x6e, 0xff, 0x7a, 0x69, 0x58, 0xff, 0x74, 0x65, 0x53, 0xff, 0x77, 0x67, 0x55, 0xff, 0x76, 0x66, 0x54, 0xff, 0x75, 0x65, 0x53, 0xff, 0x76, 0x66, 0x53, 0xf7, 0x71, 0x62, 0x52, 0xff, 0xa2, 0x9a, 0x92, 0x90, 0xfe, 0xfe, 0xfe, 0x04, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, + 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xca, 0xbe, 0xb4, 0x4c, 0x99, 0x81, 0x6e, 0xff, 0x9d, 0x86, 0x74, 0xf3, 0x9c, 0x85, 0x72, 0xff, 0x9d, 0x85, 0x73, 0xff, 0x9d, 0x86, 0x73, 0xff, 0x9b, 0x85, 0x72, 0xff, 0x8f, 0x7b, 0x68, 0xff, 0x78, 0x68, 0x55, 0xff, 0x6e, 0x60, 0x4d, 0xff, 0x74, 0x64, 0x50, 0xff, 0x73, 0x63, 0x50, 0xff, 0x6d, 0x60, 0x56, 0xff, 0x9e, 0x98, 0x97, 0xc7, 0xfc, 0xfc, 0xfc, 0x0b, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x04, 0xbf, 0xb1, 0xa5, 0x94, 0x92, 0x7b, 0x69, 0xff, 0x78, 0x66, 0x52, 0xf4, 0x78, 0x6c, 0x5a, 0xff, 0x9d, 0x94, 0x88, 0xd8, 0xad, 0xa2, 0x96, 0xcc, 0x9d, 0x8b, 0x7c, 0xff, 0x8e, 0x78, 0x66, 0xff, 0x86, 0x70, 0x5d, 0xff, 0x82, 0x70, 0x5d, 0xff, 0x81, 0x71, 0x5f, 0xff, 0x82, 0x72, 0x60, 0xff, 0x87, 0x75, 0x64, 0xff, 0x8b, 0x78, 0x68, 0xff, 0x8a, 0x76, 0x65, 0xff, 0x87, 0x72, 0x5f, 0xff, 0x86, 0x72, 0x5f, 0xff, 0x89, 0x7a, 0x6d, 0xff, 0x87, 0x7c, 0x73, 0xeb, 0x85, 0x7a, 0x6c, 0xcf, 0x7b, 0x6c, 0x5b, 0xfb, 0x7b, 0x67, 0x54, 0xf7, 0x8b, 0x78, 0x67, 0xff, 0xcd, 0xc5, 0xbe, 0x4b, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xd9, 0xcd, 0xc5, 0x3c, 0xac, 0x92, 0x81, 0xff, 0xa9, 0x8e, 0x7c, 0xff, 0xb0, 0x95, 0x83, 0xff, 0x9e, 0x87, 0x74, 0xff, 0x7b, 0x6a, 0x58, 0xff, 0x73, 0x63, 0x51, 0xff, 0x77, 0x67, 0x54, 0xff, 0x76, 0x67, 0x54, 0xff, 0x75, 0x66, 0x53, 0xff, 0x76, 0x67, 0x53, 0xff, 0x6c, 0x5d, 0x4a, 0xfb, 0x8c, 0x82, 0x78, 0xff, 0xe7, 0xe6, 0xe5, 0x1f, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, + 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x03, 0xbf, 0xb0, 0xa4, 0x78, 0x95, 0x7d, 0x69, 0xff, 0x9c, 0x85, 0x72, 0xf7, 0x9b, 0x84, 0x71, 0xff, 0x9b, 0x84, 0x72, 0xff, 0x9c, 0x85, 0x73, 0xff, 0x98, 0x82, 0x6f, 0xff, 0x89, 0x76, 0x63, 0xff, 0x77, 0x68, 0x54, 0xff, 0x6f, 0x62, 0x4f, 0xff, 0x74, 0x64, 0x50, 0xff, 0x74, 0x64, 0x51, 0xff, 0x72, 0x68, 0x63, 0xff, 0xd4, 0xd2, 0xd4, 0x33, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xda, 0xd1, 0xcb, 0x3f, 0x9c, 0x86, 0x75, 0xff, 0x8d, 0x75, 0x62, 0xff, 0x7c, 0x6d, 0x59, 0xff, 0x8a, 0x82, 0x71, 0xd4, 0xfa, 0xfa, 0xf9, 0x04, 0xff, 0xff, 0xff, 0x00, 0xf2, 0xf0, 0xee, 0x0f, 0x9c, 0x8d, 0x7e, 0xff, 0x92, 0x85, 0x75, 0xff, 0x9a, 0x8f, 0x82, 0xe8, 0xa3, 0x9b, 0x91, 0xaf, 0xa2, 0x98, 0x90, 0xb4, 0xaa, 0xa0, 0x97, 0xb4, 0xb1, 0xa6, 0x9c, 0xaf, 0xa5, 0x96, 0x87, 0xe7, 0x94, 0x81, 0x71, 0xff, 0x94, 0x85, 0x79, 0xff, 0xa8, 0xa0, 0x9b, 0xb3, 0xfb, 0xfa, 0xfb, 0x03, 0xfd, 0xfc, 0xfc, 0x00, 0x9c, 0x8d, 0x7f, 0xcb, 0x82, 0x70, 0x5d, 0xff, 0x7f, 0x6c, 0x59, 0xff, 0x93, 0x83, 0x73, 0xff, 0xe3, 0xdf, 0xdb, 0x23, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xeb, 0xe5, 0xe1, 0x18, 0xb1, 0x96, 0x85, 0xff, 0xaa, 0x8d, 0x7b, 0xff, 0xb3, 0x96, 0x85, 0xff, 0xa5, 0x8b, 0x79, 0xff, 0x83, 0x71, 0x5e, 0xff, 0x75, 0x65, 0x54, 0xff, 0x76, 0x65, 0x53, 0xff, 0x75, 0x66, 0x53, 0xff, 0x75, 0x66, 0x53, 0xff, 0x76, 0x67, 0x54, 0xff, 0x6f, 0x5f, 0x4b, 0xf7, 0x81, 0x75, 0x68, 0xff, 0xcd, 0xc9, 0xc7, 0x3c, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, + 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xfb, 0xfa, 0xf9, 0x18, 0xae, 0x9d, 0x8e, 0xec, 0x93, 0x7a, 0x67, 0xff, 0x9b, 0x83, 0x71, 0xfc, 0x9a, 0x83, 0x71, 0xff, 0x9b, 0x84, 0x72, 0xff, 0x9c, 0x85, 0x73, 0xff, 0x95, 0x7f, 0x6d, 0xff, 0x83, 0x71, 0x5e, 0xff, 0x74, 0x66, 0x51, 0xff, 0x71, 0x63, 0x4f, 0xff, 0x73, 0x64, 0x4f, 0xff, 0x72, 0x64, 0x52, 0xff, 0x7c, 0x73, 0x70, 0xff, 0xe3, 0xe2, 0xe3, 0x20, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xe7, 0xe1, 0xdd, 0x23, 0xa3, 0x8f, 0x80, 0xff, 0x93, 0x7c, 0x6a, 0xff, 0x91, 0x7a, 0x69, 0xf8, 0x85, 0x71, 0x5f, 0xff, 0x9b, 0x8f, 0x82, 0xdc, 0xfe, 0xfe, 0xfe, 0x03, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xf0, 0xef, 0xed, 0x14, 0xc6, 0xc2, 0xbb, 0x78, 0xf8, 0xf8, 0xf7, 0x0c, 0xff, 0xff, 0xff, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0xff, 0xff, 0xff, 0x00, 0xf9, 0xf9, 0xf8, 0x0b, 0xc7, 0xbe, 0xb6, 0x77, 0xdb, 0xd6, 0xd3, 0x3b, 0xfe, 0xfe, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xfe, 0xfe, 0x03, 0xa8, 0x99, 0x8b, 0xdf, 0x84, 0x71, 0x5e, 0xff, 0x7e, 0x6b, 0x59, 0xf3, 0x82, 0x70, 0x5e, 0xff, 0xaa, 0x9e, 0x93, 0xcb, 0xfc, 0xfb, 0xfb, 0x04, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xed, 0xe8, 0xe4, 0x18, 0xb6, 0x9c, 0x8c, 0xff, 0xac, 0x8d, 0x7b, 0xff, 0xb5, 0x97, 0x86, 0xff, 0xab, 0x8f, 0x7e, 0xff, 0x8f, 0x7a, 0x69, 0xff, 0x7a, 0x69, 0x58, 0xff, 0x74, 0x64, 0x52, 0xff, 0x74, 0x65, 0x52, 0xff, 0x75, 0x66, 0x53, 0xff, 0x75, 0x66, 0x54, 0xff, 0x71, 0x62, 0x4e, 0xff, 0x75, 0x67, 0x55, 0xff, 0x94, 0x8a, 0x80, 0xff, 0xda, 0xd6, 0xd3, 0x27, 0xfd, 0xfd, 0xfd, 0x00, 0xfb, 0xfb, 0xfa, 0x03, 0xfb, 0xfb, 0xfa, 0x03, 0xfa, 0xfa, 0xf9, 0x03, 0xfc, 0xfc, 0xfc, 0x03, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, + 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xfe, 0xfe, 0xfe, 0x03, 0xdf, 0xd8, 0xd3, 0x4f, 0xa8, 0x94, 0x85, 0xff, 0x95, 0x7c, 0x69, 0xff, 0x9a, 0x83, 0x71, 0xff, 0x9a, 0x83, 0x71, 0xff, 0x9a, 0x83, 0x72, 0xff, 0x9d, 0x85, 0x73, 0xff, 0x94, 0x7e, 0x6c, 0xff, 0x7d, 0x6c, 0x5a, 0xff, 0x72, 0x64, 0x50, 0xff, 0x73, 0x65, 0x51, 0xff, 0x73, 0x64, 0x51, 0xff, 0x72, 0x63, 0x54, 0xff, 0x86, 0x7e, 0x7b, 0xff, 0xe9, 0xe9, 0xea, 0x1b, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xd3, 0xca, 0xc3, 0x3f, 0x96, 0x80, 0x6f, 0xff, 0x92, 0x7b, 0x69, 0xf4, 0x93, 0x7d, 0x6c, 0xff, 0x8d, 0x76, 0x64, 0xff, 0x9a, 0x88, 0x78, 0xff, 0xce, 0xc8, 0xc1, 0x60, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xc2, 0xb6, 0xad, 0x88, 0x96, 0x84, 0x74, 0xff, 0x81, 0x6f, 0x5c, 0xff, 0x83, 0x71, 0x5f, 0xff, 0x81, 0x6e, 0x5c, 0xf7, 0x8b, 0x7a, 0x6a, 0xff, 0xd3, 0xcc, 0xc6, 0x30, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xf7, 0xf4, 0xf3, 0x0c, 0xb8, 0x9f, 0x90, 0xff, 0xaa, 0x8b, 0x79, 0xff, 0xb4, 0x97, 0x86, 0xff, 0xad, 0x91, 0x80, 0xff, 0x96, 0x7f, 0x6e, 0xff, 0x7d, 0x6b, 0x5a, 0xff, 0x74, 0x64, 0x52, 0xff, 0x74, 0x65, 0x53, 0xff, 0x75, 0x66, 0x53, 0xff, 0x75, 0x66, 0x53, 0xff, 0x74, 0x65, 0x52, 0xff, 0x73, 0x65, 0x50, 0xf7, 0x75, 0x67, 0x54, 0xff, 0x74, 0x67, 0x54, 0xff, 0x75, 0x68, 0x54, 0xd4, 0x76, 0x69, 0x57, 0xdc, 0x7a, 0x6c, 0x5b, 0xdf, 0x79, 0x6d, 0x5c, 0xff, 0x8f, 0x85, 0x75, 0xe7, 0xf0, 0xee, 0xec, 0x0c, 0xff, 0xff, 0xff, 0x00, + 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xfd, 0xfd, 0xfc, 0x08, 0xf9, 0xf8, 0xf7, 0x10, 0xfa, 0xf9, 0xf8, 0x0b, 0xf4, 0xf1, 0xf0, 0x1b, 0xe3, 0xdd, 0xd8, 0x50, 0xc0, 0xb3, 0xa8, 0xb4, 0xa6, 0x92, 0x83, 0xff, 0x9b, 0x84, 0x73, 0xff, 0x98, 0x81, 0x6f, 0xff, 0x99, 0x83, 0x71, 0xff, 0x99, 0x83, 0x71, 0xff, 0x9a, 0x83, 0x71, 0xff, 0x9c, 0x84, 0x73, 0xff, 0x94, 0x7e, 0x6c, 0xff, 0x81, 0x6f, 0x5c, 0xff, 0x7a, 0x6a, 0x57, 0xff, 0x7d, 0x6c, 0x59, 0xff, 0x7c, 0x6a, 0x58, 0xff, 0x7a, 0x6a, 0x5c, 0xff, 0x8d, 0x82, 0x7d, 0xff, 0xd6, 0xd2, 0xd1, 0x43, 0xff, 0xff, 0xff, 0x03, 0xff, 0xff, 0xff, 0x03, 0xff, 0xff, 0xff, 0x04, 0xff, 0xff, 0xff, 0x04, 0xff, 0xff, 0xff, 0x04, 0xfe, 0xfe, 0xfe, 0x04, 0xfe, 0xfe, 0xff, 0x04, 0xff, 0xff, 0xff, 0x04, 0xff, 0xff, 0xff, 0x04, 0xfe, 0xfe, 0xfe, 0x04, 0xff, 0xff, 0xff, 0x03, 0xfe, 0xfe, 0xfe, 0x04, 0xf8, 0xf7, 0xf6, 0x13, 0xbc, 0xae, 0xa3, 0x80, 0x8f, 0x79, 0x66, 0xff, 0x90, 0x7b, 0x6a, 0xff, 0x93, 0x7d, 0x6c, 0xff, 0x93, 0x7b, 0x6a, 0xfb, 0x8b, 0x76, 0x64, 0xff, 0x91, 0x82, 0x72, 0xff, 0xf0, 0xee, 0xed, 0x17, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xf8, 0xf7, 0xf6, 0x0b, 0x9a, 0x88, 0x79, 0xff, 0x85, 0x71, 0x5f, 0xff, 0x83, 0x71, 0x5f, 0xfb, 0x85, 0x74, 0x62, 0xff, 0x83, 0x70, 0x5e, 0xfb, 0x7d, 0x6a, 0x57, 0xff, 0xa6, 0x9a, 0x8d, 0xb0, 0xf4, 0xf3, 0xf2, 0x10, 0xfc, 0xfc, 0xfc, 0x03, 0xfb, 0xfb, 0xfa, 0x04, 0xfa, 0xfa, 0xf9, 0x04, 0xfa, 0xf9, 0xf9, 0x04, 0xfa, 0xfa, 0xf9, 0x04, 0xfa, 0xfa, 0xf9, 0x04, 0xfa, 0xfa, 0xf9, 0x04, 0xfa, 0xfa, 0xf9, 0x04, 0xfa, 0xfa, 0xf9, 0x04, 0xfa, 0xfa, 0xf9, 0x04, 0xfa, 0xfa, 0xf9, 0x04, 0xfa, 0xfa, 0xf9, 0x04, 0xfd, 0xfd, 0xfd, 0x03, 0xdd, 0xd6, 0xcf, 0x33, 0xa7, 0x8f, 0x7e, 0xff, 0x9e, 0x83, 0x71, 0xff, 0xa5, 0x8c, 0x7b, 0xff, 0xa1, 0x88, 0x76, 0xff, 0x91, 0x7b, 0x69, 0xff, 0x7d, 0x6b, 0x59, 0xff, 0x74, 0x65, 0x53, 0xff, 0x74, 0x65, 0x53, 0xff, 0x74, 0x65, 0x53, 0xff, 0x74, 0x64, 0x52, 0xff, 0x74, 0x65, 0x52, 0xff, 0x72, 0x65, 0x50, 0xff, 0x6e, 0x5f, 0x4a, 0xf8, 0x6b, 0x5c, 0x47, 0xff, 0x6c, 0x5e, 0x4a, 0xff, 0x6b, 0x5e, 0x4a, 0xff, 0x6c, 0x5f, 0x4c, 0xff, 0x6c, 0x5e, 0x4b, 0xff, 0x73, 0x67, 0x54, 0xff, 0x85, 0x7b, 0x69, 0xe3, 0xfd, 0xfd, 0xfc, 0x00, + 0xff, 0xff, 0xff, 0x00, 0xed, 0xe9, 0xe6, 0x20, 0xb7, 0xa8, 0x9a, 0xdf, 0xaf, 0x9e, 0x90, 0xff, 0xab, 0x99, 0x8a, 0xff, 0xa1, 0x8d, 0x7d, 0xff, 0x9c, 0x87, 0x75, 0xff, 0x99, 0x83, 0x72, 0xff, 0x96, 0x7f, 0x6d, 0xff, 0x96, 0x7f, 0x6e, 0xfc, 0x99, 0x82, 0x71, 0xff, 0x99, 0x82, 0x71, 0xff, 0x99, 0x82, 0x71, 0xff, 0x98, 0x82, 0x70, 0xff, 0x99, 0x83, 0x71, 0xff, 0x96, 0x80, 0x6e, 0xff, 0x8f, 0x7a, 0x68, 0xff, 0x8c, 0x79, 0x67, 0xff, 0x8e, 0x7a, 0x68, 0xff, 0x8d, 0x79, 0x67, 0xff, 0x8c, 0x78, 0x69, 0xff, 0x93, 0x80, 0x74, 0xff, 0xa5, 0x94, 0x89, 0xff, 0xc7, 0xba, 0xb1, 0x98, 0xd7, 0xce, 0xc7, 0x64, 0xce, 0xc3, 0xbb, 0x80, 0xcd, 0xc3, 0xbb, 0x80, 0xcc, 0xc1, 0xb9, 0x88, 0xca, 0xc0, 0xb8, 0x8b, 0xcb, 0xc1, 0xb7, 0x88, 0xcb, 0xc0, 0xb7, 0x88, 0xcb, 0xc0, 0xb7, 0x87, 0xca, 0xc0, 0xb7, 0x88, 0xcf, 0xc6, 0xbe, 0x78, 0xbf, 0xb2, 0xa7, 0xaf, 0xa7, 0x96, 0x88, 0xff, 0x98, 0x85, 0x74, 0xff, 0x90, 0x7b, 0x69, 0xfc, 0x91, 0x7c, 0x6a, 0xff, 0x92, 0x7c, 0x6b, 0xff, 0x94, 0x7d, 0x6c, 0xff, 0x80, 0x6b, 0x57, 0xff, 0x7f, 0x70, 0x5e, 0xff, 0xc8, 0xc3, 0xbc, 0x6c, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xf3, 0xf0, 0xee, 0x14, 0x93, 0x7f, 0x6e, 0xff, 0x82, 0x6d, 0x5a, 0xff, 0x83, 0x71, 0x5f, 0xff, 0x85, 0x73, 0x61, 0xff, 0x83, 0x71, 0x5f, 0xff, 0x7f, 0x6d, 0x5a, 0xfb, 0x88, 0x78, 0x67, 0xff, 0x9b, 0x8d, 0x80, 0xff, 0xa7, 0x9a, 0x8d, 0xff, 0xa8, 0x9b, 0x8f, 0xff, 0xa5, 0x98, 0x8c, 0xff, 0xa5, 0x98, 0x8b, 0xff, 0xa4, 0x98, 0x8a, 0xff, 0xa3, 0x98, 0x8a, 0xff, 0xa3, 0x97, 0x8a, 0xff, 0xa3, 0x97, 0x8a, 0xff, 0xa3, 0x97, 0x8a, 0xff, 0xa2, 0x97, 0x8a, 0xff, 0xa2, 0x96, 0x89, 0xff, 0xa2, 0x96, 0x89, 0xff, 0xa4, 0x99, 0x8c, 0xff, 0x98, 0x8a, 0x7c, 0xff, 0x87, 0x74, 0x62, 0xff, 0x86, 0x72, 0x60, 0xff, 0x88, 0x75, 0x63, 0xff, 0x86, 0x73, 0x61, 0xff, 0x81, 0x6e, 0x5c, 0xff, 0x78, 0x68, 0x56, 0xff, 0x74, 0x66, 0x53, 0xff, 0x74, 0x66, 0x53, 0xff, 0x74, 0x65, 0x52, 0xff, 0x74, 0x64, 0x52, 0xff, 0x73, 0x65, 0x51, 0xff, 0x72, 0x64, 0x50, 0xff, 0x71, 0x63, 0x4f, 0xff, 0x71, 0x63, 0x4f, 0xff, 0x70, 0x63, 0x4f, 0xff, 0x6e, 0x62, 0x4f, 0xff, 0x6d, 0x60, 0x4d, 0xff, 0x6b, 0x5d, 0x4b, 0xfb, 0x65, 0x58, 0x44, 0xff, 0x6c, 0x61, 0x4c, 0xff, 0xf6, 0xf6, 0xf4, 0x08, + 0xf9, 0xf8, 0xf7, 0x0f, 0x96, 0x81, 0x6f, 0xff, 0x92, 0x7c, 0x69, 0xff, 0x95, 0x7f, 0x6d, 0xff, 0x96, 0x80, 0x6e, 0xff, 0x96, 0x7f, 0x6d, 0xff, 0x95, 0x7d, 0x6b, 0xff, 0x95, 0x7e, 0x6c, 0xff, 0x95, 0x7f, 0x6d, 0xfc, 0x97, 0x80, 0x6f, 0xff, 0x97, 0x81, 0x70, 0xff, 0x98, 0x81, 0x70, 0xff, 0x98, 0x81, 0x70, 0xff, 0x97, 0x81, 0x6f, 0xff, 0x97, 0x81, 0x6f, 0xff, 0x97, 0x81, 0x6f, 0xff, 0x99, 0x82, 0x71, 0xff, 0x9a, 0x83, 0x72, 0xff, 0x9a, 0x83, 0x71, 0xff, 0x9a, 0x83, 0x72, 0xff, 0x9a, 0x83, 0x71, 0xff, 0x98, 0x80, 0x6e, 0xfc, 0x96, 0x7e, 0x6c, 0xff, 0x95, 0x7e, 0x6c, 0xff, 0x95, 0x7f, 0x6d, 0xff, 0x95, 0x7f, 0x6c, 0xff, 0x94, 0x7e, 0x6c, 0xff, 0x94, 0x7e, 0x6c, 0xff, 0x94, 0x7e, 0x6c, 0xff, 0x94, 0x7e, 0x6c, 0xff, 0x93, 0x7d, 0x6b, 0xff, 0x93, 0x7d, 0x6b, 0xff, 0x93, 0x7d, 0x6b, 0xff, 0x92, 0x7c, 0x6a, 0xff, 0x92, 0x7c, 0x6a, 0xff, 0x91, 0x7b, 0x69, 0xff, 0x90, 0x7b, 0x69, 0xff, 0x91, 0x7c, 0x6a, 0xfc, 0x91, 0x7c, 0x6a, 0xff, 0x92, 0x7c, 0x6a, 0xff, 0x93, 0x7c, 0x6a, 0xff, 0x7e, 0x6b, 0x57, 0xff, 0x7d, 0x71, 0x61, 0xff, 0xe3, 0xe1, 0xdf, 0x37, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0xa7, 0x91, 0x81, 0xb7, 0x8b, 0x76, 0x63, 0xff, 0x80, 0x6f, 0x5d, 0xff, 0x83, 0x71, 0x5f, 0xff, 0x83, 0x71, 0x5f, 0xff, 0x82, 0x71, 0x5f, 0xfb, 0x80, 0x6d, 0x5b, 0xff, 0x7f, 0x6d, 0x5a, 0xff, 0x80, 0x6e, 0x5b, 0xff, 0x7e, 0x6c, 0x5a, 0xff, 0x7e, 0x6b, 0x5a, 0xff, 0x7d, 0x6b, 0x59, 0xff, 0x7c, 0x6b, 0x58, 0xff, 0x7c, 0x6a, 0x57, 0xff, 0x7c, 0x6a, 0x57, 0xff, 0x7b, 0x6a, 0x57, 0xff, 0x7a, 0x69, 0x56, 0xff, 0x7a, 0x69, 0x56, 0xff, 0x7a, 0x69, 0x55, 0xff, 0x79, 0x67, 0x55, 0xff, 0x78, 0x67, 0x55, 0xff, 0x75, 0x65, 0x53, 0xff, 0x75, 0x65, 0x53, 0xfb, 0x75, 0x66, 0x54, 0xff, 0x73, 0x64, 0x52, 0xff, 0x73, 0x64, 0x52, 0xff, 0x74, 0x65, 0x52, 0xff, 0x75, 0x65, 0x53, 0xff, 0x75, 0x65, 0x53, 0xff, 0x75, 0x66, 0x53, 0xff, 0x74, 0x65, 0x52, 0xff, 0x74, 0x65, 0x52, 0xff, 0x73, 0x64, 0x51, 0xff, 0x72, 0x64, 0x4f, 0xff, 0x71, 0x63, 0x4f, 0xff, 0x71, 0x63, 0x4f, 0xff, 0x70, 0x63, 0x4f, 0xff, 0x6f, 0x62, 0x4f, 0xff, 0x6f, 0x62, 0x4f, 0xff, 0x6d, 0x60, 0x4d, 0xff, 0x66, 0x58, 0x43, 0xff, 0x71, 0x66, 0x52, 0xec, 0xdf, 0xdd, 0xda, 0x3b, + 0xe4, 0xde, 0xda, 0x50, 0x96, 0x80, 0x6e, 0xff, 0x8e, 0x76, 0x63, 0xff, 0x93, 0x7d, 0x6a, 0xfc, 0x94, 0x7e, 0x6c, 0xff, 0x95, 0x7f, 0x6d, 0xff, 0x96, 0x7f, 0x6d, 0xff, 0x96, 0x80, 0x6e, 0xff, 0x96, 0x80, 0x6e, 0xff, 0x97, 0x81, 0x6f, 0xff, 0x97, 0x81, 0x6f, 0xff, 0x97, 0x81, 0x6f, 0xff, 0x96, 0x81, 0x6f, 0xff, 0x97, 0x81, 0x6f, 0xff, 0x97, 0x81, 0x6f, 0xff, 0x97, 0x81, 0x6f, 0xff, 0x98, 0x82, 0x70, 0xff, 0x98, 0x82, 0x70, 0xff, 0x98, 0x82, 0x70, 0xff, 0x98, 0x82, 0x70, 0xff, 0x98, 0x81, 0x70, 0xff, 0x97, 0x80, 0x6e, 0xff, 0x94, 0x7e, 0x6b, 0xff, 0x93, 0x7c, 0x6a, 0xff, 0x93, 0x7c, 0x6a, 0xff, 0x93, 0x7c, 0x6a, 0xff, 0x92, 0x7c, 0x69, 0xff, 0x92, 0x7b, 0x69, 0xff, 0x92, 0x7b, 0x69, 0xff, 0x92, 0x7b, 0x69, 0xff, 0x91, 0x7b, 0x68, 0xff, 0x91, 0x7a, 0x68, 0xff, 0x90, 0x7a, 0x68, 0xff, 0x90, 0x79, 0x68, 0xff, 0x8f, 0x79, 0x67, 0xff, 0x8f, 0x79, 0x67, 0xff, 0x90, 0x7b, 0x68, 0xff, 0x91, 0x7b, 0x69, 0xff, 0x91, 0x7b, 0x69, 0xff, 0x91, 0x7b, 0x6a, 0xff, 0x90, 0x7a, 0x68, 0xff, 0x7e, 0x6c, 0x5a, 0xff, 0x80, 0x75, 0x68, 0xff, 0xe9, 0xe8, 0xe7, 0x2c, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0xb6, 0x9f, 0x91, 0xb3, 0x91, 0x7c, 0x6a, 0xff, 0x7f, 0x6e, 0x5b, 0xff, 0x83, 0x71, 0x5f, 0xff, 0x83, 0x71, 0x5f, 0xff, 0x82, 0x70, 0x5e, 0xff, 0x80, 0x6e, 0x5c, 0xff, 0x7e, 0x6c, 0x59, 0xff, 0x7c, 0x6a, 0x57, 0xff, 0x7b, 0x69, 0x56, 0xff, 0x7b, 0x68, 0x56, 0xff, 0x7b, 0x68, 0x56, 0xff, 0x7a, 0x67, 0x55, 0xff, 0x7a, 0x68, 0x55, 0xff, 0x7a, 0x68, 0x55, 0xff, 0x79, 0x67, 0x54, 0xff, 0x78, 0x66, 0x53, 0xff, 0x77, 0x66, 0x52, 0xff, 0x77, 0x65, 0x51, 0xff, 0x75, 0x64, 0x52, 0xff, 0x74, 0x63, 0x51, 0xff, 0x74, 0x64, 0x52, 0xff, 0x76, 0x66, 0x54, 0xff, 0x76, 0x66, 0x54, 0xff, 0x75, 0x65, 0x53, 0xff, 0x74, 0x64, 0x52, 0xff, 0x75, 0x65, 0x53, 0xff, 0x75, 0x66, 0x53, 0xff, 0x75, 0x66, 0x53, 0xff, 0x75, 0x66, 0x53, 0xff, 0x74, 0x65, 0x52, 0xff, 0x73, 0x65, 0x51, 0xff, 0x73, 0x64, 0x51, 0xff, 0x72, 0x64, 0x50, 0xff, 0x71, 0x63, 0x4f, 0xff, 0x70, 0x62, 0x4e, 0xff, 0x6f, 0x62, 0x4e, 0xff, 0x6e, 0x61, 0x4e, 0xff, 0x6e, 0x61, 0x4e, 0xff, 0x6e, 0x61, 0x4d, 0xff, 0x67, 0x58, 0x43, 0xff, 0x70, 0x63, 0x50, 0xfb, 0xb6, 0xaf, 0xaa, 0xaf, + 0xe0, 0xd9, 0xd5, 0x60, 0x99, 0x83, 0x73, 0xf3, 0x90, 0x79, 0x67, 0xff, 0x96, 0x7f, 0x6d, 0xff, 0x96, 0x80, 0x6e, 0xff, 0x96, 0x80, 0x6e, 0xff, 0x95, 0x80, 0x6e, 0xff, 0x96, 0x80, 0x6e, 0xff, 0x96, 0x80, 0x6e, 0xff, 0x96, 0x80, 0x6e, 0xff, 0x97, 0x81, 0x6f, 0xff, 0x96, 0x81, 0x6f, 0xff, 0x96, 0x81, 0x6f, 0xff, 0x97, 0x81, 0x6f, 0xff, 0x97, 0x81, 0x6f, 0xff, 0x97, 0x81, 0x6f, 0xff, 0x97, 0x81, 0x6f, 0xff, 0x96, 0x81, 0x6f, 0xff, 0x97, 0x81, 0x6f, 0xff, 0x96, 0x80, 0x6e, 0xff, 0x95, 0x7f, 0x6d, 0xff, 0x96, 0x80, 0x6e, 0xff, 0x96, 0x80, 0x6e, 0xff, 0x96, 0x80, 0x6e, 0xff, 0x96, 0x80, 0x6e, 0xff, 0x96, 0x80, 0x6e, 0xff, 0x95, 0x7f, 0x6d, 0xff, 0x95, 0x7f, 0x6d, 0xff, 0x95, 0x7f, 0x6d, 0xff, 0x95, 0x7f, 0x6d, 0xff, 0x95, 0x7f, 0x6d, 0xff, 0x94, 0x7e, 0x6c, 0xff, 0x92, 0x7d, 0x6c, 0xff, 0x92, 0x7c, 0x6c, 0xff, 0x91, 0x7c, 0x6b, 0xff, 0x91, 0x7b, 0x69, 0xff, 0x91, 0x7b, 0x69, 0xff, 0x90, 0x7b, 0x69, 0xff, 0x90, 0x7a, 0x69, 0xff, 0x8f, 0x7a, 0x69, 0xff, 0x8d, 0x79, 0x66, 0xff, 0x7f, 0x6c, 0x5b, 0xff, 0x84, 0x78, 0x6d, 0xff, 0xec, 0xeb, 0xeb, 0x28, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0xbf, 0xaa, 0x9c, 0xb7, 0x95, 0x80, 0x6e, 0xff, 0x7d, 0x6c, 0x59, 0xff, 0x82, 0x70, 0x5e, 0xff, 0x83, 0x71, 0x5f, 0xff, 0x82, 0x70, 0x5e, 0xff, 0x81, 0x6f, 0x5d, 0xff, 0x80, 0x6e, 0x5c, 0xff, 0x80, 0x6e, 0x5c, 0xff, 0x7f, 0x6d, 0x5b, 0xff, 0x7f, 0x6d, 0x5b, 0xff, 0x7f, 0x6d, 0x5b, 0xff, 0x7e, 0x6d, 0x5b, 0xff, 0x7e, 0x6d, 0x5a, 0xff, 0x7e, 0x6d, 0x5a, 0xff, 0x7d, 0x6c, 0x59, 0xff, 0x7c, 0x6b, 0x58, 0xff, 0x7b, 0x6b, 0x57, 0xff, 0x7a, 0x6a, 0x57, 0xff, 0x7a, 0x69, 0x58, 0xff, 0x79, 0x69, 0x57, 0xff, 0x78, 0x68, 0x56, 0xff, 0x77, 0x67, 0x55, 0xff, 0x77, 0x67, 0x55, 0xff, 0x76, 0x66, 0x54, 0xff, 0x76, 0x66, 0x54, 0xff, 0x76, 0x66, 0x54, 0xff, 0x75, 0x66, 0x53, 0xff, 0x75, 0x66, 0x53, 0xff, 0x74, 0x65, 0x52, 0xff, 0x73, 0x65, 0x51, 0xff, 0x73, 0x65, 0x51, 0xff, 0x73, 0x64, 0x51, 0xff, 0x71, 0x63, 0x4f, 0xff, 0x70, 0x62, 0x4f, 0xff, 0x70, 0x62, 0x4f, 0xff, 0x6e, 0x61, 0x4e, 0xff, 0x6e, 0x61, 0x4e, 0xff, 0x6e, 0x61, 0x4e, 0xff, 0x6f, 0x61, 0x4d, 0xff, 0x69, 0x5a, 0x45, 0xfb, 0x6e, 0x61, 0x4e, 0xff, 0x92, 0x89, 0x83, 0xff, + 0xec, 0xe8, 0xe5, 0x3b, 0x99, 0x85, 0x73, 0xec, 0x90, 0x79, 0x66, 0xff, 0x94, 0x7e, 0x6c, 0xff, 0x95, 0x7f, 0x6d, 0xff, 0x95, 0x7f, 0x6c, 0xff, 0x95, 0x7f, 0x6d, 0xff, 0x95, 0x7f, 0x6d, 0xff, 0x96, 0x80, 0x6e, 0xff, 0x95, 0x7f, 0x6d, 0xff, 0x95, 0x7f, 0x6d, 0xff, 0x95, 0x7f, 0x6d, 0xff, 0x95, 0x7f, 0x6d, 0xff, 0x95, 0x7f, 0x6d, 0xff, 0x95, 0x7f, 0x6d, 0xff, 0x95, 0x7f, 0x6d, 0xff, 0x95, 0x7f, 0x6d, 0xff, 0x95, 0x7f, 0x6d, 0xff, 0x95, 0x7f, 0x6d, 0xff, 0x95, 0x7f, 0x6d, 0xff, 0x95, 0x7f, 0x6d, 0xff, 0x95, 0x7f, 0x6d, 0xff, 0x95, 0x7f, 0x6d, 0xff, 0x95, 0x7f, 0x6d, 0xff, 0x95, 0x7f, 0x6d, 0xff, 0x95, 0x7f, 0x6d, 0xff, 0x95, 0x7f, 0x6d, 0xff, 0x94, 0x7e, 0x6c, 0xff, 0x93, 0x7e, 0x6c, 0xff, 0x93, 0x7e, 0x6c, 0xff, 0x93, 0x7d, 0x6c, 0xff, 0x92, 0x7c, 0x6c, 0xff, 0x91, 0x7c, 0x6b, 0xff, 0x91, 0x7b, 0x6a, 0xff, 0x91, 0x7b, 0x69, 0xff, 0x91, 0x7b, 0x69, 0xff, 0x90, 0x7a, 0x69, 0xff, 0x8f, 0x7a, 0x69, 0xff, 0x8f, 0x7a, 0x69, 0xff, 0x8f, 0x7a, 0x68, 0xff, 0x8d, 0x78, 0x66, 0xff, 0x81, 0x6e, 0x5d, 0xff, 0x87, 0x79, 0x6e, 0xff, 0xf1, 0xf0, 0xf0, 0x20, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0xbc, 0xa5, 0x98, 0xb8, 0x93, 0x7d, 0x6c, 0xff, 0x7d, 0x6b, 0x59, 0xff, 0x81, 0x6f, 0x5d, 0xff, 0x82, 0x70, 0x5e, 0xff, 0x81, 0x6f, 0x5d, 0xff, 0x80, 0x6e, 0x5c, 0xff, 0x80, 0x6e, 0x5c, 0xff, 0x80, 0x6e, 0x5c, 0xff, 0x7f, 0x6d, 0x5b, 0xff, 0x7f, 0x6d, 0x5b, 0xff, 0x7f, 0x6d, 0x5b, 0xff, 0x7e, 0x6d, 0x5a, 0xff, 0x7e, 0x6d, 0x59, 0xff, 0x7d, 0x6c, 0x59, 0xff, 0x7d, 0x6c, 0x59, 0xff, 0x7c, 0x6b, 0x58, 0xff, 0x7b, 0x6a, 0x57, 0xff, 0x7a, 0x6a, 0x58, 0xff, 0x79, 0x69, 0x57, 0xff, 0x79, 0x69, 0x57, 0xff, 0x78, 0x68, 0x56, 0xff, 0x77, 0x67, 0x55, 0xff, 0x76, 0x66, 0x54, 0xff, 0x76, 0x65, 0x54, 0xff, 0x75, 0x65, 0x53, 0xff, 0x75, 0x65, 0x53, 0xff, 0x75, 0x66, 0x53, 0xff, 0x75, 0x66, 0x53, 0xff, 0x74, 0x65, 0x52, 0xff, 0x73, 0x64, 0x51, 0xff, 0x73, 0x64, 0x51, 0xff, 0x72, 0x64, 0x50, 0xff, 0x71, 0x62, 0x4f, 0xff, 0x70, 0x62, 0x4e, 0xff, 0x6f, 0x62, 0x4f, 0xff, 0x6e, 0x61, 0x4e, 0xff, 0x6e, 0x61, 0x4e, 0xff, 0x6e, 0x61, 0x4e, 0xff, 0x6e, 0x61, 0x4c, 0xff, 0x66, 0x59, 0x43, 0xfb, 0x6a, 0x5e, 0x4a, 0xff, 0x8c, 0x85, 0x7e, 0xff, + 0xeb, 0xe7, 0xe4, 0x3c, 0x96, 0x81, 0x6f, 0xec, 0x8e, 0x77, 0x64, 0xff, 0x94, 0x7e, 0x6c, 0xff, 0x94, 0x7e, 0x6c, 0xff, 0x94, 0x7e, 0x6c, 0xff, 0x95, 0x7f, 0x6d, 0xff, 0x95, 0x7f, 0x6d, 0xff, 0x95, 0x7f, 0x6d, 0xff, 0x95, 0x7f, 0x6d, 0xff, 0x95, 0x7f, 0x6d, 0xff, 0x95, 0x7f, 0x6d, 0xff, 0x95, 0x7f, 0x6d, 0xff, 0x95, 0x7f, 0x6d, 0xff, 0x94, 0x7f, 0x6d, 0xff, 0x95, 0x7f, 0x6d, 0xff, 0x97, 0x80, 0x6e, 0xff, 0x97, 0x81, 0x6f, 0xff, 0x97, 0x80, 0x6f, 0xff, 0x97, 0x81, 0x6f, 0xff, 0x97, 0x81, 0x6f, 0xff, 0x97, 0x81, 0x6e, 0xff, 0x96, 0x7f, 0x6c, 0xff, 0x93, 0x7d, 0x6a, 0xff, 0x90, 0x7a, 0x68, 0xff, 0x90, 0x79, 0x67, 0xff, 0x90, 0x7a, 0x68, 0xff, 0x8f, 0x79, 0x67, 0xff, 0x8f, 0x78, 0x66, 0xff, 0x8e, 0x78, 0x66, 0xff, 0x8e, 0x77, 0x65, 0xff, 0x8e, 0x77, 0x65, 0xff, 0x8d, 0x77, 0x64, 0xff, 0x8d, 0x76, 0x63, 0xff, 0x8d, 0x76, 0x63, 0xff, 0x8e, 0x77, 0x65, 0xff, 0x8f, 0x79, 0x68, 0xff, 0x8f, 0x7a, 0x69, 0xff, 0x8e, 0x79, 0x68, 0xff, 0x8f, 0x79, 0x68, 0xff, 0x8e, 0x7a, 0x68, 0xff, 0x83, 0x70, 0x5e, 0xff, 0x8a, 0x7c, 0x6e, 0xff, 0xf1, 0xf0, 0xef, 0x24, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xaf, 0x99, 0x8a, 0xb3, 0x8d, 0x78, 0x65, 0xff, 0x7e, 0x6c, 0x5a, 0xff, 0x81, 0x6f, 0x5d, 0xff, 0x81, 0x6f, 0x5d, 0xff, 0x80, 0x6f, 0x5d, 0xff, 0x81, 0x6f, 0x5d, 0xff, 0x81, 0x6f, 0x5c, 0xff, 0x7f, 0x6d, 0x5a, 0xff, 0x7d, 0x6a, 0x57, 0xff, 0x7a, 0x68, 0x55, 0xff, 0x79, 0x67, 0x54, 0xff, 0x79, 0x67, 0x53, 0xff, 0x79, 0x67, 0x53, 0xff, 0x78, 0x66, 0x52, 0xff, 0x78, 0x66, 0x52, 0xff, 0x77, 0x65, 0x51, 0xff, 0x76, 0x64, 0x51, 0xff, 0x75, 0x64, 0x51, 0xff, 0x73, 0x62, 0x50, 0xff, 0x73, 0x62, 0x4f, 0xff, 0x74, 0x64, 0x51, 0xff, 0x76, 0x66, 0x54, 0xff, 0x75, 0x65, 0x54, 0xff, 0x74, 0x64, 0x52, 0xff, 0x74, 0x64, 0x52, 0xff, 0x75, 0x66, 0x53, 0xff, 0x75, 0x66, 0x53, 0xff, 0x74, 0x66, 0x52, 0xff, 0x73, 0x65, 0x51, 0xff, 0x73, 0x64, 0x51, 0xff, 0x72, 0x63, 0x50, 0xff, 0x71, 0x63, 0x4f, 0xff, 0x71, 0x63, 0x4f, 0xff, 0x72, 0x63, 0x4f, 0xff, 0x70, 0x62, 0x4d, 0xff, 0x6c, 0x5f, 0x4a, 0xff, 0x6a, 0x5c, 0x47, 0xff, 0x68, 0x5b, 0x46, 0xff, 0x69, 0x5d, 0x48, 0xff, 0x66, 0x59, 0x46, 0xff, 0x72, 0x67, 0x56, 0xff, 0xb9, 0xb5, 0xb0, 0x8f, + 0xf0, 0xed, 0xeb, 0x2c, 0x93, 0x7d, 0x6c, 0xff, 0x8b, 0x74, 0x61, 0xff, 0x90, 0x7a, 0x68, 0xfc, 0x91, 0x7c, 0x6a, 0xff, 0x91, 0x7c, 0x6a, 0xff, 0x92, 0x7c, 0x6b, 0xff, 0x94, 0x7d, 0x6c, 0xff, 0x95, 0x7e, 0x6c, 0xff, 0x94, 0x7e, 0x6c, 0xff, 0x94, 0x7e, 0x6c, 0xff, 0x95, 0x7e, 0x6c, 0xff, 0x95, 0x7f, 0x6d, 0xff, 0x95, 0x7f, 0x6d, 0xff, 0x94, 0x7f, 0x6d, 0xff, 0x95, 0x7f, 0x6d, 0xff, 0x96, 0x80, 0x6e, 0xff, 0x96, 0x80, 0x6e, 0xff, 0x96, 0x80, 0x6e, 0xff, 0x95, 0x7f, 0x6e, 0xff, 0x96, 0x7f, 0x6d, 0xff, 0x94, 0x7e, 0x6b, 0xfc, 0x92, 0x7b, 0x69, 0xff, 0x92, 0x7c, 0x6b, 0xff, 0x93, 0x7e, 0x6d, 0xff, 0x93, 0x7e, 0x6d, 0xff, 0x92, 0x7f, 0x6c, 0xff, 0x92, 0x7e, 0x6c, 0xff, 0x92, 0x7d, 0x6c, 0xff, 0x92, 0x7c, 0x6c, 0xff, 0x92, 0x7c, 0x6b, 0xff, 0x91, 0x7c, 0x6a, 0xff, 0x91, 0x7c, 0x6a, 0xff, 0x91, 0x7c, 0x6a, 0xff, 0x91, 0x7c, 0x6a, 0xff, 0x8f, 0x7a, 0x69, 0xff, 0x8e, 0x79, 0x68, 0xff, 0x8e, 0x79, 0x68, 0xfc, 0x8e, 0x79, 0x68, 0xff, 0x8e, 0x79, 0x68, 0xff, 0x8e, 0x79, 0x67, 0xff, 0x85, 0x70, 0x5d, 0xff, 0x8f, 0x7e, 0x6d, 0xff, 0xe8, 0xe5, 0xe3, 0x38, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xfb, 0xfa, 0xf9, 0x0c, 0x9f, 0x8a, 0x7a, 0xdc, 0x85, 0x71, 0x5e, 0xff, 0x7f, 0x6e, 0x5c, 0xff, 0x81, 0x6f, 0x5d, 0xff, 0x80, 0x6e, 0x5c, 0xff, 0x80, 0x6e, 0x5c, 0xff, 0x80, 0x6f, 0x5c, 0xff, 0x7f, 0x6d, 0x5a, 0xfb, 0x7f, 0x6c, 0x5a, 0xff, 0x7f, 0x6e, 0x5c, 0xff, 0x7e, 0x6e, 0x5c, 0xff, 0x7e, 0x6d, 0x5c, 0xff, 0x7e, 0x6d, 0x5b, 0xff, 0x7e, 0x6d, 0x5b, 0xff, 0x7d, 0x6c, 0x5a, 0xff, 0x7d, 0x6b, 0x59, 0xff, 0x7c, 0x6b, 0x58, 0xff, 0x7b, 0x6b, 0x58, 0xff, 0x7a, 0x6a, 0x57, 0xff, 0x79, 0x69, 0x57, 0xff, 0x78, 0x69, 0x57, 0xff, 0x77, 0x67, 0x55, 0xff, 0x76, 0x66, 0x54, 0xfb, 0x75, 0x66, 0x54, 0xff, 0x74, 0x65, 0x53, 0xff, 0x74, 0x66, 0x52, 0xff, 0x75, 0x66, 0x53, 0xff, 0x74, 0x65, 0x52, 0xff, 0x73, 0x65, 0x51, 0xff, 0x73, 0x65, 0x51, 0xff, 0x72, 0x64, 0x50, 0xff, 0x71, 0x63, 0x4f, 0xff, 0x71, 0x63, 0x4f, 0xff, 0x70, 0x63, 0x4f, 0xff, 0x70, 0x63, 0x4f, 0xff, 0x6d, 0x5f, 0x4b, 0xfb, 0x6d, 0x5f, 0x4c, 0xff, 0x6f, 0x62, 0x4f, 0xff, 0x6e, 0x62, 0x50, 0xff, 0x70, 0x64, 0x54, 0xff, 0x7a, 0x6f, 0x64, 0xff, 0x8d, 0x86, 0x80, 0xff, 0xf8, 0xf7, 0xf7, 0x0b, + 0xfb, 0xfb, 0xfa, 0x0b, 0x9e, 0x8a, 0x7b, 0xf7, 0x8f, 0x7a, 0x68, 0xff, 0x8c, 0x76, 0x64, 0xff, 0x8f, 0x79, 0x69, 0xff, 0x90, 0x7b, 0x69, 0xff, 0x8f, 0x79, 0x67, 0xff, 0x8f, 0x78, 0x66, 0xff, 0x91, 0x7c, 0x69, 0xfc, 0x93, 0x7d, 0x6c, 0xff, 0x93, 0x7d, 0x6c, 0xff, 0x93, 0x7d, 0x6c, 0xff, 0x93, 0x7e, 0x6c, 0xff, 0x94, 0x7e, 0x6d, 0xff, 0x95, 0x7f, 0x6e, 0xff, 0x8f, 0x7c, 0x6a, 0xff, 0x83, 0x72, 0x5f, 0xff, 0x81, 0x6f, 0x5c, 0xff, 0x82, 0x70, 0x5c, 0xff, 0x81, 0x6f, 0x5c, 0xff, 0x7d, 0x6b, 0x5b, 0xff, 0x79, 0x67, 0x5d, 0xff, 0x84, 0x74, 0x6e, 0xff, 0x9a, 0x8c, 0x84, 0xff, 0xc3, 0xb9, 0xb3, 0x93, 0xdc, 0xd6, 0xd2, 0x57, 0xd8, 0xd2, 0xcc, 0x5b, 0xd8, 0xd2, 0xcc, 0x5b, 0xd6, 0xcf, 0xca, 0x63, 0xd6, 0xcf, 0xca, 0x63, 0xd8, 0xd1, 0xcd, 0x5b, 0xd8, 0xd1, 0xcb, 0x5c, 0xd5, 0xce, 0xc8, 0x64, 0xdc, 0xd6, 0xd1, 0x53, 0xc5, 0xba, 0xb4, 0x90, 0xa4, 0x95, 0x8b, 0xff, 0x93, 0x80, 0x71, 0xff, 0x8b, 0x76, 0x64, 0xfc, 0x8d, 0x79, 0x67, 0xff, 0x8d, 0x79, 0x67, 0xff, 0x8c, 0x78, 0x67, 0xff, 0x85, 0x70, 0x5c, 0xff, 0x92, 0x7f, 0x6d, 0xff, 0xd0, 0xca, 0xc5, 0x73, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xdd, 0xd7, 0xd2, 0x4c, 0x90, 0x7e, 0x6d, 0xff, 0x7c, 0x68, 0x55, 0xff, 0x80, 0x6f, 0x5d, 0xfb, 0x81, 0x6f, 0x5d, 0xff, 0x80, 0x6e, 0x5c, 0xff, 0x81, 0x6e, 0x5b, 0xff, 0x7a, 0x69, 0x59, 0xfb, 0x75, 0x68, 0x5f, 0xff, 0x80, 0x73, 0x6d, 0xff, 0x91, 0x85, 0x7d, 0xff, 0xa0, 0x95, 0x8c, 0xff, 0xb8, 0xaf, 0xa7, 0x9f, 0xc2, 0xbb, 0xb4, 0x78, 0xbe, 0xb6, 0xaf, 0x84, 0xbf, 0xb7, 0xb0, 0x83, 0xbe, 0xb7, 0xaf, 0x83, 0xbe, 0xb7, 0xb0, 0x83, 0xbe, 0xb7, 0xaf, 0x83, 0xbf, 0xb9, 0xb0, 0x7f, 0xbc, 0xb4, 0xad, 0x8b, 0xa7, 0x9e, 0x96, 0xdf, 0x91, 0x84, 0x78, 0xff, 0x80, 0x6e, 0x5c, 0xff, 0x7e, 0x6c, 0x59, 0xff, 0x7f, 0x6e, 0x5c, 0xff, 0x7e, 0x6d, 0x5b, 0xff, 0x7a, 0x6a, 0x58, 0xff, 0x76, 0x66, 0x53, 0xff, 0x73, 0x64, 0x51, 0xff, 0x73, 0x64, 0x51, 0xff, 0x72, 0x64, 0x50, 0xff, 0x71, 0x63, 0x4f, 0xff, 0x72, 0x64, 0x4f, 0xff, 0x6e, 0x61, 0x4e, 0xff, 0x64, 0x57, 0x4a, 0xf8, 0x67, 0x5b, 0x54, 0xff, 0x7b, 0x72, 0x6c, 0xff, 0x94, 0x8c, 0x86, 0xff, 0xc2, 0xbe, 0xb9, 0x60, 0xe8, 0xe6, 0xe3, 0x17, 0xed, 0xec, 0xeb, 0x0c, 0xf5, 0xf5, 0xf5, 0x08, 0xff, 0xff, 0xff, 0x00, + 0xff, 0xff, 0xff, 0x00, 0xf5, 0xf3, 0xf2, 0x17, 0xc2, 0xb8, 0xae, 0xa0, 0xa8, 0x98, 0x8a, 0xff, 0xa3, 0x91, 0x84, 0xff, 0xa1, 0x8f, 0x81, 0xf8, 0x9e, 0x8d, 0x7e, 0xff, 0x98, 0x87, 0x78, 0xff, 0x90, 0x7d, 0x6d, 0xff, 0x90, 0x7c, 0x6b, 0xf8, 0x92, 0x7d, 0x6c, 0xff, 0x91, 0x7c, 0x6b, 0xff, 0x91, 0x7c, 0x6b, 0xff, 0x93, 0x7d, 0x6c, 0xff, 0x95, 0x7f, 0x6e, 0xff, 0x8b, 0x78, 0x66, 0xff, 0x75, 0x67, 0x54, 0xff, 0x6e, 0x60, 0x4c, 0xff, 0x6f, 0x62, 0x4d, 0xff, 0x6c, 0x5f, 0x4a, 0xff, 0x67, 0x5a, 0x4c, 0xff, 0x76, 0x6b, 0x6a, 0xff, 0xb3, 0xad, 0xb0, 0x94, 0xf3, 0xf2, 0xf2, 0x1c, 0xfe, 0xfe, 0xfe, 0x04, 0xff, 0xff, 0xff, 0x03, 0xff, 0xff, 0xff, 0x03, 0xff, 0xff, 0xff, 0x03, 0xff, 0xff, 0xff, 0x03, 0xff, 0xff, 0xff, 0x03, 0xff, 0xff, 0xff, 0x03, 0xff, 0xff, 0xff, 0x03, 0xff, 0xff, 0xff, 0x03, 0xff, 0xff, 0xff, 0x03, 0xfe, 0xfe, 0xfe, 0x04, 0xfa, 0xfa, 0xf9, 0x10, 0xbb, 0xb0, 0xa6, 0x70, 0x88, 0x73, 0x61, 0xff, 0x8b, 0x76, 0x64, 0xfc, 0x8d, 0x79, 0x67, 0xff, 0x8c, 0x77, 0x65, 0xfc, 0x87, 0x72, 0x60, 0xff, 0x93, 0x82, 0x76, 0xff, 0xe0, 0xdc, 0xd9, 0x4b, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xf8, 0xf7, 0xf6, 0x0c, 0x95, 0x85, 0x77, 0xf8, 0x82, 0x70, 0x5e, 0xff, 0x7e, 0x6c, 0x59, 0xfb, 0x81, 0x6f, 0x5d, 0xff, 0x81, 0x6e, 0x5c, 0xff, 0x81, 0x6e, 0x5a, 0xf7, 0x7a, 0x6b, 0x61, 0xff, 0x83, 0x7b, 0x7d, 0xff, 0xd0, 0xcd, 0xce, 0x2b, 0xfb, 0xfb, 0xfb, 0x03, 0xf9, 0xf9, 0xf8, 0x07, 0xfe, 0xfe, 0xfe, 0x03, 0xff, 0xff, 0xff, 0x03, 0xfe, 0xfe, 0xfe, 0x03, 0xfe, 0xfe, 0xfe, 0x03, 0xfe, 0xfe, 0xfe, 0x03, 0xfe, 0xfe, 0xfe, 0x03, 0xfe, 0xfe, 0xfe, 0x03, 0xfe, 0xfe, 0xff, 0x03, 0xfe, 0xfe, 0xfe, 0x03, 0xfe, 0xfe, 0xfe, 0x03, 0xd1, 0xca, 0xc6, 0x37, 0x91, 0x7e, 0x6e, 0xff, 0x86, 0x71, 0x5e, 0xff, 0x8b, 0x78, 0x66, 0xff, 0x88, 0x74, 0x63, 0xff, 0x81, 0x6e, 0x5d, 0xff, 0x77, 0x67, 0x54, 0xff, 0x72, 0x64, 0x50, 0xff, 0x72, 0x64, 0x50, 0xff, 0x72, 0x64, 0x50, 0xff, 0x71, 0x63, 0x4f, 0xff, 0x73, 0x65, 0x4f, 0xff, 0x6c, 0x5e, 0x4c, 0xff, 0x5f, 0x53, 0x50, 0xff, 0x80, 0x78, 0x7c, 0xff, 0xd0, 0xce, 0xd0, 0x33, 0xfc, 0xfc, 0xfc, 0x03, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, + 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xfe, 0xfe, 0xfe, 0x04, 0xfb, 0xfb, 0xfa, 0x0c, 0xfb, 0xfa, 0xfa, 0x0b, 0xfc, 0xfb, 0xfb, 0x07, 0xf7, 0xf6, 0xf5, 0x18, 0xc6, 0xbe, 0xb8, 0x90, 0x9d, 0x8d, 0x81, 0xff, 0x93, 0x7e, 0x6d, 0xff, 0x90, 0x7a, 0x68, 0xf8, 0x91, 0x7b, 0x6a, 0xff, 0x91, 0x7b, 0x6a, 0xff, 0x92, 0x7c, 0x6b, 0xff, 0x93, 0x7e, 0x6c, 0xff, 0x8c, 0x77, 0x65, 0xff, 0x79, 0x69, 0x56, 0xff, 0x6d, 0x60, 0x4c, 0xff, 0x6c, 0x5f, 0x4a, 0xff, 0x68, 0x5b, 0x45, 0xff, 0x68, 0x5c, 0x4a, 0xff, 0x95, 0x8d, 0x8b, 0xff, 0xf4, 0xf4, 0xf5, 0x23, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xd5, 0xce, 0xc8, 0x43, 0x91, 0x7e, 0x6d, 0xff, 0x89, 0x74, 0x62, 0xf7, 0x8c, 0x78, 0x65, 0xff, 0x88, 0x73, 0x60, 0xff, 0x8b, 0x79, 0x6c, 0xff, 0xa4, 0x9b, 0x97, 0xb3, 0xfe, 0xfe, 0xfe, 0x04, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xfe, 0xfe, 0xfe, 0x03, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xdf, 0xdc, 0xd8, 0x3b, 0x90, 0x81, 0x72, 0xff, 0x7a, 0x68, 0x55, 0xff, 0x7f, 0x6d, 0x5a, 0xff, 0x80, 0x6d, 0x5a, 0xf8, 0x7e, 0x6e, 0x5e, 0xff, 0x89, 0x7e, 0x79, 0xff, 0xcf, 0xcd, 0xcf, 0x30, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xeb, 0xe7, 0xe4, 0x14, 0x99, 0x86, 0x76, 0xff, 0x88, 0x72, 0x5f, 0xff, 0x90, 0x7b, 0x69, 0xff, 0x8b, 0x77, 0x65, 0xff, 0x81, 0x6f, 0x5c, 0xff, 0x76, 0x67, 0x54, 0xff, 0x72, 0x64, 0x50, 0xff, 0x72, 0x64, 0x50, 0xff, 0x71, 0x63, 0x4f, 0xff, 0x70, 0x62, 0x4f, 0xff, 0x71, 0x63, 0x4e, 0xff, 0x6a, 0x5c, 0x4c, 0xff, 0x73, 0x6b, 0x6b, 0xff, 0xc3, 0xc0, 0xc4, 0x3f, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, + 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xda, 0xd4, 0xcf, 0x50, 0x9d, 0x8b, 0x7b, 0xff, 0x8a, 0x73, 0x60, 0xfc, 0x91, 0x7b, 0x6a, 0xff, 0x90, 0x7a, 0x69, 0xff, 0x91, 0x7b, 0x69, 0xff, 0x92, 0x7c, 0x6a, 0xff, 0x8e, 0x78, 0x66, 0xff, 0x7e, 0x6d, 0x5a, 0xff, 0x70, 0x62, 0x4d, 0xff, 0x6c, 0x5f, 0x4a, 0xff, 0x69, 0x5c, 0x45, 0xff, 0x6b, 0x5e, 0x4a, 0xff, 0x92, 0x8a, 0x86, 0xff, 0xee, 0xed, 0xee, 0x20, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xe9, 0xe5, 0xe1, 0x2f, 0xa3, 0x93, 0x85, 0xff, 0x8a, 0x75, 0x63, 0xff, 0x87, 0x73, 0x60, 0xf8, 0x80, 0x6d, 0x5a, 0xff, 0x8d, 0x80, 0x73, 0xff, 0xed, 0xec, 0xed, 0x28, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x03, 0xcc, 0xc4, 0xbd, 0x78, 0xac, 0x9d, 0x8f, 0xec, 0xdf, 0xd9, 0xd4, 0x40, 0xff, 0xff, 0xff, 0x00, 0xfe, 0xfe, 0xfe, 0x03, 0xfe, 0xfe, 0xfe, 0x03, 0xff, 0xff, 0xff, 0x00, 0xf6, 0xf2, 0xf0, 0x20, 0xc7, 0xb8, 0xae, 0x9f, 0xef, 0xeb, 0xe8, 0x23, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x03, 0xa3, 0x95, 0x88, 0xd8, 0x80, 0x6d, 0x5a, 0xff, 0x7b, 0x68, 0x54, 0xfb, 0x7b, 0x68, 0x56, 0xff, 0x85, 0x78, 0x6d, 0xff, 0xce, 0xc9, 0xc9, 0x33, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xe7, 0xe2, 0xdf, 0x18, 0x98, 0x85, 0x73, 0xff, 0x8a, 0x74, 0x62, 0xff, 0x92, 0x7c, 0x6b, 0xff, 0x8b, 0x77, 0x65, 0xff, 0x7c, 0x6c, 0x59, 0xff, 0x74, 0x65, 0x52, 0xff, 0x72, 0x64, 0x50, 0xff, 0x71, 0x64, 0x50, 0xff, 0x70, 0x63, 0x4f, 0xff, 0x70, 0x63, 0x4e, 0xff, 0x6e, 0x60, 0x4b, 0xff, 0x69, 0x5d, 0x4e, 0xfb, 0x86, 0x80, 0x80, 0xff, 0xe0, 0xdf, 0xe2, 0x1f, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, + 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xb6, 0xa8, 0x9d, 0x7c, 0x89, 0x72, 0x61, 0xff, 0x91, 0x7b, 0x6a, 0xf7, 0x90, 0x7a, 0x69, 0xff, 0x90, 0x7a, 0x69, 0xff, 0x91, 0x7b, 0x6a, 0xff, 0x8f, 0x79, 0x68, 0xff, 0x83, 0x70, 0x5e, 0xff, 0x72, 0x63, 0x4f, 0xff, 0x6b, 0x5e, 0x4a, 0xff, 0x6a, 0x5d, 0x47, 0xff, 0x6b, 0x5e, 0x48, 0xff, 0x84, 0x7a, 0x72, 0xff, 0xe2, 0xe0, 0xe1, 0x2b, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xdd, 0xd7, 0xd2, 0x47, 0x94, 0x82, 0x72, 0xff, 0x84, 0x6e, 0x5c, 0xff, 0x7e, 0x6c, 0x59, 0xff, 0x8c, 0x7f, 0x70, 0xff, 0xd9, 0xd4, 0xd1, 0x58, 0xff, 0xff, 0xff, 0x07, 0xea, 0xe6, 0xe3, 0x2f, 0x95, 0x85, 0x75, 0xff, 0x8d, 0x7a, 0x69, 0xff, 0x9c, 0x8a, 0x7c, 0xff, 0xb2, 0xa3, 0x97, 0xbc, 0xb4, 0xa5, 0x96, 0xbf, 0xb5, 0xa6, 0x99, 0xc0, 0xba, 0xa9, 0x9c, 0xbc, 0xa9, 0x94, 0x84, 0xfc, 0x95, 0x80, 0x6f, 0xff, 0x96, 0x86, 0x77, 0xff, 0xe3, 0xe0, 0xdd, 0x37, 0xff, 0xff, 0xff, 0x03, 0xfc, 0xfb, 0xfa, 0x07, 0xaf, 0x9c, 0x8d, 0xd8, 0x8d, 0x77, 0x65, 0xff, 0x77, 0x64, 0x52, 0xff, 0x87, 0x78, 0x6a, 0xff, 0xc9, 0xc3, 0xbf, 0x47, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xd2, 0xca, 0xc2, 0x47, 0x95, 0x81, 0x6f, 0xff, 0x8d, 0x78, 0x65, 0xff, 0x93, 0x7d, 0x6c, 0xff, 0x8b, 0x77, 0x64, 0xff, 0x78, 0x69, 0x54, 0xff, 0x72, 0x63, 0x50, 0xff, 0x72, 0x64, 0x50, 0xff, 0x71, 0x63, 0x50, 0xff, 0x71, 0x63, 0x4f, 0xff, 0x70, 0x63, 0x4f, 0xff, 0x6c, 0x5e, 0x4a, 0xff, 0x6b, 0x5e, 0x51, 0xff, 0x96, 0x90, 0x8f, 0xff, 0xf2, 0xf2, 0xf3, 0x13, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, + 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xc7, 0xbc, 0xb4, 0x48, 0x8c, 0x76, 0x65, 0xff, 0x90, 0x7b, 0x6a, 0xf3, 0x8f, 0x7a, 0x69, 0xff, 0x8f, 0x7a, 0x69, 0xff, 0x8f, 0x7a, 0x69, 0xff, 0x8f, 0x79, 0x69, 0xff, 0x87, 0x74, 0x62, 0xff, 0x74, 0x65, 0x50, 0xff, 0x6a, 0x5e, 0x49, 0xff, 0x6b, 0x5e, 0x48, 0xff, 0x6b, 0x5e, 0x49, 0xff, 0x79, 0x6f, 0x62, 0xff, 0xe1, 0xdf, 0xdd, 0x24, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x03, 0xc9, 0xc0, 0xb8, 0x68, 0x87, 0x74, 0x62, 0xff, 0x7d, 0x6a, 0x57, 0xff, 0x8a, 0x78, 0x67, 0xff, 0x9e, 0x8d, 0x7f, 0xff, 0xa7, 0x97, 0x8a, 0xe8, 0x95, 0x84, 0x74, 0xfc, 0x80, 0x6d, 0x5a, 0xff, 0x80, 0x6e, 0x5a, 0xf8, 0x85, 0x73, 0x61, 0xff, 0x8d, 0x79, 0x68, 0xff, 0x90, 0x7c, 0x69, 0xff, 0x91, 0x7d, 0x6b, 0xff, 0x91, 0x7d, 0x6b, 0xff, 0x89, 0x75, 0x62, 0xff, 0x7c, 0x69, 0x56, 0xff, 0x7b, 0x68, 0x56, 0xff, 0x8f, 0x81, 0x71, 0xff, 0xa7, 0x9b, 0x8e, 0xdb, 0xac, 0x9b, 0x8c, 0xd8, 0xa3, 0x8c, 0x7c, 0xf8, 0x8a, 0x74, 0x61, 0xff, 0x7d, 0x6c, 0x5b, 0xff, 0xb9, 0xb1, 0xaa, 0x80, 0xfe, 0xfe, 0xfe, 0x08, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xee, 0xea, 0xe8, 0x14, 0xaa, 0x99, 0x8a, 0xff, 0x93, 0x7d, 0x6b, 0xff, 0x91, 0x7b, 0x69, 0xff, 0x94, 0x7d, 0x6c, 0xff, 0x89, 0x75, 0x62, 0xff, 0x75, 0x66, 0x52, 0xff, 0x71, 0x63, 0x4f, 0xff, 0x72, 0x64, 0x51, 0xff, 0x71, 0x63, 0x50, 0xff, 0x71, 0x63, 0x4f, 0xff, 0x70, 0x63, 0x4f, 0xff, 0x69, 0x5b, 0x49, 0xfb, 0x74, 0x69, 0x5f, 0xff, 0xc0, 0xbc, 0xbb, 0x54, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, + 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xc9, 0xbf, 0xb7, 0x54, 0x94, 0x81, 0x71, 0xff, 0x8d, 0x79, 0x67, 0xf3, 0x8d, 0x79, 0x67, 0xff, 0x8e, 0x79, 0x68, 0xff, 0x8e, 0x79, 0x68, 0xff, 0x8f, 0x7a, 0x69, 0xff, 0x8b, 0x77, 0x65, 0xff, 0x75, 0x67, 0x53, 0xff, 0x6a, 0x5e, 0x49, 0xff, 0x6c, 0x5f, 0x4a, 0xff, 0x6b, 0x5e, 0x49, 0xff, 0x6f, 0x63, 0x53, 0xff, 0xda, 0xd7, 0xd3, 0x2f, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x03, 0xb9, 0xad, 0xa3, 0x8c, 0x87, 0x74, 0x63, 0xff, 0x86, 0x72, 0x60, 0xe8, 0x8c, 0x78, 0x65, 0xff, 0x8c, 0x79, 0x68, 0xff, 0x85, 0x73, 0x61, 0xff, 0x83, 0x71, 0x5f, 0xfc, 0x84, 0x72, 0x61, 0xfc, 0x83, 0x71, 0x5e, 0xff, 0x81, 0x6e, 0x5c, 0xff, 0x82, 0x6f, 0x5c, 0xff, 0x81, 0x6f, 0x5c, 0xff, 0x80, 0x6d, 0x5b, 0xff, 0x7f, 0x6e, 0x5b, 0xff, 0x80, 0x6e, 0x5c, 0xfc, 0x7e, 0x6b, 0x59, 0xfc, 0x7f, 0x6c, 0x5b, 0xff, 0x87, 0x76, 0x64, 0xff, 0x8c, 0x79, 0x67, 0xff, 0x86, 0x72, 0x5f, 0xef, 0x86, 0x75, 0x64, 0xff, 0xbb, 0xb3, 0xaa, 0x6c, 0xff, 0xff, 0xff, 0x03, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xe5, 0xe1, 0xdc, 0x13, 0x98, 0x83, 0x71, 0xff, 0x93, 0x7d, 0x6a, 0xff, 0x95, 0x7f, 0x6e, 0xff, 0x92, 0x7c, 0x6b, 0xff, 0x85, 0x72, 0x5f, 0xff, 0x74, 0x66, 0x52, 0xff, 0x71, 0x63, 0x4f, 0xff, 0x71, 0x64, 0x50, 0xff, 0x70, 0x63, 0x4f, 0xff, 0x70, 0x62, 0x4f, 0xff, 0x70, 0x62, 0x4f, 0xff, 0x67, 0x5a, 0x48, 0xf8, 0x7d, 0x74, 0x6b, 0xff, 0xde, 0xdb, 0xdb, 0x23, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, + 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xe7, 0xe3, 0xdf, 0x3f, 0xa4, 0x95, 0x87, 0xff, 0x87, 0x74, 0x61, 0xff, 0x8b, 0x78, 0x66, 0xff, 0x8e, 0x7a, 0x68, 0xff, 0x8d, 0x79, 0x67, 0xff, 0x8f, 0x7a, 0x69, 0xff, 0x8c, 0x7a, 0x66, 0xff, 0x7a, 0x6b, 0x58, 0xff, 0x6d, 0x60, 0x4c, 0xff, 0x6c, 0x60, 0x4a, 0xff, 0x6a, 0x5d, 0x48, 0xff, 0x68, 0x5a, 0x46, 0xff, 0xaa, 0xa3, 0x9a, 0xa0, 0xff, 0xff, 0xff, 0x08, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xfb, 0xfb, 0xfa, 0x17, 0xae, 0xa1, 0x94, 0xef, 0x8b, 0x78, 0x67, 0xff, 0x80, 0x6c, 0x59, 0xfc, 0x83, 0x71, 0x5d, 0xf3, 0x83, 0x72, 0x5f, 0xff, 0x84, 0x73, 0x62, 0xff, 0x84, 0x72, 0x61, 0xff, 0x84, 0x72, 0x60, 0xff, 0x83, 0x72, 0x60, 0xff, 0x82, 0x71, 0x5f, 0xff, 0x81, 0x70, 0x5e, 0xff, 0x81, 0x6f, 0x5d, 0xff, 0x80, 0x6f, 0x5d, 0xff, 0x81, 0x6f, 0x5d, 0xff, 0x81, 0x6f, 0x5e, 0xff, 0x7f, 0x6c, 0x5a, 0xff, 0x7d, 0x6a, 0x57, 0xf4, 0x7a, 0x68, 0x53, 0xf8, 0x83, 0x73, 0x62, 0xff, 0xab, 0x9f, 0x96, 0xd8, 0xfe, 0xfe, 0xfe, 0x0b, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xd7, 0xd0, 0xc9, 0x2b, 0x92, 0x7b, 0x69, 0xff, 0x94, 0x7e, 0x6c, 0xff, 0x97, 0x81, 0x6f, 0xff, 0x8e, 0x7a, 0x68, 0xff, 0x80, 0x6e, 0x5b, 0xff, 0x73, 0x65, 0x51, 0xff, 0x70, 0x63, 0x4f, 0xff, 0x70, 0x63, 0x4f, 0xff, 0x70, 0x62, 0x4e, 0xff, 0x70, 0x62, 0x4f, 0xff, 0x6f, 0x61, 0x4f, 0xff, 0x69, 0x5b, 0x48, 0xfb, 0x76, 0x6b, 0x5b, 0xff, 0xb4, 0xaf, 0xa7, 0x6b, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, + 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xee, 0xeb, 0xe9, 0x30, 0xa1, 0x92, 0x82, 0xff, 0x87, 0x74, 0x61, 0xff, 0x8b, 0x78, 0x65, 0xfc, 0x8d, 0x79, 0x67, 0xff, 0x8c, 0x78, 0x66, 0xff, 0x8e, 0x7a, 0x67, 0xff, 0x8c, 0x79, 0x67, 0xff, 0x81, 0x70, 0x5d, 0xff, 0x73, 0x65, 0x51, 0xff, 0x6c, 0x5f, 0x4a, 0xff, 0x6a, 0x5e, 0x48, 0xff, 0x67, 0x59, 0x44, 0xff, 0x86, 0x7b, 0x6e, 0xff, 0xe0, 0xde, 0xdc, 0x3c, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xf6, 0xf4, 0xf3, 0x20, 0xc2, 0xb9, 0xb0, 0x6c, 0x92, 0x82, 0x72, 0xff, 0x83, 0x71, 0x5f, 0xff, 0x79, 0x65, 0x52, 0xfc, 0x80, 0x6d, 0x5b, 0xf8, 0x84, 0x72, 0x60, 0xff, 0x84, 0x72, 0x61, 0xff, 0x83, 0x71, 0x5f, 0xff, 0x82, 0x70, 0x5e, 0xff, 0x82, 0x70, 0x5e, 0xff, 0x81, 0x6f, 0x5d, 0xff, 0x81, 0x6f, 0x5d, 0xff, 0x81, 0x6f, 0x5d, 0xff, 0x81, 0x6f, 0x5c, 0xff, 0x80, 0x6c, 0x58, 0xf8, 0x7c, 0x69, 0x57, 0xff, 0x81, 0x71, 0x62, 0xff, 0xb8, 0xb0, 0xa7, 0x77, 0xf4, 0xf3, 0xf2, 0x1b, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xfa, 0xf9, 0xf8, 0x07, 0xb0, 0x9e, 0x90, 0xff, 0x94, 0x7d, 0x6b, 0xff, 0x97, 0x80, 0x6e, 0xff, 0x99, 0x82, 0x70, 0xff, 0x8a, 0x76, 0x64, 0xff, 0x78, 0x68, 0x54, 0xff, 0x71, 0x63, 0x4f, 0xff, 0x70, 0x63, 0x50, 0xff, 0x70, 0x63, 0x4f, 0xff, 0x70, 0x62, 0x4e, 0xff, 0x6e, 0x62, 0x4f, 0xff, 0x6e, 0x61, 0x4f, 0xff, 0x6d, 0x5f, 0x4c, 0xff, 0x6d, 0x60, 0x4b, 0xfb, 0x82, 0x77, 0x66, 0xff, 0xb3, 0xad, 0xa2, 0x53, 0xf1, 0xef, 0xed, 0x08, 0xfd, 0xfd, 0xfd, 0x03, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, + 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xfe, 0xfe, 0xfe, 0x07, 0xed, 0xeb, 0xe8, 0x28, 0xb1, 0xa4, 0x98, 0x90, 0x8f, 0x7b, 0x6a, 0xff, 0x8b, 0x78, 0x65, 0xf8, 0x8b, 0x77, 0x65, 0xff, 0x8c, 0x78, 0x66, 0xff, 0x8b, 0x77, 0x65, 0xff, 0x8c, 0x78, 0x66, 0xff, 0x8d, 0x78, 0x66, 0xff, 0x88, 0x75, 0x63, 0xff, 0x79, 0x69, 0x56, 0xff, 0x6b, 0x5f, 0x4a, 0xff, 0x6b, 0x5e, 0x49, 0xff, 0x6a, 0x5d, 0x49, 0xff, 0x6f, 0x62, 0x52, 0xff, 0xa1, 0x99, 0x8f, 0xec, 0xfb, 0xfb, 0xfa, 0x10, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xe5, 0xe2, 0xde, 0x30, 0xad, 0xa1, 0x95, 0xa4, 0x94, 0x85, 0x76, 0xff, 0x8e, 0x7d, 0x6d, 0xff, 0x84, 0x72, 0x5f, 0xfc, 0x82, 0x70, 0x5e, 0xfc, 0x82, 0x70, 0x5e, 0xff, 0x82, 0x70, 0x5d, 0xff, 0x81, 0x6f, 0x5d, 0xff, 0x81, 0x6f, 0x5d, 0xff, 0x81, 0x6f, 0x5d, 0xff, 0x7f, 0x6d, 0x5b, 0xff, 0x7d, 0x6b, 0x5a, 0xf8, 0x7c, 0x6b, 0x5b, 0xff, 0x88, 0x7a, 0x6d, 0xff, 0xcb, 0xc6, 0xc1, 0x48, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xda, 0xd1, 0xca, 0x37, 0xa0, 0x8a, 0x79, 0xff, 0x97, 0x80, 0x6f, 0xff, 0x99, 0x82, 0x70, 0xff, 0x98, 0x82, 0x70, 0xff, 0x84, 0x72, 0x5f, 0xff, 0x70, 0x62, 0x4f, 0xff, 0x70, 0x62, 0x4e, 0xff, 0x71, 0x63, 0x50, 0xff, 0x70, 0x63, 0x4f, 0xff, 0x6e, 0x62, 0x4e, 0xff, 0x6e, 0x61, 0x4e, 0xff, 0x6e, 0x61, 0x4e, 0xff, 0x6e, 0x61, 0x4e, 0xff, 0x6e, 0x61, 0x4c, 0xfb, 0x6b, 0x5f, 0x4a, 0xff, 0x6a, 0x5d, 0x47, 0xff, 0x7b, 0x70, 0x5d, 0xff, 0xb2, 0xab, 0xa1, 0x84, 0xec, 0xeb, 0xe9, 0x18, 0xfe, 0xfe, 0xfe, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, + 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xfa, 0xf9, 0xf9, 0x13, 0xb7, 0xab, 0xa1, 0x90, 0x9a, 0x89, 0x7a, 0xff, 0x8b, 0x78, 0x66, 0xff, 0x8a, 0x76, 0x64, 0xfc, 0x8b, 0x77, 0x65, 0xff, 0x8b, 0x77, 0x65, 0xff, 0x8b, 0x77, 0x65, 0xff, 0x8b, 0x77, 0x65, 0xff, 0x8b, 0x77, 0x65, 0xff, 0x8c, 0x78, 0x66, 0xff, 0x8c, 0x78, 0x66, 0xff, 0x7e, 0x6d, 0x5a, 0xff, 0x6d, 0x60, 0x4c, 0xff, 0x6c, 0x5f, 0x4b, 0xff, 0x6d, 0x60, 0x4c, 0xff, 0x68, 0x5a, 0x47, 0xff, 0x87, 0x7b, 0x6c, 0xff, 0xf6, 0xf5, 0xf4, 0x13, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x08, 0xe9, 0xe6, 0xe3, 0x34, 0xc5, 0xbc, 0xb4, 0x64, 0x8a, 0x79, 0x68, 0xff, 0x7f, 0x6d, 0x5b, 0xff, 0x81, 0x6f, 0x5c, 0xff, 0x81, 0x6f, 0x5d, 0xff, 0x81, 0x6f, 0x5d, 0xff, 0x82, 0x6f, 0x5d, 0xff, 0x7e, 0x6d, 0x5b, 0xff, 0x79, 0x68, 0x58, 0xf8, 0x76, 0x68, 0x5e, 0xff, 0x86, 0x7c, 0x78, 0xff, 0xcd, 0xc9, 0xc8, 0x4b, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xfb, 0xfa, 0xf9, 0x07, 0xaf, 0x9c, 0x8d, 0xff, 0x97, 0x7f, 0x6c, 0xff, 0x9a, 0x83, 0x70, 0xff, 0x9a, 0x83, 0x71, 0xff, 0x92, 0x7c, 0x6b, 0xff, 0x7e, 0x6d, 0x5b, 0xff, 0x70, 0x61, 0x4e, 0xff, 0x6f, 0x62, 0x4e, 0xff, 0x71, 0x63, 0x4f, 0xff, 0x70, 0x61, 0x4f, 0xff, 0x6e, 0x61, 0x4e, 0xff, 0x6e, 0x61, 0x4e, 0xff, 0x6e, 0x61, 0x4d, 0xff, 0x6e, 0x61, 0x4d, 0xff, 0x6d, 0x61, 0x4d, 0xff, 0x6a, 0x5e, 0x49, 0xfb, 0x68, 0x5a, 0x44, 0xff, 0x69, 0x5c, 0x47, 0xff, 0x74, 0x67, 0x54, 0xff, 0x86, 0x7b, 0x6a, 0xff, 0xf3, 0xf2, 0xf1, 0x0b, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, + 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xfe, 0xfe, 0xfe, 0x03, 0xd0, 0xc9, 0xc2, 0x57, 0x9f, 0x8f, 0x81, 0xff, 0x8d, 0x7a, 0x68, 0xff, 0x83, 0x6e, 0x5b, 0xff, 0x87, 0x73, 0x60, 0xff, 0x8b, 0x77, 0x65, 0xff, 0x8b, 0x77, 0x65, 0xff, 0x8b, 0x77, 0x65, 0xff, 0x8b, 0x77, 0x65, 0xff, 0x8b, 0x77, 0x65, 0xff, 0x8a, 0x76, 0x64, 0xff, 0x8b, 0x77, 0x65, 0xff, 0x8c, 0x78, 0x66, 0xff, 0x84, 0x71, 0x5f, 0xff, 0x75, 0x66, 0x53, 0xff, 0x6d, 0x61, 0x4d, 0xff, 0x6d, 0x60, 0x4d, 0xff, 0x6a, 0x5c, 0x47, 0xff, 0x7a, 0x6d, 0x5a, 0xff, 0xc1, 0xbb, 0xb3, 0x64, 0xfe, 0xfe, 0xfe, 0x03, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xfc, 0xfb, 0xfb, 0x0b, 0x99, 0x8a, 0x7c, 0xff, 0x82, 0x70, 0x5e, 0xff, 0x7f, 0x6d, 0x5a, 0xff, 0x81, 0x6f, 0x5d, 0xff, 0x81, 0x6f, 0x5d, 0xff, 0x82, 0x6f, 0x5c, 0xff, 0x7a, 0x69, 0x58, 0xfc, 0x71, 0x63, 0x5a, 0xff, 0x7b, 0x72, 0x71, 0xff, 0xcd, 0xcb, 0xcd, 0x40, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0xce, 0xc1, 0xb7, 0x4c, 0xa1, 0x8a, 0x79, 0xff, 0x99, 0x81, 0x6e, 0xff, 0x9f, 0x87, 0x74, 0xff, 0x9b, 0x84, 0x71, 0xff, 0x87, 0x74, 0x61, 0xff, 0x75, 0x66, 0x53, 0xff, 0x70, 0x62, 0x4e, 0xff, 0x70, 0x62, 0x4e, 0xff, 0x70, 0x62, 0x4f, 0xff, 0x6f, 0x62, 0x4f, 0xff, 0x6e, 0x61, 0x4e, 0xff, 0x6d, 0x60, 0x4d, 0xff, 0x6e, 0x61, 0x4d, 0xff, 0x6e, 0x62, 0x4d, 0xff, 0x6d, 0x61, 0x4d, 0xff, 0x6d, 0x60, 0x4c, 0xff, 0x6e, 0x61, 0x4c, 0xff, 0x6c, 0x5f, 0x4a, 0xff, 0x64, 0x56, 0x40, 0xff, 0x65, 0x57, 0x41, 0xff, 0xb8, 0xb2, 0xa8, 0x5b, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, + 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xfe, 0xfd, 0xfd, 0x04, 0xb8, 0xad, 0xa3, 0x87, 0x8c, 0x7a, 0x69, 0xff, 0x7f, 0x6b, 0x58, 0xff, 0x87, 0x73, 0x61, 0xff, 0x89, 0x76, 0x64, 0xff, 0x89, 0x76, 0x64, 0xff, 0x89, 0x75, 0x63, 0xff, 0x8a, 0x75, 0x63, 0xff, 0x89, 0x75, 0x63, 0xff, 0x89, 0x75, 0x63, 0xff, 0x8a, 0x75, 0x63, 0xff, 0x89, 0x75, 0x63, 0xff, 0x8a, 0x76, 0x64, 0xff, 0x8a, 0x76, 0x64, 0xff, 0x88, 0x75, 0x63, 0xff, 0x7e, 0x6d, 0x5b, 0xff, 0x70, 0x63, 0x50, 0xff, 0x6e, 0x61, 0x4e, 0xff, 0x6f, 0x61, 0x4d, 0xfc, 0x73, 0x64, 0x51, 0xff, 0x8a, 0x7e, 0x6e, 0xff, 0xf6, 0xf5, 0xf3, 0x14, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xfa, 0xf9, 0xf8, 0x10, 0xa2, 0x94, 0x87, 0xff, 0x83, 0x71, 0x5f, 0xff, 0x7e, 0x6c, 0x59, 0xff, 0x81, 0x6f, 0x5d, 0xff, 0x80, 0x6e, 0x5c, 0xff, 0x81, 0x6e, 0x5b, 0xff, 0x76, 0x65, 0x55, 0xff, 0x76, 0x69, 0x64, 0xff, 0xa4, 0x9e, 0xa0, 0xc4, 0xfe, 0xfe, 0xfe, 0x04, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xf8, 0xf7, 0xf5, 0x07, 0xa8, 0x92, 0x81, 0xff, 0x9e, 0x85, 0x73, 0xff, 0x9e, 0x86, 0x74, 0xfb, 0xa0, 0x88, 0x76, 0xff, 0x97, 0x81, 0x6e, 0xff, 0x7d, 0x6c, 0x58, 0xff, 0x6f, 0x61, 0x4d, 0xff, 0x70, 0x62, 0x4f, 0xff, 0x70, 0x62, 0x4f, 0xff, 0x6f, 0x62, 0x4e, 0xff, 0x6e, 0x62, 0x4f, 0xff, 0x6e, 0x61, 0x4e, 0xff, 0x6e, 0x60, 0x4d, 0xff, 0x6e, 0x61, 0x4d, 0xff, 0x6e, 0x61, 0x4d, 0xff, 0x6d, 0x60, 0x4c, 0xff, 0x6d, 0x60, 0x4b, 0xff, 0x6d, 0x60, 0x4b, 0xff, 0x6d, 0x61, 0x4c, 0xff, 0x68, 0x5a, 0x45, 0xfb, 0x69, 0x5c, 0x47, 0xff, 0x9a, 0x92, 0x85, 0xff, 0xf8, 0xf8, 0xf7, 0x08, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, + 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xee, 0xeb, 0xe9, 0x1b, 0x8c, 0x7a, 0x69, 0xff, 0x82, 0x6f, 0x5d, 0xff, 0x85, 0x72, 0x60, 0xfc, 0x86, 0x73, 0x61, 0xff, 0x86, 0x74, 0x62, 0xff, 0x87, 0x75, 0x63, 0xff, 0x88, 0x75, 0x63, 0xff, 0x88, 0x75, 0x63, 0xff, 0x87, 0x75, 0x63, 0xff, 0x88, 0x75, 0x63, 0xff, 0x88, 0x75, 0x63, 0xff, 0x88, 0x75, 0x63, 0xff, 0x88, 0x75, 0x63, 0xff, 0x88, 0x75, 0x63, 0xff, 0x89, 0x76, 0x64, 0xff, 0x83, 0x72, 0x60, 0xff, 0x76, 0x67, 0x55, 0xff, 0x70, 0x63, 0x50, 0xff, 0x73, 0x64, 0x50, 0xff, 0x70, 0x61, 0x4d, 0xff, 0x74, 0x65, 0x52, 0xff, 0xb4, 0xac, 0xa3, 0x7b, 0xff, 0xff, 0xff, 0x03, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xf9, 0xf9, 0xf8, 0x13, 0xa0, 0x92, 0x84, 0xff, 0x82, 0x70, 0x5e, 0xff, 0x7d, 0x6c, 0x59, 0xff, 0x7f, 0x6e, 0x5b, 0xff, 0x7f, 0x6e, 0x5b, 0xff, 0x7f, 0x6d, 0x5a, 0xff, 0x77, 0x66, 0x56, 0xff, 0x7d, 0x71, 0x6a, 0xff, 0xea, 0xe8, 0xe8, 0x27, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0xcc, 0xbf, 0xb6, 0x58, 0xa1, 0x89, 0x77, 0xff, 0x9e, 0x85, 0x72, 0xff, 0xa2, 0x8a, 0x78, 0xff, 0x9d, 0x85, 0x74, 0xff, 0x8b, 0x77, 0x64, 0xff, 0x76, 0x66, 0x52, 0xff, 0x6e, 0x61, 0x4c, 0xff, 0x70, 0x62, 0x4f, 0xff, 0x6f, 0x62, 0x4f, 0xff, 0x6e, 0x62, 0x4e, 0xff, 0x6e, 0x61, 0x4e, 0xff, 0x6e, 0x61, 0x4e, 0xff, 0x6e, 0x61, 0x4d, 0xff, 0x6e, 0x61, 0x4e, 0xff, 0x6d, 0x61, 0x4d, 0xff, 0x6d, 0x60, 0x4b, 0xff, 0x6d, 0x60, 0x4b, 0xff, 0x6d, 0x60, 0x4b, 0xff, 0x6d, 0x60, 0x4b, 0xff, 0x69, 0x5c, 0x46, 0xff, 0x6d, 0x61, 0x4c, 0xff, 0xa7, 0xa0, 0x98, 0xd0, 0xfd, 0xfd, 0xfd, 0x04, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, + 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xf3, 0xf1, 0xef, 0x17, 0x94, 0x84, 0x74, 0xff, 0x86, 0x74, 0x62, 0xff, 0x85, 0x73, 0x61, 0xff, 0x86, 0x74, 0x62, 0xff, 0x86, 0x74, 0x62, 0xff, 0x86, 0x74, 0x62, 0xff, 0x86, 0x74, 0x62, 0xff, 0x86, 0x74, 0x62, 0xff, 0x86, 0x74, 0x62, 0xff, 0x86, 0x74, 0x62, 0xff, 0x86, 0x74, 0x62, 0xff, 0x86, 0x74, 0x62, 0xff, 0x86, 0x74, 0x62, 0xff, 0x86, 0x74, 0x62, 0xff, 0x87, 0x75, 0x63, 0xff, 0x86, 0x74, 0x62, 0xff, 0x7f, 0x6f, 0x5b, 0xff, 0x75, 0x67, 0x53, 0xff, 0x72, 0x64, 0x51, 0xff, 0x73, 0x64, 0x51, 0xfc, 0x72, 0x63, 0x4f, 0xff, 0x81, 0x73, 0x63, 0xff, 0xba, 0xb2, 0xa9, 0x7c, 0xff, 0xff, 0xff, 0x03, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xf9, 0xf8, 0xf8, 0x13, 0x9e, 0x91, 0x83, 0xff, 0x81, 0x6f, 0x5e, 0xff, 0x7d, 0x6a, 0x58, 0xff, 0x7f, 0x6d, 0x5b, 0xff, 0x7f, 0x6d, 0x5b, 0xff, 0x7f, 0x6d, 0x59, 0xff, 0x79, 0x69, 0x59, 0xff, 0x80, 0x73, 0x6b, 0xff, 0xf8, 0xf8, 0xf8, 0x0c, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xd9, 0xcf, 0xc8, 0x4b, 0xaa, 0x91, 0x81, 0xff, 0xa2, 0x88, 0x76, 0xff, 0xa2, 0x8a, 0x78, 0xfb, 0xa4, 0x8c, 0x7a, 0xff, 0x95, 0x7f, 0x6d, 0xff, 0x7a, 0x6a, 0x57, 0xff, 0x70, 0x62, 0x4e, 0xff, 0x6f, 0x62, 0x4e, 0xff, 0x70, 0x62, 0x4f, 0xff, 0x6f, 0x61, 0x4e, 0xff, 0x6e, 0x60, 0x4e, 0xff, 0x6e, 0x60, 0x4e, 0xff, 0x6e, 0x61, 0x4d, 0xff, 0x6d, 0x61, 0x4c, 0xff, 0x6c, 0x60, 0x4b, 0xff, 0x6b, 0x5f, 0x4a, 0xff, 0x6c, 0x5f, 0x4a, 0xff, 0x6d, 0x60, 0x4b, 0xff, 0x6d, 0x60, 0x4c, 0xff, 0x6d, 0x60, 0x4a, 0xff, 0x6a, 0x5c, 0x47, 0xff, 0x72, 0x66, 0x58, 0xff, 0xca, 0xc6, 0xc3, 0x58, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, + 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xfe, 0xfe, 0xfe, 0x07, 0xc8, 0xc0, 0xb8, 0x84, 0x8a, 0x78, 0x67, 0xff, 0x80, 0x6d, 0x5b, 0xff, 0x85, 0x73, 0x61, 0xff, 0x85, 0x73, 0x61, 0xff, 0x85, 0x73, 0x61, 0xff, 0x85, 0x73, 0x61, 0xff, 0x85, 0x73, 0x61, 0xff, 0x85, 0x73, 0x61, 0xff, 0x85, 0x73, 0x61, 0xff, 0x85, 0x73, 0x61, 0xff, 0x85, 0x73, 0x61, 0xff, 0x85, 0x73, 0x61, 0xff, 0x85, 0x73, 0x61, 0xff, 0x85, 0x73, 0x61, 0xff, 0x86, 0x74, 0x62, 0xff, 0x85, 0x73, 0x60, 0xff, 0x7b, 0x6b, 0x58, 0xff, 0x74, 0x65, 0x52, 0xff, 0x76, 0x67, 0x54, 0xff, 0x76, 0x66, 0x54, 0xf8, 0x70, 0x5f, 0x4c, 0xff, 0x8b, 0x7e, 0x6e, 0xff, 0xc5, 0xbf, 0xb7, 0x78, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xf9, 0xf8, 0xf8, 0x13, 0x9f, 0x91, 0x83, 0xff, 0x81, 0x6f, 0x5d, 0xff, 0x7c, 0x6a, 0x58, 0xff, 0x7e, 0x6c, 0x5b, 0xff, 0x7f, 0x6c, 0x5b, 0xff, 0x7e, 0x6c, 0x59, 0xff, 0x79, 0x69, 0x59, 0xff, 0x80, 0x74, 0x6c, 0xff, 0xf5, 0xf4, 0xf4, 0x10, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xe7, 0xdf, 0xdb, 0x34, 0xb2, 0x9b, 0x8c, 0xff, 0xa0, 0x84, 0x72, 0xff, 0xa6, 0x8b, 0x7a, 0xfb, 0xa8, 0x8e, 0x7d, 0xff, 0x9e, 0x86, 0x75, 0xff, 0x86, 0x74, 0x61, 0xff, 0x70, 0x63, 0x50, 0xff, 0x6d, 0x61, 0x4e, 0xff, 0x70, 0x62, 0x4f, 0xff, 0x6f, 0x61, 0x4e, 0xff, 0x6e, 0x61, 0x4e, 0xff, 0x6d, 0x60, 0x4e, 0xff, 0x6e, 0x60, 0x4e, 0xff, 0x6d, 0x60, 0x4a, 0xff, 0x69, 0x5c, 0x45, 0xfb, 0x65, 0x58, 0x42, 0xff, 0x66, 0x58, 0x42, 0xff, 0x67, 0x5a, 0x43, 0xff, 0x6b, 0x5d, 0x48, 0xff, 0x6d, 0x60, 0x4a, 0xff, 0x6a, 0x5c, 0x45, 0xfb, 0x6a, 0x5c, 0x48, 0xff, 0x7e, 0x74, 0x6d, 0xff, 0xea, 0xe8, 0xe9, 0x14, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, + 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xed, 0xea, 0xe7, 0x27, 0x92, 0x81, 0x71, 0xff, 0x7f, 0x6c, 0x59, 0xff, 0x86, 0x74, 0x62, 0xff, 0x86, 0x74, 0x62, 0xff, 0x85, 0x74, 0x61, 0xff, 0x85, 0x73, 0x60, 0xff, 0x84, 0x72, 0x5f, 0xff, 0x84, 0x72, 0x5e, 0xff, 0x84, 0x70, 0x5d, 0xff, 0x84, 0x72, 0x5f, 0xff, 0x85, 0x73, 0x62, 0xff, 0x85, 0x73, 0x61, 0xff, 0x85, 0x73, 0x61, 0xff, 0x85, 0x73, 0x61, 0xff, 0x86, 0x73, 0x62, 0xff, 0x85, 0x73, 0x62, 0xff, 0x80, 0x6e, 0x5d, 0xff, 0x79, 0x68, 0x56, 0xff, 0x75, 0x66, 0x54, 0xff, 0x76, 0x67, 0x55, 0xff, 0x76, 0x66, 0x54, 0xf8, 0x79, 0x69, 0x57, 0xff, 0x8c, 0x7f, 0x6f, 0xff, 0xfc, 0xfb, 0xfb, 0x08, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xf9, 0xf8, 0xf8, 0x13, 0x9f, 0x91, 0x83, 0xff, 0x81, 0x70, 0x5d, 0xff, 0x7c, 0x6a, 0x58, 0xff, 0x7e, 0x6c, 0x5a, 0xff, 0x7e, 0x6c, 0x5a, 0xff, 0x7e, 0x6c, 0x58, 0xff, 0x79, 0x69, 0x58, 0xff, 0x80, 0x75, 0x6c, 0xff, 0xf6, 0xf5, 0xf5, 0x10, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xfc, 0xfb, 0xfb, 0x07, 0xb3, 0x9c, 0x8c, 0xec, 0xa6, 0x8b, 0x78, 0xff, 0xa7, 0x8c, 0x7a, 0xff, 0xa9, 0x8f, 0x7e, 0xff, 0xa7, 0x8d, 0x7b, 0xff, 0x8f, 0x7b, 0x68, 0xff, 0x76, 0x68, 0x54, 0xff, 0x6e, 0x62, 0x4e, 0xff, 0x6e, 0x62, 0x4e, 0xff, 0x6e, 0x61, 0x4f, 0xff, 0x6e, 0x61, 0x4e, 0xff, 0x6e, 0x61, 0x4e, 0xff, 0x6e, 0x61, 0x4d, 0xff, 0x6b, 0x5e, 0x4b, 0xf8, 0x68, 0x5c, 0x4c, 0xff, 0x71, 0x66, 0x58, 0xff, 0x7d, 0x72, 0x63, 0xff, 0x80, 0x76, 0x64, 0xff, 0x7a, 0x6e, 0x5b, 0xff, 0x6f, 0x62, 0x4f, 0xff, 0x69, 0x5b, 0x46, 0xff, 0x67, 0x59, 0x44, 0xff, 0x75, 0x69, 0x5a, 0xff, 0x97, 0x90, 0x8d, 0xff, 0xf9, 0xf9, 0xf9, 0x07, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, + 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xf7, 0xf6, 0xf5, 0x14, 0x9e, 0x90, 0x82, 0xff, 0x83, 0x70, 0x5e, 0xff, 0x7f, 0x6c, 0x59, 0xfc, 0x80, 0x6e, 0x5b, 0xff, 0x81, 0x6e, 0x5b, 0xff, 0x81, 0x6e, 0x5b, 0xfc, 0x80, 0x6d, 0x5b, 0xff, 0x81, 0x6f, 0x5e, 0xff, 0x84, 0x71, 0x61, 0xff, 0x82, 0x6f, 0x5d, 0xff, 0x82, 0x70, 0x5e, 0xf8, 0x84, 0x72, 0x60, 0xff, 0x85, 0x73, 0x61, 0xff, 0x85, 0x73, 0x61, 0xff, 0x85, 0x73, 0x61, 0xff, 0x84, 0x72, 0x60, 0xff, 0x84, 0x72, 0x60, 0xff, 0x80, 0x6e, 0x5c, 0xff, 0x78, 0x68, 0x56, 0xff, 0x77, 0x67, 0x55, 0xff, 0x79, 0x69, 0x57, 0xff, 0x77, 0x67, 0x53, 0xff, 0x7a, 0x69, 0x55, 0xff, 0xa8, 0x9d, 0x90, 0x93, 0xfd, 0xfd, 0xfd, 0x0b, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xf9, 0xf8, 0xf8, 0x13, 0x9e, 0x91, 0x83, 0xff, 0x80, 0x6f, 0x5d, 0xff, 0x7c, 0x6a, 0x57, 0xff, 0x7e, 0x6d, 0x5a, 0xff, 0x7e, 0x6d, 0x5a, 0xff, 0x7d, 0x6c, 0x58, 0xff, 0x78, 0x68, 0x58, 0xff, 0x80, 0x75, 0x6b, 0xff, 0xf6, 0xf5, 0xf5, 0x10, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xfd, 0xfd, 0xfc, 0x07, 0xbf, 0xab, 0x9e, 0x8c, 0xa6, 0x8c, 0x79, 0xff, 0xa8, 0x8d, 0x7b, 0xff, 0xab, 0x91, 0x7f, 0xff, 0xa9, 0x8e, 0x7d, 0xff, 0x99, 0x83, 0x70, 0xff, 0x7e, 0x6e, 0x5a, 0xff, 0x6d, 0x60, 0x4d, 0xff, 0x6f, 0x61, 0x4e, 0xff, 0x6e, 0x62, 0x4f, 0xff, 0x6e, 0x61, 0x4e, 0xff, 0x6e, 0x61, 0x4e, 0xff, 0x6e, 0x61, 0x4d, 0xff, 0x6e, 0x60, 0x4b, 0xff, 0x65, 0x58, 0x49, 0xff, 0x65, 0x5b, 0x57, 0xff, 0x88, 0x82, 0x83, 0xe8, 0xcc, 0xc9, 0xc8, 0x54, 0xdf, 0xdd, 0xd9, 0x34, 0xa1, 0x9a, 0x8f, 0xcb, 0x83, 0x78, 0x69, 0xd7, 0x74, 0x68, 0x56, 0xcb, 0x73, 0x68, 0x57, 0xdc, 0x8b, 0x82, 0x7a, 0xf8, 0xe8, 0xe7, 0xe6, 0x18, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, + 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xec, 0xea, 0xe7, 0x24, 0x91, 0x80, 0x71, 0xff, 0x80, 0x6d, 0x5b, 0xff, 0x82, 0x71, 0x5e, 0xff, 0x85, 0x74, 0x62, 0xff, 0x88, 0x78, 0x6a, 0xff, 0x8b, 0x7d, 0x73, 0xff, 0x90, 0x85, 0x7e, 0xe8, 0x9a, 0x90, 0x8b, 0xc7, 0x8c, 0x7e, 0x72, 0xff, 0x82, 0x6f, 0x5d, 0xff, 0x83, 0x70, 0x5d, 0xfc, 0x84, 0x72, 0x60, 0xfc, 0x84, 0x72, 0x60, 0xff, 0x84, 0x72, 0x60, 0xff, 0x83, 0x71, 0x5f, 0xff, 0x84, 0x72, 0x60, 0xff, 0x83, 0x72, 0x60, 0xff, 0x7e, 0x6d, 0x5b, 0xff, 0x7a, 0x69, 0x58, 0xff, 0x7a, 0x69, 0x57, 0xff, 0x7c, 0x6c, 0x58, 0xf8, 0x7b, 0x69, 0x56, 0xff, 0x82, 0x70, 0x5e, 0xff, 0xa6, 0x99, 0x8e, 0xc8, 0xf8, 0xf7, 0xf6, 0x20, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xf9, 0xf8, 0xf8, 0x13, 0x9d, 0x90, 0x83, 0xff, 0x80, 0x6f, 0x5c, 0xff, 0x7b, 0x6a, 0x57, 0xff, 0x7e, 0x6d, 0x5a, 0xff, 0x7e, 0x6d, 0x59, 0xff, 0x7d, 0x6b, 0x57, 0xff, 0x78, 0x67, 0x57, 0xff, 0x80, 0x74, 0x6b, 0xff, 0xf6, 0xf5, 0xf5, 0x10, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xf8, 0xf5, 0xf4, 0x17, 0xbf, 0xa7, 0x9a, 0xcf, 0xab, 0x8f, 0x7d, 0xff, 0xaa, 0x8f, 0x7d, 0xff, 0xab, 0x91, 0x80, 0xf7, 0xab, 0x91, 0x7f, 0xff, 0x9e, 0x86, 0x74, 0xff, 0x80, 0x6f, 0x5c, 0xff, 0x6f, 0x61, 0x4e, 0xff, 0x6e, 0x61, 0x4d, 0xff, 0x6f, 0x62, 0x4f, 0xff, 0x6e, 0x61, 0x4e, 0xff, 0x6e, 0x61, 0x4d, 0xff, 0x6e, 0x61, 0x4d, 0xff, 0x6e, 0x61, 0x4b, 0xff, 0x69, 0x5c, 0x47, 0xf8, 0x6e, 0x63, 0x5b, 0xff, 0x91, 0x8b, 0x8f, 0xab, 0xfc, 0xfc, 0xfd, 0x03, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0xfd, 0xfd, 0xfd, 0x00, 0xfd, 0xfd, 0xfc, 0x00, 0xfd, 0xfd, 0xfd, 0x00, 0xfd, 0xfd, 0xfd, 0x03, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, + 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xe8, 0xe4, 0xe1, 0x28, 0xa7, 0x99, 0x8c, 0xbc, 0xad, 0xa1, 0x95, 0x9b, 0xb0, 0xa6, 0x9c, 0x98, 0xb0, 0xa7, 0xa1, 0xa3, 0xbd, 0xb6, 0xb4, 0x93, 0xf3, 0xf2, 0xf3, 0x24, 0xfd, 0xfd, 0xfd, 0x0b, 0xc7, 0xc1, 0xbd, 0x74, 0x9b, 0x8c, 0x7e, 0xf7, 0x81, 0x70, 0x5d, 0xf8, 0x80, 0x6d, 0x5a, 0xff, 0x83, 0x71, 0x5f, 0xff, 0x83, 0x71, 0x5f, 0xff, 0x83, 0x71, 0x5f, 0xff, 0x83, 0x71, 0x5f, 0xff, 0x83, 0x71, 0x5f, 0xff, 0x81, 0x70, 0x5e, 0xff, 0x7e, 0x6c, 0x5a, 0xff, 0x7c, 0x6b, 0x58, 0xff, 0x7d, 0x6c, 0x59, 0xff, 0x7e, 0x6d, 0x5a, 0xf8, 0x7a, 0x68, 0x55, 0xff, 0x83, 0x72, 0x60, 0xff, 0xa3, 0x96, 0x89, 0xd4, 0xf0, 0xee, 0xec, 0x2b, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xf9, 0xf8, 0xf8, 0x13, 0x9d, 0x90, 0x82, 0xff, 0x80, 0x6f, 0x5c, 0xff, 0x7b, 0x6a, 0x57, 0xff, 0x7d, 0x6c, 0x59, 0xff, 0x7d, 0x6c, 0x59, 0xff, 0x7c, 0x6a, 0x56, 0xff, 0x77, 0x67, 0x56, 0xff, 0x7f, 0x74, 0x6b, 0xff, 0xf6, 0xf5, 0xf5, 0x13, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xfa, 0xf8, 0xf7, 0x0f, 0xc0, 0xa9, 0x9c, 0xb0, 0xae, 0x91, 0x7f, 0xff, 0xac, 0x8f, 0x7d, 0xff, 0xae, 0x92, 0x81, 0xf7, 0xae, 0x93, 0x81, 0xff, 0xa1, 0x89, 0x77, 0xff, 0x87, 0x74, 0x61, 0xff, 0x70, 0x63, 0x4f, 0xff, 0x6c, 0x5f, 0x4c, 0xff, 0x70, 0x62, 0x4f, 0xff, 0x6e, 0x61, 0x4f, 0xff, 0x6e, 0x61, 0x4e, 0xff, 0x6e, 0x61, 0x4d, 0xff, 0x6f, 0x61, 0x4c, 0xff, 0x6c, 0x5f, 0x48, 0xfb, 0x67, 0x5b, 0x4e, 0xff, 0x82, 0x7b, 0x7a, 0xff, 0xd9, 0xd7, 0xda, 0x37, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, + 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xee, 0xec, 0xea, 0x2c, 0x8e, 0x7e, 0x6e, 0xff, 0x7d, 0x6b, 0x58, 0xff, 0x80, 0x6e, 0x5c, 0xfc, 0x82, 0x70, 0x5e, 0xff, 0x82, 0x70, 0x5e, 0xff, 0x82, 0x70, 0x5e, 0xff, 0x81, 0x6f, 0x5d, 0xff, 0x81, 0x6f, 0x5d, 0xff, 0x81, 0x6f, 0x5d, 0xff, 0x7f, 0x6d, 0x5b, 0xff, 0x7e, 0x6c, 0x5a, 0xff, 0x7f, 0x6d, 0x5b, 0xff, 0x7f, 0x6d, 0x5b, 0xfc, 0x7f, 0x6c, 0x5a, 0xff, 0x7e, 0x6b, 0x59, 0xff, 0x93, 0x84, 0x75, 0xff, 0xc5, 0xbe, 0xb5, 0x7f, 0xfe, 0xfe, 0xfe, 0x03, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xf9, 0xf8, 0xf8, 0x13, 0x9c, 0x90, 0x82, 0xff, 0x7e, 0x6e, 0x5b, 0xff, 0x7a, 0x69, 0x56, 0xff, 0x7d, 0x6b, 0x58, 0xff, 0x7c, 0x6b, 0x58, 0xff, 0x7b, 0x6a, 0x56, 0xff, 0x76, 0x67, 0x56, 0xff, 0x7f, 0x74, 0x6b, 0xff, 0xf6, 0xf5, 0xf5, 0x13, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xfe, 0xfe, 0xfe, 0x03, 0xe2, 0xd7, 0xd1, 0x48, 0xb6, 0x9b, 0x8c, 0xff, 0xab, 0x8c, 0x7b, 0xff, 0xaf, 0x92, 0x81, 0xff, 0xb0, 0x94, 0x82, 0xfb, 0xb1, 0x93, 0x82, 0xff, 0xa7, 0x8b, 0x7a, 0xff, 0x8b, 0x76, 0x65, 0xff, 0x71, 0x63, 0x50, 0xff, 0x6d, 0x61, 0x4d, 0xff, 0x6e, 0x62, 0x4f, 0xff, 0x6e, 0x61, 0x4e, 0xff, 0x6e, 0x61, 0x4e, 0xff, 0x6e, 0x61, 0x4d, 0xff, 0x6e, 0x61, 0x4d, 0xff, 0x6d, 0x60, 0x4a, 0xff, 0x67, 0x5b, 0x49, 0xff, 0x71, 0x68, 0x65, 0xff, 0xb3, 0xaf, 0xb2, 0x74, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, + 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xfe, 0xfe, 0xfe, 0x03, 0xb5, 0xab, 0xa0, 0x87, 0x88, 0x77, 0x66, 0xff, 0x7e, 0x6c, 0x59, 0xff, 0x80, 0x6e, 0x5c, 0xff, 0x81, 0x6f, 0x5d, 0xff, 0x81, 0x6f, 0x5d, 0xff, 0x81, 0x6f, 0x5d, 0xff, 0x81, 0x6f, 0x5d, 0xff, 0x81, 0x6f, 0x5d, 0xff, 0x81, 0x6f, 0x5d, 0xff, 0x7f, 0x6d, 0x5b, 0xff, 0x7f, 0x6d, 0x5b, 0xff, 0x81, 0x6f, 0x5d, 0xff, 0x83, 0x71, 0x5f, 0xfc, 0x81, 0x6f, 0x5c, 0xff, 0x81, 0x6f, 0x5d, 0xff, 0x90, 0x7f, 0x6e, 0xff, 0xbb, 0xb0, 0xa7, 0x7b, 0xfe, 0xfe, 0xfe, 0x08, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xf9, 0xf8, 0xf7, 0x13, 0x9b, 0x90, 0x81, 0xff, 0x7e, 0x6d, 0x5b, 0xff, 0x79, 0x68, 0x54, 0xff, 0x7b, 0x6a, 0x57, 0xff, 0x7b, 0x6a, 0x57, 0xff, 0x7a, 0x6a, 0x56, 0xff, 0x75, 0x66, 0x57, 0xff, 0x7f, 0x73, 0x6b, 0xff, 0xf6, 0xf5, 0xf5, 0x13, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xfb, 0xfa, 0xf9, 0x13, 0xc9, 0xb7, 0xac, 0x93, 0xb2, 0x97, 0x86, 0xff, 0xae, 0x91, 0x7f, 0xff, 0xb0, 0x92, 0x81, 0xff, 0xb3, 0x96, 0x84, 0xfb, 0xb2, 0x95, 0x83, 0xff, 0xa8, 0x8d, 0x7b, 0xff, 0x8b, 0x77, 0x64, 0xff, 0x73, 0x64, 0x51, 0xff, 0x6d, 0x60, 0x4d, 0xff, 0x6e, 0x62, 0x4f, 0xff, 0x6e, 0x62, 0x4f, 0xff, 0x6e, 0x61, 0x4d, 0xff, 0x6e, 0x61, 0x4d, 0xff, 0x6e, 0x61, 0x4d, 0xff, 0x6e, 0x62, 0x4c, 0xff, 0x68, 0x5c, 0x48, 0xfb, 0x68, 0x5d, 0x54, 0xff, 0x83, 0x7b, 0x7d, 0xff, 0xf9, 0xf9, 0xfa, 0x08, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, + 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xfd, 0xfd, 0xfd, 0x08, 0xaa, 0x9e, 0x91, 0xc8, 0x80, 0x6e, 0x5c, 0xff, 0x7e, 0x6c, 0x5a, 0xff, 0x81, 0x6f, 0x5d, 0xff, 0x81, 0x6f, 0x5d, 0xff, 0x81, 0x6f, 0x5d, 0xff, 0x81, 0x6f, 0x5d, 0xff, 0x81, 0x6f, 0x5d, 0xff, 0x80, 0x6e, 0x5c, 0xff, 0x80, 0x6e, 0x5c, 0xff, 0x7f, 0x6d, 0x5b, 0xff, 0x81, 0x6f, 0x5d, 0xff, 0x83, 0x71, 0x5f, 0xff, 0x85, 0x73, 0x61, 0xff, 0x83, 0x72, 0x60, 0xf8, 0x7f, 0x6c, 0x59, 0xff, 0x8d, 0x7c, 0x6a, 0xff, 0xae, 0xa2, 0x95, 0xcc, 0xe4, 0xdf, 0xdb, 0x38, 0xfd, 0xfc, 0xfc, 0x0b, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xf9, 0xf8, 0xf7, 0x13, 0x9b, 0x8e, 0x81, 0xff, 0x7e, 0x6c, 0x5a, 0xff, 0x78, 0x68, 0x54, 0xff, 0x7a, 0x6a, 0x57, 0xff, 0x7b, 0x6a, 0x57, 0xff, 0x7a, 0x69, 0x56, 0xff, 0x75, 0x66, 0x57, 0xff, 0x7f, 0x73, 0x6b, 0xff, 0xf5, 0xf4, 0xf4, 0x13, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xfe, 0xfe, 0xfe, 0x04, 0xe2, 0xda, 0xd4, 0x3f, 0xba, 0xa6, 0x97, 0xf7, 0xad, 0x91, 0x80, 0xff, 0xaa, 0x8c, 0x7a, 0xff, 0xae, 0x91, 0x7f, 0xff, 0xb4, 0x96, 0x86, 0xff, 0xb5, 0x97, 0x85, 0xff, 0xa5, 0x8b, 0x7a, 0xff, 0x89, 0x75, 0x63, 0xff, 0x73, 0x64, 0x51, 0xff, 0x6c, 0x60, 0x4c, 0xff, 0x6e, 0x61, 0x4e, 0xff, 0x6f, 0x62, 0x4f, 0xff, 0x6e, 0x61, 0x4f, 0xff, 0x6e, 0x61, 0x4d, 0xff, 0x6e, 0x61, 0x4d, 0xff, 0x6e, 0x61, 0x4d, 0xff, 0x6e, 0x61, 0x4c, 0xff, 0x65, 0x58, 0x45, 0xff, 0x71, 0x66, 0x5c, 0xff, 0xbb, 0xb7, 0xb8, 0x73, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, + 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x04, 0xbb, 0xb3, 0xa9, 0xa8, 0x7f, 0x6d, 0x5b, 0xff, 0x7d, 0x6b, 0x58, 0xff, 0x80, 0x6e, 0x5c, 0xff, 0x80, 0x6e, 0x5c, 0xff, 0x80, 0x6e, 0x5c, 0xff, 0x80, 0x6e, 0x5c, 0xff, 0x80, 0x6e, 0x5c, 0xff, 0x80, 0x6e, 0x5c, 0xff, 0x7f, 0x6d, 0x5b, 0xff, 0x7f, 0x6d, 0x5b, 0xff, 0x80, 0x6f, 0x5c, 0xff, 0x83, 0x71, 0x5f, 0xff, 0x85, 0x73, 0x61, 0xff, 0x87, 0x75, 0x63, 0xff, 0x88, 0x75, 0x63, 0xfc, 0x88, 0x75, 0x62, 0xff, 0x87, 0x72, 0x5f, 0xff, 0x8e, 0x7a, 0x68, 0xff, 0xb5, 0xa8, 0x9c, 0xac, 0xea, 0xe5, 0xe2, 0x30, 0xf0, 0xed, 0xeb, 0x23, 0xff, 0xff, 0xff, 0x03, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xf9, 0xf8, 0xf8, 0x13, 0x9c, 0x8f, 0x81, 0xff, 0x7d, 0x6c, 0x5a, 0xff, 0x78, 0x67, 0x54, 0xff, 0x7a, 0x6a, 0x57, 0xff, 0x7a, 0x6a, 0x57, 0xff, 0x79, 0x68, 0x55, 0xff, 0x74, 0x65, 0x56, 0xff, 0x7d, 0x72, 0x6a, 0xff, 0xf7, 0xf7, 0xf6, 0x0f, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xfe, 0xfe, 0xfe, 0x04, 0xf1, 0xed, 0xea, 0x1f, 0xf0, 0xeb, 0xe8, 0x23, 0xc8, 0xb8, 0xac, 0x87, 0xa7, 0x8d, 0x7a, 0xff, 0xa6, 0x8b, 0x78, 0xff, 0xab, 0x90, 0x7e, 0xff, 0xb0, 0x93, 0x82, 0xfb, 0xb3, 0x95, 0x84, 0xff, 0xaf, 0x92, 0x82, 0xff, 0xa1, 0x88, 0x77, 0xff, 0x87, 0x74, 0x62, 0xff, 0x70, 0x62, 0x4f, 0xff, 0x6b, 0x5f, 0x4c, 0xff, 0x6e, 0x62, 0x4f, 0xff, 0x6e, 0x61, 0x4e, 0xff, 0x6d, 0x60, 0x4d, 0xff, 0x6e, 0x61, 0x4e, 0xff, 0x6e, 0x61, 0x4d, 0xff, 0x6e, 0x61, 0x4d, 0xff, 0x6e, 0x61, 0x4d, 0xff, 0x6d, 0x60, 0x4b, 0xff, 0x67, 0x59, 0x44, 0xff, 0x75, 0x69, 0x58, 0xff, 0xcb, 0xc7, 0xc1, 0x4f, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, + 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xf7, 0xf6, 0xf5, 0x20, 0x99, 0x8c, 0x7d, 0xff, 0x7a, 0x68, 0x55, 0xff, 0x7e, 0x6b, 0x59, 0xff, 0x7f, 0x6d, 0x5b, 0xff, 0x7f, 0x6d, 0x5b, 0xff, 0x80, 0x6e, 0x5c, 0xff, 0x80, 0x6e, 0x5c, 0xff, 0x7f, 0x6d, 0x5b, 0xff, 0x7f, 0x6d, 0x5b, 0xff, 0x7f, 0x6d, 0x5b, 0xff, 0x7f, 0x6d, 0x5b, 0xff, 0x7e, 0x6d, 0x5a, 0xff, 0x80, 0x6f, 0x5d, 0xff, 0x84, 0x72, 0x60, 0xff, 0x88, 0x75, 0x63, 0xff, 0x8b, 0x77, 0x66, 0xff, 0x8c, 0x78, 0x65, 0xff, 0x8a, 0x76, 0x64, 0xff, 0x8c, 0x76, 0x65, 0xff, 0x8f, 0x7a, 0x69, 0xff, 0x94, 0x7f, 0x6e, 0xff, 0xa1, 0x8e, 0x7f, 0xff, 0xd4, 0xcc, 0xc5, 0x57, 0xfa, 0xf9, 0xf8, 0x1b, 0xff, 0xff, 0xff, 0x08, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xfa, 0xfa, 0xf9, 0x0f, 0x9b, 0x8e, 0x80, 0xff, 0x7d, 0x6d, 0x5b, 0xff, 0x77, 0x67, 0x54, 0xff, 0x78, 0x68, 0x57, 0xff, 0x78, 0x68, 0x56, 0xff, 0x77, 0x67, 0x54, 0xff, 0x72, 0x63, 0x53, 0xff, 0x7d, 0x71, 0x69, 0xff, 0xf1, 0xf0, 0xf0, 0x1f, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xfd, 0xfd, 0xfd, 0x0f, 0xf1, 0xed, 0xeb, 0x28, 0xd2, 0xc6, 0xbe, 0x68, 0xad, 0x96, 0x86, 0xff, 0xa7, 0x8e, 0x7c, 0xff, 0xa7, 0x8d, 0x7c, 0xff, 0xa7, 0x8d, 0x7a, 0xff, 0xaa, 0x8f, 0x7c, 0xff, 0xae, 0x92, 0x81, 0xff, 0xb0, 0x93, 0x82, 0xff, 0xac, 0x90, 0x7f, 0xff, 0x9a, 0x83, 0x71, 0xff, 0x7f, 0x6e, 0x5b, 0xff, 0x6d, 0x5f, 0x4c, 0xff, 0x6d, 0x5f, 0x4c, 0xff, 0x6f, 0x62, 0x4f, 0xff, 0x6e, 0x62, 0x4f, 0xff, 0x6e, 0x61, 0x4e, 0xff, 0x6d, 0x60, 0x4d, 0xff, 0x6e, 0x60, 0x4d, 0xff, 0x6e, 0x61, 0x4d, 0xff, 0x6d, 0x61, 0x4d, 0xff, 0x6d, 0x60, 0x4c, 0xff, 0x6d, 0x60, 0x4b, 0xff, 0x6a, 0x5d, 0x47, 0xff, 0x6e, 0x61, 0x4c, 0xff, 0x85, 0x7b, 0x69, 0xff, 0xe6, 0xe4, 0xe1, 0x1c, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, + 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xfe, 0xfe, 0xfe, 0x03, 0xb2, 0xa7, 0x9e, 0x9f, 0x84, 0x72, 0x61, 0xff, 0x7c, 0x69, 0x56, 0xff, 0x7f, 0x6d, 0x5b, 0xff, 0x7f, 0x6d, 0x5b, 0xff, 0x7f, 0x6e, 0x5b, 0xff, 0x80, 0x6e, 0x5c, 0xff, 0x7f, 0x6d, 0x5b, 0xff, 0x7f, 0x6d, 0x5b, 0xff, 0x7f, 0x6d, 0x5b, 0xff, 0x7f, 0x6d, 0x5b, 0xff, 0x7e, 0x6d, 0x5a, 0xff, 0x7e, 0x6d, 0x5a, 0xff, 0x7e, 0x6d, 0x5a, 0xff, 0x80, 0x6f, 0x5c, 0xff, 0x84, 0x71, 0x5f, 0xff, 0x89, 0x76, 0x65, 0xff, 0x8d, 0x79, 0x67, 0xff, 0x8f, 0x7a, 0x68, 0xff, 0x90, 0x7a, 0x69, 0xff, 0x8e, 0x78, 0x66, 0xff, 0x8c, 0x76, 0x63, 0xff, 0x90, 0x7a, 0x67, 0xff, 0x9e, 0x8b, 0x7a, 0xff, 0xad, 0x9b, 0x8d, 0xff, 0xc6, 0xba, 0xb0, 0x74, 0xd9, 0xd1, 0xcb, 0x3b, 0xe6, 0xe1, 0xdd, 0x33, 0xff, 0xfe, 0xfe, 0x13, 0xf4, 0xf3, 0xf2, 0x27, 0x91, 0x84, 0x75, 0xff, 0x7a, 0x69, 0x58, 0xff, 0x77, 0x67, 0x55, 0xff, 0x78, 0x68, 0x56, 0xff, 0x77, 0x67, 0x55, 0xff, 0x77, 0x66, 0x54, 0xff, 0x72, 0x62, 0x51, 0xff, 0x7d, 0x70, 0x65, 0xff, 0xbf, 0xb7, 0xb2, 0x97, 0xea, 0xe6, 0xe3, 0x3b, 0xe7, 0xe2, 0xde, 0x2c, 0xdc, 0xd4, 0xcd, 0x38, 0xbd, 0xae, 0xa2, 0xa3, 0xad, 0x99, 0x89, 0xff, 0xa5, 0x8d, 0x7c, 0xff, 0x9f, 0x85, 0x74, 0xff, 0xa1, 0x86, 0x74, 0xff, 0xa5, 0x8b, 0x79, 0xff, 0xaa, 0x8f, 0x7e, 0xff, 0xad, 0x92, 0x80, 0xff, 0xac, 0x90, 0x7f, 0xff, 0xa1, 0x87, 0x76, 0xff, 0x8c, 0x78, 0x65, 0xff, 0x7a, 0x6b, 0x57, 0xff, 0x6f, 0x62, 0x4f, 0xff, 0x6c, 0x5f, 0x4c, 0xff, 0x6e, 0x61, 0x4e, 0xff, 0x6f, 0x62, 0x4f, 0xff, 0x6e, 0x61, 0x4e, 0xff, 0x6e, 0x61, 0x4e, 0xff, 0x6d, 0x60, 0x4d, 0xff, 0x6d, 0x60, 0x4d, 0xff, 0x6d, 0x61, 0x4d, 0xff, 0x6d, 0x60, 0x4c, 0xff, 0x6d, 0x60, 0x4b, 0xff, 0x6d, 0x60, 0x4b, 0xff, 0x6d, 0x60, 0x4b, 0xff, 0x6a, 0x5d, 0x47, 0xf8, 0x6f, 0x62, 0x4c, 0xff, 0x91, 0x88, 0x7a, 0xff, 0xe9, 0xe8, 0xe5, 0x1f, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, + 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xce, 0xc8, 0xc1, 0x4c, 0x81, 0x6f, 0x5e, 0xff, 0x78, 0x66, 0x53, 0xff, 0x7e, 0x6d, 0x5a, 0xfc, 0x7f, 0x6d, 0x5b, 0xff, 0x7e, 0x6d, 0x5a, 0xff, 0x7e, 0x6d, 0x5a, 0xff, 0x7e, 0x6d, 0x5a, 0xff, 0x7f, 0x6d, 0x5b, 0xff, 0x7f, 0x6d, 0x5b, 0xff, 0x7e, 0x6d, 0x5a, 0xff, 0x7d, 0x6c, 0x59, 0xff, 0x7e, 0x6d, 0x5a, 0xff, 0x7e, 0x6d, 0x5a, 0xff, 0x7e, 0x6d, 0x5a, 0xff, 0x7d, 0x6c, 0x59, 0xff, 0x7e, 0x6e, 0x5a, 0xff, 0x82, 0x70, 0x5e, 0xff, 0x86, 0x74, 0x62, 0xff, 0x8c, 0x78, 0x66, 0xff, 0x92, 0x7c, 0x6a, 0xff, 0x94, 0x7e, 0x6d, 0xff, 0x95, 0x80, 0x6e, 0xff, 0x95, 0x80, 0x6e, 0xff, 0x93, 0x7d, 0x6a, 0xff, 0x91, 0x79, 0x67, 0xff, 0x91, 0x78, 0x66, 0xff, 0x96, 0x7f, 0x6d, 0xff, 0xa6, 0x92, 0x82, 0xff, 0xc2, 0xb2, 0xa7, 0xc7, 0xbb, 0xad, 0xa2, 0xac, 0x85, 0x75, 0x64, 0xfc, 0x76, 0x67, 0x55, 0xff, 0x77, 0x67, 0x55, 0xff, 0x77, 0x67, 0x55, 0xff, 0x77, 0x67, 0x55, 0xff, 0x76, 0x66, 0x54, 0xff, 0x76, 0x66, 0x54, 0xfc, 0x80, 0x6f, 0x5f, 0xfc, 0x9a, 0x89, 0x7b, 0xff, 0xaa, 0x98, 0x8b, 0xff, 0xa5, 0x90, 0x80, 0xff, 0x99, 0x81, 0x6e, 0xff, 0x95, 0x7c, 0x69, 0xff, 0x9a, 0x81, 0x6e, 0xff, 0x9e, 0x86, 0x73, 0xff, 0xa3, 0x8a, 0x79, 0xff, 0xa7, 0x8e, 0x7d, 0xff, 0xaa, 0x90, 0x7f, 0xff, 0xa8, 0x8e, 0x7d, 0xff, 0x9f, 0x87, 0x75, 0xff, 0x91, 0x7c, 0x69, 0xff, 0x82, 0x70, 0x5d, 0xff, 0x73, 0x66, 0x52, 0xff, 0x6c, 0x61, 0x4c, 0xff, 0x6e, 0x61, 0x4d, 0xff, 0x70, 0x62, 0x4f, 0xff, 0x6f, 0x62, 0x4f, 0xff, 0x6e, 0x61, 0x4e, 0xff, 0x6e, 0x61, 0x4e, 0xff, 0x6e, 0x61, 0x4d, 0xff, 0x6d, 0x61, 0x4d, 0xff, 0x6d, 0x61, 0x4d, 0xff, 0x6d, 0x60, 0x4c, 0xff, 0x6d, 0x60, 0x4b, 0xff, 0x6d, 0x60, 0x4b, 0xff, 0x6d, 0x60, 0x4b, 0xff, 0x6d, 0x61, 0x4c, 0xff, 0x6c, 0x5f, 0x4a, 0xff, 0x66, 0x58, 0x42, 0xf8, 0x74, 0x68, 0x54, 0xff, 0x9b, 0x93, 0x86, 0xb3, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, + 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xda, 0xd6, 0xd1, 0x4c, 0x91, 0x83, 0x73, 0xff, 0x7d, 0x6c, 0x59, 0xff, 0x7c, 0x6b, 0x58, 0xf8, 0x7e, 0x6d, 0x5a, 0xff, 0x7e, 0x6d, 0x5a, 0xff, 0x7e, 0x6d, 0x5a, 0xff, 0x7e, 0x6d, 0x5a, 0xff, 0x7e, 0x6d, 0x5a, 0xff, 0x7e, 0x6d, 0x5a, 0xff, 0x7e, 0x6d, 0x5a, 0xff, 0x7d, 0x6c, 0x59, 0xff, 0x7d, 0x6c, 0x59, 0xff, 0x7e, 0x6d, 0x5a, 0xff, 0x7e, 0x6d, 0x5a, 0xff, 0x7d, 0x6c, 0x59, 0xff, 0x7c, 0x6b, 0x58, 0xff, 0x7c, 0x6b, 0x58, 0xff, 0x7c, 0x6b, 0x58, 0xff, 0x7e, 0x6d, 0x5a, 0xff, 0x84, 0x72, 0x5f, 0xff, 0x8b, 0x76, 0x64, 0xff, 0x90, 0x7a, 0x68, 0xff, 0x94, 0x7f, 0x6c, 0xff, 0x97, 0x81, 0x70, 0xff, 0x9a, 0x83, 0x71, 0xff, 0x9a, 0x83, 0x72, 0xff, 0x9b, 0x83, 0x72, 0xff, 0x9b, 0x84, 0x72, 0xff, 0x9b, 0x83, 0x70, 0xff, 0x9e, 0x84, 0x71, 0xff, 0x96, 0x7f, 0x6c, 0xff, 0x7f, 0x6e, 0x5b, 0xff, 0x76, 0x67, 0x54, 0xfc, 0x77, 0x67, 0x55, 0xff, 0x77, 0x67, 0x55, 0xff, 0x77, 0x67, 0x55, 0xff, 0x75, 0x65, 0x53, 0xff, 0x78, 0x68, 0x56, 0xff, 0x85, 0x71, 0x5f, 0xff, 0x92, 0x7c, 0x69, 0xff, 0x97, 0x80, 0x6e, 0xff, 0x98, 0x81, 0x6f, 0xff, 0x9b, 0x84, 0x72, 0xff, 0x9e, 0x86, 0x74, 0xff, 0xa1, 0x88, 0x76, 0xff, 0xa3, 0x8a, 0x78, 0xff, 0xa2, 0x89, 0x77, 0xff, 0xa0, 0x88, 0x76, 0xff, 0x9d, 0x85, 0x73, 0xff, 0x93, 0x7e, 0x6c, 0xff, 0x86, 0x73, 0x60, 0xff, 0x75, 0x67, 0x53, 0xff, 0x6d, 0x61, 0x4c, 0xff, 0x6e, 0x62, 0x4e, 0xff, 0x6f, 0x62, 0x4e, 0xff, 0x6e, 0x62, 0x4e, 0xff, 0x6e, 0x62, 0x4e, 0xff, 0x6e, 0x61, 0x4e, 0xff, 0x6e, 0x61, 0x4e, 0xff, 0x6e, 0x61, 0x4d, 0xff, 0x6e, 0x61, 0x4c, 0xff, 0x6d, 0x60, 0x4b, 0xff, 0x6d, 0x60, 0x4c, 0xff, 0x6d, 0x60, 0x4b, 0xff, 0x6d, 0x60, 0x4b, 0xff, 0x6d, 0x60, 0x4b, 0xff, 0x6d, 0x60, 0x4b, 0xff, 0x6d, 0x60, 0x4b, 0xff, 0x6e, 0x61, 0x4c, 0xff, 0x6c, 0x5f, 0x4a, 0xff, 0x63, 0x56, 0x3f, 0xff, 0x82, 0x78, 0x66, 0xbb, 0xfc, 0xfb, 0xfb, 0x0b, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, + 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xfe, 0xfe, 0xfe, 0x04, 0xa2, 0x95, 0x88, 0xe8, 0x7f, 0x6e, 0x5b, 0xff, 0x7a, 0x69, 0x55, 0xf8, 0x7f, 0x6e, 0x5b, 0xff, 0x7e, 0x6d, 0x5a, 0xff, 0x7e, 0x6d, 0x5a, 0xff, 0x7e, 0x6d, 0x5a, 0xff, 0x7e, 0x6d, 0x5a, 0xff, 0x7d, 0x6c, 0x59, 0xff, 0x7d, 0x6d, 0x59, 0xff, 0x7e, 0x6d, 0x59, 0xff, 0x7d, 0x6c, 0x58, 0xff, 0x7d, 0x6c, 0x59, 0xff, 0x7e, 0x6d, 0x5a, 0xff, 0x7d, 0x6c, 0x59, 0xff, 0x7c, 0x6b, 0x58, 0xff, 0x7c, 0x6b, 0x58, 0xff, 0x7c, 0x6b, 0x58, 0xff, 0x7c, 0x6b, 0x58, 0xff, 0x7b, 0x6b, 0x58, 0xff, 0x7b, 0x6b, 0x57, 0xff, 0x7c, 0x6b, 0x58, 0xff, 0x83, 0x70, 0x5e, 0xff, 0x8c, 0x78, 0x66, 0xff, 0x93, 0x7d, 0x6b, 0xff, 0x98, 0x81, 0x70, 0xff, 0x99, 0x84, 0x71, 0xff, 0x9b, 0x85, 0x72, 0xff, 0x9d, 0x86, 0x74, 0xff, 0x9f, 0x86, 0x74, 0xff, 0xa3, 0x89, 0x77, 0xff, 0x9a, 0x82, 0x70, 0xff, 0x80, 0x6f, 0x5c, 0xff, 0x76, 0x66, 0x54, 0xff, 0x76, 0x67, 0x55, 0xff, 0x77, 0x67, 0x55, 0xff, 0x76, 0x66, 0x54, 0xff, 0x74, 0x64, 0x52, 0xff, 0x78, 0x67, 0x56, 0xff, 0x85, 0x71, 0x60, 0xff, 0x94, 0x7d, 0x6b, 0xff, 0x9a, 0x82, 0x70, 0xff, 0x99, 0x82, 0x71, 0xff, 0x9b, 0x84, 0x72, 0xff, 0x9d, 0x85, 0x73, 0xff, 0x9f, 0x86, 0x74, 0xff, 0x9d, 0x86, 0x74, 0xff, 0x96, 0x80, 0x6e, 0xff, 0x8d, 0x79, 0x66, 0xff, 0x7f, 0x6e, 0x5b, 0xff, 0x74, 0x66, 0x52, 0xff, 0x71, 0x63, 0x4f, 0xff, 0x70, 0x63, 0x4e, 0xff, 0x6e, 0x62, 0x4e, 0xff, 0x6e, 0x62, 0x4e, 0xff, 0x6e, 0x61, 0x4e, 0xff, 0x6e, 0x61, 0x4e, 0xff, 0x6e, 0x61, 0x4e, 0xff, 0x6e, 0x61, 0x4e, 0xff, 0x6d, 0x61, 0x4d, 0xff, 0x6d, 0x60, 0x4b, 0xff, 0x6b, 0x5e, 0x49, 0xfb, 0x69, 0x5c, 0x48, 0xff, 0x68, 0x5b, 0x46, 0xff, 0x69, 0x5c, 0x47, 0xff, 0x6d, 0x60, 0x4b, 0xff, 0x6d, 0x61, 0x4c, 0xff, 0x6d, 0x60, 0x4b, 0xff, 0x6d, 0x60, 0x4b, 0xff, 0x6e, 0x61, 0x4c, 0xff, 0x6c, 0x5f, 0x4a, 0xff, 0x60, 0x52, 0x3b, 0xff, 0x7d, 0x72, 0x60, 0xff, 0xe1, 0xdf, 0xdc, 0x40, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, + 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xfd, 0xfd, 0xfd, 0x0c, 0x94, 0x86, 0x77, 0xef, 0x78, 0x66, 0x53, 0xff, 0x79, 0x68, 0x54, 0xfc, 0x7d, 0x6c, 0x59, 0xff, 0x7d, 0x6c, 0x59, 0xff, 0x7d, 0x6c, 0x59, 0xff, 0x7d, 0x6c, 0x59, 0xff, 0x7c, 0x6b, 0x59, 0xff, 0x7c, 0x6b, 0x58, 0xff, 0x7c, 0x6b, 0x58, 0xff, 0x7c, 0x6a, 0x56, 0xff, 0x7a, 0x67, 0x54, 0xff, 0x79, 0x67, 0x54, 0xff, 0x7a, 0x69, 0x56, 0xff, 0x7b, 0x6a, 0x57, 0xff, 0x7c, 0x6b, 0x58, 0xff, 0x7b, 0x6a, 0x57, 0xff, 0x7b, 0x6a, 0x57, 0xff, 0x7b, 0x6a, 0x57, 0xff, 0x7a, 0x6a, 0x58, 0xff, 0x79, 0x69, 0x57, 0xff, 0x78, 0x68, 0x56, 0xff, 0x7b, 0x6a, 0x58, 0xff, 0x7e, 0x6d, 0x5b, 0xff, 0x80, 0x6f, 0x5c, 0xff, 0x84, 0x72, 0x60, 0xff, 0x8b, 0x78, 0x65, 0xff, 0x92, 0x7e, 0x6b, 0xff, 0x98, 0x82, 0x70, 0xff, 0x9f, 0x87, 0x75, 0xff, 0xa8, 0x8e, 0x7c, 0xff, 0x9f, 0x88, 0x76, 0xff, 0x82, 0x70, 0x5e, 0xff, 0x75, 0x66, 0x54, 0xff, 0x76, 0x66, 0x54, 0xff, 0x76, 0x66, 0x54, 0xff, 0x75, 0x65, 0x53, 0xff, 0x74, 0x64, 0x52, 0xff, 0x78, 0x67, 0x55, 0xff, 0x85, 0x71, 0x60, 0xff, 0x96, 0x7f, 0x6d, 0xff, 0x9b, 0x84, 0x73, 0xff, 0x97, 0x80, 0x70, 0xff, 0x92, 0x7d, 0x6c, 0xff, 0x90, 0x7b, 0x69, 0xff, 0x89, 0x76, 0x63, 0xff, 0x80, 0x6f, 0x5d, 0xff, 0x7b, 0x6b, 0x58, 0xff, 0x77, 0x68, 0x55, 0xff, 0x72, 0x64, 0x50, 0xff, 0x6e, 0x61, 0x4c, 0xff, 0x6e, 0x62, 0x4d, 0xff, 0x6f, 0x62, 0x4f, 0xff, 0x6f, 0x62, 0x4f, 0xff, 0x6f, 0x62, 0x4f, 0xff, 0x6e, 0x61, 0x4e, 0xff, 0x6d, 0x60, 0x4e, 0xff, 0x6d, 0x60, 0x4d, 0xff, 0x6e, 0x60, 0x4c, 0xff, 0x6d, 0x60, 0x4a, 0xff, 0x68, 0x5b, 0x48, 0xfb, 0x67, 0x5c, 0x50, 0xff, 0x6f, 0x65, 0x5a, 0xff, 0x6d, 0x62, 0x51, 0xff, 0x68, 0x5b, 0x44, 0xff, 0x6a, 0x5d, 0x47, 0xf8, 0x6d, 0x60, 0x4b, 0xff, 0x6d, 0x60, 0x4b, 0xff, 0x6d, 0x60, 0x4c, 0xff, 0x6d, 0x60, 0x4b, 0xff, 0x69, 0x5c, 0x45, 0xf8, 0x69, 0x5c, 0x49, 0xff, 0x85, 0x7b, 0x6e, 0xe3, 0xf9, 0xf8, 0xf8, 0x0c, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, + 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xfe, 0xfe, 0xfe, 0x07, 0xa4, 0x99, 0x8c, 0xd3, 0x7e, 0x6e, 0x5c, 0xff, 0x76, 0x63, 0x50, 0xff, 0x7c, 0x6a, 0x57, 0xf8, 0x7b, 0x6b, 0x58, 0xff, 0x7b, 0x6b, 0x58, 0xff, 0x7b, 0x6b, 0x58, 0xff, 0x7b, 0x6a, 0x57, 0xff, 0x7c, 0x6a, 0x55, 0xfc, 0x77, 0x66, 0x53, 0xfc, 0x72, 0x63, 0x58, 0xff, 0x7a, 0x6c, 0x62, 0xff, 0x7e, 0x6f, 0x5f, 0xff, 0x78, 0x67, 0x53, 0xff, 0x75, 0x64, 0x4f, 0xff, 0x7a, 0x69, 0x56, 0xf8, 0x7b, 0x6b, 0x59, 0xff, 0x7a, 0x6a, 0x58, 0xff, 0x7a, 0x6a, 0x57, 0xff, 0x79, 0x69, 0x58, 0xff, 0x79, 0x6a, 0x58, 0xff, 0x79, 0x6a, 0x57, 0xff, 0x79, 0x69, 0x57, 0xff, 0x77, 0x68, 0x56, 0xff, 0x76, 0x67, 0x55, 0xff, 0x77, 0x67, 0x55, 0xff, 0x7c, 0x6c, 0x59, 0xff, 0x82, 0x70, 0x5e, 0xff, 0x86, 0x73, 0x61, 0xff, 0x8b, 0x77, 0x65, 0xff, 0x90, 0x7c, 0x6a, 0xff, 0x8d, 0x78, 0x66, 0xff, 0x7d, 0x6b, 0x59, 0xff, 0x76, 0x66, 0x54, 0xff, 0x75, 0x65, 0x53, 0xff, 0x75, 0x65, 0x53, 0xff, 0x75, 0x65, 0x53, 0xff, 0x74, 0x65, 0x52, 0xff, 0x77, 0x66, 0x54, 0xff, 0x7e, 0x6c, 0x59, 0xff, 0x86, 0x73, 0x60, 0xff, 0x87, 0x75, 0x62, 0xff, 0x84, 0x72, 0x5f, 0xff, 0x80, 0x6f, 0x5c, 0xff, 0x7d, 0x6c, 0x5a, 0xff, 0x77, 0x67, 0x54, 0xff, 0x70, 0x61, 0x4e, 0xff, 0x6e, 0x61, 0x4d, 0xff, 0x6f, 0x62, 0x4e, 0xff, 0x70, 0x63, 0x4f, 0xff, 0x71, 0x64, 0x50, 0xff, 0x70, 0x63, 0x50, 0xff, 0x6f, 0x62, 0x4f, 0xff, 0x6e, 0x61, 0x4e, 0xff, 0x6e, 0x61, 0x4e, 0xff, 0x6e, 0x61, 0x4e, 0xff, 0x6e, 0x61, 0x4e, 0xff, 0x6e, 0x61, 0x4d, 0xff, 0x6c, 0x5e, 0x4a, 0xf8, 0x69, 0x5c, 0x4b, 0xff, 0x6f, 0x65, 0x5d, 0xff, 0x81, 0x79, 0x78, 0xff, 0xb5, 0xb0, 0xb0, 0x8b, 0xc3, 0xbf, 0xb8, 0x73, 0x8b, 0x81, 0x70, 0xff, 0x6d, 0x60, 0x4b, 0xff, 0x66, 0x58, 0x42, 0xff, 0x6d, 0x60, 0x4b, 0xfb, 0x6d, 0x60, 0x4b, 0xff, 0x69, 0x5c, 0x45, 0xf8, 0x65, 0x58, 0x42, 0xff, 0x7e, 0x74, 0x69, 0xff, 0xaf, 0xa9, 0xa7, 0x8b, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, + 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xf5, 0xf4, 0xf2, 0x1b, 0x92, 0x84, 0x75, 0xeb, 0x7e, 0x6d, 0x5a, 0xff, 0x75, 0x63, 0x50, 0xff, 0x7a, 0x69, 0x56, 0xfc, 0x7c, 0x6c, 0x59, 0xff, 0x7b, 0x69, 0x56, 0xff, 0x78, 0x66, 0x51, 0xfc, 0x75, 0x65, 0x52, 0xff, 0x78, 0x6b, 0x61, 0xff, 0x7d, 0x74, 0x75, 0xff, 0x94, 0x8d, 0x8d, 0xdc, 0x9f, 0x95, 0x8a, 0xd3, 0x8e, 0x80, 0x72, 0xe3, 0x82, 0x73, 0x61, 0xff, 0x78, 0x68, 0x55, 0xff, 0x75, 0x64, 0x51, 0xfc, 0x79, 0x69, 0x57, 0xfc, 0x7a, 0x6a, 0x58, 0xff, 0x79, 0x69, 0x57, 0xff, 0x79, 0x69, 0x57, 0xff, 0x79, 0x69, 0x57, 0xff, 0x78, 0x68, 0x56, 0xff, 0x78, 0x68, 0x56, 0xff, 0x78, 0x68, 0x56, 0xff, 0x77, 0x67, 0x55, 0xff, 0x76, 0x67, 0x54, 0xff, 0x76, 0x67, 0x54, 0xff, 0x76, 0x66, 0x53, 0xff, 0x76, 0x66, 0x54, 0xff, 0x76, 0x66, 0x54, 0xff, 0x76, 0x66, 0x54, 0xff, 0x76, 0x66, 0x54, 0xff, 0x76, 0x66, 0x54, 0xff, 0x75, 0x66, 0x54, 0xff, 0x75, 0x65, 0x53, 0xff, 0x75, 0x66, 0x53, 0xff, 0x75, 0x66, 0x53, 0xff, 0x75, 0x66, 0x53, 0xff, 0x75, 0x66, 0x53, 0xff, 0x74, 0x65, 0x52, 0xff, 0x72, 0x64, 0x50, 0xff, 0x72, 0x64, 0x50, 0xff, 0x72, 0x65, 0x51, 0xff, 0x72, 0x64, 0x50, 0xff, 0x72, 0x63, 0x50, 0xff, 0x72, 0x63, 0x50, 0xff, 0x70, 0x63, 0x4f, 0xff, 0x70, 0x63, 0x4f, 0xff, 0x70, 0x63, 0x4f, 0xff, 0x70, 0x62, 0x4f, 0xff, 0x6f, 0x62, 0x4f, 0xff, 0x6e, 0x61, 0x4f, 0xff, 0x6e, 0x61, 0x4e, 0xff, 0x6e, 0x61, 0x4e, 0xff, 0x6e, 0x61, 0x4d, 0xff, 0x6e, 0x61, 0x4c, 0xff, 0x6a, 0x5e, 0x4c, 0xf7, 0x69, 0x5c, 0x4f, 0xff, 0x73, 0x68, 0x63, 0xff, 0x8e, 0x87, 0x89, 0xfc, 0xd2, 0xd0, 0xd3, 0x4f, 0xff, 0xff, 0xff, 0x03, 0xff, 0xff, 0xff, 0x00, 0xdd, 0xdb, 0xd6, 0x38, 0x8e, 0x85, 0x75, 0xff, 0x72, 0x65, 0x52, 0xff, 0x69, 0x5c, 0x46, 0xff, 0x65, 0x58, 0x42, 0xff, 0x6c, 0x60, 0x4c, 0xff, 0x80, 0x75, 0x68, 0xff, 0xa3, 0x9b, 0x98, 0xbc, 0xfb, 0xfb, 0xfb, 0x0b, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, + 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xf8, 0xf7, 0xf6, 0x10, 0x92, 0x84, 0x75, 0xe7, 0x7f, 0x6f, 0x5e, 0xff, 0x74, 0x62, 0x4f, 0xff, 0x76, 0x64, 0x51, 0xf8, 0x75, 0x63, 0x4f, 0xff, 0x7a, 0x6b, 0x5a, 0xff, 0x82, 0x77, 0x6d, 0xff, 0x8d, 0x87, 0x87, 0xe8, 0xdc, 0xda, 0xdc, 0x43, 0xfd, 0xfd, 0xfd, 0x08, 0xfe, 0xfe, 0xfe, 0x03, 0xfc, 0xfb, 0xfb, 0x0c, 0xb8, 0xaf, 0xa5, 0x93, 0x8b, 0x7e, 0x6e, 0xff, 0x74, 0x64, 0x51, 0xff, 0x76, 0x66, 0x53, 0xff, 0x78, 0x68, 0x56, 0xff, 0x78, 0x68, 0x56, 0xff, 0x78, 0x68, 0x56, 0xff, 0x78, 0x68, 0x56, 0xff, 0x78, 0x68, 0x56, 0xff, 0x77, 0x67, 0x55, 0xff, 0x77, 0x67, 0x55, 0xff, 0x77, 0x67, 0x55, 0xff, 0x76, 0x66, 0x54, 0xff, 0x75, 0x65, 0x53, 0xff, 0x75, 0x65, 0x53, 0xff, 0x75, 0x65, 0x53, 0xff, 0x74, 0x65, 0x53, 0xff, 0x74, 0x65, 0x52, 0xff, 0x75, 0x65, 0x53, 0xff, 0x75, 0x65, 0x53, 0xff, 0x75, 0x66, 0x53, 0xff, 0x75, 0x66, 0x53, 0xff, 0x74, 0x65, 0x52, 0xff, 0x74, 0x65, 0x52, 0xff, 0x74, 0x65, 0x52, 0xff, 0x74, 0x65, 0x52, 0xff, 0x73, 0x64, 0x51, 0xff, 0x72, 0x63, 0x50, 0xff, 0x72, 0x63, 0x50, 0xff, 0x72, 0x64, 0x50, 0xff, 0x71, 0x63, 0x4f, 0xff, 0x71, 0x63, 0x4f, 0xff, 0x71, 0x64, 0x50, 0xff, 0x70, 0x63, 0x4f, 0xff, 0x70, 0x63, 0x4f, 0xff, 0x70, 0x62, 0x4e, 0xff, 0x6f, 0x61, 0x4e, 0xff, 0x6e, 0x61, 0x4e, 0xff, 0x6e, 0x61, 0x4e, 0xff, 0x6d, 0x60, 0x4e, 0xff, 0x6e, 0x61, 0x4e, 0xff, 0x6f, 0x62, 0x4c, 0xff, 0x69, 0x5d, 0x49, 0xf8, 0x63, 0x58, 0x4e, 0xff, 0x75, 0x6d, 0x6d, 0xff, 0xb0, 0xac, 0xae, 0x73, 0xfd, 0xfd, 0xfd, 0x07, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xfc, 0xfc, 0xfb, 0x10, 0xb7, 0xb1, 0xa7, 0x67, 0x70, 0x64, 0x51, 0xf7, 0x71, 0x64, 0x50, 0xd8, 0x80, 0x76, 0x69, 0xe7, 0xb8, 0xb3, 0xaf, 0x8b, 0xfc, 0xfb, 0xfc, 0x0b, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, + 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xfb, 0xfa, 0xfa, 0x0f, 0xa4, 0x9a, 0x8d, 0xd0, 0x84, 0x75, 0x64, 0xff, 0x79, 0x68, 0x56, 0xff, 0x85, 0x77, 0x69, 0xff, 0x96, 0x8c, 0x84, 0xf7, 0xd9, 0xd7, 0xd6, 0x4f, 0xfe, 0xfe, 0xfe, 0x0b, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xeb, 0xe9, 0xe6, 0x37, 0x97, 0x8a, 0x7c, 0xff, 0x79, 0x6a, 0x57, 0xff, 0x73, 0x63, 0x50, 0xff, 0x77, 0x67, 0x55, 0xff, 0x77, 0x67, 0x55, 0xff, 0x77, 0x67, 0x55, 0xff, 0x76, 0x66, 0x54, 0xff, 0x76, 0x66, 0x54, 0xff, 0x76, 0x66, 0x54, 0xff, 0x76, 0x66, 0x54, 0xff, 0x76, 0x66, 0x54, 0xff, 0x76, 0x66, 0x54, 0xff, 0x76, 0x66, 0x54, 0xff, 0x76, 0x66, 0x54, 0xff, 0x75, 0x66, 0x53, 0xff, 0x75, 0x66, 0x53, 0xff, 0x75, 0x66, 0x53, 0xff, 0x75, 0x66, 0x53, 0xff, 0x75, 0x66, 0x53, 0xff, 0x74, 0x66, 0x52, 0xff, 0x74, 0x65, 0x52, 0xff, 0x74, 0x65, 0x52, 0xff, 0x74, 0x65, 0x52, 0xff, 0x73, 0x65, 0x51, 0xff, 0x73, 0x65, 0x51, 0xff, 0x73, 0x64, 0x51, 0xff, 0x73, 0x64, 0x50, 0xff, 0x72, 0x64, 0x50, 0xff, 0x71, 0x63, 0x4f, 0xff, 0x70, 0x63, 0x4f, 0xff, 0x70, 0x63, 0x4f, 0xff, 0x6f, 0x63, 0x4f, 0xff, 0x6f, 0x61, 0x4f, 0xff, 0x6f, 0x61, 0x4e, 0xff, 0x6e, 0x61, 0x4e, 0xff, 0x6d, 0x60, 0x4d, 0xff, 0x6e, 0x60, 0x4d, 0xff, 0x6e, 0x61, 0x4d, 0xff, 0x6e, 0x61, 0x4d, 0xff, 0x6d, 0x61, 0x4b, 0xff, 0x63, 0x57, 0x48, 0xff, 0x70, 0x67, 0x65, 0xff, 0xb3, 0xaf, 0xb3, 0x7b, 0xff, 0xff, 0xff, 0x03, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xfb, 0xfb, 0xfa, 0x0c, 0xfa, 0xfa, 0xfa, 0x0f, 0xfd, 0xfd, 0xfd, 0x07, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, + 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xfa, 0xf9, 0xf9, 0x13, 0xb5, 0xac, 0xa1, 0x9b, 0xa7, 0x9d, 0x92, 0xa0, 0xbc, 0xb5, 0xb0, 0x90, 0xf5, 0xf4, 0xf4, 0x1f, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x07, 0xb4, 0xaa, 0xa1, 0xdc, 0x80, 0x71, 0x60, 0xff, 0x6f, 0x5f, 0x4c, 0xff, 0x76, 0x66, 0x54, 0xff, 0x77, 0x67, 0x55, 0xff, 0x77, 0x67, 0x55, 0xff, 0x76, 0x66, 0x54, 0xff, 0x76, 0x66, 0x54, 0xff, 0x76, 0x66, 0x54, 0xff, 0x76, 0x66, 0x54, 0xff, 0x76, 0x66, 0x54, 0xff, 0x76, 0x66, 0x54, 0xff, 0x76, 0x66, 0x54, 0xff, 0x75, 0x66, 0x54, 0xff, 0x75, 0x66, 0x53, 0xff, 0x75, 0x66, 0x53, 0xff, 0x75, 0x66, 0x53, 0xff, 0x75, 0x66, 0x53, 0xff, 0x75, 0x66, 0x53, 0xff, 0x74, 0x65, 0x52, 0xff, 0x74, 0x65, 0x52, 0xff, 0x74, 0x65, 0x52, 0xff, 0x73, 0x65, 0x51, 0xff, 0x72, 0x65, 0x50, 0xff, 0x72, 0x64, 0x50, 0xff, 0x72, 0x64, 0x50, 0xff, 0x72, 0x64, 0x50, 0xff, 0x71, 0x63, 0x50, 0xff, 0x70, 0x63, 0x50, 0xff, 0x70, 0x63, 0x50, 0xff, 0x70, 0x63, 0x50, 0xff, 0x6f, 0x62, 0x50, 0xff, 0x6e, 0x61, 0x4f, 0xff, 0x6e, 0x61, 0x4e, 0xff, 0x6d, 0x60, 0x4d, 0xff, 0x6d, 0x60, 0x4d, 0xff, 0x6e, 0x61, 0x4d, 0xff, 0x6d, 0x61, 0x4d, 0xff, 0x6d, 0x61, 0x4d, 0xff, 0x6b, 0x5f, 0x48, 0xff, 0x68, 0x5c, 0x4e, 0xff, 0x87, 0x7f, 0x7c, 0xc7, 0xfe, 0xfe, 0xfe, 0x0b, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, + 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xfd, 0xfd, 0xfd, 0x08, 0xa8, 0x9d, 0x91, 0xe7, 0x7f, 0x70, 0x5f, 0xff, 0x70, 0x5f, 0x4c, 0xff, 0x75, 0x65, 0x53, 0xff, 0x76, 0x66, 0x54, 0xff, 0x76, 0x66, 0x54, 0xff, 0x76, 0x66, 0x54, 0xff, 0x76, 0x66, 0x54, 0xff, 0x76, 0x66, 0x54, 0xff, 0x76, 0x66, 0x53, 0xff, 0x76, 0x65, 0x53, 0xff, 0x75, 0x65, 0x52, 0xff, 0x74, 0x65, 0x51, 0xff, 0x74, 0x65, 0x52, 0xff, 0x74, 0x65, 0x52, 0xff, 0x74, 0x65, 0x52, 0xff, 0x74, 0x65, 0x52, 0xff, 0x74, 0x65, 0x52, 0xff, 0x74, 0x65, 0x52, 0xff, 0x74, 0x65, 0x52, 0xff, 0x73, 0x64, 0x51, 0xff, 0x73, 0x64, 0x51, 0xff, 0x73, 0x64, 0x51, 0xff, 0x72, 0x64, 0x50, 0xff, 0x71, 0x63, 0x4f, 0xff, 0x71, 0x63, 0x50, 0xff, 0x71, 0x63, 0x50, 0xff, 0x70, 0x62, 0x4e, 0xff, 0x6e, 0x61, 0x4d, 0xff, 0x6e, 0x60, 0x4c, 0xff, 0x6d, 0x5f, 0x4b, 0xff, 0x6b, 0x5e, 0x4b, 0xfc, 0x6d, 0x60, 0x4d, 0xff, 0x6e, 0x61, 0x4e, 0xff, 0x6d, 0x60, 0x4d, 0xff, 0x6e, 0x61, 0x4d, 0xff, 0x6d, 0x61, 0x4d, 0xff, 0x6d, 0x61, 0x4d, 0xff, 0x6d, 0x60, 0x4c, 0xff, 0x6b, 0x5d, 0x47, 0xff, 0x6d, 0x61, 0x50, 0xff, 0x93, 0x8b, 0x82, 0xa7, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, + 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xfb, 0xfa, 0xfa, 0x0c, 0x8a, 0x7d, 0x6d, 0xef, 0x79, 0x69, 0x57, 0xff, 0x73, 0x62, 0x50, 0xff, 0x75, 0x65, 0x53, 0xff, 0x76, 0x66, 0x54, 0xff, 0x76, 0x65, 0x53, 0xff, 0x75, 0x65, 0x53, 0xff, 0x75, 0x66, 0x54, 0xff, 0x76, 0x66, 0x54, 0xff, 0x76, 0x66, 0x53, 0xff, 0x74, 0x65, 0x51, 0xff, 0x73, 0x64, 0x50, 0xf8, 0x72, 0x63, 0x4f, 0xf8, 0x72, 0x63, 0x50, 0xf8, 0x73, 0x64, 0x51, 0xfc, 0x74, 0x65, 0x52, 0xff, 0x74, 0x65, 0x52, 0xff, 0x73, 0x65, 0x51, 0xff, 0x73, 0x65, 0x51, 0xff, 0x73, 0x64, 0x51, 0xff, 0x72, 0x64, 0x50, 0xff, 0x72, 0x63, 0x50, 0xff, 0x72, 0x63, 0x50, 0xff, 0x71, 0x63, 0x50, 0xff, 0x71, 0x63, 0x4f, 0xff, 0x71, 0x63, 0x4f, 0xff, 0x6f, 0x61, 0x4e, 0xff, 0x6e, 0x60, 0x4c, 0xf8, 0x6c, 0x5f, 0x4a, 0xf8, 0x6c, 0x5e, 0x4b, 0xf7, 0x6a, 0x5d, 0x49, 0xff, 0x69, 0x5d, 0x4a, 0xff, 0x6b, 0x5e, 0x4c, 0xfc, 0x6e, 0x61, 0x4d, 0xff, 0x6e, 0x61, 0x4d, 0xff, 0x6e, 0x61, 0x4d, 0xff, 0x6d, 0x61, 0x4c, 0xff, 0x6d, 0x60, 0x4b, 0xff, 0x6d, 0x60, 0x4b, 0xff, 0x6b, 0x5e, 0x48, 0xff, 0x6c, 0x5f, 0x4b, 0xff, 0x8e, 0x85, 0x77, 0xa7, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, + 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xfa, 0xf9, 0xf8, 0x10, 0x79, 0x6a, 0x58, 0xf0, 0x74, 0x63, 0x51, 0xff, 0x75, 0x66, 0x53, 0xff, 0x76, 0x67, 0x54, 0xff, 0x76, 0x66, 0x54, 0xff, 0x75, 0x66, 0x53, 0xff, 0x75, 0x66, 0x53, 0xff, 0x76, 0x67, 0x53, 0xff, 0x74, 0x65, 0x52, 0xff, 0x6d, 0x5e, 0x4f, 0xf8, 0x68, 0x5b, 0x50, 0xff, 0x76, 0x6a, 0x61, 0xff, 0x82, 0x76, 0x6a, 0xff, 0x7f, 0x72, 0x63, 0xff, 0x74, 0x66, 0x54, 0xff, 0x72, 0x63, 0x50, 0xfc, 0x74, 0x65, 0x51, 0xfc, 0x73, 0x65, 0x51, 0xff, 0x72, 0x64, 0x50, 0xff, 0x72, 0x63, 0x4f, 0xff, 0x72, 0x64, 0x50, 0xff, 0x71, 0x63, 0x50, 0xff, 0x71, 0x63, 0x50, 0xff, 0x70, 0x63, 0x4f, 0xff, 0x6e, 0x61, 0x4d, 0xff, 0x6b, 0x5d, 0x4b, 0xf8, 0x69, 0x5b, 0x4c, 0xff, 0x72, 0x66, 0x5b, 0xff, 0x7a, 0x6f, 0x67, 0xff, 0x82, 0x79, 0x73, 0xff, 0x90, 0x88, 0x81, 0xff, 0x94, 0x8b, 0x81, 0xff, 0x79, 0x6d, 0x5d, 0xff, 0x66, 0x58, 0x43, 0xfc, 0x6d, 0x60, 0x4b, 0xfc, 0x6e, 0x61, 0x4d, 0xff, 0x6d, 0x60, 0x4b, 0xff, 0x6d, 0x60, 0x4b, 0xff, 0x6e, 0x61, 0x4c, 0xff, 0x6b, 0x5e, 0x49, 0xff, 0x67, 0x5a, 0x44, 0xff, 0x86, 0x7b, 0x6c, 0xcf, 0xfa, 0xfa, 0xfa, 0x17, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, + 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xd5, 0xd1, 0xcb, 0x53, 0x76, 0x67, 0x54, 0xff, 0x70, 0x60, 0x4d, 0xff, 0x76, 0x67, 0x54, 0xff, 0x76, 0x67, 0x54, 0xff, 0x75, 0x66, 0x53, 0xff, 0x74, 0x66, 0x52, 0xff, 0x75, 0x66, 0x53, 0xff, 0x75, 0x66, 0x52, 0xff, 0x6f, 0x5f, 0x4d, 0xfc, 0x68, 0x5b, 0x55, 0xff, 0x7f, 0x76, 0x77, 0xff, 0xb8, 0xb4, 0xb4, 0x67, 0xd6, 0xd4, 0xd1, 0x3b, 0xcd, 0xc9, 0xc4, 0x50, 0xa5, 0x9c, 0x91, 0xaf, 0x78, 0x6b, 0x58, 0xff, 0x70, 0x63, 0x4e, 0xff, 0x72, 0x64, 0x50, 0xff, 0x71, 0x63, 0x50, 0xff, 0x70, 0x63, 0x4f, 0xff, 0x71, 0x63, 0x4f, 0xff, 0x70, 0x63, 0x4f, 0xff, 0x70, 0x63, 0x4f, 0xff, 0x6e, 0x60, 0x4d, 0xff, 0x67, 0x5a, 0x4b, 0xf8, 0x6e, 0x64, 0x5a, 0xff, 0x81, 0x78, 0x74, 0xff, 0xbd, 0xb8, 0xb7, 0x58, 0xd3, 0xcf, 0xd0, 0x40, 0xcf, 0xcc, 0xce, 0x4f, 0xe4, 0xe2, 0xe4, 0x3f, 0xf2, 0xf1, 0xf1, 0x2f, 0xa9, 0xa2, 0x97, 0x7f, 0x6c, 0x5f, 0x4b, 0xff, 0x6b, 0x5e, 0x4a, 0xff, 0x6d, 0x60, 0x4b, 0xff, 0x6d, 0x60, 0x4b, 0xff, 0x6d, 0x60, 0x4b, 0xff, 0x6d, 0x60, 0x4c, 0xff, 0x6c, 0x5f, 0x4a, 0xff, 0x65, 0x57, 0x40, 0xff, 0x7d, 0x72, 0x60, 0xff, 0xc6, 0xc2, 0xbc, 0x7b, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, + 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xfe, 0xfe, 0xfe, 0x08, 0xa1, 0x97, 0x8a, 0xff, 0x74, 0x65, 0x52, 0xff, 0x6e, 0x5e, 0x4a, 0xf8, 0x75, 0x66, 0x54, 0xff, 0x75, 0x66, 0x53, 0xff, 0x74, 0x65, 0x52, 0xff, 0x74, 0x65, 0x52, 0xff, 0x74, 0x65, 0x52, 0xff, 0x72, 0x63, 0x4e, 0xfc, 0x6e, 0x60, 0x51, 0xff, 0x78, 0x6f, 0x6e, 0xff, 0xca, 0xc7, 0xcb, 0x58, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xf4, 0xf3, 0xf1, 0x24, 0x83, 0x78, 0x66, 0xff, 0x70, 0x64, 0x50, 0xff, 0x6f, 0x61, 0x4d, 0xff, 0x71, 0x63, 0x4f, 0xff, 0x70, 0x63, 0x4f, 0xff, 0x6f, 0x62, 0x4f, 0xff, 0x6f, 0x62, 0x4f, 0xff, 0x70, 0x62, 0x4e, 0xff, 0x6b, 0x5d, 0x4b, 0xff, 0x65, 0x5a, 0x51, 0xff, 0x7f, 0x78, 0x77, 0xff, 0xd9, 0xd7, 0xd8, 0x47, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xed, 0xec, 0xe9, 0x28, 0x8c, 0x82, 0x72, 0xff, 0x69, 0x5c, 0x47, 0xff, 0x6a, 0x5c, 0x47, 0xff, 0x6e, 0x61, 0x4c, 0xff, 0x6d, 0x60, 0x4b, 0xff, 0x6d, 0x60, 0x4b, 0xff, 0x6b, 0x5e, 0x48, 0xff, 0x66, 0x59, 0x41, 0xfb, 0x76, 0x6a, 0x59, 0xff, 0x9b, 0x93, 0x8d, 0xc3, 0xff, 0xff, 0xff, 0x03, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, + 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x04, 0xb2, 0xaa, 0xa0, 0xc0, 0x73, 0x63, 0x51, 0xff, 0x6b, 0x5a, 0x47, 0xff, 0x73, 0x64, 0x51, 0xff, 0x74, 0x65, 0x52, 0xff, 0x74, 0x65, 0x52, 0xff, 0x74, 0x65, 0x52, 0xff, 0x73, 0x64, 0x50, 0xff, 0x6d, 0x5f, 0x4c, 0xff, 0x77, 0x6c, 0x63, 0xff, 0xae, 0xaa, 0xab, 0xa0, 0xfe, 0xff, 0xff, 0x04, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xfb, 0xfb, 0xfa, 0x0c, 0x8b, 0x81, 0x71, 0xf8, 0x74, 0x67, 0x54, 0xff, 0x6d, 0x5f, 0x4a, 0xff, 0x70, 0x62, 0x4e, 0xff, 0x6f, 0x62, 0x4f, 0xff, 0x6e, 0x62, 0x4e, 0xff, 0x6e, 0x61, 0x4e, 0xff, 0x6f, 0x61, 0x4d, 0xff, 0x69, 0x5c, 0x4a, 0xff, 0x6e, 0x65, 0x5d, 0xff, 0xa2, 0x9d, 0x9d, 0xcf, 0xff, 0xff, 0xff, 0x04, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xfe, 0xfe, 0xfe, 0x08, 0xb6, 0xb0, 0xa5, 0x83, 0x6f, 0x62, 0x4d, 0xff, 0x65, 0x57, 0x40, 0xff, 0x6d, 0x60, 0x4b, 0xff, 0x6c, 0x5f, 0x49, 0xff, 0x6b, 0x5d, 0x48, 0xff, 0x68, 0x5a, 0x44, 0xff, 0x66, 0x59, 0x43, 0xff, 0x7e, 0x73, 0x65, 0xff, 0xd5, 0xd1, 0xd0, 0x54, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, + 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xf0, 0xef, 0xed, 0x28, 0x92, 0x86, 0x78, 0xff, 0x7a, 0x6c, 0x5b, 0xff, 0x6d, 0x5d, 0x4a, 0xff, 0x6b, 0x5c, 0x47, 0xff, 0x6e, 0x5f, 0x4a, 0xff, 0x70, 0x61, 0x4c, 0xfc, 0x6d, 0x5d, 0x47, 0xff, 0x70, 0x63, 0x55, 0xff, 0x8c, 0x85, 0x83, 0xff, 0xf1, 0xf0, 0xf0, 0x28, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xfb, 0xfb, 0xfa, 0x10, 0x9b, 0x91, 0x84, 0xff, 0x77, 0x6a, 0x57, 0xff, 0x69, 0x5c, 0x48, 0xff, 0x6e, 0x61, 0x4d, 0xff, 0x6e, 0x62, 0x4e, 0xff, 0x6e, 0x61, 0x4e, 0xff, 0x6e, 0x61, 0x4e, 0xff, 0x6d, 0x5f, 0x4b, 0xff, 0x6a, 0x5d, 0x4b, 0xff, 0x75, 0x6b, 0x63, 0xff, 0xdb, 0xd8, 0xd8, 0x53, 0xff, 0xff, 0xff, 0x03, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xeb, 0xe9, 0xe6, 0x2f, 0x8c, 0x81, 0x71, 0xff, 0x65, 0x57, 0x41, 0xff, 0x63, 0x55, 0x3f, 0xff, 0x67, 0x59, 0x44, 0xff, 0x6c, 0x5f, 0x4d, 0xff, 0x74, 0x68, 0x5b, 0xff, 0x86, 0x7d, 0x73, 0xff, 0xcc, 0xc9, 0xc4, 0x68, 0xff, 0xff, 0xff, 0x07, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, + 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xf3, 0xf2, 0xf1, 0x23, 0xbe, 0xb7, 0xaf, 0x94, 0x92, 0x88, 0x7a, 0xff, 0x84, 0x77, 0x66, 0xff, 0x78, 0x6b, 0x58, 0xff, 0x72, 0x64, 0x51, 0xff, 0x7a, 0x6c, 0x5a, 0xff, 0x90, 0x87, 0x7e, 0xff, 0xd2, 0xd0, 0xd0, 0x50, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xfb, 0xfb, 0xfa, 0x13, 0xa5, 0x9d, 0x91, 0xff, 0x78, 0x6c, 0x5a, 0xff, 0x67, 0x5a, 0x46, 0xfc, 0x6e, 0x61, 0x4e, 0xff, 0x6e, 0x61, 0x4f, 0xff, 0x6e, 0x61, 0x4f, 0xff, 0x6e, 0x62, 0x4f, 0xff, 0x6d, 0x60, 0x4a, 0xff, 0x6e, 0x60, 0x4e, 0xff, 0x77, 0x6c, 0x66, 0xff, 0xf7, 0xf6, 0xf7, 0x17, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xfe, 0xfe, 0xfe, 0x08, 0xd1, 0xcd, 0xc7, 0x68, 0x93, 0x89, 0x7a, 0xff, 0x81, 0x75, 0x64, 0xff, 0x8c, 0x81, 0x73, 0xff, 0x9b, 0x93, 0x89, 0xff, 0xc9, 0xc6, 0xc3, 0x6b, 0xf1, 0xf0, 0xf1, 0x24, 0xff, 0xff, 0xff, 0x07, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, + 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x0b, 0xf8, 0xf8, 0xf7, 0x17, 0xe7, 0xe4, 0xe1, 0x38, 0xa4, 0x9b, 0x90, 0xeb, 0x8b, 0x80, 0x72, 0xff, 0xc1, 0xbb, 0xb3, 0x63, 0xf8, 0xf8, 0xf8, 0x17, 0xff, 0xff, 0xff, 0x03, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xfd, 0xfd, 0xfc, 0x0f, 0xab, 0xa2, 0x97, 0xef, 0x75, 0x68, 0x56, 0xff, 0x64, 0x56, 0x41, 0xff, 0x6b, 0x5e, 0x4a, 0xff, 0x6b, 0x5e, 0x4a, 0xff, 0x6b, 0x5e, 0x4a, 0xff, 0x6c, 0x5f, 0x4a, 0xff, 0x69, 0x5b, 0x44, 0xfc, 0x6d, 0x60, 0x4e, 0xff, 0x81, 0x78, 0x73, 0xff, 0xf9, 0xf9, 0xf9, 0x10, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x04, 0xf7, 0xf6, 0xf5, 0x1f, 0xf4, 0xf3, 0xf2, 0x1f, 0xf5, 0xf4, 0xf3, 0x1f, 0xf9, 0xf9, 0xf8, 0x1c, 0xff, 0xff, 0xff, 0x07, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, + 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xfb, 0xfb, 0xfa, 0x13, 0xf4, 0xf4, 0xf2, 0x1b, 0xfe, 0xfe, 0xfe, 0x04, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xe7, 0xe6, 0xe2, 0x2f, 0x7b, 0x6f, 0x5c, 0xff, 0x67, 0x5a, 0x44, 0xff, 0x6b, 0x5e, 0x49, 0xff, 0x6b, 0x5e, 0x4a, 0xff, 0x6b, 0x5e, 0x4a, 0xff, 0x6b, 0x5d, 0x48, 0xff, 0x67, 0x59, 0x44, 0xff, 0x74, 0x68, 0x59, 0xff, 0x97, 0x90, 0x8c, 0xff, 0xfb, 0xfb, 0xfc, 0x10, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, + 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x03, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x03, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x03, 0xff, 0xff, 0xff, 0x00, 0xfd, 0xfd, 0xfd, 0x0b, 0xb1, 0xab, 0xa0, 0xb8, 0x8a, 0x80, 0x6f, 0xff, 0x89, 0x7e, 0x6f, 0xe7, 0x89, 0x7f, 0x6f, 0xe3, 0x89, 0x7e, 0x6f, 0xe4, 0x87, 0x7b, 0x6d, 0xe7, 0x83, 0x78, 0x6a, 0xff, 0x94, 0x8b, 0x81, 0xf7, 0xee, 0xec, 0xec, 0x28, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, + 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x03, 0xfe, 0xfe, 0xfe, 0x08, 0xfc, 0xfc, 0xfc, 0x0c, 0xfc, 0xfc, 0xfc, 0x0c, 0xfc, 0xfc, 0xfc, 0x0b, 0xfb, 0xfb, 0xfb, 0x10, 0xfa, 0xf9, 0xf9, 0x18, 0xfb, 0xfa, 0xfa, 0x13, 0xfd, 0xfd, 0xfd, 0x0b, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, 0xff, 0xff, 0xff, 0x00, +} + +// **创建全局图片结构体** +var ImgCogwheelARGB core.LvImageDscT + +// **初始化图片结构体** +func init() { + ImgCogwheelARGB = core.LvImageDscT{ + Header: core.LvImageHeaderT{ + Width: 100, + Height: 100, + Stride: 400, + CF: (c.Uint8T)(core.LV_COLOR_FORMAT_ARGB8888), + }, + DataSize: c.Uint32T(len(imgCogwheelARGBMap)), // 计算数组大小 + Data: (*c.Char)(unsafe.Pointer(&imgCogwheelARGBMap[0])), // 指向数组首地址 + } +} diff --git a/lvgl/_demo/example/assert/img_cogwheel_argb.png b/lvgl/_demo/example/assert/img_cogwheel_argb.png new file mode 100644 index 00000000..9cd0f442 Binary files /dev/null and b/lvgl/_demo/example/assert/img_cogwheel_argb.png differ diff --git a/lvgl/_demo/example/demo.go b/lvgl/_demo/example/demo.go new file mode 100644 index 00000000..5998fced --- /dev/null +++ b/lvgl/_demo/example/demo.go @@ -0,0 +1,40 @@ +package main + +import ( + "log" + "time" + + "github.com/goplus/llgo/c" + "github.com/goplus/llpkg/lvgl" + "github.com/goplus/llpkg/lvgl/drivers/sdl" +) + +func main() { + // Initialize LVGL + lvgl.LvglInit() + + // Create a display + disp := sdl.LvSdlWindowCreate(480, 320) + sdl.LvSdlMouseCreate() + sdl.LvSdlKeyboardCreate() + + sdl.LvSdlWindowSetZoom(disp, 1.0) + sdl.LvSdlWindowSetTitle(disp, c.Str("Profile Page")) + log.Println("disp", disp) + + //lv_example_style_1() // 背景 + //lv_example_style_2() // 渐变 -- 有问题 + //lv_example_style_3() // 边框 + //lv_example_style_4() // 轮廓 + //lv_example_style_5() // 阴影 + //lv_example_style_6() // 图片 + lv_example_get_started_2() // 按钮 + //lv_example_get_started_3() // 滑块 + //lv_example_get_started_4() // 标签 + //lv_example_anim_1() // 动画 + // Main event loop + for { + lvgl.LvTimerHandler() + time.Sleep(time.Millisecond * 5) + } +} diff --git a/lvgl/_demo/example/lv_example_anim_1.go b/lvgl/_demo/example/lv_example_anim_1.go new file mode 100644 index 00000000..89d8df04 --- /dev/null +++ b/lvgl/_demo/example/lv_example_anim_1.go @@ -0,0 +1,56 @@ +package main + +import ( + "log" + + "github.com/goplus/llgo/c" + "github.com/goplus/llpkg/lvgl/core" + "github.com/goplus/llpkg/lvgl/display" + "github.com/goplus/llpkg/lvgl/widgets" +) + +func anim_x_cb(var_ c.Pointer, v int32) { + obj := (*core.LvObjT)(var_) + core.LvObjSetX(obj, c.Int32T(v)) +} + +func sw_event_cb(e *core.LvEventT) { + log.Println("sw_event_cb") + sw := (*core.LvObjT)(core.LvEventGetTarget(e)) + label := (*core.LvObjT)(core.LvEventGetUserData(e)) + + if core.LvObjHasState(sw, (core.LvStateT)(core.LV_STATE_CHECKED)) { + a := core.LvAnimT{} + core.LvAnimInit(&a) + core.LvAnimSetVar(&a, label) + core.LvAnimSetValues(&a, core.LvObjGetX(label), 100) + core.LvAnimSetDuration(&a, 500) + core.LvAnimSetExecCb(&a, anim_x_cb) + core.LvAnimSetPathCb(&a, core.LvAnimPathOvershoot) + core.LvAnimStart(&a) + } else { + a := core.LvAnimT{} + core.LvAnimInit(&a) + core.LvAnimSetVar(&a, label) + core.LvAnimSetValues(&a, core.LvObjGetX(label), -core.LvObjGetWidth(label)) + core.LvAnimSetDuration(&a, 500) + core.LvAnimSetExecCb(&a, anim_x_cb) + core.LvAnimSetPathCb(&a, core.LvAnimPathEaseIn) + core.LvAnimStart(&a) + } +} + +/** + * Start animation on an event + */ +func lv_example_anim_1() { + label := widgets.LvLabelCreate(display.LvScreenActive()) + widgets.LvLabelSetText(label, c.Str("Hello animations!")) + core.LvObjSetPos(label, 100, 10) + + sw := widgets.LvSwitchCreate(display.LvScreenActive()) + core.LvObjCenter(sw) + core.LvObjAddState(sw, core.LV_STATE_CHECKED) + core.LvObjAddEventCb(sw, sw_event_cb, core.LV_EVENT_VALUE_CHANGED, (c.Pointer)(label)) + +} diff --git a/lvgl/_demo/example/lv_example_get_started_2.go b/lvgl/_demo/example/lv_example_get_started_2.go new file mode 100644 index 00000000..2975ef79 --- /dev/null +++ b/lvgl/_demo/example/lv_example_get_started_2.go @@ -0,0 +1,43 @@ +package main + +import ( + "unsafe" + + "github.com/goplus/llgo/c" + "github.com/goplus/llpkg/lvgl/core" + "github.com/goplus/llpkg/lvgl/display" + "github.com/goplus/llpkg/lvgl/widgets" +) + +//var cnt uint8 = 0 + +func btn_event_cb(e *core.LvEventT) { + code := core.LvEventGetCode(e) + btn := core.LvEventGetTarget(e) + //fmt.Println("code", code) + if code == core.LV_EVENT_CLICKED { + + //cnt++ + /*Get the first child of the button which is the label and change its text*/ + label := core.LvObjGetChild((*core.LvObjT)(unsafe.Pointer(btn)), 0) + + // btnstr := fmt.Sprintf("Button: %d", cnt) + // c.Str(btnstr) + + widgets.LvLabelSetTextFmt(label, c.Str("test")) + } +} + +/** + * Create a button with a label and react on click event. + */ +func lv_example_get_started_2() { + btn := widgets.LvButtonCreate(display.LvScreenActive()) /*Add a button the current screen*/ + core.LvObjSetPos(btn, 10, 10) /*Set its position*/ + core.LvObjSetSize(btn, 120, 50) /*Set its size*/ + core.LvObjAddEventCb(btn, btn_event_cb, core.LV_EVENT_ALL, nil) /*Assign a callback to the button*/ + + label := widgets.LvLabelCreate(btn) /*Add a label to the button*/ + widgets.LvLabelSetText(label, c.Str("Button")) /*Set the labels text*/ + core.LvObjCenter(label) +} diff --git a/lvgl/_demo/example/lv_example_get_started_3.go b/lvgl/_demo/example/lv_example_get_started_3.go new file mode 100644 index 00000000..cc2e6792 --- /dev/null +++ b/lvgl/_demo/example/lv_example_get_started_3.go @@ -0,0 +1,84 @@ +package main + +import ( + "github.com/goplus/llgo/c" + "github.com/goplus/llpkg/lvgl/core" + "github.com/goplus/llpkg/lvgl/display" + "github.com/goplus/llpkg/lvgl/widgets" +) + +var styleBtn core.LvStyleT +var styleButtonPressed core.LvStyleT +var styleButtonRed core.LvStyleT + +func darken(dsc *core.LvColorFilterDscT, color core.LvColorT, opa core.LvOpaT) core.LvColorT { + // LV_UNUSED(dsc) in Go we just don't use the parameter + return core.LvColorDarken(color, opa) +} + +func styleInit() { + /*Create a simple button style*/ + core.LvStyleInit(&styleBtn) + core.LvStyleSetRadius(&styleBtn, 10) + core.LvStyleSetBgOpa(&styleBtn, core.LV_OPA_COVER) + core.LvStyleSetBgColor(&styleBtn, core.LvPaletteLighten(core.LV_PALETTE_GREY, c.Uint8T(3))) + core.LvStyleSetBgGradColor(&styleBtn, core.LvPaletteMain(core.LV_PALETTE_GREY)) + core.LvStyleSetBgGradDir(&styleBtn, core.LV_GRAD_DIR_VER) + + core.LvStyleSetBorderColor(&styleBtn, core.LvColorBlack()) + core.LvStyleSetBorderOpa(&styleBtn, core.LV_OPA_20) + core.LvStyleSetBorderWidth(&styleBtn, c.Int(2)) + + core.LvStyleSetTextColor(&styleBtn, core.LvColorBlack()) + + /*Create a style for the pressed state. + *Use a color filter to simply modify all colors in this state*/ + var colorFilter core.LvColorFilterDscT + core.LvColorFilterDscInit(&colorFilter, darken) + core.LvStyleInit(&styleButtonPressed) + core.LvStyleSetColorFilterDsc(&styleButtonPressed, &colorFilter) + core.LvStyleSetColorFilterOpa(&styleButtonPressed, core.LV_OPA_20) + + /*Create a red style. Change only some colors.*/ + core.LvStyleInit(&styleButtonRed) + core.LvStyleSetBgColor(&styleButtonRed, core.LvPaletteMain(core.LV_PALETTE_RED)) + core.LvStyleSetBgGradColor(&styleButtonRed, core.LvPaletteLighten(core.LV_PALETTE_RED, 3)) +} + +/** + * Create core from scratch for buttons. + */ +func lv_example_get_started_3() { + /*Initialize the style*/ + styleInit() + + /*Create a button and use the new core*/ + btn := widgets.LvButtonCreate(display.LvScreenActive()) + /* Remove the core coming from the theme + * Note that size and position are also stored as style properties + * so lv_obj_remove_style_all will remove the set size and position too */ + core.LvObjRemoveStyleAll(btn) + core.LvObjSetPos(btn, 10, 10) + core.LvObjSetSize(btn, 120, 50) + core.LvObjAddStyle(btn, &styleBtn, 0) + core.LvObjAddStyle(btn, &styleButtonPressed, core.LV_STATE_PRESSED) + + /*Add a label to the button*/ + label := widgets.LvLabelCreate(btn) + widgets.LvLabelSetText(label, c.Str("Button")) + core.LvObjCenter(label) + + /*Create another button and use the red style too*/ + btn2 := widgets.LvButtonCreate(display.LvScreenActive()) + core.LvObjRemoveStyleAll(btn2) /*Remove the core coming from the theme*/ + core.LvObjSetPos(btn2, 10, 80) + core.LvObjSetSize(btn2, 120, 50) + core.LvObjAddStyle(btn2, &styleBtn, 0) + core.LvObjAddStyle(btn2, &styleButtonRed, 0) + core.LvObjAddStyle(btn2, &styleButtonPressed, core.LV_STATE_PRESSED) + core.LvObjSetStyleRadius(btn2, c.Int32T(core.LV_RADIUS_CIRCLE), 0) /*Add a local style too*/ + + label = widgets.LvLabelCreate(btn2) + widgets.LvLabelSetText(label, c.Str("Button 2")) + core.LvObjCenter(label) +} diff --git a/lvgl/_demo/example/lv_example_get_started_4.go b/lvgl/_demo/example/lv_example_get_started_4.go new file mode 100644 index 00000000..01b3ae18 --- /dev/null +++ b/lvgl/_demo/example/lv_example_get_started_4.go @@ -0,0 +1,34 @@ +package main + +import ( + "github.com/goplus/llgo/c" + "github.com/goplus/llpkg/lvgl/core" + "github.com/goplus/llpkg/lvgl/display" + "github.com/goplus/llpkg/lvgl/widgets" +) + +var label *core.LvObjT + +func slider_event_cb(e *core.LvEventT) { + slider := core.LvEventGetTarget(e) + + /*Refresh the text*/ + widgets.LvLabelSetTextFmt(label, c.Str("%d"), widgets.LvSliderGetValue((*core.LvObjT)(slider))) + core.LvObjAlignTo(label, (*core.LvObjT)(slider), core.LV_ALIGN_OUT_TOP_MID, 0, -15) /*Align top of the slider*/ +} + +/** + * Create a slider and write its value on a label. + */ +func lv_example_get_started_4() { + /*Create a slider in the center of the display*/ + slider := widgets.LvSliderCreate(display.LvScreenActive()) + core.LvObjSetWidth(slider, 200) /*Set the width*/ + core.LvObjCenter(slider) /*Align to the center of the parent (screen)*/ + core.LvObjAddEventCb(slider, slider_event_cb, core.LV_EVENT_VALUE_CHANGED, nil) /*Assign an event function*/ + + /*Create a label above the slider*/ + label = widgets.LvLabelCreate(display.LvScreenActive()) + widgets.LvLabelSetText(label, c.Str("0")) + core.LvObjAlignTo(label, slider, core.LV_ALIGN_OUT_TOP_MID, 0, -15) /*Align top of the slider*/ +} diff --git a/lvgl/_demo/example/lv_example_style_1.go b/lvgl/_demo/example/lv_example_style_1.go new file mode 100644 index 00000000..e6ef6bca --- /dev/null +++ b/lvgl/_demo/example/lv_example_style_1.go @@ -0,0 +1,31 @@ +package main + +import ( + "github.com/goplus/llgo/c" + "github.com/goplus/llpkg/lvgl/core" + "github.com/goplus/llpkg/lvgl/display" + "github.com/goplus/llpkg/lvgl/widgets" +) + +func lv_example_style_1() { + style := core.LvStyleT{} + core.LvStyleInit(&style) + core.LvStyleSetRadius(&style, 5) + + /*Make a gradient*/ + core.LvStyleSetWidth(&style, 150) + core.LvStyleSetHeight(&style, core.LV_SIZE_CONTENT) + + core.LvStyleSetPadVer(&style, 20) + core.LvStyleSetPadLeft(&style, 5) + + core.LvStyleSetX(&style, c.Int(core.LvPct(c.Int32T(50)))) + core.LvStyleSetY(&style, c.Int(80)) + + /*Create an object with the new style*/ + obj := core.LvObjCreate(display.LvScreenActive()) + core.LvObjAddStyle(obj, &style, 0) + + label := widgets.LvLabelCreate(obj) + widgets.LvLabelSetText(label, c.Str("Hello")) +} diff --git a/lvgl/_demo/example/lv_example_style_2.go b/lvgl/_demo/example/lv_example_style_2.go new file mode 100644 index 00000000..67186e47 --- /dev/null +++ b/lvgl/_demo/example/lv_example_style_2.go @@ -0,0 +1,38 @@ +package main + +import ( + "github.com/goplus/llpkg/lvgl/core" + "github.com/goplus/llpkg/lvgl/display" +) + +func lv_example_style_2() { + var style core.LvStyleT + core.LvStyleInit(&style) + core.LvStyleSetRadius(&style, 5) + + /*Make a gradient*/ + core.LvStyleSetBgOpa(&style, core.LV_OPA_COVER) + var grad core.LvGradDscT + // 设置渐变方向 + grad.SetDir(core.LV_GRAD_DIR_VER) + + // 设置渐变停止点数量 + grad.StopsCount = 2 + + // 设置第一个渐变停止点 + grad.Stops[0].Color = core.LvPaletteLighten(core.LV_PALETTE_GREY, 1) + grad.Stops[0].Opa = core.LV_OPA_COVER + grad.Stops[0].Frac = 128 // 移动渐变到下方 + + // 设置第二个渐变停止点 + grad.Stops[1].Color = core.LvPaletteMain(core.LV_PALETTE_BLUE) + grad.Stops[1].Opa = core.LV_OPA_COVER + grad.Stops[1].Frac = 192 // 移动渐变到下方 + + core.LvStyleSetBgGrad(&style, &grad) + + /*Create an object with the new style*/ + obj := core.LvObjCreate(display.LvScreenActive()) + core.LvObjAddStyle(obj, &style, 0) + core.LvObjCenter(obj) +} diff --git a/lvgl/_demo/example/lv_example_style_3.go b/lvgl/_demo/example/lv_example_style_3.go new file mode 100644 index 00000000..29c5c876 --- /dev/null +++ b/lvgl/_demo/example/lv_example_style_3.go @@ -0,0 +1,27 @@ +package main + +import ( + "github.com/goplus/llpkg/lvgl/core" + "github.com/goplus/llpkg/lvgl/display" +) + +func lv_example_style_3() { + var style core.LvStyleT + core.LvStyleInit(&style) + + /*Set a background color and a radius*/ + core.LvStyleSetRadius(&style, 10) + core.LvStyleSetBgOpa(&style, core.LV_OPA_COVER) + core.LvStyleSetBgColor(&style, core.LvPaletteLighten(core.LV_PALETTE_GREY, 1)) + + /*Add border to the bottom+right*/ + core.LvStyleSetBorderColor(&style, core.LvPaletteMain(core.LV_PALETTE_BLUE)) + core.LvStyleSetBorderWidth(&style, 5) + core.LvStyleSetBorderOpa(&style, core.LV_OPA_50) + core.LvStyleSetBorderSide(&style, core.LV_BORDER_SIDE_BOTTOM|core.LV_BORDER_SIDE_RIGHT) + + /*Create an object with the new style*/ + obj := core.LvObjCreate(display.LvScreenActive()) + core.LvObjAddStyle(obj, &style, 0) + core.LvObjCenter(obj) +} diff --git a/lvgl/_demo/example/lv_example_style_4.go b/lvgl/_demo/example/lv_example_style_4.go new file mode 100644 index 00000000..5091517c --- /dev/null +++ b/lvgl/_demo/example/lv_example_style_4.go @@ -0,0 +1,26 @@ +package main + +import ( + "github.com/goplus/llpkg/lvgl/core" + "github.com/goplus/llpkg/lvgl/display" +) + +func lv_example_style_4() { + var style core.LvStyleT + core.LvStyleInit(&style) + + /*Set a background color and a radius*/ + core.LvStyleSetRadius(&style, 5) + core.LvStyleSetBgOpa(&style, core.LV_OPA_COVER) + core.LvStyleSetBgColor(&style, core.LvPaletteLighten(core.LV_PALETTE_GREY, 1)) + + /*Add outline*/ + core.LvStyleSetOutlineWidth(&style, 2) + core.LvStyleSetOutlineColor(&style, core.LvPaletteMain(core.LV_PALETTE_BLUE)) + core.LvStyleSetOutlinePad(&style, 8) + + /*Create an object with the new style*/ + obj := core.LvObjCreate(display.LvScreenActive()) + core.LvObjAddStyle(obj, &style, 0) + core.LvObjCenter(obj) +} diff --git a/lvgl/_demo/example/lv_example_style_5.go b/lvgl/_demo/example/lv_example_style_5.go new file mode 100644 index 00000000..30aa8d47 --- /dev/null +++ b/lvgl/_demo/example/lv_example_style_5.go @@ -0,0 +1,25 @@ +package main + +import ( + "github.com/goplus/llpkg/lvgl/core" + "github.com/goplus/llpkg/lvgl/display" +) + +func lv_example_style_5() { + var style core.LvStyleT + core.LvStyleInit(&style) + + /*Set a background color and a radius*/ + core.LvStyleSetRadius(&style, 5) + core.LvStyleSetBgOpa(&style, core.LV_OPA_COVER) + core.LvStyleSetBgColor(&style, core.LvPaletteLighten(core.LV_PALETTE_GREY, 1)) + + /*Add a shadow*/ + core.LvStyleSetShadowWidth(&style, 55) + core.LvStyleSetShadowColor(&style, core.LvPaletteMain(core.LV_PALETTE_BLUE)) + + /*Create an object with the new style*/ + obj := core.LvObjCreate(display.LvScreenActive()) + core.LvObjAddStyle(obj, &style, 0) + core.LvObjCenter(obj) +} diff --git a/lvgl/_demo/example/lv_example_style_6.go b/lvgl/_demo/example/lv_example_style_6.go new file mode 100644 index 00000000..f799fd33 --- /dev/null +++ b/lvgl/_demo/example/lv_example_style_6.go @@ -0,0 +1,39 @@ +package main + +import ( + "log" + "unsafe" + + "github.com/goplus/llgo/c" + "github.com/goplus/llpkg/lvgl/core" + "github.com/goplus/llpkg/lvgl/display" + "github.com/goplus/llpkg/lvgl/widgets" + + "github.com/goplus/llpkg/lvgl/_demo/example/assert" +) + +func lv_example_style_6() { + var style core.LvStyleT + core.LvStyleInit(&style) + + /*Set a background color and a radius*/ + core.LvStyleSetRadius(&style, 5) + core.LvStyleSetBgOpa(&style, core.LV_OPA_COVER) + core.LvStyleSetBgColor(&style, core.LvPaletteLighten(core.LV_PALETTE_GREY, 3)) + core.LvStyleSetBorderWidth(&style, 2) + core.LvStyleSetBorderColor(&style, core.LvPaletteMain(core.LV_PALETTE_BLUE)) + + core.LvStyleSetImageRecolor(&style, core.LvPaletteMain(core.LV_PALETTE_BLUE)) + core.LvStyleSetImageRecolorOpa(&style, core.LV_OPA_50) + core.LvStyleSetTransformRotation(&style, 300) + + /*Create an object with the new style*/ + obj := widgets.LvImageCreate(display.LvScreenActive()) + core.LvObjAddStyle(obj, &style, 0) + + img := assert.ImgCogwheelARGB + log.Println(img) + widgets.LvImageSetSrc(obj, (*c.Void)(unsafe.Pointer(&img))) + + core.LvObjCenter(obj) +} diff --git a/lvgl/_demo/example/readme.md b/lvgl/_demo/example/readme.md new file mode 100644 index 00000000..5731e96b --- /dev/null +++ b/lvgl/_demo/example/readme.md @@ -0,0 +1,2 @@ +export PKG_CONFIG_PATH=$PKG_CONFIG_PATH:/Users/sunqirui/github/ros/qiniu/llpkg/lvgl/ext/lib/lvgl/share/pkgconfig:/opt/homebrew/Cellar/sdl2/2.32.2/lib/pkgconfig +llgo run . \ No newline at end of file diff --git a/lvgl/core/_warp/obj_style_gen.c b/lvgl/core/_warp/obj_style_gen.c new file mode 100644 index 00000000..e92b6146 --- /dev/null +++ b/lvgl/core/_warp/obj_style_gen.c @@ -0,0 +1,3 @@ +#include "src/core/lv_obj_style_gen.h" + + diff --git a/lvgl/core/_warp/style.c b/lvgl/core/_warp/style.c new file mode 100644 index 00000000..733a9428 --- /dev/null +++ b/lvgl/core/_warp/style.c @@ -0,0 +1,46 @@ +#include "src/misc/lv_style.h" + +void lv_style_set_size_inline(lv_style_t * style, int32_t width, int32_t height) +{ + lv_style_set_size(style, width, height); +} + +void lv_style_set_pad_all_inline(lv_style_t * style, int32_t value) +{ + lv_style_set_pad_all(style, value); +} + +void lv_style_set_pad_hor_inline(lv_style_t * style, int32_t value) +{ + lv_style_set_pad_hor(style, value);\ +} + +void lv_style_set_pad_ver_inline(lv_style_t * style, int32_t value) +{ + lv_style_set_pad_ver(style, value); +} + +void lv_style_set_pad_gap_inline(lv_style_t * style, int32_t value) +{ + lv_style_set_pad_gap(style, value); +} + +void lv_style_set_margin_hor_inline(lv_style_t * style, int32_t value) +{ + lv_style_set_margin_hor(style, value); +} + +void lv_style_set_margin_ver_inline(lv_style_t * style, int32_t value) +{ + lv_style_set_margin_ver(style, value); +} + +void lv_style_set_margin_all_inline(lv_style_t * style, int32_t value) +{ + lv_style_set_margin_all(style, value); +} + +void lv_style_set_transform_scale_inline(lv_style_t * style, int32_t value) +{ + lv_style_set_transform_scale(style, value); +} diff --git a/lvgl/core/lv_anim.go b/lvgl/core/lv_anim.go new file mode 100644 index 00000000..5870d419 --- /dev/null +++ b/lvgl/core/lv_anim.go @@ -0,0 +1,227 @@ +/** + * @file lv_anim.h + * + */ + +package core + +import ( + _ "unsafe" + + "github.com/goplus/llgo/c" +) + +const ( + LV_ANIM_REPEAT_INFINITE = 0xFFFFFFFF + LV_ANIM_PLAYTIME_INFINITE = 0xFFFFFFFF + LV_ANIM_PAUSE_FOREVER = 0xFFFFFFFF +) + +const ( + LV_ANIM_OFF = false + LV_ANIM_ON = true +) + +// Get the current value during an animation +// typedef int32_t (*lv_anim_path_cb_t)(const lv_anim_t *); +// +//llgo:type C +type LvAnimPathCbT func(*LvAnimT) int32 + +/** Generic prototype of "animator" functions. + * First parameter is the variable to animate. + * Second parameter is the value to set. + * Compatible with `lv_xxx_set_yyy(obj, value)` functions + * The `x` in `_xcb_t` means it's not a fully generic prototype because + * it doesn't receive `lv_anim_t *` as its first argument*/ +//typedef int32_t (*lv_anim_path_cb_t)(const lv_anim_t *); +//llgo:type C +type LvAnimExecXcbT func(c.Pointer, int32) + +/** Same as `lv_anim_exec_xcb_t` but receives `lv_anim_t *` as the first parameter. + * It's more consistent but less convenient. Might be used by binding generator functions.*/ +//typedef void (*lv_anim_custom_exec_cb_t)(lv_anim_t *, int32_t); +//llgo:type C +type LvAnimCustomExecCbT func(*LvAnimT, int32) + +/** Callback to call when the animation is ready*/ +//typedef void (*lv_anim_completed_cb_t)(lv_anim_t *); +//llgo:type C +type LvAnimCompletedCbT func(*LvAnimT) + +/** Callback to call when the animation really stars (considering `delay`)*/ +//typedef void (*lv_anim_start_cb_t)(lv_anim_t *); +//llgo:type C +type LvAnimStartCbT func(*LvAnimT) + +/** Callback used when the animation values are relative to get the current value*/ +//typedef int32_t (*lv_anim_get_value_cb_t)(lv_anim_t *); +//llgo:type C +type LvAnimGetValueCbT func(*LvAnimT) int32 + +/** Callback used when the animation is deleted*/ +//typedef void (*lv_anim_deleted_cb_t)(lv_anim_t *); +//llgo:type C +type LvAnimDeletedCbT func(*LvAnimT) + +/** Parameter used when path is custom_bezier */ +type LvAnimBezier3ParaT struct { + X1 c.Uint16T + Y1 c.Uint16T + X2 c.Uint16T + Y2 c.Uint16T +} + +type LvAnimT struct { + Unused [0]byte +} + +//go:linkname LvAnimInit C.lv_anim_init +func LvAnimInit(a *LvAnimT) + +//go:linkname LvAnimSetVar C.lv_anim_set_var +func LvAnimSetVar(a *LvAnimT, var_ interface{}) + +//go:linkname LvAnimSetExecCb C.lv_anim_set_exec_cb +func LvAnimSetExecCb(a *LvAnimT, exec_cb LvAnimExecXcbT) + +//go:linkname LvAnimSetDuration C.lv_anim_set_duration +func LvAnimSetDuration(a *LvAnimT, duration uint32) + +//go:linkname LvAnimSetDelay C.lv_anim_set_delay +func LvAnimSetDelay(a *LvAnimT, delay uint32) + +//go:linkname LvAnimResume C.lv_anim_resume +func LvAnimResume(a *LvAnimT) + +//go:linkname LvAnimPause C.lv_anim_pause +func LvAnimPause(a *LvAnimT) + +//go:linkname LvAnimPauseFor C.lv_anim_pause_for +func LvAnimPauseFor(a *LvAnimT, ms uint32) + +//go:linkname LvAnimIsPaused C.lv_anim_is_paused +func LvAnimIsPaused(a *LvAnimT) bool + +//go:linkname LvAnimSetValues C.lv_anim_set_values +func LvAnimSetValues(a *LvAnimT, start, end int32) + +//go:linkname LvAnimSetCustomExecCb C.lv_anim_set_custom_exec_cb +func LvAnimSetCustomExecCb(a *LvAnimT, exec_cb LvAnimCustomExecCbT) + +//go:linkname LvAnimSetPathCb C.lv_anim_set_path_cb +func LvAnimSetPathCb(a *LvAnimT, path_cb LvAnimPathCbT) + +//go:linkname LvAnimSetStartCb C.lv_anim_set_start_cb +func LvAnimSetStartCb(a *LvAnimT, start_cb LvAnimStartCbT) + +//go:linkname LvAnimSetGetValueCb C.lv_anim_set_get_value_cb +func LvAnimSetGetValueCb(a *LvAnimT, get_value_cb LvAnimGetValueCbT) + +//go:linkname LvAnimSetCompletedCb C.lv_anim_set_completed_cb +func LvAnimSetCompletedCb(a *LvAnimT, completed_cb LvAnimCompletedCbT) + +//go:linkname LvAnimSetDeletedCb C.lv_anim_set_deleted_cb +func LvAnimSetDeletedCb(a *LvAnimT, deleted_cb LvAnimDeletedCbT) + +//go:linkname LvAnimSetReverseDuration C.lv_anim_set_reverse_duration +func LvAnimSetReverseDuration(a *LvAnimT, duration uint32) + +//go:linkname LvAnimSetReverseTime C.lv_anim_set_reverse_time +func LvAnimSetReverseTime(a *LvAnimT, duration uint32) + +//go:linkname LvAnimSetReverseDelay C.lv_anim_set_reverse_delay +func LvAnimSetReverseDelay(a *LvAnimT, delay uint32) + +//go:linkname LvAnimSetRepeatCount C.lv_anim_set_repeat_count +func LvAnimSetRepeatCount(a *LvAnimT, cnt uint32) + +//go:linkname LvAnimSetRepeatDelay C.lv_anim_set_repeat_delay +func LvAnimSetRepeatDelay(a *LvAnimT, delay uint32) + +//go:linkname LvAnimSetEarlyApply C.lv_anim_set_early_apply +func LvAnimSetEarlyApply(a *LvAnimT, en bool) + +//go:linkname LvAnimSetUserData C.lv_anim_set_user_data +func LvAnimSetUserData(a *LvAnimT, user_data interface{}) + +//go:linkname LvAnimSetBezier3Param C.lv_anim_set_bezier3_param +func LvAnimSetBezier3Param(a *LvAnimT, x1, y1, x2, y2 int16) + +//go:linkname LvAnimStart C.lv_anim_start +func LvAnimStart(a *LvAnimT) *LvAnimT + +//go:linkname LvAnimGetDelay C.lv_anim_get_delay +func LvAnimGetDelay(a *LvAnimT) uint32 + +//go:linkname LvAnimGetPlaytime C.lv_anim_get_playtime +func LvAnimGetPlaytime(a *LvAnimT) uint32 + +//go:linkname LvAnimGetTime C.lv_anim_get_time +func LvAnimGetTime(a *LvAnimT) uint32 + +//go:linkname LvAnimGetRepeatCount C.lv_anim_get_repeat_count +func LvAnimGetRepeatCount(a *LvAnimT) uint32 + +//go:linkname LvAnimGetUserData C.lv_anim_get_user_data +func LvAnimGetUserData(a *LvAnimT) interface{} + +//go:linkname LvAnimDelete C.lv_anim_delete +func LvAnimDelete(var_ interface{}, exec_cb LvAnimExecXcbT) bool + +//go:linkname LvAnimDeleteAll C.lv_anim_delete_all +func LvAnimDeleteAll() + +//go:linkname LvAnimGet C.lv_anim_get +func LvAnimGet(var_ interface{}, exec_cb LvAnimExecXcbT) *LvAnimT + +//go:linkname LvAnimGetTimer C.lv_anim_get_timer +func LvAnimGetTimer() *LvTimerT + +//go:linkname LvAnimCustomDelete C.lv_anim_custom_delete +func LvAnimCustomDelete(a *LvAnimT, exec_cb LvAnimCustomExecCbT) bool + +//go:linkname LvAnimCustomGet C.lv_anim_custom_get +func LvAnimCustomGet(a *LvAnimT, exec_cb LvAnimCustomExecCbT) *LvAnimT + +//go:linkname LvAnimCountRunning C.lv_anim_count_running +func LvAnimCountRunning() uint16 + +//go:linkname LvAnimSpeed C.lv_anim_speed +func LvAnimSpeed(speed uint32) uint32 + +//go:linkname LvAnimSpeedClamped C.lv_anim_speed_clamped +func LvAnimSpeedClamped(speed, min_time, max_time uint32) uint32 + +//go:linkname LvAnimResolveSpeed C.lv_anim_resolve_speed +func LvAnimResolveSpeed(speed uint32, start, end int32) uint32 + +//go:linkname LvAnimSpeedToTime C.lv_anim_speed_to_time +func LvAnimSpeedToTime(speed uint32, start, end int32) uint32 + +//go:linkname LvAnimRefrNow C.lv_anim_refr_now +func LvAnimRefrNow() + +//go:linkname LvAnimPathLinear C.lv_anim_path_linear +func LvAnimPathLinear(a *LvAnimT) int32 + +//go:linkname LvAnimPathEaseIn C.lv_anim_path_ease_in +func LvAnimPathEaseIn(a *LvAnimT) int32 + +//go:linkname LvAnimPathEaseOut C.lv_anim_path_ease_out +func LvAnimPathEaseOut(a *LvAnimT) int32 + +//go:linkname LvAnimPathEaseInOut C.lv_anim_path_ease_in_out +func LvAnimPathEaseInOut(a *LvAnimT) int32 + +//go:linkname LvAnimPathOvershoot C.lv_anim_path_overshoot +func LvAnimPathOvershoot(a *LvAnimT) int32 + +//go:linkname LvAnimPathBounce C.lv_anim_path_bounce +func LvAnimPathBounce(a *LvAnimT) int32 + +//go:linkname LvAnimPathStep C.lv_anim_path_step +func LvAnimPathStep(a *LvAnimT) int32 + +//go:linkname LvAnimPathCustomBezier3 C.lv_anim_path_custom_bezier3 +func LvAnimPathCustomBezier3(a *LvAnimT) int32 diff --git a/lvgl/core/lv_area.go b/lvgl/core/lv_area.go new file mode 100644 index 00000000..8f078e6e --- /dev/null +++ b/lvgl/core/lv_area.go @@ -0,0 +1,78 @@ +package core + +import ( + _ "unsafe" + + "github.com/goplus/llgo/c" +) + +// Special coordinate constants +const ( + LV_COORD_TYPE_SHIFT = 29 + LV_COORD_TYPE_MASK = 3 << LV_COORD_TYPE_SHIFT + LV_COORD_TYPE_PX = 0 << LV_COORD_TYPE_SHIFT + LV_COORD_TYPE_SPEC = 1 << LV_COORD_TYPE_SHIFT + LV_COORD_TYPE_PX_NEG = 3 << LV_COORD_TYPE_SHIFT + LV_COORD_MAX = (1 << LV_COORD_TYPE_SHIFT) - 1 + LV_COORD_MIN = -LV_COORD_MAX + LV_SIZE_CONTENT = LV_COORD_TYPE_SPEC | LV_COORD_MAX + LV_PCT_STORED_MAX = LV_COORD_MAX - 1 + LV_PCT_POS_MAX = LV_PCT_STORED_MAX / 2 +) + +//go:linkname LvAreaSet C.lv_area_set +func LvAreaSet(areaP *LvAreaT, x1 c.Int32T, y1 c.Int32T, x2 c.Int32T, y2 c.Int32T) + +//go:linkname LvAreaGetWidth C.lv_area_get_width +func LvAreaGetWidth(areaP *LvAreaT) c.Int32T + +//go:linkname LvAreaGetHeight C.lv_area_get_height +func LvAreaGetHeight(areaP *LvAreaT) c.Int32T + +//go:linkname LvAreaSetWidth C.lv_area_set_width +func LvAreaSetWidth(areaP *LvAreaT, w c.Int32T) + +//go:linkname LvAreaSetHeight C.lv_area_set_height +func LvAreaSetHeight(areaP *LvAreaT, h c.Int32T) + +//go:linkname LvAreaGetSize C.lv_area_get_size +func LvAreaGetSize(areaP *LvAreaT) c.Uint32T + +//go:linkname LvAreaIncrease C.lv_area_increase +func LvAreaIncrease(area *LvAreaT, wExtra c.Int32T, hExtra c.Int32T) + +//go:linkname LvAreaMove C.lv_area_move +func LvAreaMove(area *LvAreaT, xOfs c.Int32T, yOfs c.Int32T) + +//go:linkname LvAreaAlign C.lv_area_align +func LvAreaAlign(base *LvAreaT, toAlign *LvAreaT, align LvAlignT, ofsX c.Int32T, ofsY c.Int32T) + +//go:linkname LvPointTransform C.lv_point_transform +func LvPointTransform(point *LvPointT, angle c.Int32T, scaleX c.Int32T, scaleY c.Int32T, pivot *LvPointT, zoomFirst bool) + +//go:linkname LvPointArrayTransform C.lv_point_array_transform +func LvPointArrayTransform(points *LvPointT, count c.SizeT, angle c.Int32T, scaleX c.Int32T, scaleY c.Int32T, pivot *LvPointT, zoomFirst bool) + +//go:linkname LvPointFromPrecise C.lv_point_from_precise +func LvPointFromPrecise(p *LvPointPreciseT) LvPointT + +//go:linkname LvPointToPrecise C.lv_point_to_precise +func LvPointToPrecise(p *LvPointT) LvPointPreciseT + +//go:linkname LvPointSet C.lv_point_set +func LvPointSet(p *LvPointT, x c.Int32T, y c.Int32T) + +//go:linkname LvPointPreciseSet C.lv_point_precise_set +func LvPointPreciseSet(p *LvPointPreciseT, x LvValuePreciseT, y LvValuePreciseT) + +//go:linkname LvPointSwap C.lv_point_swap +func LvPointSwap(p1 *LvPointT, p2 *LvPointT) + +//go:linkname LvPointPreciseSwap C.lv_point_precise_swap +func LvPointPreciseSwap(p1 *LvPointPreciseT, p2 *LvPointPreciseT) + +//go:linkname LvPct C.lv_pct +func LvPct(x c.Int32T) c.Int32T + +//go:linkname LvPctToPx C.lv_pct_to_px +func LvPctToPx(v c.Int32T, base c.Int32T) c.Int32T diff --git a/lvgl/core/lv_color.go b/lvgl/core/lv_color.go new file mode 100644 index 00000000..c9f0e691 --- /dev/null +++ b/lvgl/core/lv_color.go @@ -0,0 +1,237 @@ +package core + +import ( + _ "unsafe" + + "github.com/goplus/llgo/c" +) + +/********************** + * GLOBAL PROTOTYPES + **********************/ + +/** + * Get the pixel size of a color format in bits, bpp + * @param cf a color format (`LV_COLOR_FORMAT_...`) + * @return the pixel size in bits + * @sa LV_COLOR_FORMAT_GET_BPP + */ +//go:linkname LvColorFormatGetBpp C.lv_color_format_get_bpp +func LvColorFormatGetBpp(cf LvColorFormatT) c.Uint8T + +/** + * Get the pixel size of a color format in bytes + * @param cf a color format (`LV_COLOR_FORMAT_...`) + * @return the pixel size in bytes + * @sa LV_COLOR_FORMAT_GET_SIZE + */ +//go:linkname LvColorFormatGetSize C.lv_color_format_get_size +func LvColorFormatGetSize(cf LvColorFormatT) c.Uint8T + +/** + * Check if a color format has alpha channel or not + * @param src_cf a color format (`LV_COLOR_FORMAT_...`) + * @return true: has alpha channel; false: doesn't have alpha channel + */ +//go:linkname LvColorFormatHasAlpha C.lv_color_format_has_alpha +func LvColorFormatHasAlpha(srcCf LvColorFormatT) c.Char + +/** + * Create an ARGB8888 color from RGB888 + alpha + * @param color an RGB888 color + * @param opa the alpha value + * @return the ARGB8888 color + */ +//go:linkname LvColorTo32 C.lv_color_to_32 +func LvColorTo32(color LvColorT, opa LvOpaT) LvColor32T + +/** + * Convert an RGB888 color to an integer + * @param c an RGB888 color + * @return `c` as an integer + */ +//go:linkname LvColorToInt C.lv_color_to_int +func LvColorToInt(c LvColorT) c.Uint32T + +/** + * Check if two RGB888 color are equal + * @param c1 the first color + * @param c2 the second color + * @return true: equal + */ +//go:linkname LvColorEq C.lv_color_eq +func LvColorEq(c1 LvColorT, c2 LvColorT) c.Char + +/** + * Check if two ARGB8888 color are equal + * @param c1 the first color + * @param c2 the second color + * @return true: equal + */ +//go:linkname LvColor32Eq C.lv_color32_eq +func LvColor32Eq(c1 LvColor32T, c2 LvColor32T) c.Char + +/** + * Create a color from 0x000000..0xffffff input + * @param c the hex input + * @return the color + */ +//go:linkname LvColorHex C.lv_color_hex +func LvColorHex(c c.Uint32T) LvColorT + +/** + * Create an RGB888 color + * @param r the red channel (0..255) + * @param g the green channel (0..255) + * @param b the blue channel (0..255) + * @return the color + */ +//go:linkname LvColorMake C.lv_color_make +func LvColorMake(r c.Uint8T, g c.Uint8T, b c.Uint8T) LvColorT + +/** + * Create an ARGB8888 color + * @param r the red channel (0..255) + * @param g the green channel (0..255) + * @param b the blue channel (0..255) + * @param a the alpha channel (0..255) + * @return the color + */ +//go:linkname LvColor32Make C.lv_color32_make +func LvColor32Make(r c.Uint8T, g c.Uint8T, b c.Uint8T, a c.Uint8T) LvColor32T + +/** + * Create a color from 0x000..0xfff input + * @param c the hex input (e.g. 0x123 will be 0x112233) + * @return the color + */ +//go:linkname LvColorHex3 C.lv_color_hex3 +func LvColorHex3(c c.Uint32T) LvColorT + +/** + * Convert am RGB888 color to RGB565 stored in `uint16_t` + * @param color and RGB888 color + * @return `color` as RGB565 on `uin16_t` + */ +//go:linkname LvColorToU16 C.lv_color_to_u16 +func LvColorToU16(color LvColorT) c.Uint16T + +/** + * Convert am RGB888 color to XRGB8888 stored in `uint32_t` + * @param color and RGB888 color + * @return `color` as XRGB8888 on `uin32_t` (the alpha channel is always set to 0xFF) + */ +//go:linkname LvColorToU32 C.lv_color_to_u32 +func LvColorToU32(color LvColorT) c.Uint32T + +/** + * Mix two RGB565 colors + * @param c1 the first color (typically the foreground color) + * @param c2 the second color (typically the background color) + * @param mix 0..255, or LV_OPA_0/10/20... + * @return mix == 0: c2 + * mix == 255: c1 + * mix == 128: 0.5 x c1 + 0.5 x c2 + */ +//go:linkname LvColor1616Mix C.lv_color_16_16_mix +func LvColor1616Mix(c1 c.Uint16T, c2 c.Uint16T, mix c.Uint8T) c.Uint16T + +/** + * Mix white to a color + * @param c the base color + * @param lvl the intensity of white (0: no change, 255: fully white) + * @return the mixed color + */ +//go:linkname LvColorLighten C.lv_color_lighten +func LvColorLighten(c LvColorT, lvl LvOpaT) LvColorT + +/** + * Mix black to a color + * @param c the base color + * @param lvl the intensity of black (0: no change, 255: fully black) + * @return the mixed color + */ +//go:linkname LvColorDarken C.lv_color_darken +func LvColorDarken(c LvColorT, lvl LvOpaT) LvColorT + +/** + * Convert a HSV color to RGB + * @param h hue [0..359] + * @param s saturation [0..100] + * @param v value [0..100] + * @return the given RGB color in RGB (with LV_COLOR_DEPTH depth) + */ +//go:linkname LvColorHsvToRgb C.lv_color_hsv_to_rgb +func LvColorHsvToRgb(h c.Uint16T, s c.Uint8T, v c.Uint8T) LvColorT + +/** + * Convert a 32-bit RGB color to HSV + * @param r8 8-bit red + * @param g8 8-bit green + * @param b8 8-bit blue + * @return the given RGB color in HSV + */ +//go:linkname LvColorRgbToHsv C.lv_color_rgb_to_hsv +func LvColorRgbToHsv(r8 c.Uint8T, g8 c.Uint8T, b8 c.Uint8T) LvColorHsvT + +/** + * Convert a color to HSV + * @param color color + * @return the given color in HSV + */ +//go:linkname LvColorToHsv C.lv_color_to_hsv +func LvColorToHsv(color LvColorT) LvColorHsvT + +/*Source: https://vuetifyjs.com/en/styles/colors/#material-colors*/ + +/** + * A helper for white color + * @return a white color + */ +//go:linkname LvColorWhite C.lv_color_white +func LvColorWhite() LvColorT + +/** + * A helper for black color + * @return a black color + */ +//go:linkname LvColorBlack C.lv_color_black +func LvColorBlack() LvColorT + +//go:linkname LvColorPremultiply C.lv_color_premultiply +func LvColorPremultiply(c *LvColor32T) + +//go:linkname LvColor16Premultiply C.lv_color16_premultiply +func LvColor16Premultiply(c *LvColor16T, a LvOpaT) + +/** + * Get the luminance of a color: luminance = 0.3 R + 0.59 G + 0.11 B + * @param c a color + * @return the brightness [0..255] + */ +//go:linkname LvColorLuminance C.lv_color_luminance +func LvColorLuminance(c LvColorT) c.Uint8T + +/** + * Get the luminance of a color16: luminance = 0.3 R + 0.59 G + 0.11 B + * @param c a color + * @return the brightness [0..255] + */ +//go:linkname LvColor16Luminance C.lv_color16_luminance +func LvColor16Luminance(c LvColor16T) c.Uint8T + +/** + * Get the luminance of a color24: luminance = 0.3 R + 0.59 G + 0.11 B + * @param c a color + * @return the brightness [0..255] + */ +//go:linkname LvColor24Luminance C.lv_color24_luminance +func LvColor24Luminance(c *c.Uint8T) c.Uint8T + +/** + * Get the luminance of a color32: luminance = 0.3 R + 0.59 G + 0.11 B + * @param c a color + * @return the brightness [0..255] + */ +//go:linkname LvColor32Luminance C.lv_color32_luminance +func LvColor32Luminance(c LvColor32T) c.Uint8T diff --git a/lvgl/core/lv_color_op.go b/lvgl/core/lv_color_op.go new file mode 100644 index 00000000..eb992af9 --- /dev/null +++ b/lvgl/core/lv_color_op.go @@ -0,0 +1,46 @@ +package core + +import ( + _ "unsafe" + + "github.com/goplus/llgo/c" +) + +//llgo:type C +type LvColorFilterCbT func(dsc *LvColorFilterDscT, color LvColorT, opa LvOpaT) LvColorT + +/********************** + * GLOBAL PROTOTYPES + **********************/ + +/** + * Mix two colors with a given ratio. + * @param c1 the first color to mix (usually the foreground) + * @param c2 the second color to mix (usually the background) + * @param mix The ratio of the colors. 0: full `c2`, 255: full `c1`, 127: half `c1` and half`c2` + * @return the mixed color + */ +//go:linkname LvColorMix C.lv_color_mix +func LvColorMix(c1 LvColorT, c2 LvColorT, mix c.Uint8T) LvColorT + +/** + * + * @param fg + * @param bg + * @return + * @note Use bg.alpha in the return value + * @note Use fg.alpha as mix ratio + */ +//go:linkname LvColorMix32 C.lv_color_mix32 +func LvColorMix32(fg LvColorT, bg LvColorT) LvColorT + +/** + * Get the brightness of a color + * @param c a color + * @return brightness in range [0..255] + */ +//go:linkname LvColorBrightness C.lv_color_brightness +func LvColorBrightness(c LvColorT) c.Uint8T + +//go:linkname LvColorFilterDscInit C.lv_color_filter_dsc_init +func LvColorFilterDscInit(dsc *LvColorFilterDscT, cb LvColorFilterCbT) diff --git a/lvgl/core/lv_draw.go b/lvgl/core/lv_draw.go new file mode 100644 index 00000000..50bffbee --- /dev/null +++ b/lvgl/core/lv_draw.go @@ -0,0 +1,9 @@ +package core + +import ( + _ "unsafe" +) + +const ( + LV_DRAW_LABEL_NO_TXT_SEL = 0xFFFF +) diff --git a/lvgl/core/lv_event.go b/lvgl/core/lv_event.go new file mode 100644 index 00000000..83466e81 --- /dev/null +++ b/lvgl/core/lv_event.go @@ -0,0 +1,171 @@ +package core + +import ( + "unsafe" + _ "unsafe" + + "github.com/goplus/llgo/c" +) + +//go:type C +type LvEventT struct { + Unused [0]byte +} + +// Event codes +type LvEventCodeT uint32 + +const ( + LV_EVENT_ALL LvEventCodeT = 0 + + // Input device events + LV_EVENT_PRESSED LvEventCodeT = iota + 1 // Widget has been pressed + LV_EVENT_PRESSING // Widget is being pressed (sent continuously while pressing) + LV_EVENT_PRESS_LOST // Widget is still being pressed but slid cursor/finger off Widget + LV_EVENT_SHORT_CLICKED // Widget was pressed for a short period of time, then released. Not sent if scrolled. + LV_EVENT_SINGLE_CLICKED // Sent for first short click within a small distance and short time + LV_EVENT_DOUBLE_CLICKED // Sent for second short click within small distance and short time + LV_EVENT_TRIPLE_CLICKED // Sent for third short click within small distance and short time + LV_EVENT_LONG_PRESSED // Object has been pressed for at least `long_press_time`. Not sent if scrolled. + LV_EVENT_LONG_PRESSED_REPEAT // Sent after `long_press_time` in every `long_press_repeat_time` ms. Not sent if scrolled. + LV_EVENT_CLICKED // Sent on release if not scrolled (regardless to long press) + LV_EVENT_RELEASED // Sent in every cases when Widget has been released + LV_EVENT_SCROLL_BEGIN // Scrolling begins. The event parameter is a pointer to the animation of the scroll. Can be modified + LV_EVENT_SCROLL_THROW_BEGIN + LV_EVENT_SCROLL_END // Scrolling ends + LV_EVENT_SCROLL // Scrolling + LV_EVENT_GESTURE // A gesture is detected. Get gesture with `lv_indev_get_gesture_dir(lv_indev_active());` + LV_EVENT_KEY // A key is sent to Widget. Get key with `lv_indev_get_key(lv_indev_active());` + LV_EVENT_ROTARY // An encoder or wheel was rotated. Get rotation count with `lv_event_get_rotary_diff(e);` + LV_EVENT_FOCUSED // Widget received focus + LV_EVENT_DEFOCUSED // Widget's focus has been lost + LV_EVENT_LEAVE // Widget's focus has been lost but is still selected + LV_EVENT_HIT_TEST // Perform advanced hit-testing + LV_EVENT_INDEV_RESET + LV_EVENT_HOVER_OVER // Indev hover over object + LV_EVENT_HOVER_LEAVE // Indev hover leave object + + // Drawing events + LV_EVENT_COVER_CHECK // Check if Widget fully covers an area. The event parameter is `lv_cover_check_info_t *`. + LV_EVENT_REFR_EXT_DRAW_SIZE // Get required extra draw area around Widget (e.g. for shadow). The event parameter is `int32_t *` to store the size. + LV_EVENT_DRAW_MAIN_BEGIN // Starting the main drawing phase + LV_EVENT_DRAW_MAIN // Perform the main drawing + LV_EVENT_DRAW_MAIN_END // Finishing the main drawing phase + LV_EVENT_DRAW_POST_BEGIN // Starting the post draw phase (when all children are drawn) + LV_EVENT_DRAW_POST // Perform the post draw phase (when all children are drawn) + LV_EVENT_DRAW_POST_END // Finishing the post draw phase (when all children are drawn) + LV_EVENT_DRAW_TASK_ADDED // Adding a draw task + + // Special events + LV_EVENT_VALUE_CHANGED // Widget's value has changed (i.e. slider moved) + LV_EVENT_INSERT // Text has been inserted into Widget. The event data is `char *` being inserted. + LV_EVENT_REFRESH // Notify Widget to refresh something on it (for user) + LV_EVENT_READY // A process has finished + LV_EVENT_CANCEL // A process has been cancelled + + // Other events + LV_EVENT_CREATE // Object is being created + LV_EVENT_DELETE // Object is being deleted + LV_EVENT_CHILD_CHANGED // Child was removed, added, or its size, position were changed + LV_EVENT_CHILD_CREATED // Child was created, always bubbles up to all parents + LV_EVENT_CHILD_DELETED // Child was deleted, always bubbles up to all parents + LV_EVENT_SCREEN_UNLOAD_START // A screen unload started, fired immediately when scr_load is called + LV_EVENT_SCREEN_LOAD_START // A screen load started, fired when the screen change delay is expired + LV_EVENT_SCREEN_LOADED // A screen was loaded + LV_EVENT_SCREEN_UNLOADED // A screen was unloaded + LV_EVENT_SIZE_CHANGED // Object coordinates/size have changed + LV_EVENT_STYLE_CHANGED // Object's style has changed + LV_EVENT_LAYOUT_CHANGED // A child's position position has changed due to a layout recalculation + LV_EVENT_GET_SELF_SIZE // Get internal size of a widget + + // Events of optional LVGL components + LV_EVENT_INVALIDATE_AREA // An area is invalidated (marked for redraw) + LV_EVENT_RESOLUTION_CHANGED // Sent when the resolution changes due to `lv_display_set_resolution()` or `lv_display_set_rotation()`. + LV_EVENT_COLOR_FORMAT_CHANGED // Sent as a result of any call to `lv_display_set_color_format()`. + LV_EVENT_REFR_REQUEST // Sent when something happened that requires redraw. + LV_EVENT_REFR_START // Sent before a refreshing cycle starts. Sent even if there is nothing to redraw. + LV_EVENT_REFR_READY // Sent when refreshing has been completed (after rendering and calling flush callback). Sent even if no redraw happened. + LV_EVENT_RENDER_START // Sent just before rendering begins. + LV_EVENT_RENDER_READY // Sent after rendering has been completed (before calling flush callback) + LV_EVENT_FLUSH_START // Sent before flush callback is called. + LV_EVENT_FLUSH_FINISH // Sent after flush callback call has returned. + LV_EVENT_FLUSH_WAIT_START // Sent before flush wait callback is called. + LV_EVENT_FLUSH_WAIT_FINISH // Sent after flush wait callback call has returned. + + LV_EVENT_VSYNC + + LV_EVENT_LAST // Number of default events + + LV_EVENT_PREPROCESS LvEventCodeT = 0x8000 // This is a flag that can be set with an event so it's processed before the class default event processing + LV_EVENT_MARKED_DELETING LvEventCodeT = 0x10000 // True: the list has marked deleting objects when some of events are marked as deleting +) + +//go:type C +type LvEventDscT struct { + Unused [0]byte +} + +// llgo:type C +type LvEventListT struct { + Unused [0]byte +} + +// Event callback function type +// Function types for callbacks +// typedef void (*lv_event_cb_t)(lv_event_t * e); +// llgo:type C +type LvEventCbT func(e *LvEventT) + +//go:linkname LvEventSend C.lv_event_send +func LvEventSend(list *LvEventListT, e *LvEventT, preprocess bool) LvResultT + +//go:linkname LvEventAdd C.lv_event_add +func LvEventAdd(list *LvEventListT, cb LvEventCbT, filter LvEventCodeT, user_data *c.Void) *LvEventDscT + +//go:linkname LvEventRemoveDsc C.lv_event_remove_dsc +func LvEventRemoveDsc(list *LvEventListT, dsc *LvEventDscT) bool + +//go:linkname LvEventGetCount C.lv_event_get_count +func LvEventGetCount(list *LvEventListT) uint32 + +//go:linkname LvEventGetDsc C.lv_event_get_dsc +func LvEventGetDsc(list *LvEventListT, index uint32) *LvEventDscT + +//go:linkname LvEventDscGetCb C.lv_event_dsc_get_cb +func LvEventDscGetCb(dsc *LvEventDscT) LvEventCbT + +//go:linkname LvEventDscGetUserData C.lv_event_dsc_get_user_data +func LvEventDscGetUserData(dsc *LvEventDscT) unsafe.Pointer + +//go:linkname LvEventRemove C.lv_event_remove +func LvEventRemove(list *LvEventListT, index uint32) bool + +//go:linkname LvEventRemoveAll C.lv_event_remove_all +func LvEventRemoveAll(list *LvEventListT) + +//go:linkname LvEventGetTarget C.lv_event_get_target +func LvEventGetTarget(e *LvEventT) unsafe.Pointer + +//go:linkname LvEventGetCurrentTarget C.lv_event_get_current_target +func LvEventGetCurrentTarget(e *LvEventT) unsafe.Pointer + +//go:linkname LvEventGetCode C.lv_event_get_code +func LvEventGetCode(e *LvEventT) LvEventCodeT + +//go:linkname LvEventGetParam C.lv_event_get_param +func LvEventGetParam(e *LvEventT) unsafe.Pointer + +//go:linkname LvEventGetUserData C.lv_event_get_user_data +func LvEventGetUserData(e *LvEventT) unsafe.Pointer + +//go:linkname LvEventStopBubbling C.lv_event_stop_bubbling +func LvEventStopBubbling(e *LvEventT) + +//go:linkname LvEventStopProcessing C.lv_event_stop_processing +func LvEventStopProcessing(e *LvEventT) + +//go:linkname LvEventRegisterId C.lv_event_register_id +func LvEventRegisterId() uint32 + +//go:linkname LvEventCodeGetName C.lv_event_code_get_name +func LvEventCodeGetName(code LvEventCodeT) *c.Char diff --git a/lvgl/core/lv_obj.go b/lvgl/core/lv_obj.go new file mode 100644 index 00000000..bd9d4ea8 --- /dev/null +++ b/lvgl/core/lv_obj.go @@ -0,0 +1,155 @@ +package core + +import ( + "unsafe" + _ "unsafe" +) + +/** + * Possible states of a widget. + * OR-ed values are possible + */ +const ( + LV_STATE_DEFAULT = 0x0000 + LV_STATE_CHECKED = 0x0001 + LV_STATE_FOCUSED = 0x0002 + LV_STATE_FOCUS_KEY = 0x0004 + LV_STATE_EDITED = 0x0008 + LV_STATE_HOVERED = 0x0010 + LV_STATE_PRESSED = 0x0020 + LV_STATE_SCROLLED = 0x0040 + LV_STATE_DISABLED = 0x0080 + LV_STATE_USER_1 = 0x1000 + LV_STATE_USER_2 = 0x2000 + LV_STATE_USER_3 = 0x4000 + LV_STATE_USER_4 = 0x8000 + + LV_STATE_ANY = 0xFFFF /**< Special value can be used in some functions to target all states*/ +) + +/** + * The possible parts of widgets. + * The parts can be considered as the internal building block of the widgets. + * E.g. slider = background + indicator + knob + * Not all parts are used by every widget + */ + +const ( + LV_PART_MAIN = 0x000000 /**< A background like rectangle*/ + LV_PART_SCROLLBAR = 0x010000 /**< The scrollbar(s)*/ + LV_PART_INDICATOR = 0x020000 /**< Indicator, e.g. for slider, bar, switch, or the tick box of the checkbox*/ + LV_PART_KNOB = 0x030000 /**< Like handle to grab to adjust the value*/ + LV_PART_SELECTED = 0x040000 /**< Indicate the currently selected option or section*/ + LV_PART_ITEMS = 0x050000 /**< Used if the widget has multiple similar elements (e.g. table cells)*/ + LV_PART_CURSOR = 0x060000 /**< Mark a specific place e.g. for text area's cursor or on a chart*/ + + LV_PART_CUSTOM_FIRST = 0x080000 /**< Extension point for custom widgets*/ + + LV_PART_ANY = 0x0F0000 /**< Special value can be used in some functions to target all parts*/ +) + +/** + * On/Off features controlling the object's behavior. + * OR-ed values are possible + * + * Note: update obj flags corresponding properties below + * whenever add/remove flags or change bit definition of flags. + */ +type LvObjFlagT uint32 + +const ( + LV_OBJ_FLAG_HIDDEN LvObjFlagT = (1 << 0) /**< Make the object hidden. (Like it wasn't there at all)*/ + LV_OBJ_FLAG_CLICKABLE LvObjFlagT = (1 << 1) /**< Make the object clickable by the input devices*/ + LV_OBJ_FLAG_CLICK_FOCUSABLE LvObjFlagT = (1 << 2) /**< Add focused state to the object when clicked*/ + LV_OBJ_FLAG_CHECKABLE LvObjFlagT = (1 << 3) /**< Toggle checked state when the object is clicked*/ + LV_OBJ_FLAG_SCROLLABLE LvObjFlagT = (1 << 4) /**< Make the object scrollable*/ + LV_OBJ_FLAG_SCROLL_ELASTIC LvObjFlagT = (1 << 5) /**< Allow scrolling inside but with slower speed*/ + LV_OBJ_FLAG_SCROLL_MOMENTUM LvObjFlagT = (1 << 6) /**< Make the object scroll further when "thrown"*/ + LV_OBJ_FLAG_SCROLL_ONE LvObjFlagT = (1 << 7) /**< Allow scrolling only one snappable children*/ + LV_OBJ_FLAG_SCROLL_CHAIN_HOR LvObjFlagT = (1 << 8) /**< Allow propagating the horizontal scroll to a parent*/ + LV_OBJ_FLAG_SCROLL_CHAIN_VER LvObjFlagT = (1 << 9) /**< Allow propagating the vertical scroll to a parent*/ + LV_OBJ_FLAG_SCROLL_CHAIN LvObjFlagT = (LV_OBJ_FLAG_SCROLL_CHAIN_HOR | LV_OBJ_FLAG_SCROLL_CHAIN_VER) + LV_OBJ_FLAG_SCROLL_ON_FOCUS LvObjFlagT = (1 << 10) /**< Automatically scroll object to make it visible when focused*/ + LV_OBJ_FLAG_SCROLL_WITH_ARROW LvObjFlagT = (1 << 11) /**< Allow scrolling the focused object with arrow keys*/ + LV_OBJ_FLAG_SNAPPABLE LvObjFlagT = (1 << 12) /**< If scroll snap is enabled on the parent it can snap to this object*/ + LV_OBJ_FLAG_PRESS_LOCK LvObjFlagT = (1 << 13) /**< Keep the object pressed even if the press slid from the object*/ + LV_OBJ_FLAG_EVENT_BUBBLE LvObjFlagT = (1 << 14) /**< Propagate the events to the parent too*/ + LV_OBJ_FLAG_GESTURE_BUBBLE LvObjFlagT = (1 << 15) /**< Propagate the gestures to the parent*/ + LV_OBJ_FLAG_ADV_HITTEST LvObjFlagT = (1 << 16) /**< Allow performing more accurate hit (click) test. E.g. consider rounded corners.*/ + LV_OBJ_FLAG_IGNORE_LAYOUT LvObjFlagT = (1 << 17) /**< Make the object not positioned by the layouts*/ + LV_OBJ_FLAG_FLOATING LvObjFlagT = (1 << 18) /**< Do not scroll the object when the parent scrolls and ignore layout*/ + LV_OBJ_FLAG_SEND_DRAW_TASK_EVENTS LvObjFlagT = (1 << 19) /**< Send `LV_EVENT_DRAW_TASK_ADDED` events*/ + LV_OBJ_FLAG_OVERFLOW_VISIBLE LvObjFlagT = (1 << 20) /**< Do not clip the children to the parent's ext draw size*/ + + LV_OBJ_FLAG_FLEX_IN_NEW_TRACK LvObjFlagT = (1 << 21) /**< Start a new flex track on this item*/ + + LV_OBJ_FLAG_LAYOUT_1 LvObjFlagT = (1 << 23) /**< Custom flag, free to use by layouts*/ + LV_OBJ_FLAG_LAYOUT_2 LvObjFlagT = (1 << 24) /**< Custom flag, free to use by layouts*/ + + LV_OBJ_FLAG_WIDGET_1 LvObjFlagT = (1 << 25) /**< Custom flag, free to use by widget*/ + LV_OBJ_FLAG_WIDGET_2 LvObjFlagT = (1 << 26) /**< Custom flag, free to use by widget*/ + LV_OBJ_FLAG_USER_1 LvObjFlagT = (1 << 27) /**< Custom flag, free to use by user*/ + LV_OBJ_FLAG_USER_2 LvObjFlagT = (1 << 28) /**< Custom flag, free to use by user*/ + LV_OBJ_FLAG_USER_3 LvObjFlagT = (1 << 29) /**< Custom flag, free to use by user*/ + LV_OBJ_FLAG_USER_4 LvObjFlagT = (1 << 30) /**< Custom flag, free to use by user*/ +) + +//go:linkname LvObjCreate C.lv_obj_create +func LvObjCreate(parent *LvObjT) *LvObjT + +//go:linkname LvObjAddFlag C.lv_obj_add_flag +func LvObjAddFlag(obj *LvObjT, f LvObjFlagT) + +//go:linkname LvObjRemoveFlag C.lv_obj_remove_flag +func LvObjRemoveFlag(obj *LvObjT, f LvObjFlagT) + +//go:linkname LvObjUpdateFlag C.lv_obj_update_flag +func LvObjUpdateFlag(obj *LvObjT, f LvObjFlagT, v bool) + +//go:linkname LvObjAddState C.lv_obj_add_state +func LvObjAddState(obj *LvObjT, state LvStateT) + +//go:linkname LvObjRemoveState C.lv_obj_remove_state +func LvObjRemoveState(obj *LvObjT, state LvStateT) + +//go:linkname LvObjSetState C.lv_obj_set_state +func LvObjSetState(obj *LvObjT, state LvStateT, v bool) + +//go:linkname LvObjSetUserData C.lv_obj_set_user_data +func LvObjSetUserData(obj *LvObjT, user_data unsafe.Pointer) + +//go:linkname LvObjHasFlag C.lv_obj_has_flag +func LvObjHasFlag(obj *LvObjT, f LvObjFlagT) bool + +//go:linkname LvObjHasFlagAny C.lv_obj_has_flag_any +func LvObjHasFlagAny(obj *LvObjT, f LvObjFlagT) bool + +//go:linkname LvObjGetState C.lv_obj_get_state +func LvObjGetState(obj *LvObjT) LvStateT + +//go:linkname LvObjHasState C.lv_obj_has_state +func LvObjHasState(obj *LvObjT, state LvStateT) bool + +//go:linkname LvObjGetGroup C.lv_obj_get_group +func LvObjGetGroup(obj *LvObjT) *LvGroupT + +//go:linkname LvObjGetUserData C.lv_obj_get_user_data +func LvObjGetUserData(obj *LvObjT) unsafe.Pointer + +//go:linkname LvObjAllocateSpecAttr C.lv_obj_allocate_spec_attr +func LvObjAllocateSpecAttr(obj *LvObjT) + +//go:linkname LvObjCheckType C.lv_obj_check_type +func LvObjCheckType(obj *LvObjT, class_p *LvObjClassT) bool + +//go:linkname LvObjHasClass C.lv_obj_has_class +func LvObjHasClass(obj *LvObjT, class_p *LvObjClassT) bool + +//go:linkname LvObjGetClass C.lv_obj_get_class +func LvObjGetClass(obj *LvObjT) *LvObjClassT + +//go:linkname LvObjIsValid C.lv_obj_is_valid +func LvObjIsValid(obj *LvObjT) bool + +//go:linkname LvObjNullOnDelete C.lv_obj_null_on_delete +func LvObjNullOnDelete(obj_ptr **LvObjT) diff --git a/lvgl/core/lv_obj_event.go b/lvgl/core/lv_obj_event.go new file mode 100644 index 00000000..abc7037c --- /dev/null +++ b/lvgl/core/lv_obj_event.go @@ -0,0 +1,77 @@ +package core + +import ( + "unsafe" + _ "unsafe" + + "github.com/goplus/llgo/c" +) + +//go:linkname LvObjSendEvent C.lv_obj_send_event +func LvObjSendEvent(obj *LvObjT, event_code LvEventCodeT, param unsafe.Pointer) LvResultT + +//go:linkname LvObjEventBase C.lv_obj_event_base +func LvObjEventBase(class_p *LvObjClassT, e *LvEventT) LvResultT + +//go:linkname LvEventGetCurrentTargetObj C.lv_event_get_current_target_obj +func LvEventGetCurrentTargetObj(e *LvEventT) *LvObjT + +//go:linkname LvEventGetTargetObj C.lv_event_get_target_obj +func LvEventGetTargetObj(e *LvEventT) *LvObjT + +//go:linkname LvObjAddEventCb C.lv_obj_add_event_cb +func LvObjAddEventCb(obj *LvObjT, event_cb LvEventCbT, filter LvEventCodeT, user_data c.Pointer) *LvEventDscT + +//go:linkname LvObjGetEventCount C.lv_obj_get_event_count +func LvObjGetEventCount(obj *LvObjT) c.Uint + +//go:linkname LvObjGetEventDsc C.lv_obj_get_event_dsc +func LvObjGetEventDsc(obj *LvObjT, index c.Uint) *LvEventDscT + +//go:linkname LvObjRemoveEvent C.lv_obj_remove_event +func LvObjRemoveEvent(obj *LvObjT, index c.Uint) c.Char + +//go:linkname LvObjRemoveEventCb C.lv_obj_remove_event_cb +func LvObjRemoveEventCb(obj *LvObjT, event_cb LvEventCbT) c.Char + +//go:linkname LvObjRemoveEventDsc C.lv_obj_remove_event_dsc +func LvObjRemoveEventDsc(obj *LvObjT, dsc *LvEventDscT) c.Char + +//go:linkname LvObjRemoveEventCbWithUserData C.lv_obj_remove_event_cb_with_user_data +func LvObjRemoveEventCbWithUserData(obj *LvObjT, event_cb LvEventCbT, user_data unsafe.Pointer) c.Uint + +//go:linkname LvEventGetIndev C.lv_event_get_indev +func LvEventGetIndev(e *LvEventT) *LvIndevT + +//go:linkname LvEventGetLayer C.lv_event_get_layer +func LvEventGetLayer(e *LvEventT) *LvLayerT + +//go:linkname LvEventGetOldSize C.lv_event_get_old_size +func LvEventGetOldSize(e *LvEventT) *LvAreaT + +//go:linkname LvEventGetKey C.lv_event_get_key +func LvEventGetKey(e *LvEventT) c.Uint + +//go:linkname LvEventGetRotaryDiff C.lv_event_get_rotary_diff +func LvEventGetRotaryDiff(e *LvEventT) c.Int + +//go:linkname LvEventGetScrollAnim C.lv_event_get_scroll_anim +func LvEventGetScrollAnim(e *LvEventT) *LvAnimT + +//go:linkname LvEventSetExtDrawSize C.lv_event_set_ext_draw_size +func LvEventSetExtDrawSize(e *LvEventT, size c.Int) + +//go:linkname LvEventGetSelfSizeInfo C.lv_event_get_self_size_info +func LvEventGetSelfSizeInfo(e *LvEventT) *LvPointT + +//go:linkname LvEventGetHitTestInfo C.lv_event_get_hit_test_info +func LvEventGetHitTestInfo(e *LvEventT) *LvHitTestInfoT + +//go:linkname LvEventGetCoverArea C.lv_event_get_cover_area +func LvEventGetCoverArea(e *LvEventT) *LvAreaT + +//go:linkname LvEventSetCoverRes C.lv_event_set_cover_res +func LvEventSetCoverRes(e *LvEventT, res LvCoverResT) + +//go:linkname LvEventGetDrawTask C.lv_event_get_draw_task +func LvEventGetDrawTask(e *LvEventT) *LvDrawTaskT diff --git a/lvgl/core/lv_obj_pos.go b/lvgl/core/lv_obj_pos.go new file mode 100644 index 00000000..17a42f2e --- /dev/null +++ b/lvgl/core/lv_obj_pos.go @@ -0,0 +1,157 @@ +package core + +import ( + _ "unsafe" + + "github.com/goplus/llgo/c" +) + +//go:linkname LvObjSetPos C.lv_obj_set_pos +func LvObjSetPos(obj *LvObjT, x, y c.Int32T) + +//go:linkname LvObjSetX C.lv_obj_set_x +func LvObjSetX(obj *LvObjT, x c.Int32T) + +//go:linkname LvObjSetY C.lv_obj_set_y +func LvObjSetY(obj *LvObjT, y c.Int32T) + +//go:linkname LvObjSetSize C.lv_obj_set_size +func LvObjSetSize(obj *LvObjT, w, h c.Int32T) + +//go:linkname LvObjRefrSize C.lv_obj_refr_size +func LvObjRefrSize(obj *LvObjT) bool + +//go:linkname LvObjSetWidth C.lv_obj_set_width +func LvObjSetWidth(obj *LvObjT, w c.Int32T) + +//go:linkname LvObjSetHeight C.lv_obj_set_height +func LvObjSetHeight(obj *LvObjT, h c.Int32T) + +//go:linkname LvObjSetContentWidth C.lv_obj_set_content_width +func LvObjSetContentWidth(obj *LvObjT, w c.Int32T) + +//go:linkname LvObjSetContentHeight C.lv_obj_set_content_height +func LvObjSetContentHeight(obj *LvObjT, h c.Int32T) + +//go:linkname LvObjSetLayout C.lv_obj_set_layout +func LvObjSetLayout(obj *LvObjT, layout c.Uint32T) + +//go:linkname LvObjIsLayoutPositioned C.lv_obj_is_layout_positioned +func LvObjIsLayoutPositioned(obj *LvObjT) bool + +//go:linkname LvObjMarkLayoutAsDirty C.lv_obj_mark_layout_as_dirty +func LvObjMarkLayoutAsDirty(obj *LvObjT) + +//go:linkname LvObjUpdateLayout C.lv_obj_update_layout +func LvObjUpdateLayout(obj *LvObjT) + +//go:linkname LvObjSetAlign C.lv_obj_set_align +func LvObjSetAlign(obj *LvObjT, align LvAlignT) + +//go:linkname LvObjAlign C.lv_obj_align +func LvObjAlign(obj *LvObjT, align LvAlignT, x_ofs, y_ofs c.Int32T) + +//go:linkname LvObjAlignTo C.lv_obj_align_to +func LvObjAlignTo(obj *LvObjT, base *LvObjT, align LvAlignT, x_ofs, y_ofs c.Int32T) + +//go:linkname LvObjCenter C.lv_obj_center +func LvObjCenter(obj *LvObjT) + +//go:linkname LvObjSetTransform C.lv_obj_set_transform +func LvObjSetTransform(obj *LvObjT, matrix *LvMatrixT) + +//go:linkname LvObjResetTransform C.lv_obj_reset_transform +func LvObjResetTransform(obj *LvObjT) + +//go:linkname LvObjGetCoords C.lv_obj_get_coords +func LvObjGetCoords(obj *LvObjT, coords *LvAreaT) + +//go:linkname LvObjGetX C.lv_obj_get_x +func LvObjGetX(obj *LvObjT) c.Int32T + +//go:linkname LvObjGetX2 C.lv_obj_get_x2 +func LvObjGetX2(obj *LvObjT) c.Int32T + +//go:linkname LvObjGetY C.lv_obj_get_y +func LvObjGetY(obj *LvObjT) c.Int32T + +//go:linkname LvObjGetY2 C.lv_obj_get_y2 +func LvObjGetY2(obj *LvObjT) c.Int32T + +//go:linkname LvObjGetXAligned C.lv_obj_get_x_aligned +func LvObjGetXAligned(obj *LvObjT) c.Int32T + +//go:linkname LvObjGetYAligned C.lv_obj_get_y_aligned +func LvObjGetYAligned(obj *LvObjT) c.Int32T + +//go:linkname LvObjGetWidth C.lv_obj_get_width +func LvObjGetWidth(obj *LvObjT) c.Int32T + +//go:linkname LvObjGetHeight C.lv_obj_get_height +func LvObjGetHeight(obj *LvObjT) c.Int32T + +//go:linkname LvObjGetContentWidth C.lv_obj_get_content_width +func LvObjGetContentWidth(obj *LvObjT) c.Int32T + +//go:linkname LvObjGetContentHeight C.lv_obj_get_content_height +func LvObjGetContentHeight(obj *LvObjT) c.Int32T + +//go:linkname LvObjGetContentCoords C.lv_obj_get_content_coords +func LvObjGetContentCoords(obj *LvObjT, area *LvAreaT) + +//go:linkname LvObjGetSelfWidth C.lv_obj_get_self_width +func LvObjGetSelfWidth(obj *LvObjT) c.Int32T + +//go:linkname LvObjGetSelfHeight C.lv_obj_get_self_height +func LvObjGetSelfHeight(obj *LvObjT) c.Int32T + +//go:linkname LvObjRefreshSelfSize C.lv_obj_refresh_self_size +func LvObjRefreshSelfSize(obj *LvObjT) bool + +//go:linkname LvObjRefrPos C.lv_obj_refr_pos +func LvObjRefrPos(obj *LvObjT) + +//go:linkname LvObjMoveTo C.lv_obj_move_to +func LvObjMoveTo(obj *LvObjT, x, y c.Int32T) + +//go:linkname LvObjMoveChildrenBy C.lv_obj_move_children_by +func LvObjMoveChildrenBy(obj *LvObjT, x_diff, y_diff c.Int32T, ignore_floating bool) + +//go:linkname LvObjGetTransform C.lv_obj_get_transform +func LvObjGetTransform(obj *LvObjT) *LvMatrixT + +//go:linkname LvObjTransformPoint C.lv_obj_transform_point +func LvObjTransformPoint(obj *LvObjT, p *LvPointT, flags LvObjPointTransformFlagT) + +//go:linkname LvObjTransformPointArray C.lv_obj_transform_point_array +func LvObjTransformPointArray(obj *LvObjT, points *LvPointT, count c.SizeT, flags LvObjPointTransformFlagT) + +//go:linkname LvObjGetTransformedArea C.lv_obj_get_transformed_area +func LvObjGetTransformedArea(obj *LvObjT, area *LvAreaT, flags LvObjPointTransformFlagT) + +//go:linkname LvObjInvalidateArea C.lv_obj_invalidate_area +func LvObjInvalidateArea(obj *LvObjT, area *LvAreaT) + +//go:linkname LvObjInvalidate C.lv_obj_invalidate +func LvObjInvalidate(obj *LvObjT) + +//go:linkname LvObjAreaIsVisible C.lv_obj_area_is_visible +func LvObjAreaIsVisible(obj *LvObjT, area *LvAreaT) bool + +//go:linkname LvObjIsVisible C.lv_obj_is_visible +func LvObjIsVisible(obj *LvObjT) bool + +//go:linkname LvObjSetExtClickArea C.lv_obj_set_ext_click_area +func LvObjSetExtClickArea(obj *LvObjT, size c.Int32T) + +//go:linkname LvObjGetClickArea C.lv_obj_get_click_area +func LvObjGetClickArea(obj *LvObjT, area *LvAreaT) + +//go:linkname LvObjHitTest C.lv_obj_hit_test +func LvObjHitTest(obj *LvObjT, point *LvPointT) bool + +//go:linkname LvClampWidth C.lv_clamp_width +func LvClampWidth(width, min_width, max_width, ref_width c.Int32T) c.Int32T + +//go:linkname LvClampHeight C.lv_clamp_height +func LvClampHeight(height, min_height, max_height, ref_height c.Int32T) c.Int32T diff --git a/lvgl/core/lv_obj_style.go b/lvgl/core/lv_obj_style.go new file mode 100644 index 00000000..4a558d6e --- /dev/null +++ b/lvgl/core/lv_obj_style.go @@ -0,0 +1,52 @@ +package core + +import ( + _ "unsafe" + + "github.com/goplus/llgo/c" +) + +//go:linkname LvObjAddStyle C.lv_obj_add_style +func LvObjAddStyle(obj *LvObjT, style *LvStyleT, selector LvStyleSelectorT) + +//go:linkname LvObjReplaceStyle C.lv_obj_replace_style +func LvObjReplaceStyle(obj *LvObjT, old_style *LvStyleT, new_style *LvStyleT, selector LvStyleSelectorT) bool + +//go:linkname LvObjRemoveStyle C.lv_obj_remove_style +func LvObjRemoveStyle(obj *LvObjT, style *LvStyleT, selector LvStyleSelectorT) + +//go:linkname LvObjRemoveStyleAll C.lv_obj_remove_style_all +func LvObjRemoveStyleAll(obj *LvObjT) + +//go:linkname LvObjReportStyleChange C.lv_obj_report_style_change +func LvObjReportStyleChange(style *LvStyleT) + +//go:linkname LvObjRefreshStyle C.lv_obj_refresh_style +func LvObjRefreshStyle(obj *LvObjT, part LvPartT, prop LvStylePropT) + +//go:linkname LvObjEnableStyleRefresh C.lv_obj_enable_style_refresh +func LvObjEnableStyleRefresh(en bool) + +//go:linkname LvObjGetStyleProp C.lv_obj_get_style_prop +func LvObjGetStyleProp(obj *LvObjT, part LvPartT, prop LvStylePropT) LvStyleValueT + +//go:linkname LvObjHasStyleProp C.lv_obj_has_style_prop +func LvObjHasStyleProp(obj *LvObjT, selector LvStyleSelectorT, prop LvStylePropT) bool + +//go:linkname LvObjSetLocalStyleProp C.lv_obj_set_local_style_prop +func LvObjSetLocalStyleProp(obj *LvObjT, prop LvStylePropT, value LvStyleValueT, selector LvStyleSelectorT) + +//go:linkname LvObjGetLocalStyleProp C.lv_obj_get_local_style_prop +func LvObjGetLocalStyleProp(obj *LvObjT, prop LvStylePropT, value *LvStyleValueT, selector LvStyleSelectorT) LvStyleResT + +//go:linkname LvObjRemoveLocalStyleProp C.lv_obj_remove_local_style_prop +func LvObjRemoveLocalStyleProp(obj *LvObjT, prop LvStylePropT, selector LvStyleSelectorT) bool + +//go:linkname LvObjStyleApplyColorFilter C.lv_obj_style_apply_color_filter +func LvObjStyleApplyColorFilter(obj *LvObjT, part LvPartT, v LvStyleValueT) LvStyleValueT + +//go:linkname LvObjFadeIn C.lv_obj_fade_in +func LvObjFadeIn(obj *LvObjT, time c.Uint32T, delay c.Uint32T) + +//go:linkname LvObjFadeOut C.lv_obj_fade_out +func LvObjFadeOut(obj *LvObjT, time c.Uint32T, delay c.Uint32T) diff --git a/lvgl/core/lv_obj_style_gen.go b/lvgl/core/lv_obj_style_gen.go new file mode 100644 index 00000000..38913d74 --- /dev/null +++ b/lvgl/core/lv_obj_style_gen.go @@ -0,0 +1,350 @@ +package core + +import ( + "unsafe" + + "github.com/goplus/llgo/c" +) + +//go:linkname LvObjSetStyleWidth C.lv_obj_set_style_width +func LvObjSetStyleWidth(obj *LvObjT, value c.Int32T, selector LvStyleSelectorT) + +//go:linkname LvObjSetStyleMinWidth C.lv_obj_set_style_min_width +func LvObjSetStyleMinWidth(obj *LvObjT, value c.Int32T, selector LvStyleSelectorT) + +//go:linkname LvObjSetStyleMaxWidth C.lv_obj_set_style_max_width +func LvObjSetStyleMaxWidth(obj *LvObjT, value c.Int32T, selector LvStyleSelectorT) + +//go:linkname LvObjSetStyleHeight C.lv_obj_set_style_height +func LvObjSetStyleHeight(obj *LvObjT, value c.Int32T, selector LvStyleSelectorT) + +//go:linkname LvObjSetStyleMinHeight C.lv_obj_set_style_min_height +func LvObjSetStyleMinHeight(obj *LvObjT, value c.Int32T, selector LvStyleSelectorT) + +//go:linkname LvObjSetStyleMaxHeight C.lv_obj_set_style_max_height +func LvObjSetStyleMaxHeight(obj *LvObjT, value c.Int32T, selector LvStyleSelectorT) + +//go:linkname LvObjSetStyleLength C.lv_obj_set_style_length +func LvObjSetStyleLength(obj *LvObjT, value c.Int32T, selector LvStyleSelectorT) + +//go:linkname LvObjSetStyleX C.lv_obj_set_style_x +func LvObjSetStyleX(obj *LvObjT, value c.Int32T, selector LvStyleSelectorT) + +//go:linkname LvObjSetStyleY C.lv_obj_set_style_y +func LvObjSetStyleY(obj *LvObjT, value c.Int32T, selector LvStyleSelectorT) + +//go:linkname LvObjSetStyleAlign C.lv_obj_set_style_align +func LvObjSetStyleAlign(obj *LvObjT, value LvAlignT, selector LvStyleSelectorT) + +//go:linkname LvObjSetStyleTransformWidth C.lv_obj_set_style_transform_width +func LvObjSetStyleTransformWidth(obj *LvObjT, value c.Int32T, selector LvStyleSelectorT) + +//go:linkname LvObjSetStyleTransformHeight C.lv_obj_set_style_transform_height +func LvObjSetStyleTransformHeight(obj *LvObjT, value c.Int32T, selector LvStyleSelectorT) + +//go:linkname LvObjSetStyleTranslateX C.lv_obj_set_style_translate_x +func LvObjSetStyleTranslateX(obj *LvObjT, value c.Int32T, selector LvStyleSelectorT) + +//go:linkname LvObjSetStyleTranslateY C.lv_obj_set_style_translate_y +func LvObjSetStyleTranslateY(obj *LvObjT, value c.Int32T, selector LvStyleSelectorT) + +//go:linkname LvObjSetStyleTranslateRadial C.lv_obj_set_style_translate_radial +func LvObjSetStyleTranslateRadial(obj *LvObjT, value c.Int32T, selector LvStyleSelectorT) + +//go:linkname LvObjSetStyleTransformScaleX C.lv_obj_set_style_transform_scale_x +func LvObjSetStyleTransformScaleX(obj *LvObjT, value c.Int32T, selector LvStyleSelectorT) + +//go:linkname LvObjSetStyleTransformScaleY C.lv_obj_set_style_transform_scale_y +func LvObjSetStyleTransformScaleY(obj *LvObjT, value c.Int32T, selector LvStyleSelectorT) + +//go:linkname LvObjSetStyleTransformRotation C.lv_obj_set_style_transform_rotation +func LvObjSetStyleTransformRotation(obj *LvObjT, value c.Int32T, selector LvStyleSelectorT) + +//go:linkname LvObjSetStyleTransformPivotX C.lv_obj_set_style_transform_pivot_x +func LvObjSetStyleTransformPivotX(obj *LvObjT, value c.Int32T, selector LvStyleSelectorT) + +//go:linkname LvObjSetStyleTransformPivotY C.lv_obj_set_style_transform_pivot_y +func LvObjSetStyleTransformPivotY(obj *LvObjT, value c.Int32T, selector LvStyleSelectorT) + +//go:linkname LvObjSetStyleTransformSkewX C.lv_obj_set_style_transform_skew_x +func LvObjSetStyleTransformSkewX(obj *LvObjT, value c.Int32T, selector LvStyleSelectorT) + +//go:linkname LvObjSetStyleTransformSkewY C.lv_obj_set_style_transform_skew_y +func LvObjSetStyleTransformSkewY(obj *LvObjT, value c.Int32T, selector LvStyleSelectorT) + +//go:linkname LvObjSetStylePadTop C.lv_obj_set_style_pad_top +func LvObjSetStylePadTop(obj *LvObjT, value c.Int32T, selector LvStyleSelectorT) + +//go:linkname LvObjSetStylePadBottom C.lv_obj_set_style_pad_bottom +func LvObjSetStylePadBottom(obj *LvObjT, value c.Int32T, selector LvStyleSelectorT) + +//go:linkname LvObjSetStylePadLeft C.lv_obj_set_style_pad_left +func LvObjSetStylePadLeft(obj *LvObjT, value c.Int32T, selector LvStyleSelectorT) + +//go:linkname LvObjSetStylePadRight C.lv_obj_set_style_pad_right +func LvObjSetStylePadRight(obj *LvObjT, value c.Int32T, selector LvStyleSelectorT) + +//go:linkname LvObjSetStylePadRow C.lv_obj_set_style_pad_row +func LvObjSetStylePadRow(obj *LvObjT, value c.Int32T, selector LvStyleSelectorT) + +//go:linkname LvObjSetStylePadColumn C.lv_obj_set_style_pad_column +func LvObjSetStylePadColumn(obj *LvObjT, value c.Int32T, selector LvStyleSelectorT) + +//go:linkname LvObjSetStylePadRadial C.lv_obj_set_style_pad_radial +func LvObjSetStylePadRadial(obj *LvObjT, value c.Int32T, selector LvStyleSelectorT) + +//go:linkname LvObjSetStyleMarginTop C.lv_obj_set_style_margin_top +func LvObjSetStyleMarginTop(obj *LvObjT, value c.Int32T, selector LvStyleSelectorT) + +//go:linkname LvObjSetStyleMarginBottom C.lv_obj_set_style_margin_bottom +func LvObjSetStyleMarginBottom(obj *LvObjT, value c.Int32T, selector LvStyleSelectorT) + +//go:linkname LvObjSetStyleMarginLeft C.lv_obj_set_style_margin_left +func LvObjSetStyleMarginLeft(obj *LvObjT, value c.Int32T, selector LvStyleSelectorT) + +//go:linkname LvObjSetStyleMarginRight C.lv_obj_set_style_margin_right +func LvObjSetStyleMarginRight(obj *LvObjT, value c.Int32T, selector LvStyleSelectorT) + +//go:linkname LvObjSetStyleBgColor C.lv_obj_set_style_bg_color +func LvObjSetStyleBgColor(obj *LvObjT, value LvColorT, selector LvStyleSelectorT) + +//go:linkname LvObjSetStyleBgOpa C.lv_obj_set_style_bg_opa +func LvObjSetStyleBgOpa(obj *LvObjT, value LvOpaT, selector LvStyleSelectorT) + +//go:linkname LvObjSetStyleBgGradColor C.lv_obj_set_style_bg_grad_color +func LvObjSetStyleBgGradColor(obj *LvObjT, value LvColorT, selector LvStyleSelectorT) + +//go:linkname LvObjSetStyleBgGradDir C.lv_obj_set_style_bg_grad_dir +func LvObjSetStyleBgGradDir(obj *LvObjT, value LvGradDirT, selector LvStyleSelectorT) + +//go:linkname LvObjSetStyleBgMainStop C.lv_obj_set_style_bg_main_stop +func LvObjSetStyleBgMainStop(obj *LvObjT, value c.Int32T, selector LvStyleSelectorT) + +//go:linkname LvObjSetStyleBgGradStop C.lv_obj_set_style_bg_grad_stop +func LvObjSetStyleBgGradStop(obj *LvObjT, value c.Int32T, selector LvStyleSelectorT) + +//go:linkname LvObjSetStyleBgMainOpa C.lv_obj_set_style_bg_main_opa +func LvObjSetStyleBgMainOpa(obj *LvObjT, value LvOpaT, selector LvStyleSelectorT) + +//go:linkname LvObjSetStyleBgGradOpa C.lv_obj_set_style_bg_grad_opa +func LvObjSetStyleBgGradOpa(obj *LvObjT, value LvOpaT, selector LvStyleSelectorT) + +//go:linkname LvObjSetStyleBgGrad C.lv_obj_set_style_bg_grad +func LvObjSetStyleBgGrad(obj *LvObjT, value *LvGradDscT, selector LvStyleSelectorT) + +//go:linkname LvObjSetStyleBgImageSrc C.lv_obj_set_style_bg_image_src +func LvObjSetStyleBgImageSrc(obj *LvObjT, value unsafe.Pointer, selector LvStyleSelectorT) + +//go:linkname LvObjSetStyleBgImageOpa C.lv_obj_set_style_bg_image_opa +func LvObjSetStyleBgImageOpa(obj *LvObjT, value LvOpaT, selector LvStyleSelectorT) + +//go:linkname LvObjSetStyleBgImageRecolor C.lv_obj_set_style_bg_image_recolor +func LvObjSetStyleBgImageRecolor(obj *LvObjT, value LvColorT, selector LvStyleSelectorT) + +//go:linkname LvObjSetStyleBgImageRecolorOpa C.lv_obj_set_style_bg_image_recolor_opa +func LvObjSetStyleBgImageRecolorOpa(obj *LvObjT, value LvOpaT, selector LvStyleSelectorT) + +//go:linkname LvObjSetStyleBgImageTiled C.lv_obj_set_style_bg_image_tiled +func LvObjSetStyleBgImageTiled(obj *LvObjT, value bool, selector LvStyleSelectorT) + +//go:linkname LvObjSetStyleBorderColor C.lv_obj_set_style_border_color +func LvObjSetStyleBorderColor(obj *LvObjT, value LvColorT, selector LvStyleSelectorT) + +//go:linkname LvObjSetStyleBorderOpa C.lv_obj_set_style_border_opa +func LvObjSetStyleBorderOpa(obj *LvObjT, value LvOpaT, selector LvStyleSelectorT) + +//go:linkname LvObjSetStyleBorderWidth C.lv_obj_set_style_border_width +func LvObjSetStyleBorderWidth(obj *LvObjT, value c.Int32T, selector LvStyleSelectorT) + +//go:linkname LvObjSetStyleBorderSide C.lv_obj_set_style_border_side +func LvObjSetStyleBorderSide(obj *LvObjT, value LvBorderSideT, selector LvStyleSelectorT) + +//go:linkname LvObjSetStyleBorderPost C.lv_obj_set_style_border_post +func LvObjSetStyleBorderPost(obj *LvObjT, value bool, selector LvStyleSelectorT) + +//go:linkname LvObjSetStyleOutlineWidth C.lv_obj_set_style_outline_width +func LvObjSetStyleOutlineWidth(obj *LvObjT, value c.Int32T, selector LvStyleSelectorT) + +//go:linkname LvObjSetStyleOutlineColor C.lv_obj_set_style_outline_color +func LvObjSetStyleOutlineColor(obj *LvObjT, value LvColorT, selector LvStyleSelectorT) + +//go:linkname LvObjSetStyleOutlineOpa C.lv_obj_set_style_outline_opa +func LvObjSetStyleOutlineOpa(obj *LvObjT, value LvOpaT, selector LvStyleSelectorT) + +//go:linkname LvObjSetStyleOutlinePad C.lv_obj_set_style_outline_pad +func LvObjSetStyleOutlinePad(obj *LvObjT, value c.Int32T, selector LvStyleSelectorT) + +//go:linkname LvObjSetStyleShadowWidth C.lv_obj_set_style_shadow_width +func LvObjSetStyleShadowWidth(obj *LvObjT, value c.Int32T, selector LvStyleSelectorT) + +//go:linkname LvObjSetStyleShadowOffsetX C.lv_obj_set_style_shadow_offset_x +func LvObjSetStyleShadowOffsetX(obj *LvObjT, value c.Int32T, selector LvStyleSelectorT) + +//go:linkname LvObjSetStyleShadowOffsetY C.lv_obj_set_style_shadow_offset_y +func LvObjSetStyleShadowOffsetY(obj *LvObjT, value c.Int32T, selector LvStyleSelectorT) + +//go:linkname LvObjSetStyleShadowSpread C.lv_obj_set_style_shadow_spread +func LvObjSetStyleShadowSpread(obj *LvObjT, value c.Int32T, selector LvStyleSelectorT) + +//go:linkname LvObjSetStyleShadowColor C.lv_obj_set_style_shadow_color +func LvObjSetStyleShadowColor(obj *LvObjT, value LvColorT, selector LvStyleSelectorT) + +//go:linkname LvObjSetStyleShadowOpa C.lv_obj_set_style_shadow_opa +func LvObjSetStyleShadowOpa(obj *LvObjT, value LvOpaT, selector LvStyleSelectorT) + +//go:linkname LvObjSetStyleImageOpa C.lv_obj_set_style_image_opa +func LvObjSetStyleImageOpa(obj *LvObjT, value LvOpaT, selector LvStyleSelectorT) + +//go:linkname LvObjSetStyleImageRecolor C.lv_obj_set_style_image_recolor +func LvObjSetStyleImageRecolor(obj *LvObjT, value LvColorT, selector LvStyleSelectorT) + +//go:linkname LvObjSetStyleImageRecolorOpa C.lv_obj_set_style_image_recolor_opa +func LvObjSetStyleImageRecolorOpa(obj *LvObjT, value LvOpaT, selector LvStyleSelectorT) + +//go:linkname LvObjSetStyleLineWidth C.lv_obj_set_style_line_width +func LvObjSetStyleLineWidth(obj *LvObjT, value c.Int32T, selector LvStyleSelectorT) + +//go:linkname LvObjSetStyleLineDashWidth C.lv_obj_set_style_line_dash_width +func LvObjSetStyleLineDashWidth(obj *LvObjT, value c.Int32T, selector LvStyleSelectorT) + +//go:linkname LvObjSetStyleLineDashGap C.lv_obj_set_style_line_dash_gap +func LvObjSetStyleLineDashGap(obj *LvObjT, value c.Int32T, selector LvStyleSelectorT) + +//go:linkname LvObjSetStyleLineRounded C.lv_obj_set_style_line_rounded +func LvObjSetStyleLineRounded(obj *LvObjT, value bool, selector LvStyleSelectorT) + +//go:linkname LvObjSetStyleLineColor C.lv_obj_set_style_line_color +func LvObjSetStyleLineColor(obj *LvObjT, value LvColorT, selector LvStyleSelectorT) + +//go:linkname LvObjSetStyleLineOpa C.lv_obj_set_style_line_opa +func LvObjSetStyleLineOpa(obj *LvObjT, value LvOpaT, selector LvStyleSelectorT) + +//go:linkname LvObjSetStyleArcWidth C.lv_obj_set_style_arc_width +func LvObjSetStyleArcWidth(obj *LvObjT, value c.Int32T, selector LvStyleSelectorT) + +//go:linkname LvObjSetStyleArcRounded C.lv_obj_set_style_arc_rounded +func LvObjSetStyleArcRounded(obj *LvObjT, value bool, selector LvStyleSelectorT) + +//go:linkname LvObjSetStyleArcColor C.lv_obj_set_style_arc_color +func LvObjSetStyleArcColor(obj *LvObjT, value LvColorT, selector LvStyleSelectorT) + +//go:linkname LvObjSetStyleArcOpa C.lv_obj_set_style_arc_opa +func LvObjSetStyleArcOpa(obj *LvObjT, value LvOpaT, selector LvStyleSelectorT) + +//go:linkname LvObjSetStyleArcImageSrc C.lv_obj_set_style_arc_image_src +func LvObjSetStyleArcImageSrc(obj *LvObjT, value unsafe.Pointer, selector LvStyleSelectorT) + +//go:linkname LvObjSetStyleTextColor C.lv_obj_set_style_text_color +func LvObjSetStyleTextColor(obj *LvObjT, value LvColorT, selector LvStyleSelectorT) + +//go:linkname LvObjSetStyleTextOpa C.lv_obj_set_style_text_opa +func LvObjSetStyleTextOpa(obj *LvObjT, value LvOpaT, selector LvStyleSelectorT) + +//go:linkname LvObjSetStyleTextFont C.lv_obj_set_style_text_font +func LvObjSetStyleTextFont(obj *LvObjT, value *LvFontT, selector LvStyleSelectorT) + +//go:linkname LvObjSetStyleTextLetterSpace C.lv_obj_set_style_text_letter_space +func LvObjSetStyleTextLetterSpace(obj *LvObjT, value c.Int32T, selector LvStyleSelectorT) + +//go:linkname LvObjSetStyleTextLineSpace C.lv_obj_set_style_text_line_space +func LvObjSetStyleTextLineSpace(obj *LvObjT, value c.Int32T, selector LvStyleSelectorT) + +//go:linkname LvObjSetStyleTextDecor C.lv_obj_set_style_text_decor +func LvObjSetStyleTextDecor(obj *LvObjT, value LvTextDecorT, selector LvStyleSelectorT) + +//go:linkname LvObjSetStyleTextAlign C.lv_obj_set_style_text_align +func LvObjSetStyleTextAlign(obj *LvObjT, value LvTextAlignT, selector LvStyleSelectorT) + +//go:linkname LvObjSetStyleRadius C.lv_obj_set_style_radius +func LvObjSetStyleRadius(obj *LvObjT, value c.Int32T, selector LvStyleSelectorT) + +//go:linkname LvObjSetStyleRadialOffset C.lv_obj_set_style_radial_offset +func LvObjSetStyleRadialOffset(obj *LvObjT, value c.Int32T, selector LvStyleSelectorT) + +//go:linkname LvObjSetStyleClipCorner C.lv_obj_set_style_clip_corner +func LvObjSetStyleClipCorner(obj *LvObjT, value bool, selector LvStyleSelectorT) + +//go:linkname LvObjSetStyleOpa C.lv_obj_set_style_opa +func LvObjSetStyleOpa(obj *LvObjT, value LvOpaT, selector LvStyleSelectorT) + +//go:linkname LvObjSetStyleOpaLayered C.lv_obj_set_style_opa_layered +func LvObjSetStyleOpaLayered(obj *LvObjT, value LvOpaT, selector LvStyleSelectorT) + +//go:linkname LvObjSetStyleColorFilterDsc C.lv_obj_set_style_color_filter_dsc +func LvObjSetStyleColorFilterDsc(obj *LvObjT, value *LvColorFilterDscT, selector LvStyleSelectorT) + +//go:linkname LvObjSetStyleColorFilterOpa C.lv_obj_set_style_color_filter_opa +func LvObjSetStyleColorFilterOpa(obj *LvObjT, value LvOpaT, selector LvStyleSelectorT) + +//go:linkname LvObjSetStyleAnim C.lv_obj_set_style_anim +func LvObjSetStyleAnim(obj *LvObjT, value *LvAnimT, selector LvStyleSelectorT) + +//go:linkname LvObjSetStyleAnimDuration C.lv_obj_set_style_anim_duration +func LvObjSetStyleAnimDuration(obj *LvObjT, value c.Uint32T, selector LvStyleSelectorT) + +//go:linkname LvObjSetStyleTransition C.lv_obj_set_style_transition +func LvObjSetStyleTransition(obj *LvObjT, value *LvStyleTransitionDscT, selector LvStyleSelectorT) + +//go:linkname LvObjSetStyleBlendMode C.lv_obj_set_style_blend_mode +func LvObjSetStyleBlendMode(obj *LvObjT, value LvBlendModeT, selector LvStyleSelectorT) + +//go:linkname LvObjSetStyleLayout C.lv_obj_set_style_layout +func LvObjSetStyleLayout(obj *LvObjT, value c.Uint16T, selector LvStyleSelectorT) + +//go:linkname LvObjSetStyleBaseDir C.lv_obj_set_style_base_dir +func LvObjSetStyleBaseDir(obj *LvObjT, value LvBaseDirT, selector LvStyleSelectorT) + +//go:linkname LvObjSetStyleBitmapMaskSrc C.lv_obj_set_style_bitmap_mask_src +func LvObjSetStyleBitmapMaskSrc(obj *LvObjT, value unsafe.Pointer, selector LvStyleSelectorT) + +//go:linkname LvObjSetStyleRotarySensitivity C.lv_obj_set_style_rotary_sensitivity +func LvObjSetStyleRotarySensitivity(obj *LvObjT, value c.Uint32T, selector LvStyleSelectorT) + +// Flex layout functions +// +//go:linkname LvObjSetStyleFlexFlow C.lv_obj_set_style_flex_flow +func LvObjSetStyleFlexFlow(obj *LvObjT, value LvFlexFlowT, selector LvStyleSelectorT) + +//go:linkname LvObjSetStyleFlexMainPlace C.lv_obj_set_style_flex_main_place +func LvObjSetStyleFlexMainPlace(obj *LvObjT, value LvFlexAlignT, selector LvStyleSelectorT) + +//go:linkname LvObjSetStyleFlexCrossPlace C.lv_obj_set_style_flex_cross_place +func LvObjSetStyleFlexCrossPlace(obj *LvObjT, value LvFlexAlignT, selector LvStyleSelectorT) + +//go:linkname LvObjSetStyleFlexTrackPlace C.lv_obj_set_style_flex_track_place +func LvObjSetStyleFlexTrackPlace(obj *LvObjT, value LvFlexAlignT, selector LvStyleSelectorT) + +//go:linkname LvObjSetStyleFlexGrow C.lv_obj_set_style_flex_grow +func LvObjSetStyleFlexGrow(obj *LvObjT, value c.Uint8T, selector LvStyleSelectorT) + +// Grid layout functions +// +//go:linkname LvObjSetStyleGridColumnDscArray C.lv_obj_set_style_grid_column_dsc_array +func LvObjSetStyleGridColumnDscArray(obj *LvObjT, value *c.Int32T, selector LvStyleSelectorT) + +//go:linkname LvObjSetStyleGridColumnAlign C.lv_obj_set_style_grid_column_align +func LvObjSetStyleGridColumnAlign(obj *LvObjT, value LvGridAlignT, selector LvStyleSelectorT) + +//go:linkname LvObjSetStyleGridRowDscArray C.lv_obj_set_style_grid_row_dsc_array +func LvObjSetStyleGridRowDscArray(obj *LvObjT, value *c.Int32T, selector LvStyleSelectorT) + +//go:linkname LvObjSetStyleGridRowAlign C.lv_obj_set_style_grid_row_align +func LvObjSetStyleGridRowAlign(obj *LvObjT, value LvGridAlignT, selector LvStyleSelectorT) + +//go:linkname LvObjSetStyleGridCellColumnPos C.lv_obj_set_style_grid_cell_column_pos +func LvObjSetStyleGridCellColumnPos(obj *LvObjT, value c.Int32T, selector LvStyleSelectorT) + +//go:linkname LvObjSetStyleGridCellXAlign C.lv_obj_set_style_grid_cell_x_align +func LvObjSetStyleGridCellXAlign(obj *LvObjT, value LvGridAlignT, selector LvStyleSelectorT) + +//go:linkname LvObjSetStyleGridCellColumnSpan C.lv_obj_set_style_grid_cell_column_span +func LvObjSetStyleGridCellColumnSpan(obj *LvObjT, value c.Int32T, selector LvStyleSelectorT) + +//go:linkname LvObjSetStyleGridCellRowPos C.lv_obj_set_style_grid_cell_row_pos +func LvObjSetStyleGridCellRowPos(obj *LvObjT, value c.Int32T, selector LvStyleSelectorT) + +//go:linkname LvObjSetStyleGridCellYAlign C.lv_obj_set_style_grid_cell_y_align +func LvObjSetStyleGridCellYAlign(obj *LvObjT, value LvGridAlignT, selector LvStyleSelectorT) + +//go:linkname LvObjSetStyleGridCellRowSpan C.lv_obj_set_style_grid_cell_row_span +func LvObjSetStyleGridCellRowSpan(obj *LvObjT, value c.Int32T, selector LvStyleSelectorT) diff --git a/lvgl/core/lv_obj_tree.go b/lvgl/core/lv_obj_tree.go new file mode 100644 index 00000000..fa5d34c2 --- /dev/null +++ b/lvgl/core/lv_obj_tree.go @@ -0,0 +1,105 @@ +package core + +import ( + "unsafe" + _ "unsafe" + + "github.com/goplus/llgo/c" +) + +// Object tree walk result +type LvObjTreeWalkResT uint8 + +const ( + LV_OBJ_TREE_WALK_NEXT LvObjTreeWalkResT = iota // Continue the walk + LV_OBJ_TREE_WALK_SKIP_CHILDREN // Skip the children of the current node + LV_OBJ_TREE_WALK_END // End the walk +) + +// Object tree walk callback function type +// +//go:type C +type LvObjTreeWalkCbT func(obj *LvObjT, userData *c.Void) LvObjTreeWalkResT + +//go:linkname LvObjDelete C.lv_obj_delete +func LvObjDelete(obj *LvObjT) + +//go:linkname LvObjClean C.lv_obj_clean +func LvObjClean(obj *LvObjT) + +//go:linkname LvObjDeleteDelayed C.lv_obj_delete_delayed +func LvObjDeleteDelayed(obj *LvObjT, delay_ms uint32) + +//go:linkname LvObjDeleteAnimCompletedCb C.lv_obj_delete_anim_completed_cb +func LvObjDeleteAnimCompletedCb(a *LvAnimT) + +//go:linkname LvObjDeleteAsync C.lv_obj_delete_async +func LvObjDeleteAsync(obj *LvObjT) + +//go:linkname LvObjSetParent C.lv_obj_set_parent +func LvObjSetParent(obj *LvObjT, parent *LvObjT) + +//go:linkname LvObjSwap C.lv_obj_swap +func LvObjSwap(obj1 *LvObjT, obj2 *LvObjT) + +//go:linkname LvObjMoveToIndex C.lv_obj_move_to_index +func LvObjMoveToIndex(obj *LvObjT, index int32) + +//go:linkname LvObjGetScreen C.lv_obj_get_screen +func LvObjGetScreen(obj *LvObjT) *LvObjT + +//go:linkname LvObjGetDisplay C.lv_obj_get_display +func LvObjGetDisplay(obj *LvObjT) *LvDisplayT + +//go:linkname LvObjGetParent C.lv_obj_get_parent +func LvObjGetParent(obj *LvObjT) *LvObjT + +//go:linkname LvObjGetChild C.lv_obj_get_child +func LvObjGetChild(obj *LvObjT, idx int32) *LvObjT + +//go:linkname LvObjGetChildByType C.lv_obj_get_child_by_type +func LvObjGetChildByType(obj *LvObjT, idx int32, class_p *LvObjClassT) *LvObjT + +//go:linkname LvObjGetSibling C.lv_obj_get_sibling +func LvObjGetSibling(obj *LvObjT, idx int32) *LvObjT + +//go:linkname LvObjGetSiblingByType C.lv_obj_get_sibling_by_type +func LvObjGetSiblingByType(obj *LvObjT, idx int32, class_p *LvObjClassT) *LvObjT + +//go:linkname LvObjGetChildCount C.lv_obj_get_child_count +func LvObjGetChildCount(obj *LvObjT) uint32 + +//go:linkname LvObjGetChildCountByType C.lv_obj_get_child_count_by_type +func LvObjGetChildCountByType(obj *LvObjT, class_p *LvObjClassT) uint32 + +// LV_USE_OBJ_NAME functions +// +//go:linkname LvObjSetName C.lv_obj_set_name +func LvObjSetName(obj *LvObjT, name *c.Char) + +//go:linkname LvObjSetNameStatic C.lv_obj_set_name_static +func LvObjSetNameStatic(obj *LvObjT, name *c.Char) + +//go:linkname LvObjGetName C.lv_obj_get_name +func LvObjGetName(obj *LvObjT) *c.Char + +//go:linkname LvObjGetNameResolved C.lv_obj_get_name_resolved +func LvObjGetNameResolved(obj *LvObjT, buf *c.Char, buf_size c.SizeT) + +//go:linkname LvObjFindByName C.lv_obj_find_by_name +func LvObjFindByName(parent *LvObjT, name *c.Char) *LvObjT + +//go:linkname LvObjGetChildByName C.lv_obj_get_child_by_name +func LvObjGetChildByName(parent *LvObjT, name_path *c.Char) *LvObjT + +//go:linkname LvObjGetIndex C.lv_obj_get_index +func LvObjGetIndex(obj *LvObjT) int32 + +//go:linkname LvObjGetIndexByType C.lv_obj_get_index_by_type +func LvObjGetIndexByType(obj *LvObjT, class_p *LvObjClassT) int32 + +//go:linkname LvObjTreeWalk C.lv_obj_tree_walk +func LvObjTreeWalk(start_obj *LvObjT, cb LvObjTreeWalkCbT, user_data unsafe.Pointer) + +//go:linkname LvObjDumpTree C.lv_obj_dump_tree +func LvObjDumpTree(start_obj *LvObjT) diff --git a/lvgl/core/lv_palette.go b/lvgl/core/lv_palette.go new file mode 100644 index 00000000..b361812a --- /dev/null +++ b/lvgl/core/lv_palette.go @@ -0,0 +1,44 @@ +package core + +import ( + _ "unsafe" + + "github.com/goplus/llgo/c" +) + +// LvPaletteT represents the color palette in LVGL +type LvPaletteT uint8 + +// Palette constants +const ( + LV_PALETTE_RED LvPaletteT = iota // Red palette + LV_PALETTE_PINK // Pink palette + LV_PALETTE_PURPLE // Purple palette + LV_PALETTE_DEEP_PURPLE // Deep purple palette + LV_PALETTE_INDIGO // Indigo palette + LV_PALETTE_BLUE // Blue palette + LV_PALETTE_LIGHT_BLUE // Light blue palette + LV_PALETTE_CYAN // Cyan palette + LV_PALETTE_TEAL // Teal palette + LV_PALETTE_GREEN // Green palette + LV_PALETTE_LIGHT_GREEN // Light green palette + LV_PALETTE_LIME // Lime palette + LV_PALETTE_YELLOW // Yellow palette + LV_PALETTE_AMBER // Amber palette + LV_PALETTE_ORANGE // Orange palette + LV_PALETTE_DEEP_ORANGE // Deep orange palette + LV_PALETTE_BROWN // Brown palette + LV_PALETTE_BLUE_GREY // Blue grey palette + LV_PALETTE_GREY // Grey palette + LV_PALETTE_LAST // Last palette (for iteration) + LV_PALETTE_NONE LvPaletteT = 0xff // No palette +) + +//go:linkname LvPaletteMain C.lv_palette_main +func LvPaletteMain(p LvPaletteT) LvColorT + +//go:linkname LvPaletteLighten C.lv_palette_lighten +func LvPaletteLighten(p LvPaletteT, lvl c.Uint8T) LvColorT + +//go:linkname LvPaletteDarken C.lv_palette_darken +func LvPaletteDarken(p LvPaletteT, lvl c.Uint8T) LvColorT diff --git a/lvgl/core/lv_style.go b/lvgl/core/lv_style.go new file mode 100644 index 00000000..d99f82fc --- /dev/null +++ b/lvgl/core/lv_style.go @@ -0,0 +1,71 @@ +package core + +import ( + _ "unsafe" + + "github.com/goplus/llgo/c" +) + +const ( + LLGoFiles = "$(pkg-config --cflags lvgl): _warp/style.c" +) + +/** + * Initialize a style + * @param style pointer to a style to initialize + * @note Do not call `lv_style_init` on styles that already have some properties + * because this function won't free the used memory, just sets a default state for the style. + * In other words be sure to initialize styles only once! + */ +//go:linkname LvStyleInit C.lv_style_init +func LvStyleInit(style *LvStyleT) + +/** + * Clear all properties from a style and free all allocated memories. + * @param style pointer to a style + */ +//go:linkname LvStyleReset C.lv_style_reset +func LvStyleReset(style *LvStyleT) + +//go:linkname LvStyleCopy C.lv_style_copy +func LvStyleCopy(dst *LvStyleT, src *LvStyleT) + +//go:linkname LvStyleSetSize C.lv_style_set_size_inline +func LvStyleSetSize(style *LvStyleT, width c.Int32T, height c.Int32T) + +//go:linkname LvStyleSetPadAll C.lv_style_set_pad_all_inline +func LvStyleSetPadAll(style *LvStyleT, value c.Int32T) + +//go:linkname LvStyleSetPadHor C.lv_style_set_pad_hor_inline +func LvStyleSetPadHor(style *LvStyleT, value c.Int32T) + +//go:linkname LvStyleSetPadVer C.lv_style_set_pad_ver_inline +func LvStyleSetPadVer(style *LvStyleT, value c.Int32T) + +//go:linkname LvStyleSetPadGap C.lv_style_set_pad_gap_inline +func LvStyleSetPadGap(style *LvStyleT, value c.Int32T) + +//go:linkname LvStyleSetMarginHor C.lv_style_set_margin_hor_inline +func LvStyleSetMarginHor(style *LvStyleT, value c.Int32T) + +//go:linkname LvStyleSetMarginVer C.lv_style_set_margin_ver_inline +func LvStyleSetMarginVer(style *LvStyleT, value c.Int32T) + +//go:linkname LvStyleSetMarginAll C.lv_style_set_margin_all_inline +func LvStyleSetMarginAll(style *LvStyleT, value c.Int32T) + +//go:linkname LvStyleSetTransformScale C.lv_style_set_transform_scale_inline +func LvStyleSetTransformScale(style *LvStyleT, value c.Int32T) + +/** + * @brief Check if the style property has a specified behavioral flag. + * + * Do not pass multiple flags to this function as backwards-compatibility is not guaranteed + * for that. + * + * @param prop Property ID + * @param flag Flag + * @return true if the flag is set for this property + */ +//go:linkname LvStylePropHasFlag C.lv_style_prop_has_flag +func LvStylePropHasFlag(prop LvStylePropT, flag c.Uint8T) bool diff --git a/lvgl/core/lv_style_gen.go b/lvgl/core/lv_style_gen.go new file mode 100644 index 00000000..76f59c07 --- /dev/null +++ b/lvgl/core/lv_style_gen.go @@ -0,0 +1,302 @@ +package core + +import ( + "unsafe" + _ "unsafe" + + "github.com/goplus/llgo/c" +) + +//go:linkname LvStyleSetWidth C.lv_style_set_width +func LvStyleSetWidth(style *LvStyleT, value c.Int) + +//go:linkname LvStyleSetBgOpa C.lv_style_set_bg_opa +func LvStyleSetBgOpa(style *LvStyleT, value LvOpaT) + +//go:linkname LvStyleSetBgColor C.lv_style_set_bg_color +func LvStyleSetBgColor(style *LvStyleT, value LvColorT) + +//go:linkname LvStyleSetRadius C.lv_style_set_radius +func LvStyleSetRadius(style *LvStyleT, value c.Int) + +//go:linkname LvStyleSetPadRight C.lv_style_set_pad_right +func LvStyleSetPadRight(style *LvStyleT, value c.Int) + +//go:linkname LvStyleSetMinWidth C.lv_style_set_min_width +func LvStyleSetMinWidth(style *LvStyleT, value c.Int) + +//go:linkname LvStyleSetMaxWidth C.lv_style_set_max_width +func LvStyleSetMaxWidth(style *LvStyleT, value c.Int) + +//go:linkname LvStyleSetHeight C.lv_style_set_height +func LvStyleSetHeight(style *LvStyleT, value c.Int) + +//go:linkname LvStyleSetMinHeight C.lv_style_set_min_height +func LvStyleSetMinHeight(style *LvStyleT, value c.Int) + +//go:linkname LvStyleSetMaxHeight C.lv_style_set_max_height +func LvStyleSetMaxHeight(style *LvStyleT, value c.Int) + +//go:linkname LvStyleSetLength C.lv_style_set_length +func LvStyleSetLength(style *LvStyleT, value c.Int) + +//go:linkname LvStyleSetX C.lv_style_set_x +func LvStyleSetX(style *LvStyleT, value c.Int) + +//go:linkname LvStyleSetY C.lv_style_set_y +func LvStyleSetY(style *LvStyleT, value c.Int) + +//go:linkname LvStyleSetAlign C.lv_style_set_align +func LvStyleSetAlign(style *LvStyleT, value LvAlignT) + +//go:linkname LvStyleSetTransformWidth C.lv_style_set_transform_width +func LvStyleSetTransformWidth(style *LvStyleT, value c.Int) + +//go:linkname LvStyleSetTransformHeight C.lv_style_set_transform_height +func LvStyleSetTransformHeight(style *LvStyleT, value c.Int) + +//go:linkname LvStyleSetTranslateX C.lv_style_set_translate_x +func LvStyleSetTranslateX(style *LvStyleT, value c.Int) + +//go:linkname LvStyleSetTranslateY C.lv_style_set_translate_y +func LvStyleSetTranslateY(style *LvStyleT, value c.Int) + +//go:linkname LvStyleSetTranslateRadial C.lv_style_set_translate_radial +func LvStyleSetTranslateRadial(style *LvStyleT, value c.Int) + +//go:linkname LvStyleSetTransformScaleX C.lv_style_set_transform_scale_x +func LvStyleSetTransformScaleX(style *LvStyleT, value c.Int) + +//go:linkname LvStyleSetTransformScaleY C.lv_style_set_transform_scale_y +func LvStyleSetTransformScaleY(style *LvStyleT, value c.Int) + +//go:linkname LvStyleSetTransformRotation C.lv_style_set_transform_rotation +func LvStyleSetTransformRotation(style *LvStyleT, value c.Int) + +//go:linkname LvStyleSetTransformPivotX C.lv_style_set_transform_pivot_x +func LvStyleSetTransformPivotX(style *LvStyleT, value c.Int) + +//go:linkname LvStyleSetTransformPivotY C.lv_style_set_transform_pivot_y +func LvStyleSetTransformPivotY(style *LvStyleT, value c.Int) + +//go:linkname LvStyleSetTransformSkewX C.lv_style_set_transform_skew_x +func LvStyleSetTransformSkewX(style *LvStyleT, value c.Int) + +//go:linkname LvStyleSetTransformSkewY C.lv_style_set_transform_skew_y +func LvStyleSetTransformSkewY(style *LvStyleT, value c.Int) + +//go:linkname LvStyleSetPadTop C.lv_style_set_pad_top +func LvStyleSetPadTop(style *LvStyleT, value c.Int) + +//go:linkname LvStyleSetPadBottom C.lv_style_set_pad_bottom +func LvStyleSetPadBottom(style *LvStyleT, value c.Int) + +//go:linkname LvStyleSetPadLeft C.lv_style_set_pad_left +func LvStyleSetPadLeft(style *LvStyleT, value c.Int) + +//go:linkname LvStyleSetPadRow C.lv_style_set_pad_row +func LvStyleSetPadRow(style *LvStyleT, value c.Int) + +//go:linkname LvStyleSetPadColumn C.lv_style_set_pad_column +func LvStyleSetPadColumn(style *LvStyleT, value c.Int) + +//go:linkname LvStyleSetPadRadial C.lv_style_set_pad_radial +func LvStyleSetPadRadial(style *LvStyleT, value c.Int) + +//go:linkname LvStyleSetMarginTop C.lv_style_set_margin_top +func LvStyleSetMarginTop(style *LvStyleT, value c.Int) + +//go:linkname LvStyleSetMarginBottom C.lv_style_set_margin_bottom +func LvStyleSetMarginBottom(style *LvStyleT, value c.Int) + +//go:linkname LvStyleSetMarginLeft C.lv_style_set_margin_left +func LvStyleSetMarginLeft(style *LvStyleT, value c.Int) + +//go:linkname LvStyleSetMarginRight C.lv_style_set_margin_right +func LvStyleSetMarginRight(style *LvStyleT, value c.Int) + +//go:linkname LvStyleSetBgGradColor C.lv_style_set_bg_grad_color +func LvStyleSetBgGradColor(style *LvStyleT, value LvColorT) + +//go:linkname LvStyleSetBgGradDir C.lv_style_set_bg_grad_dir +func LvStyleSetBgGradDir(style *LvStyleT, value LvGradDirT) + +//go:linkname LvStyleSetBgMainStop C.lv_style_set_bg_main_stop +func LvStyleSetBgMainStop(style *LvStyleT, value c.Int) + +//go:linkname LvStyleSetBgGradStop C.lv_style_set_bg_grad_stop +func LvStyleSetBgGradStop(style *LvStyleT, value c.Int) + +//go:linkname LvStyleSetBgMainOpa C.lv_style_set_bg_main_opa +func LvStyleSetBgMainOpa(style *LvStyleT, value LvOpaT) + +//go:linkname LvStyleSetBgGradOpa C.lv_style_set_bg_grad_opa +func LvStyleSetBgGradOpa(style *LvStyleT, value LvOpaT) + +//go:linkname LvStyleSetBgGrad C.lv_style_set_bg_grad +func LvStyleSetBgGrad(style *LvStyleT, value *LvGradDscT) + +//go:linkname LvStyleSetBgImageSrc C.lv_style_set_bg_image_src +func LvStyleSetBgImageSrc(style *LvStyleT, value unsafe.Pointer) + +//go:linkname LvStyleSetBgImageOpa C.lv_style_set_bg_image_opa +func LvStyleSetBgImageOpa(style *LvStyleT, value LvOpaT) + +//go:linkname LvStyleSetBgImageRecolor C.lv_style_set_bg_image_recolor +func LvStyleSetBgImageRecolor(style *LvStyleT, value LvColorT) + +//go:linkname LvStyleSetBgImageRecolorOpa C.lv_style_set_bg_image_recolor_opa +func LvStyleSetBgImageRecolorOpa(style *LvStyleT, value LvOpaT) + +//go:linkname LvStyleSetBgImageTiled C.lv_style_set_bg_image_tiled +func LvStyleSetBgImageTiled(style *LvStyleT, value bool) + +//go:linkname LvStyleSetBorderColor C.lv_style_set_border_color +func LvStyleSetBorderColor(style *LvStyleT, value LvColorT) + +//go:linkname LvStyleSetBorderOpa C.lv_style_set_border_opa +func LvStyleSetBorderOpa(style *LvStyleT, value LvOpaT) + +//go:linkname LvStyleSetBorderWidth C.lv_style_set_border_width +func LvStyleSetBorderWidth(style *LvStyleT, value c.Int) + +//go:linkname LvStyleSetBorderSide C.lv_style_set_border_side +func LvStyleSetBorderSide(style *LvStyleT, value LvBorderSideT) + +//go:linkname LvStyleSetBorderPost C.lv_style_set_border_post +func LvStyleSetBorderPost(style *LvStyleT, value bool) + +//go:linkname LvStyleSetOutlineWidth C.lv_style_set_outline_width +func LvStyleSetOutlineWidth(style *LvStyleT, value c.Int) + +//go:linkname LvStyleSetOutlineColor C.lv_style_set_outline_color +func LvStyleSetOutlineColor(style *LvStyleT, value LvColorT) + +//go:linkname LvStyleSetOutlineOpa C.lv_style_set_outline_opa +func LvStyleSetOutlineOpa(style *LvStyleT, value LvOpaT) + +//go:linkname LvStyleSetOutlinePad C.lv_style_set_outline_pad +func LvStyleSetOutlinePad(style *LvStyleT, value c.Int) + +//go:linkname LvStyleSetShadowWidth C.lv_style_set_shadow_width +func LvStyleSetShadowWidth(style *LvStyleT, value c.Int) + +//go:linkname LvStyleSetShadowOffsetX C.lv_style_set_shadow_offset_x +func LvStyleSetShadowOffsetX(style *LvStyleT, value c.Int) + +//go:linkname LvStyleSetShadowOffsetY C.lv_style_set_shadow_offset_y +func LvStyleSetShadowOffsetY(style *LvStyleT, value c.Int) + +//go:linkname LvStyleSetShadowSpread C.lv_style_set_shadow_spread +func LvStyleSetShadowSpread(style *LvStyleT, value c.Int) + +//go:linkname LvStyleSetShadowColor C.lv_style_set_shadow_color +func LvStyleSetShadowColor(style *LvStyleT, value LvColorT) + +//go:linkname LvStyleSetShadowOpa C.lv_style_set_shadow_opa +func LvStyleSetShadowOpa(style *LvStyleT, value LvOpaT) + +//go:linkname LvStyleSetImageOpa C.lv_style_set_image_opa +func LvStyleSetImageOpa(style *LvStyleT, value LvOpaT) + +//go:linkname LvStyleSetImageRecolor C.lv_style_set_image_recolor +func LvStyleSetImageRecolor(style *LvStyleT, value LvColorT) + +//go:linkname LvStyleSetImageRecolorOpa C.lv_style_set_image_recolor_opa +func LvStyleSetImageRecolorOpa(style *LvStyleT, value LvOpaT) + +//go:linkname LvStyleSetLineWidth C.lv_style_set_line_width +func LvStyleSetLineWidth(style *LvStyleT, value c.Int) + +//go:linkname LvStyleSetLineDashWidth C.lv_style_set_line_dash_width +func LvStyleSetLineDashWidth(style *LvStyleT, value c.Int) + +//go:linkname LvStyleSetLineDashGap C.lv_style_set_line_dash_gap +func LvStyleSetLineDashGap(style *LvStyleT, value c.Int) + +//go:linkname LvStyleSetLineRounded C.lv_style_set_line_rounded +func LvStyleSetLineRounded(style *LvStyleT, value bool) + +//go:linkname LvStyleSetLineColor C.lv_style_set_line_color +func LvStyleSetLineColor(style *LvStyleT, value LvColorT) + +//go:linkname LvStyleSetLineOpa C.lv_style_set_line_opa +func LvStyleSetLineOpa(style *LvStyleT, value LvOpaT) + +//go:linkname LvStyleSetArcWidth C.lv_style_set_arc_width +func LvStyleSetArcWidth(style *LvStyleT, value c.Int) + +//go:linkname LvStyleSetArcRounded C.lv_style_set_arc_rounded +func LvStyleSetArcRounded(style *LvStyleT, value bool) + +//go:linkname LvStyleSetArcColor C.lv_style_set_arc_color +func LvStyleSetArcColor(style *LvStyleT, value LvColorT) + +//go:linkname LvStyleSetArcOpa C.lv_style_set_arc_opa +func LvStyleSetArcOpa(style *LvStyleT, value LvOpaT) + +//go:linkname LvStyleSetArcImageSrc C.lv_style_set_arc_image_src +func LvStyleSetArcImageSrc(style *LvStyleT, value unsafe.Pointer) + +//go:linkname LvStyleSetTextColor C.lv_style_set_text_color +func LvStyleSetTextColor(style *LvStyleT, value LvColorT) + +//go:linkname LvStyleSetTextOpa C.lv_style_set_text_opa +func LvStyleSetTextOpa(style *LvStyleT, value LvOpaT) + +//go:linkname LvStyleSetTextFont C.lv_style_set_text_font +func LvStyleSetTextFont(style *LvStyleT, value *LvFontT) + +//go:linkname LvStyleSetTextLetterSpace C.lv_style_set_text_letter_space +func LvStyleSetTextLetterSpace(style *LvStyleT, value c.Int) + +//go:linkname LvStyleSetTextLineSpace C.lv_style_set_text_line_space +func LvStyleSetTextLineSpace(style *LvStyleT, value c.Int) + +//go:linkname LvStyleSetTextDecor C.lv_style_set_text_decor +func LvStyleSetTextDecor(style *LvStyleT, value LvTextDecorT) + +//go:linkname LvStyleSetTextAlign C.lv_style_set_text_align +func LvStyleSetTextAlign(style *LvStyleT, value LvTextAlignT) + +//go:linkname LvStyleSetRadialOffset C.lv_style_set_radial_offset +func LvStyleSetRadialOffset(style *LvStyleT, value c.Int) + +//go:linkname LvStyleSetClipCorner C.lv_style_set_clip_corner +func LvStyleSetClipCorner(style *LvStyleT, value bool) + +//go:linkname LvStyleSetOpa C.lv_style_set_opa +func LvStyleSetOpa(style *LvStyleT, value LvOpaT) + +//go:linkname LvStyleSetOpaLayered C.lv_style_set_opa_layered +func LvStyleSetOpaLayered(style *LvStyleT, value LvOpaT) + +//go:linkname LvStyleSetColorFilterDsc C.lv_style_set_color_filter_dsc +func LvStyleSetColorFilterDsc(style *LvStyleT, value *LvColorFilterDscT) + +//go:linkname LvStyleSetColorFilterOpa C.lv_style_set_color_filter_opa +func LvStyleSetColorFilterOpa(style *LvStyleT, value LvOpaT) + +//go:linkname LvStyleSetAnim C.lv_style_set_anim +func LvStyleSetAnim(style *LvStyleT, value *LvAnimT) + +//go:linkname LvStyleSetAnimDuration C.lv_style_set_anim_duration +func LvStyleSetAnimDuration(style *LvStyleT, value c.Uint) + +//go:linkname LvStyleSetTransition C.lv_style_set_transition +func LvStyleSetTransition(style *LvStyleT, value *LvStyleTransitionDscT) + +//go:linkname LvStyleSetBlendMode C.lv_style_set_blend_mode +func LvStyleSetBlendMode(style *LvStyleT, value LvBlendModeT) + +//go:linkname LvStyleSetLayout C.lv_style_set_layout +func LvStyleSetLayout(style *LvStyleT, value c.Int16T) + +//go:linkname LvStyleSetBaseDir C.lv_style_set_base_dir +func LvStyleSetBaseDir(style *LvStyleT, value LvBaseDirT) + +//go:linkname LvStyleSetBitmapMaskSrc C.lv_style_set_bitmap_mask_src +func LvStyleSetBitmapMaskSrc(style *LvStyleT, value *c.Void) + +//go:linkname LvStyleSetRotarySensitivity C.lv_style_set_rotary_sensitivity +func LvStyleSetRotarySensitivity(style *LvStyleT, value c.Int16T) diff --git a/lvgl/core/lv_timer.go b/lvgl/core/lv_timer.go new file mode 100644 index 00000000..0904e4af --- /dev/null +++ b/lvgl/core/lv_timer.go @@ -0,0 +1,87 @@ +package core + +import ( + "unsafe" + _ "unsafe" + + "github.com/goplus/llgo/c" +) + +// LV_NO_TIMER_READY defines the value indicating no timer is ready +const LV_NO_TIMER_READY = 0xFFFFFFFF + +// LvTimerCbT represents the timer callback function type +// +//llgo:type C +type LvTimerCbT func(*LvTimerT) + +// LvTimerHandlerResumeCbT represents the timer handler resume callback function type +// +//llgo:type C +type LvTimerHandlerResumeCbT func(*c.Void) + +//go:linkname LvTimerHandler C.lv_timer_handler +func LvTimerHandler() c.Uint32T + +//go:linkname LvTimerHandlerRunInPeriod C.lv_timer_handler_run_in_period +func LvTimerHandlerRunInPeriod(period c.Uint32T) c.Uint32T + +//go:linkname LvTimerPeriodicHandler C.lv_timer_periodic_handler +func LvTimerPeriodicHandler() + +//go:linkname LvTimerHandlerSetResumeCb C.lv_timer_handler_set_resume_cb +func LvTimerHandlerSetResumeCb(cb LvTimerHandlerResumeCbT, data unsafe.Pointer) + +//go:linkname LvTimerCreateBasic C.lv_timer_create_basic +func LvTimerCreateBasic() *LvTimerT + +//go:linkname LvTimerCreate C.lv_timer_create +func LvTimerCreate(timerXcb LvTimerCbT, period c.Uint32T, userData unsafe.Pointer) *LvTimerT + +//go:linkname LvTimerDelete C.lv_timer_delete +func LvTimerDelete(timer *LvTimerT) + +//go:linkname LvTimerPause C.lv_timer_pause +func LvTimerPause(timer *LvTimerT) + +//go:linkname LvTimerResume C.lv_timer_resume +func LvTimerResume(timer *LvTimerT) + +//go:linkname LvTimerSetCb C.lv_timer_set_cb +func LvTimerSetCb(timer *LvTimerT, timerCb LvTimerCbT) + +//go:linkname LvTimerSetPeriod C.lv_timer_set_period +func LvTimerSetPeriod(timer *LvTimerT, period c.Uint32T) + +//go:linkname LvTimerReady C.lv_timer_ready +func LvTimerReady(timer *LvTimerT) + +//go:linkname LvTimerSetRepeatCount C.lv_timer_set_repeat_count +func LvTimerSetRepeatCount(timer *LvTimerT, repeatCount c.Int32T) + +//go:linkname LvTimerSetAutoDelete C.lv_timer_set_auto_delete +func LvTimerSetAutoDelete(timer *LvTimerT, autoDelete c.Char) + +//go:linkname LvTimerSetUserData C.lv_timer_set_user_data +func LvTimerSetUserData(timer *LvTimerT, userData unsafe.Pointer) + +//go:linkname LvTimerReset C.lv_timer_reset +func LvTimerReset(timer *LvTimerT) + +//go:linkname LvTimerEnable C.lv_timer_enable +func LvTimerEnable(en c.Char) + +//go:linkname LvTimerGetIdle C.lv_timer_get_idle +func LvTimerGetIdle() c.Uint32T + +//go:linkname LvTimerGetTimeUntilNext C.lv_timer_get_time_until_next +func LvTimerGetTimeUntilNext() c.Uint32T + +//go:linkname LvTimerGetNext C.lv_timer_get_next +func LvTimerGetNext(timer *LvTimerT) *LvTimerT + +//go:linkname LvTimerGetUserData C.lv_timer_get_user_data +func LvTimerGetUserData(timer *LvTimerT) unsafe.Pointer + +//go:linkname LvTimerGetPaused C.lv_timer_get_paused +func LvTimerGetPaused(timer *LvTimerT) c.Char diff --git a/lvgl/core/lv_type.go b/lvgl/core/lv_type.go new file mode 100644 index 00000000..bbaff7d5 --- /dev/null +++ b/lvgl/core/lv_type.go @@ -0,0 +1,553 @@ +package core + +import ( + "fmt" + _ "unsafe" + + "github.com/goplus/llgo/c" +) + +// #if LV_USE_FLOAT +//type lv_value_precise_t c.Float + +// #else +type LvValuePreciseT c.Int + +// #endif + +/** + * LVGL error codes. + */ + +type LvResultT c.Int + +const ( + LV_RESULT_INVALID LvResultT = 0 /*Typically indicates that the object is deleted (become invalid) in the action + function or an operation was failed*/ + LV_RESULT_OK LvResultT = 1 /*The object is valid (no deleted) after the action*/ +) + +type LvOpaT c.Int + +const ( + LV_OPA_TRANSP LvOpaT = 0 + LV_OPA_0 LvOpaT = 0 + LV_OPA_10 LvOpaT = 25 + LV_OPA_20 LvOpaT = 51 + LV_OPA_30 LvOpaT = 76 + LV_OPA_40 LvOpaT = 102 + LV_OPA_50 LvOpaT = 127 + LV_OPA_60 LvOpaT = 153 + LV_OPA_70 LvOpaT = 178 + LV_OPA_80 LvOpaT = 204 + LV_OPA_90 LvOpaT = 229 + LV_OPA_100 LvOpaT = 255 + LV_OPA_COVER LvOpaT = 255 +) + +const ( + LV_OPA_MIN LvOpaT = 2 + LV_OPA_MAX LvOpaT = 253 +) + +type LvRadiusT c.Int32T + +const ( + LV_RADIUS_CIRCLE LvRadiusT = 0x7FFF +) + +//llgo:type C +type LvStyleTransitionDscT struct { + Unused [0]byte +} + +//llgo:type C +type LvColorFilterDscT struct { + Unused [0]byte +} + +// **渐变描述结构 (lv_grad_dsc_t)** +const ( + LV_GRADIENT_MAX_STOPS = 2 +) + +// **渐变停止点 (lv_grad_stop_t)** +// +//llgo:type C +type LvGradStopT struct { + Color LvColorT // 颜色 + Opa LvOpaT // 透明度 + Frac uint8 // 停止点位置(0-255) +} + +// **渐变方向枚举 (lv_grad_dir_t)** +type LvGradDirT uint8 + +const ( + LV_GRAD_DIR_NONE LvGradDirT = iota // 无渐变 + LV_GRAD_DIR_VER // 垂直渐变 + LV_GRAD_DIR_HOR // 水平渐变 + LV_GRAD_DIR_LINEAR // 线性渐变 + LV_GRAD_DIR_RADIAL // 放射渐变 + LV_GRAD_DIR_CONICAL // 锥形渐变 +) + +// **渐变超出范围时的行为 (lv_grad_extend_t)** +type LvGradExtendT uint8 + +const ( + LV_GRAD_EXTEND_PAD LvGradExtendT = iota // 保持最后的颜色 + LV_GRAD_EXTEND_REPEAT // 重复渐变模式 + LV_GRAD_EXTEND_REFLECT // 反射渐变模式 +) + +//llgo:type C +type LvGradDscT struct { + Stops [LV_GRADIENT_MAX_STOPS]LvGradStopT // 渐变停止点数组 + StopsCount uint8 // 渐变点数量 + Flags uint8 // 低 4 位存储 dir,高 3 位存储 extend + //State unsafe.Pointer // 指针,存储额外状态(如果有的话) +} + +// **设置 dir(低 4 位)** +func (d *LvGradDscT) SetDir(dir LvGradDirT) { + fmt.Println("Setting dir:", dir) + d.Flags = (d.Flags & 0xF0) | (uint8(dir) & 0x0F) +} + +// **获取 dir(低 4 位)** +func (d *LvGradDscT) GetDir() LvGradDirT { + return LvGradDirT(d.Flags & 0x0F) +} + +// **设置 extend(高 3 位,5-7 位)** +func (d *LvGradDscT) SetExtend(extend LvGradExtendT) { + d.Flags = (d.Flags & 0x8F) | ((uint8(extend) & 0x07) << 4) +} + +// **获取 extend(高 3 位,5-7 位)** +func (d *LvGradDscT) GetExtend() LvGradExtendT { + return LvGradExtendT((d.Flags >> 4) & 0x07) +} + +//llgo:type C +type LvFontT struct { + Unused [0]byte +} + +//llgo:type C +type LvObjT struct { + Unused [0]byte +} + +//llgo:type C +type LvObjClassT struct { + Unused [0]byte +} + +//llgo:type C +type LvStateT c.Uint16T + +//llgo:type C +type LvGroupT struct { + Unused [0]byte +} + +type LvCoverResT c.Int + +const ( + LV_COVER_RES_COVER LvCoverResT = 0 + LV_COVER_RES_NOT_COVER LvCoverResT = 1 + LV_COVER_RES_MASKED LvCoverResT = 2 +) + +//llgo:type C +type LvIndevT struct { + Unused [0]byte +} + +//llgo:type C +type LvLayerT struct { + Unused [0]byte +} + +//llgo:type C +type LvAreaT struct { + Unused [0]byte +} + +//llgo:type C +type LvPointT struct { + X c.Int32T + Y c.Int32T +} + +//llgo:type C +type LvHitTestInfoT struct { + Unused [0]byte +} + +//llgo:type C +type LvDrawTaskT struct { + Unused [0]byte +} + +type LvObjPointTransformFlagT c.Int + +const ( + LV_OBJ_POINT_TRANSFORM_FLAG_NONE LvObjPointTransformFlagT = 0x00 + LV_OBJ_POINT_TRANSFORM_FLAG_RECURSIVE LvObjPointTransformFlagT = 0x01 + LV_OBJ_POINT_TRANSFORM_FLAG_INVERSE LvObjPointTransformFlagT = 0x02 + LV_OBJ_POINT_TRANSFORM_FLAG_INVERSE_RECURSIVE LvObjPointTransformFlagT = 0x03 +) + +//llgo:type C +type LvMatrixT struct { + Unused [0]byte +} + +//llgo:type +type LvStyleT struct { + // Unused [0]byte + + // #if LV_USE_ASSERT_STYLE + // uint32_t sentinel; + // #endif + + ValuesAndProps *c.Void + + HasGroup c.Uint + PropCnt c.Uint +} + +type LvStyleStateCmpT c.Int + +const ( + LV_STYLE_STATE_CMP_SAME LvStyleStateCmpT = iota + LV_STYLE_STATE_CMP_DIFF_REDRAW + LV_STYLE_STATE_CMP_DIFF_DRAW_PAD + LV_STYLE_STATE_CMP_DIFF_LAYOUT +) + +type LvStyleSelectorT c.Uint + +type LvAlignT c.Int + +const ( + LV_ALIGN_DEFAULT LvAlignT = iota + LV_ALIGN_TOP_LEFT + LV_ALIGN_TOP_MID + LV_ALIGN_TOP_RIGHT + LV_ALIGN_BOTTOM_LEFT + LV_ALIGN_BOTTOM_MID + LV_ALIGN_BOTTOM_RIGHT + LV_ALIGN_LEFT_MID + LV_ALIGN_RIGHT_MID + LV_ALIGN_CENTER + LV_ALIGN_OUT_TOP_LEFT + LV_ALIGN_OUT_TOP_MID + LV_ALIGN_OUT_TOP_RIGHT + LV_ALIGN_OUT_BOTTOM_LEFT + LV_ALIGN_OUT_BOTTOM_MID + LV_ALIGN_OUT_BOTTOM_RIGHT + LV_ALIGN_OUT_LEFT_TOP + LV_ALIGN_OUT_LEFT_MID + LV_ALIGN_OUT_LEFT_BOTTOM + LV_ALIGN_OUT_RIGHT_TOP + LV_ALIGN_OUT_RIGHT_MID + LV_ALIGN_OUT_RIGHT_BOTTOM +) + +// llgo:type C +type LvColorT struct { + Blue c.Uint + Green c.Uint + Red c.Uint +} + +// lv_color16_t LVGL(LittleVGL),lv_color16_t 就是用来存储 RGB565 颜色的结构体, +// +//llgo:type C +type LvColor16T struct { + Unused [0]byte +} + +//llgo:type C +type LvColor32T struct { + Blue c.Uint + Green c.Uint + Red c.Uint + Alpha c.Uint +} + +//llgo:type C +type LvColorHsvT struct { + Hue c.Uint + Saturation c.Uint + Value c.Uint +} + +//llgo:type C +type LvColor16aT struct { + Luminance c.Uint + Alpha c.Uint +} + +type LvBorderSideT c.Int + +/** + * Selects on which sides border should be drawn + * 'OR'ed values can be used. + */ +const ( + LV_BORDER_SIDE_NONE LvBorderSideT = 0x00 + LV_BORDER_SIDE_BOTTOM LvBorderSideT = 0x01 + LV_BORDER_SIDE_TOP LvBorderSideT = 0x02 + LV_BORDER_SIDE_LEFT LvBorderSideT = 0x04 + LV_BORDER_SIDE_RIGHT LvBorderSideT = 0x08 + LV_BORDER_SIDE_FULL LvBorderSideT = 0x0F + LV_BORDER_SIDE_INTERNAL LvBorderSideT = 0x10 /**< FOR matrix-like objects (e.g. Button matrix)*/ +) + +type LvTextDecorT c.Int + +/** + * Some options to apply decorations on texts. + * 'OR'ed values can be used. + */ +const ( + LV_TEXT_DECOR_NONE LvTextDecorT = 0x00 + LV_TEXT_DECOR_UNDERLINE LvTextDecorT = 0x01 + LV_TEXT_DECOR_STRIKETHROUGH LvTextDecorT = 0x02 +) + +type LvTextAlignT c.Int + +/** Label align policy*/ +const ( + LV_TEXT_ALIGN_AUTO LvTextAlignT = 0x00 + LV_TEXT_ALIGN_LEFT LvTextAlignT = 0x01 + LV_TEXT_ALIGN_CENTER LvTextAlignT = 0x02 + LV_TEXT_ALIGN_RIGHT LvTextAlignT = 0x03 +) + +type LvBlendModeT c.Int + +/** + * Possible options for blending opaque drawings + */ +const ( + LV_BLEND_MODE_NORMAL LvBlendModeT = 0x00 + LV_BLEND_MODE_ADDITIVE LvBlendModeT = 0x01 + LV_BLEND_MODE_SUBTRACTIVE LvBlendModeT = 0x02 + LV_BLEND_MODE_MULTIPLY LvBlendModeT = 0x03 + LV_BLEND_MODE_DIFFERENCE LvBlendModeT = 0x04 +) + +type LvBaseDirT c.Int + +const ( + LV_BASE_DIR_LTR LvBaseDirT = 0x00 + LV_BASE_DIR_RTL LvBaseDirT = 0x01 + LV_BASE_DIR_AUTO LvBaseDirT = 0x02 + + LV_BASE_DIR_NEUTRAL LvBaseDirT = 0x20 + LV_BASE_DIR_WEAK LvBaseDirT = 0x21 +) + +//llgo:type C +type LvStyleValueT struct { + Unused [0]byte +} + +//llgo:type C +type LvStylePropT struct { + Unused [0]byte +} + +//llgo:type C +type LvPartT struct { + Unused [0]byte +} + +//llgo:type C +type LvStyleResT struct { + Unused [0]byte +} + +//llgo:type C +type LvDrawBufT struct { + Unused [0]byte +} + +type LvColorFormatT c.Int + +const ( + LV_COLOR_FORMAT_UNKNOWN LvColorFormatT = 0 + + LV_COLOR_FORMAT_RAW LvColorFormatT = 0x01 + LV_COLOR_FORMAT_RAW_ALPHA LvColorFormatT = 0x02 + + /*<=1 byte (+alpha) formats*/ + LV_COLOR_FORMAT_L8 LvColorFormatT = 0x06 + LV_COLOR_FORMAT_I1 LvColorFormatT = 0x07 + LV_COLOR_FORMAT_I2 LvColorFormatT = 0x08 + LV_COLOR_FORMAT_I4 LvColorFormatT = 0x09 + LV_COLOR_FORMAT_I8 LvColorFormatT = 0x0A + LV_COLOR_FORMAT_A8 LvColorFormatT = 0x0E + + /*2 byte (+alpha) formats*/ + LV_COLOR_FORMAT_RGB565 LvColorFormatT = 0x12 + LV_COLOR_FORMAT_ARGB8565 LvColorFormatT = 0x13 + LV_COLOR_FORMAT_RGB565A8 LvColorFormatT = 0x14 + LV_COLOR_FORMAT_AL88 LvColorFormatT = 0x15 + + /*3 byte (+alpha) formats*/ + LV_COLOR_FORMAT_RGB888 LvColorFormatT = 0x0F + LV_COLOR_FORMAT_ARGB8888 LvColorFormatT = 0x10 + LV_COLOR_FORMAT_XRGB8888 LvColorFormatT = 0x11 + + /*Formats not supported by software renderer but kept here so GPU can use it*/ + LV_COLOR_FORMAT_A1 LvColorFormatT = 0x0B + LV_COLOR_FORMAT_A2 LvColorFormatT = 0x0C + LV_COLOR_FORMAT_A4 LvColorFormatT = 0x0D + LV_COLOR_FORMAT_ARGB1555 LvColorFormatT = 0x16 + LV_COLOR_FORMAT_ARGB4444 LvColorFormatT = 0x17 + LV_COLOR_FORMAT_ARGB2222 LvColorFormatT = 0x18 + + /* reference to https://wiki.videolan.org/YUV/ */ + /*YUV planar formats*/ + LV_COLOR_FORMAT_YUV_START LvColorFormatT = 0x20 + LV_COLOR_FORMAT_I420 LvColorFormatT = LV_COLOR_FORMAT_YUV_START /*YUV420 planar(3 plane)*/ + LV_COLOR_FORMAT_I422 LvColorFormatT = 0x21 /*YUV422 planar(3 plane)*/ + LV_COLOR_FORMAT_I444 LvColorFormatT = 0x22 /*YUV444 planar(3 plane)*/ + LV_COLOR_FORMAT_I400 LvColorFormatT = 0x23 /*YUV400 no chroma channel*/ + LV_COLOR_FORMAT_NV21 LvColorFormatT = 0x24 /*YUV420 planar(2 plane), UV plane in 'V, U, V, U'*/ + LV_COLOR_FORMAT_NV12 LvColorFormatT = 0x25 /*YUV420 planar(2 plane), UV plane in 'U, V, U, V'*/ + + /*YUV packed formats*/ + LV_COLOR_FORMAT_YUY2 LvColorFormatT = 0x26 /*YUV422 packed like 'Y U Y V'*/ + LV_COLOR_FORMAT_UYVY LvColorFormatT = 0x27 /*YUV422 packed like 'U Y V Y'*/ + + LV_COLOR_FORMAT_YUV_END LvColorFormatT = LV_COLOR_FORMAT_UYVY + + LV_COLOR_FORMAT_PROPRIETARY_START LvColorFormatT = 0x30 + + LV_COLOR_FORMAT_NEMA_TSC_START LvColorFormatT = LV_COLOR_FORMAT_PROPRIETARY_START + LV_COLOR_FORMAT_NEMA_TSC4 LvColorFormatT = LV_COLOR_FORMAT_NEMA_TSC_START + LV_COLOR_FORMAT_NEMA_TSC6 LvColorFormatT = 0x31 + LV_COLOR_FORMAT_NEMA_TSC6A LvColorFormatT = 0x32 + LV_COLOR_FORMAT_NEMA_TSC6AP LvColorFormatT = 0x33 + LV_COLOR_FORMAT_NEMA_TSC12 LvColorFormatT = 0x34 + LV_COLOR_FORMAT_NEMA_TSC12A LvColorFormatT = 0x35 + LV_COLOR_FORMAT_NEMA_TSC_END LvColorFormatT = LV_COLOR_FORMAT_NEMA_TSC12A + + // /*Color formats in which LVGL can render*/ + // #if LV_COLOR_DEPTH == 1 + // LV_COLOR_FORMAT_NATIVE lv_color_format_t = LV_COLOR_FORMAT_I1 + // LV_COLOR_FORMAT_NATIVE_WITH_ALPHA lv_color_format_t = LV_COLOR_FORMAT_I1 + // // #elif LV_COLOR_DEPTH == 8 + // LV_COLOR_FORMAT_NATIVE lv_color_format_t = LV_COLOR_FORMAT_L8 + // LV_COLOR_FORMAT_NATIVE_WITH_ALPHA lv_color_format_t = LV_COLOR_FORMAT_AL88 + // // #elif LV_COLOR_DEPTH == 16 + LV_COLOR_FORMAT_NATIVE LvColorFormatT = LV_COLOR_FORMAT_RGB565 + LV_COLOR_FORMAT_NATIVE_WITH_ALPHA LvColorFormatT = LV_COLOR_FORMAT_RGB565A8 + // #elif LV_COLOR_DEPTH == 24 + // LV_COLOR_FORMAT_NATIVE = LV_COLOR_FORMAT_RGB888, + // LV_COLOR_FORMAT_NATIVE_WITH_ALPHA = LV_COLOR_FORMAT_ARGB8888, +// // #elif LV_COLOR_DEPTH == 32 +// LV_COLOR_FORMAT_NATIVE lv_color_format_t = LV_COLOR_FORMAT_XRGB8888 +// LV_COLOR_FORMAT_NATIVE_WITH_ALPHA lv_color_format_t = LV_COLOR_FORMAT_ARGB8888 +// #else +// #error "LV_COLOR_DEPTH should be 1, 8, 16, 24 or 32" +// #endif + +) + +//llgo:type C +type LvChartSeriesT struct { + Unused [0]byte +} + +//llgo:type C +type LvChartCursorT struct { + Unused [0]byte +} + +type LvDirT c.Int + +const ( + LV_DIR_NONE LvDirT = 0x00 + LV_DIR_LEFT LvDirT = (1 << 0) + LV_DIR_RIGHT LvDirT = (1 << 1) + LV_DIR_TOP LvDirT = (1 << 2) + LV_DIR_BOTTOM LvDirT = (1 << 3) + LV_DIR_HOR LvDirT = LV_DIR_LEFT | LV_DIR_RIGHT + LV_DIR_VER LvDirT = LV_DIR_TOP | LV_DIR_BOTTOM + LV_DIR_ALL LvDirT = LV_DIR_HOR | LV_DIR_VER +) + +type LvAnimEnableT c.Char + +//llgo:type C +type LvPointPreciseT struct { + X LvValuePreciseT + Y LvValuePreciseT +} + +//llgo:type C +type LvDisplayT struct { + Unused [0]byte +} + +//llgo:type C +type LvThemeT struct { + Unused [0]byte +} + +//llgo:type C +type LvTimerT struct { + Unused [0]byte +} + +type LvGridAlignT c.Int + +const ( + LV_GRID_ALIGN_START LvGridAlignT = iota + LV_GRID_ALIGN_CENTER + LV_GRID_ALIGN_END + LV_GRID_ALIGN_STRETCH + LV_GRID_ALIGN_SPACE_EVENLY + LV_GRID_ALIGN_SPACE_AROUND + LV_GRID_ALIGN_SPACE_BETWEEN +) + +const ( + LV_FLEX_COLUMN = 1 << 0 + LV_FLEX_WRAP = 1 << 2 + LV_FLEX_REVERSE = 1 << 3 +) + +type LvFlexAlignT c.Int + +const ( + LV_FLEX_ALIGN_START LvFlexAlignT = iota + LV_FLEX_ALIGN_END + LV_FLEX_ALIGN_CENTER + LV_FLEX_ALIGN_SPACE_EVENLY + LV_FLEX_ALIGN_SPACE_AROUND + LV_FLEX_ALIGN_SPACE_BETWEEN +) + +type LvFlexFlowT c.Int + +const ( + LV_FLEX_FLOW_ROW LvFlexFlowT = 0x00 + LV_FLEX_FLOW_COLUMN LvFlexFlowT = LV_FLEX_COLUMN + LV_FLEX_FLOW_ROW_WRAP LvFlexFlowT = LV_FLEX_FLOW_ROW | LV_FLEX_WRAP + LV_FLEX_FLOW_ROW_REVERSE LvFlexFlowT = LV_FLEX_FLOW_ROW | LV_FLEX_REVERSE + LV_FLEX_FLOW_ROW_WRAP_REVERSE LvFlexFlowT = LV_FLEX_FLOW_ROW | LV_FLEX_WRAP | LV_FLEX_REVERSE + LV_FLEX_FLOW_COLUMN_WRAP LvFlexFlowT = LV_FLEX_FLOW_COLUMN | LV_FLEX_WRAP + LV_FLEX_FLOW_COLUMN_REVERSE LvFlexFlowT = LV_FLEX_FLOW_COLUMN | LV_FLEX_REVERSE + LV_FLEX_FLOW_COLUMN_WRAP_REVERSE LvFlexFlowT = LV_FLEX_FLOW_COLUMN | LV_FLEX_WRAP | LV_FLEX_REVERSE +) diff --git a/lvgl/core/lv_type_img.go b/lvgl/core/lv_type_img.go new file mode 100644 index 00000000..00b1e939 --- /dev/null +++ b/lvgl/core/lv_type_img.go @@ -0,0 +1,32 @@ +package core + +import ( + _ "unsafe" + + "github.com/goplus/llgo/c" +) + +// lv_image_header_t 结构体(使用 uint32 存储位域信息) +// +//llgo:type C +type LvImageHeaderT struct { + Magic uint8 // 魔数. 必须为 LV_IMAGE_HEADER_MAGIC + CF uint8 // 颜色格式: 见 `lv_color_format_t` + Flags uint16 // 图片标志, 见 `lv_image_flags_t` + + Width uint16 // 宽度 + Height uint16 // 高度 + Stride uint16 // 行字节数 + Reserved uint16 // 保留字段 + +} + +// **lv_image_dsc_t 结构体** +// +//llgo:type C +type LvImageDscT struct { + Header LvImageHeaderT // 图片基本信息 + DataSize c.Uint32T // 图片数据大小(字节) + Data *c.Char // 指向图片数据的指针 + Reserved [0]byte // 预留字段(保持与 C 结构体大小一致) +} diff --git a/lvgl/display/display.go b/lvgl/display/display.go new file mode 100644 index 00000000..8c392c1d --- /dev/null +++ b/lvgl/display/display.go @@ -0,0 +1,240 @@ +package display + +import ( + "unsafe" + _ "unsafe" + + "github.com/goplus/llgo/c" + core "github.com/goplus/llpkg/lvgl/core" +) + +/** + * Get the active screen of the default display + * @return pointer to the active screen + */ +//lv_obj_t * lv_screen_active(void); +// +//go:linkname LvScreenActive C.lv_screen_active +func LvScreenActive() *core.LvObjT + +//go:linkname LvDisplayCreate C.lv_display_create +func LvDisplayCreate(horRes c.Int32T, verRes c.Int32T) *core.LvDisplayT + +//go:linkname LvDisplayDelete C.lv_display_delete +func LvDisplayDelete(disp *core.LvDisplayT) + +//go:linkname LvDisplaySetDefault C.lv_display_set_default +func LvDisplaySetDefault(disp *core.LvDisplayT) + +//go:linkname LvDisplayGetDefault C.lv_display_get_default +func LvDisplayGetDefault() *core.LvDisplayT + +//go:linkname LvDisplayGetNext C.lv_display_get_next +func LvDisplayGetNext(disp *core.LvDisplayT) *core.LvDisplayT + +//go:linkname LvDisplaySetResolution C.lv_display_set_resolution +func LvDisplaySetResolution(disp *core.LvDisplayT, horRes c.Int32T, verRes c.Int32T) + +//go:linkname LvDisplaySetPhysicalResolution C.lv_display_set_physical_resolution +func LvDisplaySetPhysicalResolution(disp *core.LvDisplayT, horRes c.Int32T, verRes c.Int32T) + +//go:linkname LvDisplaySetOffset C.lv_display_set_offset +func LvDisplaySetOffset(disp *core.LvDisplayT, x c.Int32T, y c.Int32T) + +//go:linkname LvDisplaySetRotation C.lv_display_set_rotation +func LvDisplaySetRotation(disp *core.LvDisplayT, rotation c.Int32T) + +//go:linkname LvDisplaySetDpi C.lv_display_set_dpi +func LvDisplaySetDpi(disp *core.LvDisplayT, dpi c.Int32T) + +//go:linkname LvDisplayGetHorizontalResolution C.lv_display_get_horizontal_resolution +func LvDisplayGetHorizontalResolution(disp *core.LvDisplayT) c.Int32T + +//go:linkname LvDisplayGetVerticalResolution C.lv_display_get_vertical_resolution +func LvDisplayGetVerticalResolution(disp *core.LvDisplayT) c.Int32T + +//go:linkname LvDisplayGetPhysicalHorizontalResolution C.lv_display_get_physical_horizontal_resolution +func LvDisplayGetPhysicalHorizontalResolution(disp *core.LvDisplayT) c.Int32T + +//go:linkname LvDisplayGetPhysicalVerticalResolution C.lv_display_get_physical_vertical_resolution +func LvDisplayGetPhysicalVerticalResolution(disp *core.LvDisplayT) c.Int32T + +//go:linkname LvDisplayGetOffsetX C.lv_display_get_offset_x +func LvDisplayGetOffsetX(disp *core.LvDisplayT) c.Int32T + +//go:linkname LvDisplayGetOffsetY C.lv_display_get_offset_y +func LvDisplayGetOffsetY(disp *core.LvDisplayT) c.Int32T + +//go:linkname LvDisplayGetRotation C.lv_display_get_rotation +func LvDisplayGetRotation(disp *core.LvDisplayT) c.Int32T + +//go:linkname LvDisplayGetDpi C.lv_display_get_dpi +func LvDisplayGetDpi(disp *core.LvDisplayT) c.Int32T + +//go:linkname LvDisplaySetBuffers C.lv_display_set_buffers +func LvDisplaySetBuffers(disp *core.LvDisplayT, buf1 unsafe.Pointer, buf2 unsafe.Pointer, bufSize c.Uint32T, renderMode c.Int32T) + +//go:linkname LvDisplaySetBuffersWithStride C.lv_display_set_buffers_with_stride +func LvDisplaySetBuffersWithStride(disp *core.LvDisplayT, buf1 unsafe.Pointer, buf2 unsafe.Pointer, bufSize c.Uint32T, stride c.Uint32T, renderMode c.Int32T) + +//go:linkname LvDisplaySetColorFormat C.lv_display_set_color_format +func LvDisplaySetColorFormat(disp *core.LvDisplayT, colorFormat c.Int32T) + +//go:linkname LvDisplayGetColorFormat C.lv_display_get_color_format +func LvDisplayGetColorFormat(disp *core.LvDisplayT) c.Int32T + +//go:linkname LvDisplaySetAntialiasing C.lv_display_set_antialiasing +func LvDisplaySetAntialiasing(disp *core.LvDisplayT, en c.Char) + +//go:linkname LvDisplayGetAntialiasing C.lv_display_get_antialiasing +func LvDisplayGetAntialiasing(disp *core.LvDisplayT) c.Char + +//go:linkname LvDisplayGetScreenActive C.lv_display_get_screen_active +func LvDisplayGetScreenActive(disp *core.LvDisplayT) *core.LvObjT + +//go:linkname LvDisplayGetScreenPrev C.lv_display_get_screen_prev +func LvDisplayGetScreenPrev(disp *core.LvDisplayT) *core.LvObjT + +//go:linkname LvDisplayGetLayerTop C.lv_display_get_layer_top +func LvDisplayGetLayerTop(disp *core.LvDisplayT) *core.LvObjT + +//go:linkname LvDisplayGetLayerSys C.lv_display_get_layer_sys +func LvDisplayGetLayerSys(disp *core.LvDisplayT) *core.LvObjT + +//go:linkname LvDisplayGetLayerBottom C.lv_display_get_layer_bottom +func LvDisplayGetLayerBottom(disp *core.LvDisplayT) *core.LvObjT + +//go:linkname LvScreenLoad C.lv_screen_load +func LvScreenLoad(scr *core.LvObjT) + +//go:linkname LvScreenLoadAnim C.lv_screen_load_anim +func LvScreenLoadAnim(scr *core.LvObjT, animType c.Int32T, time c.Uint32T, delay c.Uint32T, autoDel c.Char) + +//go:linkname LvLayerTop C.lv_layer_top +func LvLayerTop() *core.LvObjT + +//go:linkname LvLayerSys C.lv_layer_sys +func LvLayerSys() *core.LvObjT + +//go:linkname LvLayerBottom C.lv_layer_bottom +func LvLayerBottom() *core.LvObjT + +//go:linkname LvDisplayAddEventCb C.lv_display_add_event_cb +func LvDisplayAddEventCb(disp *core.LvDisplayT, eventCb core.LvEventCbT, filter core.LvEventCodeT, userData unsafe.Pointer) + +//go:linkname LvDisplayGetEventCount C.lv_display_get_event_count +func LvDisplayGetEventCount(disp *core.LvDisplayT) c.Uint32T + +//go:linkname LvDisplayGetEventDsc C.lv_display_get_event_dsc +func LvDisplayGetEventDsc(disp *core.LvDisplayT, index c.Uint32T) *core.LvEventDscT + +//go:linkname LvDisplayDeleteEvent C.lv_display_delete_event +func LvDisplayDeleteEvent(disp *core.LvDisplayT, index c.Uint32T) c.Char + +//go:linkname LvDisplayRemoveEventCbWithUserData C.lv_display_remove_event_cb_with_user_data +func LvDisplayRemoveEventCbWithUserData(disp *core.LvDisplayT, eventCb core.LvEventCbT, userData unsafe.Pointer) c.Uint32T + +//go:linkname LvDisplaySendEvent C.lv_display_send_event +func LvDisplaySendEvent(disp *core.LvDisplayT, code core.LvEventCodeT, param unsafe.Pointer) core.LvResultT + +//go:linkname LvEventGetInvalidatedArea C.lv_event_get_invalidated_area +func LvEventGetInvalidatedArea(e *core.LvEventT) *core.LvAreaT + +//go:linkname LvDisplaySetTheme C.lv_display_set_theme +func LvDisplaySetTheme(disp *core.LvDisplayT, th *core.LvThemeT) + +//go:linkname LvDisplayGetTheme C.lv_display_get_theme +func LvDisplayGetTheme(disp *core.LvDisplayT) *core.LvThemeT + +//go:linkname LvDisplayGetInactiveTime C.lv_display_get_inactive_time +func LvDisplayGetInactiveTime(disp *core.LvDisplayT) c.Uint32T + +//go:linkname LvDisplayTriggerActivity C.lv_display_trigger_activity +func LvDisplayTriggerActivity(disp *core.LvDisplayT) + +//go:linkname LvDisplayEnableInvalidation C.lv_display_enable_invalidation +func LvDisplayEnableInvalidation(disp *core.LvDisplayT, en c.Char) + +//go:linkname LvDisplayIsInvalidationEnabled C.lv_display_is_invalidation_enabled +func LvDisplayIsInvalidationEnabled(disp *core.LvDisplayT) c.Char + +//go:linkname LvDisplayGetRefrTimer C.lv_display_get_refr_timer +func LvDisplayGetRefrTimer(disp *core.LvDisplayT) *core.LvTimerT + +//go:linkname LvDisplayDeleteRefrTimer C.lv_display_delete_refr_timer +func LvDisplayDeleteRefrTimer(disp *core.LvDisplayT) + +//go:linkname LvDisplaySetUserData C.lv_display_set_user_data +func LvDisplaySetUserData(disp *core.LvDisplayT, userData unsafe.Pointer) + +//go:linkname LvDisplaySetDriverData C.lv_display_set_driver_data +func LvDisplaySetDriverData(disp *core.LvDisplayT, driverData unsafe.Pointer) + +//go:linkname LvDisplayGetUserData C.lv_display_get_user_data +func LvDisplayGetUserData(disp *core.LvDisplayT) unsafe.Pointer + +//go:linkname LvDisplayGetDriverData C.lv_display_get_driver_data +func LvDisplayGetDriverData(disp *core.LvDisplayT) unsafe.Pointer + +//go:linkname LvDisplayGetBufActive C.lv_display_get_buf_active +func LvDisplayGetBufActive(disp *core.LvDisplayT) *core.LvDrawBufT + +//go:linkname LvDisplayRotateArea C.lv_display_rotate_area +func LvDisplayRotateArea(disp *core.LvDisplayT, area *core.LvAreaT) + +//go:linkname LvDisplayGetDrawBufSize C.lv_display_get_draw_buf_size +func LvDisplayGetDrawBufSize(disp *core.LvDisplayT) c.Uint32T + +//go:linkname LvDisplayGetInvalidatedDrawBufSize C.lv_display_get_invalidated_draw_buf_size +func LvDisplayGetInvalidatedDrawBufSize(disp *core.LvDisplayT, width c.Uint32T, height c.Uint32T) c.Uint32T + +//go:linkname LvDpx C.lv_dpx +func LvDpx(n c.Int32T) c.Int32T + +//go:linkname LvDisplayDpx C.lv_display_dpx +func LvDisplayDpx(disp *core.LvDisplayT, n c.Int32T) c.Int32T + +// 定义 LV_HOR_RES 变量 +var LV_HOR_RES int + +// 定义 LV_VER_RES 变量 +var LV_VER_RES int + +// 初始化 LV_HOR_RES 和 LV_VER_RES +func init() { + LV_HOR_RES = int(LvDisplayGetHorizontalResolution(LvDisplayGetDefault())) + LV_VER_RES = int(LvDisplayGetVerticalResolution(LvDisplayGetDefault())) +} + +/** + * See `lv_dpx()` and `lv_display_dpx()`. + * Same as Android's DIP. (Different name is chosen to avoid mistype between LV_DPI and LV_DIP) + * + * - 40 dip is 40 px on a 160 DPI screen (distance = 1/4 inch). + * - 40 dip is 80 px on a 320 DPI screen (distance still = 1/4 inch). + * + * @sa https://stackoverflow.com/questions/2025282/what-is-the-difference-between-px-dip-dp-and-sp + */ +// #define LV_DPX_CALC(dpi, n) ((n) == 0 ? 0 :LV_MAX((( (dpi) * (n) + 80) / 160), 1)) /*+80 for rounding*/ +// #define LV_DPX(n) LV_DPX_CALC(lv_display_get_dpi(NULL), n) + +// LV_MAX 计算最大值 +func LV_MAX(a, b int) int { + if a > b { + return a + } + return b +} + +// 计算 LV_DPX +func LV_DPX_CALC(dpi, n int) int { + if n == 0 { + return 0 + } + return LV_MAX(((dpi*n + 80) / 160), 1) // +80 用于四舍五入 +} + +// LV_DPX 计算 DIP 到 PX +func LV_DPX(n int) int { + return LV_DPX_CALC(int(LvDisplayGetDpi(nil)), n) +} diff --git a/lvgl/drivers/sdl/lv_sdl_mouse.go b/lvgl/drivers/sdl/lv_sdl_mouse.go new file mode 100644 index 00000000..389d1e11 --- /dev/null +++ b/lvgl/drivers/sdl/lv_sdl_mouse.go @@ -0,0 +1,22 @@ +package sdl + +import ( + _ "unsafe" + + "github.com/goplus/llgo/c" +) + +// lv_indev_t * lv_sdl_mouse_create(void); +// +//go:linkname LvSdlMouseCreate C.lv_sdl_mouse_create +func LvSdlMouseCreate() *c.Void + +// lv_indev_t * lv_sdl_mousewheel_create(void); +// +//go:linkname LvSdlMouseWheelCreate C.lv_sdl_mousewheel_create +func LvSdlMouseWheelCreate() *c.Void + +// lv_indev_t * lv_sdl_keyboard_create(void); +// +//go:linkname LvSdlKeyboardCreate C.lv_sdl_keyboard_create +func LvSdlKeyboardCreate() *c.Void diff --git a/lvgl/drivers/sdl/lv_sdl_window.go b/lvgl/drivers/sdl/lv_sdl_window.go new file mode 100644 index 00000000..aea8c384 --- /dev/null +++ b/lvgl/drivers/sdl/lv_sdl_window.go @@ -0,0 +1,43 @@ +package sdl + +import ( + _ "unsafe" + + "github.com/goplus/llgo/c" + "github.com/goplus/llpkg/lvgl/core" +) + +// lv_display_t * lv_sdl_window_create(int32_t hor_res, int32_t ver_res); +// +//go:linkname LvSdlWindowCreate C.lv_sdl_window_create +func LvSdlWindowCreate(hor_res int32, ver_res int32) *core.LvDisplayT + +// void lv_sdl_window_set_resizeable(lv_display_t * disp, bool value); +// +//go:linkname LvSdlWindowSetResizeable C.lv_sdl_window_set_resizeable +func LvSdlWindowSetResizeable(disp *c.Void, value bool) + +// void lv_sdl_window_set_zoom(lv_display_t * disp, float zoom); +// +//go:linkname LvSdlWindowSetZoom C.lv_sdl_window_set_zoom +func LvSdlWindowSetZoom(disp *core.LvDisplayT, zoom c.Float) + +// float lv_sdl_window_get_zoom(lv_display_t * disp); +// +//go:linkname LvSdlWindowGetZoom C.lv_sdl_window_get_zoom +func LvSdlWindowGetZoom(disp *core.LvDisplayT) c.Float + +// void lv_sdl_window_set_title(lv_display_t * disp, const char * title); +// +//go:linkname LvSdlWindowSetTitle C.lv_sdl_window_set_title +func LvSdlWindowSetTitle(disp *core.LvDisplayT, title *c.Char) + +// void * lv_sdl_window_get_renderer(lv_display_t * disp); +// +//go:linkname LvSdlWindowGetRenderer C.lv_sdl_window_get_renderer +func LvSdlWindowGetRenderer(disp *core.LvDisplayT) *c.Char + +// void lv_sdl_quit(void); +// +//go:linkname LvSdlQuit C.lv_sdl_quit +func LvSdlQuit() {} diff --git a/lvgl/font/font.go b/lvgl/font/font.go new file mode 100644 index 00000000..2a8688c5 --- /dev/null +++ b/lvgl/font/font.go @@ -0,0 +1,103 @@ +package font + +import ( + "unsafe" + _ "unsafe" + + "github.com/goplus/llgo/c" + core "github.com/goplus/llpkg/lvgl/core" +) + +// Font glyph format constants +const ( + LvFontGlyphFormatNone = 0x00 + LvFontGlyphFormatA1 = 0x01 + LvFontGlyphFormatA2 = 0x02 + LvFontGlyphFormatA3 = 0x03 + LvFontGlyphFormatA4 = 0x04 + LvFontGlyphFormatA8 = 0x08 + LvFontGlyphFormatA1Aligned = 0x011 + LvFontGlyphFormatA2Aligned = 0x012 + LvFontGlyphFormatA4Aligned = 0x014 + LvFontGlyphFormatA8Aligned = 0x018 + LvFontGlyphFormatImage = 0x19 + LvFontGlyphFormatVector = 0x1A + LvFontGlyphFormatSvg = 0x1B + LvFontGlyphFormatCustom = 0xFF +) + +// Font subpixel rendering modes +const ( + LvFontSubpxNone = iota + LvFontSubpxHor + LvFontSubpxVer + LvFontSubpxBoth +) + +// Font kerning modes +const ( + LvFontKerningNormal = iota + LvFontKerningNone +) + +//llgo:type C +type lv_font_t struct { + Unused [0]byte +} +type LvFontT lv_font_t + +//llgo:type C +type lv_font_glyph_dsc_t struct { + Unused [0]byte +} +type LvFontGlyphDscT lv_font_glyph_dsc_t + +//go:linkname LvFontGetGlyphBitmap C.lv_font_get_glyph_bitmap +func LvFontGetGlyphBitmap(gDsc *LvFontGlyphDscT, drawBuf *core.LvDrawBufT) unsafe.Pointer + +//go:linkname LvFontGetGlyphDsc C.lv_font_get_glyph_dsc +func LvFontGetGlyphDsc(font *LvFontT, dscOut *LvFontGlyphDscT, letter c.Uint32T, letterNext c.Uint32T) c.Char + +//go:linkname LvFontGlyphReleaseDrawData C.lv_font_glyph_release_draw_data +func LvFontGlyphReleaseDrawData(gDsc *LvFontGlyphDscT) + +//go:linkname LvFontGetGlyphWidth C.lv_font_get_glyph_width +func LvFontGetGlyphWidth(font *LvFontT, letter c.Uint32T, letterNext c.Uint32T) c.Uint16T + +//go:linkname LvFontGetLineHeight C.lv_font_get_line_height +func LvFontGetLineHeight(font *LvFontT) c.Int32T + +//go:linkname LvFontSetKerning C.lv_font_set_kerning +func LvFontSetKerning(font *LvFontT, kerning c.Int32T) + +//go:linkname LvFontGetDefault C.lv_font_get_default +func LvFontGetDefault() *LvFontT + +// Built-in font declarations +// +//go:linkname LvFontMontserrat8 C.lv_font_montserrat_8 +var LvFontMontserrat8 LvFontT + +//go:linkname LvFontMontserrat10 C.lv_font_montserrat_10 +var LvFontMontserrat10 LvFontT + +//go:linkname LvFontMontserrat12 C.lv_font_montserrat_12 +var LvFontMontserrat12 LvFontT + +//go:linkname LvFontMontserrat14 C.lv_font_montserrat_14 +var LvFontMontserrat14 LvFontT + +//go:linkname LvFontMontserrat16 C.lv_font_montserrat_16 +var LvFontMontserrat16 LvFontT + +//go:linkname LvFontMontserrat18 C.lv_font_montserrat_18 +var LvFontMontserrat18 LvFontT + +//go:linkname LvFontMontserrat20 C.lv_font_montserrat_20 +var LvFontMontserrat20 LvFontT + +//go:linkname LvFontMontserrat22 C.lv_font_montserrat_22 +var LvFontMontserrat22 LvFontT + +//go:linkname LvFontMontserrat24 C.lv_font_montserrat_24 +var LvFontMontserrat24 LvFontT diff --git a/lvgl/go.mod b/lvgl/go.mod new file mode 100644 index 00000000..1f954e3e --- /dev/null +++ b/lvgl/go.mod @@ -0,0 +1,5 @@ +module github.com/goplus/llpkg/lvgl + +go 1.20 + +require github.com/goplus/llgo v0.10.0 diff --git a/lvgl/go.sum b/lvgl/go.sum new file mode 100644 index 00000000..3288b429 --- /dev/null +++ b/lvgl/go.sum @@ -0,0 +1,2 @@ +github.com/goplus/llgo v0.10.0 h1:s3U3cnO3cploF1xCCJleAb16NQFAmHxdUmdrNhRH3hY= +github.com/goplus/llgo v0.10.0/go.mod h1:YfOHsT/g3lc9b4GclLj812YzdSsJr0kd3CCB830TqHE= diff --git a/lvgl/layouts/flex.go b/lvgl/layouts/flex.go new file mode 100644 index 00000000..c9c350e0 --- /dev/null +++ b/lvgl/layouts/flex.go @@ -0,0 +1,51 @@ +package layouts + +import ( + _ "unsafe" + + "github.com/goplus/llgo/c" + core "github.com/goplus/llpkg/lvgl/core" +) + +type lv_flex_align_t c.Int + +const ( + LV_FLEX_ALIGN_START lv_flex_align_t = iota + LV_FLEX_ALIGN_END + LV_FLEX_ALIGN_CENTER + LV_FLEX_ALIGN_SPACE_EVENLY + LV_FLEX_ALIGN_SPACE_AROUND + LV_FLEX_ALIGN_SPACE_BETWEEN +) + +// Constants needed for lv_flex_flow_t +const ( + LV_FLEX_COLUMN = 0x01 + LV_FLEX_WRAP = 0x02 + LV_FLEX_REVERSE = 0x04 +) + +type lv_flex_flow_t c.Int + +const ( + LV_FLEX_FLOW_ROW lv_flex_flow_t = 0x00 + LV_FLEX_FLOW_COLUMN lv_flex_flow_t = LV_FLEX_COLUMN + LV_FLEX_FLOW_ROW_WRAP lv_flex_flow_t = 0x00 | LV_FLEX_WRAP + LV_FLEX_FLOW_ROW_REVERSE lv_flex_flow_t = 0x00 | LV_FLEX_REVERSE + LV_FLEX_FLOW_ROW_WRAP_REVERSE lv_flex_flow_t = 0x00 | LV_FLEX_WRAP | LV_FLEX_REVERSE + LV_FLEX_FLOW_COLUMN_WRAP lv_flex_flow_t = LV_FLEX_COLUMN | LV_FLEX_WRAP + LV_FLEX_FLOW_COLUMN_REVERSE lv_flex_flow_t = LV_FLEX_COLUMN | LV_FLEX_REVERSE + LV_FLEX_FLOW_COLUMN_WRAP_REVERSE lv_flex_flow_t = LV_FLEX_COLUMN | LV_FLEX_WRAP | LV_FLEX_REVERSE +) + +//go:linkname LvFlexInit C.lv_flex_init +func LvFlexInit() + +//go:linkname LvObjSetFlexFlow C.lv_obj_set_flex_flow +func LvObjSetFlexFlow(obj *core.LvObjT, flow lv_flex_flow_t) + +//go:linkname LvObjSetFlexAlign C.lv_obj_set_flex_align +func LvObjSetFlexAlign(obj *core.LvObjT, main_place, cross_place, track_cross_place lv_flex_align_t) + +//go:linkname LvObjSetFlexGrow C.lv_obj_set_flex_grow +func LvObjSetFlexGrow(obj *core.LvObjT, grow c.Uint8T) diff --git a/lvgl/layouts/grid.go b/lvgl/layouts/grid.go new file mode 100644 index 00000000..c4b122d9 --- /dev/null +++ b/lvgl/layouts/grid.go @@ -0,0 +1,51 @@ +package layouts + +import ( + _ "unsafe" + + "github.com/goplus/llgo/c" + core "github.com/goplus/llpkg/lvgl/core" +) + +// Constants for special grid values +const ( + LV_COORD_MAX = (1 << 31) - 1000 +) + +// Grid special values +func LV_GRID_FR(x c.Int) c.Int32T { + return c.Int32T(LV_COORD_MAX - 100 + int(x)) +} + +const ( + LV_GRID_CONTENT = LV_COORD_MAX - 101 + LV_GRID_TEMPLATE_LAST = LV_COORD_MAX +) + +type lv_grid_align_t c.Int + +const ( + LV_GRID_ALIGN_START lv_grid_align_t = iota + LV_GRID_ALIGN_CENTER + LV_GRID_ALIGN_END + LV_GRID_ALIGN_STRETCH + LV_GRID_ALIGN_SPACE_EVENLY + LV_GRID_ALIGN_SPACE_AROUND + LV_GRID_ALIGN_SPACE_BETWEEN +) + +//go:linkname LvGridInit C.lv_grid_init +func LvGridInit() + +//go:linkname LvObjSetGridDscArray C.lv_obj_set_grid_dsc_array +func LvObjSetGridDscArray(obj *core.LvObjT, col_dsc, row_dsc *c.Int32T) + +//go:linkname LvObjSetGridAlign C.lv_obj_set_grid_align +func LvObjSetGridAlign(obj *core.LvObjT, column_align, row_align lv_grid_align_t) + +//go:linkname LvObjSetGridCell C.lv_obj_set_grid_cell +func LvObjSetGridCell(obj *core.LvObjT, column_align lv_grid_align_t, col_pos, col_span c.Int32T, + row_align lv_grid_align_t, row_pos, row_span c.Int32T) + +//go:linkname LvGridFr C.lv_grid_fr +func LvGridFr(x c.Uint8T) c.Int32T diff --git a/lvgl/layouts/lv_layout.go b/lvgl/layouts/lv_layout.go new file mode 100644 index 00000000..3f510bd7 --- /dev/null +++ b/lvgl/layouts/lv_layout.go @@ -0,0 +1 @@ +package layouts diff --git a/lvgl/llcppg.cfg b/lvgl/llcppg.cfg new file mode 100644 index 00000000..a80e2fd0 --- /dev/null +++ b/lvgl/llcppg.cfg @@ -0,0 +1,13 @@ +{ + "name": "lvgl", + "cflags": "$(pkg-config --cflags lvgl sdl2)", + "libs": "$(pkg-config --libs lvgl sdl2)", + "include": [ + "lvgl.h", + "lvgl/lv_conf.h" + ], + "trimPrefixes": [], + "cplusplus": false, + "deps": [], + "keepUnderScore": false +} \ No newline at end of file diff --git a/lvgl/llpkg.cfg b/lvgl/llpkg.cfg new file mode 100644 index 00000000..956a9040 --- /dev/null +++ b/lvgl/llpkg.cfg @@ -0,0 +1,8 @@ +{ + "upstream": { + "package": { + "name": "lvgl", + "version": "9.3.0" + } + } +} \ No newline at end of file diff --git a/lvgl/lvgl.go b/lvgl/lvgl.go new file mode 100644 index 00000000..968b213f --- /dev/null +++ b/lvgl/lvgl.go @@ -0,0 +1,18 @@ +package lvgl + +import ( + _ "unsafe" +) + +const ( + LLGoPackage = "link: $(pkg-config --libs sdl2 lvgl); -llvgl -lSDL2" +) + +//go:linkname LvglInit C.lv_init +func LvglInit() + +//go:linkname LvglDeinit C.lv_deinit +func LvglDeinit() + +//go:linkname LvglRun C.lv_run +func LvglRun() diff --git a/lvgl/scripts/build_lvgl.sh b/lvgl/scripts/build_lvgl.sh new file mode 100755 index 00000000..dc680e9f --- /dev/null +++ b/lvgl/scripts/build_lvgl.sh @@ -0,0 +1,28 @@ +#!/bin/bash +set -e + +SCRIPT_DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )" +cp $SCRIPT_DIR/lv_conf_template.h $SCRIPT_DIR/../ext/lvgl/lv_conf.h +cd $SCRIPT_DIR/../ + +echo "Building lvgl... ${SCRIPT_DIR}" +mkdir -p ext/lib/lvgl +mkdir -p ext/build/lvgl + +# Set SDL2 paths if provided or use Homebrew location as fallback +SDL2_PATH=${SDL2_PATH:-"/opt/homebrew/Cellar/sdl2/2.32.2"} + +cd ext/build/lvgl +cmake ../../lvgl \ + -DCMAKE_INSTALL_PREFIX=../../lib/lvgl \ + -DLV_BUILD_EXAMPLES=ON \ + -DLV_USE_SDL=ON \ + -DSDL2_PATH="${SDL2_PATH}" \ + -DCMAKE_PREFIX_PATH="${SDL2_PATH}" \ + -DCMAKE_OSX_ARCHITECTURES=arm64 \ + -DCMAKE_CXX_FLAGS="-arch arm64 -DGL_SILENCE_DEPRECATION -I${SDL2_PATH}/include" \ + -DCMAKE_C_FLAGS="-arch arm64 -DGL_SILENCE_DEPRECATION -I${SDL2_PATH}/include" +make -j4 +make install +echo "lvgl built successfully!" + diff --git a/lvgl/scripts/lv_conf_template.h b/lvgl/scripts/lv_conf_template.h new file mode 100644 index 00000000..d5d69cd8 --- /dev/null +++ b/lvgl/scripts/lv_conf_template.h @@ -0,0 +1,1350 @@ +/** + * @file lv_conf.h + * Configuration file for v9.3.0-dev + */ + +/* + * Copy this file as `lv_conf.h` + * 1. simply next to `lvgl` folder + * 2. or to any other place and + * - define `LV_CONF_INCLUDE_SIMPLE`; + * - add the path as an include path. + */ + +/* clang-format off */ +#if 1 /* Set this to "1" to enable content */ + +#ifndef LV_CONF_H +#define LV_CONF_H + +/* If you need to include anything here, do it inside the `__ASSEMBLY__` guard */ +#if 0 && defined(__ASSEMBLY__) +#include "my_include.h" +#endif + +/*==================== + COLOR SETTINGS + *====================*/ + +/** Color depth: 1 (I1), 8 (L8), 16 (RGB565), 24 (RGB888), 32 (XRGB8888) */ +#define LV_COLOR_DEPTH 16 + +/*========================= + STDLIB WRAPPER SETTINGS + *=========================*/ + +/** Possible values + * - LV_STDLIB_BUILTIN: LVGL's built in implementation + * - LV_STDLIB_CLIB: Standard C functions, like malloc, strlen, etc + * - LV_STDLIB_MICROPYTHON: MicroPython implementation + * - LV_STDLIB_RTTHREAD: RT-Thread implementation + * - LV_STDLIB_CUSTOM: Implement the functions externally + */ +#define LV_USE_STDLIB_MALLOC LV_STDLIB_BUILTIN + +/** Possible values + * - LV_STDLIB_BUILTIN: LVGL's built in implementation + * - LV_STDLIB_CLIB: Standard C functions, like malloc, strlen, etc + * - LV_STDLIB_MICROPYTHON: MicroPython implementation + * - LV_STDLIB_RTTHREAD: RT-Thread implementation + * - LV_STDLIB_CUSTOM: Implement the functions externally + */ +#define LV_USE_STDLIB_STRING LV_STDLIB_BUILTIN + +/** Possible values + * - LV_STDLIB_BUILTIN: LVGL's built in implementation + * - LV_STDLIB_CLIB: Standard C functions, like malloc, strlen, etc + * - LV_STDLIB_MICROPYTHON: MicroPython implementation + * - LV_STDLIB_RTTHREAD: RT-Thread implementation + * - LV_STDLIB_CUSTOM: Implement the functions externally + */ +#define LV_USE_STDLIB_SPRINTF LV_STDLIB_BUILTIN + +#define LV_STDINT_INCLUDE +#define LV_STDDEF_INCLUDE +#define LV_STDBOOL_INCLUDE +#define LV_INTTYPES_INCLUDE +#define LV_LIMITS_INCLUDE +#define LV_STDARG_INCLUDE + +#if LV_USE_STDLIB_MALLOC == LV_STDLIB_BUILTIN + /** Size of memory available for `lv_malloc()` in bytes (>= 2kB) */ + #define LV_MEM_SIZE (64 * 1024U) /**< [bytes] */ + + /** Size of the memory expand for `lv_malloc()` in bytes */ + #define LV_MEM_POOL_EXPAND_SIZE 0 + + /** Set an address for the memory pool instead of allocating it as a normal array. Can be in external SRAM too. */ + #define LV_MEM_ADR 0 /**< 0: unused*/ + /* Instead of an address give a memory allocator that will be called to get a memory pool for LVGL. E.g. my_malloc */ + #if LV_MEM_ADR == 0 + #undef LV_MEM_POOL_INCLUDE + #undef LV_MEM_POOL_ALLOC + #endif +#endif /*LV_USE_STDLIB_MALLOC == LV_STDLIB_BUILTIN*/ + +/*==================== + HAL SETTINGS + *====================*/ + +/** Default display refresh, input device read and animation step period. */ +#define LV_DEF_REFR_PERIOD 33 /**< [ms] */ + +/** Default Dots Per Inch. Used to initialize default sizes such as widgets sized, style paddings. + * (Not so important, you can adjust it to modify default sizes and spaces.) */ +#define LV_DPI_DEF 130 /**< [px/inch] */ + +/*================= + * OPERATING SYSTEM + *=================*/ +/** Select operating system to use. Possible options: + * - LV_OS_NONE + * - LV_OS_PTHREAD + * - LV_OS_FREERTOS + * - LV_OS_CMSIS_RTOS2 + * - LV_OS_RTTHREAD + * - LV_OS_WINDOWS + * - LV_OS_MQX + * - LV_OS_SDL2 + * - LV_OS_CUSTOM */ +#define LV_USE_OS LV_OS_NONE + +#if LV_USE_OS == LV_OS_CUSTOM + #define LV_OS_CUSTOM_INCLUDE +#endif +#if LV_USE_OS == LV_OS_FREERTOS + /* + * Unblocking an RTOS task with a direct notification is 45% faster and uses less RAM + * than unblocking a task using an intermediary object such as a binary semaphore. + * RTOS task notifications can only be used when there is only one task that can be the recipient of the event. + */ + #define LV_USE_FREERTOS_TASK_NOTIFY 1 +#endif + +/*======================== + * RENDERING CONFIGURATION + *========================*/ + +/** Align stride of all layers and images to this bytes */ +#define LV_DRAW_BUF_STRIDE_ALIGN 1 + +/** Align start address of draw_buf addresses to this bytes*/ +#define LV_DRAW_BUF_ALIGN 4 + +/** Using matrix for transformations. + * Requirements: + * - `LV_USE_MATRIX = 1`. + * - Rendering engine needs to support 3x3 matrix transformations. */ +#define LV_DRAW_TRANSFORM_USE_MATRIX 0 + +/* If a widget has `style_opa < 255` (not `bg_opa`, `text_opa` etc) or not NORMAL blend mode + * it is buffered into a "simple" layer before rendering. The widget can be buffered in smaller chunks. + * "Transformed layers" (if `transform_angle/zoom` are set) use larger buffers + * and can't be drawn in chunks. */ + +/** The target buffer size for simple layer chunks. */ +#define LV_DRAW_LAYER_SIMPLE_BUF_SIZE (24 * 1024) /**< [bytes]*/ + +/* Limit the max allocated memory for simple and transformed layers. + * It should be at least `LV_DRAW_LAYER_SIMPLE_BUF_SIZE` sized but if transformed layers are also used + * it should be enough to store the largest widget too (width x height x 4 area). + * Set it to 0 to have no limit. */ +#define LV_DRAW_LAYER_MAX_MEMORY 0 /**< No limit by default [bytes]*/ + +/** Stack size of drawing thread. + * NOTE: If FreeType or ThorVG is enabled, it is recommended to set it to 32KB or more. + */ +#define LV_DRAW_THREAD_STACK_SIZE (8 * 1024) /**< [bytes]*/ + +#define LV_USE_DRAW_SW 1 +#if LV_USE_DRAW_SW == 1 + /* + * Selectively disable color format support in order to reduce code size. + * NOTE: some features use certain color formats internally, e.g. + * - gradients use RGB888 + * - bitmaps with transparency may use ARGB8888 + */ + #define LV_DRAW_SW_SUPPORT_RGB565 1 + #define LV_DRAW_SW_SUPPORT_RGB565A8 1 + #define LV_DRAW_SW_SUPPORT_RGB888 1 + #define LV_DRAW_SW_SUPPORT_XRGB8888 1 + #define LV_DRAW_SW_SUPPORT_ARGB8888 1 + #define LV_DRAW_SW_SUPPORT_L8 1 + #define LV_DRAW_SW_SUPPORT_AL88 1 + #define LV_DRAW_SW_SUPPORT_A8 1 + #define LV_DRAW_SW_SUPPORT_I1 1 + + /* The threshold of the luminance to consider a pixel as + * active in indexed color format */ + #define LV_DRAW_SW_I1_LUM_THRESHOLD 127 + + /** Set number of draw units. + * - > 1 requires operating system to be enabled in `LV_USE_OS`. + * - > 1 means multiple threads will render the screen in parallel. */ + #define LV_DRAW_SW_DRAW_UNIT_CNT 1 + + /** Use Arm-2D to accelerate software (sw) rendering. */ + #define LV_USE_DRAW_ARM2D_SYNC 0 + + /** Enable native helium assembly to be compiled. */ + #define LV_USE_NATIVE_HELIUM_ASM 0 + + /** + * - 0: Use a simple renderer capable of drawing only simple rectangles with gradient, images, text, and straight lines only. + * - 1: Use a complex renderer capable of drawing rounded corners, shadow, skew lines, and arcs too. */ + #define LV_DRAW_SW_COMPLEX 1 + + #if LV_DRAW_SW_COMPLEX == 1 + /** Allow buffering some shadow calculation. + * LV_DRAW_SW_SHADOW_CACHE_SIZE is the maximum shadow size to buffer, where shadow size is + * `shadow_width + radius`. Caching has LV_DRAW_SW_SHADOW_CACHE_SIZE^2 RAM cost. */ + #define LV_DRAW_SW_SHADOW_CACHE_SIZE 0 + + /** Set number of maximally-cached circle data. + * The circumference of 1/4 circle are saved for anti-aliasing. + * `radius * 4` bytes are used per circle (the most often used radiuses are saved). + * - 0: disables caching */ + #define LV_DRAW_SW_CIRCLE_CACHE_SIZE 4 + #endif + + #define LV_USE_DRAW_SW_ASM LV_DRAW_SW_ASM_NONE + + #if LV_USE_DRAW_SW_ASM == LV_DRAW_SW_ASM_CUSTOM + #define LV_DRAW_SW_ASM_CUSTOM_INCLUDE "" + #endif + + /** Enable drawing complex gradients in software: linear at an angle, radial or conical */ + #define LV_USE_DRAW_SW_COMPLEX_GRADIENTS 0 + +#endif + +/*Use TSi's aka (Think Silicon) NemaGFX */ +#define LV_USE_NEMA_GFX 0 + +#if LV_USE_NEMA_GFX + /** Select which NemaGFX HAL to use. Possible options: + * - LV_NEMA_HAL_CUSTOM + * - LV_NEMA_HAL_STM32 */ + #define LV_USE_NEMA_HAL LV_NEMA_HAL_CUSTOM + #if LV_USE_NEMA_HAL == LV_NEMA_HAL_STM32 + #define LV_NEMA_STM32_HAL_INCLUDE + #endif + + /*Enable Vector Graphics Operations. Available only if NemaVG library is present*/ + #define LV_USE_NEMA_VG 0 + #if LV_USE_NEMA_VG + /*Define application's resolution used for VG related buffer allocation */ + #define LV_NEMA_GFX_MAX_RESX 800 + #define LV_NEMA_GFX_MAX_RESY 600 + #endif +#endif + +/** Use NXP's VG-Lite GPU on iMX RTxxx platforms. */ +#define LV_USE_DRAW_VGLITE 0 + +#if LV_USE_DRAW_VGLITE + /** Enable blit quality degradation workaround recommended for screen's dimension > 352 pixels. */ + #define LV_USE_VGLITE_BLIT_SPLIT 0 + + #if LV_USE_OS + /** Use additional draw thread for VG-Lite processing. */ + #define LV_USE_VGLITE_DRAW_THREAD 1 + + #if LV_USE_VGLITE_DRAW_THREAD + /** Enable VGLite draw async. Queue multiple tasks and flash them once to the GPU. */ + #define LV_USE_VGLITE_DRAW_ASYNC 1 + #endif + #endif + + /** Enable VGLite asserts. */ + #define LV_USE_VGLITE_ASSERT 0 +#endif + +/** Use NXP's PXP on iMX RTxxx platforms. */ +#define LV_USE_PXP 0 + +#if LV_USE_PXP + /** Use PXP for drawing.*/ + #define LV_USE_DRAW_PXP 1 + + /** Use PXP to rotate display.*/ + #define LV_USE_ROTATE_PXP 0 + + #if LV_USE_DRAW_PXP && LV_USE_OS + /** Use additional draw thread for PXP processing.*/ + #define LV_USE_PXP_DRAW_THREAD 1 + #endif + + /** Enable PXP asserts. */ + #define LV_USE_PXP_ASSERT 0 +#endif + +/** Use NXP's G2D on MPU platforms. */ +#define LV_USE_DRAW_G2D 0 + +#if LV_USE_DRAW_G2D + /** Maximum number of buffers that can be stored for G2D draw unit. + * Includes the frame buffers and assets. */ + #define LV_G2D_HASH_TABLE_SIZE 50 + + #if LV_USE_OS + /** Use additional draw thread for G2D processing.*/ + #define LV_USE_G2D_DRAW_THREAD 1 + #endif + + /** Enable G2D asserts. */ + #define LV_USE_G2D_ASSERT 0 +#endif + +/** Use Renesas Dave2D on RA platforms. */ +#define LV_USE_DRAW_DAVE2D 0 + +/** Draw using cached SDL textures*/ +#define LV_USE_DRAW_SDL 0 + +/** Use VG-Lite GPU. */ +#define LV_USE_DRAW_VG_LITE 0 + +#if LV_USE_DRAW_VG_LITE + /** Enable VG-Lite custom external 'gpu_init()' function */ + #define LV_VG_LITE_USE_GPU_INIT 0 + + /** Enable VG-Lite assert. */ + #define LV_VG_LITE_USE_ASSERT 0 + + /** VG-Lite flush commit trigger threshold. GPU will try to batch these many draw tasks. */ + #define LV_VG_LITE_FLUSH_MAX_COUNT 8 + + /** Enable border to simulate shadow. + * NOTE: which usually improves performance, + * but does not guarantee the same rendering quality as the software. */ + #define LV_VG_LITE_USE_BOX_SHADOW 0 + + /** VG-Lite gradient maximum cache number. + * @note The memory usage of a single gradient image is 4K bytes. */ + #define LV_VG_LITE_GRAD_CACHE_CNT 32 + + /** VG-Lite stroke maximum cache number. */ + #define LV_VG_LITE_STROKE_CACHE_CNT 32 +#endif + +/** Accelerate blends, fills, etc. with STM32 DMA2D */ +#define LV_USE_DRAW_DMA2D 0 + +#if LV_USE_DRAW_DMA2D + #define LV_DRAW_DMA2D_HAL_INCLUDE "stm32h7xx_hal.h" + + /* if enabled, the user is required to call `lv_draw_dma2d_transfer_complete_interrupt_handler` + * upon receiving the DMA2D global interrupt + */ + #define LV_USE_DRAW_DMA2D_INTERRUPT 0 +#endif + +/** Draw using cached OpenGLES textures */ +#define LV_USE_DRAW_OPENGLES 0 + +/*======================= + * FEATURE CONFIGURATION + *=======================*/ + +/*------------- + * Logging + *-----------*/ + +/** Enable log module */ +#define LV_USE_LOG 0 +#if LV_USE_LOG + /** Set value to one of the following levels of logging detail: + * - LV_LOG_LEVEL_TRACE Log detailed information. + * - LV_LOG_LEVEL_INFO Log important events. + * - LV_LOG_LEVEL_WARN Log if something unwanted happened but didn't cause a problem. + * - LV_LOG_LEVEL_ERROR Log only critical issues, when system may fail. + * - LV_LOG_LEVEL_USER Log only custom log messages added by the user. + * - LV_LOG_LEVEL_NONE Do not log anything. */ + #define LV_LOG_LEVEL LV_LOG_LEVEL_WARN + + /** - 1: Print log with 'printf'; + * - 0: User needs to register a callback with `lv_log_register_print_cb()`. */ + #define LV_LOG_PRINTF 0 + + /** Set callback to print logs. + * E.g `my_print`. The prototype should be `void my_print(lv_log_level_t level, const char * buf)`. + * Can be overwritten by `lv_log_register_print_cb`. */ + //#define LV_LOG_PRINT_CB + + /** - 1: Enable printing timestamp; + * - 0: Disable printing timestamp. */ + #define LV_LOG_USE_TIMESTAMP 1 + + /** - 1: Print file and line number of the log; + * - 0: Do not print file and line number of the log. */ + #define LV_LOG_USE_FILE_LINE 1 + + /* Enable/disable LV_LOG_TRACE in modules that produces a huge number of logs. */ + #define LV_LOG_TRACE_MEM 1 /**< Enable/disable trace logs in memory operations. */ + #define LV_LOG_TRACE_TIMER 1 /**< Enable/disable trace logs in timer operations. */ + #define LV_LOG_TRACE_INDEV 1 /**< Enable/disable trace logs in input device operations. */ + #define LV_LOG_TRACE_DISP_REFR 1 /**< Enable/disable trace logs in display re-draw operations. */ + #define LV_LOG_TRACE_EVENT 1 /**< Enable/disable trace logs in event dispatch logic. */ + #define LV_LOG_TRACE_OBJ_CREATE 1 /**< Enable/disable trace logs in object creation (core `obj` creation plus every widget). */ + #define LV_LOG_TRACE_LAYOUT 1 /**< Enable/disable trace logs in flex- and grid-layout operations. */ + #define LV_LOG_TRACE_ANIM 1 /**< Enable/disable trace logs in animation logic. */ + #define LV_LOG_TRACE_CACHE 1 /**< Enable/disable trace logs in cache operations. */ +#endif /*LV_USE_LOG*/ + +/*------------- + * Asserts + *-----------*/ + +/* Enable assertion failures if an operation fails or invalid data is found. + * If LV_USE_LOG is enabled, an error message will be printed on failure. */ +#define LV_USE_ASSERT_NULL 1 /**< Check if the parameter is NULL. (Very fast, recommended) */ +#define LV_USE_ASSERT_MALLOC 1 /**< Checks is the memory is successfully allocated or no. (Very fast, recommended) */ +#define LV_USE_ASSERT_STYLE 0 /**< Check if the styles are properly initialized. (Very fast, recommended) */ +#define LV_USE_ASSERT_MEM_INTEGRITY 0 /**< Check the integrity of `lv_mem` after critical operations. (Slow) */ +#define LV_USE_ASSERT_OBJ 0 /**< Check the object's type and existence (e.g. not deleted). (Slow) */ + +/** Add a custom handler when assert happens e.g. to restart MCU. */ +#define LV_ASSERT_HANDLER_INCLUDE +#define LV_ASSERT_HANDLER while(1); /**< Halt by default */ + +/*------------- + * Debug + *-----------*/ + +/** 1: Draw random colored rectangles over the redrawn areas. */ +#define LV_USE_REFR_DEBUG 0 + +/** 1: Draw a red overlay for ARGB layers and a green overlay for RGB layers*/ +#define LV_USE_LAYER_DEBUG 0 + +/** 1: Adds the following behaviors for debugging: + * - Draw overlays with different colors for each draw_unit's tasks. + * - Draw index number of draw unit on white background. + * - For layers, draws index number of draw unit on black background. */ +#define LV_USE_PARALLEL_DRAW_DEBUG 0 + +/*------------- + * Others + *-----------*/ + +#define LV_ENABLE_GLOBAL_CUSTOM 0 +#if LV_ENABLE_GLOBAL_CUSTOM + /** Header to include for custom 'lv_global' function" */ + #define LV_GLOBAL_CUSTOM_INCLUDE +#endif + +/** Default cache size in bytes. + * Used by image decoders such as `lv_lodepng` to keep the decoded image in memory. + * If size is not set to 0, the decoder will fail to decode when the cache is full. + * If size is 0, the cache function is not enabled and the decoded memory will be + * released immediately after use. */ +#define LV_CACHE_DEF_SIZE 0 + +/** Default number of image header cache entries. The cache is used to store the headers of images + * The main logic is like `LV_CACHE_DEF_SIZE` but for image headers. */ +#define LV_IMAGE_HEADER_CACHE_DEF_CNT 0 + +/** Number of stops allowed per gradient. Increase this to allow more stops. + * This adds (sizeof(lv_color_t) + 1) bytes per additional stop. */ +#define LV_GRADIENT_MAX_STOPS 2 + +/** Adjust color mix functions rounding. GPUs might calculate color mix (blending) differently. + * - 0: round down, + * - 64: round up from x.75, + * - 128: round up from half, + * - 192: round up from x.25, + * - 254: round up */ +#define LV_COLOR_MIX_ROUND_OFS 0 + +/** Add 2 x 32-bit variables to each `lv_obj_t` to speed up getting style properties */ +#define LV_OBJ_STYLE_CACHE 0 + +/** Add `id` field to `lv_obj_t` */ +#define LV_USE_OBJ_ID 0 + +/** Enable support widget names*/ +#define LV_USE_OBJ_NAME 0 + +/** Automatically assign an ID when obj is created */ +#define LV_OBJ_ID_AUTO_ASSIGN LV_USE_OBJ_ID + +/** Use builtin obj ID handler functions: +* - lv_obj_assign_id: Called when a widget is created. Use a separate counter for each widget class as an ID. +* - lv_obj_id_compare: Compare the ID to decide if it matches with a requested value. +* - lv_obj_stringify_id: Return string-ified identifier, e.g. "button3". +* - lv_obj_free_id: Does nothing, as there is no memory allocation for the ID. +* When disabled these functions needs to be implemented by the user.*/ +#define LV_USE_OBJ_ID_BUILTIN 1 + +/** Use obj property set/get API. */ +#define LV_USE_OBJ_PROPERTY 0 + +/** Enable property name support. */ +#define LV_USE_OBJ_PROPERTY_NAME 1 + +/* Use VG-Lite Simulator. + * - Requires: LV_USE_THORVG_INTERNAL or LV_USE_THORVG_EXTERNAL */ +#define LV_USE_VG_LITE_THORVG 0 + +#if LV_USE_VG_LITE_THORVG + /** Enable LVGL's blend mode support */ + #define LV_VG_LITE_THORVG_LVGL_BLEND_SUPPORT 0 + + /** Enable YUV color format support */ + #define LV_VG_LITE_THORVG_YUV_SUPPORT 0 + + /** Enable Linear gradient extension support */ + #define LV_VG_LITE_THORVG_LINEAR_GRADIENT_EXT_SUPPORT 0 + + /** Enable alignment on 16 pixels */ + #define LV_VG_LITE_THORVG_16PIXELS_ALIGN 1 + + /** Buffer address alignment */ + #define LV_VG_LITE_THORVG_BUF_ADDR_ALIGN 64 + + /** Enable multi-thread render */ + #define LV_VG_LITE_THORVG_THREAD_RENDER 0 +#endif + +/* Enable the multi-touch gesture recognition feature */ +/* Gesture recognition requires the use of floats */ +#define LV_USE_GESTURE_RECOGNITION 0 + +/*===================== + * COMPILER SETTINGS + *====================*/ + +/** For big endian systems set to 1 */ +#define LV_BIG_ENDIAN_SYSTEM 0 + +/** Define a custom attribute for `lv_tick_inc` function */ +#define LV_ATTRIBUTE_TICK_INC + +/** Define a custom attribute for `lv_timer_handler` function */ +#define LV_ATTRIBUTE_TIMER_HANDLER + +/** Define a custom attribute for `lv_display_flush_ready` function */ +#define LV_ATTRIBUTE_FLUSH_READY + +/** Align VG_LITE buffers on this number of bytes. + * @note vglite_src_buf_aligned() uses this value to validate alignment of passed buffer pointers. */ +#define LV_ATTRIBUTE_MEM_ALIGN_SIZE 1 + +/** Will be added where memory needs to be aligned (with -Os data might not be aligned to boundary by default). + * E.g. __attribute__((aligned(4)))*/ +#define LV_ATTRIBUTE_MEM_ALIGN + +/** Attribute to mark large constant arrays, for example for font bitmaps */ +#define LV_ATTRIBUTE_LARGE_CONST + +/** Compiler prefix for a large array declaration in RAM */ +#define LV_ATTRIBUTE_LARGE_RAM_ARRAY + +/** Place performance critical functions into a faster memory (e.g RAM) */ +#define LV_ATTRIBUTE_FAST_MEM + +/** Export integer constant to binding. This macro is used with constants in the form of LV_ that + * should also appear on LVGL binding API such as MicroPython. */ +#define LV_EXPORT_CONST_INT(int_value) struct _silence_gcc_warning /**< The default value just prevents GCC warning */ + +/** Prefix all global extern data with this */ +#define LV_ATTRIBUTE_EXTERN_DATA + +/** Use `float` as `lv_value_precise_t` */ +#define LV_USE_FLOAT 0 + +/** Enable matrix support + * - Requires `LV_USE_FLOAT = 1` */ +#define LV_USE_MATRIX 0 + +/** Include `lvgl_private.h` in `lvgl.h` to access internal data and functions by default */ +#define LV_USE_PRIVATE_API 0 + +/*================== + * FONT USAGE + *===================*/ + +/* Montserrat fonts with ASCII range and some symbols using bpp = 4 + * https://fonts.google.com/specimen/Montserrat */ +#define LV_FONT_MONTSERRAT_8 0 +#define LV_FONT_MONTSERRAT_10 0 +#define LV_FONT_MONTSERRAT_12 0 +#define LV_FONT_MONTSERRAT_14 1 +#define LV_FONT_MONTSERRAT_16 0 +#define LV_FONT_MONTSERRAT_18 0 +#define LV_FONT_MONTSERRAT_20 0 +#define LV_FONT_MONTSERRAT_22 0 +#define LV_FONT_MONTSERRAT_24 0 +#define LV_FONT_MONTSERRAT_26 0 +#define LV_FONT_MONTSERRAT_28 0 +#define LV_FONT_MONTSERRAT_30 0 +#define LV_FONT_MONTSERRAT_32 0 +#define LV_FONT_MONTSERRAT_34 0 +#define LV_FONT_MONTSERRAT_36 0 +#define LV_FONT_MONTSERRAT_38 0 +#define LV_FONT_MONTSERRAT_40 0 +#define LV_FONT_MONTSERRAT_42 0 +#define LV_FONT_MONTSERRAT_44 0 +#define LV_FONT_MONTSERRAT_46 0 +#define LV_FONT_MONTSERRAT_48 0 + +/* Demonstrate special features */ +#define LV_FONT_MONTSERRAT_28_COMPRESSED 0 /**< bpp = 3 */ +#define LV_FONT_DEJAVU_16_PERSIAN_HEBREW 0 /**< Hebrew, Arabic, Persian letters and all their forms */ +#define LV_FONT_SIMSUN_14_CJK 0 /**< 1000 most common CJK radicals */ +#define LV_FONT_SIMSUN_16_CJK 0 /**< 1000 most common CJK radicals */ + +/** Pixel perfect monospaced fonts */ +#define LV_FONT_UNSCII_8 0 +#define LV_FONT_UNSCII_16 0 + +/** Optionally declare custom fonts here. + * + * You can use any of these fonts as the default font too and they will be available + * globally. Example: + * + * @code + * #define LV_FONT_CUSTOM_DECLARE LV_FONT_DECLARE(my_font_1) LV_FONT_DECLARE(my_font_2) + * @endcode + */ +#define LV_FONT_CUSTOM_DECLARE + +/** Always set a default font */ +#define LV_FONT_DEFAULT &lv_font_montserrat_14 + +/** Enable handling large font and/or fonts with a lot of characters. + * The limit depends on the font size, font face and bpp. + * A compiler error will be triggered if a font needs it. */ +#define LV_FONT_FMT_TXT_LARGE 0 + +/** Enables/disables support for compressed fonts. */ +#define LV_USE_FONT_COMPRESSED 0 + +/** Enable drawing placeholders when glyph dsc is not found. */ +#define LV_USE_FONT_PLACEHOLDER 1 + +/*================= + * TEXT SETTINGS + *=================*/ + +/** + * Select a character encoding for strings. + * Your IDE or editor should have the same character encoding. + * - LV_TXT_ENC_UTF8 + * - LV_TXT_ENC_ASCII + */ +#define LV_TXT_ENC LV_TXT_ENC_UTF8 + +/** While rendering text strings, break (wrap) text on these chars. */ +#define LV_TXT_BREAK_CHARS " ,.;:-_)]}" + +/** If a word is at least this long, will break wherever "prettiest". + * To disable, set to a value <= 0. */ +#define LV_TXT_LINE_BREAK_LONG_LEN 0 + +/** Minimum number of characters in a long word to put on a line before a break. + * Depends on LV_TXT_LINE_BREAK_LONG_LEN. */ +#define LV_TXT_LINE_BREAK_LONG_PRE_MIN_LEN 3 + +/** Minimum number of characters in a long word to put on a line after a break. + * Depends on LV_TXT_LINE_BREAK_LONG_LEN. */ +#define LV_TXT_LINE_BREAK_LONG_POST_MIN_LEN 3 + +/** Support bidirectional text. Allows mixing Left-to-Right and Right-to-Left text. + * The direction will be processed according to the Unicode Bidirectional Algorithm: + * https://www.w3.org/International/articles/inline-bidi-markup/uba-basics */ +#define LV_USE_BIDI 0 +#if LV_USE_BIDI + /*Set the default direction. Supported values: + *`LV_BASE_DIR_LTR` Left-to-Right + *`LV_BASE_DIR_RTL` Right-to-Left + *`LV_BASE_DIR_AUTO` detect text base direction*/ + #define LV_BIDI_BASE_DIR_DEF LV_BASE_DIR_AUTO +#endif + +/** Enable Arabic/Persian processing + * In these languages characters should be replaced with another form based on their position in the text */ +#define LV_USE_ARABIC_PERSIAN_CHARS 0 + +/*The control character to use for signaling text recoloring*/ +#define LV_TXT_COLOR_CMD "#" + +/*================== + * WIDGETS + *================*/ +/* Documentation for widgets can be found here: https://docs.lvgl.io/latest/en/html/widgets/index.html . */ + +/** 1: Causes these widgets to be given default values at creation time. + * - lv_buttonmatrix_t: Get default maps: {"Btn1", "Btn2", "Btn3", "\n", "Btn4", "Btn5", ""}, else map not set. + * - lv_checkbox_t : String label set to "Check box", else set to empty string. + * - lv_dropdown_t : Options set to "Option 1", "Option 2", "Option 3", else no values are set. + * - lv_roller_t : Options set to "Option 1", "Option 2", "Option 3", "Option 4", "Option 5", else no values are set. + * - lv_label_t : Text set to "Text", else empty string. + * */ +#define LV_WIDGETS_HAS_DEFAULT_VALUE 1 + +#define LV_USE_ANIMIMG 1 + +#define LV_USE_ARC 1 + +#define LV_USE_BAR 1 + +#define LV_USE_BUTTON 1 + +#define LV_USE_BUTTONMATRIX 1 + +#define LV_USE_CALENDAR 1 +#if LV_USE_CALENDAR + #define LV_CALENDAR_WEEK_STARTS_MONDAY 0 + #if LV_CALENDAR_WEEK_STARTS_MONDAY + #define LV_CALENDAR_DEFAULT_DAY_NAMES {"Mo", "Tu", "We", "Th", "Fr", "Sa", "Su"} + #else + #define LV_CALENDAR_DEFAULT_DAY_NAMES {"Su", "Mo", "Tu", "We", "Th", "Fr", "Sa"} + #endif + + #define LV_CALENDAR_DEFAULT_MONTH_NAMES {"January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December"} + #define LV_USE_CALENDAR_HEADER_ARROW 1 + #define LV_USE_CALENDAR_HEADER_DROPDOWN 1 + #define LV_USE_CALENDAR_CHINESE 0 +#endif /*LV_USE_CALENDAR*/ + +#define LV_USE_CANVAS 1 + +#define LV_USE_CHART 1 + +#define LV_USE_CHECKBOX 1 + +#define LV_USE_DROPDOWN 1 /**< Requires: lv_label */ + +#define LV_USE_IMAGE 1 /**< Requires: lv_label */ + +#define LV_USE_IMAGEBUTTON 1 + +#define LV_USE_KEYBOARD 1 + +#define LV_USE_LABEL 1 +#if LV_USE_LABEL + #define LV_LABEL_TEXT_SELECTION 1 /**< Enable selecting text of the label */ + #define LV_LABEL_LONG_TXT_HINT 1 /**< Store some extra info in labels to speed up drawing of very long text */ + #define LV_LABEL_WAIT_CHAR_COUNT 3 /**< The count of wait chart */ +#endif + +#define LV_USE_LED 1 + +#define LV_USE_LINE 1 + +#define LV_USE_LIST 1 + +#define LV_USE_LOTTIE 0 /**< Requires: lv_canvas, thorvg */ + +#define LV_USE_MENU 1 + +#define LV_USE_MSGBOX 1 + +#define LV_USE_ROLLER 1 /**< Requires: lv_label */ + +#define LV_USE_SCALE 1 + +#define LV_USE_SLIDER 1 /**< Requires: lv_bar */ + +#define LV_USE_SPAN 1 +#if LV_USE_SPAN + /** A line of text can contain this maximum number of span descriptors. */ + #define LV_SPAN_SNIPPET_STACK_SIZE 64 +#endif + +#define LV_USE_SPINBOX 1 + +#define LV_USE_SPINNER 1 + +#define LV_USE_SWITCH 1 + +#define LV_USE_TABLE 1 + +#define LV_USE_TABVIEW 1 + +#define LV_USE_TEXTAREA 1 /**< Requires: lv_label */ +#if LV_USE_TEXTAREA != 0 + #define LV_TEXTAREA_DEF_PWD_SHOW_TIME 1500 /**< [ms] */ +#endif + +#define LV_USE_TILEVIEW 1 + +#define LV_USE_WIN 1 + +/*================== + * THEMES + *==================*/ +/* Documentation for themes can be found here: https://docs.lvgl.io/master/overview/style.html#themes . */ + +/** A simple, impressive and very complete theme */ +#define LV_USE_THEME_DEFAULT 1 +#if LV_USE_THEME_DEFAULT + /** 0: Light mode; 1: Dark mode */ + #define LV_THEME_DEFAULT_DARK 0 + + /** 1: Enable grow on press */ + #define LV_THEME_DEFAULT_GROW 1 + + /** Default transition time in ms. */ + #define LV_THEME_DEFAULT_TRANSITION_TIME 80 +#endif /*LV_USE_THEME_DEFAULT*/ + +/** A very simple theme that is a good starting point for a custom theme */ +#define LV_USE_THEME_SIMPLE 1 + +/** A theme designed for monochrome displays */ +#define LV_USE_THEME_MONO 1 + +/*================== + * LAYOUTS + *==================*/ +/* Documentation for layouts can be found here: https://docs.lvgl.io/master/layouts/index.html . */ + +/** A layout similar to Flexbox in CSS. */ +#define LV_USE_FLEX 1 + +/** A layout similar to Grid in CSS. */ +#define LV_USE_GRID 1 + +/*==================== + * 3RD PARTS LIBRARIES + *====================*/ +/* Documentation for libraries can be found here: https://docs.lvgl.io/master/libs/index.html . */ + +/* File system interfaces for common APIs */ + +/** Setting a default driver letter allows skipping the driver prefix in filepaths. + * Documentation about how to use the below driver-identifier letters can be found at + * https://docs.lvgl.io/master/details/main-components/fs.html#lv-fs-identifier-letters . */ +#define LV_FS_DEFAULT_DRIVER_LETTER '\0' + +/** API for fopen, fread, etc. */ +#define LV_USE_FS_STDIO 0 +#if LV_USE_FS_STDIO + #define LV_FS_STDIO_LETTER '\0' /**< Set an upper-case driver-identifier letter for this driver (e.g. 'A'). */ + #define LV_FS_STDIO_PATH "" /**< Set the working directory. File/directory paths will be appended to it. */ + #define LV_FS_STDIO_CACHE_SIZE 0 /**< >0 to cache this number of bytes in lv_fs_read() */ +#endif + +/** API for open, read, etc. */ +#define LV_USE_FS_POSIX 0 +#if LV_USE_FS_POSIX + #define LV_FS_POSIX_LETTER '\0' /**< Set an upper-case driver-identifier letter for this driver (e.g. 'A'). */ + #define LV_FS_POSIX_PATH "" /**< Set the working directory. File/directory paths will be appended to it. */ + #define LV_FS_POSIX_CACHE_SIZE 0 /**< >0 to cache this number of bytes in lv_fs_read() */ +#endif + +/** API for CreateFile, ReadFile, etc. */ +#define LV_USE_FS_WIN32 0 +#if LV_USE_FS_WIN32 + #define LV_FS_WIN32_LETTER '\0' /**< Set an upper-case driver-identifier letter for this driver (e.g. 'A'). */ + #define LV_FS_WIN32_PATH "" /**< Set the working directory. File/directory paths will be appended to it. */ + #define LV_FS_WIN32_CACHE_SIZE 0 /**< >0 to cache this number of bytes in lv_fs_read() */ +#endif + +/** API for FATFS (needs to be added separately). Uses f_open, f_read, etc. */ +#define LV_USE_FS_FATFS 0 +#if LV_USE_FS_FATFS + #define LV_FS_FATFS_LETTER '\0' /**< Set an upper-case driver-identifier letter for this driver (e.g. 'A'). */ + #define LV_FS_FATFS_PATH "" /**< Set the working directory. File/directory paths will be appended to it. */ + #define LV_FS_FATFS_CACHE_SIZE 0 /**< >0 to cache this number of bytes in lv_fs_read() */ +#endif + +/** API for memory-mapped file access. */ +#define LV_USE_FS_MEMFS 0 +#if LV_USE_FS_MEMFS + #define LV_FS_MEMFS_LETTER '\0' /**< Set an upper-case driver-identifier letter for this driver (e.g. 'A'). */ +#endif + +/** API for LittleFs. */ +#define LV_USE_FS_LITTLEFS 0 +#if LV_USE_FS_LITTLEFS + #define LV_FS_LITTLEFS_LETTER '\0' /**< Set an upper-case driver-identifier letter for this driver (e.g. 'A'). */ + #define LV_FS_LITTLEFS_PATH "" /**< Set the working directory. File/directory paths will be appended to it. */ +#endif + +/** API for Arduino LittleFs. */ +#define LV_USE_FS_ARDUINO_ESP_LITTLEFS 0 +#if LV_USE_FS_ARDUINO_ESP_LITTLEFS + #define LV_FS_ARDUINO_ESP_LITTLEFS_LETTER '\0' /**< Set an upper-case driver-identifier letter for this driver (e.g. 'A'). */ + #define LV_FS_ARDUINO_ESP_LITTLEFS_PATH "" /**< Set the working directory. File/directory paths will be appended to it. */ +#endif + +/** API for Arduino Sd. */ +#define LV_USE_FS_ARDUINO_SD 0 +#if LV_USE_FS_ARDUINO_SD + #define LV_FS_ARDUINO_SD_LETTER '\0' /**< Set an upper-case driver-identifier letter for this driver (e.g. 'A'). */ + #define LV_FS_ARDUINO_SD_PATH "" /**< Set the working directory. File/directory paths will be appended to it. */ +#endif + +/** API for UEFI */ +#define LV_USE_FS_UEFI 0 +#if LV_USE_FS_UEFI + #define LV_FS_UEFI_LETTER '\0' /**< Set an upper-case driver-identifier letter for this driver (e.g. 'A'). */ +#endif + +/** LODEPNG decoder library */ +#define LV_USE_LODEPNG 0 + +/** PNG decoder(libpng) library */ +#define LV_USE_LIBPNG 0 + +/** BMP decoder library */ +#define LV_USE_BMP 0 + +/** JPG + split JPG decoder library. + * Split JPG is a custom format optimized for embedded systems. */ +#define LV_USE_TJPGD 0 + +/** libjpeg-turbo decoder library. + * - Supports complete JPEG specifications and high-performance JPEG decoding. */ +#define LV_USE_LIBJPEG_TURBO 0 + +/** GIF decoder library */ +#define LV_USE_GIF 0 +#if LV_USE_GIF + /** GIF decoder accelerate */ + #define LV_GIF_CACHE_DECODE_DATA 0 +#endif + + +/** Decode bin images to RAM */ +#define LV_BIN_DECODER_RAM_LOAD 0 + +/** RLE decompress library */ +#define LV_USE_RLE 0 + +/** QR code library */ +#define LV_USE_QRCODE 0 + +/** Barcode code library */ +#define LV_USE_BARCODE 0 + +/** FreeType library */ +#define LV_USE_FREETYPE 0 +#if LV_USE_FREETYPE + /** Let FreeType use LVGL memory and file porting */ + #define LV_FREETYPE_USE_LVGL_PORT 0 + + /** Cache count of glyphs in FreeType, i.e. number of glyphs that can be cached. + * The higher the value, the more memory will be used. */ + #define LV_FREETYPE_CACHE_FT_GLYPH_CNT 256 +#endif + +/** Built-in TTF decoder */ +#define LV_USE_TINY_TTF 0 +#if LV_USE_TINY_TTF + /* Enable loading TTF data from files */ + #define LV_TINY_TTF_FILE_SUPPORT 0 + #define LV_TINY_TTF_CACHE_GLYPH_CNT 256 +#endif + +/** Rlottie library */ +#define LV_USE_RLOTTIE 0 + +/** Enable Vector Graphic APIs + * - Requires `LV_USE_MATRIX = 1` */ +#define LV_USE_VECTOR_GRAPHIC 0 + +/** Enable ThorVG (vector graphics library) from the src/libs folder */ +#define LV_USE_THORVG_INTERNAL 0 + +/** Enable ThorVG by assuming that its installed and linked to the project */ +#define LV_USE_THORVG_EXTERNAL 0 + +/** Use lvgl built-in LZ4 lib */ +#define LV_USE_LZ4_INTERNAL 0 + +/** Use external LZ4 library */ +#define LV_USE_LZ4_EXTERNAL 0 + +/*SVG library + * - Requires `LV_USE_VECTOR_GRAPHIC = 1` */ +#define LV_USE_SVG 0 +#define LV_USE_SVG_ANIMATION 0 +#define LV_USE_SVG_DEBUG 0 + +/** FFmpeg library for image decoding and playing videos. + * Supports all major image formats so do not enable other image decoder with it. */ +#define LV_USE_FFMPEG 0 +#if LV_USE_FFMPEG + /** Dump input information to stderr */ + #define LV_FFMPEG_DUMP_FORMAT 0 + /** Use lvgl file path in FFmpeg Player widget + * You won't be able to open URLs after enabling this feature. + * Note that FFmpeg image decoder will always use lvgl file system. */ + #define LV_FFMPEG_PLAYER_USE_LV_FS 0 +#endif + +/*================== + * OTHERS + *==================*/ +/* Documentation for several of the below items can be found here: https://docs.lvgl.io/master/others/index.html . */ + +/** 1: Enable API to take snapshot for object */ +#define LV_USE_SNAPSHOT 0 + +/** 1: Enable system monitor component */ +#define LV_USE_SYSMON 0 +#if LV_USE_SYSMON + /** Get the idle percentage. E.g. uint32_t my_get_idle(void); */ + #define LV_SYSMON_GET_IDLE lv_os_get_idle_percent + + /** 1: Show CPU usage and FPS count. + * - Requires `LV_USE_SYSMON = 1` */ + #define LV_USE_PERF_MONITOR 0 + #if LV_USE_PERF_MONITOR + #define LV_USE_PERF_MONITOR_POS LV_ALIGN_BOTTOM_RIGHT + + /** 0: Displays performance data on the screen; 1: Prints performance data using log. */ + #define LV_USE_PERF_MONITOR_LOG_MODE 0 + #endif + + /** 1: Show used memory and memory fragmentation. + * - Requires `LV_USE_STDLIB_MALLOC = LV_STDLIB_BUILTIN` + * - Requires `LV_USE_SYSMON = 1`*/ + #define LV_USE_MEM_MONITOR 0 + #if LV_USE_MEM_MONITOR + #define LV_USE_MEM_MONITOR_POS LV_ALIGN_BOTTOM_LEFT + #endif +#endif /*LV_USE_SYSMON*/ + +/** 1: Enable runtime performance profiler */ +#define LV_USE_PROFILER 0 +#if LV_USE_PROFILER + /** 1: Enable the built-in profiler */ + #define LV_USE_PROFILER_BUILTIN 1 + #if LV_USE_PROFILER_BUILTIN + /** Default profiler trace buffer size */ + #define LV_PROFILER_BUILTIN_BUF_SIZE (16 * 1024) /**< [bytes] */ + #endif + + /** Header to include for profiler */ + #define LV_PROFILER_INCLUDE "lvgl/src/misc/lv_profiler_builtin.h" + + /** Profiler start point function */ + #define LV_PROFILER_BEGIN LV_PROFILER_BUILTIN_BEGIN + + /** Profiler end point function */ + #define LV_PROFILER_END LV_PROFILER_BUILTIN_END + + /** Profiler start point function with custom tag */ + #define LV_PROFILER_BEGIN_TAG LV_PROFILER_BUILTIN_BEGIN_TAG + + /** Profiler end point function with custom tag */ + #define LV_PROFILER_END_TAG LV_PROFILER_BUILTIN_END_TAG + + /*Enable layout profiler*/ + #define LV_PROFILER_LAYOUT 1 + + /*Enable disp refr profiler*/ + #define LV_PROFILER_REFR 1 + + /*Enable draw profiler*/ + #define LV_PROFILER_DRAW 1 + + /*Enable indev profiler*/ + #define LV_PROFILER_INDEV 1 + + /*Enable decoder profiler*/ + #define LV_PROFILER_DECODER 1 + + /*Enable font profiler*/ + #define LV_PROFILER_FONT 1 + + /*Enable fs profiler*/ + #define LV_PROFILER_FS 1 + + /*Enable style profiler*/ + #define LV_PROFILER_STYLE 0 + + /*Enable timer profiler*/ + #define LV_PROFILER_TIMER 1 + + /*Enable cache profiler*/ + #define LV_PROFILER_CACHE 1 + + /*Enable event profiler*/ + #define LV_PROFILER_EVENT 1 +#endif + +/** 1: Enable Monkey test */ +#define LV_USE_MONKEY 0 + +/** 1: Enable grid navigation */ +#define LV_USE_GRIDNAV 0 + +/** 1: Enable `lv_obj` fragment logic */ +#define LV_USE_FRAGMENT 0 + +/** 1: Support using images as font in label or span widgets */ +#define LV_USE_IMGFONT 0 + +/** 1: Enable an observer pattern implementation */ +#define LV_USE_OBSERVER 1 + +/** 1: Enable Pinyin input method + * - Requires: lv_keyboard */ +#define LV_USE_IME_PINYIN 0 +#if LV_USE_IME_PINYIN + /** 1: Use default thesaurus. + * @note If you do not use the default thesaurus, be sure to use `lv_ime_pinyin` after setting the thesaurus. */ + #define LV_IME_PINYIN_USE_DEFAULT_DICT 1 + /** Set maximum number of candidate panels that can be displayed. + * @note This needs to be adjusted according to size of screen. */ + #define LV_IME_PINYIN_CAND_TEXT_NUM 6 + + /** Use 9-key input (k9). */ + #define LV_IME_PINYIN_USE_K9_MODE 1 + #if LV_IME_PINYIN_USE_K9_MODE == 1 + #define LV_IME_PINYIN_K9_CAND_TEXT_NUM 3 + #endif /*LV_IME_PINYIN_USE_K9_MODE*/ +#endif + +/** 1: Enable file explorer. + * - Requires: lv_table */ +#define LV_USE_FILE_EXPLORER 0 +#if LV_USE_FILE_EXPLORER + /** Maximum length of path */ + #define LV_FILE_EXPLORER_PATH_MAX_LEN (128) + /** Quick access bar, 1:use, 0:do not use. + * - Requires: lv_list */ + #define LV_FILE_EXPLORER_QUICK_ACCESS 1 +#endif + +/** 1: Enable freetype font manager + * - Requires: LV_USE_FREETYPE */ +#define LV_USE_FONT_MANAGER 0 +#if LV_USE_FONT_MANAGER + +/**Font manager name max length*/ +#define LV_FONT_MANAGER_NAME_MAX_LEN 32 + +#endif + +/** Enable emulated input devices, time emulation, and screenshot compares. */ +#define LV_USE_TEST 0 +#if LV_USE_TEST + +/** Enable `lv_test_screenshot_compare`. + * Requires libpng and a few MB of extra RAM. */ +#define LV_USE_TEST_SCREENSHOT_COMPARE 0 +#endif /*LV_USE_TEST*/ + +/** Enable loading XML UIs runtime */ +#define LV_USE_XML 0 + +/*================== + * DEVICES + *==================*/ + +/** Use SDL to open window on PC and handle mouse and keyboard. */ +#define LV_USE_SDL 1 +#if LV_USE_SDL + #define LV_SDL_INCLUDE_PATH + #define LV_SDL_RENDER_MODE LV_DISPLAY_RENDER_MODE_DIRECT /**< LV_DISPLAY_RENDER_MODE_DIRECT is recommended for best performance */ + #define LV_SDL_BUF_COUNT 1 /**< 1 or 2 */ + #define LV_SDL_ACCELERATED 1 /**< 1: Use hardware acceleration*/ + #define LV_SDL_FULLSCREEN 0 /**< 1: Make the window full screen by default */ + #define LV_SDL_DIRECT_EXIT 1 /**< 1: Exit the application when all SDL windows are closed */ + #define LV_SDL_MOUSEWHEEL_MODE LV_SDL_MOUSEWHEEL_MODE_ENCODER /*LV_SDL_MOUSEWHEEL_MODE_ENCODER/CROWN*/ +#endif + +/** Use X11 to open window on Linux desktop and handle mouse and keyboard */ +#define LV_USE_X11 0 +#if LV_USE_X11 + #define LV_X11_DIRECT_EXIT 1 /**< Exit application when all X11 windows have been closed */ + #define LV_X11_DOUBLE_BUFFER 1 /**< Use double buffers for rendering */ + /* Select only 1 of the following render modes (LV_X11_RENDER_MODE_PARTIAL preferred!). */ + #define LV_X11_RENDER_MODE_PARTIAL 1 /**< Partial render mode (preferred) */ + #define LV_X11_RENDER_MODE_DIRECT 0 /**< Direct render mode */ + #define LV_X11_RENDER_MODE_FULL 0 /**< Full render mode */ +#endif + +/** Use Wayland to open a window and handle input on Linux or BSD desktops */ +#define LV_USE_WAYLAND 0 +#if LV_USE_WAYLAND + #define LV_WAYLAND_WINDOW_DECORATIONS 0 /**< Draw client side window decorations only necessary on Mutter/GNOME */ + #define LV_WAYLAND_WL_SHELL 0 /**< Use the legacy wl_shell protocol instead of the default XDG shell */ +#endif + +/** Driver for /dev/fb */ +#define LV_USE_LINUX_FBDEV 0 +#if LV_USE_LINUX_FBDEV + #define LV_LINUX_FBDEV_BSD 0 + #define LV_LINUX_FBDEV_RENDER_MODE LV_DISPLAY_RENDER_MODE_PARTIAL + #define LV_LINUX_FBDEV_BUFFER_COUNT 0 + #define LV_LINUX_FBDEV_BUFFER_SIZE 60 +#endif + +/** Use Nuttx to open window and handle touchscreen */ +#define LV_USE_NUTTX 0 + +#if LV_USE_NUTTX + #define LV_USE_NUTTX_INDEPENDENT_IMAGE_HEAP 0 + + /** Use independent image heap for default draw buffer */ + #define LV_NUTTX_DEFAULT_DRAW_BUF_USE_INDEPENDENT_IMAGE_HEAP 0 + + #define LV_USE_NUTTX_LIBUV 0 + + /** Use Nuttx custom init API to open window and handle touchscreen */ + #define LV_USE_NUTTX_CUSTOM_INIT 0 + + /** Driver for /dev/lcd */ + #define LV_USE_NUTTX_LCD 0 + #if LV_USE_NUTTX_LCD + #define LV_NUTTX_LCD_BUFFER_COUNT 0 + #define LV_NUTTX_LCD_BUFFER_SIZE 60 + #endif + + /** Driver for /dev/input */ + #define LV_USE_NUTTX_TOUCHSCREEN 0 + + /*Touchscreen cursor size in pixels(<=0: disable cursor)*/ + #define LV_NUTTX_TOUCHSCREEN_CURSOR_SIZE 0 +#endif + +/** Driver for /dev/dri/card */ +#define LV_USE_LINUX_DRM 0 + +#if LV_USE_LINUX_DRM + + /* Use the MESA GBM library to allocate DMA buffers that can be + * shared across sub-systems and libraries using the Linux DMA-BUF API. + * The GBM library aims to provide a platform independent memory management system + * it supports the major GPU vendors - This option requires linking with libgbm */ + #define LV_LINUX_DRM_GBM_BUFFERS 0 +#endif + +/** Interface for TFT_eSPI */ +#define LV_USE_TFT_ESPI 0 + +/** Driver for evdev input devices */ +#define LV_USE_EVDEV 0 + +/** Driver for libinput input devices */ +#define LV_USE_LIBINPUT 0 + +#if LV_USE_LIBINPUT + #define LV_LIBINPUT_BSD 0 + + /** Full keyboard support */ + #define LV_LIBINPUT_XKB 0 + #if LV_LIBINPUT_XKB + /** "setxkbmap -query" can help find the right values for your keyboard */ + #define LV_LIBINPUT_XKB_KEY_MAP { .rules = NULL, .model = "pc101", .layout = "us", .variant = NULL, .options = NULL } + #endif +#endif + +/* Drivers for LCD devices connected via SPI/parallel port */ +#define LV_USE_ST7735 0 +#define LV_USE_ST7789 0 +#define LV_USE_ST7796 0 +#define LV_USE_ILI9341 0 + +#define LV_USE_GENERIC_MIPI (LV_USE_ST7735 | LV_USE_ST7789 | LV_USE_ST7796 | LV_USE_ILI9341) + +/** Driver for Renesas GLCD */ +#define LV_USE_RENESAS_GLCDC 0 + +/** Driver for ST LTDC */ +#define LV_USE_ST_LTDC 0 +#if LV_USE_ST_LTDC + /* Only used for partial. */ + #define LV_ST_LTDC_USE_DMA2D_FLUSH 0 +#endif + +/** LVGL Windows backend */ +#define LV_USE_WINDOWS 0 + +/** LVGL UEFI backend */ +#define LV_USE_UEFI 0 +#if LV_USE_UEFI + #define LV_USE_UEFI_INCLUDE "myefi.h" /**< Header that hides the actual framework (EDK2, gnu-efi, ...) */ + #define LV_UEFI_USE_MEMORY_SERVICES 0 /**< Use the memory functions from the boot services table */ +#endif + +/** Use OpenGL to open window on PC and handle mouse and keyboard */ +#define LV_USE_OPENGLES 0 +#if LV_USE_OPENGLES + #define LV_USE_OPENGLES_DEBUG 1 /**< Enable or disable debug for opengles */ +#endif + +/** QNX Screen display and input drivers */ +#define LV_USE_QNX 0 +#if LV_USE_QNX + #define LV_QNX_BUF_COUNT 1 /**< 1 or 2 */ +#endif + +/*================== +* EXAMPLES +*==================*/ + +/** Enable examples to be built with the library. */ +#define LV_BUILD_EXAMPLES 1 + +/*=================== + * DEMO USAGE + ====================*/ + +/** Show some widgets. This might be required to increase `LV_MEM_SIZE`. */ +#define LV_USE_DEMO_WIDGETS 0 + +/** Demonstrate usage of encoder and keyboard. */ +#define LV_USE_DEMO_KEYPAD_AND_ENCODER 0 + +/** Benchmark your system */ +#define LV_USE_DEMO_BENCHMARK 0 + +/** Render test for each primitive. + * - Requires at least 480x272 display. */ +#define LV_USE_DEMO_RENDER 0 + +/** Stress test for LVGL */ +#define LV_USE_DEMO_STRESS 0 + +/** Music player demo */ +#define LV_USE_DEMO_MUSIC 0 +#if LV_USE_DEMO_MUSIC + #define LV_DEMO_MUSIC_SQUARE 0 + #define LV_DEMO_MUSIC_LANDSCAPE 0 + #define LV_DEMO_MUSIC_ROUND 0 + #define LV_DEMO_MUSIC_LARGE 0 + #define LV_DEMO_MUSIC_AUTO_PLAY 0 +#endif + +/** Flex layout demo */ +#define LV_USE_DEMO_FLEX_LAYOUT 0 + +/** Smart-phone like multi-language demo */ +#define LV_USE_DEMO_MULTILANG 0 + +/** Widget transformation demo */ +#define LV_USE_DEMO_TRANSFORM 0 + +/** Demonstrate scroll settings */ +#define LV_USE_DEMO_SCROLL 0 + +/** Vector graphic demo */ +#define LV_USE_DEMO_VECTOR_GRAPHIC 0 + +/*E-bike demo with Lottie animations (if LV_USE_LOTTIE is enabled)*/ +#define LV_USE_DEMO_EBIKE 0 +#if LV_USE_DEMO_EBIKE + #define LV_DEMO_EBIKE_PORTRAIT 0 /*0: for 480x270..480x320, 1: for 480x800..720x1280*/ +#endif + +/** High-resolution demo */ +#define LV_USE_DEMO_HIGH_RES 0 + +/* Smart watch demo */ +#define LV_USE_DEMO_SMARTWATCH 0 + +/*--END OF LV_CONF_H--*/ + +#endif /*LV_CONF_H*/ + +#endif /*End of "Content enable"*/ diff --git a/lvgl/themes/lv_theme_default.go b/lvgl/themes/lv_theme_default.go new file mode 100644 index 00000000..27f93ea2 --- /dev/null +++ b/lvgl/themes/lv_theme_default.go @@ -0,0 +1,21 @@ +package themes + +import ( + _ "unsafe" + + "github.com/goplus/llgo/c" + core "github.com/goplus/llpkg/lvgl/core" + font "github.com/goplus/llpkg/lvgl/font" +) + +//go:linkname LvThemeDefaultInit C.lv_theme_default_init +func LvThemeDefaultInit(disp *core.LvDisplayT, colorPrimary core.LvColorT, colorSecondary core.LvColorT, dark c.Char, font *font.LvFontT) *core.LvThemeT + +//go:linkname LvThemeDefaultGet C.lv_theme_default_get +func LvThemeDefaultGet() *core.LvThemeT + +//go:linkname LvThemeDefaultIsInited C.lv_theme_default_is_inited +func LvThemeDefaultIsInited() c.Char + +//go:linkname LvThemeDefaultDeinit C.lv_theme_default_deinit +func LvThemeDefaultDeinit() diff --git a/lvgl/themes/lv_theme_mono.go b/lvgl/themes/lv_theme_mono.go new file mode 100644 index 00000000..d17199be --- /dev/null +++ b/lvgl/themes/lv_theme_mono.go @@ -0,0 +1,21 @@ +package themes + +import ( + _ "unsafe" + + "github.com/goplus/llgo/c" + core "github.com/goplus/llpkg/lvgl/core" + font "github.com/goplus/llpkg/lvgl/font" +) + +//go:linkname LvThemeMonoInit C.lv_theme_mono_init +func LvThemeMonoInit(disp *core.LvDisplayT, dark c.Char, font *font.LvFontT) *core.LvThemeT + +//go:linkname LvThemeMonoGet C.lv_theme_mono_get +func LvThemeMonoGet() *core.LvThemeT + +//go:linkname LvThemeMonoIsInited C.lv_theme_mono_is_inited +func LvThemeMonoIsInited() c.Char + +//go:linkname LvThemeMonoDeinit C.lv_theme_mono_deinit +func LvThemeMonoDeinit() diff --git a/lvgl/themes/lv_theme_simple.go b/lvgl/themes/lv_theme_simple.go new file mode 100644 index 00000000..c44fdd4a --- /dev/null +++ b/lvgl/themes/lv_theme_simple.go @@ -0,0 +1,20 @@ +package themes + +import ( + _ "unsafe" + + "github.com/goplus/llgo/c" + core "github.com/goplus/llpkg/lvgl/core" +) + +//go:linkname LvThemeSimpleInit C.lv_theme_simple_init +func LvThemeSimpleInit(disp *core.LvDisplayT) *core.LvThemeT + +//go:linkname LvThemeSimpleIsInited C.lv_theme_simple_is_inited +func LvThemeSimpleIsInited() c.Char + +//go:linkname LvThemeSimpleGet C.lv_theme_simple_get +func LvThemeSimpleGet() *core.LvThemeT + +//go:linkname LvThemeSimpleDeinit C.lv_theme_simple_deinit +func LvThemeSimpleDeinit() diff --git a/lvgl/themes/themes.go b/lvgl/themes/themes.go new file mode 100644 index 00000000..a57ee25a --- /dev/null +++ b/lvgl/themes/themes.go @@ -0,0 +1,40 @@ +package themes + +import ( + _ "unsafe" + + core "github.com/goplus/llpkg/lvgl/core" + font "github.com/goplus/llpkg/lvgl/font" +) + +// LvThemeApplyCbT is a callback type for theme application +// +//llgo:type C +type LvThemeApplyCbT func(*core.LvThemeT, *core.LvObjT) + +//go:linkname LvThemeGetFromObj C.lv_theme_get_from_obj +func LvThemeGetFromObj(obj *core.LvObjT) *core.LvThemeT + +//go:linkname LvThemeApply C.lv_theme_apply +func LvThemeApply(obj *core.LvObjT) + +//go:linkname LvThemeSetParent C.lv_theme_set_parent +func LvThemeSetParent(newTheme *core.LvThemeT, parent *core.LvThemeT) + +//go:linkname LvThemeSetApplyCb C.lv_theme_set_apply_cb +func LvThemeSetApplyCb(theme *core.LvThemeT, applyCb LvThemeApplyCbT) + +//go:linkname LvThemeGetFontSmall C.lv_theme_get_font_small +func LvThemeGetFontSmall(obj *core.LvObjT) *font.LvFontT + +//go:linkname LvThemeGetFontNormal C.lv_theme_get_font_normal +func LvThemeGetFontNormal(obj *core.LvObjT) *font.LvFontT + +//go:linkname LvThemeGetFontLarge C.lv_theme_get_font_large +func LvThemeGetFontLarge(obj *core.LvObjT) *font.LvFontT + +//go:linkname LvThemeGetColorPrimary C.lv_theme_get_color_primary +func LvThemeGetColorPrimary(obj *core.LvObjT) core.LvColorT + +//go:linkname LvThemeGetColorSecondary C.lv_theme_get_color_secondary +func LvThemeGetColorSecondary(obj *core.LvObjT) core.LvColorT diff --git a/lvgl/tick/tick.go b/lvgl/tick/tick.go new file mode 100644 index 00000000..c3405f76 --- /dev/null +++ b/lvgl/tick/tick.go @@ -0,0 +1,29 @@ +package tick + +import ( + _ "unsafe" + + "github.com/goplus/llgo/c" +) + +// Function types for callbacks +type LvTickGetCbT func() c.Uint32T +type LvDelayCbT func(c.Uint32T) + +//go:linkname LvTickInc C.lv_tick_inc +func LvTickInc(tickPeriod c.Uint32T) + +//go:linkname LvTickGet C.lv_tick_get +func LvTickGet() c.Uint32T + +//go:linkname LvTickElaps C.lv_tick_elaps +func LvTickElaps(prevTick c.Uint32T) c.Uint32T + +//go:linkname LvDelayMs C.lv_delay_ms +func LvDelayMs(ms c.Uint32T) + +//go:linkname LvTickSetCb C.lv_tick_set_cb +func LvTickSetCb(cb LvTickGetCbT) + +//go:linkname LvDelaySetCb C.lv_delay_set_cb +func LvDelaySetCb(cb LvDelayCbT) diff --git a/lvgl/timer.go b/lvgl/timer.go new file mode 100644 index 00000000..16a99344 --- /dev/null +++ b/lvgl/timer.go @@ -0,0 +1,22 @@ +package lvgl + +import ( + _ "unsafe" + + "github.com/goplus/llgo/c" +) + +/********************** + * GLOBAL PROTOTYPES + **********************/ + +//! @cond Doxygen_Suppress + +/** + * Call it periodically to handle lv_timers. + * @return time till it needs to be run next (in ms) + */ +// LV_ATTRIBUTE_TIMER_HANDLER uint32_t lv_timer_handler(void); + +//go:linkname LvTimerHandler C.lv_timer_handler +func LvTimerHandler() c.Uint diff --git a/lvgl/widgets/animimage.go b/lvgl/widgets/animimage.go new file mode 100644 index 00000000..faae0c7a --- /dev/null +++ b/lvgl/widgets/animimage.go @@ -0,0 +1,49 @@ +/** + * @file lv_animimage.h + * + */ + +package widgets + +import ( + _ "unsafe" + + "github.com/goplus/llgo/c" + core "github.com/goplus/llpkg/lvgl/core" +) + +type lv_animimg_part_t c.Int + +const ( + LV_ANIM_IMAGE_PART_MAIN lv_animimg_part_t = iota +) + +//go:linkname LvAnimimgCreate C.lv_animimg_create +func LvAnimimgCreate(parent *core.LvObjT) *core.LvObjT + +//go:linkname LvAnimimgSetSrc C.lv_animimg_set_src +func LvAnimimgSetSrc(img *core.LvObjT, dsc []*c.Void, num c.SizeT) + +//go:linkname LvAnimimgStart C.lv_animimg_start +func LvAnimimgStart(obj *core.LvObjT) + +//go:linkname LvAnimimgSetDuration C.lv_animimg_set_duration +func LvAnimimgSetDuration(img *core.LvObjT, duration c.Uint32T) + +//go:linkname LvAnimimgSetRepeatCount C.lv_animimg_set_repeat_count +func LvAnimimgSetRepeatCount(img *core.LvObjT, count c.Uint32T) + +//go:linkname LvAnimimgGetSrc C.lv_animimg_get_src +func LvAnimimgGetSrc(img *core.LvObjT) []*c.Void + +//go:linkname LvAnimimgGetSrcCount C.lv_animimg_get_src_count +func LvAnimimgGetSrcCount(img *core.LvObjT) c.Uint8T + +//go:linkname LvAnimimgGetDuration C.lv_animimg_get_duration +func LvAnimimgGetDuration(img *core.LvObjT) c.Uint32T + +//go:linkname LvAnimimgGetRepeatCount C.lv_animimg_get_repeat_count +func LvAnimimgGetRepeatCount(img *core.LvObjT) c.Uint32T + +//go:linkname LvAnimimgGetAnim C.lv_animimg_get_anim +func LvAnimimgGetAnim(img *core.LvObjT) *core.LvAnimT diff --git a/lvgl/widgets/arc.go b/lvgl/widgets/arc.go new file mode 100644 index 00000000..e58d837b --- /dev/null +++ b/lvgl/widgets/arc.go @@ -0,0 +1,94 @@ +package widgets + +import ( + _ "unsafe" + + "github.com/goplus/llgo/c" + core "github.com/goplus/llpkg/lvgl/core" +) + +type lv_arc_mode_t c.Int + +const ( + LV_ARC_MODE_NORMAL lv_arc_mode_t = iota + LV_ARC_MODE_SYMMETRICAL + LV_ARC_MODE_REVERSE +) + +//go:linkname LvArcCreate C.lv_arc_create +func LvArcCreate(parent *core.LvObjT) *core.LvObjT + +//go:linkname LvArcSetStartAngle C.lv_arc_set_start_angle +func LvArcSetStartAngle(obj *core.LvObjT, start lv_value_precise_t) + +//go:linkname LvArcSetEndAngle C.lv_arc_set_end_angle +func LvArcSetEndAngle(obj *core.LvObjT, end lv_value_precise_t) + +//go:linkname LvArcSetAngles C.lv_arc_set_angles +func LvArcSetAngles(obj *core.LvObjT, start, end lv_value_precise_t) + +//go:linkname LvArcSetBgStartAngle C.lv_arc_set_bg_start_angle +func LvArcSetBgStartAngle(obj *core.LvObjT, start lv_value_precise_t) + +//go:linkname LvArcSetBgEndAngle C.lv_arc_set_bg_end_angle +func LvArcSetBgEndAngle(obj *core.LvObjT, end lv_value_precise_t) + +//go:linkname LvArcSetBgAngles C.lv_arc_set_bg_angles +func LvArcSetBgAngles(obj *core.LvObjT, start, end lv_value_precise_t) + +//go:linkname LvArcSetRotation C.lv_arc_set_rotation +func LvArcSetRotation(obj *core.LvObjT, rotation c.Int32T) + +//go:linkname LvArcSetMode C.lv_arc_set_mode +func LvArcSetMode(obj *core.LvObjT, mode lv_arc_mode_t) + +//go:linkname LvArcSetValue C.lv_arc_set_value +func LvArcSetValue(obj *core.LvObjT, value c.Int32T) + +//go:linkname LvArcSetRange C.lv_arc_set_range +func LvArcSetRange(obj *core.LvObjT, min, max c.Int32T) + +//go:linkname LvArcSetChangeRate C.lv_arc_set_change_rate +func LvArcSetChangeRate(obj *core.LvObjT, rate c.Uint32T) + +//go:linkname LvArcSetKnobOffset C.lv_arc_set_knob_offset +func LvArcSetKnobOffset(obj *core.LvObjT, offset c.Int32T) + +//go:linkname LvArcGetAngleStart C.lv_arc_get_angle_start +func LvArcGetAngleStart(obj *core.LvObjT) lv_value_precise_t + +//go:linkname LvArcGetAngleEnd C.lv_arc_get_angle_end +func LvArcGetAngleEnd(obj *core.LvObjT) lv_value_precise_t + +//go:linkname LvArcGetBgAngleStart C.lv_arc_get_bg_angle_start +func LvArcGetBgAngleStart(obj *core.LvObjT) lv_value_precise_t + +//go:linkname LvArcGetBgAngleEnd C.lv_arc_get_bg_angle_end +func LvArcGetBgAngleEnd(obj *core.LvObjT) lv_value_precise_t + +//go:linkname LvArcGetValue C.lv_arc_get_value +func LvArcGetValue(obj *core.LvObjT) c.Int32T + +//go:linkname LvArcGetMinValue C.lv_arc_get_min_value +func LvArcGetMinValue(obj *core.LvObjT) c.Int32T + +//go:linkname LvArcGetMaxValue C.lv_arc_get_max_value +func LvArcGetMaxValue(obj *core.LvObjT) c.Int32T + +//go:linkname LvArcGetMode C.lv_arc_get_mode +func LvArcGetMode(obj *core.LvObjT) lv_arc_mode_t + +//go:linkname LvArcGetRotation C.lv_arc_get_rotation +func LvArcGetRotation(obj *core.LvObjT) c.Int32T + +//go:linkname LvArcGetKnobOffset C.lv_arc_get_knob_offset +func LvArcGetKnobOffset(obj *core.LvObjT) c.Int32T + +//go:linkname LvArcAlignObjToAngle C.lv_arc_align_obj_to_angle +func LvArcAlignObjToAngle(obj *core.LvObjT, obj_to_align *core.LvObjT, r_offset c.Int32T) + +//go:linkname LvArcRotateObjToAngle C.lv_arc_rotate_obj_to_angle +func LvArcRotateObjToAngle(obj *core.LvObjT, obj_to_rotate *core.LvObjT, r_offset c.Int32T) + +// Note: lv_value_precise_t is typically float or int32_t depending on LV_USE_FLOAT +type lv_value_precise_t c.Float diff --git a/lvgl/widgets/bar.go b/lvgl/widgets/bar.go new file mode 100644 index 00000000..11129ea2 --- /dev/null +++ b/lvgl/widgets/bar.go @@ -0,0 +1,71 @@ +package widgets + +import ( + _ "unsafe" + + "github.com/goplus/llgo/c" + core "github.com/goplus/llpkg/lvgl/core" +) + +type lv_bar_mode_t c.Int + +const ( + LV_BAR_MODE_NORMAL lv_bar_mode_t = iota + LV_BAR_MODE_SYMMETRICAL + LV_BAR_MODE_RANGE +) + +type lv_bar_orientation_t c.Int + +const ( + LV_BAR_ORIENTATION_AUTO lv_bar_orientation_t = iota + LV_BAR_ORIENTATION_HORIZONTAL + LV_BAR_ORIENTATION_VERTICAL +) + +// lv_anim_enable_t is typically defined in lv_anim.h +type lv_anim_enable_t c.Int + +const ( + LV_ANIM_OFF lv_anim_enable_t = 0 + LV_ANIM_ON lv_anim_enable_t = 1 +) + +//go:linkname LvBarCreate C.lv_bar_create +func LvBarCreate(parent *core.LvObjT) *core.LvObjT + +//go:linkname LvBarSetValue C.lv_bar_set_value +func LvBarSetValue(obj *core.LvObjT, value c.Int32T, anim lv_anim_enable_t) + +//go:linkname LvBarSetStartValue C.lv_bar_set_start_value +func LvBarSetStartValue(obj *core.LvObjT, start_value c.Int32T, anim lv_anim_enable_t) + +//go:linkname LvBarSetRange C.lv_bar_set_range +func LvBarSetRange(obj *core.LvObjT, min, max c.Int32T) + +//go:linkname LvBarSetMode C.lv_bar_set_mode +func LvBarSetMode(obj *core.LvObjT, mode lv_bar_mode_t) + +//go:linkname LvBarSetOrientation C.lv_bar_set_orientation +func LvBarSetOrientation(obj *core.LvObjT, orientation lv_bar_orientation_t) + +//go:linkname LvBarGetValue C.lv_bar_get_value +func LvBarGetValue(obj *core.LvObjT) c.Int32T + +//go:linkname LvBarGetStartValue C.lv_bar_get_start_value +func LvBarGetStartValue(obj *core.LvObjT) c.Int32T + +//go:linkname LvBarGetMinValue C.lv_bar_get_min_value +func LvBarGetMinValue(obj *core.LvObjT) c.Int32T + +//go:linkname LvBarGetMaxValue C.lv_bar_get_max_value +func LvBarGetMaxValue(obj *core.LvObjT) c.Int32T + +//go:linkname LvBarGetMode C.lv_bar_get_mode +func LvBarGetMode(obj *core.LvObjT) lv_bar_mode_t + +//go:linkname LvBarGetOrientation C.lv_bar_get_orientation +func LvBarGetOrientation(obj *core.LvObjT) lv_bar_orientation_t + +//go:linkname LvBarIsSymmetrical C.lv_bar_is_symmetrical +func LvBarIsSymmetrical(obj *core.LvObjT) bool diff --git a/lvgl/widgets/button.go b/lvgl/widgets/button.go new file mode 100644 index 00000000..deba35a1 --- /dev/null +++ b/lvgl/widgets/button.go @@ -0,0 +1,10 @@ +package widgets + +import ( + _ "unsafe" + + core "github.com/goplus/llpkg/lvgl/core" +) + +//go:linkname LvButtonCreate C.lv_button_create +func LvButtonCreate(parent *core.LvObjT) *core.LvObjT diff --git a/lvgl/widgets/buttonmatrix.go b/lvgl/widgets/buttonmatrix.go new file mode 100644 index 00000000..9cbf0ab9 --- /dev/null +++ b/lvgl/widgets/buttonmatrix.go @@ -0,0 +1,71 @@ +package widgets + +import ( + _ "unsafe" + + "github.com/goplus/llgo/c" + core "github.com/goplus/llpkg/lvgl/core" +) + +type lv_btnmatrix_ctrl_t c.Uint + +// Button matrix control flags +const ( + LV_BUTTONMATRIX_CTRL_NONE lv_btnmatrix_ctrl_t = 0x0000 /**< No extra control, use the default settings*/ + LV_BUTTONMATRIX_CTRL_WIDTH_1 lv_btnmatrix_ctrl_t = 0x0001 /**< Set the width to 1 relative to the other buttons in the same row */ + LV_BUTTONMATRIX_CTRL_WIDTH_2 lv_btnmatrix_ctrl_t = 0x0002 /**< Set the width to 2 relative to the other buttons in the same row */ + LV_BUTTONMATRIX_CTRL_WIDTH_3 lv_btnmatrix_ctrl_t = 0x0003 /**< Set the width to 3 relative to the other buttons in the same row */ + LV_BUTTONMATRIX_CTRL_WIDTH_4 lv_btnmatrix_ctrl_t = 0x0004 /**< Set the width to 4 relative to the other buttons in the same row */ + LV_BUTTONMATRIX_CTRL_WIDTH_5 lv_btnmatrix_ctrl_t = 0x0005 /**< Set the width to 5 relative to the other buttons in the same row */ + LV_BUTTONMATRIX_CTRL_WIDTH_6 lv_btnmatrix_ctrl_t = 0x0006 /**< Set the width to 6 relative to the other buttons in the same row */ + LV_BUTTONMATRIX_CTRL_WIDTH_7 lv_btnmatrix_ctrl_t = 0x0007 /**< Set the width to 7 relative to the other buttons in the same row */ + LV_BUTTONMATRIX_CTRL_WIDTH_8 lv_btnmatrix_ctrl_t = 0x0008 /**< Set the width to 8 relative to the other buttons in the same row */ + LV_BUTTONMATRIX_CTRL_WIDTH_9 lv_btnmatrix_ctrl_t = 0x0009 /**< Set the width to 9 relative to the other buttons in the same row */ + LV_BUTTONMATRIX_CTRL_WIDTH_10 lv_btnmatrix_ctrl_t = 0x000A /**< Set the width to 10 relative to the other buttons in the same row */ + LV_BUTTONMATRIX_CTRL_WIDTH_11 lv_btnmatrix_ctrl_t = 0x000B /**< Set the width to 11 relative to the other buttons in the same row */ + LV_BUTTONMATRIX_CTRL_WIDTH_12 lv_btnmatrix_ctrl_t = 0x000C /**< Set the width to 12 relative to the other buttons in the same row */ + LV_BUTTONMATRIX_CTRL_WIDTH_13 lv_btnmatrix_ctrl_t = 0x000D /**< Set the width to 13 relative to the other buttons in the same row */ + LV_BUTTONMATRIX_CTRL_WIDTH_14 lv_btnmatrix_ctrl_t = 0x000E /**< Set the width to 14 relative to the other buttons in the same row */ + LV_BUTTONMATRIX_CTRL_WIDTH_15 lv_btnmatrix_ctrl_t = 0x000F /**< Set the width to 15 relative to the other buttons in the same row */ + LV_BUTTONMATRIX_CTRL_HIDDEN lv_btnmatrix_ctrl_t = 0x0010 /**< Hides button; it continues to hold its space in layout. */ + LV_BUTTONMATRIX_CTRL_NO_REPEAT lv_btnmatrix_ctrl_t = 0x0020 /**< Do not emit LV_EVENT_LONG_PRESSED_REPEAT events while button is long-pressed. */ + LV_BUTTONMATRIX_CTRL_DISABLED lv_btnmatrix_ctrl_t = 0x0040 /**< Disables button like LV_STATE_DISABLED on normal Widgets. */ + LV_BUTTONMATRIX_CTRL_CHECKABLE lv_btnmatrix_ctrl_t = 0x0080 /**< Enable toggling of LV_STATE_CHECKED when clicked. */ + LV_BUTTONMATRIX_CTRL_CHECKED lv_btnmatrix_ctrl_t = 0x0100 /**< Make the button checked. It will use the :cpp:enumerator:`LV_STATE_CHECHKED` styles. */ + LV_BUTTONMATRIX_CTRL_CLICK_TRIG lv_btnmatrix_ctrl_t = 0x0200 /**< 1: Enables sending LV_EVENT_VALUE_CHANGE on CLICK, 0: sends LV_EVENT_VALUE_CHANGE on PRESS. */ + LV_BUTTONMATRIX_CTRL_POPOVER lv_btnmatrix_ctrl_t = 0x0400 /**< Show button text in a pop-over while being pressed. */ + LV_BUTTONMATRIX_CTRL_RECOLOR lv_btnmatrix_ctrl_t = 0x0800 /**< Enable text recoloring with `#color` */ + LV_BUTTONMATRIX_CTRL_RESERVED_1 lv_btnmatrix_ctrl_t = 0x1000 /**< Reserved for later use */ + LV_BUTTONMATRIX_CTRL_RESERVED_2 lv_btnmatrix_ctrl_t = 0x2000 /**< Reserved for later use */ + LV_BUTTONMATRIX_CTRL_CUSTOM_1 lv_btnmatrix_ctrl_t = 0x4000 /**< Custom free-to-use flag */ + LV_BUTTONMATRIX_CTRL_CUSTOM_2 lv_btnmatrix_ctrl_t = 0x8000 /**< Custom free-to-use flag */ +) + +type LvButtonmatrixCtrlT lv_btnmatrix_ctrl_t + +//go:linkname LvButtonmatrixCreate C.lv_buttonmatrix_create +func LvButtonmatrixCreate(parent *core.LvObjT) *core.LvObjT + +//go:linkname LvButtonmatrixSetMap C.lv_buttonmatrix_set_map +func LvButtonmatrixSetMap(obj *core.LvObjT, map_ **c.Char) + +//go:linkname LvButtonmatrixSetCtrlMap C.lv_buttonmatrix_set_ctrl_map +func LvButtonmatrixSetCtrlMap(obj *core.LvObjT, ctrl_map *lv_btnmatrix_ctrl_t) + +//go:linkname LvButtonmatrixSetSelectedBtn C.lv_buttonmatrix_set_selected_btn +func LvButtonmatrixSetSelectedBtn(obj *core.LvObjT, btn_id c.Uint16T) + +//go:linkname LvButtonmatrixSetBtnCtrl C.lv_buttonmatrix_set_btn_ctrl +func LvButtonmatrixSetBtnCtrl(obj *core.LvObjT, btn_id c.Uint16T, ctrl lv_btnmatrix_ctrl_t) + +//go:linkname LvButtonmatrixClearBtnCtrl C.lv_buttonmatrix_clear_btn_ctrl +func LvButtonmatrixClearBtnCtrl(obj *core.LvObjT, btn_id c.Uint16T, ctrl lv_btnmatrix_ctrl_t) + +//go:linkname LvButtonmatrixGetSelectedBtn C.lv_buttonmatrix_get_selected_btn +func LvButtonmatrixGetSelectedBtn(obj *core.LvObjT) c.Uint16T + +//go:linkname LvButtonmatrixGetBtnText C.lv_buttonmatrix_get_btn_text +func LvButtonmatrixGetBtnText(obj *core.LvObjT, btn_id c.Uint16T) *c.Char + +//go:linkname LvButtonmatrixHasBtnCtrl C.lv_buttonmatrix_has_btn_ctrl +func LvButtonmatrixHasBtnCtrl(obj *core.LvObjT, btn_id c.Uint16T, ctrl lv_btnmatrix_ctrl_t) bool diff --git a/lvgl/widgets/canvas.go b/lvgl/widgets/canvas.go new file mode 100644 index 00000000..a8dec3cf --- /dev/null +++ b/lvgl/widgets/canvas.go @@ -0,0 +1,51 @@ +package widgets + +import ( + "unsafe" + _ "unsafe" + + "github.com/goplus/llgo/c" + core "github.com/goplus/llpkg/lvgl/core" +) + +//go:linkname LvCanvasCreate C.lv_canvas_create +func LvCanvasCreate(parent *core.LvObjT) *core.LvObjT + +//go:linkname LvCanvasSetBuffer C.lv_canvas_set_buffer +func LvCanvasSetBuffer(obj *core.LvObjT, buf unsafe.Pointer, w c.Int32T, h c.Int32T, cf core.LvColorFormatT) + +//go:linkname LvCanvasSetDrawBuf C.lv_canvas_set_draw_buf +func LvCanvasSetDrawBuf(obj *core.LvObjT, draw_buf *core.LvDrawBufT) + +//go:linkname LvCanvasSetPx C.lv_canvas_set_px +func LvCanvasSetPx(obj *core.LvObjT, x c.Int32T, y c.Int32T, color core.LvColorT, opa core.LvOpaT) + +//go:linkname LvCanvasSetPalette C.lv_canvas_set_palette +func LvCanvasSetPalette(obj *core.LvObjT, index c.Uint8T, color core.LvColor32T) + +//go:linkname LvCanvasGetDrawBuf C.lv_canvas_get_draw_buf +func LvCanvasGetDrawBuf(obj *core.LvObjT) *core.LvDrawBufT + +//go:linkname LvCanvasGetPx C.lv_canvas_get_px +func LvCanvasGetPx(obj *core.LvObjT, x c.Int32T, y c.Int32T) core.LvColor32T + +//go:linkname LvCanvasGetImage C.lv_canvas_get_image +func LvCanvasGetImage(canvas *core.LvObjT) *core.LvImageDscT + +//go:linkname LvCanvasGetBuf C.lv_canvas_get_buf +func LvCanvasGetBuf(canvas *core.LvObjT) unsafe.Pointer + +//go:linkname LvCanvasCopyBuf C.lv_canvas_copy_buf +func LvCanvasCopyBuf(obj *core.LvObjT, canvas_area *core.LvAreaT, dest_buf *core.LvDrawBufT, dest_area *core.LvAreaT) + +//go:linkname LvCanvasFillBg C.lv_canvas_fill_bg +func LvCanvasFillBg(obj *core.LvObjT, color core.LvColorT, opa core.LvOpaT) + +//go:linkname LvCanvasInitLayer C.lv_canvas_init_layer +func LvCanvasInitLayer(canvas *core.LvObjT, layer *core.LvLayerT) + +//go:linkname LvCanvasFinishLayer C.lv_canvas_finish_layer +func LvCanvasFinishLayer(canvas *core.LvObjT, layer *core.LvLayerT) + +//go:linkname LvCanvasBufSize C.lv_canvas_buf_size +func LvCanvasBufSize(w c.Int32T, h c.Int32T, bpp c.Uint8T, stride c.Uint8T) c.Uint32T diff --git a/lvgl/widgets/chart.go b/lvgl/widgets/chart.go new file mode 100644 index 00000000..de3f6527 --- /dev/null +++ b/lvgl/widgets/chart.go @@ -0,0 +1,145 @@ +package widgets + +import ( + "math" + _ "unsafe" + + "github.com/goplus/llgo/c" + core "github.com/goplus/llpkg/lvgl/core" +) + +// Chart types +type LvChartTypeT uint8 + +const ( + LV_CHART_TYPE_NONE LvChartTypeT = iota // Don't draw the series + LV_CHART_TYPE_LINE // Connect the points with lines + LV_CHART_TYPE_BAR // Draw columns + LV_CHART_TYPE_SCATTER // Draw points and lines in 2D (x,y coordinates) +) + +// Chart update mode +type LvChartUpdateModeT uint8 + +const ( + LV_CHART_UPDATE_MODE_SHIFT LvChartUpdateModeT = iota // Shift old data to the left and add the new one the right + LV_CHART_UPDATE_MODE_CIRCULAR // Add the new data in a circular way +) + +// Chart axis +type LvChartAxisT uint8 + +const ( + LV_CHART_AXIS_PRIMARY_Y LvChartAxisT = 0x00 + LV_CHART_AXIS_SECONDARY_Y LvChartAxisT = 0x01 + LV_CHART_AXIS_PRIMARY_X LvChartAxisT = 0x02 + LV_CHART_AXIS_SECONDARY_X LvChartAxisT = 0x04 + LV_CHART_AXIS_LAST +) + +const LV_CHART_POINT_NONE = math.MaxInt32 + +//go:linkname LvChartCreate C.lv_chart_create +func LvChartCreate(parent *core.LvObjT) *core.LvObjT + +//go:linkname LvChartSetType C.lv_chart_set_type +func LvChartSetType(obj *core.LvObjT, type_ LvChartTypeT) + +//go:linkname LvChartSetPointCount C.lv_chart_set_point_count +func LvChartSetPointCount(obj *core.LvObjT, cnt c.Uint32T) + +//go:linkname LvChartSetAxisRange C.lv_chart_set_axis_range +func LvChartSetAxisRange(obj *core.LvObjT, axis LvChartAxisT, min c.Int32T, max c.Int32T) + +//go:linkname LvChartSetUpdateMode C.lv_chart_set_update_mode +func LvChartSetUpdateMode(obj *core.LvObjT, update_mode LvChartUpdateModeT) + +//go:linkname LvChartSetDivLineCount C.lv_chart_set_div_line_count +func LvChartSetDivLineCount(obj *core.LvObjT, hdiv c.Uint8T, vdiv c.Uint8T) + +//go:linkname LvChartGetType C.lv_chart_get_type +func LvChartGetType(obj *core.LvObjT) LvChartTypeT + +//go:linkname LvChartGetPointCount C.lv_chart_get_point_count +func LvChartGetPointCount(obj *core.LvObjT) c.Uint32T + +//go:linkname LvChartGetXStartPoint C.lv_chart_get_x_start_point +func LvChartGetXStartPoint(obj *core.LvObjT, ser *core.LvChartSeriesT) c.Uint32T + +//go:linkname LvChartGetPointPosByID C.lv_chart_get_point_pos_by_id +func LvChartGetPointPosByID(obj *core.LvObjT, ser *core.LvChartSeriesT, id c.Uint32T, p_out *core.LvPointT) + +//go:linkname LvChartRefresh C.lv_chart_refresh +func LvChartRefresh(obj *core.LvObjT) + +//go:linkname LvChartAddSeries C.lv_chart_add_series +func LvChartAddSeries(obj *core.LvObjT, color core.LvColorT, axis LvChartAxisT) *core.LvChartSeriesT + +//go:linkname LvChartRemoveSeries C.lv_chart_remove_series +func LvChartRemoveSeries(obj *core.LvObjT, series *core.LvChartSeriesT) + +//go:linkname LvChartHideSeries C.lv_chart_hide_series +func LvChartHideSeries(chart *core.LvObjT, series *core.LvChartSeriesT, hide bool) + +//go:linkname LvChartSetSeriesColor C.lv_chart_set_series_color +func LvChartSetSeriesColor(chart *core.LvObjT, series *core.LvChartSeriesT, color core.LvColorT) + +//go:linkname LvChartGetSeriesColor C.lv_chart_get_series_color +func LvChartGetSeriesColor(chart *core.LvObjT, series *core.LvChartSeriesT) core.LvColorT + +//go:linkname LvChartSetXStartPoint C.lv_chart_set_x_start_point +func LvChartSetXStartPoint(obj *core.LvObjT, ser *core.LvChartSeriesT, id c.Uint32T) + +//go:linkname LvChartGetSeriesNext C.lv_chart_get_series_next +func LvChartGetSeriesNext(chart *core.LvObjT, ser *core.LvChartSeriesT) *core.LvChartSeriesT + +//go:linkname LvChartAddCursor C.lv_chart_add_cursor +func LvChartAddCursor(obj *core.LvObjT, color core.LvColorT, dir core.LvDirT) *core.LvChartCursorT + +//go:linkname LvChartSetCursorPos C.lv_chart_set_cursor_pos +func LvChartSetCursorPos(chart *core.LvObjT, cursor *core.LvChartCursorT, pos *core.LvPointT) + +//go:linkname LvChartSetCursorPoint C.lv_chart_set_cursor_point +func LvChartSetCursorPoint(chart *core.LvObjT, cursor *core.LvChartCursorT, ser *core.LvChartSeriesT, point_id c.Uint32T) + +//go:linkname LvChartGetCursorPoint C.lv_chart_get_cursor_point +func LvChartGetCursorPoint(chart *core.LvObjT, cursor *core.LvChartCursorT) core.LvPointT + +//go:linkname LvChartSetAllValues C.lv_chart_set_all_values +func LvChartSetAllValues(obj *core.LvObjT, ser *core.LvChartSeriesT, value c.Int32T) + +//go:linkname LvChartSetNextValue C.lv_chart_set_next_value +func LvChartSetNextValue(obj *core.LvObjT, ser *core.LvChartSeriesT, value c.Int32T) + +//go:linkname LvChartSetNextValue2 C.lv_chart_set_next_value2 +func LvChartSetNextValue2(obj *core.LvObjT, ser *core.LvChartSeriesT, x_value c.Int32T, y_value c.Int32T) + +//go:linkname LvChartSetSeriesValues C.lv_chart_set_series_values +func LvChartSetSeriesValues(obj *core.LvObjT, ser *core.LvChartSeriesT, values *c.Int32T, values_cnt c.SizeT) + +//go:linkname LvChartSetSeriesValues2 C.lv_chart_set_series_values2 +func LvChartSetSeriesValues2(obj *core.LvObjT, ser *core.LvChartSeriesT, x_values *c.Int32T, y_values *c.Int32T, values_cnt c.SizeT) + +//go:linkname LvChartSetSeriesValueByID C.lv_chart_set_series_value_by_id +func LvChartSetSeriesValueByID(obj *core.LvObjT, ser *core.LvChartSeriesT, id c.Uint32T, value c.Int32T) + +//go:linkname LvChartSetSeriesValueByID2 C.lv_chart_set_series_value_by_id2 +func LvChartSetSeriesValueByID2(obj *core.LvObjT, ser *core.LvChartSeriesT, id c.Uint32T, x_value c.Int32T, y_value c.Int32T) + +//go:linkname LvChartSetSeriesExtYArray C.lv_chart_set_series_ext_y_array +func LvChartSetSeriesExtYArray(obj *core.LvObjT, ser *core.LvChartSeriesT, array *c.Int32T) + +//go:linkname LvChartSetSeriesExtXArray C.lv_chart_set_series_ext_x_array +func LvChartSetSeriesExtXArray(obj *core.LvObjT, ser *core.LvChartSeriesT, array *c.Int32T) + +//go:linkname LvChartGetSeriesYArray C.lv_chart_get_series_y_array +func LvChartGetSeriesYArray(obj *core.LvObjT, ser *core.LvChartSeriesT) *c.Int32T + +//go:linkname LvChartGetSeriesXArray C.lv_chart_get_series_x_array +func LvChartGetSeriesXArray(obj *core.LvObjT, ser *core.LvChartSeriesT) *c.Int32T + +//go:linkname LvChartGetPressedPoint C.lv_chart_get_pressed_point +func LvChartGetPressedPoint(obj *core.LvObjT) c.Uint32T + +//go:linkname LvChartGetFirstPointCenterOffset C.lv_chart_get_first_point_center_offset +func LvChartGetFirstPointCenterOffset(obj *core.LvObjT) c.Int32T diff --git a/lvgl/widgets/checkbox.go b/lvgl/widgets/checkbox.go new file mode 100644 index 00000000..3da236bb --- /dev/null +++ b/lvgl/widgets/checkbox.go @@ -0,0 +1,20 @@ +package widgets + +import ( + _ "unsafe" + + "github.com/goplus/llgo/c" + core "github.com/goplus/llpkg/lvgl/core" +) + +//go:linkname LvCheckboxCreate C.lv_checkbox_create +func LvCheckboxCreate(parent *core.LvObjT) *core.LvObjT + +//go:linkname LvCheckboxSetText C.lv_checkbox_set_text +func LvCheckboxSetText(obj *core.LvObjT, txt *c.Char) + +//go:linkname LvCheckboxSetTextStatic C.lv_checkbox_set_text_static +func LvCheckboxSetTextStatic(obj *core.LvObjT, txt *c.Char) + +//go:linkname LvCheckboxGetText C.lv_checkbox_get_text +func LvCheckboxGetText(obj *core.LvObjT) *c.Char diff --git a/lvgl/widgets/dropdown.go b/lvgl/widgets/dropdown.go new file mode 100644 index 00000000..f494be98 --- /dev/null +++ b/lvgl/widgets/dropdown.go @@ -0,0 +1,81 @@ +package widgets + +import ( + "unsafe" + _ "unsafe" + + "github.com/goplus/llgo/c" + core "github.com/goplus/llpkg/lvgl/core" +) + +// Constants +const LV_DROPDOWN_POS_LAST c.Uint32T = 0xFFFF + +//go:linkname LvDropdownCreate C.lv_dropdown_create +func LvDropdownCreate(parent *core.LvObjT) *core.LvObjT + +//go:linkname LvDropdownSetText C.lv_dropdown_set_text +func LvDropdownSetText(obj *core.LvObjT, txt *c.Char) + +//go:linkname LvDropdownSetOptions C.lv_dropdown_set_options +func LvDropdownSetOptions(obj *core.LvObjT, options *c.Char) + +//go:linkname LvDropdownSetOptionsStatic C.lv_dropdown_set_options_static +func LvDropdownSetOptionsStatic(obj *core.LvObjT, options *c.Char) + +//go:linkname LvDropdownAddOption C.lv_dropdown_add_option +func LvDropdownAddOption(obj *core.LvObjT, option *c.Char, pos c.Uint32T) + +//go:linkname LvDropdownClearOptions C.lv_dropdown_clear_options +func LvDropdownClearOptions(obj *core.LvObjT) + +//go:linkname LvDropdownSetSelected C.lv_dropdown_set_selected +func LvDropdownSetSelected(obj *core.LvObjT, sel_opt c.Uint32T, anim core.LvAnimEnableT) + +//go:linkname LvDropdownSetDir C.lv_dropdown_set_dir +func LvDropdownSetDir(obj *core.LvObjT, dir core.LvDirT) + +//go:linkname LvDropdownSetSymbol C.lv_dropdown_set_symbol +func LvDropdownSetSymbol(obj *core.LvObjT, symbol unsafe.Pointer) + +//go:linkname LvDropdownSetSelectedHighlight C.lv_dropdown_set_selected_highlight +func LvDropdownSetSelectedHighlight(obj *core.LvObjT, en bool) + +//go:linkname LvDropdownGetList C.lv_dropdown_get_list +func LvDropdownGetList(obj *core.LvObjT) *core.LvObjT + +//go:linkname LvDropdownGetText C.lv_dropdown_get_text +func LvDropdownGetText(obj *core.LvObjT) *c.Char + +//go:linkname LvDropdownGetOptions C.lv_dropdown_get_options +func LvDropdownGetOptions(obj *core.LvObjT) *c.Char + +//go:linkname LvDropdownGetSelected C.lv_dropdown_get_selected +func LvDropdownGetSelected(obj *core.LvObjT) c.Uint32T + +//go:linkname LvDropdownGetOptionCount C.lv_dropdown_get_option_count +func LvDropdownGetOptionCount(obj *core.LvObjT) c.Uint32T + +//go:linkname LvDropdownGetSelectedStr C.lv_dropdown_get_selected_str +func LvDropdownGetSelectedStr(obj *core.LvObjT, buf *c.Char, buf_size c.Uint32T) + +//go:linkname LvDropdownGetOptionIndex C.lv_dropdown_get_option_index +func LvDropdownGetOptionIndex(obj *core.LvObjT, option *c.Char) c.Int32T + +//go:linkname LvDropdownGetSymbol C.lv_dropdown_get_symbol +func LvDropdownGetSymbol(obj *core.LvObjT) *c.Char + +//go:linkname LvDropdownGetSelectedHighlight C.lv_dropdown_get_selected_highlight +func LvDropdownGetSelectedHighlight(obj *core.LvObjT) bool + +//go:linkname LvDropdownGetDir C.lv_dropdown_get_dir +func LvDropdownGetDir(obj *core.LvObjT) core.LvDirT + +//go:linkname LvDropdownOpen C.lv_dropdown_open +func LvDropdownOpen(dropdown_obj *core.LvObjT) + +//go:linkname LvDropdownClose C.lv_dropdown_close +func LvDropdownClose(obj *core.LvObjT) + +//go:linkname LvDropdownIsOpen C.lv_dropdown_is_open +func LvDropdownIsOpen(obj *core.LvObjT) bool diff --git a/lvgl/widgets/image.go b/lvgl/widgets/image.go new file mode 100644 index 00000000..34f2fa75 --- /dev/null +++ b/lvgl/widgets/image.go @@ -0,0 +1,103 @@ +package widgets + +import ( + "unsafe" + _ "unsafe" + + "github.com/goplus/llgo/c" + core "github.com/goplus/llpkg/lvgl/core" +) + +// Image alignment mode +type LvImageAlignT uint8 + +const ( + LV_IMAGE_ALIGN_DEFAULT LvImageAlignT = iota + LV_IMAGE_ALIGN_TOP_LEFT + LV_IMAGE_ALIGN_TOP_MID + LV_IMAGE_ALIGN_TOP_RIGHT + LV_IMAGE_ALIGN_BOTTOM_LEFT + LV_IMAGE_ALIGN_BOTTOM_MID + LV_IMAGE_ALIGN_BOTTOM_RIGHT + LV_IMAGE_ALIGN_LEFT_MID + LV_IMAGE_ALIGN_RIGHT_MID + LV_IMAGE_ALIGN_CENTER + LV_IMAGE_ALIGN_AUTO_TRANSFORM + LV_IMAGE_ALIGN_STRETCH + LV_IMAGE_ALIGN_TILE +) + +//go:linkname LvImageCreate C.lv_image_create +func LvImageCreate(parent *core.LvObjT) *core.LvObjT + +//go:linkname LvImageSetSrc C.lv_image_set_src +func LvImageSetSrc(obj *core.LvObjT, src *c.Void) + +//go:linkname LvImageSetOffsetX C.lv_image_set_offset_x +func LvImageSetOffsetX(obj *core.LvObjT, x c.Int32T) + +//go:linkname LvImageSetOffsetY C.lv_image_set_offset_y +func LvImageSetOffsetY(obj *core.LvObjT, y c.Int32T) + +//go:linkname LvImageSetRotation C.lv_image_set_rotation +func LvImageSetRotation(obj *core.LvObjT, angle c.Int32T) + +//go:linkname LvImageSetPivot C.lv_image_set_pivot +func LvImageSetPivot(obj *core.LvObjT, x c.Int32T, y c.Int32T) + +//go:linkname LvImageSetScale C.lv_image_set_scale +func LvImageSetScale(obj *core.LvObjT, zoom c.Uint32T) + +//go:linkname LvImageSetScaleX C.lv_image_set_scale_x +func LvImageSetScaleX(obj *core.LvObjT, zoom c.Uint32T) + +//go:linkname LvImageSetScaleY C.lv_image_set_scale_y +func LvImageSetScaleY(obj *core.LvObjT, zoom c.Uint32T) + +//go:linkname LvImageSetBlendMode C.lv_image_set_blend_mode +func LvImageSetBlendMode(obj *core.LvObjT, blend_mode core.LvBlendModeT) + +//go:linkname LvImageSetAntialias C.lv_image_set_antialias +func LvImageSetAntialias(obj *core.LvObjT, antialias bool) + +//go:linkname LvImageSetInnerAlign C.lv_image_set_inner_align +func LvImageSetInnerAlign(obj *core.LvObjT, align LvImageAlignT) + +//go:linkname LvImageSetBitmapMapSrc C.lv_image_set_bitmap_map_src +func LvImageSetBitmapMapSrc(obj *core.LvObjT, src *core.LvImageDscT) + +//go:linkname LvImageGetSrc C.lv_image_get_src +func LvImageGetSrc(obj *core.LvObjT) unsafe.Pointer + +//go:linkname LvImageGetOffsetX C.lv_image_get_offset_x +func LvImageGetOffsetX(obj *core.LvObjT) c.Int32T + +//go:linkname LvImageGetOffsetY C.lv_image_get_offset_y +func LvImageGetOffsetY(obj *core.LvObjT) c.Int32T + +//go:linkname LvImageGetRotation C.lv_image_get_rotation +func LvImageGetRotation(obj *core.LvObjT) c.Int32T + +//go:linkname LvImageGetPivot C.lv_image_get_pivot +func LvImageGetPivot(obj *core.LvObjT, pivot *core.LvPointT) + +//go:linkname LvImageGetScale C.lv_image_get_scale +func LvImageGetScale(obj *core.LvObjT) c.Int32T + +//go:linkname LvImageGetScaleX C.lv_image_get_scale_x +func LvImageGetScaleX(obj *core.LvObjT) c.Int32T + +//go:linkname LvImageGetScaleY C.lv_image_get_scale_y +func LvImageGetScaleY(obj *core.LvObjT) c.Int32T + +//go:linkname LvImageGetBlendMode C.lv_image_get_blend_mode +func LvImageGetBlendMode(obj *core.LvObjT) core.LvBlendModeT + +//go:linkname LvImageGetAntialias C.lv_image_get_antialias +func LvImageGetAntialias(obj *core.LvObjT) bool + +//go:linkname LvImageGetInnerAlign C.lv_image_get_inner_align +func LvImageGetInnerAlign(obj *core.LvObjT) LvImageAlignT + +//go:linkname LvImageGetBitmapMapSrc C.lv_image_get_bitmap_map_src +func LvImageGetBitmapMapSrc(obj *core.LvObjT) *core.LvImageDscT diff --git a/lvgl/widgets/imagebutton.go b/lvgl/widgets/imagebutton.go new file mode 100644 index 00000000..d48f3ef3 --- /dev/null +++ b/lvgl/widgets/imagebutton.go @@ -0,0 +1,39 @@ +package widgets + +import ( + _ "unsafe" + + "github.com/goplus/llgo/c" + core "github.com/goplus/llpkg/lvgl/core" +) + +// Image button states +type LvImagebuttonStateT uint8 + +const ( + LV_IMAGEBUTTON_STATE_RELEASED LvImagebuttonStateT = iota + LV_IMAGEBUTTON_STATE_PRESSED + LV_IMAGEBUTTON_STATE_DISABLED + LV_IMAGEBUTTON_STATE_CHECKED_RELEASED + LV_IMAGEBUTTON_STATE_CHECKED_PRESSED + LV_IMAGEBUTTON_STATE_CHECKED_DISABLED + LV_IMAGEBUTTON_STATE_NUM +) + +//go:linkname LvImagebuttonCreate C.lv_imagebutton_create +func LvImagebuttonCreate(parent *core.LvObjT) *core.LvObjT + +//go:linkname LvImagebuttonSetSrc C.lv_imagebutton_set_src +func LvImagebuttonSetSrc(imagebutton *core.LvObjT, state LvImagebuttonStateT, src_left *c.Void, src_mid *c.Void, src_right *c.Void) + +//go:linkname LvImagebuttonSetState C.lv_imagebutton_set_state +func LvImagebuttonSetState(imagebutton *core.LvObjT, state LvImagebuttonStateT) + +//go:linkname LvImagebuttonGetSrcLeft C.lv_imagebutton_get_src_left +func LvImagebuttonGetSrcLeft(imagebutton *core.LvObjT, state LvImagebuttonStateT) *c.Void + +//go:linkname LvImagebuttonGetSrcMiddle C.lv_imagebutton_get_src_middle +func LvImagebuttonGetSrcMiddle(imagebutton *core.LvObjT, state LvImagebuttonStateT) *c.Void + +//go:linkname LvImagebuttonGetSrcRight C.lv_imagebutton_get_src_right +func LvImagebuttonGetSrcRight(imagebutton *core.LvObjT, state LvImagebuttonStateT) *c.Void diff --git a/lvgl/widgets/keyboard.go b/lvgl/widgets/keyboard.go new file mode 100644 index 00000000..4528681a --- /dev/null +++ b/lvgl/widgets/keyboard.go @@ -0,0 +1,62 @@ +package widgets + +import ( + _ "unsafe" + + "github.com/goplus/llgo/c" + core "github.com/goplus/llpkg/lvgl/core" +) + +// Keyboard control button flags +const LV_KEYBOARD_CTRL_BUTTON_FLAGS = LV_BUTTONMATRIX_CTRL_NO_REPEAT | LV_BUTTONMATRIX_CTRL_CLICK_TRIG | LV_BUTTONMATRIX_CTRL_CHECKED + +// Keyboard mode +type LvKeyboardModeT uint8 + +const ( + LV_KEYBOARD_MODE_TEXT_LOWER LvKeyboardModeT = iota + LV_KEYBOARD_MODE_TEXT_UPPER + LV_KEYBOARD_MODE_SPECIAL + LV_KEYBOARD_MODE_NUMBER + LV_KEYBOARD_MODE_USER_1 + LV_KEYBOARD_MODE_USER_2 + LV_KEYBOARD_MODE_USER_3 + LV_KEYBOARD_MODE_USER_4 + LV_KEYBOARD_MODE_TEXT_ARABIC // Only if LV_USE_ARABIC_PERSIAN_CHARS == 1 +) + +//go:linkname LvKeyboardCreate C.lv_keyboard_create +func LvKeyboardCreate(parent *core.LvObjT) *core.LvObjT + +//go:linkname LvKeyboardSetTextarea C.lv_keyboard_set_textarea +func LvKeyboardSetTextarea(kb *core.LvObjT, ta *core.LvObjT) + +//go:linkname LvKeyboardSetMode C.lv_keyboard_set_mode +func LvKeyboardSetMode(kb *core.LvObjT, mode LvKeyboardModeT) + +//go:linkname LvKeyboardSetPopovers C.lv_keyboard_set_popovers +func LvKeyboardSetPopovers(kb *core.LvObjT, en bool) + +//go:linkname LvKeyboardSetMap C.lv_keyboard_set_map +func LvKeyboardSetMap(kb *core.LvObjT, mode LvKeyboardModeT, map_ **c.Char, ctrl_map *LvButtonmatrixCtrlT) + +//go:linkname LvKeyboardGetTextarea C.lv_keyboard_get_textarea +func LvKeyboardGetTextarea(kb *core.LvObjT) *core.LvObjT + +//go:linkname LvKeyboardGetMode C.lv_keyboard_get_mode +func LvKeyboardGetMode(kb *core.LvObjT) LvKeyboardModeT + +//go:linkname LvKeyboardGetPopovers C.lv_keyboard_get_popovers +func LvKeyboardGetPopovers(obj *core.LvObjT) bool + +//go:linkname LvKeyboardGetMapArray C.lv_keyboard_get_map_array +func LvKeyboardGetMapArray(kb *core.LvObjT) **c.Char + +//go:linkname LvKeyboardGetSelectedButton C.lv_keyboard_get_selected_button +func LvKeyboardGetSelectedButton(obj *core.LvObjT) c.Uint32T + +//go:linkname LvKeyboardGetButtonText C.lv_keyboard_get_button_text +func LvKeyboardGetButtonText(obj *core.LvObjT, btn_id c.Uint32T) *c.Char + +//go:linkname LvKeyboardDefEventCb C.lv_keyboard_def_event_cb +func LvKeyboardDefEventCb(e *core.LvEventT) diff --git a/lvgl/widgets/label.go b/lvgl/widgets/label.go new file mode 100644 index 00000000..1af9fbe2 --- /dev/null +++ b/lvgl/widgets/label.go @@ -0,0 +1,81 @@ +package widgets + +import ( + _ "unsafe" + + "github.com/goplus/llgo/c" + core "github.com/goplus/llpkg/lvgl/core" +) + +// Constants +const ( + LV_LABEL_DOT_NUM = 3 + LV_LABEL_POS_LAST uint32 = 0xFFFF + LV_LABEL_TEXT_SELECTION_OFF = core.LV_DRAW_LABEL_NO_TXT_SEL + LV_LABEL_DEFAULT_TEXT = "Text" // or "" if LV_WIDGETS_HAS_DEFAULT_VALUE is not defined +) + +// Label long mode behaviors +type LvLabelLongModeT uint8 + +const ( + LV_LABEL_LONG_MODE_WRAP LvLabelLongModeT = iota // Keep the object width, wrap lines longer than object width and expand the object height + LV_LABEL_LONG_MODE_DOTS // Keep the size and write dots at the end if the text is too long + LV_LABEL_LONG_MODE_SCROLL // Keep the size and roll the text back and forth + LV_LABEL_LONG_MODE_SCROLL_CIRCULAR // Keep the size and roll the text circularly + LV_LABEL_LONG_MODE_CLIP // Keep the size and clip the text out of it +) + +//go:linkname LvLabelCreate C.lv_label_create +func LvLabelCreate(parent *core.LvObjT) *core.LvObjT + +//go:linkname LvLabelSetText C.lv_label_set_text +func LvLabelSetText(obj *core.LvObjT, text *c.Char) + +//go:linkname LvLabelSetTextFmt C.lv_label_set_text_fmt +func LvLabelSetTextFmt(obj *core.LvObjT, fmt *c.Char, args ...interface{}) + +//go:linkname LvLabelSetTextStatic C.lv_label_set_text_static +func LvLabelSetTextStatic(obj *core.LvObjT, text *c.Char) + +//go:linkname LvLabelSetLongMode C.lv_label_set_long_mode +func LvLabelSetLongMode(obj *core.LvObjT, long_mode LvLabelLongModeT) + +//go:linkname LvLabelSetTextSelectionStart C.lv_label_set_text_selection_start +func LvLabelSetTextSelectionStart(obj *core.LvObjT, index c.Uint32T) + +//go:linkname LvLabelSetTextSelectionEnd C.lv_label_set_text_selection_end +func LvLabelSetTextSelectionEnd(obj *core.LvObjT, index c.Uint32T) + +//go:linkname LvLabelSetRecolor C.lv_label_set_recolor +func LvLabelSetRecolor(obj *core.LvObjT, en bool) + +//go:linkname LvLabelGetText C.lv_label_get_text +func LvLabelGetText(obj *core.LvObjT) *c.Char + +//go:linkname LvLabelGetLongMode C.lv_label_get_long_mode +func LvLabelGetLongMode(obj *core.LvObjT) LvLabelLongModeT + +//go:linkname LvLabelGetLetterPos C.lv_label_get_letter_pos +func LvLabelGetLetterPos(obj *core.LvObjT, char_id c.Uint32T, pos *core.LvPointT) + +//go:linkname LvLabelGetLetterOn C.lv_label_get_letter_on +func LvLabelGetLetterOn(obj *core.LvObjT, pos_in *core.LvPointT, bidi bool) c.Uint32T + +//go:linkname LvLabelIsCharUnderPos C.lv_label_is_char_under_pos +func LvLabelIsCharUnderPos(obj *core.LvObjT, pos *core.LvPointT) bool + +//go:linkname LvLabelGetTextSelectionStart C.lv_label_get_text_selection_start +func LvLabelGetTextSelectionStart(obj *core.LvObjT) c.Uint32T + +//go:linkname LvLabelGetTextSelectionEnd C.lv_label_get_text_selection_end +func LvLabelGetTextSelectionEnd(obj *core.LvObjT) c.Uint32T + +//go:linkname LvLabelGetRecolor C.lv_label_get_recolor +func LvLabelGetRecolor(obj *core.LvObjT) bool + +//go:linkname LvLabelInsText C.lv_label_ins_text +func LvLabelInsText(obj *core.LvObjT, pos c.Uint32T, txt *c.Char) + +//go:linkname LvLabelCutText C.lv_label_cut_text +func LvLabelCutText(obj *core.LvObjT, pos c.Uint32T, cnt c.Uint32T) diff --git a/lvgl/widgets/led.go b/lvgl/widgets/led.go new file mode 100644 index 00000000..fe3c450f --- /dev/null +++ b/lvgl/widgets/led.go @@ -0,0 +1,35 @@ +package widgets + +import ( + _ "unsafe" + + "github.com/goplus/llgo/c" + core "github.com/goplus/llpkg/lvgl/core" +) + +// LED brightness constants +const ( + LV_LED_BRIGHT_MIN = 80 // Brightness when the LED is OFF + LV_LED_BRIGHT_MAX = 255 // Brightness when the LED is ON +) + +//go:linkname LvLedCreate C.lv_led_create +func LvLedCreate(parent *core.LvObjT) *core.LvObjT + +//go:linkname LvLedSetColor C.lv_led_set_color +func LvLedSetColor(led *core.LvObjT, color core.LvColorT) + +//go:linkname LvLedSetBrightness C.lv_led_set_brightness +func LvLedSetBrightness(led *core.LvObjT, bright c.Uint8T) + +//go:linkname LvLedOn C.lv_led_on +func LvLedOn(led *core.LvObjT) + +//go:linkname LvLedOff C.lv_led_off +func LvLedOff(led *core.LvObjT) + +//go:linkname LvLedToggle C.lv_led_toggle +func LvLedToggle(led *core.LvObjT) + +//go:linkname LvLedGetBrightness C.lv_led_get_brightness +func LvLedGetBrightness(obj *core.LvObjT) c.Uint8T diff --git a/lvgl/widgets/line.go b/lvgl/widgets/line.go new file mode 100644 index 00000000..2f2c95d2 --- /dev/null +++ b/lvgl/widgets/line.go @@ -0,0 +1,35 @@ +package widgets + +import ( + _ "unsafe" + + "github.com/goplus/llgo/c" + core "github.com/goplus/llpkg/lvgl/core" +) + +//go:linkname LvLineCreate C.lv_line_create +func LvLineCreate(parent *core.LvObjT) *core.LvObjT + +//go:linkname LvLineSetPoints C.lv_line_set_points +func LvLineSetPoints(obj *core.LvObjT, points *core.LvPointPreciseT, point_num c.Uint32T) + +//go:linkname LvLineSetPointsMutable C.lv_line_set_points_mutable +func LvLineSetPointsMutable(obj *core.LvObjT, points *core.LvPointPreciseT, point_num c.Uint32T) + +//go:linkname LvLineSetYInvert C.lv_line_set_y_invert +func LvLineSetYInvert(obj *core.LvObjT, en bool) + +//go:linkname LvLineGetPoints C.lv_line_get_points +func LvLineGetPoints(obj *core.LvObjT) *core.LvPointPreciseT + +//go:linkname LvLineGetPointCount C.lv_line_get_point_count +func LvLineGetPointCount(obj *core.LvObjT) c.Uint32T + +//go:linkname LvLineIsPointArrayMutable C.lv_line_is_point_array_mutable +func LvLineIsPointArrayMutable(obj *core.LvObjT) bool + +//go:linkname LvLineGetPointsMutable C.lv_line_get_points_mutable +func LvLineGetPointsMutable(obj *core.LvObjT) *core.LvPointPreciseT + +//go:linkname LvLineGetYInvert C.lv_line_get_y_invert +func LvLineGetYInvert(obj *core.LvObjT) bool diff --git a/lvgl/widgets/list.go b/lvgl/widgets/list.go new file mode 100644 index 00000000..026c617a --- /dev/null +++ b/lvgl/widgets/list.go @@ -0,0 +1,24 @@ +package widgets + +import ( + "unsafe" + _ "unsafe" + + "github.com/goplus/llgo/c" + core "github.com/goplus/llpkg/lvgl/core" +) + +//go:linkname LvListCreate C.lv_list_create +func LvListCreate(parent *core.LvObjT) *core.LvObjT + +//go:linkname LvListAddText C.lv_list_add_text +func LvListAddText(list *core.LvObjT, txt *c.Char) *core.LvObjT + +//go:linkname LvListAddButton C.lv_list_add_button +func LvListAddButton(list *core.LvObjT, icon unsafe.Pointer, txt *c.Char) *core.LvObjT + +//go:linkname LvListGetButtonText C.lv_list_get_button_text +func LvListGetButtonText(list *core.LvObjT, btn *core.LvObjT) *c.Char + +//go:linkname LvListSetButtonText C.lv_list_set_button_text +func LvListSetButtonText(list *core.LvObjT, btn *core.LvObjT, txt *c.Char) diff --git a/lvgl/widgets/lottie.go b/lvgl/widgets/lottie.go new file mode 100644 index 00000000..3b5a242d --- /dev/null +++ b/lvgl/widgets/lottie.go @@ -0,0 +1,27 @@ +package widgets + +import ( + "unsafe" + _ "unsafe" + + "github.com/goplus/llgo/c" + core "github.com/goplus/llpkg/lvgl/core" +) + +//go:linkname LvLottieCreate C.lv_lottie_create +func LvLottieCreate(parent *core.LvObjT) *core.LvObjT + +//go:linkname LvLottieSetBuffer C.lv_lottie_set_buffer +func LvLottieSetBuffer(obj *core.LvObjT, w c.Int32T, h c.Int32T, buf *c.Void) + +//go:linkname LvLottieSetDrawBuf C.lv_lottie_set_draw_buf +func LvLottieSetDrawBuf(obj *core.LvObjT, draw_buf *core.LvDrawBufT) + +//go:linkname LvLottieSetSrcData C.lv_lottie_set_src_data +func LvLottieSetSrcData(obj *core.LvObjT, src unsafe.Pointer, src_size c.SizeT) + +//go:linkname LvLottieSetSrcFile C.lv_lottie_set_src_file +func LvLottieSetSrcFile(obj *core.LvObjT, src *c.Char) + +//go:linkname LvLottieGetAnim C.lv_lottie_get_anim +func LvLottieGetAnim(obj *core.LvObjT) *core.LvAnimT diff --git a/lvgl/widgets/menu.go b/lvgl/widgets/menu.go new file mode 100644 index 00000000..d8ffa4b9 --- /dev/null +++ b/lvgl/widgets/menu.go @@ -0,0 +1,68 @@ +package widgets + +import ( + _ "unsafe" + + "github.com/goplus/llgo/c" + core "github.com/goplus/llpkg/lvgl/core" +) + +//go:linkname LvMenuCreate C.lv_menu_create +func LvMenuCreate(parent *core.LvObjT) *core.LvObjT + +//go:linkname LvMenuPageCreate C.lv_menu_page_create +func LvMenuPageCreate(menu *core.LvObjT, title *c.Char) *core.LvObjT + +//go:linkname LvMenuContCreate C.lv_menu_cont_create +func LvMenuContCreate(parent *core.LvObjT) *core.LvObjT + +//go:linkname LvMenuSectionCreate C.lv_menu_section_create +func LvMenuSectionCreate(parent *core.LvObjT) *core.LvObjT + +//go:linkname LvMenuSeparatorCreate C.lv_menu_separator_create +func LvMenuSeparatorCreate(parent *core.LvObjT) *core.LvObjT + +//go:linkname LvMenuSetPage C.lv_menu_set_page +func LvMenuSetPage(obj *core.LvObjT, page *core.LvObjT) + +//go:linkname LvMenuSetPageTitle C.lv_menu_set_page_title +func LvMenuSetPageTitle(page *core.LvObjT, title *c.Char) + +//go:linkname LvMenuSetPageTitleStatic C.lv_menu_set_page_title_static +func LvMenuSetPageTitleStatic(page *core.LvObjT, title *c.Char) + +//go:linkname LvMenuSetSidebarPage C.lv_menu_set_sidebar_page +func LvMenuSetSidebarPage(obj *core.LvObjT, page *core.LvObjT) + +//go:linkname LvMenuSetModeHeader C.lv_menu_set_mode_header +func LvMenuSetModeHeader(obj *core.LvObjT, mode c.Int32T) + +//go:linkname LvMenuSetModeRootBackButton C.lv_menu_set_mode_root_back_button +func LvMenuSetModeRootBackButton(obj *core.LvObjT, mode c.Int32T) + +//go:linkname LvMenuSetLoadPageEvent C.lv_menu_set_load_page_event +func LvMenuSetLoadPageEvent(menu *core.LvObjT, obj *core.LvObjT, page *core.LvObjT) + +//go:linkname LvMenuGetCurMainPage C.lv_menu_get_cur_main_page +func LvMenuGetCurMainPage(obj *core.LvObjT) *core.LvObjT + +//go:linkname LvMenuGetCurSidebarPage C.lv_menu_get_cur_sidebar_page +func LvMenuGetCurSidebarPage(obj *core.LvObjT) *core.LvObjT + +//go:linkname LvMenuGetMainHeader C.lv_menu_get_main_header +func LvMenuGetMainHeader(obj *core.LvObjT) *core.LvObjT + +//go:linkname LvMenuGetMainHeaderBackButton C.lv_menu_get_main_header_back_button +func LvMenuGetMainHeaderBackButton(obj *core.LvObjT) *core.LvObjT + +//go:linkname LvMenuGetSidebarHeader C.lv_menu_get_sidebar_header +func LvMenuGetSidebarHeader(obj *core.LvObjT) *core.LvObjT + +//go:linkname LvMenuGetSidebarHeaderBackButton C.lv_menu_get_sidebar_header_back_button +func LvMenuGetSidebarHeaderBackButton(obj *core.LvObjT) *core.LvObjT + +//go:linkname LvMenuBackButtonIsRoot C.lv_menu_back_button_is_root +func LvMenuBackButtonIsRoot(menu *core.LvObjT, obj *core.LvObjT) c.Char + +//go:linkname LvMenuClearHistory C.lv_menu_clear_history +func LvMenuClearHistory(obj *core.LvObjT) diff --git a/lvgl/widgets/msgbox.go b/lvgl/widgets/msgbox.go new file mode 100644 index 00000000..eafe51ea --- /dev/null +++ b/lvgl/widgets/msgbox.go @@ -0,0 +1,45 @@ +package widgets + +import ( + "unsafe" + _ "unsafe" + + "github.com/goplus/llgo/c" + core "github.com/goplus/llpkg/lvgl/core" +) + +//go:linkname LvMsgboxCreate C.lv_msgbox_create +func LvMsgboxCreate(parent *core.LvObjT) *core.LvObjT + +//go:linkname LvMsgboxAddTitle C.lv_msgbox_add_title +func LvMsgboxAddTitle(obj *core.LvObjT, title *c.Char) *core.LvObjT + +//go:linkname LvMsgboxAddHeaderButton C.lv_msgbox_add_header_button +func LvMsgboxAddHeaderButton(obj *core.LvObjT, icon unsafe.Pointer) *core.LvObjT + +//go:linkname LvMsgboxAddText C.lv_msgbox_add_text +func LvMsgboxAddText(obj *core.LvObjT, text *c.Char) *core.LvObjT + +//go:linkname LvMsgboxAddFooterButton C.lv_msgbox_add_footer_button +func LvMsgboxAddFooterButton(obj *core.LvObjT, text *c.Char) *core.LvObjT + +//go:linkname LvMsgboxAddCloseButton C.lv_msgbox_add_close_button +func LvMsgboxAddCloseButton(obj *core.LvObjT) *core.LvObjT + +//go:linkname LvMsgboxGetHeader C.lv_msgbox_get_header +func LvMsgboxGetHeader(obj *core.LvObjT) *core.LvObjT + +//go:linkname LvMsgboxGetFooter C.lv_msgbox_get_footer +func LvMsgboxGetFooter(obj *core.LvObjT) *core.LvObjT + +//go:linkname LvMsgboxGetContent C.lv_msgbox_get_content +func LvMsgboxGetContent(obj *core.LvObjT) *core.LvObjT + +//go:linkname LvMsgboxGetTitle C.lv_msgbox_get_title +func LvMsgboxGetTitle(obj *core.LvObjT) *core.LvObjT + +//go:linkname LvMsgboxClose C.lv_msgbox_close +func LvMsgboxClose(mbox *core.LvObjT) + +//go:linkname LvMsgboxCloseAsync C.lv_msgbox_close_async +func LvMsgboxCloseAsync(mbox *core.LvObjT) diff --git a/lvgl/widgets/objx_templ.go b/lvgl/widgets/objx_templ.go new file mode 100644 index 00000000..ed71fb68 --- /dev/null +++ b/lvgl/widgets/objx_templ.go @@ -0,0 +1,10 @@ +package widgets + +import ( + _ "unsafe" + + core "github.com/goplus/llpkg/lvgl/core" +) + +//go:linkname LvTemplCreate C.lv_templ_create +func LvTemplCreate(parent *core.LvObjT) *core.LvObjT diff --git a/lvgl/widgets/roller.go b/lvgl/widgets/roller.go new file mode 100644 index 00000000..fd40cea6 --- /dev/null +++ b/lvgl/widgets/roller.go @@ -0,0 +1,35 @@ +package widgets + +import ( + _ "unsafe" + + "github.com/goplus/llgo/c" + core "github.com/goplus/llpkg/lvgl/core" +) + +//go:linkname LvRollerCreate C.lv_roller_create +func LvRollerCreate(parent *core.LvObjT) *core.LvObjT + +//go:linkname LvRollerSetOptions C.lv_roller_set_options +func LvRollerSetOptions(obj *core.LvObjT, options *c.Char, mode c.Int32T) + +//go:linkname LvRollerSetSelected C.lv_roller_set_selected +func LvRollerSetSelected(obj *core.LvObjT, selOpt c.Uint32T, anim c.Int32T) + +//go:linkname LvRollerSetSelectedStr C.lv_roller_set_selected_str +func LvRollerSetSelectedStr(obj *core.LvObjT, selOpt *c.Char, anim c.Int32T) c.Char + +//go:linkname LvRollerSetVisibleRowCount C.lv_roller_set_visible_row_count +func LvRollerSetVisibleRowCount(obj *core.LvObjT, rowCnt c.Uint32T) + +//go:linkname LvRollerGetSelected C.lv_roller_get_selected +func LvRollerGetSelected(obj *core.LvObjT) c.Uint32T + +//go:linkname LvRollerGetSelectedStr C.lv_roller_get_selected_str +func LvRollerGetSelectedStr(obj *core.LvObjT, buf *c.Char, bufSize c.Uint32T) + +//go:linkname LvRollerGetOptions C.lv_roller_get_options +func LvRollerGetOptions(obj *core.LvObjT) *c.Char + +//go:linkname LvRollerGetOptionCount C.lv_roller_get_option_count +func LvRollerGetOptionCount(obj *core.LvObjT) c.Uint32T diff --git a/lvgl/widgets/scale.go b/lvgl/widgets/scale.go new file mode 100644 index 00000000..4108b4f7 --- /dev/null +++ b/lvgl/widgets/scale.go @@ -0,0 +1,89 @@ +package widgets + +import ( + _ "unsafe" + + "github.com/goplus/llgo/c" + core "github.com/goplus/llpkg/lvgl/core" +) + +// Scale section type +type LvScaleSectionT struct{} + +//go:linkname LvScaleCreate C.lv_scale_create +func LvScaleCreate(parent *core.LvObjT) *core.LvObjT + +//go:linkname LvScaleSetMode C.lv_scale_set_mode +func LvScaleSetMode(obj *core.LvObjT, mode c.Int32T) + +//go:linkname LvScaleSetTotalTickCount C.lv_scale_set_total_tick_count +func LvScaleSetTotalTickCount(obj *core.LvObjT, totalTickCount c.Uint32T) + +//go:linkname LvScaleSetMajorTickEvery C.lv_scale_set_major_tick_every +func LvScaleSetMajorTickEvery(obj *core.LvObjT, majorTickEvery c.Uint32T) + +//go:linkname LvScaleSetLabelShow C.lv_scale_set_label_show +func LvScaleSetLabelShow(obj *core.LvObjT, showLabel c.Char) + +//go:linkname LvScaleSetRange C.lv_scale_set_range +func LvScaleSetRange(obj *core.LvObjT, min c.Int32T, max c.Int32T) + +//go:linkname LvScaleSetAngleRange C.lv_scale_set_angle_range +func LvScaleSetAngleRange(obj *core.LvObjT, angleRange c.Uint32T) + +//go:linkname LvScaleSetRotation C.lv_scale_set_rotation +func LvScaleSetRotation(obj *core.LvObjT, rotation c.Int32T) + +//go:linkname LvScaleSetLineNeedleValue C.lv_scale_set_line_needle_value +func LvScaleSetLineNeedleValue(obj *core.LvObjT, needleLine *core.LvObjT, needleLength c.Int32T, value c.Int32T) + +//go:linkname LvScaleSetImageNeedleValue C.lv_scale_set_image_needle_value +func LvScaleSetImageNeedleValue(obj *core.LvObjT, needleImg *core.LvObjT, value c.Int32T) + +//go:linkname LvScaleSetTextSrc C.lv_scale_set_text_src +func LvScaleSetTextSrc(obj *core.LvObjT, txtSrc **c.Char) + +//go:linkname LvScaleSetPostDraw C.lv_scale_set_post_draw +func LvScaleSetPostDraw(obj *core.LvObjT, en c.Char) + +//go:linkname LvScaleSetDrawTicksOnTop C.lv_scale_set_draw_ticks_on_top +func LvScaleSetDrawTicksOnTop(obj *core.LvObjT, en c.Char) + +//go:linkname LvScaleAddSection C.lv_scale_add_section +func LvScaleAddSection(obj *core.LvObjT) *LvScaleSectionT + +//go:linkname LvScaleSetSectionRange C.lv_scale_set_section_range +func LvScaleSetSectionRange(scale *core.LvObjT, section *LvScaleSectionT, min c.Int32T, max c.Int32T) + +//go:linkname LvScaleSetSectionStyleMain C.lv_scale_set_section_style_main +func LvScaleSetSectionStyleMain(scale *core.LvObjT, section *LvScaleSectionT, style *core.LvStyleT) + +//go:linkname LvScaleSetSectionStyleIndicator C.lv_scale_set_section_style_indicator +func LvScaleSetSectionStyleIndicator(scale *core.LvObjT, section *LvScaleSectionT, style *core.LvStyleT) + +//go:linkname LvScaleSetSectionStyleItems C.lv_scale_set_section_style_items +func LvScaleSetSectionStyleItems(scale *core.LvObjT, section *LvScaleSectionT, style *core.LvStyleT) + +//go:linkname LvScaleGetMode C.lv_scale_get_mode +func LvScaleGetMode(obj *core.LvObjT) c.Int32T + +//go:linkname LvScaleGetTotalTickCount C.lv_scale_get_total_tick_count +func LvScaleGetTotalTickCount(obj *core.LvObjT) c.Int32T + +//go:linkname LvScaleGetMajorTickEvery C.lv_scale_get_major_tick_every +func LvScaleGetMajorTickEvery(obj *core.LvObjT) c.Int32T + +//go:linkname LvScaleGetRotation C.lv_scale_get_rotation +func LvScaleGetRotation(obj *core.LvObjT) c.Int32T + +//go:linkname LvScaleGetLabelShow C.lv_scale_get_label_show +func LvScaleGetLabelShow(obj *core.LvObjT) c.Char + +//go:linkname LvScaleGetAngleRange C.lv_scale_get_angle_range +func LvScaleGetAngleRange(obj *core.LvObjT) c.Uint32T + +//go:linkname LvScaleGetRangeMinValue C.lv_scale_get_range_min_value +func LvScaleGetRangeMinValue(obj *core.LvObjT) c.Int32T + +//go:linkname LvScaleGetRangeMaxValue C.lv_scale_get_range_max_value +func LvScaleGetRangeMaxValue(obj *core.LvObjT) c.Int32T diff --git a/lvgl/widgets/slider.go b/lvgl/widgets/slider.go new file mode 100644 index 00000000..b68d571f --- /dev/null +++ b/lvgl/widgets/slider.go @@ -0,0 +1,50 @@ +package widgets + +import ( + _ "unsafe" + + "github.com/goplus/llgo/c" + core "github.com/goplus/llpkg/lvgl/core" +) + +//go:linkname LvSliderCreate C.lv_slider_create +func LvSliderCreate(parent *core.LvObjT) *core.LvObjT + +//go:linkname LvSliderSetValue C.lv_slider_set_value +func LvSliderSetValue(obj *core.LvObjT, value c.Int32T, anim c.Int32T) + +//go:linkname LvSliderSetStartValue C.lv_slider_set_start_value +func LvSliderSetStartValue(obj *core.LvObjT, value c.Int32T, anim c.Int32T) + +//go:linkname LvSliderSetRange C.lv_slider_set_range +func LvSliderSetRange(obj *core.LvObjT, min c.Int32T, max c.Int32T) + +//go:linkname LvSliderSetMode C.lv_slider_set_mode +func LvSliderSetMode(obj *core.LvObjT, mode c.Int32T) + +//go:linkname LvSliderSetOrientation C.lv_slider_set_orientation +func LvSliderSetOrientation(obj *core.LvObjT, orientation c.Int32T) + +//go:linkname LvSliderGetValue C.lv_slider_get_value +func LvSliderGetValue(obj *core.LvObjT) c.Int32T + +//go:linkname LvSliderGetLeftValue C.lv_slider_get_left_value +func LvSliderGetLeftValue(obj *core.LvObjT) c.Int32T + +//go:linkname LvSliderGetMinValue C.lv_slider_get_min_value +func LvSliderGetMinValue(obj *core.LvObjT) c.Int32T + +//go:linkname LvSliderGetMaxValue C.lv_slider_get_max_value +func LvSliderGetMaxValue(obj *core.LvObjT) c.Int32T + +//go:linkname LvSliderIsDragged C.lv_slider_is_dragged +func LvSliderIsDragged(obj *core.LvObjT) c.Char + +//go:linkname LvSliderGetMode C.lv_slider_get_mode +func LvSliderGetMode(slider *core.LvObjT) c.Int32T + +//go:linkname LvSliderGetOrientation C.lv_slider_get_orientation +func LvSliderGetOrientation(slider *core.LvObjT) c.Int32T + +//go:linkname LvSliderIsSymmetrical C.lv_slider_is_symmetrical +func LvSliderIsSymmetrical(obj *core.LvObjT) c.Char diff --git a/lvgl/widgets/span.go b/lvgl/widgets/span.go new file mode 100644 index 00000000..ae42e79c --- /dev/null +++ b/lvgl/widgets/span.go @@ -0,0 +1,106 @@ +package widgets + +import ( + _ "unsafe" + + "github.com/goplus/llgo/c" + core "github.com/goplus/llpkg/lvgl/core" +) + +// Span types +type LvSpanT struct{} +type LvSpanCoordsT struct { + Heading core.LvAreaT + Middle core.LvAreaT + Trailing core.LvAreaT +} + +//go:linkname LvSpanStackInit C.lv_span_stack_init +func LvSpanStackInit() + +//go:linkname LvSpanStackDeinit C.lv_span_stack_deinit +func LvSpanStackDeinit() + +//go:linkname LvSpangroupCreate C.lv_spangroup_create +func LvSpangroupCreate(parent *core.LvObjT) *core.LvObjT + +//go:linkname LvSpangroupAddSpan C.lv_spangroup_add_span +func LvSpangroupAddSpan(obj *core.LvObjT) *LvSpanT + +//go:linkname LvSpangroupDeleteSpan C.lv_spangroup_delete_span +func LvSpangroupDeleteSpan(obj *core.LvObjT, span *LvSpanT) + +//go:linkname LvSpanSetText C.lv_span_set_text +func LvSpanSetText(span *LvSpanT, text *c.Char) + +//go:linkname LvSpanSetTextStatic C.lv_span_set_text_static +func LvSpanSetTextStatic(span *LvSpanT, text *c.Char) + +//go:linkname LvSpangroupSetSpanText C.lv_spangroup_set_span_text +func LvSpangroupSetSpanText(obj *core.LvObjT, span *LvSpanT, text *c.Char) + +//go:linkname LvSpangroupSetSpanTextStatic C.lv_spangroup_set_span_text_static +func LvSpangroupSetSpanTextStatic(obj *core.LvObjT, span *LvSpanT, text *c.Char) + +//go:linkname LvSpangroupSetSpanStyle C.lv_spangroup_set_span_style +func LvSpangroupSetSpanStyle(obj *core.LvObjT, span *LvSpanT, style *core.LvStyleT) + +//go:linkname LvSpangroupSetAlign C.lv_spangroup_set_align +func LvSpangroupSetAlign(obj *core.LvObjT, align c.Int32T) + +//go:linkname LvSpangroupSetOverflow C.lv_spangroup_set_overflow +func LvSpangroupSetOverflow(obj *core.LvObjT, overflow c.Int32T) + +//go:linkname LvSpangroupSetIndent C.lv_spangroup_set_indent +func LvSpangroupSetIndent(obj *core.LvObjT, indent c.Int32T) + +//go:linkname LvSpangroupSetMode C.lv_spangroup_set_mode +func LvSpangroupSetMode(obj *core.LvObjT, mode c.Int32T) + +//go:linkname LvSpangroupSetMaxLines C.lv_spangroup_set_max_lines +func LvSpangroupSetMaxLines(obj *core.LvObjT, lines c.Int32T) + +//go:linkname LvSpanGetStyle C.lv_span_get_style +func LvSpanGetStyle(span *LvSpanT) *core.LvStyleT + +//go:linkname LvSpanGetText C.lv_span_get_text +func LvSpanGetText(span *LvSpanT) *c.Char + +//go:linkname LvSpangroupGetChild C.lv_spangroup_get_child +func LvSpangroupGetChild(obj *core.LvObjT, id c.Int32T) *LvSpanT + +//go:linkname LvSpangroupGetSpanCount C.lv_spangroup_get_span_count +func LvSpangroupGetSpanCount(obj *core.LvObjT) c.Uint32T + +//go:linkname LvSpangroupGetAlign C.lv_spangroup_get_align +func LvSpangroupGetAlign(obj *core.LvObjT) c.Int32T + +//go:linkname LvSpangroupGetOverflow C.lv_spangroup_get_overflow +func LvSpangroupGetOverflow(obj *core.LvObjT) c.Int32T + +//go:linkname LvSpangroupGetIndent C.lv_spangroup_get_indent +func LvSpangroupGetIndent(obj *core.LvObjT) c.Int32T + +//go:linkname LvSpangroupGetMode C.lv_spangroup_get_mode +func LvSpangroupGetMode(obj *core.LvObjT) c.Int32T + +//go:linkname LvSpangroupGetMaxLines C.lv_spangroup_get_max_lines +func LvSpangroupGetMaxLines(obj *core.LvObjT) c.Int32T + +//go:linkname LvSpangroupGetMaxLineHeight C.lv_spangroup_get_max_line_height +func LvSpangroupGetMaxLineHeight(obj *core.LvObjT) c.Int32T + +//go:linkname LvSpangroupGetExpandWidth C.lv_spangroup_get_expand_width +func LvSpangroupGetExpandWidth(obj *core.LvObjT, maxWidth c.Uint32T) c.Uint32T + +//go:linkname LvSpangroupGetExpandHeight C.lv_spangroup_get_expand_height +func LvSpangroupGetExpandHeight(obj *core.LvObjT, width c.Int32T) c.Int32T + +//go:linkname LvSpangroupGetSpanCoords C.lv_spangroup_get_span_coords +func LvSpangroupGetSpanCoords(obj *core.LvObjT, span *LvSpanT) LvSpanCoordsT + +//go:linkname LvSpangroupGetSpanByPoint C.lv_spangroup_get_span_by_point +func LvSpangroupGetSpanByPoint(obj *core.LvObjT, point *core.LvPointT) *LvSpanT + +//go:linkname LvSpangroupRefresh C.lv_spangroup_refresh +func LvSpangroupRefresh(obj *core.LvObjT) diff --git a/lvgl/widgets/spinbox.go b/lvgl/widgets/spinbox.go new file mode 100644 index 00000000..2f01acf0 --- /dev/null +++ b/lvgl/widgets/spinbox.go @@ -0,0 +1,53 @@ +package widgets + +import ( + _ "unsafe" + + "github.com/goplus/llgo/c" + core "github.com/goplus/llpkg/lvgl/core" +) + +//go:linkname LvSpinboxCreate C.lv_spinbox_create +func LvSpinboxCreate(parent *core.LvObjT) *core.LvObjT + +//go:linkname LvSpinboxSetValue C.lv_spinbox_set_value +func LvSpinboxSetValue(obj *core.LvObjT, v c.Int32T) + +//go:linkname LvSpinboxSetRollover C.lv_spinbox_set_rollover +func LvSpinboxSetRollover(obj *core.LvObjT, rollover c.Char) + +//go:linkname LvSpinboxSetDigitFormat C.lv_spinbox_set_digit_format +func LvSpinboxSetDigitFormat(obj *core.LvObjT, digitCount c.Uint32T, sepPos c.Uint32T) + +//go:linkname LvSpinboxSetStep C.lv_spinbox_set_step +func LvSpinboxSetStep(obj *core.LvObjT, step c.Uint32T) + +//go:linkname LvSpinboxSetRange C.lv_spinbox_set_range +func LvSpinboxSetRange(obj *core.LvObjT, rangeMin c.Int32T, rangeMax c.Int32T) + +//go:linkname LvSpinboxSetCursorPos C.lv_spinbox_set_cursor_pos +func LvSpinboxSetCursorPos(obj *core.LvObjT, pos c.Uint32T) + +//go:linkname LvSpinboxSetDigitStepDirection C.lv_spinbox_set_digit_step_direction +func LvSpinboxSetDigitStepDirection(obj *core.LvObjT, direction c.Int32T) + +//go:linkname LvSpinboxGetRollover C.lv_spinbox_get_rollover +func LvSpinboxGetRollover(obj *core.LvObjT) c.Char + +//go:linkname LvSpinboxGetValue C.lv_spinbox_get_value +func LvSpinboxGetValue(obj *core.LvObjT) c.Int32T + +//go:linkname LvSpinboxGetStep C.lv_spinbox_get_step +func LvSpinboxGetStep(obj *core.LvObjT) c.Int32T + +//go:linkname LvSpinboxStepNext C.lv_spinbox_step_next +func LvSpinboxStepNext(obj *core.LvObjT) + +//go:linkname LvSpinboxStepPrev C.lv_spinbox_step_prev +func LvSpinboxStepPrev(obj *core.LvObjT) + +//go:linkname LvSpinboxIncrement C.lv_spinbox_increment +func LvSpinboxIncrement(obj *core.LvObjT) + +//go:linkname LvSpinboxDecrement C.lv_spinbox_decrement +func LvSpinboxDecrement(obj *core.LvObjT) diff --git a/lvgl/widgets/spinner.go b/lvgl/widgets/spinner.go new file mode 100644 index 00000000..67ffde4a --- /dev/null +++ b/lvgl/widgets/spinner.go @@ -0,0 +1,14 @@ +package widgets + +import ( + _ "unsafe" + + "github.com/goplus/llgo/c" + core "github.com/goplus/llpkg/lvgl/core" +) + +//go:linkname LvSpinnerCreate C.lv_spinner_create +func LvSpinnerCreate(parent *core.LvObjT) *core.LvObjT + +//go:linkname LvSpinnerSetAnimParams C.lv_spinner_set_anim_params +func LvSpinnerSetAnimParams(obj *core.LvObjT, t c.Uint32T, angle c.Uint32T) diff --git a/lvgl/widgets/switch.go b/lvgl/widgets/switch.go new file mode 100644 index 00000000..2a3ab9d7 --- /dev/null +++ b/lvgl/widgets/switch.go @@ -0,0 +1,17 @@ +package widgets + +import ( + _ "unsafe" + + "github.com/goplus/llgo/c" + core "github.com/goplus/llpkg/lvgl/core" +) + +//go:linkname LvSwitchCreate C.lv_switch_create +func LvSwitchCreate(parent *core.LvObjT) *core.LvObjT + +//go:linkname LvSwitchSetOrientation C.lv_switch_set_orientation +func LvSwitchSetOrientation(obj *core.LvObjT, orientation c.Int32T) + +//go:linkname LvSwitchGetOrientation C.lv_switch_get_orientation +func LvSwitchGetOrientation(obj *core.LvObjT) c.Int32T diff --git a/lvgl/widgets/table.go b/lvgl/widgets/table.go new file mode 100644 index 00000000..1056b4e8 --- /dev/null +++ b/lvgl/widgets/table.go @@ -0,0 +1,57 @@ +package widgets + +import ( + "unsafe" + _ "unsafe" + + "github.com/goplus/llgo/c" + core "github.com/goplus/llpkg/lvgl/core" +) + +//go:linkname LvTableCreate C.lv_table_create +func LvTableCreate(parent *core.LvObjT) *core.LvObjT + +//go:linkname LvTableSetCellValue C.lv_table_set_cell_value +func LvTableSetCellValue(obj *core.LvObjT, row c.Uint32T, col c.Uint32T, txt *c.Char) + +//go:linkname LvTableSetRowCount C.lv_table_set_row_count +func LvTableSetRowCount(obj *core.LvObjT, rowCnt c.Uint32T) + +//go:linkname LvTableSetColumnCount C.lv_table_set_column_count +func LvTableSetColumnCount(obj *core.LvObjT, colCnt c.Uint32T) + +//go:linkname LvTableSetColumnWidth C.lv_table_set_column_width +func LvTableSetColumnWidth(obj *core.LvObjT, colId c.Uint32T, w c.Int32T) + +//go:linkname LvTableSetCellCtrl C.lv_table_set_cell_ctrl +func LvTableSetCellCtrl(obj *core.LvObjT, row c.Uint32T, col c.Uint32T, ctrl c.Int32T) + +//go:linkname LvTableClearCellCtrl C.lv_table_clear_cell_ctrl +func LvTableClearCellCtrl(obj *core.LvObjT, row c.Uint32T, col c.Uint32T, ctrl c.Int32T) + +//go:linkname LvTableSetCellUserData C.lv_table_set_cell_user_data +func LvTableSetCellUserData(obj *core.LvObjT, row c.Uint16T, col c.Uint16T, userData unsafe.Pointer) + +//go:linkname LvTableSetSelectedCell C.lv_table_set_selected_cell +func LvTableSetSelectedCell(obj *core.LvObjT, row c.Uint16T, col c.Uint16T) + +//go:linkname LvTableGetCellValue C.lv_table_get_cell_value +func LvTableGetCellValue(obj *core.LvObjT, row c.Uint32T, col c.Uint32T) *c.Char + +//go:linkname LvTableGetRowCount C.lv_table_get_row_count +func LvTableGetRowCount(obj *core.LvObjT) c.Uint32T + +//go:linkname LvTableGetColumnCount C.lv_table_get_column_count +func LvTableGetColumnCount(obj *core.LvObjT) c.Uint32T + +//go:linkname LvTableGetColumnWidth C.lv_table_get_column_width +func LvTableGetColumnWidth(obj *core.LvObjT, col c.Uint32T) c.Int32T + +//go:linkname LvTableHasCellCtrl C.lv_table_has_cell_ctrl +func LvTableHasCellCtrl(obj *core.LvObjT, row c.Uint32T, col c.Uint32T, ctrl c.Int32T) c.Char + +//go:linkname LvTableGetSelectedCell C.lv_table_get_selected_cell +func LvTableGetSelectedCell(obj *core.LvObjT, row *c.Uint32T, col *c.Uint32T) + +//go:linkname LvTableGetCellUserData C.lv_table_get_cell_user_data +func LvTableGetCellUserData(obj *core.LvObjT, row c.Uint16T, col c.Uint16T) unsafe.Pointer diff --git a/lvgl/widgets/tabview.go b/lvgl/widgets/tabview.go new file mode 100644 index 00000000..720f5c11 --- /dev/null +++ b/lvgl/widgets/tabview.go @@ -0,0 +1,38 @@ +package widgets + +import ( + _ "unsafe" + + "github.com/goplus/llgo/c" + core "github.com/goplus/llpkg/lvgl/core" +) + +//go:linkname LvTabviewCreate C.lv_tabview_create +func LvTabviewCreate(parent *core.LvObjT) *core.LvObjT + +//go:linkname LvTabviewAddTab C.lv_tabview_add_tab +func LvTabviewAddTab(obj *core.LvObjT, name *c.Char) *core.LvObjT + +//go:linkname LvTabviewRenameTab C.lv_tabview_rename_tab +func LvTabviewRenameTab(obj *core.LvObjT, idx c.Uint32T, newName *c.Char) + +//go:linkname LvTabviewSetActive C.lv_tabview_set_active +func LvTabviewSetActive(obj *core.LvObjT, idx c.Uint32T, animEn c.Int32T) + +//go:linkname LvTabviewSetTabBarPosition C.lv_tabview_set_tab_bar_position +func LvTabviewSetTabBarPosition(obj *core.LvObjT, dir c.Int32T) + +//go:linkname LvTabviewSetTabBarSize C.lv_tabview_set_tab_bar_size +func LvTabviewSetTabBarSize(obj *core.LvObjT, size c.Int32T) + +//go:linkname LvTabviewGetTabCount C.lv_tabview_get_tab_count +func LvTabviewGetTabCount(obj *core.LvObjT) c.Uint32T + +//go:linkname LvTabviewGetTabActive C.lv_tabview_get_tab_active +func LvTabviewGetTabActive(obj *core.LvObjT) c.Uint32T + +//go:linkname LvTabviewGetContent C.lv_tabview_get_content +func LvTabviewGetContent(obj *core.LvObjT) *core.LvObjT + +//go:linkname LvTabviewGetTabBar C.lv_tabview_get_tab_bar +func LvTabviewGetTabBar(obj *core.LvObjT) *core.LvObjT diff --git a/lvgl/widgets/textarea.go b/lvgl/widgets/textarea.go new file mode 100644 index 00000000..f2b84799 --- /dev/null +++ b/lvgl/widgets/textarea.go @@ -0,0 +1,119 @@ +package widgets + +import ( + _ "unsafe" + + "github.com/goplus/llgo/c" + core "github.com/goplus/llpkg/lvgl/core" +) + +//go:linkname LvTextareaCreate C.lv_textarea_create +func LvTextareaCreate(parent *core.LvObjT) *core.LvObjT + +//go:linkname LvTextareaAddChar C.lv_textarea_add_char +func LvTextareaAddChar(obj *core.LvObjT, c c.Uint32T) + +//go:linkname LvTextareaAddText C.lv_textarea_add_text +func LvTextareaAddText(obj *core.LvObjT, txt *c.Char) + +//go:linkname LvTextareaDeleteChar C.lv_textarea_delete_char +func LvTextareaDeleteChar(obj *core.LvObjT) + +//go:linkname LvTextareaDeleteCharForward C.lv_textarea_delete_char_forward +func LvTextareaDeleteCharForward(obj *core.LvObjT) + +//go:linkname LvTextareaSetText C.lv_textarea_set_text +func LvTextareaSetText(obj *core.LvObjT, txt *c.Char) + +//go:linkname LvTextareaSetPlaceholderText C.lv_textarea_set_placeholder_text +func LvTextareaSetPlaceholderText(obj *core.LvObjT, txt *c.Char) + +//go:linkname LvTextareaSetCursorPos C.lv_textarea_set_cursor_pos +func LvTextareaSetCursorPos(obj *core.LvObjT, pos c.Int32T) + +//go:linkname LvTextareaSetCursorClickPos C.lv_textarea_set_cursor_click_pos +func LvTextareaSetCursorClickPos(obj *core.LvObjT, en c.Char) + +//go:linkname LvTextareaSetPasswordMode C.lv_textarea_set_password_mode +func LvTextareaSetPasswordMode(obj *core.LvObjT, en c.Char) + +//go:linkname LvTextareaSetPasswordBullet C.lv_textarea_set_password_bullet +func LvTextareaSetPasswordBullet(obj *core.LvObjT, bullet *c.Char) + +//go:linkname LvTextareaSetOneLine C.lv_textarea_set_one_line +func LvTextareaSetOneLine(obj *core.LvObjT, en c.Char) + +//go:linkname LvTextareaSetAcceptedChars C.lv_textarea_set_accepted_chars +func LvTextareaSetAcceptedChars(obj *core.LvObjT, list *c.Char) + +//go:linkname LvTextareaSetMaxLength C.lv_textarea_set_max_length +func LvTextareaSetMaxLength(obj *core.LvObjT, num c.Uint32T) + +//go:linkname LvTextareaSetInsertReplace C.lv_textarea_set_insert_replace +func LvTextareaSetInsertReplace(obj *core.LvObjT, txt *c.Char) + +//go:linkname LvTextareaSetTextSelection C.lv_textarea_set_text_selection +func LvTextareaSetTextSelection(obj *core.LvObjT, en c.Char) + +//go:linkname LvTextareaSetPasswordShowTime C.lv_textarea_set_password_show_time +func LvTextareaSetPasswordShowTime(obj *core.LvObjT, time c.Uint32T) + +//go:linkname LvTextareaSetAlign C.lv_textarea_set_align +func LvTextareaSetAlign(obj *core.LvObjT, align c.Int32T) + +//go:linkname LvTextareaGetText C.lv_textarea_get_text +func LvTextareaGetText(obj *core.LvObjT) *c.Char + +//go:linkname LvTextareaGetPlaceholderText C.lv_textarea_get_placeholder_text +func LvTextareaGetPlaceholderText(obj *core.LvObjT) *c.Char + +//go:linkname LvTextareaGetLabel C.lv_textarea_get_label +func LvTextareaGetLabel(obj *core.LvObjT) *core.LvObjT + +//go:linkname LvTextareaGetCursorPos C.lv_textarea_get_cursor_pos +func LvTextareaGetCursorPos(obj *core.LvObjT) c.Uint32T + +//go:linkname LvTextareaGetCursorClickPos C.lv_textarea_get_cursor_click_pos +func LvTextareaGetCursorClickPos(obj *core.LvObjT) c.Char + +//go:linkname LvTextareaGetPasswordMode C.lv_textarea_get_password_mode +func LvTextareaGetPasswordMode(obj *core.LvObjT) c.Char + +//go:linkname LvTextareaGetPasswordBullet C.lv_textarea_get_password_bullet +func LvTextareaGetPasswordBullet(obj *core.LvObjT) *c.Char + +//go:linkname LvTextareaGetOneLine C.lv_textarea_get_one_line +func LvTextareaGetOneLine(obj *core.LvObjT) c.Char + +//go:linkname LvTextareaGetAcceptedChars C.lv_textarea_get_accepted_chars +func LvTextareaGetAcceptedChars(obj *core.LvObjT) *c.Char + +//go:linkname LvTextareaGetMaxLength C.lv_textarea_get_max_length +func LvTextareaGetMaxLength(obj *core.LvObjT) c.Uint32T + +//go:linkname LvTextareaTextIsSelected C.lv_textarea_text_is_selected +func LvTextareaTextIsSelected(obj *core.LvObjT) c.Char + +//go:linkname LvTextareaGetTextSelection C.lv_textarea_get_text_selection +func LvTextareaGetTextSelection(obj *core.LvObjT) c.Char + +//go:linkname LvTextareaGetPasswordShowTime C.lv_textarea_get_password_show_time +func LvTextareaGetPasswordShowTime(obj *core.LvObjT) c.Uint32T + +//go:linkname LvTextareaGetCurrentChar C.lv_textarea_get_current_char +func LvTextareaGetCurrentChar(obj *core.LvObjT) c.Uint32T + +//go:linkname LvTextareaClearSelection C.lv_textarea_clear_selection +func LvTextareaClearSelection(obj *core.LvObjT) + +//go:linkname LvTextareaCursorRight C.lv_textarea_cursor_right +func LvTextareaCursorRight(obj *core.LvObjT) + +//go:linkname LvTextareaCursorLeft C.lv_textarea_cursor_left +func LvTextareaCursorLeft(obj *core.LvObjT) + +//go:linkname LvTextareaCursorDown C.lv_textarea_cursor_down +func LvTextareaCursorDown(obj *core.LvObjT) + +//go:linkname LvTextareaCursorUp C.lv_textarea_cursor_up +func LvTextareaCursorUp(obj *core.LvObjT) diff --git a/lvgl/widgets/tileview.go b/lvgl/widgets/tileview.go new file mode 100644 index 00000000..b32eb443 --- /dev/null +++ b/lvgl/widgets/tileview.go @@ -0,0 +1,23 @@ +package widgets + +import ( + _ "unsafe" + + "github.com/goplus/llgo/c" + core "github.com/goplus/llpkg/lvgl/core" +) + +//go:linkname LvTileviewCreate C.lv_tileview_create +func LvTileviewCreate(parent *core.LvObjT) *core.LvObjT + +//go:linkname LvTileviewAddTile C.lv_tileview_add_tile +func LvTileviewAddTile(tv *core.LvObjT, colId c.Uint8T, rowId c.Uint8T, dir c.Int32T) *core.LvObjT + +//go:linkname LvTileviewSetTile C.lv_tileview_set_tile +func LvTileviewSetTile(tv *core.LvObjT, tileObj *core.LvObjT, animEn c.Int32T) + +//go:linkname LvTileviewSetTileByIndex C.lv_tileview_set_tile_by_index +func LvTileviewSetTileByIndex(tv *core.LvObjT, colId c.Uint32T, rowId c.Uint32T, animEn c.Int32T) + +//go:linkname LvTileviewGetTileActive C.lv_tileview_get_tile_active +func LvTileviewGetTileActive(obj *core.LvObjT) *core.LvObjT diff --git a/lvgl/widgets/win.go b/lvgl/widgets/win.go new file mode 100644 index 00000000..c10219d4 --- /dev/null +++ b/lvgl/widgets/win.go @@ -0,0 +1,24 @@ +package widgets + +import ( + "unsafe" + _ "unsafe" + + "github.com/goplus/llgo/c" + core "github.com/goplus/llpkg/lvgl/core" +) + +//go:linkname LvWinCreate C.lv_win_create +func LvWinCreate(parent *core.LvObjT) *core.LvObjT + +//go:linkname LvWinAddTitle C.lv_win_add_title +func LvWinAddTitle(win *core.LvObjT, txt *c.Char) *core.LvObjT + +//go:linkname LvWinAddButton C.lv_win_add_button +func LvWinAddButton(win *core.LvObjT, icon unsafe.Pointer, btnW c.Int32T) *core.LvObjT + +//go:linkname LvWinGetHeader C.lv_win_get_header +func LvWinGetHeader(win *core.LvObjT) *core.LvObjT + +//go:linkname LvWinGetContent C.lv_win_get_content +func LvWinGetContent(win *core.LvObjT) *core.LvObjT