summaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authorAmlal El Mahrouss <amlal.elmahrouss@icloud.com>2024-08-25 09:07:21 +0200
committerAmlal El Mahrouss <amlal.elmahrouss@icloud.com>2024-08-25 09:07:21 +0200
commit94141dbd7c1450d079f695d0e8d73e93795161f2 (patch)
treed538ee3515bfa93bfcd5c3eaaf59a6164538f806
parentfa6cc3970bc61e8061a279e8573a61bd4e947f2f (diff)
[CG/FUI] CG's FlatUI library, made for pre-boot/pre-user environements.
- FlatUI is used to install ZKA for example. - Or to indicate an error (using the ke_stop call). - Or to show a popup saying that system couldn't boot. The FlatUI's style will be replicated in user space as well, for consistency. Signed-off-by: Amlal El Mahrouss <amlal.elmahrouss@icloud.com>
-rw-r--r--dev/ZBA/Sources/Root/ZKA/boot-scr.bmpbin11059254 -> 0 bytes
-rw-r--r--dev/ZKA/HALKit/AMD64/HalDescriptorLoader.cxx16
-rw-r--r--dev/ZKA/HALKit/AMD64/HalInterruptAPI.asm8
-rw-r--r--dev/ZKA/HALKit/AMD64/HalKernelMouse.cxx24
-rw-r--r--dev/ZKA/Modules/CoreCG/FbRenderer.hxx4
-rw-r--r--dev/ZKA/Modules/CoreCG/Rsrc/WndControls.rsrc83
-rw-r--r--dev/ZKA/Modules/CoreCG/WindowRenderer.hxx60
-rw-r--r--dev/ZKA/Modules/PS2/PS2MouseInterface.hxx23
-rw-r--r--dev/ZKA/NewKit/Defines.hxx1
-rw-r--r--dev/ZKA/Sources/DLLMain.cxx20
10 files changed, 157 insertions, 82 deletions
diff --git a/dev/ZBA/Sources/Root/ZKA/boot-scr.bmp b/dev/ZBA/Sources/Root/ZKA/boot-scr.bmp
deleted file mode 100644
index f901bb28..00000000
--- a/dev/ZBA/Sources/Root/ZKA/boot-scr.bmp
+++ /dev/null
Binary files differ
diff --git a/dev/ZKA/HALKit/AMD64/HalDescriptorLoader.cxx b/dev/ZKA/HALKit/AMD64/HalDescriptorLoader.cxx
index 0339dd7f..678b0896 100644
--- a/dev/ZKA/HALKit/AMD64/HalDescriptorLoader.cxx
+++ b/dev/ZKA/HALKit/AMD64/HalDescriptorLoader.cxx
@@ -16,14 +16,14 @@ namespace Kernel::HAL
STATIC ::Kernel::Detail::AMD64::InterruptDescriptorAMD64
kInterruptVectorTable[kKernelIdtSize];
- STATIC Void RemapPIC(Void) noexcept
+ STATIC Void hal_remap_intel_pic_ctrl(Void) noexcept
{
// Remap PIC.
- HAL::Out8(0x20, 0x10 | 0x01);
- HAL::Out8(0xA0, 0x10 | 0x01);
+ HAL::Out8(0x20, 0x11);
+ HAL::Out8(0xA0, 0x11);
- HAL::Out8(0x21, 32);
- HAL::Out8(0xA1, 40);
+ HAL::Out8(0x21, 40);
+ HAL::Out8(0xA1, 32);
HAL::Out8(0x21, 4);
HAL::Out8(0xA1, 2);
@@ -31,8 +31,8 @@ namespace Kernel::HAL
HAL::Out8(0x21, 0x01);
HAL::Out8(0xA1, 0x01);
- HAL::Out8(0x21, 0x00);
- HAL::Out8(0xA1, 0x00);
+ HAL::Out8(0x21, 0xFD);
+ HAL::Out8(0xA1, 0xFF);
}
} // namespace Detail
@@ -55,7 +55,7 @@ namespace Kernel::HAL
MUST_PASS(baseIdt);
- Detail::RemapPIC();
+ Detail::hal_remap_intel_pic_ctrl();
for (UInt16 i = 0; i < kKernelIdtSize; ++i)
{
diff --git a/dev/ZKA/HALKit/AMD64/HalInterruptAPI.asm b/dev/ZKA/HALKit/AMD64/HalInterruptAPI.asm
index 093da0db..12c71663 100644
--- a/dev/ZKA/HALKit/AMD64/HalInterruptAPI.asm
+++ b/dev/ZKA/HALKit/AMD64/HalInterruptAPI.asm
@@ -35,7 +35,7 @@ __NEW_INT_%1:
global ke_handle_irq
global kInterruptVectorTable
-extern _hal_handle_mouse
+extern hal_handle_mouse
extern idt_handle_gpf
extern idt_handle_pf
extern ke_io_write
@@ -136,11 +136,7 @@ IntNormal 43
__NEW_INT_44:
cli
- ;; TODO: CoreEvents dispatch routine.
-
- push rax
- call _hal_handle_mouse
- pop rax
+ call hal_handle_mouse
sti
iretq
diff --git a/dev/ZKA/HALKit/AMD64/HalKernelMouse.cxx b/dev/ZKA/HALKit/AMD64/HalKernelMouse.cxx
index bff5e5ee..06cdc81b 100644
--- a/dev/ZKA/HALKit/AMD64/HalKernelMouse.cxx
+++ b/dev/ZKA/HALKit/AMD64/HalKernelMouse.cxx
@@ -19,7 +19,6 @@ STATIC Kernel::Int32 kPrevY = 10;
STATIC Kernel::Int32 kX = 10;
STATIC Kernel::Int32 kY = 10;
STATIC Kernel::Int32 kMouseCycle = 0;
-STATIC Kernel::PS2MouseInterface kMousePS2;
STATIC Kernel::Char kMousePacket[4] = {};
STATIC Kernel::Boolean kMousePacketReady = false;
@@ -35,7 +34,7 @@ STATIC CGInit();
using namespace Kernel;
-Void hal_handle_mouse()
+EXTERN_C Void hal_handle_mouse()
{
Kernel::UInt8 data = HAL::In8(0x60);
@@ -70,12 +69,6 @@ Void hal_handle_mouse()
Kernel::HAL::Out8(0xA0, 0x20);
}
-/// @brief Interrupt handler for the mouse.
-EXTERN_C Void _hal_handle_mouse()
-{
- hal_handle_mouse();
-}
-
EXTERN_C Boolean _hal_left_button_pressed()
{
return kMousePacket[0] & kPS2Leftbutton;
@@ -176,6 +169,8 @@ EXTERN_C Boolean _hal_draw_mouse()
kPrevX = kX;
kPrevY = kY;
+ CGDrawBitMapInRegionA(Cursor, cCurHeight, cCurWidth, kY, kX);
+
kMousePacketReady = false;
return true;
}
@@ -183,8 +178,13 @@ EXTERN_C Boolean _hal_draw_mouse()
/// @brief Init kernel mouse.
EXTERN_C Void _hal_init_mouse()
{
- kMousePS2.Init();
-
- HAL::Out8(0x21, 0b11111001);
- HAL::Out8(0xA1, 0b11101111);
+ kPrevX = 10;
+ kPrevY = 10;
+ kX = 10;
+ kY = 10;
+ kMouseCycle = 0;
+ kMousePacketReady = false;
+
+ Kernel::PS2MouseInterface ps2_mouse;
+ ps2_mouse.Init();
}
diff --git a/dev/ZKA/Modules/CoreCG/FbRenderer.hxx b/dev/ZKA/Modules/CoreCG/FbRenderer.hxx
index 890dd1ee..e53d4a90 100644
--- a/dev/ZKA/Modules/CoreCG/FbRenderer.hxx
+++ b/dev/ZKA/Modules/CoreCG/FbRenderer.hxx
@@ -24,7 +24,7 @@
{ \
for (Kernel::SizeT u = BaseY; u < (_Width + BaseY); ++u) \
{ \
- *(((volatile Kernel::UInt32*)(kHandoverHeader->f_GOP.f_The + \
+ *(((Kernel::UInt32*)(kHandoverHeader->f_GOP.f_The + \
4 * kHandoverHeader->f_GOP.f_PixelPerLine * \
i + \
4 * u))) |= (ImgPtr)[__GXCursor]; \
@@ -41,7 +41,7 @@
{ \
for (Kernel::SizeT u = BaseY; u < (_Width + BaseY); ++u) \
{ \
- *(((volatile Kernel::UInt32*)(kHandoverHeader->f_GOP.f_The + \
+ *(((Kernel::UInt32*)(kHandoverHeader->f_GOP.f_The + \
4 * kHandoverHeader->f_GOP.f_PixelPerLine * \
i + \
4 * u))) = (ImgPtr)[__GXCursor]; \
diff --git a/dev/ZKA/Modules/CoreCG/Rsrc/WndControls.rsrc b/dev/ZKA/Modules/CoreCG/Rsrc/WndControls.rsrc
index f89815fb..a7024fde 100644
--- a/dev/ZKA/Modules/CoreCG/Rsrc/WndControls.rsrc
+++ b/dev/ZKA/Modules/CoreCG/Rsrc/WndControls.rsrc
@@ -1,28 +1,61 @@
-#define FLATCONTROLS_HEIGHT 22
-#define FLATCONTROLS_WIDTH 116
+#define FLATCONTROLS_HEIGHT 24
+#define FLATCONTROLS_WIDTH 44
-// array size is 7656
+// array size is 3168
static inline const unsigned int FlatControls[] = {
- 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xff4545, 0xff4545, 0xff4545, 0xff4545, 0xff4545, 0xff4545, 0xff4545, 0xff4545, 0xff4545, 0xff4545, 0xff4545, 0xff4545, 0xff4545, 0xff4545, 0xff4545, 0xff4545, 0xff4545, 0xff4545, 0xff4545, 0xff4545, 0xff4545, 0xff4545, 0xff4545, 0xff4545, 0xff4545, 0xff4545, 0xff4545, 0xff4545, 0xff4545, 0xff4545, 0xff4545, 0xff4545, 0xff4545, 0xff4545, 0xff4545, 0xff4545, 0xff4545, 0xff4545,
- 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xff4545, 0xff4545, 0xff4545, 0xff4545, 0xff4545, 0xff4545, 0xff4545, 0xff4545, 0xff4545, 0xff4545, 0xff4545, 0xff4545, 0xff4545, 0xff4545, 0xff4545, 0xff4545, 0xff4545, 0xff4545, 0xff4545, 0xff4545, 0xff4545, 0xff4545, 0xff4545, 0xff4545, 0xff4545, 0xff4545, 0xff4545, 0xff4545, 0xff4545, 0xff4545, 0xff4545, 0xff4545, 0xff4545, 0xff4545, 0xff4545, 0xff4545, 0xff4545, 0xff4545,
- 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xff4545, 0xff4545, 0xff4545, 0xff4545, 0xff4545, 0xff4545, 0xff4545, 0xff4545, 0xff4545, 0xff4545, 0xff4545, 0xff4545, 0xff4545, 0xff4545, 0xff4545, 0xff4545, 0xff4545, 0xff4545, 0xff4545, 0xff4545, 0xff4545, 0xff4545, 0xff4545, 0xff4545, 0xff4545, 0xff4545, 0xff4545, 0xff4545, 0xff4545, 0xff4545, 0xff4545, 0xff4545, 0xff4545, 0xff4545, 0xff4545, 0xff4545, 0xff4545, 0xff4545,
- 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xff4545, 0xff4545, 0xff4545, 0xff4545, 0xff4545, 0xff4545, 0xff4545, 0xff4545, 0xff4545, 0xff4545, 0xff4545, 0xff4545, 0xff4545, 0xff4545, 0xff4545, 0xff4545, 0xff4545, 0xff4545, 0xff4545, 0xff4545, 0xff4545, 0xff4545, 0xff4545, 0xff4545, 0xff4545, 0xff4545, 0xff4545, 0xff4545, 0xff4545, 0xff4545, 0xff4545, 0xff4545, 0xff4545, 0xff4545, 0xff4545, 0xff4545, 0xff4545, 0xff4545,
- 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xff4545, 0xff4545, 0xff4545, 0xff4545, 0xff4545, 0xff4545, 0xff4545, 0xff4545, 0xff4545, 0xff4545, 0xff4545, 0xff4545, 0xff4545, 0xff4545, 0xff4545, 0xff4545, 0xff4545, 0xff4545, 0xff4545, 0xff4545, 0xff4545, 0xff4545, 0xff4545, 0xff4545, 0xff4545, 0xff4545, 0xff4545, 0xff4545, 0xff4545, 0xff4545, 0xff4545, 0xff4545, 0xff4545, 0xff4545, 0xff4545, 0xff4545, 0xff4545, 0xff4545,
- 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xff4545, 0xff4545, 0xff4545, 0xff4545, 0xff4545, 0xff4545, 0xff4545, 0xff4545, 0xff4545, 0xff4545, 0xff4545, 0xff4545, 0xff4545, 0xff4545, 0xff4545, 0xff4545, 0xff4545, 0xff4545, 0xff4545, 0xff4545, 0xff4545, 0xff4545, 0xff4545, 0xff4545, 0xff4545, 0xff4545, 0xff4545, 0xff4545, 0xff4545, 0xff4545, 0xff4545, 0xff4545, 0xff4545, 0xff4545, 0xff4545, 0xff4545, 0xff4545, 0xff4545,
- 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xff4545, 0xff4545, 0xff4545, 0xff4545, 0xff4545, 0xff4545, 0xff4545, 0xff4545, 0xff4545, 0xff4545, 0xff4545, 0xff4545, 0xff4545, 0xff4545, 0xff4545, 0xff4545, 0xff4545, 0xff4545, 0xff4545, 0xff4545, 0xff4545, 0xff4545, 0xff4545, 0xff4545, 0xff4545, 0xff4545, 0xff4545, 0xff4545, 0xff4545, 0xff4545, 0xff4545, 0xff4545, 0xff4545, 0xff4545, 0xff4545, 0xff4545, 0xff4545, 0xff4545,
- 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xff4545, 0xff4545, 0xff4545, 0xff4545, 0xff4545, 0xff4545, 0xff4545, 0xff4545, 0xff4545, 0xff4545, 0xff4545, 0xff4545, 0xff4545, 0xff4545, 0xff4545, 0xff4545, 0xfe5151, 0xff4545, 0xff4545, 0xff4545, 0xff4545, 0xfe5151, 0xff4545, 0xff4545, 0xff4545, 0xff4545, 0xff4545, 0xff4545, 0xff4545, 0xff4545, 0xff4545, 0xff4545, 0xff4545, 0xff4545, 0xff4545, 0xff4545, 0xff4545, 0xff4545,
- 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xff4545, 0xff4545, 0xff4545, 0xff4545, 0xff4545, 0xff4545, 0xff4545, 0xff4545, 0xff4545, 0xff4545, 0xff4545, 0xff4545, 0xff4545, 0xff4545, 0xff4545, 0xff5151, 0xfacdcd, 0xfe5d5d, 0xff4545, 0xff4545, 0xfe5d5d, 0xfacdcd, 0xfe5151, 0xff4545, 0xff4545, 0xff4545, 0xff4545, 0xff4545, 0xff4545, 0xff4545, 0xff4545, 0xff4545, 0xff4545, 0xff4545, 0xff4545, 0xff4545, 0xff4545, 0xff4545,
- 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xff4545, 0xff4545, 0xff4545, 0xff4545, 0xff4545, 0xff4545, 0xff4545, 0xff4545, 0xff4545, 0xff4545, 0xff4545, 0xff4545, 0xff4545, 0xff4545, 0xff4545, 0xff4545, 0xfe5d5d, 0xfacdcd, 0xfe5d5d, 0xfe5d5d, 0xfacdcd, 0xfe5d5d, 0xff4545, 0xff4545, 0xff4545, 0xff4545, 0xff4545, 0xff4545, 0xff4545, 0xff4545, 0xff4545, 0xff4545, 0xff4545, 0xff4545, 0xff4545, 0xff4545, 0xff4545, 0xff4545,
- 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xff4545, 0xff4545, 0xff4545, 0xff4545, 0xff4545, 0xff4545, 0xff4545, 0xff4545, 0xff4545, 0xff4545, 0xff4545, 0xff4545, 0xff4545, 0xff4545, 0xff4545, 0xff4545, 0xff4545, 0xfe5d5d, 0xfacdcd, 0xfacdcd, 0xfe5d5d, 0xff4545, 0xff4545, 0xff4545, 0xff4545, 0xff4545, 0xff4545, 0xff4545, 0xff4545, 0xff4545, 0xff4545, 0xff4545, 0xff4545, 0xff4545, 0xff4545, 0xff4545, 0xff4545, 0xff4545,
- 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xff4545, 0xff4545, 0xff4545, 0xff4545, 0xff4545, 0xff4545, 0xff4545, 0xff4545, 0xff4545, 0xff4545, 0xff4545, 0xff4545, 0xff4545, 0xff4545, 0xff4545, 0xff4545, 0xff4545, 0xfe5d5d, 0xfacdcd, 0xfacdcd, 0xfe5d5d, 0xff4545, 0xff4545, 0xff4545, 0xff4545, 0xff4545, 0xff4545, 0xff4545, 0xff4545, 0xff4545, 0xff4545, 0xff4545, 0xff4545, 0xff4545, 0xff4545, 0xff4545, 0xff4545, 0xff4545,
- 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xff4545, 0xff4545, 0xff4545, 0xff4545, 0xff4545, 0xff4545, 0xff4545, 0xff4545, 0xff4545, 0xff4545, 0xff4545, 0xff4545, 0xff4545, 0xff4545, 0xff4545, 0xff4545, 0xfe5d5d, 0xfacdcd, 0xfe5d5d, 0xfe5d5d, 0xfacdcd, 0xfe5d5d, 0xff4545, 0xff4545, 0xff4545, 0xff4545, 0xff4545, 0xff4545, 0xff4545, 0xff4545, 0xff4545, 0xff4545, 0xff4545, 0xff4545, 0xff4545, 0xff4545, 0xff4545, 0xff4545,
- 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xff4545, 0xff4545, 0xff4545, 0xff4545, 0xff4545, 0xff4545, 0xff4545, 0xff4545, 0xff4545, 0xff4545, 0xff4545, 0xff4545, 0xff4545, 0xff4545, 0xff4545, 0xff5151, 0xfacdcd, 0xfe5d5d, 0xff4545, 0xff4545, 0xfe5d5d, 0xfacdcd, 0xfe5151, 0xff4545, 0xff4545, 0xff4545, 0xff4545, 0xff4545, 0xff4545, 0xff4545, 0xff4545, 0xff4545, 0xff4545, 0xff4545, 0xff4545, 0xff4545, 0xff4545, 0xff4545,
- 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xff4545, 0xff4545, 0xff4545, 0xff4545, 0xff4545, 0xff4545, 0xff4545, 0xff4545, 0xff4545, 0xff4545, 0xff4545, 0xff4545, 0xff4545, 0xff4545, 0xff4545, 0xff4545, 0xfe5151, 0xff4545, 0xff4545, 0xff4545, 0xff4545, 0xfe5151, 0xff4545, 0xff4545, 0xff4545, 0xff4545, 0xff4545, 0xff4545, 0xff4545, 0xff4545, 0xff4545, 0xff4545, 0xff4545, 0xff4545, 0xff4545, 0xff4545, 0xff4545, 0xff4545,
- 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xff4545, 0xff4545, 0xff4545, 0xff4545, 0xff4545, 0xff4545, 0xff4545, 0xff4545, 0xff4545, 0xff4545, 0xff4545, 0xff4545, 0xff4545, 0xff4545, 0xff4545, 0xff4545, 0xff4545, 0xff4545, 0xff4545, 0xff4545, 0xff4545, 0xff4545, 0xff4545, 0xff4545, 0xff4545, 0xff4545, 0xff4545, 0xff4545, 0xff4545, 0xff4545, 0xff4545, 0xff4545, 0xff4545, 0xff4545, 0xff4545, 0xff4545, 0xff4545, 0xff4545,
- 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xff4545, 0xff4545, 0xff4545, 0xff4545, 0xff4545, 0xff4545, 0xff4545, 0xff4545, 0xff4545, 0xff4545, 0xff4545, 0xff4545, 0xff4545, 0xff4545, 0xff4545, 0xff4545, 0xff4545, 0xff4545, 0xff4545, 0xff4545, 0xff4545, 0xff4545, 0xff4545, 0xff4545, 0xff4545, 0xff4545, 0xff4545, 0xff4545, 0xff4545, 0xff4545, 0xff4545, 0xff4545, 0xff4545, 0xff4545, 0xff4545, 0xff4545, 0xff4545, 0xff4545,
- 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xff4545, 0xff4545, 0xff4545, 0xff4545, 0xff4545, 0xff4545, 0xff4545, 0xff4545, 0xff4545, 0xff4545, 0xff4545, 0xff4545, 0xff4545, 0xff4545, 0xff4545, 0xff4545, 0xff4545, 0xff4545, 0xff4545, 0xff4545, 0xff4545, 0xff4545, 0xff4545, 0xff4545, 0xff4545, 0xff4545, 0xff4545, 0xff4545, 0xff4545, 0xff4545, 0xff4545, 0xff4545, 0xff4545, 0xff4545, 0xff4545, 0xff4545, 0xff4545, 0xff4545,
- 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xff4545, 0xff4545, 0xff4545, 0xff4545, 0xff4545, 0xff4545, 0xff4545, 0xff4545, 0xff4545, 0xff4545, 0xff4545, 0xff4545, 0xff4545, 0xff4545, 0xff4545, 0xff4545, 0xff4545, 0xff4545, 0xff4545, 0xff4545, 0xff4545, 0xff4545, 0xff4545, 0xff4545, 0xff4545, 0xff4545, 0xff4545, 0xff4545, 0xff4545, 0xff4545, 0xff4545, 0xff4545, 0xff4545, 0xff4545, 0xff4545, 0xff4545, 0xff4545, 0xff4545,
- 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xff4545, 0xff4545, 0xff4545, 0xff4545, 0xff4545, 0xff4545, 0xff4545, 0xff4545, 0xff4545, 0xff4545, 0xff4545, 0xff4545, 0xff4545, 0xff4545, 0xff4545, 0xff4545, 0xff4545, 0xff4545, 0xff4545, 0xff4545, 0xff4545, 0xff4545, 0xff4545, 0xff4545, 0xff4545, 0xff4545, 0xff4545, 0xff4545, 0xff4545, 0xff4545, 0xff4545, 0xff4545, 0xff4545, 0xff4545, 0xff4545, 0xff4545, 0xff4545, 0xff4545,
- 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xff4545, 0xff4545, 0xff4545, 0xff4545, 0xff4545, 0xff4545, 0xff4545, 0xff4545, 0xff4545, 0xff4545, 0xff4545, 0xff4545, 0xff4545, 0xff4545, 0xff4545, 0xff4545, 0xff4545, 0xff4545, 0xff4545, 0xff4545, 0xff4545, 0xff4545, 0xff4545, 0xff4545, 0xff4545, 0xff4545, 0xff4545, 0xff4545, 0xff4545, 0xff4545, 0xff4545, 0xff4545, 0xff4545, 0xff4545, 0xff4545, 0xff4545, 0xff4545, 0xff4545,
- 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xf3f3f3, 0xff4545, 0xff4545, 0xff4545, 0xff4545, 0xff4545, 0xff4545, 0xff4545, 0xff4545, 0xff4545, 0xff4545, 0xff4545, 0xff4545, 0xff4545, 0xff4545, 0xff4545, 0xff4545, 0xff4545, 0xff4545, 0xff4545, 0xff4545, 0xff4545, 0xff4545, 0xff4545, 0xff4545, 0xff4545, 0xff4545, 0xff4545, 0xff4545, 0xff4545, 0xff4545, 0xff4545, 0xff4545, 0xff4545, 0xff4545, 0xff4545, 0xff4545, 0xff4545, 0xff4545
+ 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff,
+ 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff,
+ 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff,
+ 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff,
+ 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff,
+ 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff,
+ 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff,
+ 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff,
+ 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0x3e3e3e, 0xe0e0e0, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xe0e0e0, 0x3e3e3e, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff,
+ 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xe0e0e0, 0x3e3e3e, 0xe0e0e0, 0xffffff, 0xffffff, 0xe0e0e0, 0x3e3e3e, 0xe0e0e0, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff,
+ 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xe0e0e0, 0x3e3e3e, 0xe0e0e0, 0xe0e0e0, 0x3e3e3e, 0xe0e0e0, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff,
+ 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xe0e0e0, 0x3e3e3e, 0x3e3e3e, 0xe0e0e0, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff,
+ 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xe0e0e0, 0x3e3e3e, 0x3e3e3e, 0xe0e0e0, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff,
+ 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xe0e0e0, 0x3e3e3e, 0xe0e0e0, 0xe0e0e0, 0x3e3e3e, 0xe0e0e0, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff,
+ 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xe0e0e0, 0x3e3e3e, 0xe0e0e0, 0xffffff, 0xffffff, 0xe0e0e0, 0x3e3e3e, 0xe0e0e0, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff,
+ 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0x3e3e3e, 0xe0e0e0, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xe0e0e0, 0x3e3e3e, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff,
+ 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff,
+ 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff,
+ 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff,
+ 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff,
+ 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff,
+ 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff,
+ 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff,
+ 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff
+};
+
+#define FLATCONTROLS_CLOSE_HEIGHT 24
+#define FLATCONTROLS_CLOSE_WIDTH 44
+
+// array size is 3168
+static inline const unsigned int FlatControlsClose[] = {
+ 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616,
+ 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616,
+ 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616,
+ 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616,
+ 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616,
+ 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616,
+ 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616,
+ 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616,
+ 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xfac7c7, 0xee3636, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xee3535, 0xfac7c7, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616,
+ 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xee3535, 0xfac7c7, 0xee3636, 0xeb1616, 0xeb1616, 0xee3535, 0xfac7c7, 0xee3636, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616,
+ 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xee3535, 0xfac7c7, 0xee3636, 0xee3535, 0xfac7c7, 0xee3636, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616,
+ 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xee3535, 0xfac7c7, 0xfac7c7, 0xee3636, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616,
+ 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xee3535, 0xfac7c7, 0xfac7c7, 0xee3636, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616,
+ 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xee3535, 0xfac7c7, 0xee3636, 0xee3535, 0xfac7c7, 0xee3636, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616,
+ 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xee3535, 0xfac7c7, 0xee3636, 0xeb1616, 0xeb1616, 0xee3535, 0xfac7c7, 0xee3636, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616,
+ 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xfac7c7, 0xee3636, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xee3535, 0xfac7c7, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616,
+ 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616,
+ 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616,
+ 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616,
+ 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616,
+ 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616,
+ 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616,
+ 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616,
+ 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616
};
diff --git a/dev/ZKA/Modules/CoreCG/WindowRenderer.hxx b/dev/ZKA/Modules/CoreCG/WindowRenderer.hxx
index 52031e1d..79208c47 100644
--- a/dev/ZKA/Modules/CoreCG/WindowRenderer.hxx
+++ b/dev/ZKA/Modules/CoreCG/WindowRenderer.hxx
@@ -24,16 +24,20 @@ namespace CG
enum
{
- cWndFlagNoShow = 0x04,
- cWndFlagButton = 0x08,
- cWndFlagWindow = 0x0A,
+ cWndFlagNoShow = 0x02,
+ cWndFlagButton = 0x04,
+ cWndFlagWindow = 0x06,
+ cWndFlagButtonSelect = 0x08,
+ cWndFlagHideCloseControl = 0x010,
+ cWndFlagCloseControlSelect = 0x012,
};
struct UI_WINDOW_STRUCT final
{
- Int32 w_flags{0};
Char w_window_name[255]{0};
Char w_class_name[255]{0};
+ Int32 w_type{0};
+ Int32 w_sub_type{0};
Int32 w_x{0};
Int32 w_y{0};
Int32 w_w{0};
@@ -44,7 +48,7 @@ namespace CG
typedef struct UI_WINDOW_STRUCT UI_WINDOW_STRUCT;
- inline struct UI_WINDOW_STRUCT* CGCreateWindow(Int32 flags, const Char* window_name, const Char* class_name, Int32 x, Int32 y, Int32 width, Int32 height)
+ inline struct UI_WINDOW_STRUCT* CGCreateWindow(Int32 kind, const Char* window_name, const Char* class_name, Int32 x, Int32 y, Int32 width, Int32 height)
{
UI_WINDOW_STRUCT* wnd = new UI_WINDOW_STRUCT();
@@ -57,9 +61,10 @@ namespace CG
rt_copy_memory((VoidPtr)window_name, wnd->w_window_name, rt_string_len(window_name));
rt_copy_memory((VoidPtr)class_name, wnd->w_class_name, rt_string_len(class_name));
- wnd->w_flags = flags;
- wnd->w_x = x;
- wnd->w_y = y;
+ wnd->w_sub_type = 0;
+ wnd->w_type = kind;
+ wnd->w_x = x;
+ wnd->w_y = y;
wnd->w_w = width;
wnd->w_h = height;
@@ -99,7 +104,7 @@ namespace CG
for (SizeT index = 0; index < wnd_cnt; ++index)
{
if (!wnd[index] ||
- wnd[index]->w_flags & cWndFlagNoShow ||
+ (wnd[index]->w_type == cWndFlagNoShow) ||
!wnd[index]->w_needs_repaint)
continue;
@@ -134,19 +139,44 @@ namespace CG
CGInit();
// Draw fake controls, just for the looks of it (WINDOW ONLY)
- if ((wnd[index]->w_flags & cWndFlagWindow) == cWndFlagWindow)
+ if (wnd[index]->w_type == cWndFlagWindow)
{
CGDrawBitMapInRegion(wnd[index]->display_ptr, wnd[index]->w_h, wnd[index]->w_w, wnd[index]->w_y, wnd[index]->w_x);
CGDrawInRegion(CGColor(0xFF, 0xFF, 0xFF), wnd[index]->w_w, FLATCONTROLS_HEIGHT, wnd[index]->w_y, wnd[index]->w_x);
- CGDrawBitMapInRegion(FlatControls, FLATCONTROLS_HEIGHT, FLATCONTROLS_WIDTH, wnd[index]->w_y, wnd[index]->w_x + wnd[index]->w_w - FLATCONTROLS_WIDTH);
+ if (wnd[index]->w_sub_type != cWndFlagHideCloseControl)
+ {
+ if (wnd[index]->w_sub_type == cWndFlagCloseControlSelect)
+ {
+ CGDrawBitMapInRegion(FlatControlsClose, FLATCONTROLS_CLOSE_HEIGHT, FLATCONTROLS_CLOSE_WIDTH, wnd[index]->w_y, wnd[index]->w_x + wnd[index]->w_w - FLATCONTROLS_WIDTH);
+ }
+ else
+ {
+ CGDrawBitMapInRegion(FlatControls, FLATCONTROLS_HEIGHT, FLATCONTROLS_WIDTH, wnd[index]->w_y, wnd[index]->w_x + wnd[index]->w_w - FLATCONTROLS_WIDTH);
+ }
+ }
+
CGDrawString(wnd[index]->w_window_name, wnd[index]->w_y + 8, wnd[index]->w_x + 8, CGColor(0x00, 0x00, 0x00));
}
- else if ((wnd[index]->w_flags & cWndFlagButton) == cWndFlagButton)
+ /// @note buttons in this library are dynamic, it's because we want to avoid as much as computations as possible.
+ /// (Such as getting the middle coordinates of a button, to center the text.)
+ else if (wnd[index]->w_type == cWndFlagButtonSelect)
{
- CGDrawInRegion(CGColor(0xD3, 0x74, 0x00), wnd[index]->w_w + 1, wnd[index]->w_h + 1, wnd[index]->w_y, wnd[index]->w_x);
- CGDrawInRegion(CGColor(0xFF, 0xFF, 0xFF), wnd[index]->w_w - 1, wnd[index]->w_h - 1, wnd[index]->w_y + 1, wnd[index]->w_x + 1);
- CGDrawString(wnd[index]->w_window_name, wnd[index]->w_y + (wnd[index]->w_y / 2) - (wnd[index]->w_h / 2), wnd[index]->w_x + (wnd[index]->w_x / 2), CGColor(0x00, 0x00, 0x00));
+ auto x_center = wnd[index]->w_x + 6;
+ auto y_center = wnd[index]->w_y + 7;
+
+ CGDrawInRegion(CGColor(0xD3, 0x74, 0x00), wnd[index]->w_w + 1 - rt_string_len(wnd[index]->w_window_name), wnd[index]->w_h + 1 - rt_string_len(wnd[index]->w_window_name), wnd[index]->w_y, wnd[index]->w_x);
+ CGDrawInRegion(CGColor(0xFF, 0xFF, 0xFF), wnd[index]->w_w - 1 - rt_string_len(wnd[index]->w_window_name), wnd[index]->w_h - 1 - rt_string_len(wnd[index]->w_window_name), wnd[index]->w_y + 1, wnd[index]->w_x + 1);
+ CGDrawString(wnd[index]->w_window_name, y_center, x_center, CGColor(0x00, 0x00, 0x00));
+ }
+ else if (wnd[index]->w_type == cWndFlagButton)
+ {
+ auto x_center = wnd[index]->w_x + 6;
+ auto y_center = wnd[index]->w_y + 7;
+
+ CGDrawInRegion(CGColor(0xDC, 0xDC, 0xDC), wnd[index]->w_w + 1 - rt_string_len(wnd[index]->w_window_name), wnd[index]->w_h + 1 - rt_string_len(wnd[index]->w_window_name), wnd[index]->w_y, wnd[index]->w_x);
+ CGDrawInRegion(CGColor(0xFF, 0xFF, 0xFF), wnd[index]->w_w - 1 - rt_string_len(wnd[index]->w_window_name), wnd[index]->w_h - 1 - rt_string_len(wnd[index]->w_window_name), wnd[index]->w_y + 1, wnd[index]->w_x + 1);
+ CGDrawString(wnd[index]->w_window_name, y_center, x_center, CGColor(0x00, 0x00, 0x00));
}
CGFini();
diff --git a/dev/ZKA/Modules/PS2/PS2MouseInterface.hxx b/dev/ZKA/Modules/PS2/PS2MouseInterface.hxx
index 1cba256e..ec57b134 100644
--- a/dev/ZKA/Modules/PS2/PS2MouseInterface.hxx
+++ b/dev/ZKA/Modules/PS2/PS2MouseInterface.hxx
@@ -33,29 +33,32 @@ namespace Kernel
/// @return
Void Init() noexcept
{
- HAL::rt_cli();
-
HAL::Out8(0x64, 0xA8); // enabling the auxiliary device - mouse
this->Wait();
+
HAL::Out8(0x64, 0x20); // tells the keyboard controller that we want to send a command to the mouse
- this->WaitInput();
+
+ this->Wait();
UInt8 status = HAL::In8(0x60);
- status |= 0b10;
+ status |= 0x02;
- this->Wait();
HAL::Out8(0x64, 0x60);
- this->Wait();
HAL::Out8(0x60, status); // setting the correct bit is the "compaq" status byte
- this->Write(0xF6);
- this->Read();
+ HAL::Out8(0x64, 0xD4);
+ HAL::Out8(0x60, 0xFA); // setting the correct bit is the "compaq" status byte
- this->Write(0xF4);
this->Read();
- HAL::rt_sti();
+ // Unmask mouse IRQ.
+
+ // get slave PIC.
+ UInt8 old_pic = HAL::In8(0x21);
+
+ // enable mosue interrupts
+ HAL::Out8(0x21, old_pic & (~0b00000100));
}
public:
diff --git a/dev/ZKA/NewKit/Defines.hxx b/dev/ZKA/NewKit/Defines.hxx
index 1a65868b..47381368 100644
--- a/dev/ZKA/NewKit/Defines.hxx
+++ b/dev/ZKA/NewKit/Defines.hxx
@@ -9,6 +9,7 @@
#include <NewKit/Macros.hxx>
#define NEWKIT_VERSION "1.01"
+#define NEWKIT_VERSION_CB 0x0101
#if !defined(_INC_NO_STDC_HEADERS) && defined(__GNUC__)
#include <CRT/__ndk_defines.hxx>
diff --git a/dev/ZKA/Sources/DLLMain.cxx b/dev/ZKA/Sources/DLLMain.cxx
index b3bcd48c..c8db0c29 100644
--- a/dev/ZKA/Sources/DLLMain.cxx
+++ b/dev/ZKA/Sources/DLLMain.cxx
@@ -26,8 +26,19 @@
#include <Modules/CoreCG/WindowRenderer.hxx>
#include <KernelKit/Timer.hxx>
+/***********************************************************************************/
+/* Returns kernel's version. */
+/***********************************************************************************/
+
EXTERN Kernel::Property cKernelVersion;
+/***********************************************************************************/
+/* This is an external C symbol. */
+/***********************************************************************************/
+
+EXTERN_C Kernel::Void _hal_init_mouse();
+EXTERN_C Kernel::Boolean _hal_draw_mouse();
+
namespace Kernel::Detail
{
/// @brief Filesystem auto formatter, additional checks are also done by the class.
@@ -198,8 +209,9 @@ EXTERN_C Kernel::Void ke_dll_entrypoint(Kernel::Void)
CGFini();
- auto root_zka_wnd = CG::CGCreateWindow(CG::cWndFlagWindow, "ZKA Setup", "Window", 0, 0, CG::UIAccessibilty::The().Height() - 20, CG::UIAccessibilty::The().Width() - 20);
+ auto root_zka_wnd = CG::CGCreateWindow(CG::cWndFlagWindow, "ZKA Setup", "Window", 0, 0, 512, 256);
+ root_zka_wnd->w_sub_type = CG::cWndFlagCloseControlSelect;
root_zka_wnd->w_x = 10;
root_zka_wnd->w_y = 10;
@@ -208,10 +220,10 @@ EXTERN_C Kernel::Void ke_dll_entrypoint(Kernel::Void)
/// Now run kernel loop, until no process are running.
Kernel::Detail::FilesystemInstaller(); // automatic filesystem creation.
- auto root_install_wnd = CG::CGCreateWindow(CG::cWndFlagButton, "Install ZKA.", "Button", 0, 0, 128, 32);
+ auto root_install_wnd = CG::CGCreateWindow(CG::cWndFlagButtonSelect, "Install Now.", "Button", 0, 0, 128, 32);
- root_install_wnd->w_x = 30;
- root_install_wnd->w_y = 60;
+ root_install_wnd->w_x = 512 - 128;
+ root_install_wnd->w_y = 256 - 32;
root_install_wnd->w_needs_repaint = Yes;