Audacity 3.2.0
ProgressDialog.cpp
Go to the documentation of this file.
1/**********************************************************************
2
3 Audacity: A Digital Audio Editor
4
5 ProgressDialog.cpp
6
7 Copyright
8 Leland Lucius
9 Vaughan Johnson
10
11 This program is free software; you can redistribute it and/or modify
12 it under the terms of the GNU General Public License as published by
13 the Free Software Foundation; either version 2 of the License, or
14 (at your option) any later version.
15
16*******************************************************************//*******************************************************************//**********************************************************************/
28
29
30#include "ProgressDialog.h"
31
32#include <algorithm>
33
34#include <wx/defs.h>
35#include <wx/button.h>
36#include <wx/dcclient.h>
37#include <wx/datetime.h>
38#include <wx/evtloop.h>
39#include <wx/gauge.h>
40#include <wx/frame.h>
41#include <wx/intl.h>
42#include <wx/log.h>
43#include <wx/msgdlg.h>
44#include <wx/settings.h>
45#include <wx/sizer.h>
46#include <wx/sound.h>
47#include <wx/stopwatch.h>
48#include <wx/window.h>
49#include <wx/stattext.h>
50
51#include "Prefs.h"
52
53#include "MemoryX.h"
54
55// This really should be a Preferences setting
56static const unsigned char beep[] =
57{
58 0x52, 0x49, 0x46, 0x46, 0x36, 0x2B, 0x00, 0x00, 0x57, 0x41, 0x56, 0x45,
59 0x66, 0x6D, 0x74, 0x20, 0x10, 0x00, 0x00, 0x00, 0x01, 0x00, 0x01, 0x00,
60 0x44, 0xAC, 0x00, 0x00, 0x88, 0x58, 0x01, 0x00, 0x02, 0x00, 0x10, 0x00,
61 0x64, 0x61, 0x74, 0x61, 0x12, 0x2B, 0x00, 0x00, 0x00, 0x00, 0x13, 0x0B,
62 0xF9, 0x15, 0xC5, 0x20, 0xF0, 0x2A, 0xC0, 0x34, 0xBD, 0x3D, 0x23, 0x46,
63 0x89, 0x4D, 0x0A, 0x54, 0xB7, 0x59, 0x45, 0x5E, 0xE8, 0x61, 0x63, 0x64,
64 0xF5, 0x65, 0x66, 0x66, 0xE1, 0x65, 0x8C, 0x64, 0x42, 0x62, 0x44, 0x5F,
65 0x86, 0x5B, 0x38, 0x57, 0x61, 0x52, 0x23, 0x4D, 0xA0, 0x47, 0xE7, 0x41,
66 0x1A, 0x3C, 0x4F, 0x36, 0x9D, 0x30, 0x1E, 0x2B, 0xDE, 0x25, 0xFD, 0x20,
67 0x85, 0x1C, 0x67, 0x18, 0xD6, 0x14, 0xA8, 0x11, 0x17, 0x0F, 0xDD, 0x0C,
68 0x42, 0x0B, 0x14, 0x0A, 0x26, 0x09, 0xBF, 0x08, 0x70, 0x08, 0x8E, 0x08,
69 0xA5, 0x08, 0x01, 0x09, 0x5D, 0x09, 0x85, 0x09, 0xB3, 0x09, 0x83, 0x09,
70 0x43, 0x09, 0x7B, 0x08, 0x92, 0x07, 0x36, 0x06, 0x4A, 0x04, 0x12, 0x02,
71 0x3E, 0xFF, 0x22, 0xFC, 0x6E, 0xF8, 0x7C, 0xF4, 0x06, 0xF0, 0x60, 0xEB,
72 0x7B, 0xE6, 0x3A, 0xE1, 0x01, 0xDC, 0x93, 0xD6, 0x50, 0xD1, 0x07, 0xCC,
73 0x0E, 0xC7, 0x4F, 0xC2, 0xE0, 0xBD, 0xE6, 0xB9, 0x64, 0xB6, 0x73, 0xB3,
74 0x1C, 0xB1, 0x6C, 0xAF, 0x67, 0xAE, 0x1E, 0xAE, 0x7F, 0xAE, 0xA9, 0xAF,
75 0x75, 0xB1, 0x00, 0xB4, 0x21, 0xB7, 0xDA, 0xBA, 0x33, 0xBF, 0xFA, 0xC3,
76 0x3C, 0xC9, 0xC5, 0xCE, 0xAF, 0xD4, 0xA6, 0xDA, 0xE1, 0xE0, 0xFA, 0xE6,
77 0x06, 0xED, 0x18, 0xF3, 0xC9, 0xF8, 0x65, 0xFE, 0x7C, 0x03, 0x60, 0x08,
78 0xAD, 0x0C, 0x82, 0x10, 0x0F, 0x14, 0xED, 0x16, 0x7D, 0x19, 0x67, 0x1B,
79 0x02, 0x1D, 0x08, 0x1E, 0xA3, 0x1E, 0x0F, 0x1F, 0x04, 0x1F, 0xDD, 0x1E,
80 0x62, 0x1E, 0xE7, 0x1D, 0x37, 0x1D, 0x89, 0x1C, 0x02, 0x1C, 0x7F, 0x1B,
81 0x3B, 0x1B, 0x18, 0x1B, 0x46, 0x1B, 0xAD, 0x1B, 0x69, 0x1C, 0x71, 0x1D,
82 0xC5, 0x1E, 0x78, 0x20, 0x70, 0x22, 0xAC, 0x24, 0x31, 0x27, 0xD9, 0x29,
83 0xBA, 0x2C, 0xA9, 0x2F, 0xA0, 0x32, 0x96, 0x35, 0x63, 0x38, 0x19, 0x3B,
84 0x72, 0x3D, 0x9D, 0x3F, 0x5E, 0x41, 0x98, 0x42, 0x69, 0x43, 0x8F, 0x43,
85 0x38, 0x43, 0x20, 0x42, 0x7D, 0x40, 0x31, 0x3E, 0x0E, 0x3B, 0x65, 0x37,
86 0xEB, 0x32, 0xF7, 0x2D, 0x42, 0x28, 0x29, 0x22, 0x6B, 0x1B, 0x67, 0x14,
87 0x0D, 0x0D, 0x43, 0x05, 0x6F, 0xFD, 0x5F, 0xF5, 0x6E, 0xED, 0x71, 0xE5,
88 0xC3, 0xDD, 0x57, 0xD6, 0x1E, 0xCF, 0x78, 0xC8, 0x28, 0xC2, 0x93, 0xBC,
89 0x75, 0xB7, 0x23, 0xB3, 0x84, 0xAF, 0x86, 0xAC, 0x64, 0xAA, 0xEB, 0xA8,
90 0x49, 0xA8, 0x54, 0xA8, 0x24, 0xA9, 0x99, 0xAA, 0xBB, 0xAC, 0x6F, 0xAF,
91 0xB0, 0xB2, 0x67, 0xB6, 0x8A, 0xBA, 0x02, 0xBF, 0xC3, 0xC3, 0xB2, 0xC8,
92 0xBB, 0xCD, 0xE7, 0xD2, 0xFD, 0xD7, 0x1C, 0xDD, 0xFD, 0xE1, 0xD5, 0xE6,
93 0x51, 0xEB, 0x93, 0xEF, 0xA7, 0xF3, 0x4F, 0xF7, 0xCB, 0xFA, 0xCC, 0xFD,
94 0xA7, 0x00, 0x07, 0x03, 0x22, 0x05, 0x17, 0x07, 0xAD, 0x08, 0x2D, 0x0A,
95 0x5D, 0x0B, 0x8D, 0x0C, 0x7B, 0x0D, 0x7F, 0x0E, 0x56, 0x0F, 0x2E, 0x10,
96 0x39, 0x11, 0x2C, 0x12, 0x64, 0x13, 0x92, 0x14, 0x09, 0x16, 0x86, 0x17,
97 0x28, 0x19, 0x13, 0x1B, 0x07, 0x1D, 0x34, 0x1F, 0x6B, 0x21, 0xCB, 0x23,
98 0x29, 0x26, 0x92, 0x28, 0x05, 0x2B, 0x62, 0x2D, 0xB2, 0x2F, 0xD9, 0x31,
99 0xDA, 0x33, 0xA1, 0x35, 0x29, 0x37, 0x64, 0x38, 0x55, 0x39, 0xDC, 0x39,
100 0x15, 0x3A, 0xD2, 0x39, 0x3A, 0x39, 0x22, 0x38, 0xAD, 0x36, 0xD4, 0x34,
101 0x74, 0x32, 0xD2, 0x2F, 0xAC, 0x2C, 0x52, 0x29, 0x89, 0x25, 0x97, 0x21,
102 0x71, 0x1D, 0xF4, 0x18, 0x7D, 0x14, 0xC5, 0x0F, 0x2C, 0x0B, 0x6E, 0x06,
103 0xE3, 0x01, 0x74, 0xFD, 0x04, 0xF9, 0xE8, 0xF4, 0xE3, 0xF0, 0x3D, 0xED,
104 0xC0, 0xE9, 0xB3, 0xE6, 0xF5, 0xE3, 0x6A, 0xE1, 0x50, 0xDF, 0x70, 0xDD,
105 0xFC, 0xDB, 0xBB, 0xDA, 0xE3, 0xD9, 0x32, 0xD9, 0xDC, 0xD8, 0xBD, 0xD8,
106 0xB4, 0xD8, 0xEE, 0xD8, 0x30, 0xD9, 0xA0, 0xD9, 0x0B, 0xDA, 0x92, 0xDA,
107 0x11, 0xDB, 0x86, 0xDB, 0xF7, 0xDB, 0x4F, 0xDC, 0x9C, 0xDC, 0xCF, 0xDC,
108 0xE6, 0xDC, 0xE7, 0xDC, 0xD8, 0xDC, 0xA9, 0xDC, 0x79, 0xDC, 0x2B, 0xDC,
109 0xE8, 0xDB, 0x94, 0xDB, 0x42, 0xDB, 0x14, 0xDB, 0xE8, 0xDA, 0xEE, 0xDA,
110 0x02, 0xDB, 0x5F, 0xDB, 0xD4, 0xDB, 0xA6, 0xDC, 0x97, 0xDD, 0xD2, 0xDE,
111 0x78, 0xE0, 0x50, 0xE2, 0x9B, 0xE4, 0x12, 0xE7, 0x05, 0xEA, 0x20, 0xED,
112 0x8B, 0xF0, 0x61, 0xF4, 0x57, 0xF8, 0xAB, 0xFC, 0x10, 0x01, 0xC0, 0x05,
113 0x6D, 0x0A, 0x35, 0x0F, 0x1D, 0x14, 0xEC, 0x18, 0xC1, 0x1D, 0x65, 0x22,
114 0xF6, 0x26, 0x41, 0x2B, 0x5B, 0x2F, 0x21, 0x33, 0x8A, 0x36, 0xB2, 0x39,
115 0x5F, 0x3C, 0xB2, 0x3E, 0x89, 0x40, 0xF4, 0x41, 0xDF, 0x42, 0x59, 0x43,
116 0x54, 0x43, 0xE3, 0x42, 0xF2, 0x41, 0x9B, 0x40, 0xD1, 0x3E, 0xAA, 0x3C,
117 0x2B, 0x3A, 0x49, 0x37, 0x25, 0x34, 0xB6, 0x30, 0x14, 0x2D, 0x3A, 0x29,
118 0x49, 0x25, 0x3E, 0x21, 0x0E, 0x1D, 0xE5, 0x18, 0xAC, 0x14, 0x8E, 0x10,
119 0x69, 0x0C, 0x77, 0x08, 0x82, 0x04, 0xD4, 0x00, 0x48, 0xFD, 0xCB, 0xF9,
120 0x98, 0xF6, 0x75, 0xF3, 0xA6, 0xF0, 0xE2, 0xED, 0x73, 0xEB, 0x33, 0xE9,
121 0xFE, 0xE6, 0x1B, 0xE5, 0x3A, 0xE3, 0xA9, 0xE1, 0x17, 0xE0, 0xC9, 0xDE,
122 0x98, 0xDD, 0x69, 0xDC, 0x6F, 0xDB, 0x75, 0xDA, 0xA9, 0xD9, 0xDF, 0xD8,
123 0x39, 0xD8, 0xA6, 0xD7, 0x1B, 0xD7, 0xA7, 0xD6, 0x4C, 0xD6, 0xFC, 0xD5,
124 0xCC, 0xD5, 0xAF, 0xD5, 0xAC, 0xD5, 0xC9, 0xD5, 0xF8, 0xD5, 0x56, 0xD6,
125 0xC7, 0xD6, 0x6D, 0xD7, 0x27, 0xD8, 0x1B, 0xD9, 0x25, 0xDA, 0x5C, 0xDB,
126 0xCB, 0xDC, 0x58, 0xDE, 0x1E, 0xE0, 0xFF, 0xE1, 0x17, 0xE4, 0x4A, 0xE6,
127 0x93, 0xE8, 0x26, 0xEB, 0xB3, 0xED, 0x7F, 0xF0, 0x3E, 0xF3, 0x3A, 0xF6,
128 0x14, 0xF9, 0x0D, 0xFC, 0x17, 0xFF, 0x10, 0x02, 0x1A, 0x05, 0x01, 0x08,
129 0xF5, 0x0A, 0xB8, 0x0D, 0x81, 0x10, 0x12, 0x13, 0x81, 0x15, 0xEC, 0x17,
130 0x13, 0x1A, 0x31, 0x1C, 0x05, 0x1E, 0xCB, 0x1F, 0x48, 0x21, 0x9A, 0x22,
131 0xD6, 0x23, 0xCB, 0x24, 0xAB, 0x25, 0x4B, 0x26, 0xCF, 0x26, 0x21, 0x27,
132 0x4A, 0x27, 0x58, 0x27, 0x3F, 0x27, 0x03, 0x27, 0xB0, 0x26, 0x35, 0x26,
133 0xB0, 0x25, 0x07, 0x25, 0x4C, 0x24, 0x7F, 0x23, 0x98, 0x22, 0xAB, 0x21,
134 0xA0, 0x20, 0x92, 0x1F, 0x6A, 0x1E, 0x3E, 0x1D, 0x0F, 0x1C, 0xB2, 0x1A,
135 0x66, 0x19, 0xEC, 0x17, 0x81, 0x16, 0xEB, 0x14, 0x5C, 0x13, 0xC3, 0x11,
136 0xF3, 0x0F, 0x3A, 0x0E, 0x45, 0x0C, 0x66, 0x0A, 0x4C, 0x08, 0x4A, 0x06,
137 0x29, 0x04, 0xE7, 0x01, 0xA6, 0xFF, 0x43, 0xFD, 0xE9, 0xFA, 0x6C, 0xF8,
138 0xFF, 0xF5, 0x74, 0xF3, 0xFD, 0xF0, 0x87, 0xEE, 0xF9, 0xEB, 0x8A, 0xE9,
139 0x0F, 0xE7, 0xB5, 0xE4, 0x5C, 0xE2, 0x29, 0xE0, 0x0B, 0xDE, 0x03, 0xDC,
140 0x1F, 0xDA, 0x62, 0xD8, 0xC8, 0xD6, 0x5E, 0xD5, 0x23, 0xD4, 0x19, 0xD3,
141 0x42, 0xD2, 0xA2, 0xD1, 0x3A, 0xD1, 0x0E, 0xD1, 0x1A, 0xD1, 0x64, 0xD1,
142 0xDF, 0xD1, 0xAB, 0xD2, 0x9D, 0xD3, 0xE0, 0xD4, 0x48, 0xD6, 0xFA, 0xD7,
143 0xD4, 0xD9, 0xED, 0xDB, 0x2B, 0xDE, 0x8F, 0xE0, 0x39, 0xE3, 0xEC, 0xE5,
144 0xE4, 0xE8, 0xD6, 0xEB, 0x08, 0xEF, 0x2D, 0xF2, 0x65, 0xF5, 0xC9, 0xF8,
145 0x14, 0xFC, 0x82, 0xFF, 0xD1, 0x02, 0x37, 0x06, 0x73, 0x09, 0xA5, 0x0C,
146 0xD5, 0x0F, 0xDF, 0x12, 0xD8, 0x15, 0xA3, 0x18, 0x58, 0x1B, 0xD7, 0x1D,
147 0x20, 0x20, 0x5D, 0x22, 0x49, 0x24, 0x1F, 0x26, 0xA5, 0x27, 0x0D, 0x29,
148 0x26, 0x2A, 0x1B, 0x2B, 0xC4, 0x2B, 0x3B, 0x2C, 0x7D, 0x2C, 0x83, 0x2C,
149 0x56, 0x2C, 0xEC, 0x2B, 0x57, 0x2B, 0x85, 0x2A, 0x8F, 0x29, 0x60, 0x28,
150 0x12, 0x27, 0x8F, 0x25, 0xF7, 0x23, 0x2E, 0x22, 0x57, 0x20, 0x65, 0x1E,
151 0x50, 0x1C, 0x35, 0x1A, 0xFF, 0x17, 0xCA, 0x15, 0x7B, 0x13, 0x3E, 0x11,
152 0xFA, 0x0E, 0xA6, 0x0C, 0x68, 0x0A, 0x1B, 0x08, 0xEE, 0x05, 0xAF, 0x03,
153 0x98, 0x01, 0x73, 0xFF, 0x76, 0xFD, 0x8C, 0xFB, 0x90, 0xF9, 0xC6, 0xF7,
154 0xEF, 0xF5, 0x41, 0xF4, 0x90, 0xF2, 0x00, 0xF1, 0x89, 0xEF, 0x04, 0xEE,
155 0xA8, 0xEC, 0x44, 0xEB, 0x06, 0xEA, 0xBF, 0xE8, 0xA3, 0xE7, 0x87, 0xE6,
156 0x78, 0xE5, 0x7B, 0xE4, 0x87, 0xE3, 0xAF, 0xE2, 0xD9, 0xE1, 0x21, 0xE1,
157 0x80, 0xE0, 0xDE, 0xDF, 0x6A, 0xDF, 0xF4, 0xDE, 0xAC, 0xDE, 0x6E, 0xDE,
158 0x54, 0xDE, 0x57, 0xDE, 0x6F, 0xDE, 0xB0, 0xDE, 0x0C, 0xDF, 0x8E, 0xDF,
159 0x34, 0xE0, 0xF7, 0xE0, 0xEA, 0xE1, 0xF2, 0xE2, 0x1C, 0xE4, 0x7E, 0xE5,
160 0xEB, 0xE6, 0x94, 0xE8, 0x42, 0xEA, 0x25, 0xEC, 0x14, 0xEE, 0x0D, 0xF0,
161 0x49, 0xF2, 0x69, 0xF4, 0xC9, 0xF6, 0x09, 0xF9, 0x7B, 0xFB, 0xCF, 0xFD,
162 0x44, 0x00, 0x9A, 0x02, 0xEE, 0x04, 0x4C, 0x07, 0x91, 0x09, 0xCB, 0x0B,
163 0xF1, 0x0D, 0x01, 0x10, 0xF6, 0x11, 0xC2, 0x13, 0x90, 0x15, 0x25, 0x17,
164 0xB0, 0x18, 0x09, 0x1A, 0x50, 0x1B, 0x67, 0x1C, 0x5B, 0x1D, 0x3E, 0x1E,
165 0xF3, 0x1E, 0x92, 0x1F, 0x0A, 0x20, 0x6B, 0x20, 0xAB, 0x20, 0xD0, 0x20,
166 0xDE, 0x20, 0xD4, 0x20, 0xAF, 0x20, 0x7B, 0x20, 0x26, 0x20, 0xD0, 0x1F,
167 0x4E, 0x1F, 0xD6, 0x1E, 0x39, 0x1E, 0x8F, 0x1D, 0xD4, 0x1C, 0xFF, 0x1B,
168 0x24, 0x1B, 0x25, 0x1A, 0x23, 0x19, 0x0F, 0x18, 0xCD, 0x16, 0x8E, 0x15,
169 0x1D, 0x14, 0xAC, 0x12, 0x09, 0x11, 0x65, 0x0F, 0xA4, 0x0D, 0xB2, 0x0B,
170 0xC0, 0x09, 0x96, 0x07, 0x72, 0x05, 0x1A, 0x03, 0xC5, 0x00, 0x5D, 0xFE,
171 0xCC, 0xFB, 0x45, 0xF9, 0x9B, 0xF6, 0x03, 0xF4, 0x51, 0xF1, 0xB6, 0xEE,
172 0x13, 0xEC, 0x85, 0xE9, 0x15, 0xE7, 0x9E, 0xE4, 0x5B, 0xE2, 0x29, 0xE0,
173 0x26, 0xDE, 0x4E, 0xDC, 0xA2, 0xDA, 0x39, 0xD9, 0xF5, 0xD7, 0xF8, 0xD6,
174 0x39, 0xD6, 0xB6, 0xD5, 0x7E, 0xD5, 0x82, 0xD5, 0xCF, 0xD5, 0x60, 0xD6,
175 0x30, 0xD7, 0x47, 0xD8, 0x94, 0xD9, 0x27, 0xDB, 0xE7, 0xDC, 0xD7, 0xDE,
176 0x08, 0xE1, 0x4C, 0xE3, 0xCA, 0xE5, 0x52, 0xE8, 0x03, 0xEB, 0xB4, 0xED,
177 0x83, 0xF0, 0x40, 0xF3, 0x03, 0xF6, 0xC9, 0xF8, 0x75, 0xFB, 0x23, 0xFE,
178 0xA2, 0x00, 0x21, 0x03, 0x68, 0x05, 0x8B, 0x07, 0xAB, 0x09, 0x83, 0x0B,
179 0x54, 0x0D, 0xDF, 0x0E, 0x63, 0x10, 0x9F, 0x11, 0xBF, 0x12, 0xCA, 0x13,
180 0xA2, 0x14, 0x6B, 0x15, 0x09, 0x16, 0x95, 0x16, 0x07, 0x17, 0x55, 0x17,
181 0xB1, 0x17, 0xE4, 0x17, 0x21, 0x18, 0x45, 0x18, 0x6E, 0x18, 0x8A, 0x18,
182 0xAB, 0x18, 0xC1, 0x18, 0xDA, 0x18, 0xF4, 0x18, 0x0C, 0x19, 0x21, 0x19,
183 0x36, 0x19, 0x42, 0x19, 0x4E, 0x19, 0x51, 0x19, 0x41, 0x19, 0x33, 0x19,
184 0xFF, 0x18, 0xD0, 0x18, 0x76, 0x18, 0x11, 0x18, 0x99, 0x17, 0xE9, 0x16,
185 0x33, 0x16, 0x46, 0x15, 0x48, 0x14, 0x14, 0x13, 0xD0, 0x11, 0x52, 0x10,
186 0xC8, 0x0E, 0x1A, 0x0D, 0x37, 0x0B, 0x4D, 0x09, 0x2E, 0x07, 0x13, 0x05,
187 0xC9, 0x02, 0x88, 0x00, 0x3E, 0xFE, 0xD0, 0xFB, 0x7F, 0xF9, 0x16, 0xF7,
188 0xCF, 0xF4, 0x7F, 0xF2, 0x58, 0xF0, 0x45, 0xEE, 0x41, 0xEC, 0x69, 0xEA,
189 0xAA, 0xE8, 0x1E, 0xE7, 0xB5, 0xE5, 0x7B, 0xE4, 0x7D, 0xE3, 0x93, 0xE2,
190 0xF4, 0xE1, 0x6E, 0xE1, 0x29, 0xE1, 0x05, 0xE1, 0x16, 0xE1, 0x50, 0xE1,
191 0xAB, 0xE1, 0x37, 0xE2, 0xD5, 0xE2, 0x9C, 0xE3, 0x7A, 0xE4, 0x69, 0xE5,
192 0x75, 0xE6, 0x85, 0xE7, 0x9E, 0xE8, 0xD1, 0xE9, 0xF0, 0xEA, 0x2F, 0xEC,
193 0x4D, 0xED, 0x8A, 0xEE, 0xA5, 0xEF, 0xC8, 0xF0, 0xEA, 0xF1, 0x01, 0xF3,
194 0x1A, 0xF4, 0x26, 0xF5, 0x39, 0xF6, 0x3F, 0xF7, 0x3C, 0xF8, 0x57, 0xF9,
195 0x5B, 0xFA, 0x7C, 0xFB, 0x90, 0xFC, 0xC2, 0xFD, 0xEC, 0xFE, 0x38, 0x00,
196 0x7E, 0x01, 0xD3, 0x02, 0x50, 0x04, 0xC7, 0x05, 0x66, 0x07, 0xFF, 0x08,
197 0xBB, 0x0A, 0x70, 0x0C, 0x35, 0x0E, 0x0E, 0x10, 0xDC, 0x11, 0xBF, 0x13,
198 0x89, 0x15, 0x5F, 0x17, 0x18, 0x19, 0xC5, 0x1A, 0x60, 0x1C, 0xDE, 0x1D,
199 0x3A, 0x1F, 0x70, 0x20, 0x80, 0x21, 0x5B, 0x22, 0x0A, 0x23, 0x7E, 0x23,
200 0xBC, 0x23, 0xBB, 0x23, 0x82, 0x23, 0x02, 0x23, 0x4E, 0x22, 0x51, 0x21,
201 0x22, 0x20, 0xB9, 0x1E, 0x09, 0x1D, 0x39, 0x1B, 0x1D, 0x19, 0xF4, 0x16,
202 0x86, 0x14, 0x0E, 0x12, 0x7E, 0x0F, 0xBD, 0x0C, 0x0C, 0x0A, 0x35, 0x07,
203 0x78, 0x04, 0xA8, 0x01, 0xF8, 0xFE, 0x5B, 0xFC, 0xBF, 0xF9, 0x54, 0xF7,
204 0xF9, 0xF4, 0xD1, 0xF2, 0xC6, 0xF0, 0xF2, 0xEE, 0x54, 0xED, 0xCC, 0xEB,
205 0x8A, 0xEA, 0x65, 0xE9, 0x80, 0xE8, 0xBE, 0xE7, 0x31, 0xE7, 0xC9, 0xE6,
206 0x8E, 0xE6, 0x7E, 0xE6, 0x80, 0xE6, 0xA9, 0xE6, 0xE9, 0xE6, 0x40, 0xE7,
207 0xA7, 0xE7, 0x21, 0xE8, 0xA3, 0xE8, 0x2C, 0xE9, 0xBA, 0xE9, 0x48, 0xEA,
208 0xD8, 0xEA, 0x63, 0xEB, 0xEB, 0xEB, 0x6B, 0xEC, 0xEB, 0xEC, 0x64, 0xED,
209 0xDA, 0xED, 0x4A, 0xEE, 0xBD, 0xEE, 0x28, 0xEF, 0xA1, 0xEF, 0x11, 0xF0,
210 0x86, 0xF0, 0x17, 0xF1, 0x9E, 0xF1, 0x4E, 0xF2, 0xF0, 0xF2, 0xC7, 0xF3,
211 0x96, 0xF4, 0x80, 0xF5, 0x98, 0xF6, 0xAD, 0xF7, 0xFD, 0xF8, 0x47, 0xFA,
212 0xC6, 0xFB, 0x44, 0xFD, 0xDD, 0xFE, 0x99, 0x00, 0x5A, 0x02, 0x35, 0x04,
213 0x10, 0x06, 0xFE, 0x07, 0xE2, 0x09, 0xC2, 0x0B, 0xB0, 0x0D, 0x7F, 0x0F,
214 0x54, 0x11, 0x00, 0x13, 0xA8, 0x14, 0x22, 0x16, 0x88, 0x17, 0xC2, 0x18,
215 0xD1, 0x19, 0xC5, 0x1A, 0x7F, 0x1B, 0x14, 0x1C, 0x77, 0x1C, 0xAA, 0x1C,
216 0xB0, 0x1C, 0x81, 0x1C, 0x2F, 0x1C, 0xA6, 0x1B, 0x00, 0x1B, 0x26, 0x1A,
217 0x34, 0x19, 0x1A, 0x18, 0xF1, 0x16, 0x9C, 0x15, 0x46, 0x14, 0xCE, 0x12,
218 0x5B, 0x11, 0xD0, 0x0F, 0x52, 0x0E, 0xCF, 0x0C, 0x46, 0x0B, 0xD2, 0x09,
219 0x50, 0x08, 0xF7, 0x06, 0x8B, 0x05, 0x4B, 0x04, 0x03, 0x03, 0xDD, 0x01,
220 0xCA, 0x00, 0xAF, 0xFF, 0xBC, 0xFE, 0xBD, 0xFD, 0xE1, 0xFC, 0xFC, 0xFB,
221 0x30, 0xFB, 0x6B, 0xFA, 0x9A, 0xF9, 0xD8, 0xF8, 0x0C, 0xF8, 0x47, 0xF7,
222 0x75, 0xF6, 0xA8, 0xF5, 0xD6, 0xF4, 0xF1, 0xF3, 0x0F, 0xF3, 0x1B, 0xF2,
223 0x2A, 0xF1, 0x27, 0xF0, 0x2D, 0xEF, 0x28, 0xEE, 0x23, 0xED, 0x1D, 0xEC,
224 0x1E, 0xEB, 0x24, 0xEA, 0x38, 0xE9, 0x58, 0xE8, 0x8E, 0xE7, 0xD5, 0xE6,
225 0x39, 0xE6, 0xBA, 0xE5, 0x5B, 0xE5, 0x23, 0xE5, 0x0D, 0xE5, 0x29, 0xE5,
226 0x69, 0xE5, 0xD2, 0xE5, 0x77, 0xE6, 0x41, 0xE7, 0x42, 0xE8, 0x6C, 0xE9,
227 0xC7, 0xEA, 0x48, 0xEC, 0xED, 0xED, 0xCA, 0xEF, 0xB4, 0xF1, 0xD7, 0xF3,
228 0xF5, 0xF5, 0x48, 0xF8, 0x8E, 0xFA, 0xE6, 0xFC, 0x51, 0xFF, 0xAB, 0x01,
229 0x12, 0x04, 0x5D, 0x06, 0xA5, 0x08, 0xCD, 0x0A, 0xE4, 0x0C, 0xD4, 0x0E,
230 0x9F, 0x10, 0x52, 0x12, 0xD3, 0x13, 0x32, 0x15, 0x5B, 0x16, 0x63, 0x17,
231 0x2E, 0x18, 0xD2, 0x18, 0x4C, 0x19, 0x96, 0x19, 0xBB, 0x19, 0xB0, 0x19,
232 0x8C, 0x19, 0x34, 0x19, 0xCD, 0x18, 0x39, 0x18, 0x9E, 0x17, 0xDD, 0x16,
233 0x18, 0x16, 0x39, 0x15, 0x57, 0x14, 0x67, 0x13, 0x78, 0x12, 0x83, 0x11,
234 0x8F, 0x10, 0x9C, 0x0F, 0xAC, 0x0E, 0xC5, 0x0D, 0xDA, 0x0C, 0x01, 0x0C,
235 0x30, 0x0B, 0x55, 0x0A, 0x91, 0x09, 0xC0, 0x08, 0x02, 0x08, 0x36, 0x07,
236 0x7B, 0x06, 0xBD, 0x05, 0xED, 0x04, 0x2D, 0x04, 0x4B, 0x03, 0x81, 0x02,
237 0x8F, 0x01, 0xAD, 0x00, 0xBE, 0xFF, 0xAF, 0xFE, 0xAB, 0xFD, 0x85, 0xFC,
238 0x6A, 0xFB, 0x2E, 0xFA, 0x01, 0xF9, 0xB4, 0xF7, 0x78, 0xF6, 0x33, 0xF5,
239 0xE1, 0xF3, 0xA0, 0xF2, 0x54, 0xF1, 0x1E, 0xF0, 0xE8, 0xEE, 0xC8, 0xED,
240 0xBC, 0xEC, 0xBA, 0xEB, 0xDA, 0xEA, 0x0A, 0xEA, 0x61, 0xE9, 0xD0, 0xE8,
241 0x64, 0xE8, 0x1E, 0xE8, 0xF4, 0xE7, 0xF8, 0xE7, 0x1B, 0xE8, 0x67, 0xE8,
242 0xD7, 0xE8, 0x6A, 0xE9, 0x1F, 0xEA, 0xF8, 0xEA, 0xED, 0xEB, 0x05, 0xED,
243 0x2B, 0xEE, 0x7A, 0xEF, 0xC6, 0xF0, 0x38, 0xF2, 0xA7, 0xF3, 0x1B, 0xF5,
244 0xAC, 0xF6, 0x24, 0xF8, 0xB8, 0xF9, 0x2D, 0xFB, 0xB5, 0xFC, 0x1C, 0xFE,
245 0x7C, 0xFF, 0xDD, 0x00, 0x1D, 0x02, 0x61, 0x03, 0x7E, 0x04, 0x9C, 0x05,
246 0x98, 0x06, 0x7E, 0x07, 0x68, 0x08, 0x2B, 0x09, 0xEF, 0x09, 0x96, 0x0A,
247 0x3B, 0x0B, 0xC8, 0x0B, 0x49, 0x0C, 0xCD, 0x0C, 0x3D, 0x0D, 0xB1, 0x0D,
248 0x18, 0x0E, 0x7E, 0x0E, 0xE0, 0x0E, 0x42, 0x0F, 0x9C, 0x0F, 0xFA, 0x0F,
249 0x52, 0x10, 0xB1, 0x10, 0x05, 0x11, 0x5B, 0x11, 0xAB, 0x11, 0xF6, 0x11,
250 0x3D, 0x12, 0x77, 0x12, 0xA9, 0x12, 0xCE, 0x12, 0xE3, 0x12, 0xEC, 0x12,
251 0xD9, 0x12, 0xC5, 0x12, 0x7F, 0x12, 0x39, 0x12, 0xC6, 0x11, 0x45, 0x11,
252 0x9F, 0x10, 0xE4, 0x0F, 0x0E, 0x0F, 0x10, 0x0E, 0xFE, 0x0C, 0xC6, 0x0B,
253 0x81, 0x0A, 0x12, 0x09, 0x9F, 0x07, 0x03, 0x06, 0x67, 0x04, 0xBC, 0x02,
254 0xF3, 0x00, 0x36, 0xFF, 0x5D, 0xFD, 0x9A, 0xFB, 0xC5, 0xF9, 0x08, 0xF8,
255 0x53, 0xF6, 0x9F, 0xF4, 0x0A, 0xF3, 0x7E, 0xF1, 0x12, 0xF0, 0xBD, 0xEE,
256 0x86, 0xED, 0x7A, 0xEC, 0x7B, 0xEB, 0xAF, 0xEA, 0xFD, 0xE9, 0x77, 0xE9,
257 0x0F, 0xE9, 0xD4, 0xE8, 0xB9, 0xE8, 0xC2, 0xE8, 0xEC, 0xE8, 0x3A, 0xE9,
258 0xA0, 0xE9, 0x30, 0xEA, 0xC9, 0xEA, 0x8D, 0xEB, 0x54, 0xEC, 0x3A, 0xED,
259 0x2C, 0xEE, 0x2D, 0xEF, 0x39, 0xF0, 0x4B, 0xF1, 0x69, 0xF2, 0x83, 0xF3,
260 0x9E, 0xF4, 0xC4, 0xF5, 0xD9, 0xF6, 0x00, 0xF8, 0x0A, 0xF9, 0x29, 0xFA,
261 0x2B, 0xFB, 0x2B, 0xFC, 0x33, 0xFD, 0x23, 0xFE, 0x20, 0xFF, 0x03, 0x00,
262 0xF4, 0x00, 0xCE, 0x01, 0xB2, 0x02, 0x8A, 0x03, 0x52, 0x04, 0x34, 0x05,
263 0xF9, 0x05, 0xD4, 0x06, 0x99, 0x07, 0x6E, 0x08, 0x2F, 0x09, 0xF9, 0x09,
264 0xBE, 0x0A, 0x87, 0x0B, 0x45, 0x0C, 0x05, 0x0D, 0xBE, 0x0D, 0x6B, 0x0E,
265 0x17, 0x0F, 0xB7, 0x0F, 0x4F, 0x10, 0xDB, 0x10, 0x57, 0x11, 0xC6, 0x11,
266 0x24, 0x12, 0x6A, 0x12, 0xA9, 0x12, 0xC5, 0x12, 0xD5, 0x12, 0xC9, 0x12,
267 0xA3, 0x12, 0x6E, 0x12, 0x13, 0x12, 0xAD, 0x11, 0x27, 0x11, 0x8A, 0x10,
268 0xD5, 0x0F, 0x09, 0x0F, 0x2B, 0x0E, 0x34, 0x0D, 0x2E, 0x0C, 0x22, 0x0B,
269 0xF1, 0x09, 0xCA, 0x08, 0x87, 0x07, 0x46, 0x06, 0xFA, 0x04, 0xB1, 0x03,
270 0x6C, 0x02, 0x1A, 0x01, 0xD6, 0xFF, 0x8E, 0xFE, 0x5B, 0xFD, 0x20, 0xFC,
271 0x04, 0xFB, 0xEE, 0xF9, 0xDE, 0xF8, 0xE6, 0xF7, 0xF2, 0xF6, 0x1E, 0xF6,
272 0x48, 0xF5, 0x97, 0xF4, 0xE3, 0xF3, 0x52, 0xF3, 0xCC, 0xF2, 0x50, 0xF2,
273 0xE9, 0xF1, 0x8E, 0xF1, 0x40, 0xF1, 0x02, 0xF1, 0xD0, 0xF0, 0xAC, 0xF0,
274 0x8D, 0xF0, 0x7D, 0xF0, 0x71, 0xF0, 0x77, 0xF0, 0x78, 0xF0, 0x92, 0xF0,
275 0x9E, 0xF0, 0xCA, 0xF0, 0xE7, 0xF0, 0x1D, 0xF1, 0x50, 0xF1, 0x90, 0xF1,
276 0xD6, 0xF1, 0x22, 0xF2, 0x80, 0xF2, 0xDE, 0xF2, 0x52, 0xF3, 0xC6, 0xF3,
277 0x51, 0xF4, 0xDF, 0xF4, 0x7F, 0xF5, 0x2B, 0xF6, 0xDA, 0xF6, 0xA9, 0xF7,
278 0x78, 0xF8, 0x5E, 0xF9, 0x4B, 0xFA, 0x4A, 0xFB, 0x4E, 0xFC, 0x59, 0xFD,
279 0x7D, 0xFE, 0x9F, 0xFF, 0xCF, 0x00, 0x00, 0x02, 0x3C, 0x03, 0x6F, 0x04,
280 0xA7, 0x05, 0xE1, 0x06, 0x16, 0x08, 0x45, 0x09, 0x6C, 0x0A, 0x89, 0x0B,
281 0x9A, 0x0C, 0x95, 0x0D, 0x8D, 0x0E, 0x68, 0x0F, 0x39, 0x10, 0xEB, 0x10,
282 0x90, 0x11, 0x16, 0x12, 0x85, 0x12, 0xDD, 0x12, 0x14, 0x13, 0x3A, 0x13,
283 0x3F, 0x13, 0x2D, 0x13, 0xFF, 0x12, 0xBA, 0x12, 0x59, 0x12, 0xE9, 0x11,
284 0x56, 0x11, 0xBA, 0x10, 0xFF, 0x0F, 0x3D, 0x0F, 0x60, 0x0E, 0x7C, 0x0D,
285 0x8E, 0x0C, 0x87, 0x0B, 0x88, 0x0A, 0x6D, 0x09, 0x61, 0x08, 0x3A, 0x07,
286 0x29, 0x06, 0xFC, 0x04, 0xEB, 0x03, 0xCC, 0x02, 0xB3, 0x01, 0x9C, 0x00,
287 0x88, 0xFF, 0x81, 0xFE, 0x75, 0xFD, 0x80, 0xFC, 0x8F, 0xFB, 0x9A, 0xFA,
288 0xC0, 0xF9, 0xDA, 0xF8, 0x15, 0xF8, 0x42, 0xF7, 0x8E, 0xF6, 0xDE, 0xF5,
289 0x33, 0xF5, 0x96, 0xF4, 0x02, 0xF4, 0x78, 0xF3, 0xFE, 0xF2, 0x87, 0xF2,
290 0x2A, 0xF2, 0xC4, 0xF1, 0x7C, 0xF1, 0x30, 0xF1, 0xFF, 0xF0, 0xCD, 0xF0,
291 0xB2, 0xF0, 0x9D, 0xF0, 0x99, 0xF0, 0xA2, 0xF0, 0xB7, 0xF0, 0xDB, 0xF0,
292 0x0E, 0xF1, 0x4B, 0xF1, 0x9F, 0xF1, 0xF4, 0xF1, 0x62, 0xF2, 0xD8, 0xF2,
293 0x60, 0xF3, 0xF6, 0xF3, 0x92, 0xF4, 0x47, 0xF5, 0xF9, 0xF5, 0xBC, 0xF6,
294 0x92, 0xF7, 0x62, 0xF8, 0x4F, 0xF9, 0x2D, 0xFA, 0x28, 0xFB, 0x18, 0xFC,
295 0x0B, 0xFD, 0x11, 0xFE, 0x07, 0xFF, 0x11, 0x00, 0x06, 0x01, 0x0E, 0x02,
296 0x00, 0x03, 0xFB, 0x03, 0xE9, 0x04, 0xC8, 0x05, 0xB4, 0x06, 0x87, 0x07,
297 0x58, 0x08, 0x1E, 0x09, 0xD6, 0x09, 0x84, 0x0A, 0x1E, 0x0B, 0xB8, 0x0B,
298 0x38, 0x0C, 0xB7, 0x0C, 0x1B, 0x0D, 0x7E, 0x0D, 0xC8, 0x0D, 0x04, 0x0E,
299 0x3A, 0x0E, 0x59, 0x0E, 0x71, 0x0E, 0x7A, 0x0E, 0x70, 0x0E, 0x61, 0x0E,
300 0x3E, 0x0E, 0x15, 0x0E, 0xD9, 0x0D, 0x97, 0x0D, 0x48, 0x0D, 0xE9, 0x0C,
301 0x8B, 0x0C, 0x13, 0x0C, 0xA2, 0x0B, 0x21, 0x0B, 0x90, 0x0A, 0x05, 0x0A,
302 0x5D, 0x09, 0xC7, 0x08, 0x0F, 0x08, 0x69, 0x07, 0xAE, 0x06, 0xF0, 0x05,
303 0x2E, 0x05, 0x61, 0x04, 0x99, 0x03, 0xBE, 0x02, 0xF3, 0x01, 0x1C, 0x01,
304 0x40, 0x00, 0x64, 0xFF, 0x87, 0xFE, 0xA9, 0xFD, 0xCE, 0xFC, 0xF1, 0xFB,
305 0x21, 0xFB, 0x45, 0xFA, 0x76, 0xF9, 0xA5, 0xF8, 0xE1, 0xF7, 0x1B, 0xF7,
306 0x65, 0xF6, 0xB1, 0xF5, 0x0A, 0xF5, 0x70, 0xF4, 0xD9, 0xF3, 0x52, 0xF3,
307 0xD8, 0xF2, 0x67, 0xF2, 0x0A, 0xF2, 0xB4, 0xF1, 0x74, 0xF1, 0x40, 0xF1,
308 0x1A, 0xF1, 0x0A, 0xF1, 0x01, 0xF1, 0x13, 0xF1, 0x2B, 0xF1, 0x5B, 0xF1,
309 0x9A, 0xF1, 0xE5, 0xF1, 0x48, 0xF2, 0xB2, 0xF2, 0x32, 0xF3, 0xBD, 0xF3,
310 0x58, 0xF4, 0xFC, 0xF4, 0xAF, 0xF5, 0x6E, 0xF6, 0x38, 0xF7, 0x0F, 0xF8,
311 0xE9, 0xF8, 0xD3, 0xF9, 0xBA, 0xFA, 0xA7, 0xFB, 0xA4, 0xFC, 0x96, 0xFD,
312 0x9C, 0xFE, 0x8F, 0xFF, 0x98, 0x00, 0x89, 0x01, 0x81, 0x02, 0x7B, 0x03,
313 0x68, 0x04, 0x59, 0x05, 0x38, 0x06, 0x19, 0x07, 0xEB, 0x07, 0xAD, 0x08,
314 0x74, 0x09, 0x21, 0x0A, 0xCE, 0x0A, 0x64, 0x0B, 0xF5, 0x0B, 0x6F, 0x0C,
315 0xE3, 0x0C, 0x3F, 0x0D, 0x93, 0x0D, 0xD1, 0x0D, 0x07, 0x0E, 0x28, 0x0E,
316 0x39, 0x0E, 0x40, 0x0E, 0x2E, 0x0E, 0x18, 0x0E, 0xE7, 0x0D, 0xB5, 0x0D,
317 0x67, 0x0D, 0x17, 0x0D, 0xB2, 0x0C, 0x47, 0x0C, 0xCD, 0x0B, 0x49, 0x0B,
318 0xBA, 0x0A, 0x22, 0x0A, 0x81, 0x09, 0xD8, 0x08, 0x27, 0x08, 0x7C, 0x07,
319 0xB7, 0x06, 0xFF, 0x05, 0x36, 0x05, 0x75, 0x04, 0xA8, 0x03, 0xE4, 0x02,
320 0x12, 0x02, 0x51, 0x01, 0x8B, 0x00, 0xBE, 0xFF, 0xFF, 0xFE, 0x34, 0xFE,
321 0x7C, 0xFD, 0xBA, 0xFC, 0x07, 0xFC, 0x5A, 0xFB, 0xA6, 0xFA, 0x03, 0xFA,
322 0x5C, 0xF9, 0xC4, 0xF8, 0x2D, 0xF8, 0xA0, 0xF7, 0x21, 0xF7, 0x9A, 0xF6,
323 0x2D, 0xF6, 0xB7, 0xF5, 0x59, 0xF5, 0xF9, 0xF4, 0xA9, 0xF4, 0x64, 0xF4,
324 0x22, 0xF4, 0xF3, 0xF3, 0xC6, 0xF3, 0xAC, 0xF3, 0x95, 0xF3, 0x92, 0xF3,
325 0x92, 0xF3, 0xA8, 0xF3, 0xBD, 0xF3, 0xEA, 0xF3, 0x1B, 0xF4, 0x5B, 0xF4,
326 0xA9, 0xF4, 0xFF, 0xF4, 0x61, 0xF5, 0xCE, 0xF5, 0x47, 0xF6, 0xCC, 0xF6,
327 0x59, 0xF7, 0xF1, 0xF7, 0x93, 0xF8, 0x3B, 0xF9, 0xE4, 0xF9, 0xA3, 0xFA,
328 0x5A, 0xFB, 0x24, 0xFC, 0xE5, 0xFC, 0xB5, 0xFD, 0x7E, 0xFE, 0x47, 0xFF,
329 0x1C, 0x00, 0xE4, 0x00, 0xB8, 0x01, 0x7C, 0x02, 0x4B, 0x03, 0x04, 0x04,
330 0xCD, 0x04, 0x77, 0x05, 0x2E, 0x06, 0xD3, 0x06, 0x73, 0x07, 0x10, 0x08,
331 0x96, 0x08, 0x25, 0x09, 0x95, 0x09, 0x08, 0x0A, 0x68, 0x0A, 0xC7, 0x0A,
332 0x10, 0x0B, 0x57, 0x0B, 0x8B, 0x0B, 0xB9, 0x0B, 0xD6, 0x0B, 0xED, 0x0B,
333 0xF6, 0x0B, 0xF7, 0x0B, 0xEA, 0x0B, 0xD4, 0x0B, 0xB3, 0x0B, 0x87, 0x0B,
334 0x56, 0x0B, 0x17, 0x0B, 0xCF, 0x0A, 0x80, 0x0A, 0x24, 0x0A, 0xC4, 0x09,
335 0x59, 0x09, 0xE5, 0x08, 0x72, 0x08, 0xE9, 0x07, 0x64, 0x07, 0xD1, 0x06,
336 0x3A, 0x06, 0x9B, 0x05, 0xF6, 0x04, 0x54, 0x04, 0x9C, 0x03, 0xEF, 0x02,
337 0x2E, 0x02, 0x75, 0x01, 0xB0, 0x00, 0xF0, 0xFF, 0x2F, 0xFF, 0x60, 0xFE,
338 0xA0, 0xFD, 0xD0, 0xFC, 0x10, 0xFC, 0x45, 0xFB, 0x86, 0xFA, 0xC7, 0xF9,
339 0x0F, 0xF9, 0x60, 0xF8, 0xB2, 0xF7, 0x0E, 0xF7, 0x73, 0xF6, 0xE5, 0xF5,
340 0x5A, 0xF5, 0xE8, 0xF4, 0x78, 0xF4, 0x1A, 0xF4, 0xCA, 0xF3, 0x87, 0xF3,
341 0x54, 0xF3, 0x36, 0xF3, 0x1D, 0xF3, 0x21, 0xF3, 0x2B, 0xF3, 0x4C, 0xF3,
342 0x7C, 0xF3, 0xB5, 0xF3, 0x0B, 0xF4, 0x5F, 0xF4, 0xCE, 0xF4, 0x46, 0xF5,
343 0xC8, 0xF5, 0x5C, 0xF6, 0xF4, 0xF6, 0x9B, 0xF7, 0x47, 0xF8, 0xFD, 0xF8,
344 0xB4, 0xF9, 0x70, 0xFA, 0x35, 0xFB, 0xFA, 0xFB, 0xBF, 0xFC, 0x88, 0xFD,
345 0x4C, 0xFE, 0x10, 0xFF, 0xCB, 0xFF, 0x8B, 0x00, 0x44, 0x01, 0xF6, 0x01,
346 0xA5, 0x02, 0x4D, 0x03, 0xEA, 0x03, 0x7F, 0x04, 0x16, 0x05, 0x99, 0x05,
347 0x25, 0x06, 0x93, 0x06, 0x11, 0x07, 0x70, 0x07, 0xD6, 0x07, 0x30, 0x08,
348 0x81, 0x08, 0xD0, 0x08, 0x0F, 0x09, 0x52, 0x09, 0x80, 0x09, 0xB6, 0x09,
349 0xD6, 0x09, 0xFA, 0x09, 0x13, 0x0A, 0x23, 0x0A, 0x32, 0x0A, 0x33, 0x0A,
350 0x32, 0x0A, 0x27, 0x0A, 0x16, 0x0A, 0xFB, 0x09, 0xDE, 0x09, 0xAD, 0x09,
351 0x82, 0x09, 0x41, 0x09, 0x03, 0x09, 0xB8, 0x08, 0x60, 0x08, 0x05, 0x08,
352 0x9A, 0x07, 0x2F, 0x07, 0xB1, 0x06, 0x34, 0x06, 0xAE, 0x05, 0x19, 0x05,
353 0x83, 0x04, 0xE0, 0x03, 0x3D, 0x03, 0x8E, 0x02, 0xE1, 0x01, 0x2B, 0x01,
354 0x73, 0x00, 0xC2, 0xFF, 0x02, 0xFF, 0x49, 0xFE, 0x90, 0xFD, 0xDA, 0xFC,
355 0x22, 0xFC, 0x7A, 0xFB, 0xCD, 0xFA, 0x2D, 0xFA, 0x8D, 0xF9, 0xFC, 0xF8,
356 0x6E, 0xF8, 0xF0, 0xF7, 0x76, 0xF7, 0x14, 0xF7, 0xAB, 0xF6, 0x5F, 0xF6,
357 0x12, 0xF6, 0xDA, 0xF5, 0xAB, 0xF5, 0x88, 0xF5, 0x76, 0xF5, 0x69, 0xF5,
358 0x70, 0xF5, 0x7C, 0xF5, 0x95, 0xF5, 0xBD, 0xF5, 0xE5, 0xF5, 0x23, 0xF6,
359 0x60, 0xF6, 0xA6, 0xF6, 0xFD, 0xF6, 0x4C, 0xF7, 0xB3, 0xF7, 0x0D, 0xF8,
360 0x82, 0xF8, 0xE1, 0xF8, 0x5D, 0xF9, 0xCA, 0xF9, 0x48, 0xFA, 0xC3, 0xFA,
361 0x40, 0xFB, 0xC2, 0xFB, 0x45, 0xFC, 0xC3, 0xFC, 0x4F, 0xFD, 0xD3, 0xFD,
362 0x60, 0xFE, 0xE8, 0xFE, 0x78, 0xFF, 0x00, 0x00, 0x94, 0x00, 0x1F, 0x01,
363 0xA8, 0x01, 0x41, 0x02, 0xC8, 0x02, 0x60, 0x03, 0xEA, 0x03, 0x79, 0x04,
364 0x09, 0x05, 0x8A, 0x05, 0x1A, 0x06, 0x99, 0x06, 0x1F, 0x07, 0x97, 0x07,
365 0x11, 0x08, 0x7F, 0x08, 0xE6, 0x08, 0x4C, 0x09, 0xA0, 0x09, 0xF3, 0x09,
366 0x36, 0x0A, 0x72, 0x0A, 0x9F, 0x0A, 0xC1, 0x0A, 0xD6, 0x0A, 0xDE, 0x0A,
367 0xDA, 0x0A, 0xC3, 0x0A, 0xA3, 0x0A, 0x73, 0x0A, 0x33, 0x0A, 0xEA, 0x09,
368 0x8F, 0x09, 0x2A, 0x09, 0xB7, 0x08, 0x35, 0x08, 0xB0, 0x07, 0x13, 0x07,
369 0x80, 0x06, 0xD7, 0x05, 0x2A, 0x05, 0x7A, 0x04, 0xBD, 0x03, 0x08, 0x03,
370 0x45, 0x02, 0x8D, 0x01, 0xD0, 0x00, 0x12, 0x00, 0x5A, 0xFF, 0xA1, 0xFE,
371 0xF4, 0xFD, 0x43, 0xFD, 0xA2, 0xFC, 0x0A, 0xFC, 0x6C, 0xFB, 0xE7, 0xFA,
372 0x5C, 0xFA, 0xE7, 0xF9, 0x72, 0xF9, 0x0D, 0xF9, 0xAF, 0xF8, 0x5C, 0xF8,
373 0x19, 0xF8, 0xD5, 0xF7, 0xA0, 0xF7, 0x75, 0xF7, 0x4F, 0xF7, 0x35, 0xF7,
374 0x22, 0xF7, 0x19, 0xF7, 0x11, 0xF7, 0x1A, 0xF7, 0x1D, 0xF7, 0x32, 0xF7,
375 0x46, 0xF7, 0x61, 0xF7, 0x81, 0xF7, 0xAA, 0xF7, 0xD0, 0xF7, 0x07, 0xF8,
376 0x35, 0xF8, 0x74, 0xF8, 0xAF, 0xF8, 0xF1, 0xF8, 0x3D, 0xF9, 0x85, 0xF9,
377 0xDE, 0xF9, 0x2D, 0xFA, 0x93, 0xFA, 0xEE, 0xFA, 0x59, 0xFB, 0xC6, 0xFB,
378 0x2D, 0xFC, 0xB1, 0xFC, 0x21, 0xFD, 0xAB, 0xFD, 0x2A, 0xFE, 0xB6, 0xFE,
379 0x43, 0xFF, 0xCB, 0xFF, 0x66, 0x00, 0xF4, 0x00, 0x90, 0x01, 0x21, 0x02,
380 0xBD, 0x02, 0x4F, 0x03, 0xDD, 0x03, 0x76, 0x04, 0xF9, 0x04, 0x8C, 0x05,
381 0x06, 0x06, 0x88, 0x06, 0xFA, 0x06, 0x69, 0x07, 0xCB, 0x07, 0x24, 0x08,
382 0x77, 0x08, 0xBA, 0x08, 0xF7, 0x08, 0x24, 0x09, 0x49, 0x09, 0x61, 0x09,
383 0x6B, 0x09, 0x6B, 0x09, 0x5E, 0x09, 0x48, 0x09, 0x26, 0x09, 0xF4, 0x08,
384 0xC3, 0x08, 0x7A, 0x08, 0x39, 0x08, 0xDB, 0x07, 0x8A, 0x07, 0x20, 0x07,
385 0xBC, 0x06, 0x4E, 0x06, 0xDF, 0x05, 0x66, 0x05, 0xEF, 0x04, 0x6F, 0x04,
386 0xF5, 0x03, 0x73, 0x03, 0xF7, 0x02, 0x72, 0x02, 0xF7, 0x01, 0x7A, 0x01,
387 0xFB, 0x00, 0x80, 0x00, 0x03, 0x00, 0x8E, 0xFF, 0x13, 0xFF, 0xA2, 0xFE,
388 0x33, 0xFE, 0xBF, 0xFD, 0x56, 0xFD, 0xE6, 0xFC, 0x81, 0xFC, 0x16, 0xFC,
389 0xB8, 0xFB, 0x54, 0xFB, 0xF9, 0xFA, 0x9A, 0xFA, 0x42, 0xFA, 0xEE, 0xF9,
390 0x97, 0xF9, 0x4D, 0xF9, 0x04, 0xF9, 0xBA, 0xF8, 0x7D, 0xF8, 0x3C, 0xF8,
391 0x08, 0xF8, 0xD9, 0xF7, 0xAD, 0xF7, 0x8C, 0xF7, 0x72, 0xF7, 0x5C, 0xF7,
392 0x57, 0xF7, 0x51, 0xF7, 0x5F, 0xF7, 0x6C, 0xF7, 0x8E, 0xF7, 0xAF, 0xF7,
393 0xE3, 0xF7, 0x1E, 0xF8, 0x65, 0xF8, 0xB4, 0xF8, 0x11, 0xF9, 0x75, 0xF9,
394 0xE2, 0xF9, 0x58, 0xFA, 0xD8, 0xFA, 0x60, 0xFB, 0xED, 0xFB, 0x83, 0xFC,
395 0x1C, 0xFD, 0xBB, 0xFD, 0x56, 0xFE, 0xFF, 0xFE, 0xA0, 0xFF, 0x49, 0x00,
396 0xEB, 0x00, 0x8F, 0x01, 0x2C, 0x02, 0xCC, 0x02, 0x5E, 0x03, 0xEE, 0x03,
397 0x79, 0x04, 0xFB, 0x04, 0x77, 0x05, 0xEA, 0x05, 0x51, 0x06, 0xB1, 0x06,
398 0x05, 0x07, 0x51, 0x07, 0x94, 0x07, 0xC7, 0x07, 0xF9, 0x07, 0x19, 0x08,
399 0x33, 0x08, 0x41, 0x08, 0x47, 0x08, 0x45, 0x08, 0x39, 0x08, 0x26, 0x08,
400 0x09, 0x08, 0xEA, 0x07, 0xBE, 0x07, 0x91, 0x07, 0x5A, 0x07, 0x22, 0x07,
401 0xE1, 0x06, 0x9F, 0x06, 0x57, 0x06, 0x0B, 0x06, 0xBC, 0x05, 0x71, 0x05,
402 0x13, 0x05, 0xC7, 0x04, 0x61, 0x04, 0x11, 0x04, 0xA6, 0x03, 0x51, 0x03,
403 0xEA, 0x02, 0x88, 0x02, 0x20, 0x02, 0xB6, 0x01, 0x50, 0x01, 0xDE, 0x00,
404 0x78, 0x00, 0x07, 0x00, 0x97, 0xFF, 0x2A, 0xFF, 0xB1, 0xFE, 0x49, 0xFE,
405 0xCA, 0xFD, 0x67, 0xFD, 0xE8, 0xFC, 0x84, 0xFC, 0x13, 0xFC, 0xA8, 0xFB,
406 0x40, 0xFB, 0xDA, 0xFA, 0x79, 0xFA, 0x1E, 0xFA, 0xC6, 0xF9, 0x77, 0xF9,
407 0x2B, 0xF9, 0xE8, 0xF8, 0xAC, 0xF8, 0x78, 0xF8, 0x4D, 0xF8, 0x29, 0xF8,
408 0x11, 0xF8, 0x01, 0xF8, 0xFB, 0xF7, 0xFF, 0xF7, 0x0B, 0xF8, 0x23, 0xF8,
409 0x43, 0xF8, 0x6E, 0xF8, 0xA0, 0xF8, 0xDF, 0xF8, 0x20, 0xF9, 0x71, 0xF9,
410 0xC3, 0xF9, 0x1E, 0xFA, 0x83, 0xFA, 0xE5, 0xFA, 0x53, 0xFB, 0xC3, 0xFB,
411 0x35, 0xFC, 0xB0, 0xFC, 0x24, 0xFD, 0xA3, 0xFD, 0x1B, 0xFE, 0x93, 0xFE,
412 0x11, 0xFF, 0x88, 0xFF, 0x02, 0x00, 0x77, 0x00, 0xEC, 0x00, 0x5A, 0x01,
413 0xC4, 0x01, 0x32, 0x02, 0x94, 0x02, 0xF9, 0x02, 0x54, 0x03, 0xB1, 0x03,
414 0x03, 0x04, 0x52, 0x04, 0x9E, 0x04, 0xE9, 0x04, 0x28, 0x05, 0x6B, 0x05,
415 0xA2, 0x05, 0xDA, 0x05, 0x0A, 0x06, 0x39, 0x06, 0x5A, 0x06, 0x88, 0x06,
416 0x9C, 0x06, 0xC1, 0x06, 0xCD, 0x06, 0xE5, 0x06, 0xEB, 0x06, 0xF6, 0x06,
417 0xF2, 0x06, 0xF1, 0x06, 0xE3, 0x06, 0xD3, 0x06, 0xBF, 0x06, 0x9C, 0x06,
418 0x81, 0x06, 0x50, 0x06, 0x20, 0x06, 0xEB, 0x05, 0xA9, 0x05, 0x65, 0x05,
419 0x1A, 0x05, 0xC7, 0x04, 0x6F, 0x04, 0x0F, 0x04, 0xAA, 0x03, 0x3E, 0x03,
420 0xCE, 0x02, 0x5C, 0x02, 0xDE, 0x01, 0x69, 0x01, 0xE6, 0x00, 0x68, 0x00,
421 0xE3, 0xFF, 0x5F, 0xFF, 0xDD, 0xFE, 0x57, 0xFE, 0xD8, 0xFD, 0x5A, 0xFD,
422 0xDC, 0xFC, 0x65, 0xFC, 0xEF, 0xFB, 0x83, 0xFB, 0x14, 0xFB, 0xB8, 0xFA,
423 0x5A, 0xFA, 0x07, 0xFA, 0xBB, 0xF9, 0x74, 0xF9, 0x3D, 0xF9, 0x06, 0xF9,
424 0xE2, 0xF8, 0xBD, 0xF8, 0xAA, 0xF8, 0x98, 0xF8, 0x95, 0xF8, 0x98, 0xF8,
425 0xA6, 0xF8, 0xB6, 0xF8, 0xD9, 0xF8, 0xF7, 0xF8, 0x25, 0xF9, 0x58, 0xF9,
426 0x8E, 0xF9, 0xD0, 0xF9, 0x11, 0xFA, 0x5C, 0xFA, 0xA7, 0xFA, 0xFA, 0xFA,
427 0x4D, 0xFB, 0xA7, 0xFB, 0x00, 0xFC, 0x5F, 0xFC, 0xBB, 0xFC, 0x22, 0xFD,
428 0x77, 0xFD, 0xE7, 0xFD, 0x3E, 0xFE, 0xAC, 0xFE, 0x08, 0xFF, 0x72, 0xFF,
429 0xD1, 0xFF, 0x35, 0x00, 0x99, 0x00, 0xF2, 0x00, 0x5A, 0x01, 0xB1, 0x01,
430 0x14, 0x02, 0x6B, 0x02, 0xCA, 0x02, 0x1B, 0x03, 0x72, 0x03, 0xC2, 0x03,
431 0x14, 0x04, 0x60, 0x04, 0xA7, 0x04, 0xF1, 0x04, 0x2D, 0x05, 0x6C, 0x05,
432 0xA4, 0x05, 0xD7, 0x05, 0x08, 0x06, 0x2D, 0x06, 0x55, 0x06, 0x6D, 0x06,
433 0x88, 0x06, 0x95, 0x06, 0xA0, 0x06, 0xA3, 0x06, 0x9C, 0x06, 0x94, 0x06,
434 0x7E, 0x06, 0x65, 0x06, 0x44, 0x06, 0x1B, 0x06, 0xEE, 0x05, 0xB5, 0x05,
435 0x7A, 0x05, 0x34, 0x05, 0xEF, 0x04, 0x9A, 0x04, 0x52, 0x04, 0xEC, 0x03,
436 0x9A, 0x03, 0x31, 0x03, 0xD0, 0x02, 0x68, 0x02, 0xFF, 0x01, 0x98, 0x01,
437 0x27, 0x01, 0xBF, 0x00, 0x4C, 0x00, 0xE8, 0xFF, 0x74, 0xFF, 0x12, 0xFF,
438 0xA8, 0xFE, 0x44, 0xFE, 0xE2, 0xFD, 0x82, 0xFD, 0x27, 0xFD, 0xD0, 0xFC,
439 0x7D, 0xFC, 0x2C, 0xFC, 0xE7, 0xFB, 0x9F, 0xFB, 0x62, 0xFB, 0x26, 0xFB,
440 0xEE, 0xFA, 0xC3, 0xFA, 0x92, 0xFA, 0x71, 0xFA, 0x51, 0xFA, 0x34, 0xFA,
441 0x1F, 0xFA, 0x10, 0xFA, 0x02, 0xFA, 0x01, 0xFA, 0xFB, 0xF9, 0x01, 0xFA,
442 0x0B, 0xFA, 0x18, 0xFA, 0x2B, 0xFA, 0x43, 0xFA, 0x61, 0xFA, 0x7E, 0xFA,
443 0xA9, 0xFA, 0xCC, 0xFA, 0x03, 0xFB, 0x30, 0xFB, 0x6D, 0xFB, 0xA6, 0xFB,
444 0xE7, 0xFB, 0x2C, 0xFC, 0x74, 0xFC, 0xBD, 0xFC, 0x10, 0xFD, 0x5F, 0xFD,
445 0xBB, 0xFD, 0x0E, 0xFE, 0x71, 0xFE, 0xC8, 0xFE, 0x2A, 0xFF, 0x8D, 0xFF,
446 0xEF, 0xFF, 0x55, 0x00, 0xB8, 0x00, 0x1E, 0x01, 0x83, 0x01, 0xE2, 0x01,
447 0x49, 0x02, 0xA5, 0x02, 0x07, 0x03, 0x5F, 0x03, 0xBB, 0x03, 0x0B, 0x04,
448 0x5D, 0x04, 0xA6, 0x04, 0xEF, 0x04, 0x2D, 0x05, 0x6A, 0x05, 0x9F, 0x05,
449 0xCD, 0x05, 0xF5, 0x05, 0x16, 0x06, 0x2D, 0x06, 0x44, 0x06, 0x4A, 0x06,
450 0x53, 0x06, 0x4D, 0x06, 0x43, 0x06, 0x32, 0x06, 0x18, 0x06, 0xFA, 0x05,
451 0xD4, 0x05, 0xA7, 0x05, 0x74, 0x05, 0x3D, 0x05, 0xFE, 0x04, 0xC0, 0x04,
452 0x73, 0x04, 0x2E, 0x04, 0xD7, 0x03, 0x8C, 0x03, 0x30, 0x03, 0xDA, 0x02,
453 0x84, 0x02, 0x21, 0x02, 0xC9, 0x01, 0x67, 0x01, 0x08, 0x01, 0xAB, 0x00,
454 0x47, 0x00, 0xEC, 0xFF, 0x8D, 0xFF, 0x33, 0xFF, 0xD9, 0xFE, 0x7C, 0xFE,
455 0x29, 0xFE, 0xD1, 0xFD, 0x80, 0xFD, 0x33, 0xFD, 0xE6, 0xFC, 0x9F, 0xFC,
456 0x5A, 0xFC, 0x14, 0xFC, 0xDF, 0xFB, 0x9B, 0xFB, 0x71, 0xFB, 0x39, 0xFB,
457 0x13, 0xFB, 0xE5, 0xFA, 0xC9, 0xFA, 0xA6, 0xFA, 0x91, 0xFA, 0x7D, 0xFA,
458 0x6D, 0xFA, 0x66, 0xFA, 0x61, 0xFA, 0x65, 0xFA, 0x6A, 0xFA, 0x79, 0xFA,
459 0x87, 0xFA, 0xA3, 0xFA, 0xBD, 0xFA, 0xDE, 0xFA, 0x07, 0xFB, 0x30, 0xFB,
460 0x64, 0xFB, 0x98, 0xFB, 0xD2, 0xFB, 0x10, 0xFC, 0x51, 0xFC, 0x97, 0xFC,
461 0xE2, 0xFC, 0x2D, 0xFD, 0x7F, 0xFD, 0xCF, 0xFD, 0x25, 0xFE, 0x77, 0xFE,
462 0xD3, 0xFE, 0x28, 0xFF, 0x86, 0xFF, 0xDC, 0xFF, 0x39, 0x00, 0x91, 0x00,
463 0xEB, 0x00, 0x41, 0x01, 0x95, 0x01, 0xEA, 0x01, 0x3C, 0x02, 0x8B, 0x02,
464 0xD6, 0x02, 0x21, 0x03, 0x64, 0x03, 0xA5, 0x03, 0xE4, 0x03, 0x1B, 0x04,
465 0x54, 0x04, 0x7E, 0x04, 0xB0, 0x04, 0xD2, 0x04, 0xF4, 0x04, 0x13, 0x05,
466 0x26, 0x05, 0x3C, 0x05, 0x46, 0x05, 0x50, 0x05, 0x50, 0x05, 0x4F, 0x05,
467 0x46, 0x05, 0x39, 0x05, 0x29, 0x05, 0x0F, 0x05, 0xF6, 0x04, 0xD2, 0x04,
468 0xB2, 0x04, 0x85, 0x04, 0x5C, 0x04, 0x28, 0x04, 0xF3, 0x03, 0xBC, 0x03,
469 0x7D, 0x03, 0x41, 0x03, 0xFB, 0x02, 0xBC, 0x02, 0x70, 0x02, 0x29, 0x02,
470 0xDB, 0x01, 0x8F, 0x01, 0x3D, 0x01, 0xF0, 0x00, 0xA1, 0x00, 0x4B, 0x00,
471 0xFE, 0xFF, 0xA5, 0xFF, 0x59, 0xFF, 0x04, 0xFF, 0xB6, 0xFE, 0x66, 0xFE,
472 0x1A, 0xFE, 0xCB, 0xFD, 0x84, 0xFD, 0x39, 0xFD, 0xF6, 0xFC, 0xB1, 0xFC,
473 0x76, 0xFC, 0x37, 0xFC, 0x03, 0xFC, 0xCD, 0xFB, 0x9D, 0xFB, 0x74, 0xFB,
474 0x49, 0xFB, 0x2D, 0xFB, 0x09, 0xFB, 0xF8, 0xFA, 0xDF, 0xFA, 0xD7, 0xFA,
475 0xC9, 0xFA, 0xCD, 0xFA, 0xC7, 0xFA, 0xD7, 0xFA, 0xDD, 0xFA, 0xF7, 0xFA,
476 0x07, 0xFB, 0x2C, 0xFB, 0x46, 0xFB, 0x75, 0xFB, 0x9B, 0xFB, 0xCE, 0xFB,
477 0x00, 0xFC, 0x3D, 0xFC, 0x76, 0xFC, 0xBA, 0xFC, 0xFB, 0xFC, 0x45, 0xFD,
478 0x8E, 0xFD, 0xDA, 0xFD, 0x27, 0xFE, 0x78, 0xFE, 0xCA, 0xFE, 0x1D, 0xFF,
479 0x71, 0xFF, 0xC6, 0xFF, 0x19, 0x00, 0x6B, 0x00, 0xC0, 0x00, 0x13, 0x01,
480 0x62, 0x01, 0xB3, 0x01, 0x01, 0x02, 0x49, 0x02, 0x95, 0x02, 0xD4, 0x02,
481 0x1D, 0x03, 0x58, 0x03, 0x95, 0x03, 0xCB, 0x03, 0xFE, 0x03, 0x2E, 0x04,
482 0x57, 0x04, 0x7B, 0x04, 0x9D, 0x04, 0xB6, 0x04, 0xD1, 0x04, 0xDF, 0x04,
483 0xEB, 0x04, 0xF5, 0x04, 0xF5, 0x04, 0xF1, 0x04, 0xED, 0x04, 0xD8, 0x04,
484 0xCF, 0x04, 0xB0, 0x04, 0x9B, 0x04, 0x76, 0x04, 0x55, 0x04, 0x2A, 0x04,
485 0xFE, 0x03, 0xCD, 0x03, 0x9A, 0x03, 0x60, 0x03, 0x2B, 0x03, 0xE8, 0x02,
486 0xAD, 0x02, 0x68, 0x02, 0x24, 0x02, 0xDE, 0x01, 0x96, 0x01, 0x4E, 0x01,
487 0x04, 0x01, 0xBE, 0x00, 0x6D, 0x00, 0x2A, 0x00, 0xD8, 0xFF, 0x94, 0xFF,
488 0x46, 0xFF, 0x01, 0xFF, 0xBB, 0xFE, 0x73, 0xFE, 0x33, 0xFE, 0xEC, 0xFD,
489 0xB1, 0xFD, 0x71, 0xFD, 0x35, 0xFD, 0x03, 0xFD, 0xC8, 0xFC, 0x9C, 0xFC,
490 0x6A, 0xFC, 0x3D, 0xFC, 0x1C, 0xFC, 0xF0, 0xFB, 0xDB, 0xFB, 0xB6, 0xFB,
491 0xA5, 0xFB, 0x8E, 0xFB, 0x81, 0xFB, 0x74, 0xFB, 0x71, 0xFB, 0x6C, 0xFB,
492 0x73, 0xFB, 0x75, 0xFB, 0x85, 0xFB, 0x92, 0xFB, 0xA9, 0xFB, 0xC0, 0xFB,
493 0xDF, 0xFB, 0xFE, 0xFB, 0x25, 0xFC, 0x4B, 0xFC, 0x7D, 0xFC, 0xA8, 0xFC,
494 0xE1, 0xFC, 0x15, 0xFD, 0x51, 0xFD, 0x8B, 0xFD, 0xCD, 0xFD, 0x0B, 0xFE,
495 0x54, 0xFE, 0x93, 0xFE, 0xE0, 0xFE, 0x24, 0xFF, 0x6C, 0xFF, 0xB5, 0xFF,
496 0xFF, 0xFF, 0x47, 0x00, 0x92, 0x00, 0xD9, 0x00, 0x1F, 0x01, 0x66, 0x01,
497 0xA9, 0x01, 0xE8, 0x01, 0x2C, 0x02, 0x66, 0x02, 0xA2, 0x02, 0xDA, 0x02,
498 0x0D, 0x03, 0x41, 0x03, 0x6B, 0x03, 0x98, 0x03, 0xBB, 0x03, 0xE3, 0x03,
499 0xFB, 0x03, 0x1B, 0x04, 0x2E, 0x04, 0x3F, 0x04, 0x50, 0x04, 0x57, 0x04,
500 0x5D, 0x04, 0x5E, 0x04, 0x5A, 0x04, 0x52, 0x04, 0x4A, 0x04, 0x35, 0x04,
501 0x27, 0x04, 0x0B, 0x04, 0xF1, 0x03, 0xD2, 0x03, 0xB0, 0x03, 0x87, 0x03,
502 0x63, 0x03, 0x31, 0x03, 0x07, 0x03, 0xCF, 0x02, 0xA0, 0x02, 0x62, 0x02,
503 0x2C, 0x02, 0xEF, 0x01, 0xB1, 0x01, 0x74, 0x01, 0x2F, 0x01, 0xEF, 0x00,
504 0xA9, 0x00, 0x67, 0x00, 0x1F, 0x00, 0xDF, 0xFF, 0x96, 0xFF, 0x51, 0xFF,
505 0x0D, 0xFF, 0xC9, 0xFE, 0x84, 0xFE, 0x46, 0xFE, 0x01, 0xFE, 0xC6, 0xFD,
506 0x8B, 0xFD, 0x4F, 0xFD, 0x1A, 0xFD, 0xE5, 0xFC, 0xB3, 0xFC, 0x87, 0xFC,
507 0x5C, 0xFC, 0x38, 0xFC, 0x15, 0xFC, 0xF8, 0xFB, 0xDE, 0xFB, 0xC9, 0xFB,
508 0xB9, 0xFB, 0xAE, 0xFB, 0xA8, 0xFB, 0xA6, 0xFB, 0xA7, 0xFB, 0xB2, 0xFB,
509 0xBB, 0xFB, 0xD2, 0xFB, 0xE1, 0xFB, 0x01, 0xFC, 0x1A, 0xFC, 0x43, 0xFC,
510 0x66, 0xFC, 0x92, 0xFC, 0xC2, 0xFC, 0xEF, 0xFC, 0x29, 0xFD, 0x5D, 0xFD,
511 0x95, 0xFD, 0xD6, 0xFD, 0x0D, 0xFE, 0x53, 0xFE, 0x8E, 0xFE, 0xD5, 0xFE,
512 0x14, 0xFF, 0x55, 0xFF, 0x9C, 0xFF, 0xD7, 0xFF, 0x23, 0x00, 0x5B, 0x00,
513 0xA4, 0x00, 0xDC, 0x00, 0x1C, 0x01, 0x59, 0x01, 0x90, 0x01, 0xCC, 0x01,
514 0x00, 0x02, 0x34, 0x02, 0x66, 0x02, 0x92, 0x02, 0xBF, 0x02, 0xE8, 0x02,
515 0x0F, 0x03, 0x31, 0x03, 0x51, 0x03, 0x70, 0x03, 0x85, 0x03, 0xA3, 0x03,
516 0xAE, 0x03, 0xC3, 0x03, 0xCC, 0x03, 0xD6, 0x03, 0xDD, 0x03, 0xDE, 0x03,
517 0xDB, 0x03, 0xD9, 0x03, 0xCD, 0x03, 0xC5, 0x03, 0xB2, 0x03, 0xA1, 0x03,
518 0x89, 0x03, 0x73, 0x03, 0x53, 0x03, 0x34, 0x03, 0x10, 0x03, 0xE8, 0x02,
519 0xBE, 0x02, 0x92, 0x02, 0x5E, 0x02, 0x31, 0x02, 0xF6, 0x01, 0xC1, 0x01,
520 0x87, 0x01, 0x4B, 0x01, 0x0E, 0x01, 0xD0, 0x00, 0x92, 0x00, 0x51, 0x00,
521 0x16, 0x00, 0xCF, 0xFF, 0x99, 0xFF, 0x57, 0xFF, 0x1D, 0xFF, 0xE2, 0xFE,
522 0xA7, 0xFE, 0x71, 0xFE, 0x38, 0xFE, 0x06, 0xFE, 0xD1, 0xFD, 0xA0, 0xFD,
523 0x75, 0xFD, 0x44, 0xFD, 0x25, 0xFD, 0xF7, 0xFC, 0xD8, 0xFC, 0xBB, 0xFC,
524 0x99, 0xFC, 0x88, 0xFC, 0x6E, 0xFC, 0x60, 0xFC, 0x50, 0xFC, 0x4A, 0xFC,
525 0x3E, 0xFC, 0x44, 0xFC, 0x3E, 0xFC, 0x48, 0xFC, 0x50, 0xFC, 0x5A, 0xFC,
526 0x70, 0xFC, 0x7D, 0xFC, 0x9C, 0xFC, 0xB0, 0xFC, 0xD3, 0xFC, 0xF1, 0xFC,
527 0x19, 0xFD, 0x3A, 0xFD, 0x6A, 0xFD, 0x91, 0xFD, 0xC5, 0xFD, 0xF1, 0xFD,
528 0x28, 0xFE, 0x5A, 0xFE, 0x8F, 0xFE, 0xC9, 0xFE, 0xFF, 0xFE, 0x3B, 0xFF,
529 0x74, 0xFF, 0xAE, 0xFF, 0xEB, 0xFF, 0x23, 0x00, 0x61, 0x00, 0x95, 0x00,
530 0xD4, 0x00, 0x08, 0x01, 0x42, 0x01, 0x76, 0x01, 0xAC, 0x01, 0xDE, 0x01,
531 0x0D, 0x02, 0x3B, 0x02, 0x69, 0x02, 0x90, 0x02, 0xBA, 0x02, 0xDB, 0x02,
532 0xFD, 0x02, 0x1C, 0x03, 0x33, 0x03, 0x51, 0x03, 0x5D, 0x03, 0x76, 0x03,
533 0x7C, 0x03, 0x8B, 0x03, 0x8D, 0x03, 0x93, 0x03, 0x8F, 0x03, 0x8D, 0x03,
534 0x81, 0x03, 0x79, 0x03, 0x68, 0x03, 0x55, 0x03, 0x40, 0x03, 0x26, 0x03,
535 0x0B, 0x03, 0xEB, 0x02, 0xC8, 0x02, 0xA5, 0x02, 0x7B, 0x02, 0x53, 0x02,
536 0x27, 0x02, 0xF9, 0x01, 0xC8, 0x01, 0x97, 0x01, 0x63, 0x01, 0x2D, 0x01,
537 0xFB, 0x00, 0xC2, 0x00, 0x8D, 0x00, 0x52, 0x00, 0x1E, 0x00, 0xE2, 0xFF,
538 0xAF, 0xFF, 0x72, 0xFF, 0x43, 0xFF, 0x06, 0xFF, 0xD8, 0xFE, 0xA0, 0xFE,
539 0x71, 0xFE, 0x3E, 0xFE, 0x11, 0xFE, 0xE5, 0xFD, 0xBA, 0xFD, 0x95, 0xFD,
540 0x6D, 0xFD, 0x4D, 0xFD, 0x2B, 0xFD, 0x10, 0xFD, 0xF3, 0xFC, 0xE0, 0xFC,
541 0xCC, 0xFC, 0xBA, 0xFC, 0xAF, 0xFC, 0xA4, 0xFC, 0x9F, 0xFC, 0x9B, 0xFC,
542 0x9C, 0xFC, 0xA1, 0xFC, 0xA8, 0xFC, 0xB2, 0xFC, 0xC2, 0xFC, 0xD0, 0xFC,
543 0xE9, 0xFC, 0xFD, 0xFC, 0x18, 0xFD, 0x37, 0xFD, 0x55, 0xFD, 0x7A, 0xFD,
544 0x9E, 0xFD, 0xC5, 0xFD, 0xF2, 0xFD, 0x19, 0xFE, 0x4D, 0xFE, 0x73, 0xFE,
545 0xAC, 0xFE, 0xD8, 0xFE, 0x0E, 0xFF, 0x42, 0xFF, 0x75, 0xFF, 0xAC, 0xFF,
546 0xDD, 0xFF, 0x15, 0x00, 0x49, 0x00, 0x7E, 0x00, 0xB1, 0x00, 0xE7, 0x00,
547 0x15, 0x01, 0x49, 0x01, 0x75, 0x01, 0xA7, 0x01, 0xD0, 0x01, 0xFE, 0x01,
548 0x22, 0x02, 0x4C, 0x02, 0x6B, 0x02, 0x90, 0x02, 0xAD, 0x02, 0xC8, 0x02,
549 0xE3, 0x02, 0xF7, 0x02, 0x0B, 0x03, 0x1A, 0x03, 0x27, 0x03, 0x31, 0x03,
550 0x36, 0x03, 0x3A, 0x03, 0x39, 0x03, 0x36, 0x03, 0x2F, 0x03, 0x25, 0x03,
551 0x18, 0x03, 0x09, 0x03, 0xF3, 0x02, 0xE1, 0x02, 0xC4, 0x02, 0xAB, 0x02,
552 0x8B, 0x02, 0x6C, 0x02, 0x48, 0x02, 0x23, 0x02, 0xFB, 0x01, 0xD2, 0x01,
553 0xA6, 0x01, 0x7A, 0x01, 0x4B, 0x01, 0x1C, 0x01, 0xEE, 0x00, 0xBA, 0x00,
554 0x8B, 0x00, 0x55, 0x00, 0x26, 0x00, 0xF1, 0xFF, 0xC0, 0xFF, 0x8F, 0xFF,
555 0x5B, 0xFF, 0x2E, 0xFF, 0xFB, 0xFE, 0xCE, 0xFE, 0x9F, 0xFE, 0x74, 0xFE,
556 0x4B, 0xFE, 0x21, 0xFE, 0xFC, 0xFD, 0xD7, 0xFD, 0xB4, 0xFD, 0x96, 0xFD,
557 0x75, 0xFD, 0x5F, 0xFD, 0x45, 0xFD, 0x2F, 0xFD, 0x20, 0xFD, 0x0C, 0xFD,
558 0x03, 0xFD, 0xF7, 0xFC, 0xF5, 0xFC, 0xEB, 0xFC, 0xF3, 0xFC, 0xEF, 0xFC,
559 0xFA, 0xFC, 0x01, 0xFD, 0x0C, 0xFD, 0x1E, 0xFD, 0x2D, 0xFD, 0x43, 0xFD,
560 0x5A, 0xFD, 0x74, 0xFD, 0x92, 0xFD, 0xAE, 0xFD, 0xD3, 0xFD, 0xF2, 0xFD,
561 0x1B, 0xFE, 0x3F, 0xFE, 0x6B, 0xFE, 0x92, 0xFE, 0xC0, 0xFE, 0xED, 0xFE,
562 0x19, 0xFF, 0x49, 0xFF, 0x77, 0xFF, 0xA8, 0xFF, 0xD7, 0xFF, 0x08, 0x00,
563 0x37, 0x00, 0x68, 0x00, 0x96, 0x00, 0xC7, 0x00, 0xEE, 0x00, 0x23, 0x01,
564 0x45, 0x01, 0x77, 0x01, 0x9B, 0x01, 0xC3, 0x01, 0xE9, 0x01, 0x08, 0x02,
565 0x2C, 0x02, 0x49, 0x02, 0x65, 0x02, 0x80, 0x02, 0x96, 0x02, 0xAB, 0x02,
566 0xBC, 0x02, 0xCB, 0x02, 0xD6, 0x02, 0xE3, 0x02, 0xE4, 0x02, 0xED, 0x02,
567 0xE9, 0x02, 0xE7, 0x02, 0xE6, 0x02, 0xD7, 0x02, 0xD2, 0x02, 0xBF, 0x02,
568 0xB1, 0x02, 0x9E, 0x02, 0x85, 0x02, 0x70, 0x02, 0x53, 0x02, 0x37, 0x02,
569 0x19, 0x02, 0xF3, 0x01, 0xD5, 0x01, 0xAC, 0x01, 0x87, 0x01, 0x61, 0x01,
570 0x34, 0x01, 0x0E, 0x01, 0xDD, 0x00, 0xB6, 0x00, 0x83, 0x00, 0x5B, 0x00,
571 0x2D, 0x00, 0xFC, 0xFF, 0xD4, 0xFF, 0xA0, 0xFF, 0x78, 0xFF, 0x49, 0xFF,
572 0x1E, 0xFF, 0xF8, 0xFE, 0xC7, 0xFE, 0xA7, 0xFE, 0x7A, 0xFE, 0x59, 0xFE,
573 0x34, 0xFE, 0x12, 0xFE, 0xF4, 0xFD, 0xD6, 0xFD, 0xBC, 0xFD, 0xA3, 0xFD,
574 0x8D, 0xFD, 0x78, 0xFD, 0x69, 0xFD, 0x58, 0xFD, 0x4F, 0xFD, 0x43, 0xFD,
575 0x40, 0xFD, 0x39, 0xFD, 0x3C, 0xFD, 0x3A, 0xFD, 0x43, 0xFD, 0x47, 0xFD,
576 0x54, 0xFD, 0x5E, 0xFD, 0x72, 0xFD, 0x7E, 0xFD, 0x9A, 0xFD, 0xAA, 0xFD,
577 0xC8, 0xFD, 0xE3, 0xFD, 0xFE, 0xFD, 0x20, 0xFE, 0x3F, 0xFE, 0x64, 0xFE,
578 0x88, 0xFE, 0xAD, 0xFE, 0xD7, 0xFE, 0xFC, 0xFE, 0x27, 0xFF, 0x51, 0xFF,
579 0x7A, 0xFF, 0xA7, 0xFF, 0xD1, 0xFF, 0xFE, 0xFF, 0x29, 0x00, 0x53, 0x00,
580 0x7C, 0x00, 0xAA, 0x00, 0xD0, 0x00, 0xFB, 0x00, 0x23, 0x01, 0x45, 0x01,
581 0x6F, 0x01, 0x8C, 0x01, 0xB4, 0x01, 0xCF, 0x01, 0xF1, 0x01, 0x0B, 0x02,
582 0x25, 0x02, 0x3E, 0x02, 0x52, 0x02, 0x64, 0x02, 0x78, 0x02, 0x82, 0x02,
583 0x91, 0x02, 0x97, 0x02, 0xA0, 0x02, 0xA0, 0x02, 0xA7, 0x02, 0x9E, 0x02,
584 0x9F, 0x02, 0x96, 0x02, 0x8C, 0x02, 0x82, 0x02, 0x71, 0x02, 0x62, 0x02,
585 0x4D, 0x02, 0x3A, 0x02, 0x1F, 0x02, 0x07, 0x02, 0xEB, 0x01, 0xCB, 0x01,
586 0xB2, 0x01, 0x88, 0x01, 0x6D, 0x01, 0x45, 0x01, 0x20, 0x01, 0xFC, 0x00,
587 0xD1, 0x00, 0xAC, 0x00, 0x82, 0x00, 0x5B, 0x00, 0x31, 0x00, 0x08, 0x00,
588 0xDD, 0xFF, 0xB6, 0xFF, 0x8B, 0xFF, 0x65, 0xFF, 0x40, 0xFF, 0x13, 0xFF,
589 0xF4, 0xFE, 0xCA, 0xFE, 0xAC, 0xFE, 0x85, 0xFE, 0x69, 0xFE, 0x48, 0xFE,
590 0x2E, 0xFE, 0x11, 0xFE, 0xF8, 0xFD, 0xE1, 0xFD, 0xCF, 0xFD, 0xB8, 0xFD,
591 0xAF, 0xFD, 0x99, 0xFD, 0x95, 0xFD, 0x88, 0xFD, 0x83, 0xFD, 0x7F, 0xFD,
592 0x7E, 0xFD, 0x80, 0xFD, 0x82, 0xFD, 0x8A, 0xFD, 0x92, 0xFD, 0x9C, 0xFD,
593 0xAE, 0xFD, 0xB7, 0xFD, 0xD0, 0xFD, 0xE0, 0xFD, 0xF7, 0xFD, 0x11, 0xFE,
594 0x29, 0xFE, 0x47, 0xFE, 0x65, 0xFE, 0x82, 0xFE, 0xA6, 0xFE, 0xC4, 0xFE,
595 0xEB, 0xFE, 0x0D, 0xFF, 0x33, 0xFF, 0x58, 0xFF, 0x80, 0xFF, 0xA6, 0xFF,
596 0xCC, 0xFF, 0xF5, 0xFF, 0x1B, 0x00, 0x41, 0x00, 0x6C, 0x00, 0x8D, 0x00,
597 0xB7, 0x00, 0xDA, 0x00, 0xFD, 0x00, 0x20, 0x01, 0x43, 0x01, 0x61, 0x01,
598 0x82, 0x01, 0x9D, 0x01, 0xBB, 0x01, 0xD4, 0x01, 0xEA, 0x01, 0x02, 0x02,
599 0x13, 0x02, 0x2B, 0x02, 0x31, 0x02, 0x49, 0x02, 0x49, 0x02, 0x5C, 0x02,
600 0x59, 0x02, 0x65, 0x02, 0x60, 0x02, 0x63, 0x02, 0x5D, 0x02, 0x59, 0x02,
601 0x51, 0x02, 0x45, 0x02, 0x3B, 0x02, 0x28, 0x02, 0x1C, 0x02, 0x05, 0x02,
602 0xF2, 0x01, 0xD9, 0x01, 0xC2, 0x01, 0xA8, 0x01, 0x89, 0x01, 0x71, 0x01,
603 0x4B, 0x01, 0x30, 0x01, 0x0B, 0x01, 0xEB, 0x00, 0xC7, 0x00, 0xA5, 0x00,
604 0x7D, 0x00, 0x5B, 0x00, 0x35, 0x00, 0x0E, 0x00, 0xEB, 0xFF, 0xC4, 0xFF,
605 0xA2, 0xFF, 0x7A, 0xFF, 0x5A, 0xFF, 0x33, 0xFF, 0x14, 0xFF, 0xEF, 0xFE,
606 0xD3, 0xFE, 0xB0, 0xFE, 0x98, 0xFE, 0x77, 0xFE, 0x60, 0xFE, 0x46, 0xFE,
607 0x2E, 0xFE, 0x1B, 0xFE, 0x06, 0xFE, 0xF7, 0xFD, 0xE7, 0xFD, 0xDB, 0xFD,
608 0xCE, 0xFD, 0xC9, 0xFD, 0xBF, 0xFD, 0xBF, 0xFD, 0xBB, 0xFD, 0xBC, 0xFD,
609 0xBF, 0xFD, 0xC4, 0xFD, 0xCC, 0xFD, 0xD5, 0xFD, 0xE2, 0xFD, 0xEE, 0xFD,
610 0xFE, 0xFD, 0x12, 0xFE, 0x23, 0xFE, 0x3D, 0xFE, 0x4F, 0xFE, 0x6D, 0xFE,
611 0x84, 0xFE, 0xA3, 0xFE, 0xBE, 0xFE, 0xDC, 0xFE, 0xFE, 0xFE, 0x1D, 0xFF,
612 0x40, 0xFF, 0x60, 0xFF, 0x85, 0xFF, 0xA4, 0xFF, 0xCC, 0xFF, 0xEC, 0xFF,
613 0x12, 0x00, 0x33, 0x00, 0x59, 0x00, 0x79, 0x00, 0x9C, 0x00, 0xBE, 0x00,
614 0xDC, 0x00, 0x00, 0x01, 0x1B, 0x01, 0x3B, 0x01, 0x55, 0x01, 0x72, 0x01,
615 0x87, 0x01, 0xA5, 0x01, 0xB4, 0x01, 0xCF, 0x01, 0xDC, 0x01, 0xF0, 0x01,
616 0xFD, 0x01, 0x08, 0x02, 0x17, 0x02, 0x17, 0x02, 0x28, 0x02, 0x22, 0x02,
617 0x2A, 0x02, 0x27, 0x02, 0x24, 0x02, 0x22, 0x02, 0x19, 0x02, 0x10, 0x02,
618 0x06, 0x02, 0xF9, 0x01, 0xE8, 0x01, 0xDB, 0x01, 0xC4, 0x01, 0xB4, 0x01,
619 0x9A, 0x01, 0x85, 0x01, 0x6B, 0x01, 0x4F, 0x01, 0x38, 0x01, 0x14, 0x01,
620 0xFE, 0x00, 0xD8, 0x00, 0xBE, 0x00, 0x99, 0x00, 0x7C, 0x00, 0x57, 0x00,
621 0x37, 0x00, 0x16, 0x00, 0xF4, 0xFF, 0xD2, 0xFF, 0xB2, 0xFF, 0x8E, 0xFF,
622 0x71, 0xFF, 0x4E, 0xFF, 0x30, 0xFF, 0x14, 0xFF, 0xF3, 0xFE, 0xDC, 0xFE,
623 0xBA, 0xFE, 0xA8, 0xFE, 0x88, 0xFE, 0x78, 0xFE, 0x5F, 0xFE, 0x4E, 0xFE,
624 0x3B, 0xFE, 0x2B, 0xFE, 0x1E, 0xFE, 0x10, 0xFE, 0x09, 0xFE, 0xFD, 0xFD,
625 0xFC, 0xFD, 0xF3, 0xFD, 0xF3, 0xFD, 0xF6, 0xFD, 0xF2, 0xFD, 0xFE, 0xFD,
626 0xFC, 0xFD, 0x0B, 0xFE, 0x11, 0xFE, 0x1F, 0xFE, 0x2E, 0xFE, 0x3A, 0xFE,
627 0x51, 0xFE, 0x5E, 0xFE, 0x79, 0xFE, 0x8A, 0xFE, 0xA6, 0xFE, 0xBC, 0xFE,
628 0xD7, 0xFE, 0xF3, 0xFE, 0x10, 0xFF, 0x2C, 0xFF, 0x4A, 0xFF, 0x69, 0xFF,
629 0x87, 0xFF, 0xA9, 0xFF, 0xC8, 0xFF, 0xE8, 0xFF, 0x08, 0x00, 0x27, 0x00,
630 0x4A, 0x00, 0x65, 0x00, 0x88, 0x00, 0xA3, 0x00, 0xC3, 0x00, 0xDF, 0x00,
631 0xFB, 0x00, 0x17, 0x01, 0x2D, 0x01, 0x4B, 0x01, 0x5C, 0x01, 0x78, 0x01,
632 0x87, 0x01, 0x9C, 0x01, 0xAE, 0x01, 0xBB, 0x01, 0xCA, 0x01, 0xD5, 0x01,
633 0xDE, 0x01, 0xE8, 0x01, 0xED, 0x01, 0xF0, 0x01, 0xF4, 0x01, 0xF2, 0x01,
634 0xF2, 0x01, 0xEC, 0x01, 0xEA, 0x01, 0xDE, 0x01, 0xD8, 0x01, 0xCA, 0x01,
635 0xBE, 0x01, 0xAF, 0x01, 0xA0, 0x01, 0x8C, 0x01, 0x79, 0x01, 0x64, 0x01,
636 0x4D, 0x01, 0x36, 0x01, 0x1C, 0x01, 0x06, 0x01, 0xE5, 0x00, 0xD0, 0x00,
637 0xAD, 0x00, 0x94, 0x00, 0x74, 0x00, 0x59, 0x00, 0x39, 0x00, 0x19, 0x00,
638 0xFF, 0xFF, 0xD9, 0xFF, 0xC4, 0xFF, 0x9C, 0xFF, 0x89, 0xFF, 0x64, 0xFF,
639 0x4B, 0xFF, 0x31, 0xFF, 0x12, 0xFF, 0xFC, 0xFE, 0xE2, 0xFE, 0xC9, 0xFE,
640 0xB5, 0xFE, 0xA1, 0xFE, 0x8B, 0xFE, 0x7C, 0xFE, 0x68, 0xFE, 0x5D, 0xFE,
641 0x4C, 0xFE, 0x47, 0xFE, 0x35, 0xFE, 0x36, 0xFE, 0x29, 0xFE, 0x29, 0xFE,
642 0x26, 0xFE, 0x25, 0xFE, 0x27, 0xFE, 0x2A, 0xFE, 0x31, 0xFE, 0x34, 0xFE,
643 0x42, 0xFE, 0x49, 0xFE, 0x56, 0xFE, 0x66, 0xFE, 0x72, 0xFE, 0x85, 0xFE,
644 0x97, 0xFE, 0xAC, 0xFE, 0xC0, 0xFE, 0xD7, 0xFE, 0xEE, 0xFE, 0x07, 0xFF,
645 0x21, 0xFF, 0x3A, 0xFF, 0x56, 0xFF, 0x6F, 0xFF, 0x90, 0xFF, 0xA7, 0xFF,
646 0xCB, 0xFF, 0xE0, 0xFF, 0x03, 0x00, 0x1B, 0x00, 0x3B, 0x00, 0x59, 0x00,
647 0x70, 0x00, 0x92, 0x00, 0xA7, 0x00, 0xC4, 0x00, 0xDF, 0x00, 0xF3, 0x00,
648 0x0F, 0x01, 0x23, 0x01, 0x38, 0x01, 0x4F, 0x01, 0x5D, 0x01, 0x73, 0x01,
649 0x7E, 0x01, 0x90, 0x01, 0x9A, 0x01, 0xA5, 0x01, 0xB2, 0x01, 0xB4, 0x01,
650 0xBF, 0x01, 0xC0, 0x01, 0xC2, 0x01, 0xC4, 0x01, 0xC1, 0x01, 0xC0, 0x01,
651 0xBA, 0x01, 0xB4, 0x01, 0xAC, 0x01, 0xA0, 0x01, 0x99, 0x01, 0x86, 0x01,
652 0x7D, 0x01, 0x69, 0x01, 0x58, 0x01, 0x4A, 0x01, 0x2E, 0x01, 0x21, 0x01,
653 0x04, 0x01, 0xF2, 0x00, 0xD6, 0x00, 0xBE, 0x00, 0xA5, 0x00, 0x8B, 0x00,
654 0x70, 0x00, 0x57, 0x00, 0x37, 0x00, 0x20, 0x00, 0x01, 0x00, 0xE8, 0xFF,
655 0xCA, 0xFF, 0xB3, 0xFF, 0x94, 0xFF, 0x7D, 0xFF, 0x60, 0xFF, 0x4A, 0xFF,
656 0x2F, 0xFF, 0x19, 0xFF, 0x04, 0xFF, 0xEB, 0xFE, 0xDC, 0xFE, 0xC3, 0xFE,
657 0xB4, 0xFE, 0xA4, 0xFE, 0x93, 0xFE, 0x89, 0xFE, 0x78, 0xFE, 0x71, 0xFE,
658 0x67, 0xFE, 0x5F, 0xFE, 0x5B, 0xFE, 0x55, 0xFE, 0x53, 0xFE, 0x54, 0xFE,
659 0x52, 0xFE, 0x58, 0xFE, 0x5B, 0xFE, 0x60, 0xFE, 0x69, 0xFE, 0x72, 0xFE,
660 0x7B, 0xFE, 0x8B, 0xFE, 0x94, 0xFE, 0xA8, 0xFE, 0xB4, 0xFE, 0xC9, 0xFE,
661 0xD9, 0xFE, 0xF1, 0xFE, 0x01, 0xFF, 0x1C, 0xFF, 0x2D, 0xFF, 0x4B, 0xFF,
662 0x5E, 0xFF, 0x7C, 0xFF, 0x90, 0xFF, 0xAC, 0xFF, 0xC8, 0xFF, 0xDD, 0xFF,
663 0xFF, 0xFF, 0x10, 0x00, 0x32, 0x00, 0x48, 0x00, 0x63, 0x00, 0x7B, 0x00,
664 0x94, 0x00, 0xAA, 0x00, 0xC6, 0x00, 0xD6, 0x00, 0xF1, 0x00, 0x02, 0x01,
665 0x18, 0x01, 0x28, 0x01, 0x3A, 0x01, 0x4B, 0x01, 0x56, 0x01, 0x68, 0x01,
666 0x6F, 0x01, 0x7D, 0x01, 0x84, 0x01, 0x8B, 0x01, 0x90, 0x01, 0x96, 0x01,
667 0x96, 0x01, 0x9A, 0x01, 0x96, 0x01, 0x95, 0x01, 0x91, 0x01, 0x8B, 0x01,
668 0x86, 0x01, 0x7B, 0x01, 0x71, 0x01, 0x67, 0x01, 0x59, 0x01, 0x4B, 0x01,
669 0x3C, 0x01, 0x2A, 0x01, 0x1A, 0x01, 0x07, 0x01, 0xF2, 0x00, 0xDB, 0x00,
670 0xCB, 0x00, 0xAF, 0x00, 0x9D, 0x00, 0x82, 0x00, 0x6A, 0x00, 0x55, 0x00,
671 0x36, 0x00, 0x24, 0x00, 0x07, 0x00, 0xEF, 0xFF, 0xD7, 0xFF, 0xBE, 0xFF,
672 0xA3, 0xFF, 0x90, 0xFF, 0x75, 0xFF, 0x5F, 0xFF, 0x4B, 0xFF, 0x32, 0xFF,
673 0x20, 0xFF, 0x0D, 0xFF, 0xF7, 0xFE, 0xE9, 0xFE, 0xD5, 0xFE, 0xC9, 0xFE,
674 0xBB, 0xFE, 0xAB, 0xFE, 0xA6, 0xFE, 0x93, 0xFE, 0x95, 0xFE, 0x85, 0xFE,
675 0x85, 0xFE, 0x7F, 0xFE, 0x7D, 0xFE, 0x7B, 0xFE, 0x7E, 0xFE, 0x7D, 0xFE,
676 0x83, 0xFE, 0x88, 0xFE, 0x8C, 0xFE, 0x97, 0xFE, 0x9F, 0xFE, 0xA9, 0xFE,
677 0xB8, 0xFE, 0xC2, 0xFE, 0xD3, 0xFE, 0xE2, 0xFE, 0xF2, 0xFE, 0x06, 0xFF,
678 0x15, 0xFF, 0x2E, 0xFF, 0x3C, 0xFF, 0x59, 0xFF, 0x66, 0xFF, 0x86, 0xFF,
679 0x93, 0xFF, 0xB2, 0xFF, 0xC4, 0xFF, 0xE0, 0xFF, 0xF4, 0xFF, 0x10, 0x00,
680 0x22, 0x00, 0x3F, 0x00, 0x52, 0x00, 0x6B, 0x00, 0x81, 0x00, 0x95, 0x00,
681 0xAD, 0x00, 0xC0, 0x00, 0xD2, 0x00, 0xE8, 0x00, 0xF6, 0x00, 0x09, 0x01,
682 0x1A, 0x01, 0x25, 0x01, 0x36, 0x01, 0x41, 0x01, 0x4B, 0x01, 0x55, 0x01,
683 0x5D, 0x01, 0x64, 0x01, 0x6A, 0x01, 0x6E, 0x01, 0x6F, 0x01, 0x71, 0x01,
684 0x71, 0x01, 0x6E, 0x01, 0x6C, 0x01, 0x68, 0x01, 0x5F, 0x01, 0x5A, 0x01,
685 0x50, 0x01, 0x47, 0x01, 0x3B, 0x01, 0x2F, 0x01, 0x20, 0x01, 0x12, 0x01,
686 0x02, 0x01, 0xF1, 0x00, 0xDF, 0x00, 0xCE, 0x00, 0xB9, 0x00, 0xA5, 0x00,
687 0x91, 0x00, 0x7A, 0x00, 0x67, 0x00, 0x4F, 0x00, 0x39, 0x00, 0x23, 0x00,
688 0x0D, 0x00, 0xF4, 0xFF, 0xE3, 0xFF, 0xC4, 0xFF, 0xB7, 0xFF, 0x9A, 0xFF,
689 0x8A, 0xFF, 0x73, 0xFF, 0x5F, 0xFF, 0x4C, 0xFF, 0x38, 0xFF, 0x28, 0xFF,
690 0x15, 0xFF, 0x06, 0xFF, 0xF8, 0xFE, 0xE7, 0xFE, 0xDE, 0xFE, 0xCF, 0xFE,
691 0xC6, 0xFE, 0xBD, 0xFE, 0xB4, 0xFE, 0xAF, 0xFE, 0xA8, 0xFE, 0xA6, 0xFE,
692 0xA1, 0xFE, 0xA3, 0xFE, 0x9F, 0xFE, 0xA6, 0xFE, 0xA2, 0xFE, 0xAE, 0xFE,
693 0xAE, 0xFE, 0xB7, 0xFE, 0xC0, 0xFE, 0xC7, 0xFE, 0xD4, 0xFE, 0xE0, 0xFE,
694 0xEA, 0xFE, 0xFB, 0xFE, 0x08, 0xFF, 0x1B, 0xFF, 0x28, 0xFF, 0x3C, 0xFF,
695 0x4D, 0xFF, 0x61, 0xFF, 0x74, 0xFF, 0x89, 0xFF, 0x9C, 0xFF, 0xB2, 0xFF,
696 0xC8, 0xFF, 0xDB, 0xFF, 0xF2, 0xFF, 0x08, 0x00, 0x1C, 0x00, 0x32, 0x00,
697 0x46, 0x00, 0x5C, 0x00, 0x70, 0x00, 0x85, 0x00, 0x96, 0x00, 0xA9, 0x00,
698 0xBC, 0x00, 0xCA, 0x00, 0xE1, 0x00, 0xE8, 0x00, 0xFE, 0x00, 0x06, 0x01,
699 0x15, 0x01, 0x1F, 0x01, 0x2A, 0x01, 0x33, 0x01, 0x3A, 0x01, 0x41, 0x01,
700 0x44, 0x01, 0x4D, 0x01, 0x49, 0x01, 0x51, 0x01, 0x4A, 0x01, 0x4E, 0x01,
701 0x49, 0x01, 0x46, 0x01, 0x41, 0x01, 0x38, 0x01, 0x34, 0x01, 0x27, 0x01,
702 0x22, 0x01, 0x12, 0x01, 0x0A, 0x01, 0xF8, 0x00, 0xEF, 0x00, 0xDC, 0x00,
703 0xCE, 0x00, 0xBF, 0x00, 0xA8, 0x00, 0x9D, 0x00, 0x84, 0x00, 0x75, 0x00,
704 0x61, 0x00, 0x4D, 0x00, 0x37, 0x00, 0x26, 0x00, 0x0E, 0x00, 0xFC, 0xFF,
705 0xE7, 0xFF, 0xD3, 0xFF, 0xBF, 0xFF, 0xAC, 0xFF, 0x97, 0xFF, 0x85, 0xFF,
706 0x73, 0xFF, 0x61, 0xFF, 0x4E, 0xFF, 0x43, 0xFF, 0x2B, 0xFF, 0x26, 0xFF,
707 0x0F, 0xFF, 0x0A, 0xFF, 0xF8, 0xFE, 0xF1, 0xFE, 0xE5, 0xFE, 0xDD, 0xFE,
708 0xD7, 0xFE, 0xCF, 0xFE, 0xCC, 0xFE, 0xC5, 0xFE, 0xC5, 0xFE, 0xC3, 0xFE,
709 0xC2, 0xFE, 0xC5, 0xFE, 0xC6, 0xFE, 0xC9, 0xFE, 0xD1, 0xFE, 0xD3, 0xFE,
710 0xDC, 0xFE, 0xE5, 0xFE, 0xEC, 0xFE, 0xFB, 0xFE, 0x01, 0xFF, 0x12, 0xFF,
711 0x1B, 0xFF, 0x2E, 0xFF, 0x3A, 0xFF, 0x4C, 0xFF, 0x58, 0xFF, 0x6E, 0xFF,
712 0x7C, 0xFF, 0x92, 0xFF, 0xA0, 0xFF, 0xB8, 0xFF, 0xC5, 0xFF, 0xDE, 0xFF,
713 0xED, 0xFF, 0x02, 0x00, 0x17, 0x00, 0x28, 0x00, 0x3D, 0x00, 0x4E, 0x00,
714 0x5F, 0x00, 0x76, 0x00, 0x80, 0x00, 0x9C, 0x00, 0x9E, 0x00, 0xBD, 0x00,
715 0xBE, 0x00, 0xD6, 0x00, 0xDF, 0x00, 0xEB, 0x00, 0xF9, 0x00, 0x00, 0x01,
716 0x0C, 0x01, 0x14, 0x01, 0x1A, 0x01, 0x22, 0x01, 0x25, 0x01, 0x29, 0x01,
717 0x2D, 0x01, 0x2C, 0x01, 0x30, 0x01, 0x2A, 0x01, 0x2D, 0x01, 0x25, 0x01,
718 0x25, 0x01, 0x1C, 0x01, 0x17, 0x01, 0x0F, 0x01, 0x04, 0x01, 0xFF, 0x00,
719 0xEE, 0x00, 0xE9, 0x00, 0xD7, 0x00, 0xCD, 0x00, 0xBC, 0x00, 0xAE, 0x00,
720 0xA0, 0x00, 0x8E, 0x00, 0x7F, 0x00, 0x6C, 0x00, 0x5B, 0x00, 0x4A, 0x00,
721 0x37, 0x00, 0x25, 0x00, 0x12, 0x00, 0x00, 0x00, 0xED, 0xFF, 0xDD, 0xFF,
722 0xC8, 0xFF, 0xB9, 0xFF, 0xA3, 0xFF, 0x97, 0xFF, 0x81, 0xFF, 0x77, 0xFF,
723 0x62, 0xFF, 0x57, 0xFF, 0x45, 0xFF, 0x3B, 0xFF, 0x2B, 0xFF, 0x22, 0xFF,
724 0x17, 0xFF, 0x0A, 0xFF, 0x05, 0xFF, 0xF8, 0xFE, 0xF8, 0xFE, 0xEB, 0xFE,
725 0xEB, 0xFE, 0xE4, 0xFE, 0xE3, 0xFE, 0xE3, 0xFE, 0xDF, 0xFE, 0xE5, 0xFE,
726 0xE0, 0xFE, 0xEA, 0xFE, 0xE8, 0xFE, 0xF3, 0xFE, 0xF4, 0xFE, 0x00, 0xFF,
727 0x03, 0xFF, 0x11, 0xFF, 0x1A, 0xFF, 0x22, 0xFF, 0x34, 0xFF, 0x38, 0xFF,
728 0x4F, 0xFF, 0x56, 0xFF, 0x68, 0xFF, 0x77, 0xFF, 0x85, 0xFF, 0x99, 0xFF,
729 0xA5, 0xFF, 0xBA, 0xFF, 0xC9, 0xFF, 0xDA, 0xFF, 0xED, 0xFF, 0xFE, 0xFF,
730 0x0F, 0x00, 0x22, 0x00, 0x33, 0x00, 0x40, 0x00, 0x58, 0x00, 0x60, 0x00,
731 0x77, 0x00, 0x83, 0x00, 0x92, 0x00, 0xA2, 0x00, 0xAD, 0x00, 0xBD, 0x00,
732 0xC6, 0x00, 0xD4, 0x00, 0xDD, 0x00, 0xE7, 0x00, 0xF0, 0x00, 0xF7, 0x00,
733 0xFF, 0x00, 0x03, 0x01, 0x0A, 0x01, 0x0A, 0x01, 0x11, 0x01, 0x0F, 0x01,
734 0x12, 0x01, 0x10, 0x01, 0x0D, 0x01, 0x0E, 0x01, 0x06, 0x01, 0x05, 0x01,
735 0xFC, 0x00, 0xF7, 0x00, 0xEF, 0x00, 0xE5, 0x00, 0xDD, 0x00, 0xD3, 0x00,
736 0xC5, 0x00, 0xBD, 0x00, 0xAC, 0x00, 0xA1, 0x00, 0x94, 0x00, 0x83, 0x00,
737 0x77, 0x00, 0x65, 0x00, 0x56, 0x00, 0x46, 0x00, 0x35, 0x00, 0x27, 0x00,
738 0x13, 0x00, 0x05, 0x00, 0xF2, 0xFF, 0xE3, 0xFF, 0xD3, 0xFF, 0xC0, 0xFF,
739 0xB4, 0xFF, 0xA1, 0xFF, 0x94, 0xFF, 0x85, 0xFF, 0x75, 0xFF, 0x6A, 0xFF,
740 0x5A, 0xFF, 0x50, 0xFF, 0x43, 0xFF, 0x39, 0xFF, 0x2E, 0xFF, 0x27, 0xFF,
741 0x1B, 0xFF, 0x17, 0xFF, 0x0D, 0xFF, 0x0B, 0xFF, 0x04, 0xFF, 0x02, 0xFF,
742 0xFE, 0xFE, 0xFD, 0xFE, 0xFD, 0xFE, 0xFD, 0xFE, 0xFD, 0xFE, 0x03, 0xFF,
743 0x03, 0xFF, 0x0A, 0xFF, 0x0E, 0xFF, 0x14, 0xFF, 0x1D, 0xFF, 0x24, 0xFF,
744 0x2D, 0xFF, 0x38, 0xFF, 0x40, 0xFF, 0x4F, 0xFF, 0x57, 0xFF, 0x67, 0xFF,
745 0x73, 0xFF, 0x7F, 0xFF, 0x92, 0xFF, 0x99, 0xFF, 0xB1, 0xFF, 0xB8, 0xFF,
746 0xCE, 0xFF, 0xD9, 0xFF, 0xEC, 0xFF, 0xFA, 0xFF, 0x0B, 0x00, 0x1A, 0x00,
747 0x29, 0x00, 0x3B, 0x00, 0x46, 0x00, 0x5A, 0x00, 0x64, 0x00, 0x74, 0x00,
748 0x83, 0x00, 0x8C, 0x00, 0x9D, 0x00, 0xA6, 0x00, 0xB2, 0x00, 0xBD, 0x00,
749 0xC6, 0x00, 0xD0, 0x00, 0xD5, 0x00, 0xE1, 0x00, 0xE2, 0x00, 0xEB, 0x00,
750 0xEF, 0x00, 0xF1, 0x00, 0xF4, 0x00, 0xF9, 0x00, 0xF2, 0x00, 0xFB, 0x00,
751 0xF1, 0x00, 0xF6, 0x00, 0xEC, 0x00, 0xEF, 0x00, 0xE3, 0x00, 0xE3, 0x00,
752 0xD8, 0x00, 0xD2, 0x00, 0xCB, 0x00, 0xBE, 0x00, 0xB7, 0x00, 0xAB, 0x00,
753 0xA1, 0x00, 0x95, 0x00, 0x86, 0x00, 0x7B, 0x00, 0x6E, 0x00, 0x5E, 0x00,
754 0x54, 0x00, 0x3D, 0x00, 0x39, 0x00, 0x21, 0x00, 0x1A, 0x00, 0x04, 0x00,
755 0xF9, 0xFF, 0xE8, 0xFF, 0xD9, 0xFF, 0xCD, 0xFF, 0xBC, 0xFF, 0xAF, 0xFF,
756 0xA0, 0xFF, 0x94, 0xFF, 0x85, 0xFF, 0x7B, 0xFF, 0x6E, 0xFF, 0x61, 0xFF,
757 0x5A, 0xFF, 0x4D, 0xFF, 0x44, 0xFF, 0x3E, 0xFF, 0x32, 0xFF, 0x2F, 0xFF,
758 0x27, 0xFF, 0x22, 0xFF, 0x1E, 0xFF, 0x1B, 0xFF, 0x16, 0xFF, 0x18, 0xFF,
759 0x13, 0xFF, 0x18, 0xFF, 0x15, 0xFF, 0x1A, 0xFF, 0x1C, 0xFF, 0x1D, 0xFF,
760 0x29, 0xFF, 0x25, 0xFF, 0x35, 0xFF, 0x35, 0xFF, 0x40, 0xFF, 0x49, 0xFF,
761 0x50, 0xFF, 0x5E, 0xFF, 0x65, 0xFF, 0x73, 0xFF, 0x7D, 0xFF, 0x89, 0xFF,
762 0x98, 0xFF, 0xA2, 0xFF, 0xB4, 0xFF, 0xBC, 0xFF, 0xD0, 0xFF, 0xD9, 0xFF,
763 0xEA, 0xFF, 0xF8, 0xFF, 0x05, 0x00, 0x16, 0x00, 0x22, 0x00, 0x31, 0x00,
764 0x3E, 0x00, 0x4D, 0x00, 0x57, 0x00, 0x69, 0x00, 0x6F, 0x00, 0x81, 0x00,
765 0x89, 0x00, 0x93, 0x00, 0xA2, 0x00, 0xA5, 0x00, 0xB3, 0x00, 0xB9, 0x00,
766 0xC1, 0x00, 0xC7, 0x00, 0xD0, 0x00, 0xCF, 0x00, 0xDA, 0x00, 0xD8, 0x00,
767 0xDC, 0x00, 0xE1, 0x00, 0xDC, 0x00, 0xE2, 0x00, 0xDC, 0x00, 0xDC, 0x00,
768 0xDA, 0x00, 0xD5, 0x00, 0xD3, 0x00, 0xCB, 0x00, 0xC6, 0x00, 0xC1, 0x00,
769 0xB4, 0x00, 0xB5, 0x00, 0xA1, 0x00, 0xA3, 0x00, 0x8E, 0x00, 0x8D, 0x00,
770 0x7A, 0x00, 0x73, 0x00, 0x66, 0x00, 0x57, 0x00, 0x4F, 0x00, 0x3E, 0x00,
771 0x33, 0x00, 0x23, 0x00, 0x18, 0x00, 0x08, 0x00, 0xFD, 0xFF, 0xEF, 0xFF,
772 0xDE, 0xFF, 0xD6, 0xFF, 0xC4, 0xFF, 0xBB, 0xFF, 0xAA, 0xFF, 0xA3, 0xFF,
773 0x92, 0xFF, 0x8C, 0xFF, 0x7D, 0xFF, 0x74, 0xFF, 0x69, 0xFF, 0x63, 0xFF,
774 0x56, 0xFF, 0x53, 0xFF, 0x48, 0xFF, 0x44, 0xFF, 0x3B, 0xFF, 0x3C, 0xFF,
775 0x2F, 0xFF, 0x37, 0xFF, 0x2A, 0xFF, 0x2F, 0xFF, 0x2B, 0xFF, 0x2C, 0xFF,
776 0x2E, 0xFF, 0x2C, 0xFF, 0x34, 0xFF, 0x32, 0xFF, 0x3A, 0xFF, 0x3D, 0xFF,
777 0x41, 0xFF, 0x4C, 0xFF, 0x4D, 0xFF, 0x5C, 0xFF, 0x5D, 0xFF, 0x6C, 0xFF,
778 0x72, 0xFF, 0x7D, 0xFF, 0x87, 0xFF, 0x94, 0xFF, 0x9D, 0xFF, 0xAA, 0xFF,
779 0xB7, 0xFF, 0xC2, 0xFF, 0xCF, 0xFF, 0xDD, 0xFF, 0xE6, 0xFF, 0xF8, 0xFF,
780 0x01, 0x00, 0x11, 0x00, 0x1C, 0x00, 0x29, 0x00, 0x36, 0x00, 0x41, 0x00,
781 0x4F, 0x00, 0x58, 0x00, 0x67, 0x00, 0x6E, 0x00, 0x7C, 0x00, 0x82, 0x00,
782 0x8F, 0x00, 0x96, 0x00, 0x9D, 0x00, 0xA9, 0x00, 0xAA, 0x00, 0xB5, 0x00,
783 0xB8, 0x00, 0xBD, 0x00, 0xC3, 0x00, 0xC2, 0x00, 0xCA, 0x00, 0xC6, 0x00,
784 0xCB, 0x00, 0xCA, 0x00, 0xC7, 0x00, 0xCB, 0x00, 0xC1, 0x00, 0xC5, 0x00,
785 0xBD, 0x00, 0xBA, 0x00, 0xB5, 0x00, 0xAD, 0x00, 0xAA, 0x00, 0x9F, 0x00,
786 0x9A, 0x00, 0x8F, 0x00, 0x88, 0x00, 0x7D, 0x00, 0x74, 0x00, 0x69, 0x00,
787 0x5F, 0x00, 0x53, 0x00, 0x47, 0x00, 0x3D, 0x00, 0x2E, 0x00, 0x26, 0x00,
788 0x15, 0x00, 0x0E, 0x00, 0xFC, 0xFF, 0xF6, 0xFF, 0xE3, 0xFF, 0xDD, 0xFF,
789 0xCD, 0xFF, 0xC2, 0xFF, 0xB9, 0xFF, 0xA9, 0xFF, 0xA5, 0xFF, 0x95, 0xFF,
790 0x8D, 0xFF, 0x84, 0xFF, 0x79, 0xFF, 0x73, 0xFF, 0x6B, 0xFF, 0x62, 0xFF,
791 0x5C, 0xFF, 0x58, 0xFF, 0x4E, 0xFF, 0x4F, 0xFF, 0x47, 0xFF, 0x46, 0xFF,
792 0x44, 0xFF, 0x3F, 0xFF, 0x43, 0xFF, 0x3D, 0xFF, 0x44, 0xFF, 0x40, 0xFF,
793 0x46, 0xFF, 0x46, 0xFF, 0x4B, 0xFF, 0x4E, 0xFF, 0x55, 0xFF, 0x59, 0xFF,
794 0x5F, 0xFF, 0x68, 0xFF, 0x6C, 0xFF, 0x78, 0xFF, 0x7C, 0xFF, 0x89, 0xFF,
795 0x90, 0xFF, 0x9D, 0xFF, 0xA3, 0xFF, 0xB1, 0xFF, 0xB9, 0xFF, 0xC6, 0xFF,
796 0xD3, 0xFF, 0xDA, 0xFF, 0xEB, 0xFF, 0xF2, 0xFF, 0x00, 0x00, 0x0D, 0x00,
797 0x15, 0x00, 0x24, 0x00, 0x2D, 0x00, 0x3A, 0x00, 0x43, 0x00, 0x51, 0x00,
798 0x56, 0x00, 0x65, 0x00, 0x6B, 0x00, 0x76, 0x00, 0x7E, 0x00, 0x86, 0x00,
799 0x8E, 0x00, 0x95, 0x00, 0x9A, 0x00, 0xA1, 0x00, 0xA6, 0x00, 0xAA, 0x00,
800 0xAF, 0x00, 0xB0, 0x00, 0xB4, 0x00, 0xB5, 0x00, 0xB7, 0x00, 0xB5, 0x00,
801 0xB8, 0x00, 0xB2, 0x00, 0xB5, 0x00, 0xAF, 0x00, 0xAE, 0x00, 0xA8, 0x00,
802 0xA6, 0x00, 0x9D, 0x00, 0x9A, 0x00, 0x94, 0x00, 0x89, 0x00, 0x88, 0x00,
803 0x78, 0x00, 0x77, 0x00, 0x69, 0x00, 0x62, 0x00, 0x57, 0x00, 0x4D, 0x00,
804 0x45, 0x00, 0x36, 0x00, 0x32, 0x00, 0x1E, 0x00, 0x1D, 0x00, 0x08, 0x00,
805 0x05, 0x00, 0xF4, 0xFF, 0xED, 0xFF, 0xE0, 0xFF, 0xD6, 0xFF, 0xC9, 0xFF,
806 0xC3, 0xFF, 0xB4, 0xFF, 0xB0, 0xFF, 0x9E, 0xFF, 0x9E, 0xFF, 0x8D, 0xFF,
807 0x8E, 0xFF, 0x7D, 0xFF, 0x7E, 0xFF, 0x6F, 0xFF, 0x71, 0xFF, 0x65, 0xFF,
808 0x65, 0xFF, 0x5D, 0xFF, 0x5C, 0xFF, 0x57, 0xFF, 0x56, 0xFF, 0x53, 0xFF,
809 0x55, 0xFF, 0x50, 0xFF, 0x55, 0xFF, 0x52, 0xFF, 0x58, 0xFF, 0x57, 0xFF,
810 0x5B, 0xFF, 0x60, 0xFF, 0x61, 0xFF, 0x6B, 0xFF, 0x6C, 0xFF, 0x74, 0xFF,
811 0x7B, 0xFF, 0x80, 0xFF, 0x8A, 0xFF, 0x92, 0xFF, 0x98, 0xFF, 0xA4, 0xFF,
812 0xAA, 0xFF, 0xB7, 0xFF, 0xBE, 0xFF, 0xCA, 0xFF, 0xD2, 0xFF, 0xDE, 0xFF,
813 0xEA, 0xFF, 0xF1, 0xFF, 0xFE, 0xFF, 0x07, 0x00, 0x13, 0x00, 0x1D, 0x00,
814 0x28, 0x00, 0x30, 0x00, 0x3C, 0x00, 0x45, 0x00, 0x4D, 0x00, 0x5A, 0x00,
815 0x5C, 0x00, 0x6E, 0x00, 0x6B, 0x00, 0x7C, 0x00, 0x7C, 0x00, 0x85, 0x00,
816 0x8C, 0x00, 0x8F, 0x00, 0x96, 0x00, 0x98, 0x00, 0x9F, 0x00, 0x9D, 0x00,
817 0xA4, 0x00, 0xA2, 0x00, 0xA5, 0x00, 0xA5, 0x00, 0xA5, 0x00, 0xA4, 0x00,
818 0xA1, 0x00, 0xA1, 0x00, 0x9C, 0x00, 0x9A, 0x00, 0x96, 0x00, 0x90, 0x00,
819 0x8C, 0x00, 0x87, 0x00, 0x7F, 0x00, 0x7A, 0x00, 0x70, 0x00, 0x6C, 0x00,
820 0x61, 0x00, 0x5C, 0x00, 0x4F, 0x00, 0x4A, 0x00, 0x3C, 0x00, 0x39, 0x00,
821 0x28, 0x00, 0x25, 0x00, 0x15, 0x00, 0x10, 0x00, 0x02, 0x00, 0xFB, 0xFF,
822 0xEE, 0xFF, 0xE7, 0xFF, 0xDB, 0xFF, 0xD3, 0xFF, 0xC8, 0xFF, 0xC0, 0xFF,
823 0xB5, 0xFF, 0xB0, 0xFF, 0xA4, 0xFF, 0x9F, 0xFF, 0x95, 0xFF, 0x8F, 0xFF,
824 0x89, 0xFF, 0x82, 0xFF, 0x7D, 0xFF, 0x77, 0xFF, 0x72, 0xFF, 0x71, 0xFF,
825 0x69, 0xFF, 0x6A, 0xFF, 0x66, 0xFF, 0x64, 0xFF, 0x65, 0xFF, 0x62, 0xFF,
826 0x64, 0xFF, 0x63, 0xFF, 0x67, 0xFF, 0x67, 0xFF, 0x6B, 0xFF, 0x6D, 0xFF,
827 0x71, 0xFF, 0x76, 0xFF, 0x7A, 0xFF, 0x81, 0xFF, 0x84, 0xFF, 0x8E, 0xFF,
828 0x91, 0xFF, 0x9B, 0xFF, 0xA1, 0xFF, 0xAB, 0xFF, 0xB0, 0xFF, 0xBC, 0xFF,
829 0xC2, 0xFF, 0xCD, 0xFF, 0xD5, 0xFF, 0xE0, 0xFF, 0xE5, 0xFF, 0xF6, 0xFF,
830 0xF7, 0xFF, 0x0A, 0x00, 0x09, 0x00, 0x1D, 0x00, 0x1D, 0x00, 0x2E, 0x00,
831 0x32, 0x00, 0x3C, 0x00, 0x46, 0x00, 0x4C, 0x00, 0x57, 0x00, 0x5B, 0x00,
832 0x65, 0x00, 0x6A, 0x00, 0x72, 0x00, 0x76, 0x00, 0x7E, 0x00, 0x7F, 0x00,
833 0x88, 0x00, 0x88, 0x00, 0x8E, 0x00, 0x90, 0x00, 0x91, 0x00, 0x94, 0x00,
834 0x94, 0x00, 0x96, 0x00, 0x94, 0x00, 0x96, 0x00, 0x91, 0x00, 0x93, 0x00,
835 0x8C, 0x00, 0x8E, 0x00, 0x87, 0x00, 0x84, 0x00, 0x81, 0x00, 0x78, 0x00,
836 0x77, 0x00, 0x6E, 0x00, 0x69, 0x00, 0x61, 0x00, 0x5C, 0x00, 0x51, 0x00,
837 0x4D, 0x00, 0x43, 0x00, 0x3A, 0x00, 0x33, 0x00, 0x2A, 0x00, 0x1F, 0x00,
838 0x19, 0x00, 0x0D, 0x00, 0x07, 0x00, 0xFC, 0xFF, 0xF3, 0xFF, 0xEA, 0xFF,
839 0xE1, 0xFF, 0xD8, 0xFF, 0xD2, 0xFF, 0xC5, 0xFF, 0xC1, 0xFF, 0xB7, 0xFF,
840 0xAF, 0xFF, 0xAB, 0xFF, 0x9E, 0xFF, 0x9F, 0xFF, 0x92, 0xFF, 0x91, 0xFF,
841 0x8A, 0xFF, 0x86, 0xFF, 0x80, 0xFF, 0x7F, 0xFF, 0x78, 0xFF, 0x7A, 0xFF,
842 0x73, 0xFF, 0x76, 0xFF, 0x70, 0xFF, 0x76, 0xFF, 0x6E, 0xFF, 0x77, 0xFF,
843 0x70, 0xFF, 0x7A, 0xFF, 0x74, 0xFF, 0x7E, 0xFF, 0x7C, 0xFF, 0x84, 0xFF,
844 0x84, 0xFF, 0x8C, 0xFF, 0x90, 0xFF, 0x96, 0xFF, 0x9D, 0xFF, 0xA0, 0xFF,
845 0xAB, 0xFF, 0xAE, 0xFF, 0xBB, 0xFF, 0xBC, 0xFF, 0xCA, 0xFF, 0xCE, 0xFF,
846 0xD8, 0xFF, 0xDF, 0xFF, 0xE9, 0xFF, 0xF2, 0xFF, 0xF8, 0xFF, 0x07, 0x00,
847 0x05, 0x00, 0x19, 0x00, 0x19, 0x00, 0x26, 0x00, 0x2D, 0x00, 0x34, 0x00,
848 0x3D, 0x00, 0x44, 0x00, 0x4B, 0x00, 0x54, 0x00, 0x56, 0x00, 0x62, 0x00,
849 0x62, 0x00, 0x6D, 0x00, 0x6D, 0x00, 0x77, 0x00, 0x75, 0x00, 0x7F, 0x00,
850 0x7B, 0x00, 0x85, 0x00, 0x81, 0x00, 0x87, 0x00, 0x86, 0x00, 0x86, 0x00,
851 0x88, 0x00, 0x85, 0x00, 0x86, 0x00, 0x84, 0x00, 0x81, 0x00, 0x7F, 0x00,
852 0x7C, 0x00, 0x78, 0x00, 0x75, 0x00, 0x6F, 0x00, 0x6C, 0x00, 0x64, 0x00,
853 0x61, 0x00, 0x5A, 0x00, 0x53, 0x00, 0x4D, 0x00, 0x45, 0x00, 0x3F, 0x00,
854 0x37, 0x00, 0x2F, 0x00, 0x27, 0x00, 0x1F, 0x00, 0x18, 0x00, 0x0E, 0x00,
855 0x08, 0x00, 0xFD, 0xFF, 0xF7, 0xFF, 0xEE, 0xFF, 0xE6, 0xFF, 0xDE, 0xFF,
856 0xD6, 0xFF, 0xD0, 0xFF, 0xC4, 0xFF, 0xC5, 0xFF, 0xB4, 0xFF, 0xB5, 0xFF,
857 0xAD, 0xFF, 0xA4, 0xFF, 0xA3, 0xFF, 0x9A, 0xFF, 0x96, 0xFF, 0x93, 0xFF,
858 0x8F, 0xFF, 0x89, 0xFF, 0x8A, 0xFF, 0x83, 0xFF, 0x84, 0xFF, 0x82, 0xFF,
859 0x7F, 0xFF, 0x81, 0xFF, 0x80, 0xFF, 0x80, 0xFF, 0x81, 0xFF, 0x83, 0xFF,
860 0x83, 0xFF, 0x89, 0xFF, 0x89, 0xFF, 0x8E, 0xFF, 0x90, 0xFF, 0x96, 0xFF,
861 0x99, 0xFF, 0x9F, 0xFF, 0xA4, 0xFF, 0xAB, 0xFF, 0xAF, 0xFF, 0xB8, 0xFF,
862 0xBA, 0xFF, 0xC7, 0xFF, 0xC8, 0xFF, 0xD6, 0xFF, 0xD6, 0xFF, 0xE4, 0xFF,
863 0xE7, 0xFF, 0xF3, 0xFF, 0xF7, 0xFF, 0x01, 0x00, 0x08, 0x00, 0x10, 0x00,
864 0x18, 0x00, 0x20, 0x00, 0x26, 0x00, 0x2F, 0x00, 0x35, 0x00, 0x3B, 0x00,
865 0x44, 0x00, 0x47, 0x00, 0x53, 0x00, 0x50, 0x00, 0x5F, 0x00, 0x5A, 0x00,
866 0x69, 0x00, 0x64, 0x00, 0x6E, 0x00, 0x6E, 0x00, 0x73, 0x00, 0x74, 0x00,
867 0x77, 0x00, 0x77, 0x00, 0x7B, 0x00, 0x78, 0x00, 0x7B, 0x00, 0x79, 0x00,
868 0x78, 0x00, 0x79, 0x00, 0x74, 0x00, 0x75, 0x00, 0x6F, 0x00, 0x6E, 0x00,
869 0x6B, 0x00, 0x65, 0x00, 0x63, 0x00, 0x5B, 0x00, 0x59, 0x00, 0x53, 0x00,
870 0x4C, 0x00, 0x47, 0x00, 0x41, 0x00, 0x39, 0x00, 0x34, 0x00, 0x2C, 0x00,
871 0x25, 0x00, 0x1F, 0x00, 0x15, 0x00, 0x11, 0x00, 0x06, 0x00, 0x03, 0x00,
872 0xF6, 0xFF, 0xF4, 0xFF, 0xE9, 0xFF, 0xE2, 0xFF, 0xDF, 0xFF, 0xD2, 0xFF,
873 0xCF, 0xFF, 0xC9, 0xFF, 0xBE, 0xFF, 0xBF, 0xFF, 0xB3, 0xFF, 0xB0, 0xFF,
874 0xAD, 0xFF, 0xA3, 0xFF, 0xA4, 0xFF, 0x9C, 0xFF, 0x9B, 0xFF, 0x96, 0xFF,
875 0x94, 0xFF, 0x92, 0xFF, 0x8E, 0xFF, 0x8F, 0xFF, 0x8C, 0xFF, 0x8D, 0xFF,
876 0x8B, 0xFF, 0x8E, 0xFF, 0x8B, 0xFF, 0x90, 0xFF, 0x8F, 0xFF, 0x92, 0xFF,
877 0x94, 0xFF, 0x9A, 0xFF, 0x98, 0xFF, 0xA1, 0xFF, 0xA0, 0xFF, 0xA9, 0xFF,
878 0xAB, 0xFF, 0xB2, 0xFF, 0xB5, 0xFF, 0xBE, 0xFF, 0xBF, 0xFF, 0xCC, 0xFF,
879 0xCB, 0xFF, 0xD7, 0xFF, 0xDB, 0xFF, 0xE3, 0xFF, 0xEB, 0xFF, 0xEF, 0xFF,
880 0xF9, 0xFF, 0xFD, 0xFF, 0x07, 0x00, 0x0E, 0x00, 0x13, 0x00, 0x1B, 0x00,
881 0x22, 0x00, 0x26, 0x00, 0x32, 0x00, 0x32, 0x00, 0x3D, 0x00, 0x40, 0x00,
882 0x45, 0x00, 0x4E, 0x00, 0x4E, 0x00, 0x56, 0x00, 0x5A, 0x00, 0x5B, 0x00,
883 0x64, 0x00, 0x61, 0x00, 0x68, 0x00, 0x69, 0x00, 0x6A, 0x00, 0x6D, 0x00,
884 0x6D, 0x00, 0x6F, 0x00, 0x6D, 0x00, 0x70, 0x00, 0x6B, 0x00, 0x6E, 0x00,
885 0x6A, 0x00, 0x69, 0x00, 0x67, 0x00, 0x63, 0x00, 0x61, 0x00, 0x5D, 0x00,
886 0x59, 0x00, 0x56, 0x00, 0x4F, 0x00, 0x4D, 0x00, 0x46, 0x00, 0x41, 0x00,
887 0x3C, 0x00, 0x36, 0x00, 0x2E, 0x00, 0x2D, 0x00, 0x1F, 0x00, 0x20, 0x00,
888 0x13, 0x00, 0x11, 0x00, 0x09, 0x00, 0x00, 0x00, 0xFE, 0xFF, 0xF1, 0xFF,
889 0xF1, 0xFF, 0xE5, 0xFF, 0xE2, 0xFF, 0xDA, 0xFF, 0xD4, 0xFF, 0xCF, 0xFF,
890 0xC8, 0xFF, 0xC3, 0xFF, 0xBE, 0xFF, 0xB9, 0xFF, 0xB3, 0xFF, 0xB1, 0xFF,
891 0xAA, 0xFF, 0xA8, 0xFF, 0xA6, 0xFF, 0x9F, 0xFF, 0xA2, 0xFF, 0x99, 0xFF,
892 0x9D, 0xFF, 0x97, 0xFF, 0x9A, 0xFF, 0x96, 0xFF, 0x99, 0xFF, 0x95, 0xFF,
893 0x9A, 0xFF, 0x96, 0xFF, 0x9E, 0xFF, 0x99, 0xFF, 0xA1, 0xFF, 0x9F, 0xFF,
894 0xA4, 0xFF, 0xA8, 0xFF, 0xAA, 0xFF, 0xB0, 0xFF, 0xB1, 0xFF, 0xB9, 0xFF,
895 0xBB, 0xFF, 0xC3, 0xFF, 0xC5, 0xFF, 0xCD, 0xFF, 0xD2, 0xFF, 0xD8, 0xFF,
896 0xDD, 0xFF, 0xE5, 0xFF, 0xEA, 0xFF, 0xF0, 0xFF, 0xF9, 0xFF, 0xFB, 0xFF,
897 0x07, 0x00, 0x07, 0x00, 0x15, 0x00, 0x12, 0x00, 0x21, 0x00, 0x20, 0x00,
898 0x2A, 0x00, 0x2F, 0x00, 0x34, 0x00, 0x39, 0x00, 0x3F, 0x00, 0x42, 0x00,
899 0x49, 0x00, 0x4B, 0x00, 0x51, 0x00, 0x52, 0x00, 0x59, 0x00, 0x57, 0x00,
900 0x5F, 0x00, 0x5C, 0x00, 0x62, 0x00, 0x60, 0x00, 0x65, 0x00, 0x61, 0x00,
901 0x66, 0x00, 0x62, 0x00, 0x63, 0x00, 0x64, 0x00, 0x5E, 0x00, 0x63, 0x00,
902 0x59, 0x00, 0x5E, 0x00, 0x56, 0x00, 0x57, 0x00, 0x4F, 0x00, 0x51, 0x00,
903 0x46, 0x00, 0x4A, 0x00, 0x3C, 0x00, 0x40, 0x00, 0x34, 0x00, 0x34, 0x00,
904 0x2C, 0x00, 0x26, 0x00, 0x21, 0x00, 0x1C, 0x00, 0x14, 0x00, 0x10, 0x00,
905 0x0A, 0x00, 0x01, 0x00, 0xFF, 0xFF, 0xF5, 0xFF, 0xF2, 0xFF, 0xEA, 0xFF,
906 0xE7, 0xFF, 0xDD, 0xFF, 0xDB, 0xFF, 0xD4, 0xFF, 0xCE, 0xFF, 0xCC, 0xFF,
907 0xC3, 0xFF, 0xC2, 0xFF, 0xBB, 0xFF, 0xB9, 0xFF, 0xB5, 0xFF, 0xAF, 0xFF,
908 0xB0, 0xFF, 0xA9, 0xFF, 0xAA, 0xFF, 0xA5, 0xFF, 0xA6, 0xFF, 0xA2, 0xFF,
909 0xA3, 0xFF, 0xA2, 0xFF, 0xA0, 0xFF, 0xA2, 0xFF, 0xA2, 0xFF, 0xA1, 0xFF,
910 0xA6, 0xFF, 0xA3, 0xFF, 0xAA, 0xFF, 0xA6, 0xFF, 0xAF, 0xFF, 0xAC, 0xFF,
911 0xB4, 0xFF, 0xB5, 0xFF, 0xB9, 0xFF, 0xBE, 0xFF, 0xC2, 0xFF, 0xC5, 0xFF,
912 0xCD, 0xFF, 0xCF, 0xFF, 0xD5, 0xFF, 0xDC, 0xFF, 0xDE, 0xFF, 0xE7, 0xFF,
913 0xEB, 0xFF, 0xF0, 0xFF, 0xF8, 0xFF, 0xFB, 0xFF, 0x03, 0x00, 0x08, 0x00,
914 0x0E, 0x00, 0x13, 0x00, 0x18, 0x00, 0x21, 0x00, 0x21, 0x00, 0x2C, 0x00,
915 0x2B, 0x00, 0x35, 0x00, 0x35, 0x00, 0x3F, 0x00, 0x3D, 0x00, 0x46, 0x00,
916 0x46, 0x00, 0x4B, 0x00, 0x4D, 0x00, 0x52, 0x00, 0x52, 0x00, 0x55, 0x00,
917 0x57, 0x00, 0x56, 0x00, 0x5C, 0x00, 0x59, 0x00, 0x59, 0x00, 0x5C, 0x00,
918 0x56, 0x00, 0x5D, 0x00, 0x55, 0x00, 0x59, 0x00, 0x52, 0x00, 0x55, 0x00,
919 0x4F, 0x00, 0x4D, 0x00, 0x4C, 0x00, 0x46, 0x00, 0x43, 0x00, 0x43, 0x00,
920 0x37, 0x00, 0x3B, 0x00, 0x31, 0x00, 0x2E, 0x00, 0x2A, 0x00, 0x24, 0x00,
921 0x1E, 0x00, 0x1C, 0x00, 0x11, 0x00, 0x12, 0x00, 0x08, 0x00, 0x04, 0x00,
922 0xFF, 0xFF, 0xF9, 0xFF, 0xF2, 0xFF, 0xF2, 0xFF, 0xE4, 0xFF, 0xE7, 0xFF,
923 0xDD, 0xFF, 0xDA, 0xFF, 0xD5, 0xFF, 0xD1, 0xFF, 0xC9, 0xFF, 0xCC, 0xFF,
924 0xBF, 0xFF, 0xC4, 0xFF, 0xB9, 0xFF, 0xBC, 0xFF, 0xB4, 0xFF, 0xB6, 0xFF,
925 0xB0, 0xFF, 0xB0, 0xFF, 0xAE, 0xFF, 0xAB, 0xFF, 0xAD, 0xFF, 0xAA, 0xFF,
926 0xAB, 0xFF, 0xAA, 0xFF, 0xAA, 0xFF, 0xAC, 0xFF, 0xAC, 0xFF, 0xAE, 0xFF,
927 0xAF, 0xFF, 0xB1, 0xFF, 0xB4, 0xFF, 0xB5, 0xFF, 0xBA, 0xFF, 0xBB, 0xFF,
928 0xC0, 0xFF, 0xC2, 0xFF, 0xC9, 0xFF, 0xC7, 0xFF, 0xD3, 0xFF, 0xD1, 0xFF,
929 0xDA, 0xFF, 0xDC, 0xFF, 0xE2, 0xFF, 0xE7, 0xFF, 0xEC, 0xFF, 0xF2, 0xFF,
930 0xF5, 0xFF, 0xFC, 0xFF, 0x02, 0x00, 0x04, 0x00, 0x0D, 0x00, 0x10, 0x00,
931 0x15, 0x00, 0x1C, 0x00, 0x1D, 0x00, 0x25, 0x00, 0x2A, 0x00, 0x2B, 0x00,
932 0x33, 0x00, 0x33, 0x00, 0x3C, 0x00, 0x3A, 0x00, 0x41, 0x00, 0x43, 0x00,
933 0x46, 0x00, 0x48, 0x00, 0x4B, 0x00, 0x4B, 0x00, 0x50, 0x00, 0x4E, 0x00,
934 0x51, 0x00, 0x50, 0x00, 0x53, 0x00, 0x51, 0x00, 0x50, 0x00, 0x52, 0x00,
935 0x4F, 0x00, 0x4E, 0x00, 0x4F, 0x00, 0x48, 0x00, 0x4C, 0x00, 0x45, 0x00,
936 0x44, 0x00, 0x42, 0x00, 0x3D, 0x00, 0x3B, 0x00, 0x36, 0x00, 0x34, 0x00,
937 0x2D, 0x00, 0x2D, 0x00, 0x24, 0x00, 0x24, 0x00, 0x1B, 0x00, 0x1A, 0x00,
938 0x13, 0x00, 0x0F, 0x00, 0x09, 0x00, 0x06, 0x00, 0xFE, 0xFF, 0xFD, 0xFF,
939 0xF4, 0xFF, 0xF2, 0xFF, 0xEC, 0xFF, 0xE6, 0xFF, 0xE5, 0xFF, 0xDC, 0xFF,
940 0xDC, 0xFF, 0xD4, 0xFF, 0xD3, 0xFF, 0xCD, 0xFF, 0xCB, 0xFF, 0xC6, 0xFF,
941 0xC4, 0xFF, 0xC1, 0xFF, 0xBD, 0xFF, 0xBD, 0xFF, 0xB8, 0xFF, 0xB8, 0xFF,
942 0xB7, 0xFF, 0xB2, 0xFF, 0xB6, 0xFF, 0xB2, 0xFF, 0xB3, 0xFF, 0xB2, 0xFF,
943 0xB3, 0xFF, 0xB2, 0xFF, 0xB7, 0xFF, 0xB2, 0xFF, 0xB9, 0xFF, 0xB7, 0xFF,
944 0xBA, 0xFF, 0xBE, 0xFF, 0xBD, 0xFF, 0xC4, 0xFF, 0xC4, 0xFF, 0xC8, 0xFF,
945 0xCB, 0xFF, 0xD1, 0xFF, 0xD0, 0xFF, 0xDB, 0xFF, 0xD7, 0xFF, 0xE2, 0xFF,
946 0xE2, 0xFF, 0xEB, 0xFF, 0xEA, 0xFF, 0xF3, 0xFF, 0xF5, 0xFF, 0xFC, 0xFF,
947 0x00, 0x00, 0x03, 0x00, 0x0A, 0x00, 0x0C, 0x00, 0x15, 0x00, 0x16, 0x00,
948 0x19, 0x00, 0x23, 0x00, 0x20, 0x00, 0x2B, 0x00, 0x2B, 0x00, 0x2D, 0x00,
949 0x35, 0x00, 0x35, 0x00, 0x39, 0x00, 0x3D, 0x00, 0x3E, 0x00, 0x40, 0x00,
950 0x45, 0x00, 0x42, 0x00, 0x49, 0x00, 0x45, 0x00, 0x4B, 0x00, 0x47, 0x00,
951 0x4C, 0x00, 0x47, 0x00, 0x4C, 0x00, 0x46, 0x00, 0x4C, 0x00, 0x45, 0x00,
952 0x46, 0x00, 0x46, 0x00, 0x3F, 0x00, 0x45, 0x00, 0x3A, 0x00, 0x3F, 0x00,
953 0x36, 0x00, 0x36, 0x00, 0x33, 0x00, 0x2E, 0x00, 0x2D, 0x00, 0x25, 0x00,
954 0x26, 0x00, 0x1E, 0x00, 0x1C, 0x00, 0x16, 0x00, 0x14, 0x00, 0x0D, 0x00,
955 0x0C, 0x00, 0x03, 0x00, 0x02, 0x00, 0xFC, 0xFF, 0xF7, 0xFF, 0xF5, 0xFF,
956 0xED, 0xFF, 0xEE, 0xFF, 0xE2, 0xFF, 0xE6, 0xFF, 0xDC, 0xFF, 0xDC, 0xFF,
957 0xD8, 0xFF, 0xD1, 0xFF, 0xD2, 0xFF, 0xCC, 0xFF, 0xCA, 0xFF, 0xC9, 0xFF,
958 0xC2, 0xFF, 0xC6, 0xFF, 0xBC, 0xFF, 0xC4, 0xFF, 0xB8, 0xFF, 0xC2, 0xFF,
959 0xB6, 0xFF, 0xBE, 0xFF, 0xB7, 0xFF, 0xBC, 0xFF, 0xB9, 0xFF, 0xBC, 0xFF,
960 0xB9, 0xFF, 0xBE, 0xFF, 0xBC, 0xFF, 0xC0, 0xFF, 0xC0, 0xFF, 0xC2, 0xFF,
961 0xC6, 0xFF, 0xC5, 0xFF, 0xCD, 0xFF, 0xC9, 0xFF, 0xD4, 0xFF, 0xCF, 0xFF,
962 0xDA, 0xFF, 0xD6, 0xFF, 0xE2, 0xFF, 0xDE, 0xFF, 0xE8, 0xFF, 0xE8, 0xFF,
963 0xEF, 0xFF, 0xF1, 0xFF, 0xF7, 0xFF, 0xF9, 0xFF, 0x00, 0x00, 0x02, 0x00,
964 0x08, 0x00, 0x0B, 0x00, 0x10, 0x00, 0x13, 0x00, 0x19, 0x00, 0x1B, 0x00,
965 0x1F, 0x00, 0x25, 0x00, 0x25, 0x00, 0x2B, 0x00, 0x2D, 0x00, 0x30, 0x00,
966 0x34, 0x00, 0x34, 0x00, 0x3A, 0x00, 0x37, 0x00, 0x40, 0x00, 0x3B, 0x00,
967 0x40, 0x00, 0x41, 0x00, 0x40, 0x00, 0x43, 0x00, 0x42, 0x00, 0x43, 0x00,
968 0x42, 0x00, 0x44, 0x00, 0x3E, 0x00, 0x44, 0x00, 0x3D, 0x00, 0x41, 0x00,
969 0x3A, 0x00, 0x3C, 0x00, 0x38, 0x00, 0x37, 0x00, 0x33, 0x00, 0x32, 0x00,
970 0x2E, 0x00, 0x2B, 0x00, 0x28, 0x00, 0x24, 0x00, 0x22, 0x00, 0x1D, 0x00,
971 0x19, 0x00, 0x16, 0x00, 0x12, 0x00, 0x0E, 0x00, 0x09, 0x00, 0x06, 0x00,
972 0x02, 0x00, 0xFD, 0xFF, 0xFA, 0xFF, 0xF6, 0xFF, 0xF0, 0xFF, 0xF0, 0xFF,
973 0xE7, 0xFF, 0xE9, 0xFF, 0xDF, 0xFF, 0xE3, 0xFF, 0xD8, 0xFF, 0xDB, 0xFF,
974 0xD4, 0xFF, 0xD3, 0xFF, 0xD0, 0xFF, 0xCC, 0xFF, 0xCD, 0xFF, 0xC6, 0xFF,
975 0xCB, 0xFF, 0xC2, 0xFF, 0xC6, 0xFF, 0xC2, 0xFF, 0xC1, 0xFF, 0xC3, 0xFF,
976 0xBF, 0xFF, 0xC3, 0xFF, 0xBE, 0xFF, 0xC3, 0xFF, 0xC0, 0xFF, 0xC4, 0xFF,
977 0xC2, 0xFF, 0xC6, 0xFF, 0xC6, 0xFF, 0xC6, 0xFF, 0xCD, 0xFF, 0xC9, 0xFF,
978 0xD2, 0xFF, 0xCE, 0xFF, 0xD5, 0xFF, 0xD9, 0xFF, 0xDD, 0xFF, 0xE2, 0xFF,
979 0xE7, 0xFF, 0xE9, 0xFF, 0xF1, 0xFF, 0xF1, 0xFF, 0xF5, 0xFF, 0xFA, 0xFF,
980 0xF9, 0xFF, 0x00, 0x00, 0xFD, 0xFF
981};
982
986
987BEGIN_EVENT_TABLE(ProgressDialog, wxDialogWrapper)
992
993//
994// Constructor
995//
998{
999}
1000
1002 const TranslatableString & message /* = {}*/,
1003 int flags /* = pdlgDefaultFlags */,
1004 const TranslatableString & sRemainingLabelText /* = {} */)
1006{
1007 Create(title, message, flags, sRemainingLabelText);
1008}
1009
1011 const MessageTable &columns,
1012 int flags /* = pdlgDefaultFlags */,
1013 const TranslatableString & sRemainingLabelText /* = {} */)
1015{
1016 Create(title, columns, flags, sRemainingLabelText);
1017}
1018
1019//
1020// Destructor
1021//
1023{
1024 // Delete the window disabler before hiding the dialog to allow
1025 // focus to return to the original window.
1026 mDisable.reset();
1027
1028 if (IsShown())
1029 {
1030 Show(false);
1031
1032 Beep();
1033 }
1034
1035#if defined(__WXGTK__)
1036 // Under GTK, when applying any effect that prompts the user, it's more than
1037 // like that FindFocus() will return NULL. So, make sure something has focus.
1038 if (GetParent()) {
1039 GetParent()->SetFocus();
1040 }
1041#endif
1042
1043 // Restore saved focus, but only if the window still exists.
1044 //
1045 // PRL: I'm conservatively preserving the old existence test, but I think
1046 // it's redundant now that we use wxWindowRef to avoid a dangling pointer
1047 if (mHadFocus && SearchForWindow(wxTopLevelWindows, mHadFocus)) {
1048 mHadFocus->SetFocus();
1049 }
1050
1051 using namespace std::chrono;
1052 wxLogInfo(
1053 "Operation '%s' took %f seconds. Poll was called %d times and took %f seconds. Yield was called %d times and took %f seconds.",
1054 GetTitle(), mElapsedTime / 1000.0,
1055 mPollsCount, duration_cast<duration<double>>(mTotalPollTime).count(),
1056 mYieldsCount, duration_cast<duration<double>>(mTotalYieldTime).count());
1057}
1058
1060{
1061 // There's a problem where the focus is not returned to the window that had
1062 // it before creating this object. The reason is because the focus events
1063 // that are sent to the parent window after the wxWindowDisabler are created
1064 // are tossed and focus will not get restored to the parent once the disabler
1065 // is deleted. (See bug #1173 for more info)
1066 //
1067 // So, we capture and restore the focus ourselves.
1068 mHadFocus = wxWindow::FindFocus();
1069
1070#if defined(__WXGTK__)
1071 // Under GTK, when applying any effect that prompts the user, it's more than
1072 // likely that FindFocus() will return NULL. So, make sure something has focus.
1073 if (GetParent())
1074 {
1075 GetParent()->SetFocus();
1076 }
1077#endif
1078}
1079
1081{
1082 mLastValue = 0;
1083
1084 mStartTime = wxGetUTCTimeMillis().GetValue();
1087 mElapsedTime = 0;
1088 mCancel = false;
1089 mStop = false;
1090
1091 // Because wxGTK is very sensitive about maintaining focus when
1092 // this window is not shown, we always show it. But, since we
1093 // want a 500ms delay before it's actually visible for those
1094 // quick tasks, we show it as transparent. If the initial
1095 // delay is exceeded, then we reset the dialog to full opacity.
1096 SetTransparent(0);
1097 mIsTransparent = true;
1098
1099 auto button = FindWindowById(wxID_CANCEL, this);
1100 if (button)
1101 button->Enable();
1102 button = FindWindowById(wxID_OK, this);
1103 if (button)
1104 button->Enable();
1105
1106 wxDialogWrapper::Show(true);
1107
1108 mTotalPollTime = {};
1109 mPollsCount = {};
1110 mTotalYieldTime = {};
1111 mYieldsCount = {};
1112}
1113
1115{
1116 SetTitle(title);
1117}
1118
1119// Add a NEW text column each time this is called.
1120void ProgressDialog::AddMessageAsColumn(wxBoxSizer * pSizer,
1121 const MessageColumn & column,
1122 bool bFirstColumn) {
1123
1124 // Assuming that we don't want empty columns, bail out if there is no text.
1125 if (column.empty())
1126 return;
1127
1128 // Join strings
1129 auto sText = column[0];
1130 std::for_each( column.begin() + 1, column.end(),
1131 [&](const TranslatableString &text)
1132 { sText.Join( text, wxT("\n") ); });
1133
1134 // Create a statictext object and add to the sizer
1135 wxStaticText* oText = safenew wxStaticText(this,
1136 wxID_ANY,
1137 sText.Translation(),
1138 wxDefaultPosition,
1139 wxDefaultSize,
1140 wxALIGN_LEFT);
1141 oText->SetName(sText.Translation()); // fix for bug 577 (NVDA/Narrator screen readers do not read static text in dialogs)
1142
1143 // If this is the first column then set the mMessage pointer so non-TimerRecord usages
1144 // will still work correctly in SetMessage()
1145 if (bFirstColumn) {
1146 mMessage = oText;
1147 }
1148
1149 pSizer->Add(oText, 1, wxEXPAND | wxALL, 5);
1150}
1151
1153 const TranslatableString & message /* = {} */,
1154 int flags /* = pdlgDefaultFlags */,
1155 const TranslatableString & sRemainingLabelText /* = {} */)
1156{
1157 MessageTable columns(1);
1158 columns.back().push_back(message);
1159 auto result = Create(title, columns, flags, sRemainingLabelText);
1160
1161 if (result) {
1162 // Record some values used in case of change of message
1163 // TODO: make the following work in case of message tables
1164 wxClientDC dc(this);
1165 dc.GetMultiLineTextExtent(message.Translation(), &mLastW, &mLastH);
1166 }
1167
1168 return result;
1169}
1170
1172 const MessageTable & columns,
1173 int flags /* = pdlgDefaultFlags */,
1174 const TranslatableString & sRemainingLabelText /* = {} */)
1175{
1176 Init();
1177
1178 wxWindow *parent =
1179#if defined(__WXMAC__)
1180 // Bug 2703: In release builds, the progress dialog will fall behind
1181 // the top level dialog (like effects dialogs). This does not happen
1182 // in debug builds and I was not able to track down the reason. So,
1183 // this is a workaround and should be reviewed as some point, like
1184 // when upgrading to the next WX version.
1185 GetParentForModalDialog(mHadFocus, 0);
1186#else
1187 GetParentForModalDialog(nullptr, 0);
1188#endif
1189
1190 // Set this boolean to indicate if we are using the "Elapsed" labels
1192 // Set this boolean to indicate if we confirm the Cancel/Stop actions
1194
1195 bool success = wxDialogWrapper::Create(parent,
1196 wxID_ANY,
1197 title,
1198 wxDefaultPosition,
1199 wxDefaultSize,
1200 wxDEFAULT_DIALOG_STYLE |
1201 wxFRAME_FLOAT_ON_PARENT);
1202 if (!success)
1203 {
1204 return false;
1205 }
1206
1207 SetName(); // This was added for NVDA screen reader and may now be redundant.
1208 SetExtraStyle(GetExtraStyle() | wxWS_EX_TRANSIENT); // Ancient code. Is it still required?
1209
1210 {
1211 wxWindow *window;
1212
1213 // There may be more than one column, so create a BoxSizer container
1214 auto uColSizer = std::make_unique<wxBoxSizer>(wxHORIZONTAL);
1215 auto colSizer = uColSizer.get();
1216
1217 // TODO: this setting-up of a grid of text in a sizer might be worth
1218 // extracting as a utility for building other dialogs.
1219 {
1220 bool bFirstCol = true;
1221 for (const auto &column : columns) {
1222 AddMessageAsColumn(colSizer, column, bFirstCol);
1223 bFirstCol = false;
1224 }
1225 }
1226
1227 // and put message column(s) into a main vertical sizer.
1228 auto vertSizer = std::make_unique<wxBoxSizer>(wxVERTICAL);
1229 vertSizer->Add(uColSizer.release(), 1, wxEXPAND | wxALL, 10);
1230
1231 mGauge = safenew wxGauge(this,
1232 wxID_ANY,
1233 1000,
1234 wxDefaultPosition,
1235 wxDefaultSize,
1236 wxGA_HORIZONTAL);
1237 vertSizer->Add(mGauge, 0, wxEXPAND | wxLEFT | wxRIGHT | wxBOTTOM, 10);
1238
1239 {
1240 auto uGridSizer = std::make_unique<wxFlexGridSizer>(2, 2, 10, 10);
1241 // Only one row if we are not going to show the elapsed time
1242 if (m_bShowElapsedTime == false) {
1243 uGridSizer = std::make_unique<wxFlexGridSizer>(1, 2, 10, 10);
1244 }
1245 auto gridSizer = uGridSizer.get();
1246
1247 if (m_bShowElapsedTime) {
1248 window = safenew wxStaticText(this,
1249 wxID_ANY,
1250 _("Elapsed Time:"),
1251 wxDefaultPosition,
1252 wxDefaultSize,
1253 wxALIGN_RIGHT);
1254
1255 window->SetName(window->GetLabel()); // fix for bug 577 (NVDA/Narrator screen readers do not read static text in dialogs)
1256 gridSizer->Add(window, 0, wxALIGN_RIGHT);
1257
1258 mElapsed = safenew wxStaticText(this,
1259 wxID_ANY,
1260 wxT("00:00:00"),
1261 wxDefaultPosition,
1262 wxDefaultSize,
1263 wxALIGN_LEFT);
1264
1265 mElapsed->SetName(mElapsed->GetLabel()); // fix for bug 577 (NVDA/Narrator screen readers do not read static text in dialogs)
1266 gridSizer->Add(mElapsed, 0, wxALIGN_LEFT);
1267 }
1268
1269 // Customised "Remaining" label text
1270 auto sRemainingText = sRemainingLabelText;
1271 if (sRemainingText.empty()) {
1272 sRemainingText = XO("Remaining Time:");
1273 }
1274
1275 window = safenew wxStaticText(this,
1276 wxID_ANY,
1277 sRemainingText.Translation(),
1278 wxDefaultPosition,
1279 wxDefaultSize,
1280 wxALIGN_RIGHT);
1281 window->SetName(window->GetLabel()); // fix for bug 577 (NVDA/Narrator screen readers do not read static text in dialogs)
1282 gridSizer->Add(window, 0, wxALIGN_RIGHT);
1283
1284 mRemaining = safenew wxStaticText(this,
1285 wxID_ANY,
1286 wxT("00:00:00"),
1287 wxDefaultPosition,
1288 wxDefaultSize,
1289 wxALIGN_LEFT);
1290 mRemaining->SetName(mRemaining->GetLabel()); // fix for bug 577 (NVDA/Narrator screen readers do not read static text in dialogs)
1291 gridSizer->Add(mRemaining, 0, wxALIGN_LEFT);
1292
1293 vertSizer->Add(uGridSizer.release(), 0, wxALIGN_CENTER | wxLEFT | wxRIGHT | wxBOTTOM, 10);
1294 }
1295
1296 {
1297 auto uButtonBar = std::make_unique<wxBoxSizer>(wxHORIZONTAL);
1298 auto buttonBarSizer = uButtonBar.get();
1299
1300 if (!(flags & pdlgHideStopButton)) {
1301 window = safenew wxButton(this, wxID_OK, _("Stop"));
1302 buttonBarSizer->Add(window, 0, wxRIGHT, 10);
1303 }
1304 if (!(flags & pdlgHideCancelButton)) {
1305 window = safenew wxButton(this, wxID_CANCEL, _("Cancel"));
1306 buttonBarSizer->Add(window, 0, wxRIGHT, 10);
1307 }
1308 vertSizer->Add(uButtonBar.release(), 0, wxALIGN_RIGHT | wxRIGHT | wxBOTTOM, 10);
1309 }
1310
1311 SetSizerAndFit(vertSizer.release());
1312 }
1313 Layout();
1314
1315 // Center progress bar on Parent if it is nice and wide, otherwise Center on screen.
1316 int parentWidth = -1, parentHeight=-1;
1317 if( GetParent() ) GetParent()->GetSize( &parentWidth, &parentHeight );
1318 if (parentWidth > 400)
1319 CenterOnParent();
1320 else
1321 CenterOnScreen();
1322
1323 Reinit();
1324
1325 // Even though we won't necessarily show the dialog due to the 500ms
1326 // delay, we MUST disable other windows/menus anyway since we run the risk
1327 // of allowing other tasks to run before this one is complete.
1328 //
1329 // Reviewed this code per Proposed Features #1, at
1330 // http://wiki.audacityteam.org/wiki/Proposal_Timer_Record_Improvements.
1331 // Note that this causes a problem for Timer Record wait dialog
1332 // (see TimerRecordDialog::RunWaitDialog()), because it makes it
1333 // impossible to do any editing, even in other open projects,
1334 // while waiting for Timer Record to start -- and then also
1335 // while it's recording, it has a ProgressDialog, so really,
1336 // no editing in any project until Timer Record finishes.
1337 mDisable = std::make_unique<wxWindowDisabler>(this);
1338
1339 return true;
1340}
1341
1342//
1343// Update the time and, optionally, the message
1344//
1346 int value, const TranslatableString & message)
1347{
1348 using namespace std::chrono;
1349 auto updatePollTime = finally([this, pollStart = high_resolution_clock::now()] {
1350 mTotalPollTime += high_resolution_clock::now() - pollStart;
1351 });
1352
1353 mPollsCount++;
1354
1355 if (mCancel)
1356 {
1357 // for compatibility with old Update, that returned false on cancel
1359 }
1360 else if (mStop)
1361 {
1362 return ProgressResult::Stopped;
1363 }
1364
1365 wxLongLong_t now = wxGetUTCTimeMillis().GetValue();
1366 mElapsedTime = now - mStartTime;
1367
1368 if (mElapsedTime < 500)
1369 {
1371 }
1372
1373 if (mIsTransparent)
1374 {
1375 SetTransparent(255);
1376 mIsTransparent = false;
1377 }
1378
1379 if (value <= 0)
1380 {
1381 value = 1;
1382 }
1383
1384 if (value > 1000)
1385 {
1386 value = 1000;
1387 }
1388
1389 wxLongLong_t estimate = mElapsedTime * 1000ll / value;
1390 wxLongLong_t remains = (estimate + mStartTime) - now;
1391
1392 SetMessage(message);
1393
1394 if (value != mLastValue)
1395 {
1396 mGauge->SetValue(value);
1397 mGauge->Update();
1398 mLastValue = value;
1399 }
1400
1401 // Only update if a full second has passed or track progress is complete
1402 if ((now - mLastUpdate > 1000) || (value == 1000))
1403 {
1404 if (m_bShowElapsedTime) {
1405 wxTimeSpan tsElapsed(0, 0, 0, mElapsedTime);
1406 mElapsed->SetLabel(tsElapsed.Format(wxT("%H:%M:%S")));
1407 mElapsed->SetName(mElapsed->GetLabel()); // fix for bug 577 (NVDA/Narrator screen readers do not read static text in dialogs)
1408 mElapsed->Update();
1409 }
1410
1411 wxTimeSpan tsRemains(0, 0, 0, remains);
1412 mRemaining->SetLabel(tsRemains.Format(wxT("%H:%M:%S")));
1413 mRemaining->SetName(mRemaining->GetLabel()); // fix for bug 577 (NVDA/Narrator screen readers do not read static text in dialogs)
1414 mRemaining->Update();
1415
1416 mLastUpdate = now;
1417 }
1418
1419 wxDialogWrapper::Update();
1420
1421 // Copied from wx 3.0.2 generic progress dialog
1422 //
1423 // we have to yield because not only we want to update the display but
1424 // also to process the clicks on the cancel and skip buttons
1425 // NOTE: using YieldFor() this call shouldn't give re-entrancy problems
1426 // for event handlers not interested to UI/user-input events.
1427 //
1428 // LL: Added timer category to prevent extreme delays when processing effects
1429 // (and probably other things). I do not yet know why this happens and
1430 // I'm not too keen on having timer events processed here, but you do
1431 // what you have to do.
1432
1433 // Nyquist effects call Update on every callback, but YieldFor is
1434 // quite slow on Linux / Mac, so don't call too frequently. (bug 1575)
1435 if ((now - mYieldTimer > 50) || (value == 1000)) {
1436 const auto yieldStart = high_resolution_clock::now();
1437 mYieldsCount++;
1438 wxEventLoopBase::GetActive()->YieldFor(wxEVT_CATEGORY_UI | wxEVT_CATEGORY_USER_INPUT | wxEVT_CATEGORY_TIMER);
1439 mTotalYieldTime += high_resolution_clock::now() - yieldStart;
1440 mYieldTimer = now;
1441 }
1442
1444}
1445
1446//
1447// Update the time and, optionally, the message
1448//
1450 double current, const TranslatableString & message)
1451{
1452 return Update((int)(current * 1000), message);
1453}
1454
1455//
1456// Update the time and, optionally, the message
1457//
1459 wxULongLong_t current, wxULongLong_t total, const TranslatableString & message)
1460{
1461 if (total != 0)
1462 {
1463 return Update((int)(current * 1000 / total), message);
1464 }
1465 else
1466 {
1467 return Update(1000, message);
1468 }
1469}
1470
1471//
1472// Update the time and, optionally, the message
1473//
1475 wxLongLong current, wxLongLong total, const TranslatableString & message)
1476{
1477 if (total.GetValue() != 0)
1478 {
1479 return Update((int)(current.GetValue() * 1000ll / total.GetValue()), message);
1480 }
1481 else
1482 {
1483 return Update(1000, message);
1484 }
1485}
1486
1487//
1488// Update the time and, optionally, the message
1489//
1491 wxLongLong_t current, wxLongLong_t total, const TranslatableString & message)
1492{
1493 if (total != 0)
1494 {
1495 return Update((int)(current * 1000ll / total), message);
1496 }
1497 else
1498 {
1499 return Update(1000, message);
1500 }
1501}
1502
1503//
1504// Update the time and, optionally, the message
1505//
1507 int current, int total, const TranslatableString & message)
1508{
1509 if (total != 0)
1510 {
1511 return Update((int)(current * ((double)(1000.0 / total))), message);
1512 }
1513 else
1514 {
1515 return Update(1000, message);
1516 }
1517}
1518
1520 unsigned long long numerator, unsigned long long denominator,
1521 const TranslatableString& message)
1522{
1523 return Update(numerator, denominator, message);
1524}
1525
1526//
1527// Update the time and, optionally, the message
1528//
1530 double current, double total, const TranslatableString & message)
1531{
1532 if (total != 0)
1533 {
1534 return Update((int)(current * 1000.0 / total), message);
1535 }
1536 else
1537 {
1538 return Update(1000, message);
1539 }
1540}
1541
1542//
1543// Update the message text
1544//
1546{
1547 if (!message.empty())
1548 {
1549 mMessage->SetLabel(message.Translation());
1550
1551 int w, h;
1552 wxClientDC dc(mMessage);
1553 dc.GetMultiLineTextExtent(message.Translation(), &w, &h);
1554
1555 auto sizeUpdated = false;
1556 const auto currentSize = GetClientSize();
1557 auto ds = currentSize;
1558
1559 // TODO: make the following work in case of message tables
1560 if (w > mLastW)
1561 {
1562 ds.x += (w - mLastW);
1563 sizeUpdated = true;
1564 mLastW = w;
1565 }
1566
1567 if (h > mLastH)
1568 {
1569 ds.y += (h - mLastH);
1570 sizeUpdated = true;
1571 mLastH = h;
1572 }
1573
1574 if (sizeUpdated)
1575 {
1576#if defined(__WXMAC__)
1577 wxSize sz = mMessage->GetSize();
1578 mMessage->SetMinSize(wxSize(wxMax(sz.x, mLastW), wxMax(sz.y, mLastH)));
1579#endif
1580 // No need to adjust for the margin here since we only add
1581 // to the existing dimensions.
1582 ds.x = wxMax(wxMax(ds.x, mLastW), wxMax(ds.y, mLastH));
1583 SetClientSize(ds);
1584 SetPosition(GetPosition() - (ds - currentSize) / 2);
1585 wxDialogWrapper::Update();
1586 }
1587 }
1588}
1589
1590//
1591// Recursivaly search the window list for the given window.
1592//
1593bool ProgressDialog::SearchForWindow(const wxWindowList & list, const wxWindow *searchfor) const
1594{
1595 for (auto win : list)
1596 {
1597 if (win == searchfor || SearchForWindow(win->GetChildren(), searchfor))
1598 {
1599 return true;
1600 }
1601 }
1602
1603 return false;
1604}
1605
1606void ProgressDialog::OnCancel(wxCommandEvent & WXUNUSED(event))
1607{
1608 if (!ConfirmAction(
1609 XO("Are you sure you wish to cancel?"),
1610 XO("Confirm Cancel"), wxID_CANCEL)) {
1611 return;
1612 }
1613 FindWindowById(wxID_CANCEL, this)->Disable();
1614 mCancel = true;
1615}
1616
1617void ProgressDialog::OnStop(wxCommandEvent & WXUNUSED(event))
1618{
1619 if (!ConfirmAction(
1620 XO("Are you sure you wish to stop?"),
1621 XO("Confirm Stop"), wxID_OK)) {
1622 return;
1623 }
1624 FindWindowById(wxID_OK, this)->Disable();
1625 mCancel = false;
1626 mStop = true;
1627}
1628
1629void ProgressDialog::OnCloseWindow(wxCloseEvent & WXUNUSED(event))
1630{
1631 if (!ConfirmAction(
1632 XO("Are you sure you wish to close?"), XO("Confirm Close"))) {
1633 return;
1634 }
1635 mCancel = true;
1636}
1637
1639{
1640 int after;
1641 bool should;
1642 wxString name;
1643
1644 gPrefs->Read(wxT("/GUI/BeepOnCompletion"), &should, false);
1645 gPrefs->Read(wxT("/GUI/BeepAfterDuration"), &after, 60);
1646 gPrefs->Read(wxT("/GUI/BeepFileName"), &name, wxEmptyString);
1647
1648 if (should && wxGetUTCTimeMillis().GetValue() - mStartTime > after * 1000)
1649 {
1650 wxBusyCursor busy;
1651 wxSound s;
1652
1653 if (name.empty())
1654 {
1655 s.Create(sizeof(beep), beep);
1656 }
1657 else
1658 {
1659 s.Create(name);
1660 }
1661
1662 if (s.IsOk())
1663 {
1664 s.Play(wxSOUND_SYNC);
1665 }
1666 }
1667}
1668
1669// Confirm action taken by user.
1670// Returns TRUE if the user confirms Yes
1672 const TranslatableString & sTitle,
1673 int iButtonID /* = -1 */) {
1674
1675 // Check if confirmations are enabled?
1676 // If not then return TRUE
1677 if (m_bConfirmAction == false) {
1678 return true;
1679 }
1680
1681 AudacityMessageDialog dlgMessage(
1682 this,
1683 sPrompt,
1684 sTitle,
1685 wxYES_NO | wxICON_QUESTION | wxNO_DEFAULT | wxSTAY_ON_TOP );
1686 int iAction = dlgMessage.ShowModal();
1687
1688 bool bReturn = (iAction == wxID_YES);
1689 if ((bReturn == false) && (iButtonID > -1)) {
1690 // Set the focus back to the relevant button
1691 FindWindowById(iButtonID, this)->SetFocus();
1692 }
1693
1694 return bReturn;
1695}
1696
1698 const TranslatableString & title,
1699 const MessageTable & columns,
1700 int flags /* = pdlgDefaultFlags */,
1701 const TranslatableString & sRemainingLabelText /* = {} */)
1702: ProgressDialog(title, columns, flags, sRemainingLabelText)
1703{
1704 mDuration = duration;
1705}
1706
1708{
1709 if (mCancel)
1710 {
1711 // for compatibility with old Update, that returned false on cancel
1713 }
1714 else if (mStop)
1715 {
1716 return ProgressResult::Stopped;
1717 }
1718
1719 wxLongLong_t now = wxGetUTCTimeMillis().GetValue();
1720 wxLongLong_t elapsed = now - mStartTime;
1721
1722 if (elapsed < 500)
1723 {
1725 }
1726
1727 if (mIsTransparent)
1728 {
1729 SetTransparent(255);
1730 mIsTransparent = false;
1731 }
1732
1733 wxLongLong_t remains = mStartTime + mDuration - now;
1734
1735 int nGaugeValue = (1000 * elapsed) / mDuration; // range = [0,1000]
1736 // Running in TimerRecordDialog::RunWaitDialog(), for some unknown reason,
1737 // nGaugeValue here is often a little over 1000.
1738 // From testing, it's never shown bigger than 1009, but
1739 // give it a little extra, to 1010.
1740 // wxASSERT((nGaugeValue >= 0) && (nGaugeValue <= 1000)); // This ought to work.
1741 // wxASSERT((nGaugeValue >= 0) && (nGaugeValue <= 1010));
1742 //
1743 // stf. Update was being called after wxMilliSleep(<ms>), which could be up to <ms>
1744 // beyond the completion time. My guess is that the microsleep in RunWaitDialog was originally 10 ms
1745 // (same as other uses of Update) but was updated to kTimerInterval = 50 ms, thus triggering
1746 // the Assert (Bug 1367). By calling Update() before sleeping then I think nGaugeValue <= 1000 should work.
1747 wxASSERT((nGaugeValue >= 0) && (nGaugeValue <= 1000));
1748
1749 if (nGaugeValue != mLastValue)
1750 {
1751 mGauge->SetValue(nGaugeValue);
1752 mGauge->Update();
1753 mLastValue = nGaugeValue;
1754 }
1755
1756 // Only update if a full second has passed.
1757 if (now - mLastUpdate > 1000)
1758 {
1759 // Bug 1952:
1760 // wxTimeSpan will assert on ridiculously large values.
1761 // We silently wrap the displayed range at one day.
1762 // You'll only see the remaining hours, mins and secs.
1763 // With a + sign, if the time was wrapped.
1764 const wxLongLong_t wrapTime = 24 * 60 * 60 * 1000;
1765 if (m_bShowElapsedTime) {
1766 wxTimeSpan tsElapsed(0, 0, 0, elapsed % wrapTime);
1767 mElapsed->SetLabel(tsElapsed.Format(wxT("%H:%M:%S")) + ((elapsed >= wrapTime) ? " +":""));
1768 mElapsed->Update();
1769 }
1770
1771 wxTimeSpan tsRemains(0, 0, 0, remains % wrapTime);
1772 mRemaining->SetLabel(tsRemains.Format(wxT("%H:%M:%S")) + ((remains >= wrapTime) ? " +":""));
1773 mRemaining->Update();
1774
1775 mLastUpdate = now;
1776 }
1777
1778 // Copied from wx 3.0.2 generic progress dialog
1779 //
1780 // we have to yield because not only we want to update the display but
1781 // also to process the clicks on the cancel and skip buttons
1782 // NOTE: using YieldFor() this call shouldn't give re-entrancy problems
1783 // for event handlers not interested to UI/user-input events.
1784 //
1785 // LL: Added timer category to prevent extreme delays when processing effects
1786 // (and probably other things). I do not yet know why this happens and
1787 // I'm not too keen on having timer events processed here, but you do
1788 // what you have to do.
1789 // JKC: Added thread category, since blocking a thread message could cause things
1790 // to gum up.
1791 // See http://trac.wxwidgets.org/ticket/14027 for discussion of why
1792 // YieldFor is flaky.
1793 // Conclusion... use wxEVT_CATEGORY_ALL since with the list below, we
1794 // are pretty much there already.
1795 // wxEVT_CATEGORY_UI |
1796 // wxEVT_CATEGORY_USER_INPUT |
1797 // wxEVT_CATEGORY_TIMER |
1798 // wxEVT_CATEGORY_THREAD
1799
1800 wxEventLoopBase::GetActive()->YieldFor(wxEVT_CATEGORY_ALL );
1801 // JKC: Yielding twice, because e.g. a timer can build up a lot of events, and we
1802 // really want to make sure they are worked through.
1803 wxEventLoopBase::GetActive()->YieldFor(wxEVT_CATEGORY_ALL );
1804
1805 // MY: Added this after the YieldFor to check we haven't changed the outcome based on buttons pressed...
1806 auto iReturn = ProgressResult::Success;
1807 if (mCancel)
1808 {
1809 iReturn = ProgressResult::Cancelled;
1810 }
1811 else if (mStop)
1812 {
1813 iReturn = ProgressResult::Stopped;
1814 }
1815 return iReturn;
1816}
wxT("CloseDown"))
END_EVENT_TABLE()
EVT_BUTTON(wxID_NO, DependencyDialog::OnNo) EVT_BUTTON(wxID_YES
const TranslatableString name
Definition: Distortion.cpp:74
XO("Cut/Copy/Paste")
#define _(s)
Definition: Internat.h:75
#define safenew
Definition: MemoryX.h:10
static const auto title
FileConfig * gPrefs
Definition: Prefs.cpp:70
static const unsigned char beep[]
@ pdlgConfirmStopCancel
@ pdlgHideStopButton
@ pdlgHideElapsedTime
@ pdlgHideCancelButton
Wrap wxMessageDialog so that caption IS translatable.
ProgressDialog Class.
std::unique_ptr< wxWindowDisabler > mDisable
wxStaticText * mElapsed
wxGauge * mGauge
void AddMessageAsColumn(wxBoxSizer *pSizer, const MessageColumn &column, bool bFirstColumn)
void Reinit() override
Reset the dialog state.
std::chrono::nanoseconds mTotalPollTime
void Beep() const
void OnCancel(wxCommandEvent &e)
wxStaticText * mRemaining
bool SearchForWindow(const wxWindowList &list, const wxWindow *searchfor) const
wxLongLong_t mElapsedTime
wxStaticText * mMessage
wxLongLong_t mStartTime
virtual ~ProgressDialog()
wxLongLong_t mLastUpdate
std::vector< MessageColumn > MessageTable
ProgressResult Poll(unsigned long long numerator, unsigned long long denominator, const TranslatableString &message={}) override
Update the bar and poll for clicks. Call only on the main thread.
wxLongLong_t mYieldTimer
ProgressDialog()
Methods for ProgressDialog.
bool Create(const TranslatableString &title, const TranslatableString &message={}, int flags=pdlgDefaultFlags, const TranslatableString &sRemainingLabelText={})
std::chrono::nanoseconds mTotalYieldTime
unsigned mPollsCount
void SetDialogTitle(const TranslatableString &title) override
Change the dialog's title.
void OnCloseWindow(wxCloseEvent &e)
void OnStop(wxCommandEvent &e)
bool ConfirmAction(const TranslatableString &sPrompt, const TranslatableString &sTitle, int iButtonID=-1)
std::vector< TranslatableString > MessageColumn
unsigned mYieldsCount
void SetMessage(const TranslatableString &message) override
Change an existing dialog's message.
ProgressResult Update(int value, const TranslatableString &message={})
wxWindowRef mHadFocus
TimerProgressDialog(const wxLongLong_t duration, const TranslatableString &title, const MessageTable &columns, int flags=pdlgDefaultFlags, const TranslatableString &sRemainingLabelText={})
wxLongLong_t mDuration
ProgressResult UpdateProgress()
Holds a msgid for the translation catalog; may also bind format arguments.
wxString Translation() const
void SetTitle(const TranslatableString &title)
bool Create(wxWindow *parent, wxWindowID id, const TranslatableString &title, const wxPoint &pos=wxDefaultPosition, const wxSize &size=wxDefaultSize, long style=wxDEFAULT_DIALOG_STYLE, const TranslatableString &name=XO("Dialog"))
ProgressResult
Definition: BasicUI.h:145
wxWeakRef< wxTextCtrl > sText
Definition: LogWindow.cpp:44