Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.blender.org/blender.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorCampbell Barton <ideasman42@gmail.com>2012-05-19 00:13:40 +0400
committerCampbell Barton <ideasman42@gmail.com>2012-05-19 00:13:40 +0400
commit65228807725d57aa4d33bcb8c3e3966d1acf0b8a (patch)
treea32d41a02fc722b455f69d3276dd0d98ccd8eef8 /intern/ghost
parente499df7b390e9f7ef6b2052e98c32043a81ce47f (diff)
style cleanup: ghost/x11
Diffstat (limited to 'intern/ghost')
-rw-r--r--intern/ghost/intern/GHOST_DisplayManagerX11.cpp62
-rw-r--r--intern/ghost/intern/GHOST_DisplayManagerX11.h48
-rw-r--r--intern/ghost/intern/GHOST_DropTargetX11.cpp30
-rw-r--r--intern/ghost/intern/GHOST_DropTargetX11.h52
-rw-r--r--intern/ghost/intern/GHOST_NDOFManagerX11.cpp8
-rw-r--r--intern/ghost/intern/GHOST_SystemPathsX11.cpp18
-rw-r--r--intern/ghost/intern/GHOST_SystemPathsX11.h14
-rw-r--r--intern/ghost/intern/GHOST_SystemX11.cpp966
-rw-r--r--intern/ghost/intern/GHOST_SystemX11.h128
-rw-r--r--intern/ghost/intern/GHOST_WindowX11.cpp849
-rw-r--r--intern/ghost/intern/GHOST_WindowX11.h262
11 files changed, 1228 insertions, 1209 deletions
diff --git a/intern/ghost/intern/GHOST_DisplayManagerX11.cpp b/intern/ghost/intern/GHOST_DisplayManagerX11.cpp
index b8fe271fd4d..d719a4caa55 100644
--- a/intern/ghost/intern/GHOST_DisplayManagerX11.cpp
+++ b/intern/ghost/intern/GHOST_DisplayManagerX11.cpp
@@ -43,30 +43,29 @@
GHOST_DisplayManagerX11::
GHOST_DisplayManagerX11(
- GHOST_SystemX11 *system
-) :
+ GHOST_SystemX11 *system
+ ) :
GHOST_DisplayManager(),
m_system(system)
{
//nothing to do.
}
- GHOST_TSuccess
+GHOST_TSuccess
GHOST_DisplayManagerX11::
-getNumDisplays(
- GHOST_TUns8& numDisplays
-) const{
+getNumDisplays(GHOST_TUns8& numDisplays) const
+{
numDisplays = m_system->getNumDisplays();
return GHOST_kSuccess;
}
- GHOST_TSuccess
+GHOST_TSuccess
GHOST_DisplayManagerX11::
getNumDisplaySettings(
- GHOST_TUns8 display,
- GHOST_TInt32& numSettings
-) const{
+ GHOST_TUns8 display,
+ GHOST_TInt32& numSettings) const
+{
#ifdef WITH_X11_XF86VMODE
int majorVersion, minorVersion;
XF86VidModeModeInfo **vidmodes;
@@ -96,13 +95,13 @@ getNumDisplaySettings(
return GHOST_kSuccess;
}
- GHOST_TSuccess
+GHOST_TSuccess
GHOST_DisplayManagerX11::
getDisplaySetting(
- GHOST_TUns8 display,
- GHOST_TInt32 index,
- GHOST_DisplaySetting& setting
-) const {
+ GHOST_TUns8 display,
+ GHOST_TInt32 index,
+ GHOST_DisplaySetting& setting) const
+{
#ifdef WITH_X11_XF86VMODE
int majorVersion, minorVersion;
@@ -128,13 +127,13 @@ getDisplaySetting(
setting.xPixels = vidmodes[index]->hdisplay;
setting.yPixels = vidmodes[index]->vdisplay;
- setting.bpp = DefaultDepth(dpy,DefaultScreen(dpy));
+ setting.bpp = DefaultDepth(dpy, DefaultScreen(dpy));
#else
GHOST_ASSERT(display < 1, "Only single display systems are currently supported.\n");
GHOST_ASSERT(index < 1, "Requested setting outside of valid range.\n");
- Display * x_display = m_system->getXDisplay();
+ Display *x_display = m_system->getXDisplay();
if (x_display == NULL) {
return GHOST_kFailure;
@@ -142,7 +141,7 @@ getDisplaySetting(
setting.xPixels = DisplayWidth(x_display, DefaultScreen(x_display));
setting.yPixels = DisplayHeight(x_display, DefaultScreen(x_display));
- setting.bpp = DefaultDepth(x_display,DefaultScreen(x_display));
+ setting.bpp = DefaultDepth(x_display, DefaultScreen(x_display));
#endif
// Don't think it's possible to get this value from X!
@@ -152,25 +151,25 @@ getDisplaySetting(
return GHOST_kSuccess;
}
- GHOST_TSuccess
+GHOST_TSuccess
GHOST_DisplayManagerX11::
getCurrentDisplaySetting(
- GHOST_TUns8 display,
- GHOST_DisplaySetting& setting
-) const {
+ GHOST_TUns8 display,
+ GHOST_DisplaySetting& setting) const
+{
/* According to the xf86vidmodegetallmodelines man page,
* "The first element of the array corresponds to the current video mode."
*/
- return getDisplaySetting(display,GHOST_TInt32(0),setting);
+ return getDisplaySetting(display, GHOST_TInt32(0), setting);
}
- GHOST_TSuccess
+GHOST_TSuccess
GHOST_DisplayManagerX11::
setCurrentDisplaySetting(
- GHOST_TUns8 display,
- const GHOST_DisplaySetting& setting
-){
+ GHOST_TUns8 display,
+ const GHOST_DisplaySetting& setting)
+{
#ifdef WITH_X11_XF86VMODE
//
// Mode switching code ported from Quake 2:
@@ -196,7 +195,7 @@ setCurrentDisplaySetting(
}
# ifdef _DEBUG
printf("Using XFree86-VidModeExtension Version %d.%d\n",
- majorVersion, minorVersion);
+ majorVersion, minorVersion);
# endif
/* The X11 man page says vidmodes needs to be freed, but doing so causes a
@@ -208,7 +207,7 @@ setCurrentDisplaySetting(
for (int i = 0; i < num_vidmodes; i++) {
if (setting.xPixels > vidmodes[i]->hdisplay ||
- setting.yPixels > vidmodes[i]->vdisplay)
+ setting.yPixels > vidmodes[i]->vdisplay)
continue;
x = setting.xPixels - vidmodes[i]->hdisplay;
@@ -226,7 +225,7 @@ setCurrentDisplaySetting(
actualWidth = vidmodes[best_fit]->hdisplay;
actualHeight = vidmodes[best_fit]->vdisplay;
printf("Switching to video mode %dx%d\n",
- actualWidth, actualHeight);
+ actualWidth, actualHeight);
# endif
// change to the mode
@@ -234,7 +233,8 @@ setCurrentDisplaySetting(
// Move the viewport to top left
XF86VidModeSetViewPort(dpy, scrnum, 0, 0);
- } else
+ }
+ else
return GHOST_kFailure;
XFlush(dpy);
diff --git a/intern/ghost/intern/GHOST_DisplayManagerX11.h b/intern/ghost/intern/GHOST_DisplayManagerX11.h
index c4d2b6dbb0a..61b4578cac3 100644
--- a/intern/ghost/intern/GHOST_DisplayManagerX11.h
+++ b/intern/ghost/intern/GHOST_DisplayManagerX11.h
@@ -50,18 +50,18 @@ public:
* Constructor.
*/
GHOST_DisplayManagerX11(
- GHOST_SystemX11 *system
- );
+ GHOST_SystemX11 *system
+ );
/**
* Returns the number of display devices on this system.
* @param numDisplays The number of displays on this system.
* @return Indication of success.
*/
- GHOST_TSuccess
+ GHOST_TSuccess
getNumDisplays(
- GHOST_TUns8& numDisplays
- ) const;
+ GHOST_TUns8& numDisplays
+ ) const;
/**
* Returns the number of display settings for this display device.
@@ -69,11 +69,11 @@ public:
* @param setting The number of settings of the display device with this index.
* @return Indication of success.
*/
- GHOST_TSuccess
+ GHOST_TSuccess
getNumDisplaySettings(
- GHOST_TUns8 display,
- GHOST_TInt32& numSettings
- ) const;
+ GHOST_TUns8 display,
+ GHOST_TInt32& numSettings
+ ) const;
/**
* Returns the current setting for this display device.
@@ -82,12 +82,12 @@ public:
* @param setting The setting of the display device with this index.
* @return Indication of success.
*/
- GHOST_TSuccess
+ GHOST_TSuccess
getDisplaySetting(
- GHOST_TUns8 display,
- GHOST_TInt32 index,
- GHOST_DisplaySetting& setting
- ) const;
+ GHOST_TUns8 display,
+ GHOST_TInt32 index,
+ GHOST_DisplaySetting& setting
+ ) const;
/**
* Returns the current setting for this display device.
@@ -95,11 +95,11 @@ public:
* @param setting The current setting of the display device with this index.
* @return Indication of success.
*/
- GHOST_TSuccess
+ GHOST_TSuccess
getCurrentDisplaySetting(
- GHOST_TUns8 display,
- GHOST_DisplaySetting& setting
- ) const;
+ GHOST_TUns8 display,
+ GHOST_DisplaySetting& setting
+ ) const;
/**
* Changes the current setting for this display device.
@@ -107,15 +107,15 @@ public:
* @param setting The current setting of the display device with this index.
* @return Indication of success.
*/
- GHOST_TSuccess
+ GHOST_TSuccess
setCurrentDisplaySetting(
- GHOST_TUns8 display,
- const GHOST_DisplaySetting& setting
- );
+ GHOST_TUns8 display,
+ const GHOST_DisplaySetting& setting
+ );
-private :
+private:
- GHOST_SystemX11 * m_system;
+ GHOST_SystemX11 *m_system;
};
diff --git a/intern/ghost/intern/GHOST_DropTargetX11.cpp b/intern/ghost/intern/GHOST_DropTargetX11.cpp
index 2239ac63d33..c1cc55b332a 100644
--- a/intern/ghost/intern/GHOST_DropTargetX11.cpp
+++ b/intern/ghost/intern/GHOST_DropTargetX11.cpp
@@ -37,8 +37,8 @@
bool GHOST_DropTargetX11::m_xdndInitialized = false;
DndClass GHOST_DropTargetX11::m_dndClass;
-Atom * GHOST_DropTargetX11::m_dndTypes = NULL;
-Atom * GHOST_DropTargetX11::m_dndActions = NULL;
+Atom *GHOST_DropTargetX11::m_dndTypes = NULL;
+Atom *GHOST_DropTargetX11::m_dndActions = NULL;
const char *GHOST_DropTargetX11::m_dndMimeTypes[] = {"url/url", "text/uri-list", "text/plain", "application/octet-stream"};
int GHOST_DropTargetX11::m_refCounter = 0;
@@ -55,13 +55,13 @@ int GHOST_DropTargetX11::m_refCounter = 0;
void GHOST_DropTargetX11::Initialize(void)
{
Display *display = m_system->getXDisplay();
- int dndTypesCount = sizeof(m_dndMimeTypes) / sizeof(char*);
+ int dndTypesCount = sizeof(m_dndMimeTypes) / sizeof(char *);
int counter;
xdnd_init(&m_dndClass, display);
m_dndTypes = new Atom[dndTypesCount + 1];
- XInternAtoms(display, (char**)m_dndMimeTypes, dndTypesCount, 0, m_dndTypes);
+ XInternAtoms(display, (char **)m_dndMimeTypes, dndTypesCount, 0, m_dndTypes);
m_dndTypes[dndTypesCount] = 0;
m_dndActions = new Atom[8];
@@ -86,10 +86,10 @@ void GHOST_DropTargetX11::Uninitialize(void)
xdnd_shut(&m_dndClass);
}
-GHOST_DropTargetX11::GHOST_DropTargetX11(GHOST_WindowX11 * window, GHOST_SystemX11 * system)
-:
-m_window(window),
-m_system(system)
+GHOST_DropTargetX11::GHOST_DropTargetX11(GHOST_WindowX11 *window, GHOST_SystemX11 *system)
+ :
+ m_window(window),
+ m_system(system)
{
if (!m_xdndInitialized) {
Initialize();
@@ -177,7 +177,7 @@ void GHOST_DropTargetX11::UrlDecode(char *decodedOut, int bufferSize, const char
assert(strlen(decodedOut) < bufferSize);
// Concatenate this character onto the output
- strncat(decodedOut, (char*)&asciiCharacter, 1);
+ strncat(decodedOut, (char *)&asciiCharacter, 1);
// Skip the next character
i++;
@@ -188,7 +188,7 @@ void GHOST_DropTargetX11::UrlDecode(char *decodedOut, int bufferSize, const char
char *GHOST_DropTargetX11::FileUrlDecode(char *fileUrl)
{
- if(!strncpy(fileUrl, "file://", 7) == 0) {
+ if (!strncpy(fileUrl, "file://", 7) == 0) {
/* assume one character of encoded URL can be expanded to 4 chars max */
int decodedSize = 4 * strlen(fileUrl) + 1;
char *decodedPath = (char *)malloc(decodedSize);
@@ -217,9 +217,9 @@ void *GHOST_DropTargetX11::getURIListGhostData(unsigned char *dropBuffer, int dr
else curLength++;
}
- strArray = (GHOST_TStringArray*)malloc(sizeof(GHOST_TStringArray));
+ strArray = (GHOST_TStringArray *)malloc(sizeof(GHOST_TStringArray));
strArray->count = 0;
- strArray->strings = (GHOST_TUns8**)malloc(totPaths*sizeof(GHOST_TUns8*));
+ strArray->strings = (GHOST_TUns8 **)malloc(totPaths * sizeof(GHOST_TUns8 *));
curLength = 0;
for (int i = 0; i <= dropBufferSize; i++) {
@@ -228,12 +228,12 @@ void *GHOST_DropTargetX11::getURIListGhostData(unsigned char *dropBuffer, int dr
char *curPath = (char *)malloc(curLength + 1);
char *decodedPath;
- strncpy(curPath, (char*)dropBuffer + i - curLength, curLength);
+ strncpy(curPath, (char *)dropBuffer + i - curLength, curLength);
curPath[curLength] = 0;
decodedPath = FileUrlDecode(curPath);
- if(decodedPath) {
- strArray->strings[strArray->count] = (GHOST_TUns8*)decodedPath;
+ if (decodedPath) {
+ strArray->strings[strArray->count] = (GHOST_TUns8 *)decodedPath;
strArray->count++;
}
diff --git a/intern/ghost/intern/GHOST_DropTargetX11.h b/intern/ghost/intern/GHOST_DropTargetX11.h
index b9e17dcc93b..10d76bbb165 100644
--- a/intern/ghost/intern/GHOST_DropTargetX11.h
+++ b/intern/ghost/intern/GHOST_DropTargetX11.h
@@ -47,7 +47,7 @@ public:
* @param window The window to register as drop target.
* @param system The associated system.
*/
- GHOST_DropTargetX11(GHOST_WindowX11 * window, GHOST_SystemX11 * system);
+ GHOST_DropTargetX11(GHOST_WindowX11 *window, GHOST_SystemX11 *system);
/**
* Destructor
@@ -55,8 +55,8 @@ public:
~GHOST_DropTargetX11();
/**
- * Handler of ClientMessage X11 event
- */
+ * Handler of ClientMessage X11 event
+ */
bool GHOST_HandleClientMessage(XEvent *event);
/**
@@ -73,42 +73,42 @@ private:
/* Internal helper functions */
/**
- * Initiailize XDND and all related X atoms
- */
+ * Initiailize XDND and all related X atoms
+ */
void Initialize(void);
/**
- * Uninitiailize XDND and all related X atoms
- */
+ * Uninitiailize XDND and all related X atoms
+ */
void Uninitialize(void);
/**
- * Get data to be passed to event from text/uri-list mime type
- * @param dropBuffer - buffer returned from source application
- * @param dropBufferSize - size of dropped buffer
- * @return pointer to newly created GHOST data
- */
- void * getURIListGhostData(unsigned char *dropBuffer, int dropBufferSize);
+ * Get data to be passed to event from text/uri-list mime type
+ * @param dropBuffer - buffer returned from source application
+ * @param dropBufferSize - size of dropped buffer
+ * @return pointer to newly created GHOST data
+ */
+ void *getURIListGhostData(unsigned char *dropBuffer, int dropBufferSize);
/**
- * Decode URL (i.e. converts "file:///a%20b/test" to "file:///a b/test")
- * @param decodedOut - buffer for decoded URL
- * @param bufferSize - size of output buffer
- * @param encodedIn - input encoded buffer to be decoded
- */
+ * Decode URL (i.e. converts "file:///a%20b/test" to "file:///a b/test")
+ * @param decodedOut - buffer for decoded URL
+ * @param bufferSize - size of output buffer
+ * @param encodedIn - input encoded buffer to be decoded
+ */
void UrlDecode(char *decodedOut, int bufferSize, const char *encodedIn);
/**
- * Fully decode file URL (i.e. converts "file:///a%20b/test" to "/a b/test")
- * @param fileUrl - file path URL to be fully decoded
- * @return decoded file path (resutl shold be free-d)
- */
+ * Fully decode file URL (i.e. converts "file:///a%20b/test" to "/a b/test")
+ * @param fileUrl - file path URL to be fully decoded
+ * @return decoded file path (resutl shold be free-d)
+ */
char *FileUrlDecode(char *fileUrl);
/* The associated GHOST_WindowWin32. */
- GHOST_WindowX11 * m_window;
+ GHOST_WindowX11 *m_window;
/* The System. */
- GHOST_SystemX11 * m_system;
+ GHOST_SystemX11 *m_system;
/* Data type of the dragged object */
GHOST_TDragnDropTypes m_draggedObjectType;
@@ -120,10 +120,10 @@ private:
static DndClass m_dndClass;
/* list of supported types to eb draggeg into */
- static Atom * m_dndTypes;
+ static Atom *m_dndTypes;
/* list of supported dran'n'drop actions */
- static Atom * m_dndActions;
+ static Atom *m_dndActions;
/* List of supported MIME types to be dragged into */
static const char *m_dndMimeTypes[];
diff --git a/intern/ghost/intern/GHOST_NDOFManagerX11.cpp b/intern/ghost/intern/GHOST_NDOFManagerX11.cpp
index 565324ae211..bd285bc7a27 100644
--- a/intern/ghost/intern/GHOST_NDOFManagerX11.cpp
+++ b/intern/ghost/intern/GHOST_NDOFManagerX11.cpp
@@ -30,9 +30,9 @@
GHOST_NDOFManagerX11::GHOST_NDOFManagerX11(GHOST_System& sys)
- :
- GHOST_NDOFManager(sys),
- m_available(false)
+ :
+ GHOST_NDOFManager(sys),
+ m_available(false)
{
setDeadZone(0.1f); /* how to calibrate on Linux? throw away slight motion! */
@@ -44,7 +44,7 @@ GHOST_NDOFManagerX11::GHOST_NDOFManagerX11(GHOST_System& sys)
#define MAX_LINE_LENGTH 100
/* look for USB devices with Logitech's vendor ID */
- FILE* command_output = popen("lsusb -d 046d:","r");
+ FILE *command_output = popen("lsusb -d 046d:", "r");
if (command_output) {
char line[MAX_LINE_LENGTH] = {0};
while (fgets(line, MAX_LINE_LENGTH, command_output)) {
diff --git a/intern/ghost/intern/GHOST_SystemPathsX11.cpp b/intern/ghost/intern/GHOST_SystemPathsX11.cpp
index 6dad3661a57..c148a16d5fc 100644
--- a/intern/ghost/intern/GHOST_SystemPathsX11.cpp
+++ b/intern/ghost/intern/GHOST_SystemPathsX11.cpp
@@ -47,9 +47,9 @@
#endif
#ifdef PREFIX
-static const char *static_path= PREFIX "/share";
+static const char *static_path = PREFIX "/share";
#else
-static const char *static_path= NULL;
+static const char *static_path = NULL;
#endif
GHOST_SystemPathsX11::GHOST_SystemPathsX11()
@@ -60,18 +60,18 @@ GHOST_SystemPathsX11::~GHOST_SystemPathsX11()
{
}
-const GHOST_TUns8* GHOST_SystemPathsX11::getSystemDir() const
+const GHOST_TUns8 *GHOST_SystemPathsX11::getSystemDir() const
{
/* no prefix assumes a portable build which only uses bundled scripts */
return (const GHOST_TUns8 *)static_path;
}
-const GHOST_TUns8* GHOST_SystemPathsX11::getUserDir() const
+const GHOST_TUns8 *GHOST_SystemPathsX11::getUserDir() const
{
#ifndef WITH_XDG_USER_DIRS
return (const GHOST_TUns8 *)getenv("HOME");
#else /* WITH_XDG_USER_DIRS */
- const char *home= getenv("XDG_CONFIG_HOME");
+ const char *home = getenv("XDG_CONFIG_HOME");
if (home) {
return (const GHOST_TUns8 *)home;
@@ -79,10 +79,10 @@ const GHOST_TUns8* GHOST_SystemPathsX11::getUserDir() const
else {
static char user_path[PATH_MAX];
- home= getenv("HOME");
+ home = getenv("HOME");
if (home == NULL) {
- home= getpwuid(getuid())->pw_dir;
+ home = getpwuid(getuid())->pw_dir;
}
snprintf(user_path, sizeof(user_path), "%s/.config", home);
@@ -91,12 +91,12 @@ const GHOST_TUns8* GHOST_SystemPathsX11::getUserDir() const
#endif /* WITH_XDG_USER_DIRS */
}
-const GHOST_TUns8* GHOST_SystemPathsX11::getBinaryDir() const
+const GHOST_TUns8 *GHOST_SystemPathsX11::getBinaryDir() const
{
return NULL;
}
-void GHOST_SystemPathsX11::addToSystemRecentFiles(const char* filename) const
+void GHOST_SystemPathsX11::addToSystemRecentFiles(const char *filename) const
{
/* XXXXX TODO: Implementation for X11 if possible */
diff --git a/intern/ghost/intern/GHOST_SystemPathsX11.h b/intern/ghost/intern/GHOST_SystemPathsX11.h
index d05cab5de75..8ded9a35276 100644
--- a/intern/ghost/intern/GHOST_SystemPathsX11.h
+++ b/intern/ghost/intern/GHOST_SystemPathsX11.h
@@ -55,25 +55,25 @@ public:
* "unpack and run" path, then look for properly installed path, not including versioning.
* @return Unsigned char string pointing to system dir (eg /usr/share/blender/).
*/
- const GHOST_TUns8* getSystemDir() const;
+ const GHOST_TUns8 *getSystemDir() const;
/**
* Determine the base dir in which user configuration is stored, not including versioning.
* If needed, it will create the base directory.
* @return Unsigned char string pointing to user dir (eg ~/.blender/).
*/
- const GHOST_TUns8* getUserDir() const;
+ const GHOST_TUns8 *getUserDir() const;
/**
- * Determine the directory of the current binary
- * @return Unsigned char string pointing to the binary dir
- */
- const GHOST_TUns8* getBinaryDir() const;
+ * Determine the directory of the current binary
+ * @return Unsigned char string pointing to the binary dir
+ */
+ const GHOST_TUns8 *getBinaryDir() const;
/**
* Add the file to the operating system most recently used files
*/
- void addToSystemRecentFiles(const char* filename) const;
+ void addToSystemRecentFiles(const char *filename) const;
};
#endif
diff --git a/intern/ghost/intern/GHOST_SystemX11.cpp b/intern/ghost/intern/GHOST_SystemX11.cpp
index cabec06301a..c58ed93425d 100644
--- a/intern/ghost/intern/GHOST_SystemX11.cpp
+++ b/intern/ghost/intern/GHOST_SystemX11.cpp
@@ -75,14 +75,14 @@ static GHOST_TKey
convertXKey(KeySym key);
//these are for copy and select copy
-static char *txt_cut_buffer= NULL;
-static char *txt_select_buffer= NULL;
+static char *txt_cut_buffer = NULL;
+static char *txt_select_buffer = NULL;
using namespace std;
GHOST_SystemX11::
GHOST_SystemX11(
-) :
+ ) :
GHOST_System(),
m_start_time(0)
{
@@ -99,40 +99,40 @@ GHOST_SystemX11(
#endif
m_delete_window_atom
- = XInternAtom(m_display, "WM_DELETE_WINDOW", True);
-
- m_wm_protocols= XInternAtom(m_display, "WM_PROTOCOLS", False);
- m_wm_take_focus= XInternAtom(m_display, "WM_TAKE_FOCUS", False);
- m_wm_state= XInternAtom(m_display, "WM_STATE", False);
- m_wm_change_state= XInternAtom(m_display, "WM_CHANGE_STATE", False);
- m_net_state= XInternAtom(m_display, "_NET_WM_STATE", False);
- m_net_max_horz= XInternAtom(m_display,
- "_NET_WM_STATE_MAXIMIZED_HORZ", False);
- m_net_max_vert= XInternAtom(m_display,
- "_NET_WM_STATE_MAXIMIZED_VERT", False);
- m_net_fullscreen= XInternAtom(m_display,
- "_NET_WM_STATE_FULLSCREEN", False);
- m_motif= XInternAtom(m_display, "_MOTIF_WM_HINTS", False);
- m_targets= XInternAtom(m_display, "TARGETS", False);
- m_string= XInternAtom(m_display, "STRING", False);
- m_compound_text= XInternAtom(m_display, "COMPOUND_TEXT", False);
- m_text= XInternAtom(m_display, "TEXT", False);
- m_clipboard= XInternAtom(m_display, "CLIPBOARD", False);
- m_primary= XInternAtom(m_display, "PRIMARY", False);
- m_xclip_out= XInternAtom(m_display, "XCLIP_OUT", False);
- m_incr= XInternAtom(m_display, "INCR", False);
- m_utf8_string= XInternAtom(m_display, "UTF8_STRING", False);
+ = XInternAtom(m_display, "WM_DELETE_WINDOW", True);
+
+ m_wm_protocols = XInternAtom(m_display, "WM_PROTOCOLS", False);
+ m_wm_take_focus = XInternAtom(m_display, "WM_TAKE_FOCUS", False);
+ m_wm_state = XInternAtom(m_display, "WM_STATE", False);
+ m_wm_change_state = XInternAtom(m_display, "WM_CHANGE_STATE", False);
+ m_net_state = XInternAtom(m_display, "_NET_WM_STATE", False);
+ m_net_max_horz = XInternAtom(m_display,
+ "_NET_WM_STATE_MAXIMIZED_HORZ", False);
+ m_net_max_vert = XInternAtom(m_display,
+ "_NET_WM_STATE_MAXIMIZED_VERT", False);
+ m_net_fullscreen = XInternAtom(m_display,
+ "_NET_WM_STATE_FULLSCREEN", False);
+ m_motif = XInternAtom(m_display, "_MOTIF_WM_HINTS", False);
+ m_targets = XInternAtom(m_display, "TARGETS", False);
+ m_string = XInternAtom(m_display, "STRING", False);
+ m_compound_text = XInternAtom(m_display, "COMPOUND_TEXT", False);
+ m_text = XInternAtom(m_display, "TEXT", False);
+ m_clipboard = XInternAtom(m_display, "CLIPBOARD", False);
+ m_primary = XInternAtom(m_display, "PRIMARY", False);
+ m_xclip_out = XInternAtom(m_display, "XCLIP_OUT", False);
+ m_incr = XInternAtom(m_display, "INCR", False);
+ m_utf8_string = XInternAtom(m_display, "UTF8_STRING", False);
m_last_warp = 0;
// compute the initial time
timeval tv;
- if (gettimeofday(&tv,NULL) == -1) {
- GHOST_ASSERT(false,"Could not instantiate timer!");
+ if (gettimeofday(&tv, NULL) == -1) {
+ GHOST_ASSERT(false, "Could not instantiate timer!");
}
// Taking care not to overflow the tv.tv_sec*1000
- m_start_time = GHOST_TUns64(tv.tv_sec)*1000 + tv.tv_usec/1000;
+ m_start_time = GHOST_TUns64(tv.tv_sec) * 1000 + tv.tv_usec / 1000;
/* use detectable autorepeate, mac and windows also do this */
@@ -158,10 +158,10 @@ GHOST_SystemX11::
}
- GHOST_TSuccess
+GHOST_TSuccess
GHOST_SystemX11::
-init(
-){
+init()
+{
GHOST_TSuccess success = GHOST_System::init();
if (success) {
@@ -178,82 +178,82 @@ init(
return GHOST_kFailure;
}
- GHOST_TUns64
+GHOST_TUns64
GHOST_SystemX11::
-getMilliSeconds(
-) const {
+getMilliSeconds() const
+{
timeval tv;
- if (gettimeofday(&tv,NULL) == -1) {
- GHOST_ASSERT(false,"Could not compute time!");
+ if (gettimeofday(&tv, NULL) == -1) {
+ GHOST_ASSERT(false, "Could not compute time!");
}
// Taking care not to overflow the tv.tv_sec*1000
- return GHOST_TUns64(tv.tv_sec)*1000 + tv.tv_usec/1000 - m_start_time;
+ return GHOST_TUns64(tv.tv_sec) * 1000 + tv.tv_usec / 1000 - m_start_time;
}
- GHOST_TUns8
+GHOST_TUns8
GHOST_SystemX11::
-getNumDisplays(
-) const {
+getNumDisplays() const
+{
return GHOST_TUns8(1);
}
- /**
- * Returns the dimensions of the main display on this system.
- * @return The dimension of the main display.
- */
- void
+/**
+ * Returns the dimensions of the main display on this system.
+ * @return The dimension of the main display.
+ */
+void
GHOST_SystemX11::
getMainDisplayDimensions(
- GHOST_TUns32& width,
- GHOST_TUns32& height
-) const {
+ GHOST_TUns32& width,
+ GHOST_TUns32& height) const
+{
if (m_display) {
width = DisplayWidth(m_display, DefaultScreen(m_display));
height = DisplayHeight(m_display, DefaultScreen(m_display));
}
}
- /**
- * Create a new window.
- * The new window is added to the list of windows managed.
- * Never explicitly delete the window, use disposeWindow() instead.
- * @param title The name of the window (displayed in the title bar of the window if the OS supports it).
- * @param left The coordinate of the left edge of the window.
- * @param top The coordinate of the top edge of the window.
- * @param width The width the window.
- * @param height The height the window.
- * @param state The state of the window when opened.
- * @param type The type of drawing context installed in this window.
- * @param stereoVisual Stereo visual for quad buffered stereo.
- * @param numOfAASamples Number of samples used for AA (zero if no AA)
- * @param parentWindow Parent (embedder) window
- * @return The new window (or 0 if creation failed).
- */
- GHOST_IWindow*
+/**
+ * Create a new window.
+ * The new window is added to the list of windows managed.
+ * Never explicitly delete the window, use disposeWindow() instead.
+ * @param title The name of the window (displayed in the title bar of the window if the OS supports it).
+ * @param left The coordinate of the left edge of the window.
+ * @param top The coordinate of the top edge of the window.
+ * @param width The width the window.
+ * @param height The height the window.
+ * @param state The state of the window when opened.
+ * @param type The type of drawing context installed in this window.
+ * @param stereoVisual Stereo visual for quad buffered stereo.
+ * @param numOfAASamples Number of samples used for AA (zero if no AA)
+ * @param parentWindow Parent (embedder) window
+ * @return The new window (or 0 if creation failed).
+ */
+GHOST_IWindow *
GHOST_SystemX11::
createWindow(
- const STR_String& title,
- GHOST_TInt32 left,
- GHOST_TInt32 top,
- GHOST_TUns32 width,
- GHOST_TUns32 height,
- GHOST_TWindowState state,
- GHOST_TDrawingContextType type,
- bool stereoVisual,
- const GHOST_TUns16 numOfAASamples,
- const GHOST_TEmbedderWindowID parentWindow
-){
- GHOST_WindowX11 * window = 0;
+ const STR_String& title,
+ GHOST_TInt32 left,
+ GHOST_TInt32 top,
+ GHOST_TUns32 width,
+ GHOST_TUns32 height,
+ GHOST_TWindowState state,
+ GHOST_TDrawingContextType type,
+ bool stereoVisual,
+ const GHOST_TUns16 numOfAASamples,
+ const GHOST_TEmbedderWindowID parentWindow)
+{
+ GHOST_WindowX11 *window = 0;
if (!m_display) return 0;
- window = new GHOST_WindowX11 (
- this,m_display,title, left, top, width, height, state, parentWindow, type, stereoVisual
- );
+ window = new GHOST_WindowX11(
+ this, m_display, title, left, top, width, height, state, parentWindow, type, stereoVisual
+ );
if (window) {
// Both are now handle in GHOST_WindowX11.cpp
@@ -263,7 +263,7 @@ createWindow(
// Store the pointer to the window
m_windowManager->addWindow(window);
m_windowManager->setActiveWindow(window);
- pushEvent( new GHOST_Event(getMilliSeconds(), GHOST_kEventWindowSize, window) );
+ pushEvent(new GHOST_Event(getMilliSeconds(), GHOST_kEventWindowSize, window) );
}
else {
delete window;
@@ -273,11 +273,11 @@ createWindow(
return window;
}
- GHOST_WindowX11 *
+GHOST_WindowX11 *
GHOST_SystemX11::
findGhostWindow(
- Window xwind
-) const {
+ Window xwind) const
+{
if (xwind == 0) return NULL;
@@ -292,7 +292,7 @@ findGhostWindow(
vector<GHOST_IWindow *>::const_iterator win_end = win_vec.end();
for (; win_it != win_end; ++win_it) {
- GHOST_WindowX11 * window = static_cast<GHOST_WindowX11 *>(*win_it);
+ GHOST_WindowX11 *window = static_cast<GHOST_WindowX11 *>(*win_it);
if (window->getXWindow() == xwind) {
return window;
}
@@ -315,8 +315,8 @@ static void SleepTillEvent(Display *display, GHOST_TInt64 maxSleep)
else {
timeval tv;
- tv.tv_sec = maxSleep/1000;
- tv.tv_usec = (maxSleep - tv.tv_sec*1000)*1000;
+ tv.tv_sec = maxSleep / 1000;
+ tv.tv_usec = (maxSleep - tv.tv_sec * 1000) * 1000;
select(fd + 1, &fds, NULL, NULL, &tv);
}
@@ -325,78 +325,78 @@ static void SleepTillEvent(Display *display, GHOST_TInt64 maxSleep)
/* This function borrowed from Qt's X11 support
* qclipboard_x11.cpp
* */
-struct init_timestamp_data
-{
- Time timestamp;
+struct init_timestamp_data {
+ Time timestamp;
};
-static Bool init_timestamp_scanner(Display*, XEvent *event, XPointer arg)
+static Bool init_timestamp_scanner(Display *, XEvent *event, XPointer arg)
{
init_timestamp_data *data =
- reinterpret_cast<init_timestamp_data*>(arg);
- switch(event->type)
- {
- case ButtonPress:
- case ButtonRelease:
- data->timestamp = event->xbutton.time;
- break;
- case MotionNotify:
- data->timestamp = event->xmotion.time;
- break;
- case KeyPress:
- case KeyRelease:
- data->timestamp = event->xkey.time;
- break;
- case PropertyNotify:
- data->timestamp = event->xproperty.time;
- break;
- case EnterNotify:
- case LeaveNotify:
- data->timestamp = event->xcrossing.time;
- break;
- case SelectionClear:
- data->timestamp = event->xselectionclear.time;
- break;
- default:
- break;
- }
-
- return false;
+ reinterpret_cast<init_timestamp_data *>(arg);
+ switch (event->type)
+ {
+ case ButtonPress:
+ case ButtonRelease:
+ data->timestamp = event->xbutton.time;
+ break;
+ case MotionNotify:
+ data->timestamp = event->xmotion.time;
+ break;
+ case KeyPress:
+ case KeyRelease:
+ data->timestamp = event->xkey.time;
+ break;
+ case PropertyNotify:
+ data->timestamp = event->xproperty.time;
+ break;
+ case EnterNotify:
+ case LeaveNotify:
+ data->timestamp = event->xcrossing.time;
+ break;
+ case SelectionClear:
+ data->timestamp = event->xselectionclear.time;
+ break;
+ default:
+ break;
+ }
+
+ return false;
}
Time
GHOST_SystemX11::
lastEventTime(Time default_time) {
- init_timestamp_data data;
- data.timestamp = default_time;
- XEvent ev;
- XCheckIfEvent(m_display, &ev, &init_timestamp_scanner, (XPointer)&data);
+ init_timestamp_data data;
+ data.timestamp = default_time;
+ XEvent ev;
+ XCheckIfEvent(m_display, &ev, &init_timestamp_scanner, (XPointer) & data);
- return data.timestamp;
+ return data.timestamp;
}
- bool
+bool
GHOST_SystemX11::
processEvents(
- bool waitForEvent
-){
+ bool waitForEvent)
+{
// Get all the current events -- translate them into
// ghost events and call base class pushEvent() method.
bool anyProcessed = false;
do {
- GHOST_TimerManager* timerMgr = getTimerManager();
+ GHOST_TimerManager *timerMgr = getTimerManager();
if (waitForEvent && m_dirty_windows.empty() && !XPending(m_display)) {
GHOST_TUns64 next = timerMgr->nextFireTime();
- if (next==GHOST_kFireTimeNever) {
+ if (next == GHOST_kFireTimeNever) {
SleepTillEvent(m_display, -1);
- } else {
+ }
+ else {
GHOST_TInt64 maxSleep = next - getMilliSeconds();
- if(maxSleep >= 0)
+ if (maxSleep >= 0)
SleepTillEvent(m_display, next - getMilliSeconds());
}
}
@@ -417,7 +417,7 @@ processEvents(
}
#ifdef WITH_INPUT_NDOF
- if (dynamic_cast<GHOST_NDOFManagerX11*>(m_ndofManager)->processEvents()) {
+ if (dynamic_cast<GHOST_NDOFManagerX11 *>(m_ndofManager)->processEvents()) {
anyProcessed = true;
}
#endif
@@ -430,20 +430,20 @@ processEvents(
#ifdef WITH_X11_XINPUT
/* set currently using tablet mode (stylus or eraser) depending on device ID */
-static void setTabletMode(GHOST_WindowX11 * window, XID deviceid)
+static void setTabletMode(GHOST_WindowX11 *window, XID deviceid)
{
- if(deviceid == window->GetXTablet().StylusID)
- window->GetXTablet().CommonData.Active= GHOST_kTabletModeStylus;
- else if(deviceid == window->GetXTablet().EraserID)
- window->GetXTablet().CommonData.Active= GHOST_kTabletModeEraser;
+ if (deviceid == window->GetXTablet().StylusID)
+ window->GetXTablet().CommonData.Active = GHOST_kTabletModeStylus;
+ else if (deviceid == window->GetXTablet().EraserID)
+ window->GetXTablet().CommonData.Active = GHOST_kTabletModeEraser;
}
#endif /* WITH_X11_XINPUT */
- void
+void
GHOST_SystemX11::processEvent(XEvent *xe)
{
- GHOST_WindowX11 * window = findGhostWindow(xe->xany.window);
- GHOST_Event * g_event = NULL;
+ GHOST_WindowX11 *window = findGhostWindow(xe->xany.window);
+ GHOST_Event *g_event = NULL;
if (!window) {
return;
@@ -459,11 +459,11 @@ GHOST_SystemX11::processEvent(XEvent *xe)
// per read of the event queue.
g_event = new
- GHOST_Event(
- getMilliSeconds(),
- GHOST_kEventWindowUpdate,
- window
- );
+ GHOST_Event(
+ getMilliSeconds(),
+ GHOST_kEventWindowUpdate,
+ window
+ );
}
break;
}
@@ -479,13 +479,13 @@ GHOST_SystemX11::processEvent(XEvent *xe)
#endif
if (is_tablet == false && window->getCursorGrabModeIsWarp()) {
- GHOST_TInt32 x_new= xme.x_root;
- GHOST_TInt32 y_new= xme.y_root;
+ GHOST_TInt32 x_new = xme.x_root;
+ GHOST_TInt32 y_new = xme.y_root;
GHOST_TInt32 x_accum, y_accum;
GHOST_Rect bounds;
/* fallback to window bounds */
- if(window->getCursorGrabBounds(bounds)==GHOST_kFailure)
+ if (window->getCursorGrabBounds(bounds) == GHOST_kFailure)
window->getClientBounds(bounds);
/* could also clamp to screen bounds
@@ -493,37 +493,38 @@ GHOST_SystemX11::processEvent(XEvent *xe)
bounds.wrapPoint(x_new, y_new, 8); /* offset of one incase blender is at screen bounds */
window->getCursorGrabAccum(x_accum, y_accum);
- if(x_new != xme.x_root || y_new != xme.y_root) {
+ if (x_new != xme.x_root || y_new != xme.y_root) {
if (xme.time > m_last_warp) {
/* when wrapping we don't need to add an event because the
* setCursorPosition call will cause a new event after */
setCursorPosition(x_new, y_new); /* wrap */
window->setCursorGrabAccum(x_accum + (xme.x_root - x_new), y_accum + (xme.y_root - y_new));
m_last_warp = lastEventTime(xme.time);
- } else {
+ }
+ else {
setCursorPosition(x_new, y_new); /* wrap but don't accumulate */
}
}
else {
g_event = new
- GHOST_EventCursor(
- getMilliSeconds(),
- GHOST_kEventCursorMove,
- window,
- xme.x_root + x_accum,
- xme.y_root + y_accum
- );
+ GHOST_EventCursor(
+ getMilliSeconds(),
+ GHOST_kEventCursorMove,
+ window,
+ xme.x_root + x_accum,
+ xme.y_root + y_accum
+ );
}
}
else {
g_event = new
- GHOST_EventCursor(
- getMilliSeconds(),
- GHOST_kEventCursorMove,
- window,
- xme.x_root,
- xme.y_root
- );
+ GHOST_EventCursor(
+ getMilliSeconds(),
+ GHOST_kEventCursorMove,
+ window,
+ xme.x_root,
+ xme.y_root
+ );
}
break;
}
@@ -532,13 +533,13 @@ GHOST_SystemX11::processEvent(XEvent *xe)
case KeyRelease:
{
XKeyEvent *xke = &(xe->xkey);
- KeySym key_sym = XLookupKeysym(xke,0);
+ KeySym key_sym = XLookupKeysym(xke, 0);
char ascii;
char utf8_buf[6]; /* 6 is enough for a utf8 char */
GHOST_TKey gkey = convertXKey(key_sym);
GHOST_TEventType type = (xke->type == KeyPress) ?
- GHOST_kEventKeyDown : GHOST_kEventKeyUp;
+ GHOST_kEventKeyDown : GHOST_kEventKeyUp;
if (!XLookupString(xke, &ascii, 1, NULL, NULL)) {
ascii = '\0';
@@ -551,8 +552,8 @@ GHOST_SystemX11::processEvent(XEvent *xe)
int len;
/* use utf8 because its not locale depentant, from xorg docs */
- if (!(len= Xutf8LookupString(window->getX11_XIC(), xke, utf8_buf, sizeof(utf8_buf), &key_sym, &status))) {
- utf8_buf[0]= '\0';
+ if (!(len = Xutf8LookupString(window->getX11_XIC(), xke, utf8_buf, sizeof(utf8_buf), &key_sym, &status))) {
+ utf8_buf[0] = '\0';
}
if ((status == XLookupChars || status == XLookupBoth)) {
@@ -560,7 +561,7 @@ GHOST_SystemX11::processEvent(XEvent *xe)
/* do nothing for now, this is valid utf8 */
}
else {
- utf8_buf[0]= '\0';
+ utf8_buf[0] = '\0';
}
}
else if (status == XLookupKeySym) {
@@ -569,33 +570,33 @@ GHOST_SystemX11::processEvent(XEvent *xe)
}
else {
printf("Bad keycode lookup. Keysym 0x%x Status: %s\n",
- (unsigned int) key_sym,
- (status == XBufferOverflow ? "BufferOverflow" :
- status == XLookupNone ? "XLookupNone" :
- status == XLookupKeySym ? "XLookupKeySym" :
- "Unknown status"));
+ (unsigned int) key_sym,
+ (status == XBufferOverflow ? "BufferOverflow" :
+ status == XLookupNone ? "XLookupNone" :
+ status == XLookupKeySym ? "XLookupKeySym" :
+ "Unknown status"));
printf("'%.*s' %p %p\n", len, utf8_buf, window->getX11_XIC(), m_xim);
}
}
else {
- utf8_buf[0]= '\0';
+ utf8_buf[0] = '\0';
}
#else
- utf8_buf[0]= '\0';
+ utf8_buf[0] = '\0';
#endif
g_event = new
- GHOST_EventKey(
- getMilliSeconds(),
- type,
- window,
- gkey,
- ascii,
+ GHOST_EventKey(
+ getMilliSeconds(),
+ type,
+ window,
+ gkey,
+ ascii,
utf8_buf
- );
+ );
- break;
+ break;
}
case ButtonPress:
@@ -604,59 +605,59 @@ GHOST_SystemX11::processEvent(XEvent *xe)
XButtonEvent & xbe = xe->xbutton;
GHOST_TButtonMask gbmask = GHOST_kButtonMaskLeft;
GHOST_TEventType type = (xbe.type == ButtonPress) ?
- GHOST_kEventButtonDown : GHOST_kEventButtonUp;
+ GHOST_kEventButtonDown : GHOST_kEventButtonUp;
/* process wheel mouse events and break, only pass on press events */
- if(xbe.button == Button4) {
- if(xbe.type == ButtonPress)
+ if (xbe.button == Button4) {
+ if (xbe.type == ButtonPress)
g_event = new GHOST_EventWheel(getMilliSeconds(), window, 1);
break;
}
- else if(xbe.button == Button5) {
- if(xbe.type == ButtonPress)
+ else if (xbe.button == Button5) {
+ if (xbe.type == ButtonPress)
g_event = new GHOST_EventWheel(getMilliSeconds(), window, -1);
break;
}
/* process rest of normal mouse buttons */
- if(xbe.button == Button1)
+ if (xbe.button == Button1)
gbmask = GHOST_kButtonMaskLeft;
- else if(xbe.button == Button2)
+ else if (xbe.button == Button2)
gbmask = GHOST_kButtonMaskMiddle;
- else if(xbe.button == Button3)
+ else if (xbe.button == Button3)
gbmask = GHOST_kButtonMaskRight;
/* It seems events 6 and 7 are for horizontal scrolling.
- * you can re-order button mapping like this... (swaps 6,7 with 8,9)
- * xmodmap -e "pointer = 1 2 3 4 5 8 9 6 7"
- */
- else if(xbe.button == 8)
+ * you can re-order button mapping like this... (swaps 6,7 with 8,9)
+ * xmodmap -e "pointer = 1 2 3 4 5 8 9 6 7"
+ */
+ else if (xbe.button == 8)
gbmask = GHOST_kButtonMaskButton4;
- else if(xbe.button == 9)
+ else if (xbe.button == 9)
gbmask = GHOST_kButtonMaskButton5;
else
break;
g_event = new
- GHOST_EventButton(
- getMilliSeconds(),
- type,
- window,
- gbmask
- );
+ GHOST_EventButton(
+ getMilliSeconds(),
+ type,
+ window,
+ gbmask
+ );
break;
}
- // change of size, border, layer etc.
+ // change of size, border, layer etc.
case ConfigureNotify:
{
/* XConfigureEvent & xce = xe->xconfigure; */
g_event = new
- GHOST_Event(
- getMilliSeconds(),
- GHOST_kEventWindowSize,
- window
- );
+ GHOST_Event(
+ getMilliSeconds(),
+ GHOST_kEventWindowSize,
+ window
+ );
break;
}
@@ -672,14 +673,14 @@ GHOST_SystemX11::processEvent(XEvent *xe)
// out.
GHOST_TEventType gtype = (xfe.type == FocusIn) ?
- GHOST_kEventWindowActivate : GHOST_kEventWindowDeactivate;
+ GHOST_kEventWindowActivate : GHOST_kEventWindowDeactivate;
g_event = new
- GHOST_Event(
- getMilliSeconds(),
- gtype,
- window
- );
+ GHOST_Event(
+ getMilliSeconds(),
+ gtype,
+ window
+ );
break;
}
@@ -689,11 +690,11 @@ GHOST_SystemX11::processEvent(XEvent *xe)
if (((Atom)xcme.data.l[0]) == m_delete_window_atom) {
g_event = new
- GHOST_Event(
- getMilliSeconds(),
- GHOST_kEventWindowClose,
- window
- );
+ GHOST_Event(
+ getMilliSeconds(),
+ GHOST_kEventWindowClose,
+ window
+ );
}
else if (((Atom)xcme.data.l[0]) == m_wm_take_focus) {
XWindowAttributes attr;
@@ -718,7 +719,8 @@ GHOST_SystemX11::processEvent(XEvent *xe)
}
}
}
- } else {
+ }
+ else {
#ifdef WITH_XDND
/* try to handle drag event (if there's no such events, GHOST_HandleClientMessage will return zero) */
if (window->getDropTarget()->GHOST_HandleClientMessage(xe) == false) {
@@ -735,8 +737,8 @@ GHOST_SystemX11::processEvent(XEvent *xe)
case DestroyNotify:
::exit(-1);
// We're not interested in the following things.(yet...)
- case NoExpose :
- case GraphicsExpose :
+ case NoExpose:
+ case GraphicsExpose:
break;
case EnterNotify:
@@ -748,17 +750,17 @@ GHOST_SystemX11::processEvent(XEvent *xe)
we only do moves when the crossing mode is 'normal'
(really crossing between windows) since some windowmanagers
also send grab/ungrab crossings for mousewheel events.
- */
+ */
XCrossingEvent &xce = xe->xcrossing;
- if( xce.mode == NotifyNormal ) {
+ if (xce.mode == NotifyNormal) {
g_event = new
- GHOST_EventCursor(
- getMilliSeconds(),
- GHOST_kEventCursorMove,
- window,
- xce.x_root,
- xce.y_root
- );
+ GHOST_EventCursor(
+ getMilliSeconds(),
+ GHOST_kEventCursorMove,
+ window,
+ xce.x_root,
+ xce.y_root
+ );
}
// printf("X: %s window %d\n", xce.type == EnterNotify ? "entering" : "leaving", (int) xce.window);
@@ -785,7 +787,7 @@ GHOST_SystemX11::processEvent(XEvent *xe)
* Now we are sure that the window is
* mapped, so only need change the state.
*/
- window->setState (window->m_post_state);
+ window->setState(window->m_post_state);
window->m_post_init = False;
}
break;
@@ -820,15 +822,17 @@ GHOST_SystemX11::processEvent(XEvent *xe)
nxe.xselection.time = xse->time;
/*Check to see if the requestor is asking for String*/
- if(xse->target == utf8_string || xse->target == string || xse->target == compound_text || xse->target == c_string) {
+ if (xse->target == utf8_string || xse->target == string || xse->target == compound_text || xse->target == c_string) {
if (xse->selection == XInternAtom(m_display, "PRIMARY", False)) {
XChangeProperty(m_display, xse->requestor, xse->property, xse->target, 8, PropModeReplace,
- (unsigned char*)txt_select_buffer, strlen(txt_select_buffer));
- } else if (xse->selection == XInternAtom(m_display, "CLIPBOARD", False)) {
+ (unsigned char *)txt_select_buffer, strlen(txt_select_buffer));
+ }
+ else if (xse->selection == XInternAtom(m_display, "CLIPBOARD", False)) {
XChangeProperty(m_display, xse->requestor, xse->property, xse->target, 8, PropModeReplace,
- (unsigned char*)txt_cut_buffer, strlen(txt_cut_buffer));
+ (unsigned char *)txt_cut_buffer, strlen(txt_cut_buffer));
}
- } else if (xse->target == target) {
+ }
+ else if (xse->target == target) {
Atom alist[5];
alist[0] = target;
alist[1] = utf8_string;
@@ -836,9 +840,10 @@ GHOST_SystemX11::processEvent(XEvent *xe)
alist[3] = compound_text;
alist[4] = c_string;
XChangeProperty(m_display, xse->requestor, xse->property, xse->target, 32, PropModeReplace,
- (unsigned char*)alist, 5);
+ (unsigned char *)alist, 5);
XFlush(m_display);
- } else {
+ }
+ else {
//Change property to None because we do not support anything but STRING
nxe.xselection.property = None;
}
@@ -851,33 +856,33 @@ GHOST_SystemX11::processEvent(XEvent *xe)
default: {
#ifdef WITH_X11_XINPUT
- if(xe->type == window->GetXTablet().MotionEvent)
+ if (xe->type == window->GetXTablet().MotionEvent)
{
- XDeviceMotionEvent* data = (XDeviceMotionEvent*)xe;
+ XDeviceMotionEvent *data = (XDeviceMotionEvent *)xe;
/* stroke might begin without leading ProxyIn event,
* this happens when window is opened when stylus is already hovering
* around tablet surface */
setTabletMode(window, data->deviceid);
- window->GetXTablet().CommonData.Pressure=
- data->axis_data[2]/((float)window->GetXTablet().PressureLevels);
+ window->GetXTablet().CommonData.Pressure =
+ data->axis_data[2] / ((float)window->GetXTablet().PressureLevels);
- /* the (short) cast and the &0xffff is bizarre and unexplained anywhere,
- * but I got garbage data without it. Found it in the xidump.c source --matt */
- window->GetXTablet().CommonData.Xtilt=
- (short)(data->axis_data[3]&0xffff)/((float)window->GetXTablet().XtiltLevels);
- window->GetXTablet().CommonData.Ytilt=
- (short)(data->axis_data[4]&0xffff)/((float)window->GetXTablet().YtiltLevels);
+ /* the (short) cast and the &0xffff is bizarre and unexplained anywhere,
+ * but I got garbage data without it. Found it in the xidump.c source --matt */
+ window->GetXTablet().CommonData.Xtilt =
+ (short)(data->axis_data[3] & 0xffff) / ((float)window->GetXTablet().XtiltLevels);
+ window->GetXTablet().CommonData.Ytilt =
+ (short)(data->axis_data[4] & 0xffff) / ((float)window->GetXTablet().YtiltLevels);
}
- else if(xe->type == window->GetXTablet().ProxInEvent)
+ else if (xe->type == window->GetXTablet().ProxInEvent)
{
- XProximityNotifyEvent* data = (XProximityNotifyEvent*)xe;
+ XProximityNotifyEvent *data = (XProximityNotifyEvent *)xe;
setTabletMode(window, data->deviceid);
}
- else if(xe->type == window->GetXTablet().ProxOutEvent)
- window->GetXTablet().CommonData.Active= GHOST_kTabletModeNone;
+ else if (xe->type == window->GetXTablet().ProxOutEvent)
+ window->GetXTablet().CommonData.Active = GHOST_kTabletModeNone;
#endif // WITH_X11_XINPUT
break;
}
@@ -888,29 +893,29 @@ GHOST_SystemX11::processEvent(XEvent *xe)
}
}
- GHOST_TSuccess
+GHOST_TSuccess
GHOST_SystemX11::
getModifierKeys(
- GHOST_ModifierKeys& keys
-) const {
+ GHOST_ModifierKeys& keys) const
+{
// analyse the masks retuned from XQueryPointer.
- memset((void *)m_keyboard_vector,0,sizeof(m_keyboard_vector));
+ memset((void *)m_keyboard_vector, 0, sizeof(m_keyboard_vector));
- XQueryKeymap(m_display,(char *)m_keyboard_vector);
+ XQueryKeymap(m_display, (char *)m_keyboard_vector);
// now translate key symobols into keycodes and
// test with vector.
- const static KeyCode shift_l = XKeysymToKeycode(m_display,XK_Shift_L);
- const static KeyCode shift_r = XKeysymToKeycode(m_display,XK_Shift_R);
- const static KeyCode control_l = XKeysymToKeycode(m_display,XK_Control_L);
- const static KeyCode control_r = XKeysymToKeycode(m_display,XK_Control_R);
- const static KeyCode alt_l = XKeysymToKeycode(m_display,XK_Alt_L);
- const static KeyCode alt_r = XKeysymToKeycode(m_display,XK_Alt_R);
- const static KeyCode super_l = XKeysymToKeycode(m_display,XK_Super_L);
- const static KeyCode super_r = XKeysymToKeycode(m_display,XK_Super_R);
+ const static KeyCode shift_l = XKeysymToKeycode(m_display, XK_Shift_L);
+ const static KeyCode shift_r = XKeysymToKeycode(m_display, XK_Shift_R);
+ const static KeyCode control_l = XKeysymToKeycode(m_display, XK_Control_L);
+ const static KeyCode control_r = XKeysymToKeycode(m_display, XK_Control_R);
+ const static KeyCode alt_l = XKeysymToKeycode(m_display, XK_Alt_L);
+ const static KeyCode alt_r = XKeysymToKeycode(m_display, XK_Alt_R);
+ const static KeyCode super_l = XKeysymToKeycode(m_display, XK_Super_L);
+ const static KeyCode super_r = XKeysymToKeycode(m_display, XK_Super_R);
// shift
keys.set(GHOST_kModifierKeyLeftShift, ((m_keyboard_vector[shift_l >> 3] >> (shift_l & 7)) & 1) != 0);
@@ -928,22 +933,21 @@ getModifierKeys(
return GHOST_kSuccess;
}
- GHOST_TSuccess
+GHOST_TSuccess
GHOST_SystemX11::
getButtons(
- GHOST_Buttons& buttons
-) const {
-
+ GHOST_Buttons& buttons) const
+{
Window root_return, child_return;
- int rx,ry,wx,wy;
+ int rx, ry, wx, wy;
unsigned int mask_return;
if (XQueryPointer(m_display,
- RootWindow(m_display,DefaultScreen(m_display)),
+ RootWindow(m_display, DefaultScreen(m_display)),
&root_return,
&child_return,
- &rx,&ry,
- &wx,&wy,
+ &rx, &ry,
+ &wx, &wy,
&mask_return) == True)
{
buttons.set(GHOST_kButtonMaskLeft, (mask_return & Button1Mask) != 0);
@@ -958,28 +962,29 @@ getButtons(
}
- GHOST_TSuccess
+GHOST_TSuccess
GHOST_SystemX11::
getCursorPosition(
- GHOST_TInt32& x,
- GHOST_TInt32& y
-) const {
+ GHOST_TInt32& x,
+ GHOST_TInt32& y) const
+{
Window root_return, child_return;
- int rx,ry,wx,wy;
+ int rx, ry, wx, wy;
unsigned int mask_return;
if (XQueryPointer(
- m_display,
- RootWindow(m_display,DefaultScreen(m_display)),
- &root_return,
- &child_return,
- &rx,&ry,
- &wx,&wy,
- &mask_return
- ) == False) {
+ m_display,
+ RootWindow(m_display, DefaultScreen(m_display)),
+ &root_return,
+ &child_return,
+ &rx, &ry,
+ &wx, &wy,
+ &mask_return
+ ) == False) {
return GHOST_kFailure;
- } else {
+ }
+ else {
x = rx;
y = ry;
}
@@ -987,60 +992,58 @@ getCursorPosition(
}
- GHOST_TSuccess
+GHOST_TSuccess
GHOST_SystemX11::
setCursorPosition(
- GHOST_TInt32 x,
- GHOST_TInt32 y
-) {
+ GHOST_TInt32 x,
+ GHOST_TInt32 y
+ ) {
// This is a brute force move in screen coordinates
// XWarpPointer does relative moves so first determine the
// current pointer position.
- int cx,cy;
- if (getCursorPosition(cx,cy) == GHOST_kFailure) {
+ int cx, cy;
+ if (getCursorPosition(cx, cy) == GHOST_kFailure) {
return GHOST_kFailure;
}
- int relx = x-cx;
- int rely = y-cy;
+ int relx = x - cx;
+ int rely = y - cy;
- XWarpPointer(m_display,None,None,0,0,0,0,relx,rely);
+ XWarpPointer(m_display, None, None, 0, 0, 0, 0, relx, rely);
XSync(m_display, 0); /* Sync to process all requests */
return GHOST_kSuccess;
}
- void
+void
GHOST_SystemX11::
addDirtyWindow(
- GHOST_WindowX11 * bad_wind
-){
-
+ GHOST_WindowX11 *bad_wind)
+{
GHOST_ASSERT((bad_wind != NULL), "addDirtyWindow() NULL ptr trapped (window)");
m_dirty_windows.push_back(bad_wind);
}
- bool
+bool
GHOST_SystemX11::
-generateWindowExposeEvents(
-){
-
+generateWindowExposeEvents()
+{
vector<GHOST_WindowX11 *>::iterator w_start = m_dirty_windows.begin();
vector<GHOST_WindowX11 *>::const_iterator w_end = m_dirty_windows.end();
bool anyProcessed = false;
- for (;w_start != w_end; ++w_start) {
- GHOST_Event * g_event = new
- GHOST_Event(
- getMilliSeconds(),
- GHOST_kEventWindowUpdate,
- *w_start
- );
+ for (; w_start != w_end; ++w_start) {
+ GHOST_Event *g_event = new
+ GHOST_Event(
+ getMilliSeconds(),
+ GHOST_kEventWindowUpdate,
+ *w_start
+ );
(*w_start)->validate();
@@ -1054,7 +1057,7 @@ generateWindowExposeEvents(
return anyProcessed;
}
-#define GXMAP(k,x,y) case x: k = y; break;
+#define GXMAP(k, x, y) case x: k = y; break
static GHOST_TKey
convertXKey(KeySym key)
@@ -1062,12 +1065,15 @@ convertXKey(KeySym key)
GHOST_TKey type;
if ((key >= XK_A) && (key <= XK_Z)) {
- type = GHOST_TKey( key - XK_A + int(GHOST_kKeyA));
- } else if ((key >= XK_a) && (key <= XK_z)) {
+ type = GHOST_TKey(key - XK_A + int(GHOST_kKeyA));
+ }
+ else if ((key >= XK_a) && (key <= XK_z)) {
type = GHOST_TKey(key - XK_a + int(GHOST_kKeyA));
- } else if ((key >= XK_0) && (key <= XK_9)) {
+ }
+ else if ((key >= XK_0) && (key <= XK_9)) {
type = GHOST_TKey(key - XK_0 + int(GHOST_kKey0));
- } else if ((key >= XK_F1) && (key <= XK_F24)) {
+ }
+ else if ((key >= XK_F1) && (key <= XK_F24)) {
type = GHOST_TKey(key - XK_F1 + int(GHOST_kKeyF1));
#if defined(__sun) || defined(__sun__)
/* This is a bit of a hack, but it looks like sun
@@ -1076,121 +1082,124 @@ convertXKey(KeySym key)
following link has documentation on it:
http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=4734408
also from /usr/include/X11/Sunkeysym.h
-#define SunXK_F36 0x1005FF10 // Labeled F11
-#define SunXK_F37 0x1005FF11 // Labeled F12
+ #define SunXK_F36 0x1005FF10 // Labeled F11
+ #define SunXK_F37 0x1005FF11 // Labeled F12
- mein@cs.umn.edu
+ mein@cs.umn.edu
*/
- } else if (key == 268828432) {
+ }
+ else if (key == 268828432) {
type = GHOST_kKeyF11;
- } else if (key == 268828433) {
+ }
+ else if (key == 268828433) {
type = GHOST_kKeyF12;
#endif
- } else {
- switch(key) {
- GXMAP(type,XK_BackSpace, GHOST_kKeyBackSpace);
- GXMAP(type,XK_Tab, GHOST_kKeyTab);
- GXMAP(type,XK_Return, GHOST_kKeyEnter);
- GXMAP(type,XK_Escape, GHOST_kKeyEsc);
- GXMAP(type,XK_space, GHOST_kKeySpace);
-
- GXMAP(type,XK_Linefeed, GHOST_kKeyLinefeed);
- GXMAP(type,XK_semicolon, GHOST_kKeySemicolon);
- GXMAP(type,XK_period, GHOST_kKeyPeriod);
- GXMAP(type,XK_comma, GHOST_kKeyComma);
- GXMAP(type,XK_quoteright, GHOST_kKeyQuote);
- GXMAP(type,XK_quoteleft, GHOST_kKeyAccentGrave);
- GXMAP(type,XK_minus, GHOST_kKeyMinus);
- GXMAP(type,XK_slash, GHOST_kKeySlash);
- GXMAP(type,XK_backslash, GHOST_kKeyBackslash);
- GXMAP(type,XK_equal, GHOST_kKeyEqual);
- GXMAP(type,XK_bracketleft, GHOST_kKeyLeftBracket);
- GXMAP(type,XK_bracketright, GHOST_kKeyRightBracket);
- GXMAP(type,XK_Pause, GHOST_kKeyPause);
-
- GXMAP(type,XK_Shift_L, GHOST_kKeyLeftShift);
- GXMAP(type,XK_Shift_R, GHOST_kKeyRightShift);
- GXMAP(type,XK_Control_L, GHOST_kKeyLeftControl);
- GXMAP(type,XK_Control_R, GHOST_kKeyRightControl);
- GXMAP(type,XK_Alt_L, GHOST_kKeyLeftAlt);
- GXMAP(type,XK_Alt_R, GHOST_kKeyRightAlt);
- GXMAP(type,XK_Super_L, GHOST_kKeyOS);
- GXMAP(type,XK_Super_R, GHOST_kKeyOS);
-
- GXMAP(type,XK_Insert, GHOST_kKeyInsert);
- GXMAP(type,XK_Delete, GHOST_kKeyDelete);
- GXMAP(type,XK_Home, GHOST_kKeyHome);
- GXMAP(type,XK_End, GHOST_kKeyEnd);
- GXMAP(type,XK_Page_Up, GHOST_kKeyUpPage);
- GXMAP(type,XK_Page_Down, GHOST_kKeyDownPage);
-
- GXMAP(type,XK_Left, GHOST_kKeyLeftArrow);
- GXMAP(type,XK_Right, GHOST_kKeyRightArrow);
- GXMAP(type,XK_Up, GHOST_kKeyUpArrow);
- GXMAP(type,XK_Down, GHOST_kKeyDownArrow);
-
- GXMAP(type,XK_Caps_Lock, GHOST_kKeyCapsLock);
- GXMAP(type,XK_Scroll_Lock, GHOST_kKeyScrollLock);
- GXMAP(type,XK_Num_Lock, GHOST_kKeyNumLock);
-
- /* keypad events */
-
- GXMAP(type,XK_KP_0, GHOST_kKeyNumpad0);
- GXMAP(type,XK_KP_1, GHOST_kKeyNumpad1);
- GXMAP(type,XK_KP_2, GHOST_kKeyNumpad2);
- GXMAP(type,XK_KP_3, GHOST_kKeyNumpad3);
- GXMAP(type,XK_KP_4, GHOST_kKeyNumpad4);
- GXMAP(type,XK_KP_5, GHOST_kKeyNumpad5);
- GXMAP(type,XK_KP_6, GHOST_kKeyNumpad6);
- GXMAP(type,XK_KP_7, GHOST_kKeyNumpad7);
- GXMAP(type,XK_KP_8, GHOST_kKeyNumpad8);
- GXMAP(type,XK_KP_9, GHOST_kKeyNumpad9);
- GXMAP(type,XK_KP_Decimal, GHOST_kKeyNumpadPeriod);
-
- GXMAP(type,XK_KP_Insert, GHOST_kKeyNumpad0);
- GXMAP(type,XK_KP_End, GHOST_kKeyNumpad1);
- GXMAP(type,XK_KP_Down, GHOST_kKeyNumpad2);
- GXMAP(type,XK_KP_Page_Down, GHOST_kKeyNumpad3);
- GXMAP(type,XK_KP_Left, GHOST_kKeyNumpad4);
- GXMAP(type,XK_KP_Begin, GHOST_kKeyNumpad5);
- GXMAP(type,XK_KP_Right, GHOST_kKeyNumpad6);
- GXMAP(type,XK_KP_Home, GHOST_kKeyNumpad7);
- GXMAP(type,XK_KP_Up, GHOST_kKeyNumpad8);
- GXMAP(type,XK_KP_Page_Up, GHOST_kKeyNumpad9);
- GXMAP(type,XK_KP_Delete, GHOST_kKeyNumpadPeriod);
-
- GXMAP(type,XK_KP_Enter, GHOST_kKeyNumpadEnter);
- GXMAP(type,XK_KP_Add, GHOST_kKeyNumpadPlus);
- GXMAP(type,XK_KP_Subtract, GHOST_kKeyNumpadMinus);
- GXMAP(type,XK_KP_Multiply, GHOST_kKeyNumpadAsterisk);
- GXMAP(type,XK_KP_Divide, GHOST_kKeyNumpadSlash);
+ }
+ else {
+ switch (key) {
+ GXMAP(type, XK_BackSpace, GHOST_kKeyBackSpace);
+ GXMAP(type, XK_Tab, GHOST_kKeyTab);
+ GXMAP(type, XK_Return, GHOST_kKeyEnter);
+ GXMAP(type, XK_Escape, GHOST_kKeyEsc);
+ GXMAP(type, XK_space, GHOST_kKeySpace);
+
+ GXMAP(type, XK_Linefeed, GHOST_kKeyLinefeed);
+ GXMAP(type, XK_semicolon, GHOST_kKeySemicolon);
+ GXMAP(type, XK_period, GHOST_kKeyPeriod);
+ GXMAP(type, XK_comma, GHOST_kKeyComma);
+ GXMAP(type, XK_quoteright, GHOST_kKeyQuote);
+ GXMAP(type, XK_quoteleft, GHOST_kKeyAccentGrave);
+ GXMAP(type, XK_minus, GHOST_kKeyMinus);
+ GXMAP(type, XK_slash, GHOST_kKeySlash);
+ GXMAP(type, XK_backslash, GHOST_kKeyBackslash);
+ GXMAP(type, XK_equal, GHOST_kKeyEqual);
+ GXMAP(type, XK_bracketleft, GHOST_kKeyLeftBracket);
+ GXMAP(type, XK_bracketright, GHOST_kKeyRightBracket);
+ GXMAP(type, XK_Pause, GHOST_kKeyPause);
+
+ GXMAP(type, XK_Shift_L, GHOST_kKeyLeftShift);
+ GXMAP(type, XK_Shift_R, GHOST_kKeyRightShift);
+ GXMAP(type, XK_Control_L, GHOST_kKeyLeftControl);
+ GXMAP(type, XK_Control_R, GHOST_kKeyRightControl);
+ GXMAP(type, XK_Alt_L, GHOST_kKeyLeftAlt);
+ GXMAP(type, XK_Alt_R, GHOST_kKeyRightAlt);
+ GXMAP(type, XK_Super_L, GHOST_kKeyOS);
+ GXMAP(type, XK_Super_R, GHOST_kKeyOS);
+
+ GXMAP(type, XK_Insert, GHOST_kKeyInsert);
+ GXMAP(type, XK_Delete, GHOST_kKeyDelete);
+ GXMAP(type, XK_Home, GHOST_kKeyHome);
+ GXMAP(type, XK_End, GHOST_kKeyEnd);
+ GXMAP(type, XK_Page_Up, GHOST_kKeyUpPage);
+ GXMAP(type, XK_Page_Down, GHOST_kKeyDownPage);
+
+ GXMAP(type, XK_Left, GHOST_kKeyLeftArrow);
+ GXMAP(type, XK_Right, GHOST_kKeyRightArrow);
+ GXMAP(type, XK_Up, GHOST_kKeyUpArrow);
+ GXMAP(type, XK_Down, GHOST_kKeyDownArrow);
+
+ GXMAP(type, XK_Caps_Lock, GHOST_kKeyCapsLock);
+ GXMAP(type, XK_Scroll_Lock, GHOST_kKeyScrollLock);
+ GXMAP(type, XK_Num_Lock, GHOST_kKeyNumLock);
+
+ /* keypad events */
+
+ GXMAP(type, XK_KP_0, GHOST_kKeyNumpad0);
+ GXMAP(type, XK_KP_1, GHOST_kKeyNumpad1);
+ GXMAP(type, XK_KP_2, GHOST_kKeyNumpad2);
+ GXMAP(type, XK_KP_3, GHOST_kKeyNumpad3);
+ GXMAP(type, XK_KP_4, GHOST_kKeyNumpad4);
+ GXMAP(type, XK_KP_5, GHOST_kKeyNumpad5);
+ GXMAP(type, XK_KP_6, GHOST_kKeyNumpad6);
+ GXMAP(type, XK_KP_7, GHOST_kKeyNumpad7);
+ GXMAP(type, XK_KP_8, GHOST_kKeyNumpad8);
+ GXMAP(type, XK_KP_9, GHOST_kKeyNumpad9);
+ GXMAP(type, XK_KP_Decimal, GHOST_kKeyNumpadPeriod);
+
+ GXMAP(type, XK_KP_Insert, GHOST_kKeyNumpad0);
+ GXMAP(type, XK_KP_End, GHOST_kKeyNumpad1);
+ GXMAP(type, XK_KP_Down, GHOST_kKeyNumpad2);
+ GXMAP(type, XK_KP_Page_Down, GHOST_kKeyNumpad3);
+ GXMAP(type, XK_KP_Left, GHOST_kKeyNumpad4);
+ GXMAP(type, XK_KP_Begin, GHOST_kKeyNumpad5);
+ GXMAP(type, XK_KP_Right, GHOST_kKeyNumpad6);
+ GXMAP(type, XK_KP_Home, GHOST_kKeyNumpad7);
+ GXMAP(type, XK_KP_Up, GHOST_kKeyNumpad8);
+ GXMAP(type, XK_KP_Page_Up, GHOST_kKeyNumpad9);
+ GXMAP(type, XK_KP_Delete, GHOST_kKeyNumpadPeriod);
+
+ GXMAP(type, XK_KP_Enter, GHOST_kKeyNumpadEnter);
+ GXMAP(type, XK_KP_Add, GHOST_kKeyNumpadPlus);
+ GXMAP(type, XK_KP_Subtract, GHOST_kKeyNumpadMinus);
+ GXMAP(type, XK_KP_Multiply, GHOST_kKeyNumpadAsterisk);
+ GXMAP(type, XK_KP_Divide, GHOST_kKeyNumpadSlash);
/* Media keys in some keyboards and laptops with XFree86/Xorg */
#ifdef WITH_XF86KEYSYM
- GXMAP(type,XF86XK_AudioPlay, GHOST_kKeyMediaPlay);
- GXMAP(type,XF86XK_AudioStop, GHOST_kKeyMediaStop);
- GXMAP(type,XF86XK_AudioPrev, GHOST_kKeyMediaFirst);
- GXMAP(type,XF86XK_AudioRewind, GHOST_kKeyMediaFirst);
- GXMAP(type,XF86XK_AudioNext, GHOST_kKeyMediaLast);
+ GXMAP(type, XF86XK_AudioPlay, GHOST_kKeyMediaPlay);
+ GXMAP(type, XF86XK_AudioStop, GHOST_kKeyMediaStop);
+ GXMAP(type, XF86XK_AudioPrev, GHOST_kKeyMediaFirst);
+ GXMAP(type, XF86XK_AudioRewind, GHOST_kKeyMediaFirst);
+ GXMAP(type, XF86XK_AudioNext, GHOST_kKeyMediaLast);
#ifdef XF86XK_AudioForward /* Debian lenny's XF86keysym.h has no XF86XK_AudioForward define */
- GXMAP(type,XF86XK_AudioForward, GHOST_kKeyMediaLast);
+ GXMAP(type, XF86XK_AudioForward, GHOST_kKeyMediaLast);
#endif
#endif
- /* some extra sun cruft (NICE KEYBOARD!) */
+ /* some extra sun cruft (NICE KEYBOARD!) */
#ifdef __sun__
- GXMAP(type,0xffde, GHOST_kKeyNumpad1);
- GXMAP(type,0xffe0, GHOST_kKeyNumpad3);
- GXMAP(type,0xffdc, GHOST_kKeyNumpad5);
- GXMAP(type,0xffd8, GHOST_kKeyNumpad7);
- GXMAP(type,0xffda, GHOST_kKeyNumpad9);
-
- GXMAP(type,0xffd6, GHOST_kKeyNumpadSlash);
- GXMAP(type,0xffd7, GHOST_kKeyNumpadAsterisk);
+ GXMAP(type, 0xffde, GHOST_kKeyNumpad1);
+ GXMAP(type, 0xffe0, GHOST_kKeyNumpad3);
+ GXMAP(type, 0xffdc, GHOST_kKeyNumpad5);
+ GXMAP(type, 0xffd8, GHOST_kKeyNumpad7);
+ GXMAP(type, 0xffda, GHOST_kKeyNumpad9);
+
+ GXMAP(type, 0xffd6, GHOST_kKeyNumpadSlash);
+ GXMAP(type, 0xffd7, GHOST_kKeyNumpadAsterisk);
#endif
- default :
+ default:
type = GHOST_kKeyUnknown;
break;
}
@@ -1203,28 +1212,28 @@ convertXKey(KeySym key)
/* from xclip.c xcout() v0.11 */
-#define XCLIB_XCOUT_NONE 0 /* no context */
-#define XCLIB_XCOUT_SENTCONVSEL 1 /* sent a request */
-#define XCLIB_XCOUT_INCR 2 /* in an incr loop */
-#define XCLIB_XCOUT_FALLBACK 3 /* STRING failed, need fallback to UTF8 */
-#define XCLIB_XCOUT_FALLBACK_UTF8 4 /* UTF8 failed, move to compouned */
-#define XCLIB_XCOUT_FALLBACK_COMP 5 /* compouned failed, move to text. */
-#define XCLIB_XCOUT_FALLBACK_TEXT 6
+#define XCLIB_XCOUT_NONE 0 /* no context */
+#define XCLIB_XCOUT_SENTCONVSEL 1 /* sent a request */
+#define XCLIB_XCOUT_INCR 2 /* in an incr loop */
+#define XCLIB_XCOUT_FALLBACK 3 /* STRING failed, need fallback to UTF8 */
+#define XCLIB_XCOUT_FALLBACK_UTF8 4 /* UTF8 failed, move to compouned */
+#define XCLIB_XCOUT_FALLBACK_COMP 5 /* compouned failed, move to text. */
+#define XCLIB_XCOUT_FALLBACK_TEXT 6
// Retrieves the contents of a selections.
void GHOST_SystemX11::getClipboard_xcout(XEvent evt,
- Atom sel, Atom target, unsigned char **txt,
- unsigned long *len, unsigned int *context) const
+ Atom sel, Atom target, unsigned char **txt,
+ unsigned long *len, unsigned int *context) const
{
Atom pty_type;
int pty_format;
unsigned char *buffer;
unsigned long pty_size, pty_items;
- unsigned char *ltxt= *txt;
+ unsigned char *ltxt = *txt;
vector<GHOST_IWindow *> & win_vec = m_windowManager->getWindows();
vector<GHOST_IWindow *>::iterator win_it = win_vec.begin();
- GHOST_WindowX11 * window = static_cast<GHOST_WindowX11 *>(*win_it);
+ GHOST_WindowX11 *window = static_cast<GHOST_WindowX11 *>(*win_it);
Window win = window->getXWindow();
switch (*context) {
@@ -1246,22 +1255,22 @@ void GHOST_SystemX11::getClipboard_xcout(XEvent evt,
return;
if (target == m_utf8_string && evt.xselection.property == None) {
- *context= XCLIB_XCOUT_FALLBACK_UTF8;
+ *context = XCLIB_XCOUT_FALLBACK_UTF8;
return;
}
else if (target == m_compound_text && evt.xselection.property == None) {
- *context= XCLIB_XCOUT_FALLBACK_COMP;
+ *context = XCLIB_XCOUT_FALLBACK_COMP;
return;
}
else if (target == m_text && evt.xselection.property == None) {
- *context= XCLIB_XCOUT_FALLBACK_TEXT;
+ *context = XCLIB_XCOUT_FALLBACK_TEXT;
return;
}
// find the size and format of the data in property
XGetWindowProperty(m_display, win, m_xclip_out, 0, 0, False,
- AnyPropertyType, &pty_type, &pty_format,
- &pty_items, &pty_size, &buffer);
+ AnyPropertyType, &pty_type, &pty_format,
+ &pty_items, &pty_size, &buffer);
XFree(buffer);
if (pty_type == m_incr) {
@@ -1282,8 +1291,8 @@ void GHOST_SystemX11::getClipboard_xcout(XEvent evt,
// not using INCR mechanism, just read the property
XGetWindowProperty(m_display, win, m_xclip_out, 0, (long) pty_size,
- False, AnyPropertyType, &pty_type,
- &pty_format, &pty_items, &pty_size, &buffer);
+ False, AnyPropertyType, &pty_type,
+ &pty_format, &pty_items, &pty_size, &buffer);
// finished with property, delete it
XDeleteProperty(m_display, win, m_xclip_out);
@@ -1320,8 +1329,8 @@ void GHOST_SystemX11::getClipboard_xcout(XEvent evt,
// check size and format of the property
XGetWindowProperty(m_display, win, m_xclip_out, 0, 0, False,
- AnyPropertyType, &pty_type, &pty_format,
- &pty_items, &pty_size, (unsigned char **) &buffer);
+ AnyPropertyType, &pty_type, &pty_format,
+ &pty_items, &pty_size, (unsigned char **) &buffer);
if (pty_format != 8) {
// property does not contain text, delete it
@@ -1348,8 +1357,8 @@ void GHOST_SystemX11::getClipboard_xcout(XEvent evt,
// if we have come this far, the propery contains
// text, we know the size.
XGetWindowProperty(m_display, win, m_xclip_out, 0, (long) pty_size,
- False, AnyPropertyType, &pty_type, &pty_format,
- &pty_items, &pty_size, (unsigned char **) &buffer);
+ False, AnyPropertyType, &pty_type, &pty_format,
+ &pty_items, &pty_size, (unsigned char **) &buffer);
// allocate memory to accommodate data in *txt
if (*len == 0) {
@@ -1378,37 +1387,37 @@ void GHOST_SystemX11::getClipboard_xcout(XEvent evt,
GHOST_TUns8 *GHOST_SystemX11::getClipboard(bool selection) const
{
Atom sseln;
- Atom target= m_utf8_string;
+ Atom target = m_utf8_string;
Window owner;
// from xclip.c doOut() v0.11
unsigned char *sel_buf;
- unsigned long sel_len= 0;
+ unsigned long sel_len = 0;
XEvent evt;
- unsigned int context= XCLIB_XCOUT_NONE;
+ unsigned int context = XCLIB_XCOUT_NONE;
if (selection == True)
- sseln= m_primary;
+ sseln = m_primary;
else
- sseln= m_clipboard;
+ sseln = m_clipboard;
vector<GHOST_IWindow *> & win_vec = m_windowManager->getWindows();
vector<GHOST_IWindow *>::iterator win_it = win_vec.begin();
- GHOST_WindowX11 * window = static_cast<GHOST_WindowX11 *>(*win_it);
+ GHOST_WindowX11 *window = static_cast<GHOST_WindowX11 *>(*win_it);
Window win = window->getXWindow();
/* check if we are the owner. */
- owner= XGetSelectionOwner(m_display, sseln);
+ owner = XGetSelectionOwner(m_display, sseln);
if (owner == win) {
if (sseln == m_clipboard) {
- sel_buf= (unsigned char *)malloc(strlen(txt_cut_buffer)+1);
+ sel_buf = (unsigned char *)malloc(strlen(txt_cut_buffer) + 1);
strcpy((char *)sel_buf, txt_cut_buffer);
- return((GHOST_TUns8*)sel_buf);
+ return((GHOST_TUns8 *)sel_buf);
}
else {
- sel_buf= (unsigned char *)malloc(strlen(txt_select_buffer)+1);
+ sel_buf = (unsigned char *)malloc(strlen(txt_select_buffer) + 1);
strcpy((char *)sel_buf, txt_select_buffer);
- return((GHOST_TUns8*)sel_buf);
+ return((GHOST_TUns8 *)sel_buf);
}
}
else if (owner == None)
@@ -1424,20 +1433,20 @@ GHOST_TUns8 *GHOST_SystemX11::getClipboard(bool selection) const
/* fallback is needed. set XA_STRING to target and restart the loop. */
if (context == XCLIB_XCOUT_FALLBACK) {
- context= XCLIB_XCOUT_NONE;
- target= m_string;
+ context = XCLIB_XCOUT_NONE;
+ target = m_string;
continue;
}
else if (context == XCLIB_XCOUT_FALLBACK_UTF8) {
/* utf8 fail, move to compouned text. */
- context= XCLIB_XCOUT_NONE;
- target= m_compound_text;
+ context = XCLIB_XCOUT_NONE;
+ target = m_compound_text;
continue;
}
else if (context == XCLIB_XCOUT_FALLBACK_COMP) {
/* compouned text faile, move to text. */
- context= XCLIB_XCOUT_NONE;
- target= m_text;
+ context = XCLIB_XCOUT_NONE;
+ target = m_text;
continue;
}
@@ -1450,8 +1459,8 @@ GHOST_TUns8 *GHOST_SystemX11::getClipboard(bool selection) const
/* only print the buffer out, and free it, if it's not
* empty
*/
- unsigned char *tmp_data = (unsigned char*) malloc(sel_len+1);
- memcpy((char*)tmp_data, (char*)sel_buf, sel_len);
+ unsigned char *tmp_data = (unsigned char *) malloc(sel_len + 1);
+ memcpy((char *)tmp_data, (char *)sel_buf, sel_len);
tmp_data[sel_len] = '\0';
if (sseln == m_string)
@@ -1459,7 +1468,7 @@ GHOST_TUns8 *GHOST_SystemX11::getClipboard(bool selection) const
else
free(sel_buf);
- return (GHOST_TUns8*)tmp_data;
+ return (GHOST_TUns8 *)tmp_data;
}
return(NULL);
}
@@ -1470,25 +1479,26 @@ void GHOST_SystemX11::putClipboard(GHOST_TInt8 *buffer, bool selection) const
vector<GHOST_IWindow *> & win_vec = m_windowManager->getWindows();
vector<GHOST_IWindow *>::iterator win_it = win_vec.begin();
- GHOST_WindowX11 * window = static_cast<GHOST_WindowX11 *>(*win_it);
+ GHOST_WindowX11 *window = static_cast<GHOST_WindowX11 *>(*win_it);
m_window = window->getXWindow();
if (buffer) {
if (selection == False) {
XSetSelectionOwner(m_display, m_clipboard, m_window, CurrentTime);
- owner= XGetSelectionOwner(m_display, m_clipboard);
+ owner = XGetSelectionOwner(m_display, m_clipboard);
if (txt_cut_buffer)
- free((void*)txt_cut_buffer);
+ free((void *)txt_cut_buffer);
- txt_cut_buffer = (char*) malloc(strlen(buffer)+1);
+ txt_cut_buffer = (char *) malloc(strlen(buffer) + 1);
strcpy(txt_cut_buffer, buffer);
- } else {
+ }
+ else {
XSetSelectionOwner(m_display, m_primary, m_window, CurrentTime);
- owner= XGetSelectionOwner(m_display, m_primary);
+ owner = XGetSelectionOwner(m_display, m_primary);
if (txt_select_buffer)
- free((void*)txt_select_buffer);
+ free((void *)txt_select_buffer);
- txt_select_buffer = (char*) malloc(strlen(buffer)+1);
+ txt_select_buffer = (char *) malloc(strlen(buffer) + 1);
strcpy(txt_select_buffer, buffer);
}
@@ -1499,16 +1509,16 @@ void GHOST_SystemX11::putClipboard(GHOST_TInt8 *buffer, bool selection) const
#ifdef WITH_XDND
GHOST_TSuccess GHOST_SystemX11::pushDragDropEvent(GHOST_TEventType eventType,
- GHOST_TDragnDropTypes draggedObjectType,
- GHOST_IWindow* window,
- int mouseX, int mouseY,
- void* data)
+ GHOST_TDragnDropTypes draggedObjectType,
+ GHOST_IWindow *window,
+ int mouseX, int mouseY,
+ void *data)
{
- GHOST_SystemX11* system = ((GHOST_SystemX11*)getSystem());
+ GHOST_SystemX11 *system = ((GHOST_SystemX11 *)getSystem());
return system->pushEvent(new GHOST_EventDragnDrop(system->getMilliSeconds(),
- eventType,
- draggedObjectType,
- window,mouseX,mouseY,data)
- );
+ eventType,
+ draggedObjectType,
+ window, mouseX, mouseY, data)
+ );
}
#endif
diff --git a/intern/ghost/intern/GHOST_SystemX11.h b/intern/ghost/intern/GHOST_SystemX11.h
index d236c73dabd..fd5a33c02d7 100644
--- a/intern/ghost/intern/GHOST_SystemX11.h
+++ b/intern/ghost/intern/GHOST_SystemX11.h
@@ -63,7 +63,7 @@ public:
*/
GHOST_SystemX11(
- );
+ );
/**
* Destructor.
@@ -71,9 +71,9 @@ public:
virtual ~GHOST_SystemX11();
- GHOST_TSuccess
+ GHOST_TSuccess
init(
- );
+ );
/**
@@ -85,28 +85,28 @@ public:
* Returns the number of milliseconds since the start of the system process.
* @return The number of milliseconds.
*/
- GHOST_TUns64
+ GHOST_TUns64
getMilliSeconds(
- ) const;
+ ) const;
/**
* Returns the number of displays on this system.
* @return The number of displays.
*/
- GHOST_TUns8
+ GHOST_TUns8
getNumDisplays(
- ) const;
+ ) const;
/**
* Returns the dimensions of the main display on this system.
* @return The dimension of the main display.
*/
- void
+ void
getMainDisplayDimensions(
- GHOST_TUns32& width,
- GHOST_TUns32& height
- ) const;
+ GHOST_TUns32& width,
+ GHOST_TUns32& height
+ ) const;
/**
* Create a new window.
@@ -120,22 +120,22 @@ public:
* @param state The state of the window when opened.
* @param type The type of drawing context installed in this window.
* @param stereoVisual Create a stereo visual for quad buffered stereo.
- * @param parentWindow Parent (embedder) window
+ * @param parentWindow Parent (embedder) window
* @return The new window (or 0 if creation failed).
*/
- GHOST_IWindow*
+ GHOST_IWindow *
createWindow(
- const STR_String& title,
- GHOST_TInt32 left,
- GHOST_TInt32 top,
- GHOST_TUns32 width,
- GHOST_TUns32 height,
- GHOST_TWindowState state,
- GHOST_TDrawingContextType type,
- const bool stereoVisual,
- const GHOST_TUns16 numOfAASamples = 0,
- const GHOST_TEmbedderWindowID parentWindow = 0
- );
+ const STR_String& title,
+ GHOST_TInt32 left,
+ GHOST_TInt32 top,
+ GHOST_TUns32 width,
+ GHOST_TUns32 height,
+ GHOST_TWindowState state,
+ GHOST_TDrawingContextType type,
+ const bool stereoVisual,
+ const GHOST_TUns16 numOfAASamples = 0,
+ const GHOST_TEmbedderWindowID parentWindow = 0
+ );
/**
* @section Interface Inherited from GHOST_ISystem
@@ -146,45 +146,45 @@ public:
* @param waitForEvent Flag to wait for an event (or return immediately).
* @return Indication of the presence of events.
*/
- bool
+ bool
processEvents(
- bool waitForEvent
- );
+ bool waitForEvent
+ );
/**
* @section Interface Inherited from GHOST_System
*/
- GHOST_TSuccess
+ GHOST_TSuccess
getCursorPosition(
- GHOST_TInt32& x,
- GHOST_TInt32& y
- ) const;
+ GHOST_TInt32& x,
+ GHOST_TInt32& y
+ ) const;
- GHOST_TSuccess
+ GHOST_TSuccess
setCursorPosition(
- GHOST_TInt32 x,
- GHOST_TInt32 y
- );
+ GHOST_TInt32 x,
+ GHOST_TInt32 y
+ );
/**
* Returns the state of all modifier keys.
* @param keys The state of all modifier keys (true == pressed).
* @return Indication of success.
*/
- GHOST_TSuccess
+ GHOST_TSuccess
getModifierKeys(
- GHOST_ModifierKeys& keys
- ) const;
+ GHOST_ModifierKeys& keys
+ ) const;
/**
* Returns the state of the mouse buttons (ouside the message queue).
* @param buttons The state of the buttons.
* @return Indication of success.
*/
- GHOST_TSuccess
+ GHOST_TSuccess
getButtons(
- GHOST_Buttons& buttons
- ) const;
+ GHOST_Buttons& buttons
+ ) const;
/**
* @section Interface Dirty
@@ -192,26 +192,26 @@ public:
* generate a GHOST window update event on a call to processEvents()
*/
- void
+ void
addDirtyWindow(
- GHOST_WindowX11 * bad_wind
- );
+ GHOST_WindowX11 *bad_wind
+ );
/**
* return a pointer to the X11 display structure
*/
- Display *
+ Display *
getXDisplay(
- ) {
+ ) {
return m_display;
}
#if defined(WITH_X11_XINPUT) && defined(X_HAVE_UTF8_STRING)
- XIM
+ XIM
getX11_XIM(
- ) {
+ ) {
return m_xim;
}
#endif
@@ -246,13 +246,15 @@ public:
* @param window The window on which the event occurred
* @return Indication whether the event was handled.
*/
- static GHOST_TSuccess pushDragDropEvent(GHOST_TEventType eventType, GHOST_TDragnDropTypes draggedObjectType,GHOST_IWindow* window, int mouseX, int mouseY, void* data);
+ static GHOST_TSuccess pushDragDropEvent(GHOST_TEventType eventType, GHOST_TDragnDropTypes draggedObjectType, GHOST_IWindow *window, int mouseX, int mouseY, void *data);
#endif
/**
* @see GHOST_ISystem
*/
- int toggleConsole(int action) { return 0; }
+ int toggleConsole(int action) {
+ return 0;
+ }
/**
* Atom used for ICCCM, WM-spec and Motif.
@@ -282,9 +284,9 @@ public:
Atom m_incr;
Atom m_utf8_string;
-private :
+private:
- Display * m_display;
+ Display *m_display;
#if defined(WITH_X11_XINPUT) && defined(X_HAVE_UTF8_STRING)
XIM m_xim;
#endif
@@ -307,24 +309,24 @@ private :
* X11 window xwind
*/
- GHOST_WindowX11 *
+ GHOST_WindowX11 *
findGhostWindow(
- Window xwind
- ) const;
+ Window xwind
+ ) const;
- void
+ void
processEvent(
- XEvent *xe
- );
+ XEvent *xe
+ );
- Time
+ Time
lastEventTime(
- Time default_time
- );
+ Time default_time
+ );
- bool
+ bool
generateWindowExposeEvents(
- );
+ );
};
#endif
diff --git a/intern/ghost/intern/GHOST_WindowX11.cpp b/intern/ghost/intern/GHOST_WindowX11.cpp
index 85a9163ec91..12990064621 100644
--- a/intern/ghost/intern/GHOST_WindowX11.cpp
+++ b/intern/ghost/intern/GHOST_WindowX11.cpp
@@ -43,7 +43,7 @@
#include <X11/cursorfont.h>
#include <X11/Xatom.h>
-#if defined(__sun__) || defined( __sun ) || defined (__sparc) || defined (__sparc__) || defined (_AIX)
+#if defined(__sun__) || defined(__sun) || defined(__sparc) || defined(__sparc__) || defined(_AIX)
#include <strings.h>
#endif
@@ -79,13 +79,13 @@ typedef struct {
#define _NET_WM_STATE_TOGGLE 2
/*
-import bpy
-I = bpy.data.images['blender.png'] # the 48x48 icon
+ import bpy
+ I = bpy.data.images['blender.png'] # the 48x48 icon
-# Write to a file that can be
-# used within static unsigned char BLENDER_ICON_48x48x24[] = {...}
-f = open('/myicon.txt', 'w')
-for j in xrange(48):
+ # Write to a file that can be
+ # used within static unsigned char BLENDER_ICON_48x48x24[] = {...}
+ f = open('/myicon.txt', 'w')
+ for j in xrange(48):
for k in xrange(48):
v = I.getPixelI(j,47-k)
v.pop()
@@ -93,60 +93,60 @@ for j in xrange(48):
f.write(str(hex(p))+',')
f.write('\n')
-*/
+ */
// See the python script above to regenerate the 48x48 icon within blender
#define BLENDER_ICON_WIDTH 48
#define BLENDER_ICON_HEIGHT 48
static unsigned char BLENDER_ICON_48x48x24[] = {
-0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0x0,0x0,0x0,0x0,0x0,0x0,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,
-0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0x4f,0x2a,0xd,0xa7,0x5b,0x1f,0xb8,0x66,0x22,0x6c,0x3b,0x14,0x5,0x3,0x1,0x0,0x0,0x0,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,
-0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0x6f,0x3a,0x13,0xea,0x7f,0x2c,0xee,0x7e,0x2b,0xee,0x7e,0x2b,0xef,0x85,0x2e,0x5f,0x35,0x12,0x0,0x0,0x0,0x0,0x0,0x0,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,
-0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0x43,0x22,0xb,0xed,0x7f,0x2c,0xed,0x7c,0x2b,0xee,0x7f,0x2c,0xee,0x80,0x2c,0xee,0x80,0x2c,0xa8,0x5f,0x20,0x0,0x0,0x0,0x0,0x0,0x0,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,
-0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0x2e,0x16,0x6,0xd0,0x6f,0x26,0xed,0x7b,0x2a,0xed,0x7d,0x2b,0xee,0x7f,0x2c,0xee,0x80,0x2c,0xee,0x82,0x2d,0x9a,0x57,0x1d,0x0,0x0,0x0,0x0,0x0,0x0,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,
-0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0x17,0xb,0x4,0xb9,0x60,0x21,0xed,0x7a,0x2a,0xed,0x7b,0x2a,0xed,0x7e,0x2b,0xee,0x7f,0x2c,0xee,0x7f,0x2c,0xee,0x86,0x2e,0x4e,0x2b,0xe,0x0,0x0,0x0,0x0,0x0,0x0,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,
-0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0x1,0x0,0x0,0x96,0x4d,0x19,0xee,0x7a,0x2a,0xed,0x79,0x2a,0xed,0x7c,0x2b,0xed,0x7e,0x2b,0xed,0x7e,0x2b,0xef,0x83,0x2d,0x98,0x55,0x1c,0x3,0x1,0x0,0x0,0x0,0x0,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,
-0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0x20,0xf,0x5,0x4b,0x27,0xe,0x21,0x11,0x5,0x0,0x0,0x0,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0x67,0x34,0x11,0xed,0x7b,0x2a,0xec,0x79,0x29,0xed,0x7b,0x2a,0xed,0x7c,0x2b,0xed,0x7d,0x2b,0xee,0x7f,0x2c,0xbb,0x69,0x24,0x11,0x9,0x3,0x0,0x0,0x0,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,
-0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0x38,0x1c,0x9,0xc9,0x6d,0x2c,0xf1,0x86,0x36,0xd7,0x79,0x2a,0x22,0x12,0x5,0x0,0x0,0x0,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0x3b,0x1d,0x9,0xe0,0x74,0x27,0xed,0x7a,0x2a,0xed,0x7c,0x2a,0xed,0x7d,0x2b,0xed,0x7d,0x2b,0xed,0x7d,0x2b,0xdc,0x7a,0x2a,0x1e,0xf,0x5,0x0,0x0,0x0,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,
-0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xa6,0x56,0x23,0xee,0x83,0x3b,0xed,0x7d,0x2c,0xf0,0x85,0x2e,0x75,0x43,0x17,0x0,0x0,0x0,0x0,0x0,0x0,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0x25,0x12,0x5,0xc9,0x68,0x24,0xed,0x7b,0x2a,0xed,0x7d,0x2b,0xed,0x7e,0x2b,0xee,0x7e,0x2c,0xed,0x7d,0x2b,0xe3,0x7d,0x2b,0x3b,0x1f,0xa,0x0,0x0,0x0,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,
-0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0x1c,0xd,0x4,0xd9,0x74,0x35,0xee,0x83,0x3a,0xee,0x7f,0x2b,0xf0,0x86,0x2e,0x83,0x4d,0x1a,0x0,0x0,0x0,0x0,0x0,0x0,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xa,0x5,0x1,0xa1,0x54,0x1c,0xee,0x7e,0x2c,0xed,0x7e,0x2c,0xed,0x7f,0x2c,0xed,0x80,0x2c,0xed,0x7f,0x2b,0xec,0x81,0x2d,0x60,0x33,0x11,0x1,0x0,0x0,0x0,0x0,0x0,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,
-0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0x24,0x11,0x5,0xe0,0x7a,0x38,0xee,0x84,0x3a,0xee,0x82,0x2c,0xf0,0x88,0x2f,0x82,0x4d,0x1a,0x0,0x0,0x0,0x0,0x0,0x0,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0x6f,0x39,0x13,0xef,0x82,0x30,0xed,0x82,0x2f,0xee,0x82,0x2e,0xee,0x82,0x2d,0xee,0x81,0x2c,0xf0,0x83,0x2d,0x88,0x49,0x18,0x3,0x2,0x1,0x0,0x0,0x0,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,
-0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0x24,0x11,0x5,0xe0,0x7c,0x3a,0xee,0x86,0x3b,0xee,0x84,0x2d,0xf1,0x8b,0x30,0x82,0x4d,0x1a,0x0,0x0,0x0,0x0,0x0,0x0,0xff,0x0,0xff,0xff,0x0,0xff,0x54,0x2b,0xf,0xe9,0x80,0x30,0xee,0x87,0x33,0xef,0x88,0x32,0xef,0x88,0x30,0xee,0x85,0x2f,0xef,0x83,0x2e,0xae,0x5f,0x20,0x4,0x2,0x0,0x0,0x0,0x0,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,
-0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0x24,0x11,0x5,0xe0,0x7e,0x3d,0xef,0x8a,0x3d,0xef,0x88,0x2e,0xf1,0x8d,0x31,0x81,0x4d,0x1a,0x0,0x0,0x0,0x0,0x0,0x0,0xff,0x0,0xff,0x29,0x15,0x7,0xd2,0x74,0x2d,0xf0,0x8b,0x36,0xf0,0x8d,0x35,0xef,0x8d,0x35,0xef,0x8b,0x33,0xef,0x88,0x30,0xc4,0x6d,0x26,0x18,0xc,0x4,0x0,0x0,0x0,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,
-0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0x24,0x11,0x5,0xe1,0x80,0x3f,0xf0,0x8d,0x3f,0xef,0x8a,0x2f,0xf1,0x8f,0x32,0x81,0x4e,0x1a,0x0,0x0,0x0,0x0,0x0,0x0,0x9,0x3,0x0,0xb1,0x61,0x26,0xf1,0x8e,0x3a,0xf1,0x90,0x3a,0xf0,0x90,0x38,0xf0,0x90,0x36,0xef,0x8e,0x35,0xd3,0x7a,0x2c,0x22,0x11,0x6,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,
-0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0x24,0x12,0x5,0xe1,0x83,0x42,0xf0,0x90,0x42,0xf0,0x8d,0x30,0xf2,0x92,0x33,0x80,0x4e,0x1b,0x0,0x0,0x0,0x3,0x2,0x0,0x81,0x45,0x1b,0xf1,0x90,0x3e,0xf1,0x94,0x3d,0xf1,0x95,0x3c,0xf0,0x94,0x3b,0xf0,0x92,0x39,0xf0,0x90,0x35,0xd0,0x7b,0x2b,0xc2,0x6e,0x26,0xbe,0x6c,0x25,0x94,0x54,0x1c,0x5b,0x33,0x11,0x1a,0xe,0x4,0x0,0x0,0x0,0x0,0x0,0x0,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,
-0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0x25,0x14,0x6,0xe2,0x86,0x44,0xf1,0x94,0x45,0xf0,0x90,0x31,0xf2,0x94,0x33,0x80,0x4e,0x1b,0x0,0x0,0x0,0x60,0x34,0x14,0xed,0x8c,0x3e,0xf0,0x96,0x42,0xf1,0x97,0x40,0xf1,0x95,0x3f,0xf0,0x91,0x39,0xef,0x8e,0x33,0xef,0x8d,0x31,0xf0,0x8d,0x31,0xef,0x8c,0x30,0xef,0x8c,0x30,0xf0,0x8d,0x31,0xf1,0x8e,0x31,0xe1,0x85,0x2e,0x92,0x55,0x1d,0x25,0x14,0x7,0x1,0x0,0x0,0x0,0x0,0x0,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,
-0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0x26,0x14,0x6,0xe2,0x89,0x46,0xf2,0x97,0x47,0xf1,0x92,0x32,0xf2,0x96,0x34,0x80,0x4e,0x1a,0x32,0x1a,0xa,0xe3,0x87,0x3d,0xf1,0x97,0x45,0xf1,0x98,0x44,0xf1,0x95,0x41,0xf0,0x90,0x39,0xef,0x8d,0x30,0xef,0x8f,0x31,0xf0,0x90,0x32,0xf0,0x92,0x33,0xf1,0x93,0x33,0xf1,0x94,0x34,0xf1,0x94,0x34,0xf0,0x93,0x34,0xf0,0x91,0x32,0xf1,0x91,0x33,0xe2,0x8a,0x30,0x6b,0x3f,0x15,0x1,0x0,0x0,0x0,0x0,0x0,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,
-0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0x26,0x14,0x6,0xe3,0x8b,0x49,0xf2,0x9a,0x49,0xf1,0x93,0x32,0xf2,0x98,0x35,0x8f,0x57,0x1d,0xcf,0x7c,0x38,0xf2,0x99,0x48,0xf1,0x98,0x47,0xf1,0x96,0x44,0xf0,0x90,0x39,0xef,0x8d,0x31,0xf0,0x90,0x31,0xf0,0x92,0x33,0xf1,0x94,0x33,0xf1,0x96,0x35,0xf1,0x98,0x35,0xf1,0x9a,0x36,0xf1,0x9c,0x37,0xf2,0x9d,0x37,0xf2,0x9c,0x37,0xf2,0x99,0x36,0xf0,0x94,0x34,0xf3,0x97,0x35,0x9f,0x60,0x21,0x13,0xb,0x3,0x0,0x0,0x0,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,
-0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0x26,0x14,0x6,0xe3,0x8d,0x4b,0xf2,0x9b,0x4c,0xf1,0x93,0x32,0xf1,0x97,0x35,0xea,0x98,0x43,0xf2,0x9d,0x4d,0xf1,0x9a,0x4b,0xf1,0x99,0x49,0xf0,0x93,0x3d,0xf0,0x8d,0x30,0xf0,0x90,0x32,0xf0,0x92,0x32,0xf0,0x94,0x34,0xf1,0x96,0x34,0xf1,0x98,0x36,0xf1,0x9a,0x36,0xf2,0x9c,0x38,0xf2,0x9f,0x38,0xf2,0xa2,0x39,0xf3,0xa2,0x39,0xf3,0xa2,0x39,0xf2,0x9f,0x38,0xf1,0x99,0x35,0xf2,0x97,0x35,0xba,0x74,0x29,0x13,0xb,0x4,0x0,0x0,0x0,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,
-0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0x26,0x14,0x6,0xe4,0x8e,0x4d,0xf2,0x9d,0x4e,0xf1,0x93,0x32,0xf2,0x9d,0x3f,0xf3,0xa4,0x54,0xf2,0x9d,0x50,0xf1,0x9b,0x4d,0xf2,0x98,0x46,0xef,0x8d,0x31,0xf0,0x8f,0x31,0xf0,0x91,0x32,0xf0,0x93,0x32,0xf1,0x94,0x32,0xf1,0x95,0x32,0xf1,0x98,0x34,0xf1,0x9b,0x36,0xf2,0x9e,0x38,0xf2,0xa1,0x39,0xf2,0xa4,0x3a,0xf3,0xa6,0x3b,0xf4,0xa8,0x3c,0xf3,0xa7,0x3c,0xf3,0xa4,0x3a,0xf2,0x9c,0x37,0xf2,0x99,0x36,0xa9,0x69,0x25,0x2,0x1,0x0,0x0,0x0,0x0,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,
-0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0x26,0x14,0x6,0xe4,0x90,0x50,0xf2,0x9e,0x51,0xf1,0x95,0x35,0xf4,0xa6,0x54,0xf3,0xa2,0x55,0xf2,0x9e,0x51,0xf2,0x9c,0x4e,0xf0,0x8f,0x35,0xf0,0x8e,0x31,0xf0,0x90,0x32,0xf3,0xa5,0x56,0xf7,0xc4,0x8e,0xfa,0xd8,0xb6,0xfb,0xdf,0xc2,0xfa,0xd8,0xb2,0xf7,0xc4,0x89,0xf4,0xae,0x59,0xf2,0xa1,0x38,0xf3,0xa5,0x3b,0xf4,0xa8,0x3c,0xf4,0xab,0x3d,0xf4,0xac,0x3e,0xf4,0xab,0x3d,0xf3,0xa7,0x3b,0xf2,0x9e,0x38,0xf4,0x9e,0x38,0x6f,0x45,0x17,0x1,0x0,0x0,0x0,0x0,0x0,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,
-0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0x19,0xc,0x5,0x63,0x36,0x18,0x3f,0x20,0x9,0x2,0x1,0x0,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0x26,0x14,0x6,0xe4,0x91,0x52,0xf3,0xa2,0x55,0xf2,0x9d,0x43,0xf4,0xa7,0x5b,0xf3,0xa2,0x57,0xf3,0xa0,0x55,0xf1,0x97,0x43,0xf0,0x8d,0x30,0xf2,0x9d,0x4c,0xfa,0xda,0xbc,0xfe,0xfb,0xf7,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xfe,0xfb,0xf6,0xfa,0xdc,0xb5,0xf4,0xae,0x4e,0xf4,0xa9,0x3c,0xf4,0xac,0x3d,0xf4,0xae,0x3f,0xf4,0xaf,0x3f,0xf4,0xad,0x3f,0xf3,0xa8,0x3d,0xf2,0x9d,0x38,0xe2,0x94,0x34,0x23,0x14,0x6,0x0,0x0,0x0,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,
-0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0x11,0x8,0x3,0x9e,0x62,0x39,0xf2,0x91,0x4e,0xe7,0x79,0x29,0x48,0x25,0xc,0x0,0x0,0x0,0xff,0x0,0xff,0xff,0x0,0xff,0x27,0x13,0x6,0xe5,0x93,0x54,0xf3,0xa7,0x59,0xf4,0xa6,0x56,0xf4,0xa7,0x5d,0xf3,0xa4,0x59,0xf3,0xa2,0x57,0xf1,0x90,0x36,0xf4,0xa7,0x5d,0xfe,0xf4,0xeb,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xfd,0xf2,0xe3,0xf6,0xb8,0x5f,0xf4,0xac,0x3e,0xf4,0xaf,0x3f,0xf4,0xb1,0x40,0xf4,0xb2,0x40,0xf5,0xaf,0x3f,0xf3,0xa6,0x3c,0xf3,0x9f,0x38,0x90,0x5d,0x21,0x0,0x0,0x0,0x0,0x0,0x0,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,
-0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0x3d,0x1f,0xf,0xed,0x9c,0x6a,0xef,0x8b,0x4a,0xec,0x78,0x29,0xe4,0x79,0x2a,0x29,0x15,0x7,0x0,0x0,0x0,0xff,0x0,0xff,0x28,0x14,0x6,0xe6,0x97,0x57,0xf5,0xad,0x63,0xf5,0xac,0x62,0xf4,0xa8,0x5f,0xf4,0xa6,0x5c,0xf3,0xa0,0x53,0xf4,0xa9,0x64,0xfe,0xf8,0xf4,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xfe,0xfe,0xff,0xf2,0xf7,0xfa,0xed,0xf4,0xf8,0xfd,0xfe,0xfe,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xfe,0xf7,0xed,0xf5,0xb5,0x53,0xf5,0xb0,0x3f,0xf5,0xb3,0x41,0xf5,0xb4,0x42,0xf5,0xb3,0x41,0xf4,0xad,0x3f,0xf3,0xa1,0x39,0xe4,0x98,0x37,0x1d,0x11,0x5,0x0,0x0,0x0,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,
-0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0x43,0x23,0x10,0xf2,0xa1,0x70,0xf1,0x99,0x61,0xec,0x78,0x2a,0xed,0x7b,0x2a,0xc4,0x69,0x23,0x15,0xa,0x3,0x0,0x0,0x0,0x1d,0xf,0x5,0xe7,0x9b,0x5b,0xf5,0xb1,0x68,0xf5,0xad,0x65,0xf4,0xaa,0x62,0xf4,0xa8,0x5f,0xf3,0xa4,0x59,0xfd,0xec,0xde,0xff,0xff,0xff,0xff,0xff,0xff,0xfc,0xfd,0xfe,0xc3,0xda,0xe9,0x5c,0x9a,0xc5,0x2a,0x7b,0xb4,0x17,0x6f,0xae,0x36,0x81,0xb8,0x91,0xbb,0xd9,0xf0,0xf6,0xfa,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xfc,0xe7,0xc7,0xf5,0xb2,0x43,0xf6,0xb3,0x41,0xf5,0xb5,0x43,0xf5,0xb6,0x43,0xf5,0xb3,0x42,0xf4,0xa8,0x3c,0xf4,0xa2,0x3a,0x66,0x41,0x17,0x0,0x0,0x0,0x0,0x0,0x0,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,
-0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0x22,0x10,0x7,0xd6,0x88,0x5b,0xf2,0xa5,0x76,0xee,0x84,0x3f,0xed,0x7a,0x2a,0xee,0x80,0x2c,0xa5,0x59,0x1e,0x7,0x3,0x1,0x19,0xd,0x4,0xe7,0x9e,0x5e,0xf6,0xb2,0x6b,0xf5,0xae,0x67,0xf5,0xac,0x65,0xf4,0xa9,0x61,0xf8,0xcc,0xa1,0xff,0xff,0xfe,0xff,0xff,0xff,0xfd,0xfe,0xfe,0x97,0xbf,0xdb,0x33,0x83,0xbb,0x24,0x7e,0xb9,0x3,0x6a,0xae,0x0,0x66,0xab,0x0,0x64,0xa9,0x1,0x63,0xa9,0x3c,0x87,0xbd,0xee,0xf5,0xf9,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xfe,0xfd,0xf8,0xc7,0x76,0xf6,0xb4,0x41,0xf5,0xb7,0x43,0xf6,0xb8,0x44,0xf6,0xb6,0x43,0xf5,0xae,0x3f,0xf3,0xa2,0x3a,0xac,0x71,0x29,0x0,0x0,0x0,0x0,0x0,0x0,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,
-0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0x52,0x2c,0x16,0xf0,0xa1,0x71,0xf2,0xa2,0x6f,0xed,0x7e,0x32,0xed,0x7e,0x2b,0xef,0x82,0x2d,0x8a,0x49,0x18,0x1b,0xe,0x4,0xe7,0xa2,0x61,0xf6,0xb3,0x6e,0xf6,0xb0,0x6a,0xf5,0xae,0x67,0xf5,0xab,0x64,0xfe,0xf4,0xeb,0xff,0xff,0xff,0xff,0xff,0xff,0xb4,0xd1,0xe5,0x3e,0x8d,0xc3,0x37,0x8e,0xc5,0x16,0x7a,0xb9,0x0,0x6b,0xaf,0x0,0x68,0xac,0x0,0x65,0xaa,0x0,0x65,0xab,0x0,0x66,0xac,0x4d,0x93,0xc4,0xf8,0xfb,0xfd,0xff,0xff,0xff,0xff,0xff,0xff,0xfc,0xe7,0xc5,0xf6,0xb3,0x40,0xf6,0xb7,0x43,0xf6,0xb9,0x44,0xf6,0xb8,0x45,0xf5,0xb2,0x41,0xf3,0xa5,0x3b,0xe2,0x98,0x37,0x3,0x1,0x0,0x0,0x0,0x0,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,
-0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0x86,0x4e,0x2e,0xf3,0xa6,0x77,0xf1,0x9e,0x66,0xed,0x7e,0x2d,0xee,0x82,0x2c,0xf0,0x85,0x2d,0x7e,0x47,0x17,0xe8,0xa6,0x64,0xf6,0xb5,0x70,0xf6,0xb2,0x6d,0xf5,0xb0,0x6a,0xf7,0xbb,0x80,0xff,0xff,0xff,0xff,0xff,0xff,0xf9,0xfb,0xfd,0x5b,0x9c,0xca,0x42,0x96,0xcb,0x3c,0x93,0xc9,0x9,0x73,0xb6,0x0,0x6b,0xb0,0x0,0x69,0xad,0x0,0x66,0xab,0x0,0x66,0xab,0x0,0x67,0xad,0x4,0x6a,0xaf,0xbb,0xd7,0xe9,0xff,0xff,0xff,0xff,0xff,0xff,0xfe,0xf8,0xee,0xf6,0xb9,0x4f,0xf6,0xb7,0x44,0xf6,0xba,0x45,0xf6,0xba,0x45,0xf5,0xb5,0x43,0xf4,0xa8,0x3d,0xf5,0xa7,0x3d,0x1b,0xf,0x4,0x0,0x0,0x0,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,
-0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0x11,0x8,0x3,0xb0,0x6d,0x45,0xf4,0xaa,0x7b,0xf1,0x9a,0x5b,0xee,0x82,0x2d,0xef,0x86,0x2e,0xee,0x91,0x36,0xf5,0xb5,0x70,0xf6,0xb7,0x73,0xf6,0xb4,0x70,0xf5,0xb1,0x6c,0xf9,0xcc,0xa1,0xff,0xff,0xff,0xff,0xff,0xff,0xd1,0xe2,0xef,0x4b,0x97,0xca,0x47,0x9a,0xce,0x3f,0x95,0xcb,0x3,0x71,0xb5,0x0,0x6c,0xb0,0x0,0x69,0xae,0x0,0x67,0xac,0x0,0x66,0xac,0x0,0x67,0xad,0x0,0x69,0xaf,0x66,0xa5,0xcf,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xfd,0xfa,0xf8,0xc3,0x67,0xf6,0xb8,0x44,0xf6,0xba,0x45,0xf6,0xbb,0x46,0xf6,0xb7,0x44,0xf4,0xab,0x3e,0xf8,0xab,0x3f,0x2a,0x19,0x8,0x0,0x0,0x0,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,
-0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0x2b,0x15,0x9,0xd4,0x8a,0x5c,0xf4,0xac,0x7c,0xf1,0x98,0x54,0xee,0x85,0x2e,0xf1,0x93,0x38,0xf6,0xba,0x75,0xf6,0xb9,0x75,0xf6,0xb6,0x72,0xf6,0xb3,0x6f,0xfa,0xd5,0xb1,0xff,0xff,0xff,0xff,0xff,0xff,0xb0,0xcf,0xe5,0x51,0x9e,0xcf,0x4b,0x9d,0xd0,0x43,0x97,0xcc,0x3,0x71,0xb5,0x0,0x6d,0xb1,0x0,0x6a,0xae,0x0,0x67,0xac,0x0,0x67,0xad,0x0,0x68,0xae,0x0,0x6a,0xb0,0x3b,0x8c,0xc2,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xfe,0xf9,0xc9,0x77,0xf6,0xb8,0x44,0xf6,0xba,0x45,0xf6,0xbc,0x46,0xf6,0xb8,0x44,0xf4,0xad,0x3f,0xf8,0xac,0x3f,0x2a,0x1a,0x8,0x0,0x0,0x0,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,
-0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0x47,0x26,0x12,0xee,0xa3,0x72,0xf4,0xae,0x7b,0xf1,0x97,0x4e,0xf1,0x92,0x38,0xf6,0xbb,0x78,0xf6,0xbb,0x78,0xf6,0xb7,0x75,0xf6,0xb5,0x71,0xfa,0xd6,0xb2,0xff,0xff,0xff,0xff,0xff,0xff,0xad,0xcd,0xe4,0x54,0xa0,0xd1,0x4e,0xa0,0xd1,0x48,0x9b,0xce,0xb,0x76,0xb8,0x0,0x6d,0xb2,0x0,0x6a,0xaf,0x0,0x68,0xad,0x0,0x68,0xad,0x0,0x69,0xae,0x0,0x6b,0xb1,0x36,0x89,0xc1,0xfe,0xfe,0xff,0xff,0xff,0xff,0xff,0xfe,0xfe,0xf9,0xc9,0x76,0xf6,0xb9,0x44,0xf6,0xbb,0x46,0xf6,0xbc,0x47,0xf6,0xb9,0x44,0xf4,0xad,0x3f,0xf8,0xad,0x40,0x2a,0x1a,0x8,0x0,0x0,0x0,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,
-0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0x70,0x42,0x26,0xf4,0xad,0x7b,0xf5,0xb1,0x7d,0xf3,0x9f,0x50,0xf7,0xbc,0x7b,0xf7,0xbc,0x7b,0xf6,0xb9,0x78,0xf6,0xb7,0x74,0xf9,0xd0,0xa6,0xff,0xff,0xff,0xff,0xff,0xff,0xc3,0xda,0xeb,0x56,0xa0,0xd0,0x51,0xa1,0xd2,0x4a,0x9c,0xcf,0x20,0x82,0xbf,0x0,0x6e,0xb2,0x0,0x6b,0xb0,0x0,0x68,0xae,0x0,0x68,0xae,0x0,0x69,0xaf,0x0,0x6b,0xb1,0x50,0x98,0xc9,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xfd,0xf9,0xf8,0xc3,0x66,0xf6,0xb9,0x45,0xf7,0xbb,0x46,0xf6,0xbc,0x47,0xf6,0xb8,0x45,0xf4,0xad,0x3f,0xf8,0xac,0x3f,0x2a,0x19,0x7,0x0,0x0,0x0,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,
-0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xc,0x5,0x0,0xa5,0x67,0x40,0xf5,0xb1,0x7f,0xf5,0xb7,0x7e,0xf7,0xbf,0x80,0xf7,0xbe,0x7d,0xf7,0xbb,0x7b,0xf6,0xb9,0x78,0xf8,0xc2,0x8b,0xff,0xff,0xff,0xff,0xff,0xff,0xee,0xf5,0xf9,0x5b,0xa0,0xce,0x53,0xa2,0xd2,0x4c,0x9e,0xd0,0x3c,0x93,0xc8,0x6,0x71,0xb4,0x0,0x6c,0xb0,0x0,0x69,0xae,0x0,0x69,0xae,0x0,0x6a,0xaf,0x0,0x6b,0xb1,0x9b,0xc5,0xe0,0xff,0xff,0xff,0xff,0xff,0xff,0xfe,0xf7,0xec,0xf6,0xba,0x4e,0xf6,0xb9,0x45,0xf7,0xbb,0x46,0xf6,0xbc,0x47,0xf5,0xb7,0x44,0xf4,0xab,0x3e,0xf5,0xa8,0x3e,0x18,0xd,0x4,0x0,0x0,0x0,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,
-0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0x1f,0x10,0x7,0xc9,0x84,0x56,0xf5,0xb5,0x81,0xf7,0xbf,0x82,0xf8,0xc0,0x80,0xf7,0xbd,0x7d,0xf7,0xba,0x7a,0xf6,0xb8,0x77,0xfe,0xf5,0xec,0xff,0xff,0xff,0xff,0xff,0xff,0x9a,0xc2,0xdf,0x55,0x9f,0xd0,0x4e,0x9f,0xd0,0x47,0x99,0xcc,0x2a,0x87,0xc1,0x3,0x6d,0xb1,0x0,0x69,0xaf,0x0,0x6a,0xaf,0x0,0x6a,0xb0,0x27,0x80,0xbc,0xec,0xf4,0xf9,0xff,0xff,0xff,0xff,0xff,0xff,0xfc,0xe5,0xbf,0xf6,0xb6,0x42,0xf6,0xba,0x46,0xf7,0xbb,0x46,0xf7,0xbb,0x47,0xf5,0xb5,0x43,0xf3,0xa8,0x3d,0xdd,0x97,0x37,0x2,0x1,0x0,0x0,0x0,0x0,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,
-0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0x32,0x1a,0xb,0xe4,0x9d,0x6a,0xf7,0xbd,0x84,0xf8,0xc1,0x83,0xf8,0xbe,0x80,0xf7,0xbd,0x7d,0xf7,0xba,0x79,0xfa,0xd9,0xb6,0xff,0xff,0xff,0xff,0xff,0xff,0xf0,0xf6,0xfa,0x74,0xac,0xd4,0x4f,0x9b,0xcd,0x48,0x99,0xcc,0x41,0x94,0xc8,0x2c,0x85,0xbe,0xb,0x70,0xb3,0x1,0x6a,0xb0,0xb,0x6e,0xb2,0xbf,0xd9,0xeb,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xfe,0xfd,0xf8,0xc8,0x74,0xf6,0xb7,0x44,0xf6,0xba,0x46,0xf7,0xbb,0x46,0xf7,0xb9,0x46,0xf6,0xb2,0x42,0xf4,0xa7,0x3d,0xa6,0x70,0x29,0x0,0x0,0x0,0x0,0x0,0x0,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,
-0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0x4f,0x2e,0x18,0xef,0xaf,0x78,0xf8,0xc1,0x85,0xf8,0xc0,0x82,0xf7,0xbe,0x7f,0xf7,0xbc,0x7d,0xf7,0xbe,0x81,0xfe,0xf3,0xe8,0xff,0xff,0xff,0xff,0xff,0xff,0xf2,0xf7,0xfa,0x91,0xbd,0xdb,0x4f,0x97,0xc8,0x40,0x8e,0xc3,0x37,0x8a,0xc0,0x34,0x88,0xbf,0x57,0x9c,0xca,0xcc,0xe1,0xef,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xfc,0xe4,0xbf,0xf5,0xb6,0x45,0xf6,0xb8,0x45,0xf6,0xba,0x46,0xf7,0xba,0x46,0xf6,0xb7,0x45,0xf5,0xad,0x3f,0xf4,0xa9,0x40,0x5c,0x3d,0x18,0x0,0x0,0x0,0x0,0x0,0x0,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,
-0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0x85,0x55,0x31,0xf7,0xbd,0x84,0xf8,0xc2,0x85,0xf8,0xc0,0x82,0xf7,0xbe,0x80,0xf7,0xbc,0x7d,0xf9,0xcb,0x99,0xfe,0xf9,0xf4,0xff,0xff,0xff,0xff,0xff,0xff,0xfd,0xfe,0xfe,0xe5,0xef,0xf6,0xc1,0xda,0xeb,0xba,0xd5,0xe9,0xd8,0xe8,0xf2,0xf9,0xfb,0xfd,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xfe,0xf3,0xe4,0xf6,0xb9,0x51,0xf5,0xb5,0x43,0xf6,0xb8,0x45,0xf6,0xb9,0x46,0xf6,0xb8,0x46,0xf6,0xb3,0x43,0xf4,0xa7,0x3e,0xdf,0x9d,0x43,0x17,0xd,0x4,0x0,0x0,0x0,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,
-0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0x14,0xa,0x4,0xb2,0x7b,0x4b,0xf8,0xc2,0x88,0xf8,0xc1,0x85,0xf7,0xbf,0x82,0xf7,0xbe,0x80,0xf7,0xbd,0x7d,0xf9,0xca,0x97,0xfe,0xf9,0xf4,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xfd,0xf2,0xe1,0xf7,0xbc,0x5d,0xf5,0xb3,0x42,0xf5,0xb6,0x44,0xf5,0xb7,0x45,0xf6,0xb8,0x45,0xf6,0xb5,0x44,0xf5,0xad,0x40,0xf6,0xae,0x4c,0x88,0x5d,0x27,0x0,0x0,0x0,0x0,0x0,0x0,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,
-0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0x1d,0x10,0x6,0xdb,0xa0,0x68,0xf8,0xc3,0x88,0xf7,0xc1,0x85,0xf7,0xc0,0x82,0xf7,0xbf,0x80,0xf7,0xbe,0x7e,0xf8,0xc4,0x88,0xfc,0xe6,0xcc,0xfe,0xfb,0xf7,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xfe,0xfa,0xf3,0xfa,0xda,0xa9,0xf5,0xb3,0x4a,0xf5,0xb2,0x42,0xf5,0xb3,0x43,0xf5,0xb6,0x44,0xf5,0xb7,0x45,0xf5,0xb5,0x44,0xf5,0xb0,0x42,0xf5,0xad,0x4d,0xdd,0x9e,0x4a,0x19,0xf,0x5,0x0,0x0,0x0,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,
-0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0x50,0x33,0x19,0xec,0xb4,0x7a,0xf8,0xc2,0x87,0xf7,0xc1,0x85,0xf7,0xc1,0x83,0xf7,0xc0,0x80,0xf7,0xc0,0x7f,0xf7,0xc0,0x7c,0xf7,0xc2,0x7e,0xf8,0xcc,0x92,0xfa,0xda,0xb0,0xfb,0xdf,0xb9,0xfa,0xd9,0xad,0xf7,0xc8,0x84,0xf5,0xb4,0x54,0xf4,0xad,0x3f,0xf4,0xaf,0x41,0xf5,0xb2,0x42,0xf5,0xb4,0x43,0xf5,0xb5,0x44,0xf5,0xb4,0x44,0xf5,0xb2,0x46,0xf5,0xb2,0x54,0xf5,0xb4,0x5a,0x5e,0x3e,0x1a,0x0,0x0,0x0,0x0,0x0,0x0,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,
-0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0x71,0x4b,0x29,0xf8,0xc0,0x86,0xf7,0xc3,0x87,0xf7,0xc2,0x85,0xf7,0xc1,0x83,0xf7,0xc2,0x82,0xf7,0xc2,0x7f,0xf7,0xc2,0x7e,0xf6,0xc0,0x76,0xf4,0xb4,0x59,0xf3,0xa8,0x3e,0xf3,0xa7,0x39,0xf3,0xa9,0x3d,0xf4,0xab,0x3e,0xf4,0xad,0x40,0xf4,0xb0,0x41,0xf4,0xb2,0x42,0xf5,0xb2,0x42,0xf5,0xb3,0x45,0xf6,0xb7,0x54,0xf6,0xb7,0x60,0xf6,0xb5,0x5f,0x9d,0x6b,0x31,0x2,0x1,0x0,0x0,0x0,0x0,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,
-0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0x8b,0x5f,0x36,0xf9,0xc1,0x87,0xf7,0xc3,0x88,0xf8,0xc3,0x86,0xf7,0xc3,0x84,0xf8,0xc3,0x81,0xf7,0xc4,0x80,0xf7,0xc4,0x7e,0xf7,0xc4,0x7d,0xf7,0xc3,0x7a,0xf6,0xbd,0x6c,0xf5,0xb7,0x5c,0xf5,0xb5,0x54,0xf5,0xb4,0x50,0xf5,0xb6,0x52,0xf6,0xb9,0x58,0xf6,0xbd,0x62,0xf7,0xbf,0x6a,0xf6,0xba,0x66,0xf6,0xb6,0x63,0xab,0x78,0x39,0xa,0x6,0x2,0x0,0x0,0x0,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,
-0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0x83,0x58,0x32,0xf0,0xb9,0x7f,0xf7,0xc3,0x88,0xf7,0xc3,0x86,0xf8,0xc4,0x84,0xf7,0xc5,0x82,0xf7,0xc5,0x80,0xf7,0xc5,0x7f,0xf8,0xc5,0x7d,0xf7,0xc4,0x7b,0xf7,0xc4,0x79,0xf7,0xc4,0x78,0xf7,0xc3,0x76,0xf7,0xc3,0x74,0xf7,0xc2,0x71,0xf6,0xbe,0x6d,0xf6,0xba,0x6a,0xf4,0xb6,0x65,0x8a,0x5e,0x2c,0xc,0x7,0x3,0x0,0x0,0x0,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,
-0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0x4f,0x33,0x1a,0xd2,0x99,0x60,0xf8,0xc4,0x89,0xf8,0xc3,0x86,0xf8,0xc4,0x84,0xf7,0xc5,0x82,0xf7,0xc5,0x80,0xf7,0xc5,0x7f,0xf7,0xc4,0x7e,0xf7,0xc4,0x7b,0xf7,0xc3,0x79,0xf7,0xc2,0x77,0xf6,0xc0,0x74,0xf6,0xbd,0x71,0xf6,0xbb,0x6e,0xe1,0xa4,0x59,0x5c,0x3d,0x1b,0x1,0x1,0x0,0x0,0x0,0x0,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,
-0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xe,0x6,0x0,0x72,0x4b,0x28,0xd0,0x9a,0x62,0xf7,0xbf,0x80,0xf8,0xc4,0x85,0xf7,0xc3,0x82,0xf7,0xc3,0x80,0xf7,0xc3,0x7e,0xf7,0xc1,0x7c,0xf6,0xc0,0x7a,0xf7,0xbf,0x78,0xf8,0xbc,0x72,0xde,0xa2,0x5d,0x80,0x57,0x2b,0x13,0xb,0x4,0x0,0x0,0x0,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,
-0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0x19,0xe,0x5,0x44,0x2c,0x15,0x81,0x59,0x32,0xb2,0x80,0x4c,0xcb,0x95,0x5b,0xd2,0x9c,0x5f,0xcd,0x97,0x5a,0xb9,0x86,0x4d,0x8b,0x61,0x34,0x4a,0x30,0x17,0x15,0xc,0x5,0x0,0x0,0x0,0x0,0x0,0x0,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,
-0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0x0,0x0,0x0,0x1,0x0,0x0,0x3,0x0,0x0,0x1,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,0xff,0x0,0xff,
+ 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff,
+ 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0x4f, 0x2a, 0xd, 0xa7, 0x5b, 0x1f, 0xb8, 0x66, 0x22, 0x6c, 0x3b, 0x14, 0x5, 0x3, 0x1, 0x0, 0x0, 0x0, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff,
+ 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0x6f, 0x3a, 0x13, 0xea, 0x7f, 0x2c, 0xee, 0x7e, 0x2b, 0xee, 0x7e, 0x2b, 0xef, 0x85, 0x2e, 0x5f, 0x35, 0x12, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff,
+ 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0x43, 0x22, 0xb, 0xed, 0x7f, 0x2c, 0xed, 0x7c, 0x2b, 0xee, 0x7f, 0x2c, 0xee, 0x80, 0x2c, 0xee, 0x80, 0x2c, 0xa8, 0x5f, 0x20, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff,
+ 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0x2e, 0x16, 0x6, 0xd0, 0x6f, 0x26, 0xed, 0x7b, 0x2a, 0xed, 0x7d, 0x2b, 0xee, 0x7f, 0x2c, 0xee, 0x80, 0x2c, 0xee, 0x82, 0x2d, 0x9a, 0x57, 0x1d, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff,
+ 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0x17, 0xb, 0x4, 0xb9, 0x60, 0x21, 0xed, 0x7a, 0x2a, 0xed, 0x7b, 0x2a, 0xed, 0x7e, 0x2b, 0xee, 0x7f, 0x2c, 0xee, 0x7f, 0x2c, 0xee, 0x86, 0x2e, 0x4e, 0x2b, 0xe, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff,
+ 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0x1, 0x0, 0x0, 0x96, 0x4d, 0x19, 0xee, 0x7a, 0x2a, 0xed, 0x79, 0x2a, 0xed, 0x7c, 0x2b, 0xed, 0x7e, 0x2b, 0xed, 0x7e, 0x2b, 0xef, 0x83, 0x2d, 0x98, 0x55, 0x1c, 0x3, 0x1, 0x0, 0x0, 0x0, 0x0, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff,
+ 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0x20, 0xf, 0x5, 0x4b, 0x27, 0xe, 0x21, 0x11, 0x5, 0x0, 0x0, 0x0, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0x67, 0x34, 0x11, 0xed, 0x7b, 0x2a, 0xec, 0x79, 0x29, 0xed, 0x7b, 0x2a, 0xed, 0x7c, 0x2b, 0xed, 0x7d, 0x2b, 0xee, 0x7f, 0x2c, 0xbb, 0x69, 0x24, 0x11, 0x9, 0x3, 0x0, 0x0, 0x0, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff,
+ 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0x38, 0x1c, 0x9, 0xc9, 0x6d, 0x2c, 0xf1, 0x86, 0x36, 0xd7, 0x79, 0x2a, 0x22, 0x12, 0x5, 0x0, 0x0, 0x0, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0x3b, 0x1d, 0x9, 0xe0, 0x74, 0x27, 0xed, 0x7a, 0x2a, 0xed, 0x7c, 0x2a, 0xed, 0x7d, 0x2b, 0xed, 0x7d, 0x2b, 0xed, 0x7d, 0x2b, 0xdc, 0x7a, 0x2a, 0x1e, 0xf, 0x5, 0x0, 0x0, 0x0, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff,
+ 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xa6, 0x56, 0x23, 0xee, 0x83, 0x3b, 0xed, 0x7d, 0x2c, 0xf0, 0x85, 0x2e, 0x75, 0x43, 0x17, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0x25, 0x12, 0x5, 0xc9, 0x68, 0x24, 0xed, 0x7b, 0x2a, 0xed, 0x7d, 0x2b, 0xed, 0x7e, 0x2b, 0xee, 0x7e, 0x2c, 0xed, 0x7d, 0x2b, 0xe3, 0x7d, 0x2b, 0x3b, 0x1f, 0xa, 0x0, 0x0, 0x0, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff,
+ 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0x1c, 0xd, 0x4, 0xd9, 0x74, 0x35, 0xee, 0x83, 0x3a, 0xee, 0x7f, 0x2b, 0xf0, 0x86, 0x2e, 0x83, 0x4d, 0x1a, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xa, 0x5, 0x1, 0xa1, 0x54, 0x1c, 0xee, 0x7e, 0x2c, 0xed, 0x7e, 0x2c, 0xed, 0x7f, 0x2c, 0xed, 0x80, 0x2c, 0xed, 0x7f, 0x2b, 0xec, 0x81, 0x2d, 0x60, 0x33, 0x11, 0x1, 0x0, 0x0, 0x0, 0x0, 0x0, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff,
+ 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0x24, 0x11, 0x5, 0xe0, 0x7a, 0x38, 0xee, 0x84, 0x3a, 0xee, 0x82, 0x2c, 0xf0, 0x88, 0x2f, 0x82, 0x4d, 0x1a, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0x6f, 0x39, 0x13, 0xef, 0x82, 0x30, 0xed, 0x82, 0x2f, 0xee, 0x82, 0x2e, 0xee, 0x82, 0x2d, 0xee, 0x81, 0x2c, 0xf0, 0x83, 0x2d, 0x88, 0x49, 0x18, 0x3, 0x2, 0x1, 0x0, 0x0, 0x0, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff,
+ 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0x24, 0x11, 0x5, 0xe0, 0x7c, 0x3a, 0xee, 0x86, 0x3b, 0xee, 0x84, 0x2d, 0xf1, 0x8b, 0x30, 0x82, 0x4d, 0x1a, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0x54, 0x2b, 0xf, 0xe9, 0x80, 0x30, 0xee, 0x87, 0x33, 0xef, 0x88, 0x32, 0xef, 0x88, 0x30, 0xee, 0x85, 0x2f, 0xef, 0x83, 0x2e, 0xae, 0x5f, 0x20, 0x4, 0x2, 0x0, 0x0, 0x0, 0x0, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff,
+ 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0x24, 0x11, 0x5, 0xe0, 0x7e, 0x3d, 0xef, 0x8a, 0x3d, 0xef, 0x88, 0x2e, 0xf1, 0x8d, 0x31, 0x81, 0x4d, 0x1a, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xff, 0x0, 0xff, 0x29, 0x15, 0x7, 0xd2, 0x74, 0x2d, 0xf0, 0x8b, 0x36, 0xf0, 0x8d, 0x35, 0xef, 0x8d, 0x35, 0xef, 0x8b, 0x33, 0xef, 0x88, 0x30, 0xc4, 0x6d, 0x26, 0x18, 0xc, 0x4, 0x0, 0x0, 0x0, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff,
+ 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0x24, 0x11, 0x5, 0xe1, 0x80, 0x3f, 0xf0, 0x8d, 0x3f, 0xef, 0x8a, 0x2f, 0xf1, 0x8f, 0x32, 0x81, 0x4e, 0x1a, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x9, 0x3, 0x0, 0xb1, 0x61, 0x26, 0xf1, 0x8e, 0x3a, 0xf1, 0x90, 0x3a, 0xf0, 0x90, 0x38, 0xf0, 0x90, 0x36, 0xef, 0x8e, 0x35, 0xd3, 0x7a, 0x2c, 0x22, 0x11, 0x6, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff,
+ 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0x24, 0x12, 0x5, 0xe1, 0x83, 0x42, 0xf0, 0x90, 0x42, 0xf0, 0x8d, 0x30, 0xf2, 0x92, 0x33, 0x80, 0x4e, 0x1b, 0x0, 0x0, 0x0, 0x3, 0x2, 0x0, 0x81, 0x45, 0x1b, 0xf1, 0x90, 0x3e, 0xf1, 0x94, 0x3d, 0xf1, 0x95, 0x3c, 0xf0, 0x94, 0x3b, 0xf0, 0x92, 0x39, 0xf0, 0x90, 0x35, 0xd0, 0x7b, 0x2b, 0xc2, 0x6e, 0x26, 0xbe, 0x6c, 0x25, 0x94, 0x54, 0x1c, 0x5b, 0x33, 0x11, 0x1a, 0xe, 0x4, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff,
+ 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0x25, 0x14, 0x6, 0xe2, 0x86, 0x44, 0xf1, 0x94, 0x45, 0xf0, 0x90, 0x31, 0xf2, 0x94, 0x33, 0x80, 0x4e, 0x1b, 0x0, 0x0, 0x0, 0x60, 0x34, 0x14, 0xed, 0x8c, 0x3e, 0xf0, 0x96, 0x42, 0xf1, 0x97, 0x40, 0xf1, 0x95, 0x3f, 0xf0, 0x91, 0x39, 0xef, 0x8e, 0x33, 0xef, 0x8d, 0x31, 0xf0, 0x8d, 0x31, 0xef, 0x8c, 0x30, 0xef, 0x8c, 0x30, 0xf0, 0x8d, 0x31, 0xf1, 0x8e, 0x31, 0xe1, 0x85, 0x2e, 0x92, 0x55, 0x1d, 0x25, 0x14, 0x7, 0x1, 0x0, 0x0, 0x0, 0x0, 0x0, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff,
+ 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0x26, 0x14, 0x6, 0xe2, 0x89, 0x46, 0xf2, 0x97, 0x47, 0xf1, 0x92, 0x32, 0xf2, 0x96, 0x34, 0x80, 0x4e, 0x1a, 0x32, 0x1a, 0xa, 0xe3, 0x87, 0x3d, 0xf1, 0x97, 0x45, 0xf1, 0x98, 0x44, 0xf1, 0x95, 0x41, 0xf0, 0x90, 0x39, 0xef, 0x8d, 0x30, 0xef, 0x8f, 0x31, 0xf0, 0x90, 0x32, 0xf0, 0x92, 0x33, 0xf1, 0x93, 0x33, 0xf1, 0x94, 0x34, 0xf1, 0x94, 0x34, 0xf0, 0x93, 0x34, 0xf0, 0x91, 0x32, 0xf1, 0x91, 0x33, 0xe2, 0x8a, 0x30, 0x6b, 0x3f, 0x15, 0x1, 0x0, 0x0, 0x0, 0x0, 0x0, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff,
+ 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0x26, 0x14, 0x6, 0xe3, 0x8b, 0x49, 0xf2, 0x9a, 0x49, 0xf1, 0x93, 0x32, 0xf2, 0x98, 0x35, 0x8f, 0x57, 0x1d, 0xcf, 0x7c, 0x38, 0xf2, 0x99, 0x48, 0xf1, 0x98, 0x47, 0xf1, 0x96, 0x44, 0xf0, 0x90, 0x39, 0xef, 0x8d, 0x31, 0xf0, 0x90, 0x31, 0xf0, 0x92, 0x33, 0xf1, 0x94, 0x33, 0xf1, 0x96, 0x35, 0xf1, 0x98, 0x35, 0xf1, 0x9a, 0x36, 0xf1, 0x9c, 0x37, 0xf2, 0x9d, 0x37, 0xf2, 0x9c, 0x37, 0xf2, 0x99, 0x36, 0xf0, 0x94, 0x34, 0xf3, 0x97, 0x35, 0x9f, 0x60, 0x21, 0x13, 0xb, 0x3, 0x0, 0x0, 0x0, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff,
+ 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0x26, 0x14, 0x6, 0xe3, 0x8d, 0x4b, 0xf2, 0x9b, 0x4c, 0xf1, 0x93, 0x32, 0xf1, 0x97, 0x35, 0xea, 0x98, 0x43, 0xf2, 0x9d, 0x4d, 0xf1, 0x9a, 0x4b, 0xf1, 0x99, 0x49, 0xf0, 0x93, 0x3d, 0xf0, 0x8d, 0x30, 0xf0, 0x90, 0x32, 0xf0, 0x92, 0x32, 0xf0, 0x94, 0x34, 0xf1, 0x96, 0x34, 0xf1, 0x98, 0x36, 0xf1, 0x9a, 0x36, 0xf2, 0x9c, 0x38, 0xf2, 0x9f, 0x38, 0xf2, 0xa2, 0x39, 0xf3, 0xa2, 0x39, 0xf3, 0xa2, 0x39, 0xf2, 0x9f, 0x38, 0xf1, 0x99, 0x35, 0xf2, 0x97, 0x35, 0xba, 0x74, 0x29, 0x13, 0xb, 0x4, 0x0, 0x0, 0x0, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff,
+ 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0x26, 0x14, 0x6, 0xe4, 0x8e, 0x4d, 0xf2, 0x9d, 0x4e, 0xf1, 0x93, 0x32, 0xf2, 0x9d, 0x3f, 0xf3, 0xa4, 0x54, 0xf2, 0x9d, 0x50, 0xf1, 0x9b, 0x4d, 0xf2, 0x98, 0x46, 0xef, 0x8d, 0x31, 0xf0, 0x8f, 0x31, 0xf0, 0x91, 0x32, 0xf0, 0x93, 0x32, 0xf1, 0x94, 0x32, 0xf1, 0x95, 0x32, 0xf1, 0x98, 0x34, 0xf1, 0x9b, 0x36, 0xf2, 0x9e, 0x38, 0xf2, 0xa1, 0x39, 0xf2, 0xa4, 0x3a, 0xf3, 0xa6, 0x3b, 0xf4, 0xa8, 0x3c, 0xf3, 0xa7, 0x3c, 0xf3, 0xa4, 0x3a, 0xf2, 0x9c, 0x37, 0xf2, 0x99, 0x36, 0xa9, 0x69, 0x25, 0x2, 0x1, 0x0, 0x0, 0x0, 0x0, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff,
+ 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0x26, 0x14, 0x6, 0xe4, 0x90, 0x50, 0xf2, 0x9e, 0x51, 0xf1, 0x95, 0x35, 0xf4, 0xa6, 0x54, 0xf3, 0xa2, 0x55, 0xf2, 0x9e, 0x51, 0xf2, 0x9c, 0x4e, 0xf0, 0x8f, 0x35, 0xf0, 0x8e, 0x31, 0xf0, 0x90, 0x32, 0xf3, 0xa5, 0x56, 0xf7, 0xc4, 0x8e, 0xfa, 0xd8, 0xb6, 0xfb, 0xdf, 0xc2, 0xfa, 0xd8, 0xb2, 0xf7, 0xc4, 0x89, 0xf4, 0xae, 0x59, 0xf2, 0xa1, 0x38, 0xf3, 0xa5, 0x3b, 0xf4, 0xa8, 0x3c, 0xf4, 0xab, 0x3d, 0xf4, 0xac, 0x3e, 0xf4, 0xab, 0x3d, 0xf3, 0xa7, 0x3b, 0xf2, 0x9e, 0x38, 0xf4, 0x9e, 0x38, 0x6f, 0x45, 0x17, 0x1, 0x0, 0x0, 0x0, 0x0, 0x0, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff,
+ 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0x19, 0xc, 0x5, 0x63, 0x36, 0x18, 0x3f, 0x20, 0x9, 0x2, 0x1, 0x0, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0x26, 0x14, 0x6, 0xe4, 0x91, 0x52, 0xf3, 0xa2, 0x55, 0xf2, 0x9d, 0x43, 0xf4, 0xa7, 0x5b, 0xf3, 0xa2, 0x57, 0xf3, 0xa0, 0x55, 0xf1, 0x97, 0x43, 0xf0, 0x8d, 0x30, 0xf2, 0x9d, 0x4c, 0xfa, 0xda, 0xbc, 0xfe, 0xfb, 0xf7, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfe, 0xfb, 0xf6, 0xfa, 0xdc, 0xb5, 0xf4, 0xae, 0x4e, 0xf4, 0xa9, 0x3c, 0xf4, 0xac, 0x3d, 0xf4, 0xae, 0x3f, 0xf4, 0xaf, 0x3f, 0xf4, 0xad, 0x3f, 0xf3, 0xa8, 0x3d, 0xf2, 0x9d, 0x38, 0xe2, 0x94, 0x34, 0x23, 0x14, 0x6, 0x0, 0x0, 0x0, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff,
+ 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0x11, 0x8, 0x3, 0x9e, 0x62, 0x39, 0xf2, 0x91, 0x4e, 0xe7, 0x79, 0x29, 0x48, 0x25, 0xc, 0x0, 0x0, 0x0, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0x27, 0x13, 0x6, 0xe5, 0x93, 0x54, 0xf3, 0xa7, 0x59, 0xf4, 0xa6, 0x56, 0xf4, 0xa7, 0x5d, 0xf3, 0xa4, 0x59, 0xf3, 0xa2, 0x57, 0xf1, 0x90, 0x36, 0xf4, 0xa7, 0x5d, 0xfe, 0xf4, 0xeb, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfd, 0xf2, 0xe3, 0xf6, 0xb8, 0x5f, 0xf4, 0xac, 0x3e, 0xf4, 0xaf, 0x3f, 0xf4, 0xb1, 0x40, 0xf4, 0xb2, 0x40, 0xf5, 0xaf, 0x3f, 0xf3, 0xa6, 0x3c, 0xf3, 0x9f, 0x38, 0x90, 0x5d, 0x21, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff,
+ 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0x3d, 0x1f, 0xf, 0xed, 0x9c, 0x6a, 0xef, 0x8b, 0x4a, 0xec, 0x78, 0x29, 0xe4, 0x79, 0x2a, 0x29, 0x15, 0x7, 0x0, 0x0, 0x0, 0xff, 0x0, 0xff, 0x28, 0x14, 0x6, 0xe6, 0x97, 0x57, 0xf5, 0xad, 0x63, 0xf5, 0xac, 0x62, 0xf4, 0xa8, 0x5f, 0xf4, 0xa6, 0x5c, 0xf3, 0xa0, 0x53, 0xf4, 0xa9, 0x64, 0xfe, 0xf8, 0xf4, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfe, 0xfe, 0xff, 0xf2, 0xf7, 0xfa, 0xed, 0xf4, 0xf8, 0xfd, 0xfe, 0xfe, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfe, 0xf7, 0xed, 0xf5, 0xb5, 0x53, 0xf5, 0xb0, 0x3f, 0xf5, 0xb3, 0x41, 0xf5, 0xb4, 0x42, 0xf5, 0xb3, 0x41, 0xf4, 0xad, 0x3f, 0xf3, 0xa1, 0x39, 0xe4, 0x98, 0x37, 0x1d, 0x11, 0x5, 0x0, 0x0, 0x0, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff,
+ 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0x43, 0x23, 0x10, 0xf2, 0xa1, 0x70, 0xf1, 0x99, 0x61, 0xec, 0x78, 0x2a, 0xed, 0x7b, 0x2a, 0xc4, 0x69, 0x23, 0x15, 0xa, 0x3, 0x0, 0x0, 0x0, 0x1d, 0xf, 0x5, 0xe7, 0x9b, 0x5b, 0xf5, 0xb1, 0x68, 0xf5, 0xad, 0x65, 0xf4, 0xaa, 0x62, 0xf4, 0xa8, 0x5f, 0xf3, 0xa4, 0x59, 0xfd, 0xec, 0xde, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfc, 0xfd, 0xfe, 0xc3, 0xda, 0xe9, 0x5c, 0x9a, 0xc5, 0x2a, 0x7b, 0xb4, 0x17, 0x6f, 0xae, 0x36, 0x81, 0xb8, 0x91, 0xbb, 0xd9, 0xf0, 0xf6, 0xfa, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfc, 0xe7, 0xc7, 0xf5, 0xb2, 0x43, 0xf6, 0xb3, 0x41, 0xf5, 0xb5, 0x43, 0xf5, 0xb6, 0x43, 0xf5, 0xb3, 0x42, 0xf4, 0xa8, 0x3c, 0xf4, 0xa2, 0x3a, 0x66, 0x41, 0x17, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff,
+ 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0x22, 0x10, 0x7, 0xd6, 0x88, 0x5b, 0xf2, 0xa5, 0x76, 0xee, 0x84, 0x3f, 0xed, 0x7a, 0x2a, 0xee, 0x80, 0x2c, 0xa5, 0x59, 0x1e, 0x7, 0x3, 0x1, 0x19, 0xd, 0x4, 0xe7, 0x9e, 0x5e, 0xf6, 0xb2, 0x6b, 0xf5, 0xae, 0x67, 0xf5, 0xac, 0x65, 0xf4, 0xa9, 0x61, 0xf8, 0xcc, 0xa1, 0xff, 0xff, 0xfe, 0xff, 0xff, 0xff, 0xfd, 0xfe, 0xfe, 0x97, 0xbf, 0xdb, 0x33, 0x83, 0xbb, 0x24, 0x7e, 0xb9, 0x3, 0x6a, 0xae, 0x0, 0x66, 0xab, 0x0, 0x64, 0xa9, 0x1, 0x63, 0xa9, 0x3c, 0x87, 0xbd, 0xee, 0xf5, 0xf9, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfe, 0xfd, 0xf8, 0xc7, 0x76, 0xf6, 0xb4, 0x41, 0xf5, 0xb7, 0x43, 0xf6, 0xb8, 0x44, 0xf6, 0xb6, 0x43, 0xf5, 0xae, 0x3f, 0xf3, 0xa2, 0x3a, 0xac, 0x71, 0x29, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff,
+ 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0x52, 0x2c, 0x16, 0xf0, 0xa1, 0x71, 0xf2, 0xa2, 0x6f, 0xed, 0x7e, 0x32, 0xed, 0x7e, 0x2b, 0xef, 0x82, 0x2d, 0x8a, 0x49, 0x18, 0x1b, 0xe, 0x4, 0xe7, 0xa2, 0x61, 0xf6, 0xb3, 0x6e, 0xf6, 0xb0, 0x6a, 0xf5, 0xae, 0x67, 0xf5, 0xab, 0x64, 0xfe, 0xf4, 0xeb, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xb4, 0xd1, 0xe5, 0x3e, 0x8d, 0xc3, 0x37, 0x8e, 0xc5, 0x16, 0x7a, 0xb9, 0x0, 0x6b, 0xaf, 0x0, 0x68, 0xac, 0x0, 0x65, 0xaa, 0x0, 0x65, 0xab, 0x0, 0x66, 0xac, 0x4d, 0x93, 0xc4, 0xf8, 0xfb, 0xfd, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfc, 0xe7, 0xc5, 0xf6, 0xb3, 0x40, 0xf6, 0xb7, 0x43, 0xf6, 0xb9, 0x44, 0xf6, 0xb8, 0x45, 0xf5, 0xb2, 0x41, 0xf3, 0xa5, 0x3b, 0xe2, 0x98, 0x37, 0x3, 0x1, 0x0, 0x0, 0x0, 0x0, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff,
+ 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0x86, 0x4e, 0x2e, 0xf3, 0xa6, 0x77, 0xf1, 0x9e, 0x66, 0xed, 0x7e, 0x2d, 0xee, 0x82, 0x2c, 0xf0, 0x85, 0x2d, 0x7e, 0x47, 0x17, 0xe8, 0xa6, 0x64, 0xf6, 0xb5, 0x70, 0xf6, 0xb2, 0x6d, 0xf5, 0xb0, 0x6a, 0xf7, 0xbb, 0x80, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf9, 0xfb, 0xfd, 0x5b, 0x9c, 0xca, 0x42, 0x96, 0xcb, 0x3c, 0x93, 0xc9, 0x9, 0x73, 0xb6, 0x0, 0x6b, 0xb0, 0x0, 0x69, 0xad, 0x0, 0x66, 0xab, 0x0, 0x66, 0xab, 0x0, 0x67, 0xad, 0x4, 0x6a, 0xaf, 0xbb, 0xd7, 0xe9, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfe, 0xf8, 0xee, 0xf6, 0xb9, 0x4f, 0xf6, 0xb7, 0x44, 0xf6, 0xba, 0x45, 0xf6, 0xba, 0x45, 0xf5, 0xb5, 0x43, 0xf4, 0xa8, 0x3d, 0xf5, 0xa7, 0x3d, 0x1b, 0xf, 0x4, 0x0, 0x0, 0x0, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff,
+ 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0x11, 0x8, 0x3, 0xb0, 0x6d, 0x45, 0xf4, 0xaa, 0x7b, 0xf1, 0x9a, 0x5b, 0xee, 0x82, 0x2d, 0xef, 0x86, 0x2e, 0xee, 0x91, 0x36, 0xf5, 0xb5, 0x70, 0xf6, 0xb7, 0x73, 0xf6, 0xb4, 0x70, 0xf5, 0xb1, 0x6c, 0xf9, 0xcc, 0xa1, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xd1, 0xe2, 0xef, 0x4b, 0x97, 0xca, 0x47, 0x9a, 0xce, 0x3f, 0x95, 0xcb, 0x3, 0x71, 0xb5, 0x0, 0x6c, 0xb0, 0x0, 0x69, 0xae, 0x0, 0x67, 0xac, 0x0, 0x66, 0xac, 0x0, 0x67, 0xad, 0x0, 0x69, 0xaf, 0x66, 0xa5, 0xcf, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfd, 0xfa, 0xf8, 0xc3, 0x67, 0xf6, 0xb8, 0x44, 0xf6, 0xba, 0x45, 0xf6, 0xbb, 0x46, 0xf6, 0xb7, 0x44, 0xf4, 0xab, 0x3e, 0xf8, 0xab, 0x3f, 0x2a, 0x19, 0x8, 0x0, 0x0, 0x0, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff,
+ 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0x2b, 0x15, 0x9, 0xd4, 0x8a, 0x5c, 0xf4, 0xac, 0x7c, 0xf1, 0x98, 0x54, 0xee, 0x85, 0x2e, 0xf1, 0x93, 0x38, 0xf6, 0xba, 0x75, 0xf6, 0xb9, 0x75, 0xf6, 0xb6, 0x72, 0xf6, 0xb3, 0x6f, 0xfa, 0xd5, 0xb1, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xb0, 0xcf, 0xe5, 0x51, 0x9e, 0xcf, 0x4b, 0x9d, 0xd0, 0x43, 0x97, 0xcc, 0x3, 0x71, 0xb5, 0x0, 0x6d, 0xb1, 0x0, 0x6a, 0xae, 0x0, 0x67, 0xac, 0x0, 0x67, 0xad, 0x0, 0x68, 0xae, 0x0, 0x6a, 0xb0, 0x3b, 0x8c, 0xc2, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfe, 0xf9, 0xc9, 0x77, 0xf6, 0xb8, 0x44, 0xf6, 0xba, 0x45, 0xf6, 0xbc, 0x46, 0xf6, 0xb8, 0x44, 0xf4, 0xad, 0x3f, 0xf8, 0xac, 0x3f, 0x2a, 0x1a, 0x8, 0x0, 0x0, 0x0, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff,
+ 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0x47, 0x26, 0x12, 0xee, 0xa3, 0x72, 0xf4, 0xae, 0x7b, 0xf1, 0x97, 0x4e, 0xf1, 0x92, 0x38, 0xf6, 0xbb, 0x78, 0xf6, 0xbb, 0x78, 0xf6, 0xb7, 0x75, 0xf6, 0xb5, 0x71, 0xfa, 0xd6, 0xb2, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xad, 0xcd, 0xe4, 0x54, 0xa0, 0xd1, 0x4e, 0xa0, 0xd1, 0x48, 0x9b, 0xce, 0xb, 0x76, 0xb8, 0x0, 0x6d, 0xb2, 0x0, 0x6a, 0xaf, 0x0, 0x68, 0xad, 0x0, 0x68, 0xad, 0x0, 0x69, 0xae, 0x0, 0x6b, 0xb1, 0x36, 0x89, 0xc1, 0xfe, 0xfe, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfe, 0xfe, 0xf9, 0xc9, 0x76, 0xf6, 0xb9, 0x44, 0xf6, 0xbb, 0x46, 0xf6, 0xbc, 0x47, 0xf6, 0xb9, 0x44, 0xf4, 0xad, 0x3f, 0xf8, 0xad, 0x40, 0x2a, 0x1a, 0x8, 0x0, 0x0, 0x0, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff,
+ 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0x70, 0x42, 0x26, 0xf4, 0xad, 0x7b, 0xf5, 0xb1, 0x7d, 0xf3, 0x9f, 0x50, 0xf7, 0xbc, 0x7b, 0xf7, 0xbc, 0x7b, 0xf6, 0xb9, 0x78, 0xf6, 0xb7, 0x74, 0xf9, 0xd0, 0xa6, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xc3, 0xda, 0xeb, 0x56, 0xa0, 0xd0, 0x51, 0xa1, 0xd2, 0x4a, 0x9c, 0xcf, 0x20, 0x82, 0xbf, 0x0, 0x6e, 0xb2, 0x0, 0x6b, 0xb0, 0x0, 0x68, 0xae, 0x0, 0x68, 0xae, 0x0, 0x69, 0xaf, 0x0, 0x6b, 0xb1, 0x50, 0x98, 0xc9, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfd, 0xf9, 0xf8, 0xc3, 0x66, 0xf6, 0xb9, 0x45, 0xf7, 0xbb, 0x46, 0xf6, 0xbc, 0x47, 0xf6, 0xb8, 0x45, 0xf4, 0xad, 0x3f, 0xf8, 0xac, 0x3f, 0x2a, 0x19, 0x7, 0x0, 0x0, 0x0, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff,
+ 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xc, 0x5, 0x0, 0xa5, 0x67, 0x40, 0xf5, 0xb1, 0x7f, 0xf5, 0xb7, 0x7e, 0xf7, 0xbf, 0x80, 0xf7, 0xbe, 0x7d, 0xf7, 0xbb, 0x7b, 0xf6, 0xb9, 0x78, 0xf8, 0xc2, 0x8b, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xee, 0xf5, 0xf9, 0x5b, 0xa0, 0xce, 0x53, 0xa2, 0xd2, 0x4c, 0x9e, 0xd0, 0x3c, 0x93, 0xc8, 0x6, 0x71, 0xb4, 0x0, 0x6c, 0xb0, 0x0, 0x69, 0xae, 0x0, 0x69, 0xae, 0x0, 0x6a, 0xaf, 0x0, 0x6b, 0xb1, 0x9b, 0xc5, 0xe0, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfe, 0xf7, 0xec, 0xf6, 0xba, 0x4e, 0xf6, 0xb9, 0x45, 0xf7, 0xbb, 0x46, 0xf6, 0xbc, 0x47, 0xf5, 0xb7, 0x44, 0xf4, 0xab, 0x3e, 0xf5, 0xa8, 0x3e, 0x18, 0xd, 0x4, 0x0, 0x0, 0x0, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff,
+ 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0x1f, 0x10, 0x7, 0xc9, 0x84, 0x56, 0xf5, 0xb5, 0x81, 0xf7, 0xbf, 0x82, 0xf8, 0xc0, 0x80, 0xf7, 0xbd, 0x7d, 0xf7, 0xba, 0x7a, 0xf6, 0xb8, 0x77, 0xfe, 0xf5, 0xec, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x9a, 0xc2, 0xdf, 0x55, 0x9f, 0xd0, 0x4e, 0x9f, 0xd0, 0x47, 0x99, 0xcc, 0x2a, 0x87, 0xc1, 0x3, 0x6d, 0xb1, 0x0, 0x69, 0xaf, 0x0, 0x6a, 0xaf, 0x0, 0x6a, 0xb0, 0x27, 0x80, 0xbc, 0xec, 0xf4, 0xf9, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfc, 0xe5, 0xbf, 0xf6, 0xb6, 0x42, 0xf6, 0xba, 0x46, 0xf7, 0xbb, 0x46, 0xf7, 0xbb, 0x47, 0xf5, 0xb5, 0x43, 0xf3, 0xa8, 0x3d, 0xdd, 0x97, 0x37, 0x2, 0x1, 0x0, 0x0, 0x0, 0x0, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff,
+ 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0x32, 0x1a, 0xb, 0xe4, 0x9d, 0x6a, 0xf7, 0xbd, 0x84, 0xf8, 0xc1, 0x83, 0xf8, 0xbe, 0x80, 0xf7, 0xbd, 0x7d, 0xf7, 0xba, 0x79, 0xfa, 0xd9, 0xb6, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf0, 0xf6, 0xfa, 0x74, 0xac, 0xd4, 0x4f, 0x9b, 0xcd, 0x48, 0x99, 0xcc, 0x41, 0x94, 0xc8, 0x2c, 0x85, 0xbe, 0xb, 0x70, 0xb3, 0x1, 0x6a, 0xb0, 0xb, 0x6e, 0xb2, 0xbf, 0xd9, 0xeb, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfe, 0xfd, 0xf8, 0xc8, 0x74, 0xf6, 0xb7, 0x44, 0xf6, 0xba, 0x46, 0xf7, 0xbb, 0x46, 0xf7, 0xb9, 0x46, 0xf6, 0xb2, 0x42, 0xf4, 0xa7, 0x3d, 0xa6, 0x70, 0x29, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff,
+ 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0x4f, 0x2e, 0x18, 0xef, 0xaf, 0x78, 0xf8, 0xc1, 0x85, 0xf8, 0xc0, 0x82, 0xf7, 0xbe, 0x7f, 0xf7, 0xbc, 0x7d, 0xf7, 0xbe, 0x81, 0xfe, 0xf3, 0xe8, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf2, 0xf7, 0xfa, 0x91, 0xbd, 0xdb, 0x4f, 0x97, 0xc8, 0x40, 0x8e, 0xc3, 0x37, 0x8a, 0xc0, 0x34, 0x88, 0xbf, 0x57, 0x9c, 0xca, 0xcc, 0xe1, 0xef, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfc, 0xe4, 0xbf, 0xf5, 0xb6, 0x45, 0xf6, 0xb8, 0x45, 0xf6, 0xba, 0x46, 0xf7, 0xba, 0x46, 0xf6, 0xb7, 0x45, 0xf5, 0xad, 0x3f, 0xf4, 0xa9, 0x40, 0x5c, 0x3d, 0x18, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff,
+ 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0x85, 0x55, 0x31, 0xf7, 0xbd, 0x84, 0xf8, 0xc2, 0x85, 0xf8, 0xc0, 0x82, 0xf7, 0xbe, 0x80, 0xf7, 0xbc, 0x7d, 0xf9, 0xcb, 0x99, 0xfe, 0xf9, 0xf4, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfd, 0xfe, 0xfe, 0xe5, 0xef, 0xf6, 0xc1, 0xda, 0xeb, 0xba, 0xd5, 0xe9, 0xd8, 0xe8, 0xf2, 0xf9, 0xfb, 0xfd, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfe, 0xf3, 0xe4, 0xf6, 0xb9, 0x51, 0xf5, 0xb5, 0x43, 0xf6, 0xb8, 0x45, 0xf6, 0xb9, 0x46, 0xf6, 0xb8, 0x46, 0xf6, 0xb3, 0x43, 0xf4, 0xa7, 0x3e, 0xdf, 0x9d, 0x43, 0x17, 0xd, 0x4, 0x0, 0x0, 0x0, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff,
+ 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0x14, 0xa, 0x4, 0xb2, 0x7b, 0x4b, 0xf8, 0xc2, 0x88, 0xf8, 0xc1, 0x85, 0xf7, 0xbf, 0x82, 0xf7, 0xbe, 0x80, 0xf7, 0xbd, 0x7d, 0xf9, 0xca, 0x97, 0xfe, 0xf9, 0xf4, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfd, 0xf2, 0xe1, 0xf7, 0xbc, 0x5d, 0xf5, 0xb3, 0x42, 0xf5, 0xb6, 0x44, 0xf5, 0xb7, 0x45, 0xf6, 0xb8, 0x45, 0xf6, 0xb5, 0x44, 0xf5, 0xad, 0x40, 0xf6, 0xae, 0x4c, 0x88, 0x5d, 0x27, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff,
+ 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0x1d, 0x10, 0x6, 0xdb, 0xa0, 0x68, 0xf8, 0xc3, 0x88, 0xf7, 0xc1, 0x85, 0xf7, 0xc0, 0x82, 0xf7, 0xbf, 0x80, 0xf7, 0xbe, 0x7e, 0xf8, 0xc4, 0x88, 0xfc, 0xe6, 0xcc, 0xfe, 0xfb, 0xf7, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfe, 0xfa, 0xf3, 0xfa, 0xda, 0xa9, 0xf5, 0xb3, 0x4a, 0xf5, 0xb2, 0x42, 0xf5, 0xb3, 0x43, 0xf5, 0xb6, 0x44, 0xf5, 0xb7, 0x45, 0xf5, 0xb5, 0x44, 0xf5, 0xb0, 0x42, 0xf5, 0xad, 0x4d, 0xdd, 0x9e, 0x4a, 0x19, 0xf, 0x5, 0x0, 0x0, 0x0, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff,
+ 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0x50, 0x33, 0x19, 0xec, 0xb4, 0x7a, 0xf8, 0xc2, 0x87, 0xf7, 0xc1, 0x85, 0xf7, 0xc1, 0x83, 0xf7, 0xc0, 0x80, 0xf7, 0xc0, 0x7f, 0xf7, 0xc0, 0x7c, 0xf7, 0xc2, 0x7e, 0xf8, 0xcc, 0x92, 0xfa, 0xda, 0xb0, 0xfb, 0xdf, 0xb9, 0xfa, 0xd9, 0xad, 0xf7, 0xc8, 0x84, 0xf5, 0xb4, 0x54, 0xf4, 0xad, 0x3f, 0xf4, 0xaf, 0x41, 0xf5, 0xb2, 0x42, 0xf5, 0xb4, 0x43, 0xf5, 0xb5, 0x44, 0xf5, 0xb4, 0x44, 0xf5, 0xb2, 0x46, 0xf5, 0xb2, 0x54, 0xf5, 0xb4, 0x5a, 0x5e, 0x3e, 0x1a, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff,
+ 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0x71, 0x4b, 0x29, 0xf8, 0xc0, 0x86, 0xf7, 0xc3, 0x87, 0xf7, 0xc2, 0x85, 0xf7, 0xc1, 0x83, 0xf7, 0xc2, 0x82, 0xf7, 0xc2, 0x7f, 0xf7, 0xc2, 0x7e, 0xf6, 0xc0, 0x76, 0xf4, 0xb4, 0x59, 0xf3, 0xa8, 0x3e, 0xf3, 0xa7, 0x39, 0xf3, 0xa9, 0x3d, 0xf4, 0xab, 0x3e, 0xf4, 0xad, 0x40, 0xf4, 0xb0, 0x41, 0xf4, 0xb2, 0x42, 0xf5, 0xb2, 0x42, 0xf5, 0xb3, 0x45, 0xf6, 0xb7, 0x54, 0xf6, 0xb7, 0x60, 0xf6, 0xb5, 0x5f, 0x9d, 0x6b, 0x31, 0x2, 0x1, 0x0, 0x0, 0x0, 0x0, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff,
+ 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0x8b, 0x5f, 0x36, 0xf9, 0xc1, 0x87, 0xf7, 0xc3, 0x88, 0xf8, 0xc3, 0x86, 0xf7, 0xc3, 0x84, 0xf8, 0xc3, 0x81, 0xf7, 0xc4, 0x80, 0xf7, 0xc4, 0x7e, 0xf7, 0xc4, 0x7d, 0xf7, 0xc3, 0x7a, 0xf6, 0xbd, 0x6c, 0xf5, 0xb7, 0x5c, 0xf5, 0xb5, 0x54, 0xf5, 0xb4, 0x50, 0xf5, 0xb6, 0x52, 0xf6, 0xb9, 0x58, 0xf6, 0xbd, 0x62, 0xf7, 0xbf, 0x6a, 0xf6, 0xba, 0x66, 0xf6, 0xb6, 0x63, 0xab, 0x78, 0x39, 0xa, 0x6, 0x2, 0x0, 0x0, 0x0, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff,
+ 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0x83, 0x58, 0x32, 0xf0, 0xb9, 0x7f, 0xf7, 0xc3, 0x88, 0xf7, 0xc3, 0x86, 0xf8, 0xc4, 0x84, 0xf7, 0xc5, 0x82, 0xf7, 0xc5, 0x80, 0xf7, 0xc5, 0x7f, 0xf8, 0xc5, 0x7d, 0xf7, 0xc4, 0x7b, 0xf7, 0xc4, 0x79, 0xf7, 0xc4, 0x78, 0xf7, 0xc3, 0x76, 0xf7, 0xc3, 0x74, 0xf7, 0xc2, 0x71, 0xf6, 0xbe, 0x6d, 0xf6, 0xba, 0x6a, 0xf4, 0xb6, 0x65, 0x8a, 0x5e, 0x2c, 0xc, 0x7, 0x3, 0x0, 0x0, 0x0, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff,
+ 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0x4f, 0x33, 0x1a, 0xd2, 0x99, 0x60, 0xf8, 0xc4, 0x89, 0xf8, 0xc3, 0x86, 0xf8, 0xc4, 0x84, 0xf7, 0xc5, 0x82, 0xf7, 0xc5, 0x80, 0xf7, 0xc5, 0x7f, 0xf7, 0xc4, 0x7e, 0xf7, 0xc4, 0x7b, 0xf7, 0xc3, 0x79, 0xf7, 0xc2, 0x77, 0xf6, 0xc0, 0x74, 0xf6, 0xbd, 0x71, 0xf6, 0xbb, 0x6e, 0xe1, 0xa4, 0x59, 0x5c, 0x3d, 0x1b, 0x1, 0x1, 0x0, 0x0, 0x0, 0x0, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff,
+ 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xe, 0x6, 0x0, 0x72, 0x4b, 0x28, 0xd0, 0x9a, 0x62, 0xf7, 0xbf, 0x80, 0xf8, 0xc4, 0x85, 0xf7, 0xc3, 0x82, 0xf7, 0xc3, 0x80, 0xf7, 0xc3, 0x7e, 0xf7, 0xc1, 0x7c, 0xf6, 0xc0, 0x7a, 0xf7, 0xbf, 0x78, 0xf8, 0xbc, 0x72, 0xde, 0xa2, 0x5d, 0x80, 0x57, 0x2b, 0x13, 0xb, 0x4, 0x0, 0x0, 0x0, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff,
+ 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0x19, 0xe, 0x5, 0x44, 0x2c, 0x15, 0x81, 0x59, 0x32, 0xb2, 0x80, 0x4c, 0xcb, 0x95, 0x5b, 0xd2, 0x9c, 0x5f, 0xcd, 0x97, 0x5a, 0xb9, 0x86, 0x4d, 0x8b, 0x61, 0x34, 0x4a, 0x30, 0x17, 0x15, 0xc, 0x5, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff,
+ 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0x0, 0x0, 0x0, 0x1, 0x0, 0x0, 0x3, 0x0, 0x0, 0x1, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff, 0xff, 0x0, 0xff,
};
@@ -154,25 +154,25 @@ GLXContext GHOST_WindowX11::s_firstContext = NULL;
GHOST_WindowX11::
GHOST_WindowX11(
- GHOST_SystemX11 *system,
- Display * display,
- const STR_String& title,
- GHOST_TInt32 left,
- GHOST_TInt32 top,
- GHOST_TUns32 width,
- GHOST_TUns32 height,
- GHOST_TWindowState state,
- const GHOST_TEmbedderWindowID parentWindow,
- GHOST_TDrawingContextType type,
- const bool stereoVisual,
- const GHOST_TUns16 numOfAASamples
-) :
- GHOST_Window(width,height,state,type,stereoVisual,numOfAASamples),
+ GHOST_SystemX11 *system,
+ Display *display,
+ const STR_String& title,
+ GHOST_TInt32 left,
+ GHOST_TInt32 top,
+ GHOST_TUns32 width,
+ GHOST_TUns32 height,
+ GHOST_TWindowState state,
+ const GHOST_TEmbedderWindowID parentWindow,
+ GHOST_TDrawingContextType type,
+ const bool stereoVisual,
+ const GHOST_TUns16 numOfAASamples
+ ) :
+ GHOST_Window(width, height, state, type, stereoVisual, numOfAASamples),
m_context(NULL),
m_display(display),
m_normal_state(GHOST_kWindowStateNormal),
- m_system (system),
- m_valid_setup (false),
+ m_system(system),
+ m_valid_setup(false),
m_invalid_window(false),
m_empty_cursor(None),
m_custom_cursor(None)
@@ -191,13 +191,13 @@ GHOST_WindowX11(
memset(&m_xtablet, 0, sizeof(m_xtablet));
#endif
- m_visual= NULL;
+ m_visual = NULL;
if (!glXQueryVersion(m_display, &glxVersionMajor, &glxVersionMinor)) {
printf("%s:%d: X11 glXQueryVersion() failed, verify working openGL system!\n", __FILE__, __LINE__);
/* exit if this is the first window */
- if(s_firstContext==NULL) {
+ if (s_firstContext == NULL) {
printf("initial window could not find the GLX extension, exit!\n");
exit(1);
}
@@ -209,7 +209,7 @@ GHOST_WindowX11(
for (samples = m_numOfAASamples; samples >= 0; samples--) {
i = 0; /* Reusing attributes array, so reset counter */
- if(m_stereoVisual)
+ if (m_stereoVisual)
attributes[i++] = GLX_STEREO;
attributes[i++] = GLX_RGBA;
@@ -219,7 +219,7 @@ GHOST_WindowX11(
attributes[i++] = GLX_GREEN_SIZE; attributes[i++] = 1;
attributes[i++] = GLX_DEPTH_SIZE; attributes[i++] = 1;
/* GLX >= 1.4 required for multi-sample */
- if(samples && (glxVersionMajor >= 1) && (glxVersionMinor >= 4)) {
+ if (samples && (glxVersionMajor >= 1) && (glxVersionMinor >= 4)) {
attributes[i++] = GLX_SAMPLE_BUFFERS; attributes[i++] = 1;
attributes[i++] = GLX_SAMPLES; attributes[i++] = samples;
}
@@ -234,14 +234,15 @@ GHOST_WindowX11(
/* All options exhausted, cannot continue */
printf("%s:%d: X11 glXChooseVisual() failed, verify working openGL system!\n", __FILE__, __LINE__);
- if(s_firstContext==NULL) {
+ if (s_firstContext == NULL) {
printf("initial window could not find the GLX extension, exit!\n");
exit(1);
}
return;
}
- } else {
+ }
+ else {
if (m_numOfAASamples && (m_numOfAASamples > samples)) {
printf("%s:%d: oversampling requested %i but using %i samples\n",
__FILE__, __LINE__, m_numOfAASamples, samples);
@@ -259,51 +260,49 @@ GHOST_WindowX11(
XSetWindowAttributes xattributes;
memset(&xattributes, 0, sizeof(xattributes));
- xattributes.colormap= XCreateColormap(
- m_display,
- RootWindow(m_display, m_visual->screen),
- m_visual->visual,
- AllocNone
- );
+ xattributes.colormap = XCreateColormap(m_display,
+ RootWindow(m_display, m_visual->screen),
+ m_visual->visual,
+ AllocNone
+ );
- xattributes.border_pixel= 0;
+ xattributes.border_pixel = 0;
// Specify which events we are interested in hearing.
- xattributes.event_mask=
- ExposureMask | StructureNotifyMask |
- KeyPressMask | KeyReleaseMask |
- EnterWindowMask | LeaveWindowMask |
- ButtonPressMask | ButtonReleaseMask |
- PointerMotionMask | FocusChangeMask | PropertyChangeMask;
+ xattributes.event_mask =
+ ExposureMask | StructureNotifyMask |
+ KeyPressMask | KeyReleaseMask |
+ EnterWindowMask | LeaveWindowMask |
+ ButtonPressMask | ButtonReleaseMask |
+ PointerMotionMask | FocusChangeMask | PropertyChangeMask;
// create the window!
;
if (parentWindow == 0) {
- m_window =
- XCreateWindow(
- m_display,
- RootWindow(m_display, m_visual->screen),
- left,
- top,
- width,
- height,
- 0, // no border.
- m_visual->depth,
- InputOutput,
- m_visual->visual,
- CWBorderPixel|CWColormap|CWEventMask,
- &xattributes
- );
- } else {
+ m_window = XCreateWindow(m_display,
+ RootWindow(m_display, m_visual->screen),
+ left,
+ top,
+ width,
+ height,
+ 0, // no border.
+ m_visual->depth,
+ InputOutput,
+ m_visual->visual,
+ CWBorderPixel | CWColormap | CWEventMask,
+ &xattributes
+ );
+ }
+ else {
Window root_return;
- int x_return,y_return;
- unsigned int w_return,h_return,border_w_return,depth_return;
+ int x_return, y_return;
+ unsigned int w_return, h_return, border_w_return, depth_return;
XGetGeometry(m_display, parentWindow, &root_return, &x_return, &y_return,
- &w_return, &h_return, &border_w_return, &depth_return );
+ &w_return, &h_return, &border_w_return, &depth_return);
left = 0;
top = 0;
@@ -311,22 +310,21 @@ GHOST_WindowX11(
height = h_return;
- m_window = XCreateWindow(
- m_display,
- parentWindow, // reparent against embedder
- left,
- top,
- width,
- height,
- 0, // no border.
- m_visual->depth,
- InputOutput,
- m_visual->visual,
- CWBorderPixel|CWColormap|CWEventMask,
- &xattributes
- );
-
- XSelectInput(m_display , parentWindow, SubstructureNotifyMask);
+ m_window = XCreateWindow(m_display,
+ parentWindow, // reparent against embedder
+ left,
+ top,
+ width,
+ height,
+ 0, // no border.
+ m_visual->depth,
+ InputOutput,
+ m_visual->visual,
+ CWBorderPixel | CWColormap | CWEventMask,
+ &xattributes
+ );
+
+ XSelectInput(m_display, parentWindow, SubstructureNotifyMask);
}
@@ -359,23 +357,23 @@ GHOST_WindowX11(
// Create some hints for the window manager on how
// we want this window treated.
- XSizeHints * xsizehints = XAllocSizeHints();
+ XSizeHints *xsizehints = XAllocSizeHints();
xsizehints->flags = PPosition | PSize | PMinSize | PMaxSize;
xsizehints->x = left;
xsizehints->y = top;
xsizehints->width = width;
xsizehints->height = height;
- xsizehints->min_width= 320; // size hints, could be made apart of the ghost api
- xsizehints->min_height= 240; // limits are also arbitrary, but should not allow 1x1 window
- xsizehints->max_width= 65535;
- xsizehints->max_height= 65535;
+ xsizehints->min_width = 320; // size hints, could be made apart of the ghost api
+ xsizehints->min_height = 240; // limits are also arbitrary, but should not allow 1x1 window
+ xsizehints->max_width = 65535;
+ xsizehints->max_height = 65535;
XSetWMNormalHints(m_display, m_window, xsizehints);
XFree(xsizehints);
- XClassHint * xclasshint = XAllocClassHint();
+ XClassHint *xclasshint = XAllocClassHint();
const int len = title.Length() + 1;
char *wmclass = (char *)malloc(sizeof(char) * len);
- strncpy(wmclass, (const char*)title, sizeof(char) * len);
+ strncpy(wmclass, (const char *)title, sizeof(char) * len);
xclasshint->res_name = wmclass;
xclasshint->res_class = wmclass;
XSetClassHint(m_display, m_window, xclasshint);
@@ -384,15 +382,15 @@ GHOST_WindowX11(
/* The basic for a good ICCCM "work" */
if (m_system->m_wm_protocols) {
- natom= 0;
+ natom = 0;
if (m_system->m_delete_window_atom) {
- atoms[natom]= m_system->m_delete_window_atom;
+ atoms[natom] = m_system->m_delete_window_atom;
natom++;
}
if (m_system->m_wm_take_focus) {
- atoms[natom]= m_system->m_wm_take_focus;
+ atoms[natom] = m_system->m_wm_take_focus;
natom++;
}
@@ -418,23 +416,24 @@ GHOST_WindowX11(
GC gc_icon = XCreateGC(display, icon_pixmap, 0, NULL);
GC gc_mask = XCreateGC(display, mask_pixmap, 0, NULL);
- x_image = XCreateImage( display, m_visual->visual, 24, ZPixmap, 0, NULL, BLENDER_ICON_WIDTH, BLENDER_ICON_HEIGHT, 32, 0 );
- mask_image = XCreateImage( display, m_visual->visual, 1, ZPixmap, 0, NULL, BLENDER_ICON_WIDTH, BLENDER_ICON_HEIGHT, 8, 0);
+ x_image = XCreateImage(display, m_visual->visual, 24, ZPixmap, 0, NULL, BLENDER_ICON_WIDTH, BLENDER_ICON_HEIGHT, 32, 0);
+ mask_image = XCreateImage(display, m_visual->visual, 1, ZPixmap, 0, NULL, BLENDER_ICON_WIDTH, BLENDER_ICON_HEIGHT, 8, 0);
x_image->data = (char *)malloc(x_image->bytes_per_line * BLENDER_ICON_HEIGHT);
- mask_image->data = (char *)malloc( mask_image->bytes_per_line * BLENDER_ICON_HEIGHT);
+ mask_image->data = (char *)malloc(mask_image->bytes_per_line * BLENDER_ICON_HEIGHT);
/* copy the BLENDER_ICON_48x48x24 into the XImage */
unsigned char *col = BLENDER_ICON_48x48x24;
int px, py;
- for (px=0; px<BLENDER_ICON_WIDTH; px++) {
- for (py=0; py<BLENDER_ICON_HEIGHT; py++, col+=3) {
+ for (px = 0; px < BLENDER_ICON_WIDTH; px++) {
+ for (py = 0; py < BLENDER_ICON_HEIGHT; py++, col += 3) {
/* mask out pink */
- if (col[0]==255 && col[1] == 0 && col[2]== 255) {
- XPutPixel(mask_image, px, py, 0 );
- } else {
- XPutPixel(x_image, px, py, (col[0]<<16)+(col[1]<<8)+col[2] );
- XPutPixel(mask_image, px, py, 1 );
+ if (col[0] == 255 && col[1] == 0 && col[2] == 255) {
+ XPutPixel(mask_image, px, py, 0);
+ }
+ else {
+ XPutPixel(x_image, px, py, (col[0] << 16) + (col[1] << 8) + col[2]);
+ XPutPixel(mask_image, px, py, 1);
}
}
}
@@ -445,15 +444,15 @@ GHOST_WindowX11(
// Now the pixmap is ok to assign to the window as a hint
xwmhints->icon_pixmap = icon_pixmap;
xwmhints->icon_mask = mask_pixmap;
- XFreeGC (display, gc_icon);
- XFreeGC (display, gc_mask);
- XDestroyImage( x_image ); /* frees x_image->data too */
- XDestroyImage( mask_image );
+ XFreeGC(display, gc_icon);
+ XFreeGC(display, gc_mask);
+ XDestroyImage(x_image); /* frees x_image->data too */
+ XDestroyImage(mask_image);
xwmhints->initial_state = NormalState;
- xwmhints->input= True;
- xwmhints->flags= InputHint|IconPixmapHint|IconMaskHint|StateHint;
- XSetWMHints(display, m_window, xwmhints );
+ xwmhints->input = True;
+ xwmhints->flags = InputHint | IconPixmapHint | IconMaskHint | StateHint;
+ XSetWMHints(display, m_window, xwmhints);
XFree(xwmhints);
// done setting the icon
@@ -477,15 +476,14 @@ GHOST_WindowX11(
#ifdef WITH_X11_XINPUT
/*
- Dummy function to get around IO Handler exiting if device invalid
- Basically it will not crash blender now if you have a X device that
- is configured but not plugged in.
-
-*/
+ * Dummy function to get around IO Handler exiting if device invalid
+ * Basically it will not crash blender now if you have a X device that
+ * is configured but not plugged in.
+ */
static int ApplicationErrorHandler(Display *display, XErrorEvent *theEvent)
{
fprintf(stderr, "Ignoring Xlib error: error code %d request code %d\n",
- theEvent->error_code, theEvent->request_code);
+ theEvent->error_code, theEvent->request_code);
/* No exit! - but keep lint happy */
return 0;
@@ -503,31 +501,31 @@ static bool match_token(const char *haystack, const char *needle)
{
while (*p && isspace(*p))
p++;
- if (! *p)
+ if (!*p)
break;
for (q = needle; *q && *p && tolower(*p) == tolower(*q); q++)
p++;
- if (! *q && (isspace(*p) || !*p))
+ if (!*q && (isspace(*p) || !*p))
return TRUE;
- while (*p && ! isspace(*p))
+ while (*p && !isspace(*p))
p++;
}
return FALSE;
}
-/* Determining if an X device is a Tablet style device is an imperfect science.
-** We rely on common conventions around device names as well as the type reported
-** by Wacom tablets. This code will likely need to be expanded for alternate tablet types
-**
-** Wintab refers to any device that interacts with the tablet as a cursor,
-** (stylus, eraser, tablet mouse, airbrush, etc)
-** this is not to be confused with wacom x11 configuration "cursor" device.
-** Wacoms x11 config "cursor" refers to its device slot (which we mirror with
-** our gSysCursors) for puck like devices (tablet mice essentially).
-*/
+/* Determining if an X device is a Tablet style device is an imperfect science.
+ * We rely on common conventions around device names as well as the type reported
+ * by Wacom tablets. This code will likely need to be expanded for alternate tablet types
+ *
+ * Wintab refers to any device that interacts with the tablet as a cursor,
+ * (stylus, eraser, tablet mouse, airbrush, etc)
+ * this is not to be confused with wacom x11 configuration "cursor" device.
+ * Wacoms x11 config "cursor" refers to its device slot (which we mirror with
+ * our gSysCursors) for puck like devices (tablet mice essentially).
+ */
#if 0 // unused
static BOOL is_tablet_cursor(const char *name, const char *type)
{
@@ -544,7 +542,7 @@ static BOOL is_tablet_cursor(const char *name, const char *type)
NULL
};
- for (i=0; tablet_cursor_whitelist[i] != NULL; i++) {
+ for (i = 0; tablet_cursor_whitelist[i] != NULL; i++) {
if (name && match_token(name, tablet_cursor_whitelist[i]))
return TRUE;
if (type && match_token(type, tablet_cursor_whitelist[i]))
@@ -556,14 +554,14 @@ static BOOL is_tablet_cursor(const char *name, const char *type)
static BOOL is_stylus(const char *name, const char *type)
{
int i;
- static const char* tablet_stylus_whitelist[] = {
+ static const char *tablet_stylus_whitelist[] = {
"stylus",
"wizardpen",
"acecad",
NULL
};
- for (i=0; tablet_stylus_whitelist[i] != NULL; i++) {
+ for (i = 0; tablet_stylus_whitelist[i] != NULL; i++) {
if (name && match_token(name, tablet_stylus_whitelist[i]))
return TRUE;
if (type && match_token(type, tablet_stylus_whitelist[i]))
@@ -591,35 +589,35 @@ void GHOST_WindowX11::initXInputDevices()
static XErrorHandler old_handler = (XErrorHandler) 0;
XExtensionVersion *version = XGetExtensionVersion(m_display, INAME);
- if(version && (version != (XExtensionVersion*)NoSuchExtension)) {
- if(version->present) {
+ if (version && (version != (XExtensionVersion *)NoSuchExtension)) {
+ if (version->present) {
int device_count;
- XDeviceInfo* device_info = XListInputDevices(m_display, &device_count);
+ XDeviceInfo *device_info = XListInputDevices(m_display, &device_count);
m_xtablet.StylusDevice = NULL;
m_xtablet.EraserDevice = NULL;
- m_xtablet.CommonData.Active= GHOST_kTabletModeNone;
+ m_xtablet.CommonData.Active = GHOST_kTabletModeNone;
/* Install our error handler to override Xlib's termination behavior */
old_handler = XSetErrorHandler(ApplicationErrorHandler);
- for(int i=0; i<device_count; ++i) {
+ for (int i = 0; i < device_count; ++i) {
char *device_type = device_info[i].type ? XGetAtomName(m_display, device_info[i].type) : NULL;
// printf("Tablet type:'%s', name:'%s', index:%d\n", device_type, device_info[i].name, i);
- if(m_xtablet.StylusDevice==NULL && is_stylus(device_info[i].name, device_type)) {
+ if (m_xtablet.StylusDevice == NULL && is_stylus(device_info[i].name, device_type)) {
// printf("\tfound stylus\n");
- m_xtablet.StylusID= device_info[i].id;
+ m_xtablet.StylusID = device_info[i].id;
m_xtablet.StylusDevice = XOpenDevice(m_display, m_xtablet.StylusID);
if (m_xtablet.StylusDevice != NULL) {
/* Find how many pressure levels tablet has */
XAnyClassPtr ici = device_info[i].inputclassinfo;
- for(int j=0; j<m_xtablet.StylusDevice->num_classes; ++j) {
- if(ici->c_class==ValuatorClass) {
+ for (int j = 0; j < m_xtablet.StylusDevice->num_classes; ++j) {
+ if (ici->c_class == ValuatorClass) {
// printf("\t\tfound ValuatorClass\n");
- XValuatorInfo* xvi = (XValuatorInfo*)ici;
+ XValuatorInfo *xvi = (XValuatorInfo *)ici;
m_xtablet.PressureLevels = xvi->axes[2].max_value;
/* this is assuming that the tablet has the same tilt resolution in both
@@ -631,19 +629,20 @@ void GHOST_WindowX11::initXInputDevices()
ici = (XAnyClassPtr)(((char *)ici) + ici->length);
}
- } else {
- m_xtablet.StylusID= 0;
+ }
+ else {
+ m_xtablet.StylusID = 0;
}
}
- else if(m_xtablet.EraserDevice==NULL && is_eraser(device_info[i].name, device_type)) {
+ else if (m_xtablet.EraserDevice == NULL && is_eraser(device_info[i].name, device_type)) {
// printf("\tfound eraser\n");
- m_xtablet.EraserID= device_info[i].id;
+ m_xtablet.EraserID = device_info[i].id;
m_xtablet.EraserDevice = XOpenDevice(m_display, m_xtablet.EraserID);
- if (m_xtablet.EraserDevice == NULL) m_xtablet.EraserID= 0;
+ if (m_xtablet.EraserDevice == NULL) m_xtablet.EraserID = 0;
}
- if(device_type) {
- XFree((void*)device_type);
+ if (device_type) {
+ XFree((void *)device_type);
}
}
@@ -656,21 +655,21 @@ void GHOST_WindowX11::initXInputDevices()
XEventClass xevents[10], ev;
int dcount = 0;
- if(m_xtablet.StylusDevice) {
+ if (m_xtablet.StylusDevice) {
DeviceMotionNotify(m_xtablet.StylusDevice, m_xtablet.MotionEvent, ev);
- if(ev) xevents[dcount++] = ev;
+ if (ev) xevents[dcount++] = ev;
ProximityIn(m_xtablet.StylusDevice, m_xtablet.ProxInEvent, ev);
- if(ev) xevents[dcount++] = ev;
+ if (ev) xevents[dcount++] = ev;
ProximityOut(m_xtablet.StylusDevice, m_xtablet.ProxOutEvent, ev);
- if(ev) xevents[dcount++] = ev;
+ if (ev) xevents[dcount++] = ev;
}
- if(m_xtablet.EraserDevice) {
+ if (m_xtablet.EraserDevice) {
DeviceMotionNotify(m_xtablet.EraserDevice, m_xtablet.MotionEvent, ev);
- if(ev) xevents[dcount++] = ev;
+ if (ev) xevents[dcount++] = ev;
ProximityIn(m_xtablet.EraserDevice, m_xtablet.ProxInEvent, ev);
- if(ev) xevents[dcount++] = ev;
+ if (ev) xevents[dcount++] = ev;
ProximityOut(m_xtablet.EraserDevice, m_xtablet.ProxOutEvent, ev);
- if(ev) xevents[dcount++] = ev;
+ if (ev) xevents[dcount++] = ev;
}
XSelectExtensionEvent(m_display, m_window, xevents, dcount);
@@ -681,73 +680,73 @@ void GHOST_WindowX11::initXInputDevices()
#endif /* WITH_X11_XINPUT */
- Window
+Window
GHOST_WindowX11::
-getXWindow(
-){
+getXWindow()
+{
return m_window;
}
- bool
+bool
GHOST_WindowX11::
-getValid(
-) const {
+getValid() const
+{
return m_valid_setup;
}
- void
+void
GHOST_WindowX11::
setTitle(
- const STR_String& title
-){
+ const STR_String& title)
+{
Atom name = XInternAtom(m_display, "_NET_WM_NAME", 0);
Atom utf8str = XInternAtom(m_display, "UTF8_STRING", 0);
XChangeProperty(m_display, m_window,
name, utf8str, 8, PropModeReplace,
- (const unsigned char*) title.ReadPtr(),
+ (const unsigned char *) title.ReadPtr(),
title.Length());
// This should convert to valid x11 string
// and getTitle would need matching change
- XStoreName(m_display,m_window,title);
+ XStoreName(m_display, m_window, title);
XFlush(m_display);
}
- void
+void
GHOST_WindowX11::
getTitle(
- STR_String& title
-) const {
+ STR_String& title) const
+{
char *name = NULL;
- XFetchName(m_display,m_window,&name);
- title= name?name:"untitled";
+ XFetchName(m_display, m_window, &name);
+ title = name ? name : "untitled";
XFree(name);
}
- void
+void
GHOST_WindowX11::
getWindowBounds(
- GHOST_Rect& bounds
-) const {
- // Getting the window bounds under X11 is not
- // really supported (nor should it be desired).
+ GHOST_Rect& bounds) const
+{
+ // Getting the window bounds under X11 is not
+ // really supported (nor should it be desired).
getClientBounds(bounds);
}
- void
+void
GHOST_WindowX11::
getClientBounds(
- GHOST_Rect& bounds
-) const {
+ GHOST_Rect& bounds) const
+{
Window root_return;
- int x_return,y_return;
- unsigned int w_return,h_return,border_w_return,depth_return;
+ int x_return, y_return;
+ unsigned int w_return, h_return, border_w_return, depth_return;
GHOST_TInt32 screen_x, screen_y;
- XGetGeometry(m_display,m_window,&root_return,&x_return,&y_return,
- &w_return,&h_return,&border_w_return,&depth_return);
+ XGetGeometry(m_display, m_window, &root_return, &x_return, &y_return,
+ &w_return, &h_return, &border_w_return, &depth_return);
clientToScreen(0, 0, screen_x, screen_y);
@@ -758,95 +757,88 @@ getClientBounds(
}
- GHOST_TSuccess
+GHOST_TSuccess
GHOST_WindowX11::
setClientWidth(
- GHOST_TUns32 width
-){
+ GHOST_TUns32 width)
+{
XWindowChanges values;
- unsigned int value_mask= CWWidth;
+ unsigned int value_mask = CWWidth;
values.width = width;
- XConfigureWindow(m_display,m_window,value_mask,&values);
+ XConfigureWindow(m_display, m_window, value_mask, &values);
return GHOST_kSuccess;
}
- GHOST_TSuccess
+GHOST_TSuccess
GHOST_WindowX11::
setClientHeight(
- GHOST_TUns32 height
-){
+ GHOST_TUns32 height)
+{
XWindowChanges values;
- unsigned int value_mask= CWHeight;
+ unsigned int value_mask = CWHeight;
values.height = height;
- XConfigureWindow(m_display,m_window,value_mask,&values);
+ XConfigureWindow(m_display, m_window, value_mask, &values);
return GHOST_kSuccess;
}
- GHOST_TSuccess
+GHOST_TSuccess
GHOST_WindowX11::
setClientSize(
- GHOST_TUns32 width,
- GHOST_TUns32 height
-){
+ GHOST_TUns32 width,
+ GHOST_TUns32 height)
+{
XWindowChanges values;
- unsigned int value_mask= CWWidth | CWHeight;
+ unsigned int value_mask = CWWidth | CWHeight;
values.width = width;
values.height = height;
- XConfigureWindow(m_display,m_window,value_mask,&values);
+ XConfigureWindow(m_display, m_window, value_mask, &values);
return GHOST_kSuccess;
}
- void
+void
GHOST_WindowX11::
screenToClient(
- GHOST_TInt32 inX,
- GHOST_TInt32 inY,
- GHOST_TInt32& outX,
- GHOST_TInt32& outY
-) const {
+ GHOST_TInt32 inX,
+ GHOST_TInt32 inY,
+ GHOST_TInt32& outX,
+ GHOST_TInt32& outY) const
+{
// This is correct!
- int ax,ay;
+ int ax, ay;
Window temp;
- XTranslateCoordinates(
- m_display,
- RootWindow(m_display, m_visual->screen),
- m_window,
- inX,
- inY,
- &ax,
- &ay,
- &temp
- );
+ XTranslateCoordinates(m_display,
+ RootWindow(m_display, m_visual->screen),
+ m_window,
+ inX, inY,
+ &ax, &ay,
+ &temp);
outX = ax;
outY = ay;
}
- void
+void
GHOST_WindowX11::
clientToScreen(
- GHOST_TInt32 inX,
- GHOST_TInt32 inY,
- GHOST_TInt32& outX,
- GHOST_TInt32& outY
-) const {
- int ax,ay;
+ GHOST_TInt32 inX,
+ GHOST_TInt32 inY,
+ GHOST_TInt32& outX,
+ GHOST_TInt32& outY) const
+{
+ int ax, ay;
Window temp;
XTranslateCoordinates(
- m_display,
- m_window,
- RootWindow(m_display, m_visual->screen),
- inX,
- inY,
- &ax,
- &ay,
- &temp
- );
+ m_display,
+ m_window,
+ RootWindow(m_display, m_visual->screen),
+ inX, inY,
+ &ax, &ay,
+ &temp);
outX = ax;
outY = ay;
}
@@ -866,8 +858,8 @@ void GHOST_WindowX11::icccmSetState(int state)
xev.xclient.format = 32;
xev.xclient.message_type = m_system->m_wm_change_state;
xev.xclient.data.l[0] = state;
- XSendEvent (m_display, RootWindow(m_display, DefaultScreen(m_display)),
- False, SubstructureNotifyMask | SubstructureRedirectMask, &xev);
+ XSendEvent(m_display, RootWindow(m_display, DefaultScreen(m_display)),
+ False, SubstructureNotifyMask | SubstructureRedirectMask, &xev);
}
int GHOST_WindowX11::icccmGetState(void) const
@@ -879,8 +871,8 @@ int GHOST_WindowX11::icccmGetState(void) const
prop_ret = NULL;
st = XGetWindowProperty(m_display, m_window, m_system->m_wm_state, 0,
- 0x7fffffff, False, m_system->m_wm_state, &type_ret,
- &format_ret, &num_ret, &bytes_after, &prop_ret);
+ 0x7fffffff, False, m_system->m_wm_state, &type_ret,
+ &format_ret, &num_ret, &bytes_after, &prop_ret);
if ((st == Success) && (prop_ret) && (num_ret == 2))
st = prop_ret[0];
@@ -913,7 +905,7 @@ void GHOST_WindowX11::netwmMaximized(bool set)
xev.xclient.data.l[3] = 0;
xev.xclient.data.l[4] = 0;
XSendEvent(m_display, RootWindow(m_display, DefaultScreen(m_display)),
- False, SubstructureRedirectMask | SubstructureNotifyMask, &xev);
+ False, SubstructureRedirectMask | SubstructureNotifyMask, &xev);
}
bool GHOST_WindowX11::netwmIsMaximized(void) const
@@ -927,8 +919,8 @@ bool GHOST_WindowX11::netwmIsMaximized(void) const
prop_ret = NULL;
st = False;
ret = XGetWindowProperty(m_display, m_window, m_system->m_net_state, 0,
- 0x7fffffff, False, XA_ATOM, &type_ret, &format_ret,
- &num_ret, &bytes_after, &prop_ret);
+ 0x7fffffff, False, XA_ATOM, &type_ret, &format_ret,
+ &num_ret, &bytes_after, &prop_ret);
if ((ret == Success) && (prop_ret) && (format_ret == 32)) {
count = 0;
for (i = 0; i < num_ret; i++) {
@@ -969,7 +961,7 @@ void GHOST_WindowX11::netwmFullScreen(bool set)
xev.xclient.data.l[3] = 0;
xev.xclient.data.l[4] = 0;
XSendEvent(m_display, RootWindow(m_display, DefaultScreen(m_display)),
- False, SubstructureRedirectMask | SubstructureNotifyMask, &xev);
+ False, SubstructureRedirectMask | SubstructureNotifyMask, &xev);
}
bool GHOST_WindowX11::netwmIsFullScreen(void) const
@@ -983,8 +975,8 @@ bool GHOST_WindowX11::netwmIsFullScreen(void) const
prop_ret = NULL;
st = False;
ret = XGetWindowProperty(m_display, m_window, m_system->m_net_state, 0,
- 0x7fffffff, False, XA_ATOM, &type_ret, &format_ret,
- &num_ret, &bytes_after, &prop_ret);
+ 0x7fffffff, False, XA_ATOM, &type_ret, &format_ret,
+ &num_ret, &bytes_after, &prop_ret);
if ((ret == Success) && (prop_ret) && (format_ret == 32)) {
for (i = 0; i < num_ret; i++) {
if (((unsigned long *) prop_ret)[i] == m_system->m_net_fullscreen) {
@@ -1010,8 +1002,8 @@ void GHOST_WindowX11::motifFullScreen(bool set)
hints.decorations = 1;
XChangeProperty(m_display, m_window, m_system->m_motif,
- m_system->m_motif, 32, PropModeReplace,
- (unsigned char *) &hints, 4);
+ m_system->m_motif, 32, PropModeReplace,
+ (unsigned char *) &hints, 4);
}
bool GHOST_WindowX11::motifIsFullScreen(void) const
@@ -1026,9 +1018,9 @@ bool GHOST_WindowX11::motifIsFullScreen(void) const
prop_ret = NULL;
state = False;
st = XGetWindowProperty(m_display, m_window, m_system->m_motif, 0,
- 0x7fffffff, False, m_system->m_motif,
- &type_ret, &format_ret, &num_ret,
- &bytes_after, &prop_ret);
+ 0x7fffffff, False, m_system->m_motif,
+ &type_ret, &format_ret, &num_ret,
+ &bytes_after, &prop_ret);
if ((st == Success) && (prop_ret)) {
hints = (MotifWmHints *) prop_ret;
if (hints->flags & MWM_HINTS_DECORATIONS) {
@@ -1070,7 +1062,7 @@ GHOST_TSuccess GHOST_WindowX11::setState(GHOST_TWindowState state)
bool is_max, is_full, is_motif_full;
cur_state = getState();
- if (state == (int)cur_state)
+ if (state == (int)cur_state)
return GHOST_kSuccess;
if (cur_state != GHOST_kWindowStateMinimized) {
@@ -1153,11 +1145,11 @@ GHOST_TSuccess GHOST_WindowX11::setState(GHOST_TWindowState state)
#include <iostream>
using namespace std;
- GHOST_TSuccess
+GHOST_TSuccess
GHOST_WindowX11::
setOrder(
- GHOST_TWindowOrder order
-){
+ GHOST_TWindowOrder order)
+{
if (order == GHOST_kWindowOrderTop) {
XWindowAttributes attr;
Atom atom;
@@ -1199,46 +1191,48 @@ setOrder(
/* iconized windows give bad match error */
if (attr.map_state == IsViewable)
XSetInputFocus(m_display, m_window, RevertToPointerRoot,
- CurrentTime);
+ CurrentTime);
XFlush(m_display);
- } else if (order == GHOST_kWindowOrderBottom) {
- XLowerWindow(m_display,m_window);
+ }
+ else if (order == GHOST_kWindowOrderBottom) {
+ XLowerWindow(m_display, m_window);
XFlush(m_display);
- } else {
+ }
+ else {
return GHOST_kFailure;
}
return GHOST_kSuccess;
}
- GHOST_TSuccess
+GHOST_TSuccess
GHOST_WindowX11::
-swapBuffers(
-){
+swapBuffers()
+{
if (getDrawingContextType() == GHOST_kDrawingContextTypeOpenGL) {
- glXSwapBuffers(m_display,m_window);
+ glXSwapBuffers(m_display, m_window);
return GHOST_kSuccess;
- } else {
+ }
+ else {
return GHOST_kFailure;
}
}
- GHOST_TSuccess
+GHOST_TSuccess
GHOST_WindowX11::
-activateDrawingContext(
-){
- if (m_context !=NULL) {
- glXMakeCurrent(m_display, m_window,m_context);
+activateDrawingContext()
+{
+ if (m_context != NULL) {
+ glXMakeCurrent(m_display, m_window, m_context);
return GHOST_kSuccess;
}
return GHOST_kFailure;
}
- GHOST_TSuccess
+GHOST_TSuccess
GHOST_WindowX11::
-invalidate(
-){
-
+invalidate()
+{
// So the idea of this function is to generate an expose event
// for the window.
// Unfortunately X does not handle expose events for you and
@@ -1265,10 +1259,10 @@ invalidate(
* for the window have been pushed onto the GHOST queue
*/
- void
+void
GHOST_WindowX11::
-validate(
-){
+validate()
+{
m_invalid_window = false;
}
@@ -1280,7 +1274,7 @@ validate(
GHOST_WindowX11::
~GHOST_WindowX11(
-){
+ ){
static Atom Primary_atom, Clipboard_atom;
Window p_owner, c_owner;
/*Change the owner of the Atoms to None if we are the owner*/
@@ -1304,10 +1298,10 @@ GHOST_WindowX11::
#ifdef WITH_X11_XINPUT
/* close tablet devices */
- if(m_xtablet.StylusDevice)
+ if (m_xtablet.StylusDevice)
XCloseDevice(m_display, m_xtablet.StylusDevice);
- if(m_xtablet.EraserDevice)
+ if (m_xtablet.EraserDevice)
XCloseDevice(m_display, m_xtablet.EraserDevice);
#endif /* WITH_X11_XINPUT */
@@ -1344,36 +1338,37 @@ GHOST_WindowX11::
* @param type The type of rendering context installed.
* @return Indication as to whether installation has succeeded.
*/
- GHOST_TSuccess
+GHOST_TSuccess
GHOST_WindowX11::
installDrawingContext(
- GHOST_TDrawingContextType type
-){
+ GHOST_TDrawingContextType type)
+{
// only support openGL for now.
GHOST_TSuccess success;
switch (type) {
- case GHOST_kDrawingContextTypeOpenGL:
- m_context = glXCreateContext(m_display, m_visual, s_firstContext, True);
- if (m_context !=NULL) {
- if (!s_firstContext) {
- s_firstContext = m_context;
+ case GHOST_kDrawingContextTypeOpenGL:
+ m_context = glXCreateContext(m_display, m_visual, s_firstContext, True);
+ if (m_context != NULL) {
+ if (!s_firstContext) {
+ s_firstContext = m_context;
+ }
+ glXMakeCurrent(m_display, m_window, m_context);
+ glClearColor(0.447, 0.447, 0.447, 0);
+ glClear(GL_COLOR_BUFFER_BIT);
+ success = GHOST_kSuccess;
+ }
+ else {
+ success = GHOST_kFailure;
}
- glXMakeCurrent(m_display, m_window,m_context);
- glClearColor(0.447, 0.447, 0.447, 0);
- glClear(GL_COLOR_BUFFER_BIT);
- success = GHOST_kSuccess;
- } else {
- success = GHOST_kFailure;
- }
- break;
+ break;
- case GHOST_kDrawingContextTypeNone:
- success = GHOST_kSuccess;
- break;
+ case GHOST_kDrawingContextTypeNone:
+ success = GHOST_kSuccess;
+ break;
- default:
- success = GHOST_kFailure;
+ default:
+ success = GHOST_kFailure;
}
return success;
}
@@ -1384,55 +1379,56 @@ installDrawingContext(
* Removes the current drawing context.
* @return Indication as to whether removal has succeeded.
*/
- GHOST_TSuccess
+GHOST_TSuccess
GHOST_WindowX11::
-removeDrawingContext(
-){
+removeDrawingContext()
+{
GHOST_TSuccess success;
if (m_context != NULL) {
glXDestroyContext(m_display, m_context);
success = GHOST_kSuccess;
- } else {
+ }
+ else {
success = GHOST_kFailure;
}
return success;
}
- Cursor
+Cursor
GHOST_WindowX11::
getStandardCursor(
- GHOST_TStandardCursor g_cursor
-){
+ GHOST_TStandardCursor g_cursor)
+{
unsigned int xcursor_id;
-#define GtoX(gcurs, xcurs) case gcurs: xcursor_id = xcurs
+#define GtoX(gcurs, xcurs) case gcurs: xcursor_id = xcurs
switch (g_cursor) {
- GtoX(GHOST_kStandardCursorRightArrow, XC_arrow); break;
- GtoX(GHOST_kStandardCursorLeftArrow, XC_top_left_arrow); break;
- GtoX(GHOST_kStandardCursorInfo, XC_hand1); break;
- GtoX(GHOST_kStandardCursorDestroy, XC_pirate); break;
- GtoX(GHOST_kStandardCursorHelp, XC_question_arrow); break;
- GtoX(GHOST_kStandardCursorCycle, XC_exchange); break;
- GtoX(GHOST_kStandardCursorSpray, XC_spraycan); break;
- GtoX(GHOST_kStandardCursorWait, XC_watch); break;
- GtoX(GHOST_kStandardCursorText, XC_xterm); break;
- GtoX(GHOST_kStandardCursorCrosshair, XC_crosshair); break;
- GtoX(GHOST_kStandardCursorUpDown, XC_sb_v_double_arrow); break;
- GtoX(GHOST_kStandardCursorLeftRight, XC_sb_h_double_arrow); break;
- GtoX(GHOST_kStandardCursorTopSide, XC_top_side); break;
- GtoX(GHOST_kStandardCursorBottomSide, XC_bottom_side); break;
- GtoX(GHOST_kStandardCursorLeftSide, XC_left_side); break;
- GtoX(GHOST_kStandardCursorRightSide, XC_right_side); break;
- GtoX(GHOST_kStandardCursorTopLeftCorner, XC_top_left_corner); break;
- GtoX(GHOST_kStandardCursorTopRightCorner, XC_top_right_corner); break;
- GtoX(GHOST_kStandardCursorBottomRightCorner, XC_bottom_right_corner); break;
- GtoX(GHOST_kStandardCursorBottomLeftCorner, XC_bottom_left_corner); break;
- GtoX(GHOST_kStandardCursorPencil, XC_pencil); break;
- GtoX(GHOST_kStandardCursorCopy, XC_arrow); break;
- default:
- xcursor_id = 0;
+ GtoX(GHOST_kStandardCursorRightArrow, XC_arrow); break;
+ GtoX(GHOST_kStandardCursorLeftArrow, XC_top_left_arrow); break;
+ GtoX(GHOST_kStandardCursorInfo, XC_hand1); break;
+ GtoX(GHOST_kStandardCursorDestroy, XC_pirate); break;
+ GtoX(GHOST_kStandardCursorHelp, XC_question_arrow); break;
+ GtoX(GHOST_kStandardCursorCycle, XC_exchange); break;
+ GtoX(GHOST_kStandardCursorSpray, XC_spraycan); break;
+ GtoX(GHOST_kStandardCursorWait, XC_watch); break;
+ GtoX(GHOST_kStandardCursorText, XC_xterm); break;
+ GtoX(GHOST_kStandardCursorCrosshair, XC_crosshair); break;
+ GtoX(GHOST_kStandardCursorUpDown, XC_sb_v_double_arrow); break;
+ GtoX(GHOST_kStandardCursorLeftRight, XC_sb_h_double_arrow); break;
+ GtoX(GHOST_kStandardCursorTopSide, XC_top_side); break;
+ GtoX(GHOST_kStandardCursorBottomSide, XC_bottom_side); break;
+ GtoX(GHOST_kStandardCursorLeftSide, XC_left_side); break;
+ GtoX(GHOST_kStandardCursorRightSide, XC_right_side); break;
+ GtoX(GHOST_kStandardCursorTopLeftCorner, XC_top_left_corner); break;
+ GtoX(GHOST_kStandardCursorTopRightCorner, XC_top_right_corner); break;
+ GtoX(GHOST_kStandardCursorBottomRightCorner, XC_bottom_right_corner); break;
+ GtoX(GHOST_kStandardCursorBottomLeftCorner, XC_bottom_left_corner); break;
+ GtoX(GHOST_kStandardCursorPencil, XC_pencil); break;
+ GtoX(GHOST_kStandardCursorCopy, XC_arrow); break;
+ default:
+ xcursor_id = 0;
}
#undef GtoX
@@ -1446,26 +1442,27 @@ getStandardCursor(
}
return xcursor;
- } else {
+ }
+ else {
return None;
}
}
- Cursor
+Cursor
GHOST_WindowX11::
getEmptyCursor(
-) {
+ ) {
if (!m_empty_cursor) {
Pixmap blank;
XColor dummy;
char data[1] = {0};
/* make a blank cursor */
- blank = XCreateBitmapFromData (
- m_display,
- RootWindow(m_display,DefaultScreen(m_display)),
- data, 1, 1
- );
+ blank = XCreateBitmapFromData(
+ m_display,
+ RootWindow(m_display, DefaultScreen(m_display)),
+ data, 1, 1
+ );
m_empty_cursor = XCreatePixmapCursor(m_display, blank, blank, &dummy, &dummy, 0, 0);
XFreePixmap(m_display, blank);
@@ -1474,16 +1471,17 @@ getEmptyCursor(
return m_empty_cursor;
}
- GHOST_TSuccess
+GHOST_TSuccess
GHOST_WindowX11::
setWindowCursorVisibility(
- bool visible
-){
+ bool visible)
+{
Cursor xcursor;
if (visible) {
- xcursor = getStandardCursor( getCursorShape() );
- } else {
+ xcursor = getStandardCursor(getCursorShape() );
+ }
+ else {
xcursor = getEmptyCursor();
}
@@ -1493,17 +1491,17 @@ setWindowCursorVisibility(
return GHOST_kSuccess;
}
- GHOST_TSuccess
+GHOST_TSuccess
GHOST_WindowX11::
setWindowCursorGrab(
- GHOST_TGrabCursorMode mode
-){
- if(mode != GHOST_kGrabDisable) {
- if(mode != GHOST_kGrabNormal) {
+ GHOST_TGrabCursorMode mode)
+{
+ if (mode != GHOST_kGrabDisable) {
+ if (mode != GHOST_kGrabNormal) {
m_system->getCursorPosition(m_cursorGrabInitPos[0], m_cursorGrabInitPos[1]);
setCursorGrabAccum(0, 0);
- if(mode == GHOST_kGrabHide)
+ if (mode == GHOST_kGrabHide)
setWindowCursorVisibility(false);
}
@@ -1513,21 +1511,21 @@ setWindowCursorGrab(
#endif
}
else {
- if (m_cursorGrab==GHOST_kGrabHide) {
+ if (m_cursorGrab == GHOST_kGrabHide) {
m_system->setCursorPosition(m_cursorGrabInitPos[0], m_cursorGrabInitPos[1]);
setWindowCursorVisibility(true);
}
- if(m_cursorGrab != GHOST_kGrabNormal) {
+ if (m_cursorGrab != GHOST_kGrabNormal) {
/* use to generate a mouse move event, otherwise the last event
* blender gets can be outside the screen causing menus not to show
* properly unless the user moves the mouse */
- XWarpPointer(m_display,None,None,0,0,0,0,0,0);
+ XWarpPointer(m_display, None, None, 0, 0, 0, 0, 0, 0);
}
/* Almost works without but important otherwise the mouse GHOST location can be incorrect on exit */
setCursorGrabAccum(0, 0);
- m_cursorGrabBounds.m_l= m_cursorGrabBounds.m_r= -1; /* disable */
+ m_cursorGrabBounds.m_l = m_cursorGrabBounds.m_r = -1; /* disable */
#ifdef GHOST_X11_GRAB
XUngrabPointer(m_display, CurrentTime);
#endif
@@ -1538,12 +1536,12 @@ setWindowCursorGrab(
return GHOST_kSuccess;
}
- GHOST_TSuccess
+GHOST_TSuccess
GHOST_WindowX11::
setWindowCursorShape(
- GHOST_TStandardCursor shape
-){
- Cursor xcursor = getStandardCursor( shape );
+ GHOST_TStandardCursor shape)
+{
+ Cursor xcursor = getStandardCursor(shape);
XDefineCursor(m_display, m_window, xcursor);
XFlush(m_display);
@@ -1551,45 +1549,44 @@ setWindowCursorShape(
return GHOST_kSuccess;
}
- GHOST_TSuccess
+GHOST_TSuccess
GHOST_WindowX11::
setWindowCustomCursorShape(
- GHOST_TUns8 bitmap[16][2],
- GHOST_TUns8 mask[16][2],
- int hotX,
- int hotY
-){
-
-setWindowCustomCursorShape((GHOST_TUns8*)bitmap, (GHOST_TUns8*)mask,
- 16, 16, hotX, hotY, 0, 1);
+ GHOST_TUns8 bitmap[16][2],
+ GHOST_TUns8 mask[16][2],
+ int hotX,
+ int hotY)
+{
+ setWindowCustomCursorShape((GHOST_TUns8 *)bitmap, (GHOST_TUns8 *)mask,
+ 16, 16, hotX, hotY, 0, 1);
return GHOST_kSuccess;
}
- GHOST_TSuccess
+GHOST_TSuccess
GHOST_WindowX11::
setWindowCustomCursorShape(
- GHOST_TUns8 *bitmap,
- GHOST_TUns8 *mask,
- int sizex,
- int sizey,
- int hotX,
- int hotY,
- int fg_color,
- int bg_color
-){
- Colormap colormap= DefaultColormap(m_display, DefaultScreen(m_display));
+ GHOST_TUns8 *bitmap,
+ GHOST_TUns8 *mask,
+ int sizex,
+ int sizey,
+ int hotX,
+ int hotY,
+ int fg_color,
+ int bg_color)
+{
+ Colormap colormap = DefaultColormap(m_display, DefaultScreen(m_display));
Pixmap bitmap_pix, mask_pix;
XColor fg, bg;
- if(XAllocNamedColor(m_display, colormap, "White", &fg, &fg) == 0) return GHOST_kFailure;
- if(XAllocNamedColor(m_display, colormap, "Black", &bg, &bg) == 0) return GHOST_kFailure;
+ if (XAllocNamedColor(m_display, colormap, "White", &fg, &fg) == 0) return GHOST_kFailure;
+ if (XAllocNamedColor(m_display, colormap, "Black", &bg, &bg) == 0) return GHOST_kFailure;
if (m_custom_cursor) {
XFreeCursor(m_display, m_custom_cursor);
}
- bitmap_pix = XCreateBitmapFromData(m_display, m_window, (char*) bitmap, sizex, sizey);
- mask_pix = XCreateBitmapFromData(m_display, m_window, (char*) mask, sizex, sizey);
+ bitmap_pix = XCreateBitmapFromData(m_display, m_window, (char *) bitmap, sizex, sizey);
+ mask_pix = XCreateBitmapFromData(m_display, m_window, (char *) mask, sizex, sizey);
m_custom_cursor = XCreatePixmapCursor(m_display, bitmap_pix, mask_pix, &fg, &bg, hotX, hotY);
XDefineCursor(m_display, m_window, m_custom_cursor);
@@ -1598,8 +1595,8 @@ setWindowCustomCursorShape(
XFreePixmap(m_display, bitmap_pix);
XFreePixmap(m_display, mask_pix);
- XFreeColors(m_display, colormap, &fg.pixel, 1, 0L);
- XFreeColors(m_display, colormap, &bg.pixel, 1, 0L);
+ XFreeColors(m_display, colormap, &fg.pixel, 1, 0L);
+ XFreeColors(m_display, colormap, &bg.pixel, 1, 0L);
return GHOST_kSuccess;
}
diff --git a/intern/ghost/intern/GHOST_WindowX11.h b/intern/ghost/intern/GHOST_WindowX11.h
index cb3c1415a28..a04a43bc33a 100644
--- a/intern/ghost/intern/GHOST_WindowX11.h
+++ b/intern/ghost/intern/GHOST_WindowX11.h
@@ -70,110 +70,110 @@ public:
* @param width The width the window.
* @param height The height the window.
* @param state The state the window is initially opened with.
- * @param parentWindow Parent (embedder) window
+ * @param parentWindow Parent (embedder) window
* @param type The type of drawing context installed in this window.
* @param stereoVisual Stereo visual for quad buffered stereo.
* @param numOfAASamples Number of samples used for AA (zero if no AA)
*/
GHOST_WindowX11(
- GHOST_SystemX11 *system,
- Display * display,
- const STR_String& title,
- GHOST_TInt32 left,
- GHOST_TInt32 top,
- GHOST_TUns32 width,
- GHOST_TUns32 height,
- GHOST_TWindowState state,
- const GHOST_TEmbedderWindowID parentWindow,
- GHOST_TDrawingContextType type = GHOST_kDrawingContextTypeNone,
- const bool stereoVisual = false,
- const GHOST_TUns16 numOfAASamples = 0
- );
-
- bool
+ GHOST_SystemX11 *system,
+ Display *display,
+ const STR_String& title,
+ GHOST_TInt32 left,
+ GHOST_TInt32 top,
+ GHOST_TUns32 width,
+ GHOST_TUns32 height,
+ GHOST_TWindowState state,
+ const GHOST_TEmbedderWindowID parentWindow,
+ GHOST_TDrawingContextType type = GHOST_kDrawingContextTypeNone,
+ const bool stereoVisual = false,
+ const GHOST_TUns16 numOfAASamples = 0
+ );
+
+ bool
getValid(
- ) const;
+ ) const;
- void
+ void
setTitle(const STR_String& title);
- void
+ void
getTitle(
- STR_String& title
- ) const;
+ STR_String& title
+ ) const;
- void
+ void
getWindowBounds(
- GHOST_Rect& bounds
- ) const;
+ GHOST_Rect& bounds
+ ) const;
- void
+ void
getClientBounds(
- GHOST_Rect& bounds
- ) const;
+ GHOST_Rect& bounds
+ ) const;
- GHOST_TSuccess
+ GHOST_TSuccess
setClientWidth(
- GHOST_TUns32 width
- );
+ GHOST_TUns32 width
+ );
- GHOST_TSuccess
+ GHOST_TSuccess
setClientHeight(
- GHOST_TUns32 height
- );
+ GHOST_TUns32 height
+ );
- GHOST_TSuccess
+ GHOST_TSuccess
setClientSize(
- GHOST_TUns32 width,
- GHOST_TUns32 height
- );
+ GHOST_TUns32 width,
+ GHOST_TUns32 height
+ );
- void
+ void
screenToClient(
- GHOST_TInt32 inX,
- GHOST_TInt32 inY,
- GHOST_TInt32& outX,
- GHOST_TInt32& outY
- ) const;
+ GHOST_TInt32 inX,
+ GHOST_TInt32 inY,
+ GHOST_TInt32& outX,
+ GHOST_TInt32& outY
+ ) const;
- void
+ void
clientToScreen(
- GHOST_TInt32 inX,
- GHOST_TInt32 inY,
- GHOST_TInt32& outX,
- GHOST_TInt32& outY
- ) const;
+ GHOST_TInt32 inX,
+ GHOST_TInt32 inY,
+ GHOST_TInt32& outX,
+ GHOST_TInt32& outY
+ ) const;
- GHOST_TWindowState
+ GHOST_TWindowState
getState(
- ) const;
+ ) const;
- GHOST_TSuccess
+ GHOST_TSuccess
setState(
- GHOST_TWindowState state
- );
+ GHOST_TWindowState state
+ );
- GHOST_TSuccess
+ GHOST_TSuccess
setOrder(
- GHOST_TWindowOrder order
- );
+ GHOST_TWindowOrder order
+ );
- GHOST_TSuccess
+ GHOST_TSuccess
swapBuffers(
- );
+ );
- GHOST_TSuccess
+ GHOST_TSuccess
activateDrawingContext(
- );
- GHOST_TSuccess
+ );
+ GHOST_TSuccess
invalidate(
- );
+ );
/**
* Destructor.
* Closes the window and disposes resources allocated.
*/
- ~GHOST_WindowX11();
+ ~GHOST_WindowX11();
/**
* @section x11specific X11 system specific calls
@@ -185,24 +185,24 @@ public:
* the GHOST event queue.
*/
- void
+ void
validate(
- );
+ );
/**
* Return a handle to the x11 window type.
*/
- Window
+ Window
getXWindow(
- );
+ );
#ifdef WITH_X11_XINPUT
class XTablet
{
- public:
+public:
GHOST_TabletData CommonData;
- XDevice* StylusDevice;
- XDevice* EraserDevice;
+ XDevice *StylusDevice;
+ XDevice *EraserDevice;
XID StylusID, EraserID;
@@ -215,22 +215,32 @@ public:
};
XTablet& GetXTablet()
- { return m_xtablet; }
+ {
+ return m_xtablet;
+ }
- const GHOST_TabletData* GetTabletData()
- { return &m_xtablet.CommonData; }
+ const GHOST_TabletData *GetTabletData()
+ {
+ return &m_xtablet.CommonData;
+ }
#else // WITH_X11_XINPUT
- const GHOST_TabletData* GetTabletData()
- { return NULL; }
+ const GHOST_TabletData *GetTabletData()
+ {
+ return NULL;
+ }
#endif // WITH_X11_XINPUT
#if defined(WITH_X11_XINPUT) && defined(X_HAVE_UTF8_STRING)
- XIC getX11_XIC() { return m_xic; }
+ XIC getX11_XIC() {
+ return m_xic;
+ }
#endif
#ifdef WITH_XDND
- GHOST_DropTargetX11* getDropTarget()
- { return m_dropTarget; }
+ GHOST_DropTargetX11 *getDropTarget()
+ {
+ return m_dropTarget;
+ }
#endif
/*
@@ -247,106 +257,106 @@ protected:
* @param type The type of rendering context installed.
* @return Indication as to whether installation has succeeded.
*/
- GHOST_TSuccess
+ GHOST_TSuccess
installDrawingContext(
- GHOST_TDrawingContextType type
- );
+ GHOST_TDrawingContextType type
+ );
/**
* Removes the current drawing context.
* @return Indication as to whether removal has succeeded.
*/
- GHOST_TSuccess
+ GHOST_TSuccess
removeDrawingContext(
- );
+ );
/**
* Sets the cursor visibility on the window using
* native window system calls.
*/
- GHOST_TSuccess
+ GHOST_TSuccess
setWindowCursorVisibility(
- bool visible
- );
+ bool visible
+ );
/**
* Sets the cursor grab on the window using
* native window system calls.
* @param warp Only used when grab is enabled, hides the mouse and allows gragging outside the screen.
*/
- GHOST_TSuccess
+ GHOST_TSuccess
setWindowCursorGrab(
- GHOST_TGrabCursorMode mode
- );
+ GHOST_TGrabCursorMode mode
+ );
- GHOST_TGrabCursorMode
+ GHOST_TGrabCursorMode
getWindowCursorGrab() const;
/**
* Sets the cursor shape on the window using
* native window system calls.
*/
- GHOST_TSuccess
+ GHOST_TSuccess
setWindowCursorShape(
- GHOST_TStandardCursor shape
- );
+ GHOST_TStandardCursor shape
+ );
/**
* Sets the cursor shape on the window using
* native window system calls.
*/
- GHOST_TSuccess
+ GHOST_TSuccess
setWindowCustomCursorShape(
- GHOST_TUns8 bitmap[16][2],
- GHOST_TUns8 mask[16][2],
- int hotX,
- int hotY
- );
+ GHOST_TUns8 bitmap[16][2],
+ GHOST_TUns8 mask[16][2],
+ int hotX,
+ int hotY
+ );
/**
* Sets the cursor shape on the window using
* native window system calls (Arbitrary size/color).
*/
- GHOST_TSuccess
+ GHOST_TSuccess
setWindowCustomCursorShape(
- GHOST_TUns8 *bitmap,
- GHOST_TUns8 *mask,
- int sizex,
- int sizey,
- int hotX,
- int hotY,
- int fg_color,
- int bg_color
- );
-
-private :
+ GHOST_TUns8 *bitmap,
+ GHOST_TUns8 *mask,
+ int sizex,
+ int sizey,
+ int hotX,
+ int hotY,
+ int fg_color,
+ int bg_color
+ );
+
+private:
/// Force use of public constructor.
GHOST_WindowX11(
- );
+ );
GHOST_WindowX11(
- const GHOST_WindowX11 &
- );
+ const GHOST_WindowX11 &
+ );
- Cursor
+ Cursor
getStandardCursor(
- GHOST_TStandardCursor g_cursor
- );
+ GHOST_TStandardCursor g_cursor
+ );
- Cursor
+ Cursor
getEmptyCursor(
- );
+ );
#ifdef WITH_X11_XINPUT
void initXInputDevices();
#endif
- GLXContext m_context;
- Window m_window;
- Display *m_display;
- XVisualInfo *m_visual;
+ GLXContext m_context;
+ Window m_window;
+ Display *m_display;
+ XVisualInfo *m_visual;
GHOST_TWindowState m_normal_state;
/** The first created OpenGL context (for sharing display lists) */
@@ -354,7 +364,7 @@ private :
/// A pointer to the typed system class.
- GHOST_SystemX11 * m_system;
+ GHOST_SystemX11 *m_system;
bool m_valid_setup;
@@ -371,7 +381,7 @@ private :
std::map<unsigned int, Cursor> m_standard_cursors;
#ifdef WITH_XDND
- GHOST_DropTargetX11 * m_dropTarget;
+ GHOST_DropTargetX11 *m_dropTarget;
#endif
#ifdef WITH_X11_XINPUT